├── Formula ├── sokit.rb ├── apue.rb ├── sweather.rb └── sqrt.rb ├── README.md └── install.rb /Formula/sokit.rb: -------------------------------------------------------------------------------- 1 | 2 | class Sokit < Formula 3 | desc "The origin author and page:\nhttps://github.com/sinpolib/sokit\nfamous tool for debug with socket\n ----by saka" 4 | homepage "https://juejin.im/post/5a770f17f265da4e80778caa" 5 | url "https://raw.githubusercontent.com/rangaofei/SWeather/master/pack/sokit-1.1.1.tar.gz" 6 | sha256 "78913c71cd3afdc2ab5d43ed5dbe51abf7d2c7e78959e210766c280b78e82cb8" 7 | version "1.1.1" 8 | depends_on "qt" 9 | def install 10 | bin.install "sokit" 11 | end 12 | test do 13 | system "false" 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /Formula/apue.rb: -------------------------------------------------------------------------------- 1 | # Documentation: https://docs.brew.sh/Formula-Cookbook.html 2 | # http://www.rubydoc.info/github/Homebrew/brew/master/Formula 3 | # PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST! 4 | class Apue < Formula 5 | desc "libapue for apue\n ----by saka" 6 | homepage "https://juejin.im/user/5855ebea8d6d810065a4befa" 7 | url "https://raw.githubusercontent.com/rangaofei/apue/master/lib/apue-1.0.tar.gz" 8 | sha256 "7e84d03563f7f0119f2d946cc9f439192e582b65a504c39f4158fea7f38f7cbd" 9 | def install 10 | lib.install "libapue.a" 11 | include.install "apue.h" 12 | end 13 | test do 14 | # `test do` will create, run in and delete a temporary directory. 15 | # 16 | # This test will fail and we won't accept that! For Homebrew/homebrew-core 17 | # this will need to be a test that verifies the functionality of the 18 | # software. Run the test with `brew test apue`. Options passed 19 | # to `brew install` such as `--HEAD` also need to be provided to `brew test`. 20 | # 21 | # The installed folder is not in the path, so use the entire path to any 22 | # executables being tested: `system "#{bin}/program", "do", "something"`. 23 | system "false" 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HomebrewInstall 2 | 一个简单的在安装时提供选择源的脚本。 3 | 4 | 基于官方脚本修改: 5 | 6 | 1.启动iterm终端,输入以下命令: 7 | ``` 8 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/rangaofei/HomebrewInstall/master/install.rb)" 9 | ``` 10 | 11 | 此时会自动执行脚本,输出以下内容: 12 | 13 | ``` 14 |  ~/ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/rangaofei/HomebrewInstall/master/install.rb)" 15 | 请输入您要选择的源 16 | 0.HomeBrew官方镜像: 17 | brew: https://github.com/Homebrew/brew 18 | core: https://github.com/Homebrew/homebrew-core 19 | 1.清华大学镜像: 20 | brew: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git 21 | core: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git 22 | 2.中科大镜像: 23 | brew: https://mirrors.ustc.edu.cn/brew.git 24 | core: https://mirrors.ustc.edu.cn/homebrew-core.git 25 | -------------请输入0,1,2选择源地址-------------- 26 | ``` 27 | 2.选择对应的源编号,输入对应的数字,即可使用相应的源 28 | ``` 29 | 0 30 | 你选择的是官方镜像 31 | ``` 32 | 请忽略警告 33 | 34 | 假如输入的不是0、1、2中的一个数字,则会提示默认选择官方安装 35 | 3.官方流程 36 | ``` 37 | ==> This script will install: 38 | /usr/local/bin/brew 39 | /usr/local/share/doc/homebrew 40 | /usr/local/share/man/man1/brew.1 41 | /usr/local/share/zsh/site-functions/_brew 42 | /usr/local/etc/bash_completion.d/brew 43 | /usr/local/Homebrew 44 | 45 | Press RETURN to continue or any other key to abort 46 | 47 | ``` 48 | 点击enter等待安装完成 49 | -------------------------------------------------------------------------------- /Formula/sweather.rb: -------------------------------------------------------------------------------- 1 | # Documentation: https://docs.brew.sh/Formula-Cookbook.html 2 | # http://www.rubydoc.info/github/Homebrew/brew/master/Formula 3 | # PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST! 4 | 5 | class Sweather < Formula 6 | desc "一个非常简单的获取天气客户端\n ----by saka" 7 | homepage "https://juejin.im/user/5855ebea8d6d810065a4befa/posts" 8 | url "https://raw.githubusercontent.com/rangaofei/SWeather/master/pack/sweather-1.3.3.tar.gz" 9 | sha256 "dea7f56cd8f1d1894e0f0f759549e010ddcf686cabeea377f5e527bc3c9fb1dc" 10 | 11 | depends_on "cmake" => :build 12 | # depends_on "curl"=>:run 13 | def install 14 | etc.install Dir["assets/*"] 15 | mkdir "build" do 16 | system "cmake", "..",*std_cmake_args 17 | system "make" 18 | system "make", "install" # if this fails, try separate make/make install steps 19 | 20 | end 21 | end 22 | 23 | test do 24 | # `test do` will create, run in and delete a temporary directory. 25 | # 26 | # This test will fail and we won't accept that! For Homebrew/homebrew-core 27 | # this will need to be a test that verifies the functionality of the 28 | # software. Run the test with `brew test sweatheraaa`. Options passed 29 | # to `brew install` such as `--HEAD` also need to be provided to `brew test`. 30 | # 31 | # The installed folder is not in the path, so use the entire path to any 32 | # executables being tested: `system "#{bin}/program", "do", "something"`. 33 | system "false" 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /Formula/sqrt.rb: -------------------------------------------------------------------------------- 1 | # Documentation: https://docs.brew.sh/Formula-Cookbook.html 2 | # http://www.rubydoc.info/github/Homebrew/brew/master/Formula 3 | # PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST! 4 | 5 | class Sqrt < Formula 6 | desc "计算平方根的小工具\n --by saka" 7 | homepage "https://juejin.im/post/5a55d04f6fb9a01c9405bdcb" 8 | url "https://raw.githubusercontent.com/rgf456/HomebrewInstall/master/sqrt-1.0.tar.gz" 9 | sha256 "8ac718c17dbaac738eeb621e832576d6960c9c60b1fb5fec8e8616a37e450217" 10 | 11 | depends_on "cmake" => :build 12 | 13 | def install 14 | # ENV.deparallelize # if your formula fails when building in parallel 15 | 16 | # Remove unrecognized options if warned by configure 17 | # system "./configure", "--disable-debug", 18 | # "--disable-dependency-tracking", 19 | # "--disable-silent-rules", 20 | # "--prefix=#{prefix}" 21 | mkdir "build" do 22 | system "cmake", "..", *std_cmake_args 23 | system "make" 24 | system "make", "install" # if this fails, try separate make/make install steps 25 | end 26 | end 27 | 28 | test do 29 | # `test do` will create, run in and delete a temporary directory. 30 | # 31 | # This test will fail and we won't accept that! For Homebrew/homebrew-core 32 | # this will need to be a test that verifies the functionality of the 33 | # software. Run the test with `brew test sqrt`. Options passed 34 | # to `brew install` such as `--HEAD` also need to be provided to `brew test`. 35 | # 36 | # The installed folder is not in the path, so use the entire path to any 37 | # executables being tested: `system "#{bin}/program", "do", "something"`. 38 | system "false" 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /install.rb: -------------------------------------------------------------------------------- 1 | #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby 2 | # This script installs to /usr/local only. To install elsewhere you can just 3 | # untar https://github.com/Homebrew/brew/tarball/master anywhere you like or 4 | # change the value of HOMEBREW_PREFIX. 5 | 6 | 7 | HOMEBREW_PREFIX = "/usr/local".freeze 8 | HOMEBREW_REPOSITORY = "/usr/local/Homebrew".freeze 9 | HOMEBREW_CACHE = "#{ENV["HOME"]}/Library/Caches/Homebrew".freeze 10 | HOMEBREW_OLD_CACHE = "/Library/Caches/Homebrew".freeze 11 | BREW_REPO = "https://github.com/Homebrew/brew" 12 | CORE_TAP_REPO = "https://github.com/Homebrew/homebrew-core" 13 | 14 | puts "请输入您要选择的源" 15 | print <#{Tty.bold} #{args.shell_s}#{Tty.reset}" 89 | end 90 | 91 | def warn(warning) 92 | puts "#{Tty.red}Warning#{Tty.reset}: #{warning.chomp}" 93 | end 94 | 95 | def system(*args) 96 | abort "Failed during: #{args.shell_s}" unless Kernel.system(*args) 97 | end 98 | 99 | def sudo(*args) 100 | args.unshift("-A") unless ENV["SUDO_ASKPASS"].nil? 101 | ohai "/usr/bin/sudo", *args 102 | system "/usr/bin/sudo", *args 103 | end 104 | 105 | def getc 106 | system "/bin/stty raw -echo" 107 | if STDIN.respond_to?(:getbyte) 108 | STDIN.getbyte 109 | else 110 | STDIN.getc 111 | end 112 | ensure 113 | system "/bin/stty -raw echo" 114 | end 115 | 116 | def wait_for_user 117 | puts 118 | puts "Press RETURN to continue or any other key to abort" 119 | c = getc 120 | # we test for \r and \n because some stuff does \r instead 121 | abort unless (c == 13) || (c == 10) 122 | end 123 | 124 | class Version 125 | include Comparable 126 | attr_reader :parts 127 | 128 | def initialize(str) 129 | @parts = str.split(".").map { |p| p.to_i } 130 | end 131 | 132 | def <=>(other) 133 | parts <=> self.class.new(other).parts 134 | end 135 | end 136 | 137 | def force_curl? 138 | ARGV.include?("--force-curl") 139 | end 140 | 141 | def macos_version 142 | @macos_version ||= Version.new(`/usr/bin/sw_vers -productVersion`.chomp[/10\.\d+/]) 143 | end 144 | 145 | def should_install_command_line_tools? 146 | return false if force_curl? 147 | return false if macos_version < "10.9" 148 | !File.exist?("/Library/Developer/CommandLineTools/usr/bin/git") || 149 | !File.exist?("/usr/include/iconv.h") 150 | end 151 | 152 | def git 153 | return false if force_curl? 154 | 155 | @git ||= if ENV["GIT"] && File.executable?(ENV["GIT"]) 156 | ENV["GIT"] 157 | elsif Kernel.system "/usr/bin/which -s git" 158 | "git" 159 | else 160 | exe = `xcrun -find git 2>/dev/null`.chomp 161 | exe if $? && $?.success? && !exe.empty? && File.executable?(exe) 162 | end 163 | 164 | return unless @git 165 | # Github only supports HTTPS fetches on 1.7.10 or later: 166 | # https://help.github.com/articles/https-cloning-errors 167 | `#{@git} --version` =~ /git version (\d\.\d+\.\d+)/ 168 | return if $1.nil? 169 | return if Version.new($1) < "1.7.10" 170 | 171 | @git 172 | end 173 | 174 | def user_only_chmod?(d) 175 | return false unless File.directory?(d) 176 | mode = File.stat(d).mode & 0777 177 | # u = (mode >> 6) & 07 178 | # g = (mode >> 3) & 07 179 | # o = (mode >> 0) & 07 180 | mode != 0755 181 | end 182 | 183 | def chmod?(d) 184 | File.exist?(d) && !(File.readable?(d) && File.writable?(d) && File.executable?(d)) 185 | end 186 | 187 | def chown?(d) 188 | !File.owned?(d) 189 | end 190 | 191 | def chgrp?(d) 192 | !File.grpowned?(d) 193 | end 194 | 195 | # Invalidate sudo timestamp before exiting (if it wasn't active before). 196 | Kernel.system "/usr/bin/sudo -n -v 2>/dev/null" 197 | at_exit { Kernel.system "/usr/bin/sudo", "-k" } unless $?.success? 198 | 199 | # The block form of Dir.chdir fails later if Dir.CWD doesn't exist which I 200 | # guess is fair enough. Also sudo prints a warning message for no good reason 201 | Dir.chdir "/usr" 202 | 203 | ####################################################################### script 204 | abort "See Linuxbrew: http://linuxbrew.sh/" if RUBY_PLATFORM.to_s.downcase.include?("linux") 205 | abort "Mac OS X too old, see: https://github.com/mistydemeo/tigerbrew" if macos_version < "10.5" 206 | abort "Don't run this as root!" if Process.uid.zero? 207 | abort <<-EOABORT unless `dsmemberutil checkmembership -U "#{ENV["USER"]}" -G admin`.include? "user is a member" 208 | This script requires the user #{ENV["USER"]} to be an Administrator. 209 | EOABORT 210 | # Tests will fail if the prefix exists, but we don't have execution 211 | # permissions. Abort in this case. 212 | abort <<-EOABORT if File.directory?(HOMEBREW_PREFIX) && (!File.executable? HOMEBREW_PREFIX) 213 | The Homebrew prefix, #{HOMEBREW_PREFIX}, exists but is not searchable. If this is 214 | not intentional, please restore the default permissions and try running the 215 | installer again: 216 | sudo chmod 775 #{HOMEBREW_PREFIX} 217 | EOABORT 218 | 219 | ohai "This script will install:" 220 | puts "#{HOMEBREW_PREFIX}/bin/brew" 221 | puts "#{HOMEBREW_PREFIX}/share/doc/homebrew" 222 | puts "#{HOMEBREW_PREFIX}/share/man/man1/brew.1" 223 | puts "#{HOMEBREW_PREFIX}/share/zsh/site-functions/_brew" 224 | puts "#{HOMEBREW_PREFIX}/etc/bash_completion.d/brew" 225 | puts HOMEBREW_REPOSITORY.to_s 226 | 227 | group_chmods = %w[ bin bin/brew etc Frameworks include lib sbin share var 228 | etc/bash_completion.d lib/pkgconfig var/log 229 | share/aclocal share/doc share/info share/locale share/man 230 | share/man/man1 share/man/man2 share/man/man3 share/man/man4 231 | share/man/man5 share/man/man6 share/man/man7 share/man/man8]. 232 | map { |d| File.join(HOMEBREW_PREFIX, d) }. 233 | select { |d| chmod?(d) } 234 | # zsh refuses to read from these directories if group writable 235 | zsh_dirs = %w[share/zsh share/zsh/site-functions]. 236 | map { |d| File.join(HOMEBREW_PREFIX, d) } 237 | user_chmods = zsh_dirs.select { |d| user_only_chmod?(d) } 238 | chmods = group_chmods + user_chmods 239 | chowns = chmods.select { |d| chown?(d) } 240 | chgrps = chmods.select { |d| chgrp?(d) } 241 | mkdirs = %w[Cellar Homebrew Frameworks bin etc include lib opt sbin share share/zsh share/zsh/site-functions var]. 242 | map { |d| File.join(HOMEBREW_PREFIX, d) }. 243 | reject { |d| File.directory?(d) } 244 | 245 | unless group_chmods.empty? 246 | ohai "The following existing directories will be made group writable:" 247 | puts(*group_chmods) 248 | end 249 | unless user_chmods.empty? 250 | ohai "The following existing directories will be made writable by user only:" 251 | puts(*user_chmods) 252 | end 253 | unless chowns.empty? 254 | ohai "The following existing directories will have their owner set to #{Tty.underline}#{ENV["USER"]}#{Tty.reset}:" 255 | puts(*chowns) 256 | end 257 | unless chgrps.empty? 258 | ohai "The following existing directories will have their group set to #{Tty.underline}admin#{Tty.reset}:" 259 | puts(*chgrps) 260 | end 261 | unless mkdirs.empty? 262 | ohai "The following new directories will be created:" 263 | puts(*mkdirs) 264 | end 265 | if should_install_command_line_tools? 266 | ohai "The Xcode Command Line Tools will be installed." 267 | end 268 | 269 | wait_for_user if STDIN.tty? && !ENV["TRAVIS"] 270 | 271 | if File.directory? HOMEBREW_PREFIX 272 | sudo "/bin/chmod", "u+rwx", *chmods unless chmods.empty? 273 | sudo "/bin/chmod", "g+rwx", *group_chmods unless group_chmods.empty? 274 | sudo "/bin/chmod", "755", *user_chmods unless user_chmods.empty? 275 | sudo "/usr/sbin/chown", ENV["USER"], *chowns unless chowns.empty? 276 | sudo "/usr/bin/chgrp", "admin", *chgrps unless chgrps.empty? 277 | else 278 | sudo "/bin/mkdir", "-p", HOMEBREW_PREFIX 279 | sudo "/usr/sbin/chown", "root:wheel", HOMEBREW_PREFIX 280 | end 281 | 282 | unless mkdirs.empty? 283 | sudo "/bin/mkdir", "-p", *mkdirs 284 | sudo "/bin/chmod", "g+rwx", *mkdirs 285 | sudo "/bin/chmod", "755", *zsh_dirs 286 | sudo "/usr/sbin/chown", ENV["USER"], *mkdirs 287 | sudo "/usr/bin/chgrp", "admin", *mkdirs 288 | end 289 | 290 | [HOMEBREW_CACHE, HOMEBREW_OLD_CACHE].each do |cache| 291 | sudo "/bin/mkdir", "-p", cache unless File.directory? cache 292 | sudo "/bin/chmod", "g+rwx", cache if chmod? cache 293 | sudo "/usr/sbin/chown", ENV["USER"], cache if chown? cache 294 | sudo "/usr/bin/chgrp", "admin", cache if chgrp? cache 295 | end 296 | 297 | if should_install_command_line_tools? 298 | ohai "Searching online for the Command Line Tools" 299 | # This temporary file prompts the 'softwareupdate' utility to list the Command Line Tools 300 | clt_placeholder = "/tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress" 301 | sudo "/usr/bin/touch", clt_placeholder 302 | clt_label = `softwareupdate -l | grep -B 1 -E "Command Line (Developer|Tools)" | awk -F"*" '/^ +\\*/ {print $2}' | sed 's/^ *//' | tail -n1`.chomp 303 | ohai "Installing #{clt_label}" 304 | sudo "/usr/sbin/softwareupdate", "-i", clt_label 305 | sudo "/bin/rm", "-f", clt_placeholder 306 | sudo "/usr/bin/xcode-select", "--switch", "/Library/Developer/CommandLineTools" 307 | end 308 | 309 | # Headless install may have failed, so fallback to original 'xcode-select' method 310 | if should_install_command_line_tools? && STDIN.tty? 311 | ohai "Installing the Command Line Tools (expect a GUI popup):" 312 | sudo "/usr/bin/xcode-select", "--install" 313 | puts "Press any key when the installation has completed." 314 | getc 315 | sudo "/usr/bin/xcode-select", "--switch", "/Library/Developer/CommandLineTools" 316 | end 317 | 318 | abort <<-EOABORT if `/usr/bin/xcrun clang 2>&1` =~ /license/ && !$?.success? 319 | You have not agreed to the Xcode license. 320 | Before running the installer again please agree to the license by opening 321 | Xcode.app or running: 322 | sudo xcodebuild -license 323 | EOABORT 324 | 325 | ohai "Downloading and installing Homebrew..." 326 | Dir.chdir HOMEBREW_REPOSITORY do 327 | if git 328 | # we do it in four steps to avoid merge errors when reinstalling 329 | system git, "init", "-q" 330 | 331 | # "git remote add" will fail if the remote is defined in the global config 332 | system git, "config", "remote.origin.url", BREW_REPO 333 | system git, "config", "remote.origin.fetch", "+refs/heads/*:refs/remotes/origin/*" 334 | 335 | # ensure we don't munge line endings on checkout 336 | system git, "config", "core.autocrlf", "false" 337 | 338 | args = git, "fetch", "origin", "master:refs/remotes/origin/master", 339 | "--tags", "--force" 340 | system(*args) 341 | 342 | system git, "reset", "--hard", "origin/master" 343 | 344 | system "ln", "-sf", "#{HOMEBREW_REPOSITORY}/bin/brew", "#{HOMEBREW_PREFIX}/bin/brew" 345 | core_tap = "#{HOMEBREW_PREFIX}/Homebrew/Library/Taps/homebrew/homebrew-core" 346 | Dir.chdir core_tap do 347 | system("rm -rf ./*") 348 | system ("git remote set-url origin #{CORE_TAP_REPO}") 349 | 350 | # system("git fetch origin mater --tags --force") 351 | end 352 | system "#{HOMEBREW_PREFIX}/bin/brew", "update", "--force" 353 | else 354 | # -m to stop tar erroring out if it can't modify the mtime for root owned directories 355 | # pipefail to cause the exit status from curl to propagate if it fails 356 | curl_flags = "fsSL" 357 | curl_flags += "k" if macos_version < "10.6" 358 | core_tap = "#{HOMEBREW_PREFIX}/Homebrew/Library/Taps/homebrew/homebrew-core" 359 | system "/bin/bash -o pipefail -c '/usr/bin/curl -#{curl_flags} #{BREW_REPO}/tarball/master | /usr/bin/tar xz -m --strip 1'" 360 | 361 | system "ln", "-sf", "#{HOMEBREW_REPOSITORY}/bin/brew", "#{HOMEBREW_PREFIX}/bin/brew" 362 | 363 | system "/bin/mkdir", "-p", core_tap 364 | Dir.chdir core_tap do 365 | system "/bin/bash -o pipefail -c '/usr/bin/curl -#{curl_flags} #{CORE_TAP_REPO}/tarball/master | /usr/bin/tar xz -m --strip 1'" 366 | end 367 | end 368 | end 369 | 370 | warn "#{HOMEBREW_PREFIX}/bin is not in your PATH." unless ENV["PATH"].split(":").include? "#{HOMEBREW_PREFIX}/bin" 371 | 372 | ohai "Installation successful!" 373 | puts 374 | 375 | # Use the shell's audible bell. 376 | print "\a" 377 | 378 | # Use an extra newline and bold to avoid this being missed. 379 | ohai "Homebrew has enabled anonymous aggregate user behaviour analytics." 380 | puts <<-EOS 381 | #{Tty.bold}Read the analytics documentation (and how to opt-out) here: 382 | #{Tty.underline}https://docs.brew.sh/Analytics.html#{Tty.reset} 383 | 384 | EOS 385 | 386 | if git 387 | Dir.chdir HOMEBREW_REPOSITORY do 388 | system git, "config", "--local", "--replace-all", "homebrew.analyticsmessage", "true" 389 | end 390 | end 391 | 392 | ohai "Next steps:" 393 | 394 | if macos_version < "10.9" && macos_version > "10.6" 395 | `/usr/bin/cc --version 2> /dev/null` =~ /clang-(\d{2,})/ 396 | version = $1.to_i 397 | if version < 425 398 | puts "- Install the #{Tty.bold}Command Line Tools for Xcode:" 399 | puts " #{Tty.underline}https://developer.apple.com/downloads#{Tty.reset}" 400 | end 401 | elsif !File.exist? "/usr/bin/cc" 402 | puts "- Install #{Tty.bold}Xcode:" 403 | puts " #{Tty.underline}https://developer.apple.com/xcode#{Tty.reset}" 404 | end 405 | 406 | unless git 407 | puts "- Run `brew update --force` to complete installation by installing:" 408 | puts " #{HOMEBREW_PREFIX}/share/doc/homebrew" 409 | puts " #{HOMEBREW_PREFIX}/share/man/man1/brew.1" 410 | puts " #{HOMEBREW_PREFIX}/share/zsh/site-functions/_brew" 411 | puts " #{HOMEBREW_PREFIX}/etc/bash_completion.d/brew" 412 | puts " #{HOMEBREW_REPOSITORY}/.git" 413 | end 414 | 415 | puts "- Run `brew help` to get started" 416 | puts "- Further documentation: " 417 | puts " #{Tty.underline}https://docs.brew.sh#{Tty.reset}" 418 | --------------------------------------------------------------------------------