diff --git "a/20.04\346\211\213\345\206\214.md" "b/20.04\346\211\213\345\206\214.md"
new file mode 100644
index 0000000..679d4ea
--- /dev/null
+++ "b/20.04\346\211\213\345\206\214.md"
@@ -0,0 +1,704 @@
+
+**安装 Ubuntu 后的 20 件事**
+
+
+
+最近搞挂了一块数据盘,刚好在 Ubuntu 20.10 的发行时间点,索性重装 Ubuntu。
+本文主要为备忘。切勿照搬命令。建议最小化安装。
+
+------------
+
+# 基础优化
+
+### 1、换软件源
+
+推荐清华大学的源
+> [https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/](https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/)
+
+个人的备份源
+> [https://raw.githubusercontent.com/eallion/dotfiles/ubuntu/sources.list](https://raw.githubusercontent.com/eallion/dotfiles/ubuntu/sources.list)
+
+```
+sudo mv /etc/apt/sources.list/etc/apt/sources.list.backup
+wget -c https://raw.githubusercontent.com/eallion/dotfiles/ubuntu/sources.list -O /etc/apt/sources.list
+```
+
+然后 update 一下:
+
+```
+sudo apt update
+sudo apt upgrade
+```
+
+### 2、系统设置
+
+在 `系统设置` 里按自己的习惯设置即可。
+
+### 3、Sudo 免密码
+
+常用的个人电脑,是可以运行 `sudo` 免输密码的,公用电脑不建议这样设置。
+
+```
+su -
+```
+
+```
+nano /etc/sudoers
+```
+
+在 `root ALL=(ALL:ALL) ALL` 下一行添加:
+(`eallion` 请替换成自己的用户名)
+
+```
+eallion ALL=(ALL:ALL) ALL
+```
+
+在 `% sudo ALL=(ALL:ALL) ALL` 下一行添加:
+(`eallion` 请替换成自己的用户名)
+
+```
+eallion ALL=(ALL:ALL) NOPASSWD:ALL
+```
+
+### 4、安装基础软件
+
+```
+sudo apt install vim \
+ git \
+ curl \
+ gnome-tweak-tool \
+ gdebi \
+ preload \
+ google-chrome-stable \
+ gnome-shell-extensions \
+ ubuntu-restricted-extras
+```
+
+### 5、去鼠标加速
+
+对于 FPS 玩家,尤其推荐去掉鼠标加速。
+5.1. 在 `GNOME Tweaks` 点击 `键盘和鼠标` 在 `鼠标`-`加速配置` 里选择 `Flat`。
+5.2. 在 `系统设置` 里 `设备`-`鼠标和触摸板`-`鼠标`-`鼠标速度` 调节自己适应的鼠标速度。
+
+### 6、安装显卡驱动
+
+如果是 Nvidia 独立显卡,在 Dash 里搜索 `drive`,打开 `附加驱动`,选择专有驱动。
+
+### 7、下载个人配置
+
+基于 Linux 特性,备份配置文件即可。
+我的部分配置备份于 GitHub:
+> [https://github.com/eallion/dotfiles](https://github.com/eallion/dotfiles)
+
+```
+git clone https://github.com/eallion/dotfiles.git -b ubuntu ~/Documents/dotfiles
+```
+
+恢复 Git Vim Tmux Fcitx 等配置。
+
+### 8、安装输入法
+
+个人使用 Fcitx 五笔拼音
+
+#### 8.1、Fcitx 五笔拼音
+
+```
+sudo apt install fcitx-table-wbpy
+```
+
+> 主题: [https://github.com/Yucklys/fcitx-nord-skin](https://github.com/Yucklys/fcitx-nord-skin)
+> 主题: [https://github.com/Sakitami/fcitx-themes-package](https://github.com/Sakitami/fcitx-themes-package)
+
+配置默认输入法:
+
+```
+im-config
+```
+
+自定义标点符号:
+
+```
+wget -c https://raw.githubusercontent.com/eallion/dotfiles/ubuntu/.config/fcitx/data/punc.mb.zh_CN -O ~/.config/fcitx/data/punc.mb.zh_CN
+```
+
+按下面格式添加符号,如果不符合习惯请自行修改。
+
+```
+~ ~
+` `
+! !
+@ @
+# #
+$ ¥
+% ␣
+^ ……
+& &
+* *
+( (
+) )
+_ ——
+- -
++ +
+= =
+| |
+\ 、
+[ 【
+] 】
+{ 〖
+} 〗
+: :
+; ;
+" “ ”
+' ‘ ’
+< 《
+> 》
+, ,
+. 。
+? ?
+```
+
+#### 8.2、Fcitx5 五笔拼音
+
+安装:
+
+```
+sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-qt5
+````
+
+切换输入法:
+
+```
+im-config
+```
+
+安装 Psionics-Remix 主题(可选)
+> [https://github.com/xTpx/Psionics-Remix](https://github.com/xTpx/Psionics-Remix)
+
+```
+git clone https://github.com/xTpx/Psionics-Remix.git ~/.local/share/fcitx5/themes/Psionics-Remix
+```
+
+```
+vim ~/.config/fcitx5/conf/classicui.conf
+```
+
+配置主题:
+
+```
+ ***
+Theme=Psionics-Remix
+ ***
+```
+
+自定义快速输入:
+
+```
+sudo vim /usr/share/fcitx5/data/quickphrase.d/quick.mb
+```
+
+在文件中添加形如 `input output` 的代码,一行一条,即可实现添加快速输入辞典。
+示例:要在快速输入中输入 `ddrr`,在候选中显示 `大大的小蜗牛`,只需在上述 mb 文件中添加一行 `ddrr 大大的小蜗牛` 即可。(注意空格)
+> 友情提示:快速输入可以使用分号打开,Rime 不支持快速输入。
+
+### 9、双系统时间设置
+
+解决切换到 Windows 时间不对的问题。将本地时间更新到硬件上。
+
+```
+sudo apt install ntpdate
+sudo ntpdate ntp.aliyun.com # 阿里云的时间服务器,可用其他时间服务器替换
+sudo hwclock --localtime --systohc
+```
+
+**前 9 个步骤执行完成后,建议重启一下!**
+
+### 10、安装 Guake
+
+通过软件仓库直接安装的 Guake 版本不够新,而且中文显示不全。
+推荐源码安装:
+
+```
+git clone https://github.com/Guake/guake.git ~/Documents/guake
+cd ~/Documents/guake
+./scripts/bootstrap-dev-debian.sh run make
+make
+sudo make install
+```
+
+Ubuntu 20.10 默认终端的背景色:`#300a24`
+
+**Guake indicator**
+如果有需要可安装 Guake indicator:
+
+```
+sudo apt install guake-indicator
+```
+
+### 11、安装 Oh My Tmux
+
+> [https://github.com/gpakosz/.tmux](https://github.com/gpakosz/.tmux)
+
+```
+cd
+git clone https://github.com/gpakosz/.tmux.git
+ln -s -f .tmux/.tmux.conf
+cp .tmux/.tmux.conf.local .
+```
+
+### 12、安装 Oh My Zsh
+
+> 参考:[https://eallion.com/ubuntuzsh](https://eallion.com/ubuntuzsh "https://eallion.com/ubuntuzsh")
+
+安装 Zsh:
+
+```
+sudo apt update
+sudo apt install zsh autojump fasd
+```
+
+安装 Oh My Zsh:
+> 官方文档 [https://github.com/ohmyzsh/ohmyzsh#basic-installation](https://github.com/ohmyzsh/ohmyzsh#basic-installation)
+
+```
+sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
+```
+
+下载、安装、配置字体:
+
+> 下载:[Ubuntu Nerd Font](https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/Ubuntu/Regular/complete/Ubuntu%20Nerd%20Font%20Complete.ttf)
+> 下载:[Knack Nerd Font Mono](https://github.com/ryanoasis/nerd-fonts/raw/v1.2.0/patched-fonts/Hack/Regular/complete/Knack%20Regular%20Nerd%20Font%20Complete%20Mono.ttf)(推荐)
+
+安装主题 Powerlevel9k :
+
+```
+git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
+```
+
+安装历史命令建议插件:
+
+```
+git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
+```
+
+安装命令行语法高亮插件:
+
+```
+git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
+```
+
+设置 Oh My Zsh :
+
+```
+vim ~/.zshrc
+```
+
+需要修改如下几个地方:
+
+```
+ ******
+POWERLEVEL9K_MODE='nerdfont-complete'
+ZSH_THEME="powerlevel9k/powerlevel9k"
+POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir dir_writable disk_usage vcs newline)
+POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time)
+ ******
+ENABLE_CORRECTION="true"
+ ******
+COMPLETION_WAITING_DOTS="true"
+ ******
+plugins=( git extract fasd zsh-autosuggestions zsh-syntax-highlighting docker docker-compose)
+ ******
+```
+
+我个人的配置:
+
+```
+rm ~/.zshrc
+wget -c https://raw.githubusercontent.com/eallion/dotfiles/ubuntu/.zshrc -O ~/.zshrc
+```
+
+让配置生效:
+
+```
+source ~/.zshrc
+```
+
+如果安装时没有选择将 Zsh 作为默认 Shell,可以用下面的命令设置:
+
+```
+chsh -s /bin/zsh
+```
+
+查看当前所用的 Shell : `echo $SHELL`。
+
+### 13、配置 Vim
+
+#### 13.1 spf13-vim
+
+> [https://github.com/spf13/spf13-vim](https://github.com/spf13/spf13-vim)
+
+#### 13.2 EverVim(推荐)
+
+> [https://github.com/LER0ever/EverVim](https://github.com/LER0ever/EverVim)
+> Ubuntu 配置 EverVim [https://eallion.com/ubuntuevervim/](https://eallion.com/ubuntuevervim/)
+
+安装 EverVim 步骤
+安装依赖:
+
+```
+sudo apt install -y git curl python3-pip python3-dev exuberant-ctags cmake gcc g++ build-essential
+```
+
+安装 EverVim :
+
+```
+curl -sLf https://raw.githubusercontent.com/LER0ever/EverVim/master/Boot-EverVim.sh | bash
+```
+
+进 Vim 安装插件:
+
+```
+vim
+:PlugInstall
+```
+
+如果进 Vim 提示 Your ycmd is shut down ,需要安装 You Compute Me :
+
+```
+cd ~/.vim/bundle/YouCompleteMe
+python3 install.py --clang-completer
+```
+
+### 14、配置 Grub 引导
+
+Etx4 文件系统用 Grub-customizer 即可,Btrfs、ZFS 等文件系统此软件无效。
+
+```
+sudo apt install grub-customizer
+```
+
+Theme:
+> [https://github.com/sandesh236/sleek--themes](https://github.com/sandesh236/sleek--themes)
+> [https://github.com/gustawho/grub2-theme-breeze](https://github.com/gustawho/grub2-theme-breeze)
+
+如果 Nvidia 独立显卡在引导界面开机黑屏:将 `nomodeset` 加到 `/etc/default/grub` 即可。
+
+```
+GRUB_CMDLINE_LINUX_DEFAULT="nomodeset quiet splash"
+```
+
+### 15、自动挂载硬盘
+
+查看硬盘的 UUID 和 Type :
+
+```
+sudo blkid
+```
+
+记录下 `UUID` 和 `Type`。
+创建挂载目录:
+
+```
+mkdir -p ~/Files ~/Media
+```
+
+查看自己的 uid gid:
+
+```
+id eallion
+```
+
+编辑配置文件:
+
+```
+sudo vim /etc/fstab
+```
+
+按格式添加:
+
+```
+UUID=xxxx /mount-folder type defaults 0 0
+```
+
+如:
+
+```
+UUID=xxxx /home/eallion/Files ntfs defaults,uid=1000,gid=1000,umask=022 0 0
+UUID=xxxx /home/eallion/Media ntfs defaults,uid=1000,gid=1000,umask=022 0 0
+```
+
+如果不加 uid gid ,自动挂载后可能是 root 权限,无法读写。
+
+### 16、安装 PulseAudio Volume Control
+
+```
+sudo apt install pavucontrol
+```
+
+### 17、安装 Docker
+
+> [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/)
+Ubuntu 20.10 暂时还没有官方源,使用 Ubuntu 20.04 的源替代。
+即:替换 `$(lsb_release -cs)` 为 `focal`。
+
+```
+sudo apt remove docker docker-engine docker.io containerd runc
+sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
+curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
+sudo apt install -y docker-ce docker-ce-cli containerd.io
+```
+
+检查是否安装成功:
+
+```
+docker version
+sudo docker run hello-world
+````
+
+安装 Docker Compose:
+
+```
+sudo curl -L "https://github.com/docker/compose/releases/download/1.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+sudo chmod +x /usr/local/bin/docker-compose
+sudo ln -s /usr/local/bin/docker-compose/usr/bin/docker-compose
+```
+
+Docker 属于高频操作,运行 Docker 时,免去 `sudo`
+> [https://docs.docker.com/engine/install/linux-postinstall/](https://docs.docker.com/engine/install/linux-postinstall/)
+
+```
+sudo groupadd docker
+sudo usermod -aG docker $USER
+reboot
+newgrp docker
+sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
+sudo chmod g+rwx "$HOME/.docker" -R
+```
+
+### 18、安装 Gnome Shell Extensions
+
+#### 18.1. 安装浏览器插件
+
+可以使用 Chrome 插件,如果登录了 Google 账号,有自动同步功能。
+
+- Chrome : [GNOME Shell integration](https://chrome.google.com/webstore/detail/gnome-shell-integration/gphhapmejobijbbhgpjhcjognlahblep "GNOME Shell integration")
+- Firefox: [https://extensions.gnome.org](https://extensions.gnome.org/ "https://extensions.gnome.org/")
+
+#### 18.2. 安装 Gnome Shell Extensions
+
+```
+sudo apt install gnome-shell-extensions
+```
+
+#### 18.3. 安装扩展
+
+> 以下扩展插件按需启用
+> 安装完成后,按 `Alt`+`F2`,输入 `r` 重启
+
+- [Applications Menu](https://extensions.gnome.org/extension/6/applications-menu/)
+- [Applications Overview Tooltip](https://extensions.gnome.org/extension/1071/applications-overview-tooltip/)
+- [Auto Move Windows](https://extensions.gnome.org/extension/16/auto-move-windows/)
+- [Clipboard Indicator](https://extensions.gnome.org/extension/779/clipboard-indicator/)
+- [Coverflow Alt-Tab](https://extensions.gnome.org/extension/97/coverflow-alt-tab/)
+- [Dash to Dock](https://extensions.gnome.org/extension/307/dash-to-dock/)
+ - `sudo gnome-extensions disable ubuntu-dock@ubuntu.com`
+- [Desktop Icons](https://extensions.gnome.org/extension/1465/desktop-icons/)
+- [GSConnect](https://extensions.gnome.org/extension/1319/gsconnect/)
+- [Hide Top Bar](https://extensions.gnome.org/extension/545/hide-top-bar/)
+- [Horizontal workspaces](https://extensions.gnome.org/extension/2141/horizontal-workspaces/)
+- [Launch new instance](https://extensions.gnome.org/extension/600/launch-new-instance/)
+- [Lunar Calendar 农历](https://extensions.gnome.org/extension/675/lunar-calendar/)
+ - `sudo apt install gir1.2-lunar-date-2.0`
+- [Native Window Placement](https://extensions.gnome.org/extension/18/native-window-placement/)
+- [OpenWeather](https://extensions.gnome.org/extension/750/openweather/)
+- [Places Status Indicator](https://extensions.gnome.org/extension/8/places-status-indicator/)
+- [Removable Drive Menu](https://extensions.gnome.org/extension/7/removable-drive-menu/)
+- [Remove Alt+Tab Delay v2](https://extensions.gnome.org/extension/2741/remove-alttab-delay-v2/)
+- [Remove Dropdown Arrows](https://extensions.gnome.org/extension/800/remove-dropdown-arrows/)
+ - [Unite](https://extensions.gnome.org/extension/1287/unite/) 里有此功能。
+- [Screenshot Window Sizer](https://extensions.gnome.org/extension/881/screenshot-window-sizer/)
+- [Sound Input & Output Device Chooser](https://extensions.gnome.org/extension/906/sound-output-device-chooser/)
+- [Status Area Horizontal Spacing](https://extensions.gnome.org/extension/355/status-area-horizontal-spacing/)
+- [TopIcons Plus](https://extensions.gnome.org/extension/1031/topicons/)
+- [Tray Icons](https://extensions.gnome.org/extension/1503/tray-icons/)
+- [Ubuntu AppIndicators](https://extensions.gnome.org/extension/1301/ubuntu-appindicators/)
+- [Ubuntu Dock](https://extensions.gnome.org/extension/1300/ubuntu-dock/)
+- [Unite](https://extensions.gnome.org/extension/1287/unite/)
+- [User Themes](https://extensions.gnome.org/extension/19/user-themes/)
+- [Vitals](https://extensions.gnome.org/extension/1460/vitals/)
+- [Window List](https://extensions.gnome.org/extension/602/window-list/)
+- [windowNavigator](https://extensions.gnome.org/extension/10/windownavigator/)
+- [Workspace Indicator](https://extensions.gnome.org/extension/21/workspace-indicator/)
+
+### 19、火焰截图 Flameshot
+
+需要设置快捷键,所以把火焰截图单独拿出来说。
+
+```
+sudo apt install flameshot
+```
+
+设置截图快捷键:
+`系统设置` - `设备` - `键盘快捷键` - `自定义快捷键` 点加号添加一个:
+
+```
+名称:flameshot
+命令:flameshot gui
+设置快捷键:(按键盘设置)
+```
+
+### 20、体验 macOS Big Sur 动态壁纸
+
+实际上没什么卵用,个人也不太喜欢。
+Gnome 桌面环境原生支持按时间自动切换壁纸的功能。
+无论什么 Linux 发行版,只要使用 Gnome 桌面环境都可以使用此壁纸。
+此套壁纸支持 5K 分辨率。
+Windows 可以使用 [WinDynamicDesktop](https://github.com/t1m0thyj/WinDynamicDesktop)。
+> [https://github.com/eallion/Big-Sur-Ubuntu](https://github.com/eallion/Big-Sur-Ubuntu)
+
+#### 20.1、下载 Big Sur
+
+```
+git clone https://github.com/eallion/Big-Sur-Ubuntu.git ~/Pictures/Big-Sur-Ubuntu
+```
+
+#### 20.2、设置
+
+打开 `Gnome Tweaks`
+找到 `外观`-`背景`
+选择 `groovy.xml`(文件在 `/home/username/Pictures/Big-Sur-Ubuntu/groovy.xml` 路径)
+选择 `Zoom` 调整方式
+
+------------
+
+# 安装软件
+
+### 安装常用软件
+
+推荐一些常用的软件:
+
+- Authy (Snap)
+
+```
+sudo snap install authy --beta
+```
+
+- Filezilla
+
+```
+sudo apt install filezilla
+```
+
+- PhotoGIMP (GIMP)(Snap)
+
+```
+sudo snap install photogimp
+```
+
+- Steam
+
+```
+sudo apt install steam
+```
+
+- Telegram
+
+```
+sudo apt install telegram-desktop
+```
+
+- Thunderbird
+
+```
+sudo apt install thunderbird thunderbird-locale-zh-cn
+```
+
+- Virtualbox
+
+```
+sudo apt install virtualbox
+```
+
+- VLC
+
+```
+sudo apt install vlc
+```
+
+- AppImage Launcher
+
+> [https://github.com/TheAssassin/AppImageLauncher/](https://github.com/TheAssassin/AppImageLauncher/)
+
+- Docker
+
+> [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/)
+
+- Dropbox
+
+> [https://www.dropbox.com/install](https://www.dropbox.com/install)
+
+- Go
+
+> [https://golang.org/doc/install](https://golang.org/doc/install)
+
+- Hugo
+
+> [https://github.com/gohugoio/hugo/releases](https://github.com/gohugoio/hugo/releases)
+
+- Keybase
+
+> [https://keybase.io/docs/the_app/install_linux](https://keybase.io/docs/the_app/install_linux)
+
+- MouseWheel
+
+> [https://github.com/muharemovic/MouseWheel](https://github.com/muharemovic/MouseWheel)
+
+- Neteasy 网易云音乐
+
+> [https://music.163.com/#/download](https://music.163.com/#/download)
+
+- Nginx Mysql PHP
+
+> [https://eallion.com/ubuntu2004lnmp/](https://eallion.com/ubuntu2004lnmp/)
+
+- NVM
+
+> [https://github.com/nvm-sh/nvm](https://github.com/nvm-sh/nvm)
+
+- OBS
+
+> [https://obsproject.com/wiki/install-instructions#linux](https://obsproject.com/wiki/install-instructions#linux)
+
+- PicGo (snap install with `--danderous`)
+
+> [https://github.com/Molunerfinn/PicGo](https://github.com/Molunerfinn/PicGo)
+
+- qBittorrent Enhanced
+
+> [https://github.com/c0re100/qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition)
+> [https://github.com/poplite/qBEE-Ubuntu-Packaging](https://github.com/poplite/qBEE-Ubuntu-Packaging)
+
+- QQ
+
+> [https://im.qq.com/linuxqq/index.html](https://im.qq.com/linuxqq/index.html)
+
+- Slack
+
+> [https://slack.com/downloads/linux](https://slack.com/downloads/linux)
+
+- Spofity
+
+> [https://www.spotify.com/us/download/linux/](https://www.spotify.com/us/download/linux/)
+
+- Termius
+
+> [https://termius.com/linux](https://termius.com/linux)
+
+- Typora
+
+> [https://typora.io/#linux](https://typora.io/#linux)
+
+- Visual Studio Code
+
+> 通过 Snap 仓库安装有中文输入 Bug 。
+> [https://code.visualstudio.com/Download](https://code.visualstudio.com/Download)
\ No newline at end of file
diff --git a/README.md b/README.md
index 9bf2193..0cab126 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,8 @@
-# UbuntuAutoScript
-Linux Auto Configuration Script- Linux 软件自动安装配置脚本
+# Ubuntu 配置脚本 全功能美化一键安装
+## 介绍
-废话不多说,先来一张效果图,没图片你们肯定是不会看下去的。
-简单的运行一下脚本,然后喝杯咖啡,打个游戏,做点其他事情,然后就没有然后了
+欢迎使用 Ubuntu 配置脚本 README。本文件将指导您如何使用 `setup.bash` 脚本来配置您的 Ubuntu 系统,安装各种工具和实用程序。该脚本提供了一种方便的方法来安装一系列的软件包,您可以选择进行完整安装,或者根据需要选择特定的软件包进行安装。

@@ -12,117 +11,104 @@ Linux Auto Configuration Script- Linux 软件自动安装配置脚本

-写这个脚本的原因是因为作者手太贱,我有一颗强烈的好奇心,但是同时又有一双︿( ̄︶ ̄)︿非常贱贱的双手,所以当作者在安装了无数个Linux发行版之后,再疲于每一次安装都需要重新安装软件,配置各种环境变量的生活,
-简直苦不堪言,时间就是金钱,但是手贱喜欢换系统怎么办,
-最后实在受不了了,自己写了一个自动化配置安装软件脚本
+
-`用法`
-```
-正确打开命令行:
-git clone https://github.com/SickoOrange/UbuntuAutoScript.git
-cd UbuntuAutoScript
-chmod +x setup.sh
-sudo ./ setup.sh
-```
-> 如果你想自动配置你的github ssh 秘钥,只需要在命令上述命令后面追加 -g xxxxxxx@gmail.com即可,生成的秘钥会自动保存在桌面的github_ssh_key.txt文件中。
-
-> sudo ./setup.sh -g xxxxxxx@gmail.com
+## 脚本概述
+`setup.bash` 脚本旨在自动化安装和配置各种软件包。您可以通过运行脚本并按照提示进行选择,来轻松地设置开发环境、办公工具、媒体工具等。脚本支持不同的 Ubuntu 版本,并包含多个功能模块,用户可以根据需要选择安装。
- 脚本已经在Github开源,欢迎随时
- `Start`
- `Fork`
- `Issue`
-作者精力有限,所以还有什么没有想到希望大家多提意见
+## 使用说明
-> Github:
-> https://github.com/SickoOrange/UbuntuAutoScript
+### 前提条件
+在运行脚本之前,请确保您的系统满足以下条件:
+1. 运行 Ubuntu 操作系统(支持 14.04、16.04、18.04、20.04、22.04 版本)。
+2. 您具有 sudo 权限。
+3. 系统已连接到互联网。
-### 这个Bash Script都帮我们干了啥?
+### 下载和运行脚本
-这里简单列举一下这个Bash Script的功能:
+1. 打开终端。
+2. 下载脚本文件:
+ ```bash
+ git clone https://github.com/lovelyyoshino/UbuntuAutoScript.git
+ ```
+3. 赋予脚本执行权限:
+ ```bash
+ cd UbuntuAutoScript
+ chmod +x setup.bash
+ ```
+4. 运行脚本:
+ ```bash
+ ./setup.bash
+ ```
-1. 更新系统的软件源
-2. 针对Ubuntu16.04:
-`楼主轻微桌面颜控,所以简单美观的桌面优化是必不可少的了`
- - 自动下载安装Gnome桌面
- - 自动下载安装 Dash To Dock插件 (就是类似苹果的软件栏)
- - 自动下载安装 ARC 风格主题
- - 自动下载安装 Flat Remix 扁平化图标
-3. 自动配置 Node Js 以及 npm, 开箱即用
-4. 自动下载配置 Oracle JDK,版本 1.8.0_151, 同时自动配置环境变量
- 打开Terminal
- 输入 java -version 验证是否正确安装
-5. 自动安装Gradle 版本构建工具
-6. 自动安装sdkman 用于管理多个软件开发套件的并行版本的工具
-7. 自动安装Typora Linux版本的Markdown写作神器
-8. 安装常用小工具:
-```
- Git -- 版本控制软件
- Curl -- 调试网络连接的小工具
- Gdebi -- 有些deb软件不能通过默认安装器安装的, 可以试试他
- Vim -- 不说了撸代码神器
- Unzip -- linux解压zip压缩文件
- unrar -- 解压rar
- jd -- 命令行解析json工具
- kolourpaint4 --画图工具
-```
-9. 自动下载安装常用的软件:
-```
- Visual Studio Code
- Genymotion
- Skype
- Android Studio
- IntellijIDEA
- ```
+### 使用脚本
+运行脚本后,您将看到如下提示:
-#### 最后,时间仓促,目前就想到这么多,以后有什么需要的工具还会继续更新,如果大家有什么想法或者意见可以给我留言, 或者直接在Github上fork.
-
-```
- 23.10.2017 更新日志
- 1. 添加了网易云音乐
- 2. 添加搜狗输入法
- ps: 搜狗输入法已经安装完毕,但是脚本只是帮你安装到系统了,你需要自己把搜狗输入法添加到fcitx中,如下图
```
-> 
-
+请按回车键以全部安装,或者输入您想安装的功能编号(用空格分隔,例如:1 3 8):
```
-25.10.2017 更新日志
-1. 添加了 linux 命令行 Json解析工具 jd
-2. 添加了 画图板 kolour paint
-3. 修复了window与ubuntu双系统,时间不同步的错误
-4. 增加了自动配置github ssh
-5. 添加解压rar工具
-```
-
-```
-26.10.2017 更新日志
-1. 添加了SDKMAN!是一个用于管理多个软件开发套件的并行版本的工具
-2. 自动安装Gradle版本构建工具
-```
-
-```
-29.10.2017 更新日志
-1.自动安装 maven
-2.自动安装 docker
- 2.1 mysql image
- 2.2 tomcat image
- 2.3 nginx image
-```
-
-```
-30.10.2017 更新日志
-1.自动安装 sqliteman linux下一款轻量级数据库图形化软件
-2. clementine linux下一款受欢迎的开源音乐播放软件
-```
-
-
-> 背景图片地址
-> http://i.imgur.com/nZLDzzk.jpg
-> Github地址:
-> https://github.com/SickoOrange/UbuntuAutoScript
\ No newline at end of file
+您有两种选择:
+1. **直接按回车键**:脚本将自动安装所有功能。
+2. **输入数字选项**:根据您的需要选择要安装的功能模块,数字之间用空格分隔。例如,输入 `1 3 8` 表示安装功能 1、3 和 8。
+
+### 可选安装功能列表
+
+以下是脚本中可选的安装功能及其对应的数字编号:
+
+1. **系统更新**
+2. **基础工具(如 git、vim、curl、tree、htop、fish、字体等)**
+3. **Docker**
+4. **Terminator 终端**
+5. **搜狗输入法**
+6. **系统监视器**
+7. **GIMP 图像处理**
+8. **VS Code**
+9. **Sublime Text**
+10. **Flameshot 截图**
+11. **Retext Markdown 编辑器**
+12. **mplayer/smplayer 视频播放器**
+13. **Chrome 浏览器**
+14. **Meld 文件比较**
+15. **Kazam 屏幕录像**
+16. **Figlet 命令行艺术字体**
+17. **WhiteSur 主题美化**
+18. **Clash/Clash Nyanpasu 代理工具**
+19. **CLion C/C++ IDE**
+20. **Miniconda**
+21. **Termius SSH 客户端**
+22. **systemback 系统备份**
+23. **CompizConfig 窗口增强**
+24. **Sticky Notes 便签**
+25. **Peek 动图截图**
+26. **Drawio 流程图编辑器**
+27. **PyCharm Python IDE**
+28. **Kdenlive 视频剪辑**
+29. **Cursor AI IDE(需手动下载 AppImage 后运行本脚本)**
+30. **ROS 机器人操作系统(FishROS 脚本)**
+31. **Neofetch 系统信息展示**
+32. **Tailscale 内网穿透**
+33. **zsh + oh-my-zsh + 常用 alias**
+34. **Variety 动态壁纸**
+
+
+### 示例
+
+1. **安装所有功能**:
+ 运行脚本并直接按回车键。
+
+ ```bash
+ ./setup.bash
+ ```
+
+2. **选择性安装功能**:
+ 运行脚本并输入数字选项,例如只安装更新系统、Docker 和 VS Code:
+
+ ```bash
+ ./setup.bash 1 3 8
+ ```
diff --git a/githelp.sh b/githelp.sh
deleted file mode 100755
index 2ebc33a..0000000
--- a/githelp.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#! /bin/bash
-echo "ready push"
-echo $1
-git add --all
-git commit -m "$1"
-git push origin master
\ No newline at end of file
diff --git a/jetbra-2024/.DS_Store b/jetbra-2024/.DS_Store
new file mode 100644
index 0000000..228be86
Binary files /dev/null and b/jetbra-2024/.DS_Store differ
diff --git a/jetbra-2024/config-jetbrains/dns.conf b/jetbra-2024/config-jetbrains/dns.conf
new file mode 100644
index 0000000..090e4e0
--- /dev/null
+++ b/jetbra-2024/config-jetbrains/dns.conf
@@ -0,0 +1,3 @@
+[DNS]
+EQUAL,jetbrains.com
+EQUAL,plugin.obroom.com
\ No newline at end of file
diff --git a/jetbra-2024/config-jetbrains/power.conf b/jetbra-2024/config-jetbrains/power.conf
new file mode 100644
index 0000000..e471de2
--- /dev/null
+++ b/jetbra-2024/config-jetbrains/power.conf
@@ -0,0 +1,7 @@
+[Result]
+; Suit 230914
+EQUAL,75888623192465772084955377951198306702135327313062315225563718470653661793801719178647553532410237467495550800187973529202133466238825354135988657390766050197160093050945611087414688022502220060564716139142356429494315004946432334067127515081383336664162877126600357077796107641437507844835265792365885264118815924123978949395829736969354441202826225673948313261585644898954777409621857150971668073862687253868141869122469331021430401371289707681211947592819675200121184556360932201089199282211738120006888533563163642302207579745484728384486428222208213812291528007428530070242454238203928550683105421062331094750845145505608972009635176965215115688208740845303355991059521804735078574469432870400787428253602342729300042328170420659062588195293985517003844343989763104027328569042852690996233875190439074960872926324787157115483523118473430609411096400697894536993294915535905449630056538884982426205451557516203033628658808550799424730131437543420952769712793044255279152357141856290356977839447381244929084411487482957782888343837193520146442780899122074573307925429597225835206724304378622338028349953089952976438255759582568115277066791679931555627913314296216846420738487344812850701846117667234235837952975099539950423673283,65537,860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193857485407672132882577840295039058621747654642202620767068924079813640067442975
+EQUAL,18334983902317920056407822076363704637127511531538667546454397384237002307773468304678083268940125026889850144873377524086979381177447338726740515125485990255804943597229646061638739889766127330669573122850717958841899404955081920145521154771305144425440057732333493057842144190570008851861105129783440041663779514287133102203234622617071230933765542056696346242481464904964506696247983144941959930402082784396824311315073713284265519582655262360264508170809532574071410971740082846089152772578790836229920359729093453981067609164052947062747210374015835086399513848397669153177129004699260465730470356144424062305576,65537,24156627931985958051017183040835577271803742470193804806479316178045088981962804168393398987646446251087541768081971475544151551235525470790716604369379805327668466429966167642117961353233058515180243264560201783520956161510523416923017697354365782825500659342029196527776056976223174394946371372849906309277537461992299774200098515526818746947230488275456663264920440977381968978227273889068919338259949793686590492904029279861913225794809675826299753284990778166519152326723946780528965868736869495336993456735232755342913885746267768375682771655854436236934171901662660193080235109535758464079136573948168636773471->986236757547332986472011617696226561292849812918563355472727826767720188564083584387121625107510786855734801053524719833194566624465665316622563244215340671405971599343902468620306327831715457360719532421388780770165778156818229863337344187575566725786793391480600129482653072861971002459947277805295727097226389568776499707662505334062639449916265137796823793276300221537201727072401742985542559596685092673521228140822200236743113743661549252453726123450722876929538747702356573783116366629850199080495560991841329893037291900147497007197055572787780928474439121996761454121550126010635197320122603857735547407
+
+[Args]
+EQUAL,65537,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281->3,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281
\ No newline at end of file
diff --git a/jetbra-2024/config-jetbrains/url.conf b/jetbra-2024/config-jetbrains/url.conf
new file mode 100644
index 0000000..5b730d2
--- /dev/null
+++ b/jetbra-2024/config-jetbrains/url.conf
@@ -0,0 +1,3 @@
+[URL]
+PREFIX,https://account.jetbrains.com/lservice/rpc/validateKey.action
+PREFIX,https://account.jetbrains.com.cn/lservice/rpc/validateKey.action
\ No newline at end of file
diff --git a/jetbra-2024/ja-netfilter.jar b/jetbra-2024/ja-netfilter.jar
new file mode 100644
index 0000000..b72565a
Binary files /dev/null and b/jetbra-2024/ja-netfilter.jar differ
diff --git a/jetbra-2024/plugins-jetbrains/dns.jar b/jetbra-2024/plugins-jetbrains/dns.jar
new file mode 100644
index 0000000..113c699
Binary files /dev/null and b/jetbra-2024/plugins-jetbrains/dns.jar differ
diff --git a/jetbra-2024/plugins-jetbrains/hideme.jar b/jetbra-2024/plugins-jetbrains/hideme.jar
new file mode 100644
index 0000000..a21ed52
Binary files /dev/null and b/jetbra-2024/plugins-jetbrains/hideme.jar differ
diff --git a/jetbra-2024/plugins-jetbrains/power.jar b/jetbra-2024/plugins-jetbrains/power.jar
new file mode 100644
index 0000000..1acc698
Binary files /dev/null and b/jetbra-2024/plugins-jetbrains/power.jar differ
diff --git a/jetbra-2024/plugins-jetbrains/url.jar b/jetbra-2024/plugins-jetbrains/url.jar
new file mode 100644
index 0000000..495804e
Binary files /dev/null and b/jetbra-2024/plugins-jetbrains/url.jar differ
diff --git a/jetbra-2024/scripts/install-all-users.vbs b/jetbra-2024/scripts/install-all-users.vbs
new file mode 100644
index 0000000..60d95fb
--- /dev/null
+++ b/jetbra-2024/scripts/install-all-users.vbs
@@ -0,0 +1,73 @@
+If Not WScript.Arguments.Named.Exists("elevate") Then
+ CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 10
+ WScript.Quit
+End If
+
+Set oShell = CreateObject("WScript.Shell")
+Set oEnvSystem = oShell.Environment("SYSTEM")
+Set oFS = CreateObject("Scripting.FileSystemObject")
+
+Dim sBasePath, sJarFile
+sBasePath = oFS.GetParentFolderName(oFS.GetParentFolderName(WScript.ScriptFullName))
+sJarFile = sBasePath & "\ja-netfilter.jar"
+
+If Not oFS.FileExists(sJarFile) Then
+ MsgBox "ja-netfilter.jar not found", vbOKOnly Or vbCritical
+ WScript.Quit -1
+End If
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+Dim sEnvKey, sEnvVal, aJBProducts
+aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "dataspell", "aqua", "rustrover", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+Set re = New RegExp
+re.Global = True
+re.IgnoreCase = True
+re.Pattern = "^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*"
+
+Sub RemoveEnv(env)
+ On Error Resume Next
+
+ For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sEnvVal = oShell.ExpandEnvironmentStrings("%" & sEnvKey & "%")
+ If sEnvVal <> ("%" & sEnvKey & "%") Then
+ env.Remove(sEnvKey)
+ End If
+ Next
+End Sub
+
+RemoveEnv oShell.Environment("USER")
+
+Dim sVmOptionsFile
+For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sVmOptionsFile = sBasePath & "\vmoptions\" & sPrd & ".vmoptions"
+ If oFS.FileExists(sVmOptionsFile) Then
+ ProcessVmOptions sVmOptionsFile
+ oEnvSystem(sEnvKey) = sVmOptionsFile
+ End If
+Next
+
+Sub ProcessVmOptions(ByVal file)
+ Dim sLine, sNewContent, bMatch
+ Set oFile = oFS.OpenTextFile(file, 1, 0)
+
+ sNewContent = ""
+ Do Until oFile.AtEndOfStream
+ sLine = oFile.ReadLine
+ bMatch = re.Test(sLine)
+ If Not bMatch Then
+ sNewContent = sNewContent & sLine & vbLf
+ End If
+ Loop
+ oFile.Close
+
+ sNewContent = sNewContent & "-javaagent:" & sJarFile & "=jetbrains"
+ Set oFile = oFS.OpenTextFile(file, 2, 0)
+ oFile.Write sNewContent
+ oFile.Close
+End Sub
+
+MsgBox "Done."
diff --git a/jetbra-2024/scripts/install-current-user.vbs b/jetbra-2024/scripts/install-current-user.vbs
new file mode 100644
index 0000000..a79952c
--- /dev/null
+++ b/jetbra-2024/scripts/install-current-user.vbs
@@ -0,0 +1,54 @@
+Set oShell = CreateObject("WScript.Shell")
+Set oEnv = oShell.Environment("USER")
+Set oFS = CreateObject("Scripting.FileSystemObject")
+
+Dim sEnvKey, sEnvVal, aJBProducts
+aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "dataspell", "aqua", "rustrover", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+Set re = New RegExp
+re.Global = True
+re.IgnoreCase = True
+re.Pattern = "^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*"
+
+Dim sBasePath, sJarFile
+sBasePath = oFS.GetParentFolderName(oShell.CurrentDirectory)
+sJarFile = sBasePath & "\ja-netfilter.jar"
+
+If Not oFS.FileExists(sJarFile) Then
+ MsgBox "ja-netfilter.jar not found", vbOKOnly Or vbCritical
+ WScript.Quit -1
+End If
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+Dim sVmOptionsFile
+For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sVmOptionsFile = sBasePath & "\vmoptions\" & sPrd & ".vmoptions"
+ If oFS.FileExists(sVmOptionsFile) Then
+ ProcessVmOptions sVmOptionsFile
+ oEnv(sEnvKey) = sVmOptionsFile
+ End If
+Next
+
+Sub ProcessVmOptions(ByVal file)
+ Dim sLine, sNewContent, bMatch
+ Set oFile = oFS.OpenTextFile(file, 1, 0)
+
+ sNewContent = ""
+ Do Until oFile.AtEndOfStream
+ sLine = oFile.ReadLine
+ bMatch = re.Test(sLine)
+ If Not bMatch Then
+ sNewContent = sNewContent & sLine & vbLf
+ End If
+ Loop
+ oFile.Close
+
+ sNewContent = sNewContent & "-javaagent:" & sJarFile & "=jetbrains"
+ Set oFile = oFS.OpenTextFile(file, 2, 0)
+ oFile.Write sNewContent
+ oFile.Close
+End Sub
+
+MsgBox "Done."
diff --git a/jetbra-2024/scripts/install.sh b/jetbra-2024/scripts/install.sh
new file mode 100644
index 0000000..1f66443
--- /dev/null
+++ b/jetbra-2024/scripts/install.sh
@@ -0,0 +1,91 @@
+#!/bin/sh
+
+set -e
+
+OS_NAME=$(uname -s)
+JB_PRODUCTS="idea clion phpstorm goland pycharm webstorm webide rider datagrip rubymine dataspell aqua rustrover gateway jetbrains_client jetbrainsclient studio devecostudio"
+
+BASE_PATH=$(dirname $(
+ cd $(dirname "$0")
+ pwd
+))
+
+JAR_FILE_PATH="${BASE_PATH}/ja-netfilter.jar"
+
+if [ ! -f "${JAR_FILE_PATH}" ]; then
+ echo 'ja-netfilter.jar not found'
+ exit -1
+fi
+
+KDE_ENV_DIR="${HOME}/.config/plasma-workspace/env"
+LAUNCH_AGENTS_DIR="${HOME}/Library/LaunchAgents"
+
+PROFILE_PATH="${HOME}/.profile"
+ZSH_PROFILE_PATH="${HOME}/.zshrc"
+PLIST_PATH="${LAUNCH_AGENTS_DIR}/jetbrains.vmoptions.plist"
+
+if [ $OS_NAME = "Darwin" ]; then
+ BASH_PROFILE_PATH="${HOME}/.bash_profile"
+
+ mkdir -p "${LAUNCH_AGENTS_DIR}"
+ echo 'Labeljetbrains.vmoptionsProgramArgumentssh-c' >"${PLIST_PATH}"
+else
+ BASH_PROFILE_PATH="${HOME}/.bashrc"
+ mkdir -p "${KDE_ENV_DIR}"
+fi
+
+touch "${PROFILE_PATH}"
+touch "${BASH_PROFILE_PATH}"
+touch "${ZSH_PROFILE_PATH}"
+
+MY_VMOPTIONS_SHELL_NAME="jetbrains.vmoptions.sh"
+MY_VMOPTIONS_SHELL_FILE="${HOME}/.${MY_VMOPTIONS_SHELL_NAME}"
+echo '#!/bin/sh' >"${MY_VMOPTIONS_SHELL_FILE}"
+
+EXEC_LINE='___MY_VMOPTIONS_SHELL_FILE="${HOME}/.jetbrains.vmoptions.sh"; if [ -f "${___MY_VMOPTIONS_SHELL_FILE}" ]; then . "${___MY_VMOPTIONS_SHELL_FILE}"; fi'
+
+for PRD in $JB_PRODUCTS; do
+ VM_FILE_PATH="${BASE_PATH}/vmoptions/${PRD}.vmoptions"
+ if [ ! -f "${VM_FILE_PATH}" ]; then
+ continue
+ fi
+
+ if [ $OS_NAME = "Darwin" ]; then
+ sed -i '' '/^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*/d' "${VM_FILE_PATH}"
+ else
+ sed -i '/^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*/d' "${VM_FILE_PATH}"
+ fi
+
+ echo "-javaagent:${JAR_FILE_PATH}=jetbrains" >>"${VM_FILE_PATH}"
+
+ ENV_NAME=$(echo $PRD | tr '[a-z]' '[A-Z]')"_VM_OPTIONS"
+ echo "export ${ENV_NAME}=\"${VM_FILE_PATH}\"" >>"${MY_VMOPTIONS_SHELL_FILE}"
+
+ if [ $OS_NAME = "Darwin" ]; then
+ launchctl setenv "${ENV_NAME}" "${VM_FILE_PATH}"
+ echo "launchctl setenv \"${ENV_NAME}\" \"${VM_FILE_PATH}\"" >>"${PLIST_PATH}"
+ fi
+done
+
+if [ $OS_NAME = "Darwin" ]; then
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+
+ echo 'RunAtLoad' >>"${PLIST_PATH}"
+else
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+fi
+
+echo "${EXEC_LINE}" >>"${PROFILE_PATH}"
+echo "${EXEC_LINE}" >>"${BASH_PROFILE_PATH}"
+echo "${EXEC_LINE}" >>"${ZSH_PROFILE_PATH}"
+
+if [ $OS_NAME = "Darwin" ]; then
+ echo 'done. the "kill Dock" command can fix the crash issue.'
+else
+ ln -sf "${MY_VMOPTIONS_SHELL_FILE}" "${KDE_ENV_DIR}/${MY_VMOPTIONS_SHELL_NAME}"
+ echo "done. you'd better log off first!"
+fi
diff --git a/jetbra-2024/scripts/uninstall-all-users.vbs b/jetbra-2024/scripts/uninstall-all-users.vbs
new file mode 100644
index 0000000..f067438
--- /dev/null
+++ b/jetbra-2024/scripts/uninstall-all-users.vbs
@@ -0,0 +1,28 @@
+If Not WScript.Arguments.Named.Exists("elevate") Then
+ CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 10
+ WScript.Quit
+End If
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+Sub RemoveEnv(env)
+ On Error Resume Next
+
+ Dim sEnvKey, sEnvVal, aJBProducts
+ aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "dataspell", "aqua", "rustrover", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+ For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sEnvVal = oShell.ExpandEnvironmentStrings("%" & sEnvKey & "%")
+ If sEnvVal <> ("%" & sEnvKey & "%") Then
+ env.Remove(sEnvKey)
+ End If
+ Next
+End Sub
+
+Set oShell = CreateObject("WScript.Shell")
+
+RemoveEnv oShell.Environment("USER")
+RemoveEnv oShell.Environment("SYSTEM")
+
+MsgBox "Done."
diff --git a/jetbra-2024/scripts/uninstall-current-user.vbs b/jetbra-2024/scripts/uninstall-current-user.vbs
new file mode 100644
index 0000000..97553dc
--- /dev/null
+++ b/jetbra-2024/scripts/uninstall-current-user.vbs
@@ -0,0 +1,17 @@
+Set oShell = CreateObject("WScript.Shell")
+Set oEnv = oShell.Environment("USER")
+
+Dim sEnvKey, sEnvVal, aJBProducts
+aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "dataspell", "aqua", "rustrover", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sEnvVal = oShell.ExpandEnvironmentStrings("%" & sEnvKey & "%")
+ If sEnvVal <> ("%" & sEnvKey & "%") Then
+ oEnv.Remove(sEnvKey)
+ End If
+Next
+
+MsgBox "Done."
diff --git a/jetbra-2024/scripts/uninstall.sh b/jetbra-2024/scripts/uninstall.sh
new file mode 100644
index 0000000..24b69e0
--- /dev/null
+++ b/jetbra-2024/scripts/uninstall.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+set -e
+
+OS_NAME=$(uname -s)
+JB_PRODUCTS="idea clion phpstorm goland pycharm webstorm webide rider datagrip rubymine dataspell aqua rustrover gateway jetbrains_client jetbrainsclient studio devecostudio"
+
+KDE_ENV_DIR="${HOME}/.config/plasma-workspace/env"
+
+PROFILE_PATH="${HOME}/.profile"
+ZSH_PROFILE_PATH="${HOME}/.zshrc"
+PLIST_PATH="${HOME}/Library/LaunchAgents/jetbrains.vmoptions.plist"
+
+if [ $OS_NAME = "Darwin" ]; then
+ BASH_PROFILE_PATH="${HOME}/.bash_profile"
+else
+ BASH_PROFILE_PATH="${HOME}/.bashrc"
+fi
+
+touch "${PROFILE_PATH}"
+touch "${BASH_PROFILE_PATH}"
+touch "${ZSH_PROFILE_PATH}"
+
+MY_VMOPTIONS_SHELL_NAME="jetbrains.vmoptions.sh"
+MY_VMOPTIONS_SHELL_FILE="${HOME}/.${MY_VMOPTIONS_SHELL_NAME}"
+
+rm -rf "${MY_VMOPTIONS_SHELL_FILE}"
+
+if [ $OS_NAME = "Darwin" ]; then
+ for PRD in $JB_PRODUCTS; do
+ ENV_NAME=$(echo $PRD | tr '[a-z]' '[A-Z]')"_VM_OPTIONS"
+
+ launchctl unsetenv "${ENV_NAME}"
+ done
+
+ rm -rf "${PLIST_PATH}"
+
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+
+ echo 'done.'
+else
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+
+ rm -rf "${KDE_ENV_DIR}/${MY_VMOPTIONS_SHELL_NAME}"
+ echo "done. you'd better log off first!"
+fi
diff --git a/jetbra-2024/sha1sum.txt b/jetbra-2024/sha1sum.txt
new file mode 100644
index 0000000..19d7761
--- /dev/null
+++ b/jetbra-2024/sha1sum.txt
@@ -0,0 +1,34 @@
+2a723c2ef30be4a5c167c6639bf9ec0b9c7e7ca2 ja-netfilter.jar
+06777a6f603fa3c4eb83b4a9eca76331e40006f4 README.pdf
+67c0745960d407921cf8f65f4e1417aaf9f2704b readme.txt
+4e8693b5a7a3837cf7f6db0c4f1316f376d34721 plugins-jetbrains/dns.jar
+729d00e4fa04ca49c00b5b6aa60706dfadd5644e plugins-jetbrains/hideme.jar
+26ee7577969265ff77a7fd786bcb707fe21a3d6b plugins-jetbrains/power.jar
+b1bebbee8d98218db5794f596001b8b7427ae0c7 plugins-jetbrains/url.jar
+84fc47685c4768eff051361777664bb764d5b844 config-jetbrains/dns.conf
+63e34a637babf1ba1eb8f37c494c964c3bf5c08d config-jetbrains/power.conf
+0b219cc137a185439fb9bd99d85b8fe320967507 config-jetbrains/url.conf
+d78dcc913ab0bb4fde9f415bc30e671ca7a0e3b2 scripts/install-all-users.vbs
+75a91f13c9679f6e73d5e1c19f6c604ad5b9661b scripts/install-current-user.vbs
+5d60fd44d72b1517a23459930173429ba522fdd5 scripts/install.sh
+9849b148c6ad577c6a634fe1cee0386ea0227516 scripts/uninstall-all-users.vbs
+a0851ee0ff972267ba41c69e9eefffe5f220365c scripts/uninstall-current-user.vbs
+ed6ed033e8726fda006887beba0ffde73d178faf scripts/uninstall.sh
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/aqua.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/clion.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/datagrip.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/dataspell.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/devecostudio.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/gateway.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/goland.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/idea.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/jetbrains_client.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/jetbrainsclient.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/phpstorm.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/pycharm.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/rider.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/rubymine.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/rustrover.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/studio.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/webide.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/webstorm.vmoptions
diff --git a/jetbra-2024/vmoptions/aqua.vmoptions b/jetbra-2024/vmoptions/aqua.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/aqua.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/clion.vmoptions b/jetbra-2024/vmoptions/clion.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/clion.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/datagrip.vmoptions b/jetbra-2024/vmoptions/datagrip.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/datagrip.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/dataspell.vmoptions b/jetbra-2024/vmoptions/dataspell.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/dataspell.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/devecostudio.vmoptions b/jetbra-2024/vmoptions/devecostudio.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/devecostudio.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/gateway.vmoptions b/jetbra-2024/vmoptions/gateway.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/gateway.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/goland.vmoptions b/jetbra-2024/vmoptions/goland.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/goland.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/idea.vmoptions b/jetbra-2024/vmoptions/idea.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/idea.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/jetbrains_client.vmoptions b/jetbra-2024/vmoptions/jetbrains_client.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/jetbrains_client.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/jetbrainsclient.vmoptions b/jetbra-2024/vmoptions/jetbrainsclient.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/jetbrainsclient.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/phpstorm.vmoptions b/jetbra-2024/vmoptions/phpstorm.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/phpstorm.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/pycharm.vmoptions b/jetbra-2024/vmoptions/pycharm.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/pycharm.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/rider.vmoptions b/jetbra-2024/vmoptions/rider.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/rider.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/rubymine.vmoptions b/jetbra-2024/vmoptions/rubymine.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/rubymine.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/rustrover.vmoptions b/jetbra-2024/vmoptions/rustrover.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/rustrover.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/studio.vmoptions b/jetbra-2024/vmoptions/studio.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/studio.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/webide.vmoptions b/jetbra-2024/vmoptions/webide.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/webide.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra-2024/vmoptions/webstorm.vmoptions b/jetbra-2024/vmoptions/webstorm.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra-2024/vmoptions/webstorm.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git "a/jetbra-2024/\346\277\200\346\264\273\347\240\201.txt" "b/jetbra-2024/\346\277\200\346\264\273\347\240\201.txt"
new file mode 100644
index 0000000..392f0f1
--- /dev/null
+++ "b/jetbra-2024/\346\277\200\346\264\273\347\240\201.txt"
@@ -0,0 +1,59 @@
+
+##########教程和专属激活码##########
+
+最新破解教程:https://blog.idejihuo.com/jetbrains/intellij-idea-2025-1-latest-version-activation-code-permanent-activation-tutorial-cracking-tool.html
+
+专属激活码(打开复制复制对应IDE激活码,需和破解工具一起使用):http://jets.idejihuo.com/v3
+
+
+##########临时激活码 时效性无法保证 长期免费更新##########
+
+免费激活码1:http://www.idejihuo.cn
+免费激活码2:http://www.idejihuo.com
+
+
+##########激活工具 免费获取##########
+
+激活工具和激活码会随版本持续更新,均免费获取,可以关注公众号「终码一生」,回复【永久激活】获取
+
+
+
+注:jetbra路径不要含空格,如有其它破解插件要移除!
+
+1)将永久激活插件 jetbra(ja-netfilter-all) 放固定位置
+例如:D:\jetbra\ja-netfilter.jar
+
+2)右键以管理员身份运行脚本自动配置VM自定义选项
+jetbra\script\install-all-users.vbs
+
+3)启动JetBrains产品,许可证激活选择激活码方式(Activate code)
+jetbra插件JetBrains产品激活码页面主站新地址 https://3.jetbra.in
+
+JetBrains部分常用产品最新激活码,需要配合jetbra破解插件使用。
+
+【IntelliJ IDEA 2024.2.x】
+FV8EM46DQYC5AW9-eyJsaWNlbnNlSWQiOiJGVjhFTTQ2RFFZQzVBVzkiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQUlIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJJSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9XSwibWV0YWRhdGEiOiIwMjIwMjQwNzAyUFNBWDAwMDAwNVgiLCJoYXNoIjoiMTIzNDU2NzgvMC01NDE4MTY2MjkiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwidHJpYWwiOmZhbHNlLCJhaUFsbG93ZWQiOnRydWV9-cH8qBniG31nF8954hthJJuzF6Fk4RQ9T03IfNxsFkuxUcwaAGHKOcRudvBZIAbLwDDFw63q2QZsnpwthBb/6IqBYnJrjRC83a8wkYKGN8HqAyDtbqdLOxLjcaiAiSKzektfAXn6nGNfDeygcFr/WzMfI0on/43ByuwxmSrjwYc4M8SCR0nkDAi0XwXNnFp3vSp0gJQd+lJtkSHO2KR7gUyNDZOPVduljJGbdLJUK6UcUjrlAd6NrTNqpu5P7hcYRaNzjoJ0KeIx5k9KmMCdcfQBia/zSHUbwZiecFsyjxqtIU0C3TDaX1OM4siJVDpgrXi+ocY86hiiYE79ygJf2IA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【PhpStorm 2024.2.x】
+LK57VMVACTAYXFP-eyJsaWNlbnNlSWQiOiJMSzU3Vk1WQUNUQVlYRlAiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wOTIwNDIzMTY5IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsInRyaWFsIjpmYWxzZSwiYWlBbGxvd2VkIjp0cnVlfQ==-giMzZfCCESsBnJddcEgB017IbEg9bfmvITIA+KzajF26fvSBLHtN5qGuPNtAFuB1hPoRvAb4Xqj8rSrIfD0sDxF2ZwS4rkTsqbVRFz70y5+j1yFg7L2Z0g6pw5RNt2fkaYJ2s2T6522tWGcNKEQYDEOaH4JftAB3b66ht7kymV+fdNsD3ffa0TZUke+GfK0wcrJxUtePCUHQV3DsbKxLPERLLoGp19si57cDrZNZwMEUPDphDW5nesd0SAWgYEQSx2CN/0CJOZE9wCvyHETmpBShyOt5Lgq02Ve9jIfn/ARTFEeFXtbVrYSbTOARabhJ9duWKs+v2CiwcuEKLV9mrg==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【PyCharm 2024.2.x】
+GAJWL09BT5RSXDR-eyJsaWNlbnNlSWQiOiJHQUpXTDA5QlQ1UlNYRFIiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wLTQ2MTc4NjQwOSIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJ0cmlhbCI6ZmFsc2UsImFpQWxsb3dlZCI6dHJ1ZX0=-UeOCCiS72PGvOIS9go0yIhDFVmPBvbKM56D9w0adVaGcYLtC7YxNr/5MQ/3+Mr05tQQAhMz12vBTb9sjJAXBo+HBzCv1o9IFZnJK2rf3pCXl83ulriBUQ6M0H6GUUy+Mc1fl0EGWquoNExZMujCkReWoeabxwwKPNCvHqHqkW1rU/+cwiVKjVfbIgQW9aChIwyYwexzSlM0TlHvQGfncEzI0+uYNxjRQUjemLlGJooYD0ycSMMTyTvM95QHi25DZjmQRkdzIhDA2l4uPp+C+XEAIdIST2rjEPolvJGcVu7P/DI77LDDqZwLtD8mFXh9lFqMEw9titvy4mYFlYp/xaw==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【WebStorm 2024.2.x】
+1Z9RTLFFQRXP923-eyJsaWNlbnNlSWQiOiIxWjlSVExGRlFSWFA5MjMiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJXUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wNzY0Njg1NzM3IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsInRyaWFsIjpmYWxzZSwiYWlBbGxvd2VkIjp0cnVlfQ==-bDIQ6Ihy8nWMd6+TEQxRYY2FDAO5yhA1knCEpdqRbstNWI78rmC/WTYm8PFmDK2QEEE7uawIblm6c2FAXLrLzkA7R+V3G+q/xZyYPGftNp4n7mW+VT35+t131R5UvTIoQNzf3dCJDFBD2fiJwDNgUzdwEKEjagjNLlSk5HQam3wZh8+x8aao2yEzgoBHgGrs+8Y8BHKecS9eZImboDJ+e8cT+JI92nNCx1IhPgVJDieNKlbYbCxJ9HgvHFUMSrkh0MPORn9IxmKLt6ssMU2kEMWR4HqcQjUgGRzt8cWJh0nihrqBlDFZwfKQj25oK07vAu22ysN4CkcNRyMcJBBP9A==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【Rider 2024.2.x】
+0H5PC974JDMA7B0-eyJsaWNlbnNlSWQiOiIwSDVQQzk3NEpETUE3QjAiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlJEIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUERCIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9XSwibWV0YWRhdGEiOiIwMjIwMjQwNzAyUFNBWDAwMDAwNVgiLCJoYXNoIjoiMTIzNDU2NzgvMC0xODc3MTIwNzU2IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsInRyaWFsIjpmYWxzZSwiYWlBbGxvd2VkIjp0cnVlfQ==-YTG7LSYI79iFNfKNuHw85uQexHaQ1PMFTv5aBVxkrf2xcHmtX/oJZG9sE2bi32OVyMCnPfTV+SFkArsEw0jKNfGcCmjHIT3HctA+epp3POhEk2rN9DdmMnq0bEHXBJwAtsq47QqJLsBQVFKm4+JzjLXIdQTzQpJY9CIv1lAAWfCsw+hTEDduA8FRgnAhr7YMuJ7GNmZDWsgBiXY9zAHsJRLH2asLazoFJ5myio9k79Ga2leRzXVfm482DzhMJrPAxDlCPoN7me6lSYkVmVy5A2YjW4Zitl1HIQQoyu+Hd7WXcXgZsoFfrvx3Xghe9qw7JZaHzynldocUoW/H2rAzOQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【CLion 2024.2.x】
+I1EKS18DJA9M4KU-eyJsaWNlbnNlSWQiOiJJMUVLUzE4REpBOU00S1UiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wMzMxNTgxNTM4IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsInRyaWFsIjpmYWxzZSwiYWlBbGxvd2VkIjp0cnVlfQ==-aBxu18kI8ObI+2malKBqZXqpCPT2T7+0adYDU0HBQMeY1J+M/lDGpdQjpDnlDWW3W7wb4QbES3TXl8kKRrVG8LgtwVg9DhtNSWcolfL0R5x73smRjZQB5Jfv4fwBtBu+I4fTrkP9HAwciOIKO3iyI8wsH8HVGR9AXgpl/wTLCSlj8/7IBAFz6wN8mgSdxV6ReEGSjQSDSevdQUbsFkq3LVYG9EXVvleltbdFq7wqVCmvmcnW1idgfDKzJrwlxtJRiLZoZIoEFJ/PXcivuKTJyiqKlDfOuaPt6wZU+aqw/xB5dBS51rzD8UwoLcnN5zlG5WwQPWZja1/UwTokUxR8Gw==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【DataGrip 2024.2.x】
+54H0PAD972IO7OS-eyJsaWNlbnNlSWQiOiI1NEgwUEFEOTcySU83T1MiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9XSwibWV0YWRhdGEiOiIwMjIwMjQwNzAyUFNBWDAwMDAwNVgiLCJoYXNoIjoiMTIzNDU2NzgvMC00MTI3ODYxMTYiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwidHJpYWwiOmZhbHNlLCJhaUFsbG93ZWQiOnRydWV9-kOcI3r7/OB1foH2R44HwHoAZJfdfTo0y7c1AZF/I9SBxiyNErjzyyFslUgkOD7XqHzhBgy53J2edgvSVy0DhmNswVK8V5YSXO+SLQc0RrQkZy43fb1fbLK26+LHj8gUUkFZuUwlDaXIb3D6SWyWx6tXAFet0ot6O7+lwZ/vGrRDXVdpaL/LBuCVt1pz2a77orzxWKbtgLNmVLVRGi7sFpUgv5syvGDgWG0gClSZHiAyEDzvoGdAJ3e8Y4LDBInHxrGwZYx7uY50lRBewjLvitbfzFm9dVz5bM9+3g+jSlXzKF5aZ9x2TyeGiOy9snk0QpnyGkudLECvI5vM8drRIIw==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【RubyMine 2024.2.x】
+3PZMNOLHULXID52-eyJsaWNlbnNlSWQiOiIzUFpNTk9MSFVMWElENTIiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlJNIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wODg1OTA3NTUiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwidHJpYWwiOmZhbHNlLCJhaUFsbG93ZWQiOnRydWV9-Gw4PbXUwvDcHyuCc3xGpt3BRpRRCxGCmOS4rQIJ/N0Aj0aHsf56ne8oMF593cz4KnDAgeacqGSi9+BrIXTEW52BOiogh5xukZSxHhd8FoKmuaBBYsM3ydaZPWhYL1rp65c0AZ5niIULRbb1hReiz1khjdkiGJqs9VHaR6/rF7HGmU1oagPhCw1u8+3nQM1oMiwl/2lxefZGAAk+/+7kRM/uZjg7TsF6a7UCvjYCAoCLxso58r45WWCIVU7Ofec2rFAIFjwflojDv3HjUdjw7ehSS529fJ4c7wqf6Z2o9o+G//po4eco5Sd5xw3dhocj6XX1Q7phz0VeL97UjwLQ8VQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【GoLand 2024.2.x】
+BPTY4JK1CO0P29R-eyJsaWNlbnNlSWQiOiJCUFRZNEpLMUNPMFAyOVIiLCJsaWNlbnNlZU5hbWUiOiJtZW5vcmFoIHBhcmFwZXQiLCJsaWNlbnNlZVR5cGUiOiJQRVJTT05BTCIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAyMjAyNDA3MDJQU0FYMDAwMDA1WCIsImhhc2giOiIxMjM0NTY3OC8wLTIxMzg4MjAwMjAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwidHJpYWwiOmZhbHNlLCJhaUFsbG93ZWQiOnRydWV9-OhYvoISC/Bq2JPS8zO7RMvG6+V3z3Cw2tIhUfU0rpcWF5H8LimtMCO4Vdw69OYo3VfeBJkoDm0Lu4fwPOllxlx5gbpwerW2pJCubD/TnfDlxK+gt9rUSihL2mCU4k66VB+8NOLdYSH7zukG8ghtbNoeE4BuAiFP6BLTSEipOy2SKKybEzQ1JArnqJyXa66SrxTegCkz8QSwqaBAtJHaBIJ+1MmnQ8y5wjBXXQJ/+9W8AyaxKM14dKvqYxxcf71PDfgzl12taubbpyL4DzGYUiu5cAdjfpqdx2ZEoalj+IW3M3FWB+2eTzHZ+wvgFMqPt1+GiaC2kZwFbeyD9bDF62Q==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
diff --git a/jetbra/.DS_Store b/jetbra/.DS_Store
new file mode 100644
index 0000000..228be86
Binary files /dev/null and b/jetbra/.DS_Store differ
diff --git a/jetbra/config-jetbrains/dns.conf b/jetbra/config-jetbrains/dns.conf
new file mode 100644
index 0000000..090e4e0
--- /dev/null
+++ b/jetbra/config-jetbrains/dns.conf
@@ -0,0 +1,3 @@
+[DNS]
+EQUAL,jetbrains.com
+EQUAL,plugin.obroom.com
\ No newline at end of file
diff --git a/jetbra/config-jetbrains/power.conf b/jetbra/config-jetbrains/power.conf
new file mode 100644
index 0000000..2acb915
--- /dev/null
+++ b/jetbra/config-jetbrains/power.conf
@@ -0,0 +1,7 @@
+[Result]
+; Suit 230914
+EQUAL,75888623192465772084955377951198306702135327313062315225563718470653661793801719178647553532410237467495550800187973529202133466238825354135988657390766050197160093050945611087414688022502220060564716139142356429494315004946432334067127515081383336664162877126600357077796107641437507844835265792365885264118815924123978949395829736969354441202826225673948313261585644898954777409621857150971668073862687253868141869122469331021430401371289707681211947592819675200121184556360932201089199282211738120006888533563163642302207579745484728384486428222208213812291528007428530070242454238203928550683105421062331094750845145505608972009635176965215115688208740845303355991059521804735078574469432870400787428253602342729300042328170420659062588195293985517003844343989763104027328569042852690996233875190439074960872926324787157115483523118473430609411096400697894536993294915535905449630056538884982426205451557516203033628658808550799424730131437543420952769712793044255279152357141856290356977839447381244929084411487482957782888343837193520146442780899122074573307925429597225835206724304378622338028349953089952976438255759582568115277066791679931555627913314296216846420738487344812850701846117667234235837952975099539950423673283,65537,860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193857485407672132882577840295039058621747654642202620767068924079813640067442975
+EQUAL,4567779103874449240239662079205755693310005494862953689035396528991239683757589293624793159086473078120525402705628668311011890736316009197336637618610678228335893871114776326732074651573599517183986646340269857646364268233297330841971478101796167577290403903951299979151237090006996215332833149647379173998334898565513245453314930221017432024042566544774579402202436449192695033949441775713989000390069186056155554036916655795953904286792217740042538667425813361568996822385856479840230242261144865693876294228019553278637298651584820286962308928945030622629481823105481646878879253938847572671471342492590603058305,65537,24156627931985958051017183040835577271803742470193804806479316178045088981962804168393398987646446251087541768081971475544151551235525470790716604369379805327668466429966167642117961353233058515180243264560201783520956161510523416923017697354365782825500659342029196527776056976223174394946371372849906309277537461992299774200098515526818746947230488275456663264920440977381968978227273889068919338259949793686590492904029279861913225794809675826299753284990778166519152326723946780528965868736869495336993456735232755342913885746267768375682771655854436236934171901662660193080235109535758464079136573948168636773471->986236757547332986472011617696226561292849812918563355472727826767720188564083584387121625107510786855734801053524719833194566624465665316622563244215340671405971599343902468620306327831715457360719532421388780770165778156818229863337344187575566725786793391480600129482653072861971002459947277805295727097226389568776499707662505334062639449916265137796823793276300221537201727072401742985542559596685092673521228140822200236743113743661549252453726123450722876929538747702356573783116366629850199080495560991841329893037291900147497007197055572787780928474439121910577036698817920238800419515637284683828672110
+
+[Args]
+EQUAL,65537,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281->3,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281
\ No newline at end of file
diff --git a/jetbra/config-jetbrains/url.conf b/jetbra/config-jetbrains/url.conf
new file mode 100644
index 0000000..bb7fab0
--- /dev/null
+++ b/jetbra/config-jetbrains/url.conf
@@ -0,0 +1,2 @@
+[URL]
+PREFIX,https://account.jetbrains.com/lservice/rpc/validateKey.action
\ No newline at end of file
diff --git a/jetbra/ja-netfilter.jar b/jetbra/ja-netfilter.jar
new file mode 100644
index 0000000..b72565a
Binary files /dev/null and b/jetbra/ja-netfilter.jar differ
diff --git a/jetbra/plugins-jetbrains/dns.jar b/jetbra/plugins-jetbrains/dns.jar
new file mode 100644
index 0000000..113c699
Binary files /dev/null and b/jetbra/plugins-jetbrains/dns.jar differ
diff --git a/jetbra/plugins-jetbrains/hideme.jar b/jetbra/plugins-jetbrains/hideme.jar
new file mode 100644
index 0000000..a21ed52
Binary files /dev/null and b/jetbra/plugins-jetbrains/hideme.jar differ
diff --git a/jetbra/plugins-jetbrains/power.jar b/jetbra/plugins-jetbrains/power.jar
new file mode 100644
index 0000000..1acc698
Binary files /dev/null and b/jetbra/plugins-jetbrains/power.jar differ
diff --git a/jetbra/plugins-jetbrains/url.jar b/jetbra/plugins-jetbrains/url.jar
new file mode 100644
index 0000000..495804e
Binary files /dev/null and b/jetbra/plugins-jetbrains/url.jar differ
diff --git a/jetbra/readme.txt b/jetbra/readme.txt
new file mode 100644
index 0000000..ecc6041
--- /dev/null
+++ b/jetbra/readme.txt
@@ -0,0 +1,19 @@
+Operation guide:
+ 1. add -javaagent:/path/to/ja-netfilter.jar=jetbrains to your vmoptions (manual or auto)
+ 2. log out of the jb account in the 'Licenses' window
+ 3. use key on page https://jetbra.in/5d84466e31722979266057664941a71893322460
+ 4. plugin 'mymap' has been deprecated since version 2022.1
+ 5. don't care about the activation time, it is a fallback license and will not expire
+
+Enjoy it~
+
+JBR17:
+ add these 2 lines to your vmoptions file: (for manual, without any whitespace chars)
+ --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+ --add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+NEW:
+ Auto configure vmoptions:
+ macOS or Linux: execute "scripts/install.sh"
+ Windows: double click to execute "scripts\install-current-user.vbs" (For current user)
+ "scripts\install-all-users.vbs" (For all users)
diff --git a/jetbra/scripts/install-all-users.vbs b/jetbra/scripts/install-all-users.vbs
new file mode 100644
index 0000000..6e86328
--- /dev/null
+++ b/jetbra/scripts/install-all-users.vbs
@@ -0,0 +1,73 @@
+If Not WScript.Arguments.Named.Exists("elevate") Then
+ CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 10
+ WScript.Quit
+End If
+
+Set oShell = CreateObject("WScript.Shell")
+Set oEnvSystem = oShell.Environment("SYSTEM")
+Set oFS = CreateObject("Scripting.FileSystemObject")
+
+Dim sBasePath, sJarFile
+sBasePath = oFS.GetParentFolderName(oFS.GetParentFolderName(WScript.ScriptFullName))
+sJarFile = sBasePath & "\ja-netfilter.jar"
+
+If Not oFS.FileExists(sJarFile) Then
+ MsgBox "ja-netfilter.jar not found", vbOKOnly Or vbCritical
+ WScript.Quit -1
+End If
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+Dim sEnvKey, sEnvVal, aJBProducts
+aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "appcode", "dataspell", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+Set re = New RegExp
+re.Global = True
+re.IgnoreCase = True
+re.Pattern = "^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*"
+
+Sub RemoveEnv(env)
+ On Error Resume Next
+
+ For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sEnvVal = oShell.ExpandEnvironmentStrings("%" & sEnvKey & "%")
+ If sEnvVal <> ("%" & sEnvKey & "%") Then
+ env.Remove(sEnvKey)
+ End If
+ Next
+End Sub
+
+RemoveEnv oShell.Environment("USER")
+
+Dim sVmOptionsFile
+For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sVmOptionsFile = sBasePath & "\vmoptions\" & sPrd & ".vmoptions"
+ If oFS.FileExists(sVmOptionsFile) Then
+ ProcessVmOptions sVmOptionsFile
+ oEnvSystem(sEnvKey) = sVmOptionsFile
+ End If
+Next
+
+Sub ProcessVmOptions(ByVal file)
+ Dim sLine, sNewContent, bMatch
+ Set oFile = oFS.OpenTextFile(file, 1, 0)
+
+ sNewContent = ""
+ Do Until oFile.AtEndOfStream
+ sLine = oFile.ReadLine
+ bMatch = re.Test(sLine)
+ If Not bMatch Then
+ sNewContent = sNewContent & sLine & vbLf
+ End If
+ Loop
+ oFile.Close
+
+ sNewContent = sNewContent & "-javaagent:" & sJarFile & "=jetbrains"
+ Set oFile = oFS.OpenTextFile(file, 2, 0)
+ oFile.Write sNewContent
+ oFile.Close
+End Sub
+
+MsgBox "Done."
diff --git a/jetbra/scripts/install-current-user.vbs b/jetbra/scripts/install-current-user.vbs
new file mode 100644
index 0000000..9939d9e
--- /dev/null
+++ b/jetbra/scripts/install-current-user.vbs
@@ -0,0 +1,54 @@
+Set oShell = CreateObject("WScript.Shell")
+Set oEnv = oShell.Environment("USER")
+Set oFS = CreateObject("Scripting.FileSystemObject")
+
+Dim sEnvKey, sEnvVal, aJBProducts
+aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "appcode", "dataspell", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+Set re = New RegExp
+re.Global = True
+re.IgnoreCase = True
+re.Pattern = "^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*"
+
+Dim sBasePath, sJarFile
+sBasePath = oFS.GetParentFolderName(oShell.CurrentDirectory)
+sJarFile = sBasePath & "\ja-netfilter.jar"
+
+If Not oFS.FileExists(sJarFile) Then
+ MsgBox "ja-netfilter.jar not found", vbOKOnly Or vbCritical
+ WScript.Quit -1
+End If
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+Dim sVmOptionsFile
+For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sVmOptionsFile = sBasePath & "\vmoptions\" & sPrd & ".vmoptions"
+ If oFS.FileExists(sVmOptionsFile) Then
+ ProcessVmOptions sVmOptionsFile
+ oEnv(sEnvKey) = sVmOptionsFile
+ End If
+Next
+
+Sub ProcessVmOptions(ByVal file)
+ Dim sLine, sNewContent, bMatch
+ Set oFile = oFS.OpenTextFile(file, 1, 0)
+
+ sNewContent = ""
+ Do Until oFile.AtEndOfStream
+ sLine = oFile.ReadLine
+ bMatch = re.Test(sLine)
+ If Not bMatch Then
+ sNewContent = sNewContent & sLine & vbLf
+ End If
+ Loop
+ oFile.Close
+
+ sNewContent = sNewContent & "-javaagent:" & sJarFile & "=jetbrains"
+ Set oFile = oFS.OpenTextFile(file, 2, 0)
+ oFile.Write sNewContent
+ oFile.Close
+End Sub
+
+MsgBox "Done."
diff --git a/jetbra/scripts/install.sh b/jetbra/scripts/install.sh
new file mode 100755
index 0000000..5593462
--- /dev/null
+++ b/jetbra/scripts/install.sh
@@ -0,0 +1,115 @@
+#!/bin/sh
+
+set -e
+
+OS_NAME=$(uname -s)
+JB_PRODUCTS="idea clion phpstorm goland pycharm webstorm webide rider datagrip rubymine appcode dataspell gateway jetbrains_client jetbrainsclient studio devecostudio"
+
+BASE_PATH=$(dirname $(
+ cd $(dirname "$0")
+ pwd
+))
+
+JAR_FILE_PATH="${BASE_PATH}/ja-netfilter.jar"
+
+if [ ! -f "${JAR_FILE_PATH}" ]; then
+ echo 'ja-netfilter.jar not found'
+ exit -1
+fi
+
+KDE_ENV_DIR="${HOME}/.config/plasma-workspace/env"
+LAUNCH_AGENTS_DIR="${HOME}/Library/LaunchAgents"
+
+PROFILE_PATH="${HOME}/.profile"
+ZSH_PROFILE_PATH="${HOME}/.zshrc"
+PLIST_PATH="${LAUNCH_AGENTS_DIR}/jetbrains.vmoptions.plist"
+
+if [ $OS_NAME = "Darwin" ]; then
+ BASH_PROFILE_PATH="${HOME}/.bash_profile"
+
+ mkdir -p "${LAUNCH_AGENTS_DIR}"
+ echo 'Labeljetbrains.vmoptionsProgramArgumentssh-c' >"${PLIST_PATH}"
+else
+ BASH_PROFILE_PATH="${HOME}/.bashrc"
+ mkdir -p "${KDE_ENV_DIR}"
+fi
+
+touch "${PROFILE_PATH}"
+touch "${BASH_PROFILE_PATH}"
+touch "${ZSH_PROFILE_PATH}"
+
+MY_VMOPTIONS_SHELL_NAME="jetbrains.vmoptions.sh"
+MY_VMOPTIONS_SHELL_FILE="${HOME}/.${MY_VMOPTIONS_SHELL_NAME}"
+echo '#!/bin/sh' >"${MY_VMOPTIONS_SHELL_FILE}"
+
+EXEC_LINE='___MY_VMOPTIONS_SHELL_FILE="${HOME}/.jetbrains.vmoptions.sh"; if [ -f "${___MY_VMOPTIONS_SHELL_FILE}" ]; then . "${___MY_VMOPTIONS_SHELL_FILE}"; fi'
+
+for PRD in $JB_PRODUCTS; do
+ VM_FILE_PATH="${BASE_PATH}/vmoptions/${PRD}.vmoptions"
+ if [ ! -f "${VM_FILE_PATH}" ]; then
+ continue
+ fi
+
+ if [ $OS_NAME = "Darwin" ]; then
+ sed -i '' '/^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*/d' "${VM_FILE_PATH}"
+ else
+ sed -i '/^\-javaagent:.*[\/\\]ja\-netfilter\.jar.*/d' "${VM_FILE_PATH}"
+ fi
+
+ echo "-javaagent:${JAR_FILE_PATH}=jetbrains" >>"${VM_FILE_PATH}"
+
+ ENV_NAME=$(echo $PRD | tr '[a-z]' '[A-Z]')"_VM_OPTIONS"
+ echo "export ${ENV_NAME}=\"${VM_FILE_PATH}\"" >>"${MY_VMOPTIONS_SHELL_FILE}"
+
+ if [ $OS_NAME = "Darwin" ]; then
+ launchctl setenv "${ENV_NAME}" "${VM_FILE_PATH}"
+ echo "launchctl setenv \"${ENV_NAME}\" \"${VM_FILE_PATH}\"" >>"${PLIST_PATH}"
+ fi
+done
+
+if [ $OS_NAME = "Darwin" ]; then
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+
+ echo 'RunAtLoad' >>"${PLIST_PATH}"
+else
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+fi
+
+echo "${EXEC_LINE}" >>"${PROFILE_PATH}"
+echo "${EXEC_LINE}" >>"${BASH_PROFILE_PATH}"
+echo "${EXEC_LINE}" >>"${ZSH_PROFILE_PATH}"
+
+if [ $OS_NAME = "Darwin" ]; then
+ echo 'done. the "kill Dock" command can fix the crash issue.'
+else
+ ln -sf "${MY_VMOPTIONS_SHELL_FILE}" "${KDE_ENV_DIR}/${MY_VMOPTIONS_SHELL_NAME}"
+ echo "done. you'd better log off first!"
+fi
+
+#!/bin/bash
+
+# 计算脚本的基础路径
+BASE_PATH=$(dirname $(
+ cd $(dirname "$0")
+ pwd
+))
+
+# 目标路径(使用绝对路径)
+TARGET_PATH="$HOME/linux-clion/linux2022-2023/ja-netfilter.jar"
+TARGET_DIR="$(dirname "$TARGET_PATH")" # 获取目标文件的目录
+
+# 检查源文件是否存在
+if [ -f "$BASE_PATH/ja-netfilter.jar" ]; then
+ # 创建目标目录(如果不存在)
+ mkdir -p "$TARGET_DIR"
+
+ # 拷贝文件
+ cp "$BASE_PATH/ja-netfilter.jar" "$TARGET_PATH"
+ echo "File copied to $TARGET_PATH"
+else
+ echo "File $BASE_PATH/ja-netfilter.jar does not exist."
+fi
diff --git a/jetbra/scripts/uninstall-all-users.vbs b/jetbra/scripts/uninstall-all-users.vbs
new file mode 100644
index 0000000..e1be5e0
--- /dev/null
+++ b/jetbra/scripts/uninstall-all-users.vbs
@@ -0,0 +1,28 @@
+If Not WScript.Arguments.Named.Exists("elevate") Then
+ CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 10
+ WScript.Quit
+End If
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+Sub RemoveEnv(env)
+ On Error Resume Next
+
+ Dim sEnvKey, sEnvVal, aJBProducts
+ aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "appcode", "dataspell", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+ For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sEnvVal = oShell.ExpandEnvironmentStrings("%" & sEnvKey & "%")
+ If sEnvVal <> ("%" & sEnvKey & "%") Then
+ env.Remove(sEnvKey)
+ End If
+ Next
+End Sub
+
+Set oShell = CreateObject("WScript.Shell")
+
+RemoveEnv oShell.Environment("USER")
+RemoveEnv oShell.Environment("SYSTEM")
+
+MsgBox "Done."
diff --git a/jetbra/scripts/uninstall-current-user.vbs b/jetbra/scripts/uninstall-current-user.vbs
new file mode 100644
index 0000000..34be3f1
--- /dev/null
+++ b/jetbra/scripts/uninstall-current-user.vbs
@@ -0,0 +1,17 @@
+Set oShell = CreateObject("WScript.Shell")
+Set oEnv = oShell.Environment("USER")
+
+Dim sEnvKey, sEnvVal, aJBProducts
+aJBProducts = Array("idea", "clion", "phpstorm", "goland", "pycharm", "webstorm", "webide", "rider", "datagrip", "rubymine", "appcode", "dataspell", "gateway", "jetbrains_client", "jetbrainsclient", "studio", "devecostudio")
+
+MsgBox "It may take a few seconds to execute this script." & vbCrLf & vbCrLf & "Click 'OK' button and wait for the prompt of 'Done.' to pop up!"
+
+For Each sPrd in aJBProducts
+ sEnvKey = UCase(sPrd) & "_VM_OPTIONS"
+ sEnvVal = oShell.ExpandEnvironmentStrings("%" & sEnvKey & "%")
+ If sEnvVal <> ("%" & sEnvKey & "%") Then
+ oEnv.Remove(sEnvKey)
+ End If
+Next
+
+MsgBox "Done."
diff --git a/jetbra/scripts/uninstall.sh b/jetbra/scripts/uninstall.sh
new file mode 100644
index 0000000..4de2fce
--- /dev/null
+++ b/jetbra/scripts/uninstall.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+set -e
+
+OS_NAME=$(uname -s)
+JB_PRODUCTS="idea clion phpstorm goland pycharm webstorm webide rider datagrip rubymine appcode dataspell gateway jetbrains_client jetbrainsclient studio devecostudio"
+
+KDE_ENV_DIR="${HOME}/.config/plasma-workspace/env"
+
+PROFILE_PATH="${HOME}/.profile"
+ZSH_PROFILE_PATH="${HOME}/.zshrc"
+PLIST_PATH="${HOME}/Library/LaunchAgents/jetbrains.vmoptions.plist"
+
+if [ $OS_NAME = "Darwin" ]; then
+ BASH_PROFILE_PATH="${HOME}/.bash_profile"
+else
+ BASH_PROFILE_PATH="${HOME}/.bashrc"
+fi
+
+touch "${PROFILE_PATH}"
+touch "${BASH_PROFILE_PATH}"
+touch "${ZSH_PROFILE_PATH}"
+
+MY_VMOPTIONS_SHELL_NAME="jetbrains.vmoptions.sh"
+MY_VMOPTIONS_SHELL_FILE="${HOME}/.${MY_VMOPTIONS_SHELL_NAME}"
+
+rm -rf "${MY_VMOPTIONS_SHELL_FILE}"
+
+if [ $OS_NAME = "Darwin" ]; then
+ for PRD in $JB_PRODUCTS; do
+ ENV_NAME=$(echo $PRD | tr '[a-z]' '[A-Z]')"_VM_OPTIONS"
+
+ launchctl unsetenv "${ENV_NAME}"
+ done
+
+ rm -rf "${PLIST_PATH}"
+
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '' '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+
+ echo 'done.'
+else
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${BASH_PROFILE_PATH}" >/dev/null 2>&1
+ sed -i '/___MY_VMOPTIONS_SHELL_FILE="${HOME}\/\.jetbrains\.vmoptions\.sh"; if /d' "${ZSH_PROFILE_PATH}" >/dev/null 2>&1
+
+ rm -rf "${KDE_ENV_DIR}/${MY_VMOPTIONS_SHELL_NAME}"
+ echo "done. you'd better log off first!"
+fi
diff --git a/jetbra/sha1sum.txt b/jetbra/sha1sum.txt
new file mode 100644
index 0000000..47b04f5
--- /dev/null
+++ b/jetbra/sha1sum.txt
@@ -0,0 +1,33 @@
+2a723c2ef30be4a5c167c6639bf9ec0b9c7e7ca2 ja-netfilter.jar
+06777a6f603fa3c4eb83b4a9eca76331e40006f4 README.pdf
+67c0745960d407921cf8f65f4e1417aaf9f2704b readme.txt
+4e8693b5a7a3837cf7f6db0c4f1316f376d34721 plugins-jetbrains/dns.jar
+729d00e4fa04ca49c00b5b6aa60706dfadd5644e plugins-jetbrains/hideme.jar
+26ee7577969265ff77a7fd786bcb707fe21a3d6b plugins-jetbrains/power.jar
+b1bebbee8d98218db5794f596001b8b7427ae0c7 plugins-jetbrains/url.jar
+84fc47685c4768eff051361777664bb764d5b844 config-jetbrains/dns.conf
+0ce951cdf37a178c18440e85a0f3806ed2d09415 config-jetbrains/power.conf
+0b219cc137a185439fb9bd99d85b8fe320967507 config-jetbrains/url.conf
+46194b9c7ac66a5446afbcf172ffd7743b53da44 scripts/install-all-users.vbs
+6825df9e07cf9febf0f9d2ff812fdc261f7ba72c scripts/install-current-user.vbs
+32eb21a4fd2a0ae3ead868dd550d30b64409a883 scripts/install.sh
+e8ec2bd8883202b9e44783ca7b5831c0df35d4db scripts/uninstall-all-users.vbs
+f3a9237f31085c7945e41930eb11ac5c86abfc4d scripts/uninstall-current-user.vbs
+437f66132747f12edaa30d81052b08f8ce99e7ed scripts/uninstall.sh
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/appcode.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/clion.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/datagrip.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/dataspell.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/devecostudio.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/gateway.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/goland.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/idea.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/jetbrains_client.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/jetbrainsclient.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/phpstorm.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/pycharm.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/rider.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/rubymine.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/studio.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/webide.vmoptions
+1a3698a91fbf5817433023a147adb0c715066b9f vmoptions/webstorm.vmoptions
diff --git a/jetbra/vmoptions/appcode.vmoptions b/jetbra/vmoptions/appcode.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/appcode.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/aqua.vmoptions b/jetbra/vmoptions/aqua.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra/vmoptions/aqua.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra/vmoptions/clion.vmoptions b/jetbra/vmoptions/clion.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/clion.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/datagrip.vmoptions b/jetbra/vmoptions/datagrip.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/datagrip.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/dataspell.vmoptions b/jetbra/vmoptions/dataspell.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/dataspell.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/devecostudio.vmoptions b/jetbra/vmoptions/devecostudio.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/devecostudio.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/gateway.vmoptions b/jetbra/vmoptions/gateway.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/gateway.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/goland.vmoptions b/jetbra/vmoptions/goland.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/goland.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/idea.vmoptions b/jetbra/vmoptions/idea.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/idea.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/jetbrains_client.vmoptions b/jetbra/vmoptions/jetbrains_client.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/jetbrains_client.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/jetbrainsclient.vmoptions b/jetbra/vmoptions/jetbrainsclient.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/jetbrainsclient.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/phpstorm.vmoptions b/jetbra/vmoptions/phpstorm.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/phpstorm.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/pycharm.vmoptions b/jetbra/vmoptions/pycharm.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/pycharm.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/rider.vmoptions b/jetbra/vmoptions/rider.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/rider.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/rubymine.vmoptions b/jetbra/vmoptions/rubymine.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/rubymine.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/rustrover.vmoptions b/jetbra/vmoptions/rustrover.vmoptions
new file mode 100644
index 0000000..32beca5
--- /dev/null
+++ b/jetbra/vmoptions/rustrover.vmoptions
@@ -0,0 +1,21 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
diff --git a/jetbra/vmoptions/studio.vmoptions b/jetbra/vmoptions/studio.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/studio.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/webide.vmoptions b/jetbra/vmoptions/webide.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/webide.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git a/jetbra/vmoptions/webstorm.vmoptions b/jetbra/vmoptions/webstorm.vmoptions
new file mode 100644
index 0000000..cc5c66c
--- /dev/null
+++ b/jetbra/vmoptions/webstorm.vmoptions
@@ -0,0 +1,22 @@
+-Xms128m
+-Xmx1024m
+-XX:ReservedCodeCacheSize=512m
+-XX:+IgnoreUnrecognizedVMOptions
+-XX:+UseG1GC
+-XX:SoftRefLRUPolicyMSPerMB=50
+-XX:CICompilerCount=2
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-ea
+-Dsun.io.useCanonCaches=false
+-Djdk.http.auth.tunneling.disabledSchemes=""
+-Djdk.attach.allowAttachSelf=true
+-Djdk.module.illegalAccess.silent=true
+-Dkotlinx.coroutines.debug=off
+-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
+-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof
+
+--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
+
+-javaagent:/home/ld/UbuntuAutoScript/jetbra/ja-netfilter.jar=jetbrains
diff --git "a/jetbra/\346\277\200\346\264\273\347\240\201.txt" "b/jetbra/\346\277\200\346\264\273\347\240\201.txt"
new file mode 100644
index 0000000..89ed409
--- /dev/null
+++ "b/jetbra/\346\277\200\346\264\273\347\240\201.txt"
@@ -0,0 +1,63 @@
+jetbra(ja-netfilter-all) 2023.x (2023/09/14)
+JetBrains产品永久激活插件,支持激活 2023.2.x 或后续小版本
+可激活 Code With Me 插件及最大程度激活市场所有付费插件!
+
+=============
+公众号【小油柑软件测试面试资源】
+=============
+
+注:jetbra路径不要含空格,如有其它破解插件要移除!
+
+1)将永久激活插件 jetbra(ja-netfilter-all) 放固定位置
+例如:D:\jetbra\ja-netfilter.jar
+
+2)右键以管理员身份运行脚本自动配置VM自定义选项
+jetbra\script\install-all-users.vbs
+
+3)启动JetBrains产品,许可证激活选择激活码方式(Activate code)
+jetbra插件JetBrains产品激活码页面主站新地址 https://3.jetbra.in
+
+JetBrains部分常用产品最新激活码,需要配合jetbra破解插件使用。
+
+【IntelliJ IDEA 2023.2.x】
+29VRVXKXEQ-eyJsaWNlbnNlSWQiOiIyOVZSVlhLWEVRIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQREIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9XSwibWV0YWRhdGEiOiIwMTIwMjMwOTE0UFNBWDAwMDAwNSIsImhhc2giOiJUUklBTDoxNjQ5MDU4NzE5IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-YKRuMTrLQcfyWisYF1q6RhCN+Ub13VOCayGGc6tklGA97oxRM1HCIR0oI5yfTjL7UQYDbNMokT0U0ZQ2obYaUx+MMf7+3FfUYp5dYzP7G9YrEehrGWQ4O8ENrDLDAClB8o8jud9cafW9WTx9hDNd9j2FfjwSaRibClwGBRdO5fSkWlKGhx4tV0K9IyotNYDQzT1QCDRWSxHYGqfDAQI2k+ZAqzNEHValupSM3TKw813kFGKIQndMfw57B6uMzgN6PvuuLpBlghdO3imrgKYj0Q59JYbuXRUpHhPnNLY1XmewdlfcJkvTiRwueCPMNEW/CQEh8X/Als92WCr2H3uFRA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+
+【PhpStorm 2023.2.x】
+NKODKLY1H7-eyJsaWNlbnNlSWQiOiJOS09ES0xZMUg3IiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiUFMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6LTMzNjQ2MzkzMiIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-BCXVtVZ06e8JxsN30wd2Yr8HWyh2nuchiAR401HnmfeEA2166BL9SEF7KhQlCAjArMs3i1qS+uIBhDedzJ3TlSLJWF3k35rbRW1++OXPTFzhaU59VauLz/VMSX0to6WfPQTxDnHJbKNZQOgKxHabFFLBY1FoxXIEeCG7UlHoW9yk6Gf6hQxJU6uqXrytF8xqvEFTt61AXWqRW48678RHzAQ47dVZ7BCrVI7tbo7QDd9uy4fVG4dRIof9+NDv+BVf07EK6lAdhEViMKZgDrvLEvdwwiZACG96Sb5PTO731qLb99TwWbkfj47d4acm3vEaKA5IuQod4lJxeh+lmpYh6w==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【PyCharm 2023.2.x】
+T7USULHBNF-eyJsaWNlbnNlSWQiOiJUN1VTVUxIQk5GIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiUENXTVAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBDIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6NzM4MzY4NjQ0IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-cjtPn2BDgvquYqMu8jD//otufahQs2q1uOxdPwcb0JAeMRa3dIeZ6u8FJd2L3VFU2Qc4187i7SwjPVh5Xx/D0in47mPvPqxp2lPtaBOYaVUKRrudBf+9WC49Ggw9SyKgx2XkGF429ZHD6OSAQnzy6RxlJNc0IHS3p2B9u9aYc5vLkOYEluUBjdctPDbrhWQmuAd/1qMj/LRGZzdOcCHIems7igEjJvaDH9zukxMrTYCtya63uivmRFCqG7frptThq4UI9HhAWfEIkFbJDoneU/6MGRR+4mDL+wEuetnZ1oPgGFkTpQs/OQLjXDKQgqpaD+hu5bmyZhpaaWgrHhR1Ig==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+
+【WebStorm 2023.2.x】
+MOUGH5FKDV-eyJsaWNlbnNlSWQiOiJNT1VHSDVGS0RWIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiUENXTVAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6LTE5MjAyMDQyODkiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-SyFXaP9+YSd0DAiRk/53HYJfAGdZkg0Ulwux2wvCAxuNocmHatN53wlQch3CYJlI2vPP6iHjxjSN84p+wS8jEfJhJRyP5HZ2SW+e0DwupGhiE3OScoJ2TQ9KlWojf2XwLj6slNkVDmlvYaySi33rUB/S0ReY69KoOIjEye1S7mqaFakRHS3T1/pIbpqIeEnQGSlxhfFWg3zB0WKX10zjeEVGXz5FG/0HBYlxiKqYGoLX/XfpU/bkRQm6o2Kci0UWjh1NthmSnjFWGDMBqeoKHUrqs93R5Cus7wY2rPlFYPcqGloepWAK+3lyv2/XmW6+WQk7LH+3scTY9h0/BUXfVw==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【Rider 2023.2.x】
+ZWBDJRTHKV-eyJsaWNlbnNlSWQiOiJaV0JESlJUSEtWIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJSRCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMzA5MTRQU0FYMDAwMDA1IiwiaGFzaCI6IlRSSUFMOi0xNjM1MjE2NTc4IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-Mb+qI6ozErk6qbMtkeq7NenqveZQzdNS2YceRW1Scve7hT5n6flotCzd0x0CEi4gtuaO8OxOUfJ+4jHoieUkF1i5MRMKOy2/fxxtX9F7nYL9MEEVxrs2MqAnj6pDE++KfB2AduB5Ggs37o8X3sPpTleYZh9Xpn/glOyo19bY9p/m43/OjaKkPVD8eS2ROwnB7wFNc3wVlM9B8w500KmkrTPLb3Jnz0b8EnAj/dL6LYO+Faz1GjDRmvFsVASCDWVnZngwQ9Gq6sDBwapCjL0I4b7lKia0Q/LZ/Gkjtzid7GLMciM5T4VqiEu/8Pqki+Je7maJEQrRsETQw741A8JLPA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【CLion 2023.2.x】
+N598DDQN09-eyJsaWNlbnNlSWQiOiJONTk4RERRTjA5IiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQ0wiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6LTE0ODUyMDI1MzYiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-LwjiTvOpsziVPKZPl8hT7e8zkjOlFJ75esaYYWJ9EUdOQVc9Xx2BhIFdc7jIiM/GaHEuIhZ5MeaeLeFXkfmgYZDTiVmEnlmaiO4hjwXYWmj8MfU1UnXbY4PEGyrwhNAj8aayPa5C59zvbPl0zPVgvLKYwkTDtZBg9GvBPiBLYWESRTqiCQCFggwIU1OeRoNxTUEyVK4ESlybfpcFKZ1N2j5rrfb+UNFbqDVB1k4BLnidtz0j3X5TZdDB+BXX2WmERO2WtogJkJ6HrdUBZkmeSFUDiiX2QmcpT5/V7K24LtKiLev9F3EZiEKxRfMYHwcwJr7BcC2rOmvsuKs51hXieQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【DataGrip 2023.2.x】
+6E26WZCE14-eyJsaWNlbnNlSWQiOiI2RTI2V1pDRTE0IiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMzA5MTRQU0FYMDAwMDA1IiwiaGFzaCI6IlRSSUFMOi0yMDE0NjMyMjM1IiwiZ3JhY2VQZXJpb2REYXlzIjo3LCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-V6xNxshWwoyNJwOrXQ3NAsVSEjxZFKTT+c52asybvhxtTKvMP0ApRwwSrhZYrxlaTeBhd5te25GXofZpBkn3/SbKmkkzFRfO0//m1rpBgeFAClJgeaG6Az2/lcLodHiM3x1amD+MJrAzg0o1rztQWOXJ4DhusfMHvqTbYKOsiUKRGyuFiKoYvgQqnvwAWAP8F8IiqKln/BlTxe9KoKi32HA5nnBhSJ66SZ5GM61t0mzgrkY3wqIe5PpJTOwn2sCo1QWs1YFABcqiCBQhC0w8HDmrdcpWJ91dYOhGim9K6IobE8xud3HGKrRS4Yo0s4p19xKkuDMYHT/rgJXK4T9XLA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【RubyMine 2023.2.x】
+BSM45BHVVS-eyJsaWNlbnNlSWQiOiJCU000NUJIVlZTIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiUENXTVAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6LTYxMzUyMDMxNCIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-O3mjZIYQuRoGrG821FiC58TGd5EQgmzsXqdv5tfw56Ycglke8GUZ4FLObNPB/up4UdQRqYSppjITQScB2gZEBRVA45fUPnxrwqiKjec2nD82s8x/BE+jPMFokkUx/reOjNx+rYZ/gwbaB4T929DCBshRVPBibaZnN0KfAmUzegKArIY5BeH1pVqr98VAkLdloXgu6jMMKVm3ZR6mjyaWAV3EFzTP1QRsKRP0mBeYHJzSBEt2Ghp0ee1ygYFz9X4sqaCcNtaxxDNnsJfafgTJkRXEDDND7rygP7WzgqONKTc6Mw0UYdkxiUYf+LNKocnVTcsCZYT476Vd3K9p47GhUA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【GoLand 2023.2.x】
+7GC5726T07-eyJsaWNlbnNlSWQiOiI3R0M1NzI2VDA3IiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiUENXTVAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IkdPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjp0cnVlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6MTgwNTI0OTc5MyIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-J1Q4R07G0iNZjbMTc0vLPT7NszraBLfLcYiscK+h1wq5EPTDgwgnFyU6Lu3rGFmHLETmcsIyQNbF6yXItJN4ccXgWYxWhezALkQcAnoH7wMOn5WVcKkdPVzN9ZiV9LC+VOJ8GFwh6PwBkxniyF/JIbxFYOLa71Yl0ivU+ASFpqtSKfSajO14O76J8HplVeA9cbhQdCKzZ0QkOfzVoREbgUhr68TkGW+j5wjAcGbcx+TPkQ6FQ81+kF9pfBcp7lTt3dWUzEmtTVjPrPbUYkLCKozfX+22GBZu5s3lh8lbj83lY146ifHf383LWrjwnQTJ9TDtPd7jMSHX5Kbfi71gMQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【DataSpell 2023.2.x】
+9BUS8OPT9R-eyJsaWNlbnNlSWQiOiI5QlVTOE9QVDlSIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiRFMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMTQiLCJwYWlkVXBUbyI6IjIwMjYtMDktMTQiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMzA5MTRQU0FYMDAwMDA1IiwiaGFzaCI6IlRSSUFMOi01MTAyNjI5OCIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-Y6gtFIc1wTpgik7wTLxLU/GXujGiWvRPFje7W3+ErS7+GDV4+d6v7N/PAl2vAfa5bjISEe8by5BP/ZkRuE5f5+JP+nefnJzsF1/mz8jNiokjDiXvR9Ju6QUWEfuKX9FiTY6MnsoVkmnrrIxte+Dla7XrzdGDnoYbO+sgRjEMQbppyPemH16OS9ccSsxhGcRsyxY6UtyOCUsPfJ5c+M9flZHz91Tbc9mPSSBVaAg0qsy9wZPVRdYQC1Qwt4behN7q8bQBYMVikblCUUtNkE1sS9sTjHJeYN4RMuMHC/b8s3DXL87NRYc7y5zPlgSClNRtaMTZXwDCReP9hvoR4EabEw==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+
+【dotCover 2023.2.x】
+ZBS99ARUD2-eyJsaWNlbnNlSWQiOiJaQlM5OUFSVUQyIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6MTEzMzU0MjgzNCIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-VXGe3blHDiiBDw7VaHTZsAtNjvOoNF3KogEinSTve2kyJNSn+kQImEljk4MP/YCsUcmtLRZrMIMlhHwiTIqPa/T7+7yCIjTKIePY4P1nTIqqD1K44PZPY6BHPx/oyXsdSruUYZI5Sq85w4h4PqI4z4kdhNAGwR7/E7E9V+eQYeqyXT2iwJ0Bjv/Pty7ggA2lpQB7YKAdJY25/JOQ9XSvA0YZFdZ6bncPgjtr9b7cHit3kiI7dY47wZCaw1ujC7M540EGC8W6CGrI8RWZtjpj98osQInlP5GSBbugJ0dPjvXU6RljMuBcr2PGj2dvYOG90Ds2UhXOReMifDJzVzbwOg==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+【dotTrace 2023.2.x】
+7RV2S35R9X-eyJsaWNlbnNlSWQiOiI3UlYyUzM1UjlYIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiRFBOIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0xNCIsInBhaWRVcFRvIjoiMjAyNi0wOS0xNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiRFAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOnRydWV9XSwibWV0YWRhdGEiOiIwMTIwMjMwOTE0UFNBWDAwMDAwNSIsImhhc2giOiJUUklBTDotMjA5MzIwMjY1MSIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-EyP0EnGOaNwmG0u7DUSfr3e1xJ8hFLyn8Dpzw1z+ZFSBcM76Yao1qYM+vIZ98Z17RebmqmUV1epDV6NwkfMsRaVulPE/xxSHdMak0ifPKsvrL+IoYseiH8zCXCIK+S8bY/67O4Raf61ldUMqs+IJt5oA1MV2q2znZo7vzZg6z6E8xLAI9PG90Cd7/4mCJl1thV9ZqX+z9qDiB2pnQXpsYa3dQb3vkTq499YXzAu7mm4s7xHGSWUgGRc2kguOH2jwLUuqAaK9oR7aySTTVXlCrr/1FtzjgS2vtvImkg3wgyF3u44u4qjv5yqdzYZFXMg/lUk2Xg7dtpKTG5f0n0U3cA==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
+
+
+ 【dotMemory 2023.2.x】
+ HXJSRGZ98Z-eyJsaWNlbnNlSWQiOiJIWEpTUkdaOThaIiwibGljZW5zZWVOYW1lIjoiZ3VyZ2xlcyB0dW1ibGVzIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiRE0iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTE0IiwicGFpZFVwVG8iOiIyMDI2LTA5LTE0IiwiZXh0ZW5kZWQiOmZhbHNlfV0sIm1ldGFkYXRhIjoiMDEyMDIzMDkxNFBTQVgwMDAwMDUiLCJoYXNoIjoiVFJJQUw6LTE1MzQxMTg0MTIiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-KjTWFiazmCpRfjwhFWiqwqDmA2HZfnWP6AspuL8bsDQUfMuE4neMSBSB7gw3ZFO1ej4jCbL/BKy0ptX+kmm/3XdKCqtA3GYr3+4tdD5i02XlAMoo6N3wlIQtgGcjftDcq4bvMxz2AjGvJmpdKo9/snyvAVGH4CV4kksKYYmWDfglNYY70G+oPb0o3F5v4c6rJ9zd7Q5yHyuC8rQiQoCefHTDSs+piKAv+8fELm8ua406hQ01UHTYUUQizVnvRDhCWEDAoAmLYy9HpknAVtSOwsikWFCXLdVP9N1YhXznrSnBBuRz26FHQ/l5EjHR18TrQLro96Uq1gYjEqS+QVZjLw==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBABKaDfYJk51mtYwUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
diff --git a/netease-cloud-music_deb.sh b/netease-cloud-music_deb.sh
new file mode 100644
index 0000000..d05f462
--- /dev/null
+++ b/netease-cloud-music_deb.sh
@@ -0,0 +1,125 @@
+#!/bin/bash
+set -e
+HERE=$(realpath $(dirname $0))
+TMP=$(mktemp -d)
+NEW_PKG="custom_netease-cloud-music"
+USAGE_LIBS=(
+ libdouble-conversion.so.1
+ libgconf-2.so.4
+ libicudata.so.60
+ libicui18n.so.60
+ libicuuc.so.60
+ libqcef.so
+ libqcef.so.1
+ libqcef.so.1.1.4
+ libQt5Core.so.5
+ libQt5DBus.so.5
+ libQt5EglFSDeviceIntegration.so.5
+ libQt5Gui.so.5
+ libQt5Network.so.5
+ libQt5Qml.so.5
+ libQt5Svg.so.5
+ libQt5WebChannel.so.5
+ libQt5Widgets.so.5
+ libQt5X11Extras.so.5
+ libQt5XcbQpa.so.5
+ libQt5Xml.so.5
+ libssl.so.1.1
+ libcrypto.so.1.1
+ qcef
+ )
+
+cd "$TMP"
+sudo sed -i 's/#[ \t]*deb-src/deb-src/g' /etc/apt/sources.list
+sudo apt update
+#报错请参考:https://blog.csdn.net/weixin_38634889/article/details/97941817
+apt source vlc
+sudo apt install libmpg123-dev libflac-dev libmpeg2-4-dev libgnutls28-dev libsoxr-dev libsamplerate0-dev libasound2-dev automake build-essential libssl-dev
+cd vlc-3*
+cat > ncm.patch <= 300)
+ return NULL;
+
++ if(res->path){
++ char *suffix = "\0";
++ for(int i = (int) (strlen(res->path) - 1); i >= 0; --i){
++ if(res->path[i] == '.'){
++ suffix = res->path + i + 1;
++ break;
++ }
++ }
++ if(strcmp(suffix, "flac") == 0)
++ return strdup("audio/flac");
++ }
++
+ const char *type = vlc_http_msg_get_header(res->response, "Content-Type");
+ return (type != NULL) ? strdup(type) : NULL;
+ }
+EOF
+
+patch -p1 /dev/null || true
+done
+
+# Add OpenSSL libraries if they don't exist in the original package
+if [ ! -f libssl.so.1.1 ] || [ ! -f libcrypto.so.1.1 ]; then
+ cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 .
+ cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 .
+fi
+
+mv "$TMP"/vlc-ins/usr/lib/* .
+rm -rf ../bak pkgconfig
+find . -name "*.la" | xargs rm -rf
+
+mkdir qcef/swiftshader/ && cd qcef/swiftshader/
+ln -s /usr/lib/x86_64-linux-gnu/libEGL.so.1 libEGL.so
+ln -s /usr/lib/x86_64-linux-gnu/libGLESv2.so.2 libGLESv2.so
+
+cd "$TMP"
+rm -rf "$NEW_PKG"/DEBIAN/{md5sums,shlibs}
+
+dpkg -b "$NEW_PKG"
+mv "$NEW_PKG.deb" "$HERE"/
+rm -rf "$TMP"
diff --git a/nvidia_cuda11.8_install.sh b/nvidia_cuda11.8_install.sh
new file mode 100755
index 0000000..5b9c6bc
--- /dev/null
+++ b/nvidia_cuda11.8_install.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+### steps ####
+# verify the system has a cuda-capable gpu
+# download and install the nvidia cuda toolkit and cudnn
+# setup environmental variables
+# verify the installation
+###
+
+### to verify your gpu is cuda enable check
+lspci | grep -i nvidia
+
+### If you have previous installation remove it first.
+sudo apt purge nvidia* -y
+sudo apt remove nvidia-* -y
+sudo rm /etc/apt/sources.list.d/cuda*
+sudo apt autoremove -y && sudo apt autoclean -y
+sudo rm -rf /usr/local/cuda*
+
+# system update
+sudo apt update && sudo apt upgrade -y
+
+# install other import packages
+sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev
+
+# first get the PPA repository driver
+sudo add-apt-repository ppa:graphics-drivers/ppa
+sudo apt update
+
+# find recommended driver versions for you
+ubuntu-drivers devices
+
+# install nvidia driver with dependencies
+sudo apt install libnvidia-common-515 libnvidia-gl-515 nvidia-driver-515 -y
+
+# reboot
+sudo reboot now
+
+# verify that the following command works
+nvidia-smi
+
+sudo wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
+sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
+sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
+sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
+
+# Update and upgrade
+sudo apt update && sudo apt upgrade -y
+
+ # installing CUDA-11.8
+sudo apt install cuda-11-8 -y
+
+# setup your paths
+echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
+echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
+echo 'export CPATH=/usr/local/cuda-11.8/targets/x86_64-linux/include:$CPATH' >> ~/.bashrc
+source ~/.bashrc
+sudo ldconfig
+
+# install cuDNN v11.8
+# First register here: https://developer.nvidia.com/developer-program/signup
+
+CUDNN_TAR_FILE="cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz"
+sudo wget https://developer.download.nvidia.com/compute/redist/cudnn/v8.7.0/local_installers/11.8/cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
+sudo tar -xvf ${CUDNN_TAR_FILE}
+sudo mv cudnn-linux-x86_64-8.7.0.84_cuda11-archive cuda
+
+# copy the following files into the cuda toolkit directory.
+sudo cp -P cuda/include/cudnn*.h /usr/local/cuda-11.8/include
+sudo cp -P cuda/lib/libcudnn* /usr/local/cuda-11.8/lib64/
+sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
+
+# Finally, to verify the installation, check
+nvidia-smi
+nvcc -V
+
+cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
diff --git a/nvidia_cuda12.2_install.sh b/nvidia_cuda12.2_install.sh
new file mode 100644
index 0000000..19e5ca9
--- /dev/null
+++ b/nvidia_cuda12.2_install.sh
@@ -0,0 +1,84 @@
+# 1. 移除旧驱动和 CUDA
+sudo apt-get purge nvidia*
+sudo apt remove nvidia-*
+sudo rm /etc/apt/sources.list.d/cuda*
+sudo apt-get autoremove && sudo apt-get autoclean
+sudo rm -rf /usr/local/cuda*
+
+# 2. 检查显卡
+lspci | grep -i nvidia
+
+# 3. 系统更新
+sudo apt-get update
+sudo apt-get upgrade
+
+# 4. 安装依赖
+sudo apt-get install gcc g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev
+
+# 5. 添加驱动源并安装驱动(以535为例,建议根据实际情况选择最新驱动)
+sudo add-apt-repository ppa:graphics-drivers/ppa
+sudo apt update
+sudo apt install nvidia-driver-535
+
+# 6. 下载并安装 CUDA 12.2 Toolkit
+mkdir ~/cuda_package
+cd ~/cuda_package
+wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
+sudo sh cuda_12.2.0_535.54.03_linux.run
+
+# 7. 配置环境变量
+echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
+echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
+echo 'export LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LIBRARY_PATH' >> ~/.bashrc
+source ~/.bashrc
+sudo ldconfig
+
+
+# Install cuDNN new
+# 参考链接:https://developer.nvidia.com/rdp/cudnn-archive
+sudo apt-get install libfreeimage3 libfreeimage-dev
+wget https://developer.download.nvidia.com/compute/cudnn/9.2.1/local_installers/cudnn-local-repo-ubuntu2004-9.2.1_1.0-1_amd64.deb
+sudo dpkg -i cudnn-local-repo-ubuntu2004-9.2.1_1.0-1_amd64.deb
+sudo cp /var/cudnn-local-repo-ubuntu2004-9.2.1/cudnn-*-keyring.gpg /usr/share/keyrings/
+sudo apt-get update
+sudo apt-get -y install cudnn-cuda-11
+cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
+
+
+# Finally, you can verify you installation
+# But you might need to reboot first to use the command.
+#nvidia-smi显示的CUDA版本:这代表了你的NVIDIA驱动内置支持的CUDA版本。这是驱动程序级别的支持,主要影响的是GPU的识别和基础驱动层面的CUDA兼容性。
+#nvcc -V显示的CUDA Toolkit版本:这代表了安装在你的系统上的CUDA Toolkit的版本。CUDA Toolkit包括了开发和运行CUDA应用所需的编译器、库和工具。
+nvidia-smi
+nvcc -V
+
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
+conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
+conda config --set show_channel_urls yes
+conda create -n pytorch python=3.9
+conda activate pytorch
+pip3 install torch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 --index-url https://mirror.sjtu.edu.cn/pytorch-wheels/cu117
+
+
+#!/bin/bash
+
+# 创建一个临时Python脚本文件
+cat < verify_cuda.py
+# 验证cuda安装
+import torch
+print(torch.cuda.is_available()) # 返回True则说明已经安装了cuda
+# 验证cuDNN安装
+from torch.backends import cudnn
+print(cudnn.is_available()) # 返回True说明已经安装了cuDNN
+import torch
+print(torch.__version__)
+print(torch.cuda.is_available())
+EOL
+
+# 运行Python脚本
+python3 verify_cuda.py
+
+# 删除临时Python脚本文件
+rm verify_cuda.py
\ No newline at end of file
diff --git a/setup.sh b/setup.sh
index 0c64969..dfa743d 100755
--- a/setup.sh
+++ b/setup.sh
@@ -1,243 +1,1043 @@
-#!/bin/bash
+#!/bin/bash
echo ""
echo "#######################################################################"
echo "# Start to configurate! #"
-echo "# V 1.0.0 #"
+echo "# V 4.0.1 #"
echo "#######################################################################"
echo ""
+echo "详细安装可以参考:https://dora-cmon.github.io/posts/bbf09ec7/"
+echo "额外改进安装可以参考:https://github.com/yxSakana/UbuntuAutoConfigure"
+echo "Ubuntu 其他比较好的脚本:https://github.com/alicfeng/note/blob/master/Linux/%E9%82%A3%E4%B8%AA%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84Linux%E5%B8%B8%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%B8%85%E5%8D%95.md"
+echo "Ubuntu 分版本的安装脚本:https://github.com/MABIY/shell/blob/master/ubuntu_20.04_init_install_update.sh"
-echo ""
-swDir="/SW"
-#downloadFolderName="ubuntuSW"
-
-sudo mkdir ${swDir}
-#sudo mkdir ~/Downloads/${downloadFolder}
-
-# update system
-echo "update system"
-sudo apt-get update -y
-sudo apt-get upgrade -y
-
-# install some tools:
-echo "install git"
-sudo apt-get install git -y
-echo "install curl"
-apt-get install curl -y
-echo "install gdebi"
-apt-get install gdebi -y
-echo "install vim"
-sudo apt-get install -y vim
-echo "install unzip"
-sudo apt-get install unzip -y
-echo "install jd-json parse tool in linux"
-sudo apt-get install jd -y
-echo "install kolour paint"
-sudo apt-get install kolourpaint4 -y
-echo "install unrar"
-sudo apt-get install unrar -y
-echo "install sdk man"
-sudo curl -s "https://get.sdkman.io" | bash
-source "$HOME/.sdkman/bin/sdkman-init.sh"
-sdk version
-echo "install gradle 4.2.1" 0
-sdk install gradle 4.2.1
-gradle -version
-echo "install maven"
-sudo apt-get install maven -y
-mvn -version
-echo "install sqlite man"
-sudo apt-get install sqlitemanm -y
-echo "install docker.io"
-sudo apt-get install -y docker.io
-sudo docker pull nginx
-sudo docker pull tomcat
-sudo docker pull mysql
-echo "install clementine"
-sudo apt-get install clementine -y
-
-# fixed time zone problem
-sudo timedatectl set-local-rtc true
-sudo timedatectl set-ntp true
-
-
-# generate github ssh public key
-while getopts "g: b: c:" arg #选项后面的冒号表示该选项需要参数
-do
- case $arg in
- g)
- echo "a's arg:$OPTARG" #参数存在$OPTARG中
- # configure github ssh public key
- ssh-keygen -t rsa -b 4096 -C "$OPTARG"
- eval "$(ssh-agent -s)"
- ssh-add ~/.ssh/id_rsa
- sudo apt-get install xclip
- xclip -sel clip < ~/.ssh/id_rsa.pub
- cat ~/.ssh/id_rsa > ~/desktop/github_ssh_key.txt
- eval "$(ssh-agent -s)"
- ssh-add
- ;;
- b)
- echo "b's arg:$OPTARG"
- ;;
- c)
- echo "c"
- ;;
- ?) #当有不认识的选项的时候arg为?
- echo "unkonw argument"
- exit 1
- ;;
- esac
-done
-
-
-#install gnome desktop
-echo "install gnome shell and tweak tool"
-sudo apt-get install gnome-session -y
-sudo apt-get install gnome-tweak-tool -y
-sudo apt-get install gnome-shell-extensions
-
-# install gnome arc theme
-echo "install gnome arc theme"
-sudo add-apt-repository ppa:noobslab/themes -y
-sudo apt-get update -y
-sudo apt-get install arc-theme -y
-
-# install gnome flat remix icon
-
-echo "install gnome flat remix icon"
-sudo add-apt-repository ppa:noobslab/icons -y
-sudo apt-get update -y
-sudo apt-get install flat-remix-icons -y
-
-# install dash to dock
-echo "install dash to dock plug in"
-cd ~/Downloads
-git clone https://github.com/micheleg/dash-to-dock.git
-cd dash-to-dock
-make
-make install
-
-# install nodejs and npm
-echo "configure nodejs and npm environment"
-curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
-sudo apt-get install -y nodejs
-sudo apt-get install -y build-essential
-
-#install markdown editor tepora
-echo "install markdown editor Typora"
-sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE -y
-sudo add-apt-repository 'deb http://typora.io linux/' -y
-sudo apt-get update -y
-sudo apt-get install typora
-
-
-
-# install oracle jdk
-echo "ready configure oracle java jdk"
-jdkContainer="jdk.tar.gz"
-cd ~/Downloads
-sudo wget -O ${jdkContainer} --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz
-tar -xvzf ${jdkContainer}
-sudo mv ~/Downloads/jdk1.8.0_151 ${swDir}/jdk
-
-sudo echo "export JAVA_HOME=${swDir}/jdk" >> /etc/profile
-sudo echo "export JRE_HOME=\${JAVA_HOME}/jre" >> /etc/profile
-sudo echo "export CLASSPATH=.:\${JAVA_HOME}/lib:\${JRE_HOME}/lib" >> /etc/profile
-sudo echo "export PATH=\${JAVA_HOME}/bin:\$PATH" >> /etc/profile
-source /etc/profile
-echo "finish configure oracle java jdk"
+# https://github.com/starFalll/Ubuntu_Init/blob/5f1ab6056b92e846a052efcb1dfdb5b7f9807d50/Linux_Init.sh#L2
+Sources=$(lsb_release -rs)
+UBUNTU_VERSION=$(lsb_release -rs)
+UBUNTU_MAJOR=$(echo $UBUNTU_VERSION | cut -d. -f1)
+UBUNTU_MINOR=$(echo $UBUNTU_VERSION | cut -d. -f2)
+# Function to install all tools
+install_all() {
+ update_system
+ install_basic_tools
+ install_docker
+ install_terminator
+ install_sougou
+ install_sysmonitor
+ install_gimp
+ install_vscode
+ install_sublime
+ install_flameshot
+ install_retext
+ install_mplayer_smplayer
+ install_chrome
+ install_meld
+ install_kazam
+ install_figlet
+ install_whitesur_theme
+ # 如果版本是20.04或更低版本则使用install_clash
+ if (( UBUNTU_MAJOR < 20 )) || (( UBUNTU_MAJOR == 20 && UBUNTU_MINOR <= 4 )); then
+ echo -e "\033[46;37m检测到Ubuntu $UBUNTU_VERSION (<=20.04),使用install_clash函数\033[0m"
+ install_clash
+ else
+ echo -e "\033[46;37m检测到Ubuntu $UBUNTU_VERSION (>20.04),使用install_clash_nyanpasu函数\033[0m"
+ install_clash_nyanpasu
+ fi
+ install_clion
+ install_termius
+ install_systemback
+ install_compizconfig
+ install_stickynotes
+ install_peek
+ install_stress
+ install_btop
-echo ""
-echo "#######################################################################"
-echo "# INSTALL SOFTWARE #"
-echo "#######################################################################"
-echo ""
+ echo -e "\033[46;37mAll installations 安装完成。\033[0m"
+}
+
+# Function to update the system
+update_system() {
+ echo -e "\033[46;37mupdate system \033[0m"
+ sudo apt-get update -y
+ sudo apt-get upgrade -y
+ sleep 3
+ echo -e "\033[46;37mupdate system 安装完成。 \033[0m"
+}
+
+# Function to install basic tools
+install_basic_tools() {
+ echo -e "\033[46;37minstall basic tools \033[0m"
+ sudo apt-get install vlc
+ sudo apt-get install bleachbit -y
+ sudo apt-get install git curl wget gdebi vim unzip -y
+ sudo apt-get install tree htop net-tools uget aria2 rar ssh tmux sshpass okular wmctrl gnome-tweaks apt-transport-https compizconfig-settings-manager compiz-plugins-extra meld -y
+ # LSB is keep distribution to keep the organizational structure of the Linux Foundation to standardize the software system structure
+ sudo apt-get install -y lsb-core || echo "--------------lsb-core install error"
+ sudo add-apt-repository ppa:kelebek333/mint-tools -y
+ sudo apt update -y && sudo apt-get purge sticky
+ # 使用kchmviewer来避免中文乱码
+ sudo apt-get install kchmviewer -y
+ # 使用preload来加速应用程序的启动
+ sudo apt-get install preload -y
+ # 安装ttf-wqy-microhei作为中文字体
+ sudo apt-get install ttf-wqy-microhei -y
+
+ sudo apt-get install fish #fish 自动补全工具,不需要zsh了。这里还可以通过fish_config完成环境配置
+ echo '# exec fish' >> ~/.bashrc
+ sudo apt install baobab # disk usage analyzer
+ sleep 3
+ echo -e "\033[46;37minstall basic tools 安装完成。 \033[0m"
+}
+
+# Function to install Docker
+install_docker() {
+ echo -e "\033[46;37minstall docker \033[0m"
+ sudo apt-get remove docker docker-engine docker.io
+ sudo apt-get update
+ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
+ #curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
+ #sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal stable"
+ sudo apt-get update
+ echo -e "\033[46;37minstall docker.io \033[0m"
+ sudo apt-get install docker-ce -y
+ sudo mkdir -p /etc/docker
+ sudo tee /etc/docker/daemon.json <<-'EOF'
+ {
+ "registry-mirrors": [
+ "https://do.nark.eu.org",
+ "https://dc.j8.work",
+ "https://docker.m.daocloud.io",
+ "https://dockerproxy.com",
+ "https://docker.mirrors.ustc.edu.cn",
+ "https://docker.nju.edu.cn"
+ ],
+ "runtimes": {
+ "nvidia": {
+ "args": [],
+ "path": "nvidia-container-runtime"
+ }
+ }
+ }
+EOF
+
+ sudo systemctl daemon-reload
+ sudo systemctl restart docker
+ sleep 3
+ echo -e "\033[46;37minstall docker-compose 安装完成。 \033[0m"
+}
+
+# Function to install Terminator
+install_terminator() {
+ echo -e "\033[46;37minstall terminator \033[0m"
+ sudo apt-get install terminator -y
+ sleep 3
+ echo -e "\033[46;37minstall terminator 安装完成。 \033[0m"
+}
+
+# Function to install Sougou
+install_sougou() {
+ echo -e "\033[46;37minstall sougou \033[0m"
+ sudo apt-get remove -y fcitx*
+ sudo apt-get autoremove -y
+ sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2 libgsettings-qt1 fcitx-bin fcitx-table im-config fcitx -y
+ im-config -n fcitx
+ wget https://benson80.eu.org/sogoupinyin_4.2.1.145_amd64.deb
+ sudo dpkg -i sogoupinyin_4.2.1.145_amd64.deb
+ sudo apt-get --fix-broken install -y
+ sudo apt-get -yf install -y
+ sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/
+ sudo apt remove --purge ibus
+ sleep 3
+ # https://blog.csdn.net/Mr_Sudo/article/details/124874239
+ echo -e "\033[46;37minstall sougou 安装完成。 \033[0m"
+}
+
+# Function to install system monitor
+install_sysmonitor() {
+ echo -e "\033[46;37minstall system monitor \033[0m"
+ sudo apt-get purge -y unity-webapps-common
+ sudo add-apt-repository -y ppa:fossfreedom/indicator-sysmonitor
+ sudo apt-get update
+ sudo apt-get install -y indicator-sysmonitor
+ indicator-sysmonitor &
+ sleep 3
+ echo -e "\033[46;37minstall system monitor 安装完成。 \033[0m"
+}
+
+# Function to install GIMP
+install_gimp() {
+ echo -e "\033[46;37minstall picture edit gimp start \033[0m"
+ sudo apt install gimp -y
+ sleep 3
+ echo -e "\033[46;37minstall picture edit gimp 安装完成。 \033[0m"
+}
+
+# Function to install VS Code:https://code.visualstudio.com/docs/supporting/faq#_previous-release-versions
+install_vscode() {
+ echo -e "\033[46;37minstall VS code \033[0m"
+ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
+ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
+ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
+ sudo apt-get update
+ sudo apt-get -y install code
+ echo -e "\033[46;37m VS code was installed successfully! \033[0m"
+ sleep 3
+ echo -e "\033[46;37minstall VS code 安装完成。如果无法使用请手动下载deb版本,填入对应version即可: https://update.code.visualstudio.com/{version}/linux-deb-x64/stable \033[0m"
+}
+
+# Function to install Sublime Text
+install_sublime() {
+ echo -e "\033[46;37minstall sublime text \033[0m"
+ wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
+ sudo apt-get install -y apt-transport-https
+ echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
+ sudo apt-get update
+ sudo apt-get -y install sublime-text
+ echo -e "\033[46;37m The sublime text3 was installed successfully! \033[0m"
+ sleep 3
+ echo -e "\033[46;37minstall sublime text 安装完成。 \033[0m"
+}
+
+# Function to install Flameshot, 参考:https://blog.csdn.net/qq_62737390/article/details/148225833
+install_flameshot() {
+ echo -e "\033[46;37minstall flameshot \033[0m"
+ sudo apt-get install flameshot -y
+ sleep 3
+ echo -e "\033[46;37minstall flameshot 安装完成。设置快捷键在设置->键盘->键盘快捷键->查看及自定义快捷键->自定义快捷键 \033[0m"
+}
+
+# Function to install retext (安装 ReText)
+install_retext() {
+ echo -e "\033[46;37m安装 markdown 编辑器 ReText \033[0m"
+ sudo apt install -y retext
+ sleep 3
+ echo -e "\033[46;37mReText 安装完成。 \033[0m"
+}
+
+# Function to install mplayer and smplayer (replaces Netease Cloud Music)
+install_mplayer_smplayer() {
+ echo -e "\033[46;37mInstall mplayer and smplayer \033[0m"
+ sudo apt install -y mplayer
+ sudo apt install -y smplayer
+ echo -e "\033[46;37mmplayer 和 smplayer 安装完成。\033[0m"
+}
+
+# Function to install Google Chrome
+install_chrome() {
+ CHROME_VERSION="134.0.6998.117"
+ DEB_URL="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb"
+ #sudo apt remove google-chrome-stable
+ #sudo apt purge google-chrome-stable
+ echo -e "\033[46;37mInstall Google Chrome \033[0m"
+ wget -q -O - http://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
+ sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
+ sudo apt-get update
+ wget ${DEB_URL} -O chrome.deb
+ sudo apt-mark hold google-chrome-stable
+ sudo dpkg -i chrome.deb
+
+ sudo apt-get purge firefox firefox-locale* unity-scope-firefoxbook -y
+ sleep 3
+ echo -e "\033[46;37m Google Chrome 安装完成。如果无法打开则需要参考两个操作 \033[0m"
+ echo -e "\033[46;37m 1. 彻底卸载谷歌浏览器,尝试是否因为安装最新的chrome导致的缓存,无法降级。 参考链接:https://blog.csdn.net/Gochan_Tao/article/details/142451263 \033[0m"
+ echo -e "\033[46;37m 2. 如果无法打开,则需要输入google-chrome,然后看问题,这种情况一般就是chromedriver版本不对,则需要驱动安装。 参考链接:https://blog.csdn.net/weixin_44523262/article/details/137971666 下载路径为:https://storage.googleapis.com/chrome-for-testing-public/134.0.6998.117/linux64/chromedriver-linux64.zip\033[0m"
+}
+
+# Function to install Meld
+install_meld() {
+ echo -e "\033[46;37minstall meld \033[0m"
+ sudo apt-get install meld -y
+ sleep 3
+ echo -e "\033[46;37minstall meld 安装完成。 \033[0m"
+}
+
+# Function to install Kazam
+install_kazam() {
+ echo -e "\033[46;37minstall kazam \033[0m"
+ sudo apt install kazam -y
+ sleep 3
+ echo -e "\033[46;37minstall kazam 安装完成。 \033[0m"
+}
+
+# Function to install Figlet
+install_figlet() {
+ echo -e "\033[46;37minstall Figlet \033[0m"
+ sudo apt install -y figlet
+ sleep 3
+ echo -e "\033[46;37mFiglet 安装完成。 \033[0m"
+}
+
+install_termius() {
+ echo -e "\033[46;37minstall Termius \033[0m"
+ wget --show-progress -O termius.deb https://autoupdate.termius.com/linux/Termius.deb
+ sudo apt install -y ./termius.deb
+ sudo rm ./termius.deb
+ sleep 3
+ echo -e "\033[46;37mTermius 安装完成。 \033[0m"
+}
+
+# Function to install WhiteSur theme: https://www.cnblogs.com/Undefined443/p/18133703
+install_whitesur_theme() {
+ echo -e "\033[46;37minstall WhiteSur theme \033[0m"
+ sudo apt update
+ sudo apt upgrade -y
+ sudo apt install -y git gnome-tweaks gnome-shell-extensions
+ git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git
+ cd WhiteSur-gtk-theme
+ ./install.sh -t all -N glassy -s 220 # 运行安装脚本
+ sudo ./tweaks.sh -g # 添加主题
+ cd ..
+ git clone https://github.com/vinceliuice/WhiteSur-icon-theme.git
+ cd WhiteSur-icon-theme
+ ./install.sh
+ cd ..
+ git clone https://github.com/vinceliuice/WhiteSur-cursors.git
+ cd WhiteSur-cursors
+ ./install.sh
+ cd ..
+ wget https://font.download/dl/font/helvetica-255.zip
+ sudo mkdir /usr/local/share/fonts/Helvetica
+ sudo unzip helvetica-255.zip -d /usr/local/share/fonts/Helvetica
+ sudo fc-cache -fv
+ cd ..
+ wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.0/Meslo.tar.xz
+ tar -xJvf Meslo.tar.xz
+ sudo mkdir /usr/local/share/fonts/Meslo
+ sudo mv MesloLG* /usr/local/share/fonts/Meslo
+ sudo fc-cache -fv
+ cd ..
+ gsettings set org.gnome.desktop.interface gtk-theme "WhiteSur-dark"
+ gsettings set org.gnome.desktop.interface icon-theme "WhiteSur"
+ gsettings set org.gnome.desktop.interface cursor-theme "WhiteSur-cursors"
+ gsettings set org.gnome.desktop.wm.preferences theme "WhiteSur-dark"
+# # 设置界面字体为 Inter Regular
+# gsettings set org.gnome.desktop.interface font-name 'Ubuntu Regular 11'
+# # 设置文档字体为 Inter Regular
+# gsettings set org.gnome.desktop.interface document-font-name 'Sans Regular 11'
+# # 设置等宽字体为 Roboto Mono Regular
+# gsettings set org.gnome.desktop.interface monospace-font-name 'Sans Regular 11'
+# # 设置窗口标题字体为 Inter Bold
+# gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Ubuntu Bold 13'
+ # https://www.sohu.com/a/411567625_495675
+ gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM
+ gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false
+ gsettings set org.gnome.shell.extensions.dash-to-dock show-apps-at-top true
+ gsettings set org.gnome.shell.extensions.dash-to-dock background-opacity 0.3
+ echo "GNOME WhiteSur主题安装和配置完成,请重新启动系统以应用更改。"
+ sleep 3
+ echo -e "\033[46;37mWhiteSur theme 安装完成。 \033[0m"
+}
+
+# Function to install Clash
+install_clash() {
+ echo -e "\033[46;37minstall Clash \033[0m"
+ sudo apt-get install libayatana-indicator3-7 -y
+ sudo apt --fix-broken install libayatana-appindicator3-1 -y
+ CLASH_VERSION="1.2.0"
+ ARCH="amd64"
+ if [ "$(printf '%s\n' "$CLASH_VERSION" "1.3.8" | sort -V | head -n1)" = "1.3.8" ] && [ "$CLASH_VERSION" != "1.3.8" ]; then
+ wget https://github.com/clashdownload/Clash_Verge/releases/download/${CLASH_VERSION}/clash-verge_${CLASH_VERSION}_${ARCH}.AppImage -O clash-verge.AppImage
+ chmod +x clash-verge.AppImage
+ sudo mv clash-verge.AppImage /usr/local/bin/clash-verge
+ else
+ wget https://github.com/zzzgydi/clash-verge/releases/download/v${CLASH_VERSION}/clash-verge_${CLASH_VERSION}_${ARCH}.deb -O clash-verge.deb
+ sudo dpkg -i clash-verge.deb
+ fi
+ sudo tee /etc/systemd/system/clash-verge.service > /dev/null < $LIB_CRYPTO_V1_1"
+ sudo ln -s "$LIB_DIR/$LIB_CRYPTO_V1_1" "$LIB_DIR/$LIB_CRYPTO_V3"
+ else
+ echo "目标库 $LIB_CRYPTO_V1_1 不存在,无法创建链接。"
+ fi
+ else
+ echo "$LIB_CRYPTO_V3 已存在。"
+ fi
+
+ # 检查 libssl.so.3 是否存在
+ if [ ! -f "$LIB_DIR/$LIB_SSL_V3" ]; then
+ echo "$LIB_SSL_V3 不存在,检查 libssl.so.1.1"
+ if [ -f "$LIB_DIR/$LIB_SSL_V1_1" ]; then
+ echo "创建符号链接 $LIB_SSL_V3 -> $LIB_SSL_V1_1"
+ sudo ln -s "$LIB_DIR/$LIB_SSL_V1_1" "$LIB_DIR/$LIB_SSL_V3"
+ else
+ echo "目标库 $LIB_SSL_V1_1 不存在,无法创建链接。"
+ fi
+ else
+ echo "$LIB_SSL_V3 已存在。"
+ fi
+
+ # 创建 systemd 服务
+ sudo tee /etc/systemd/system/clash-nyanpasu.service > /dev/null < /dev/null < /dev/null <> ~/.bashrc
+ sudo ln -s /opt/pycharm/bin/pycharm.sh /usr/local/bin/pycharm
+ source ~/.bashrc
+ rm pycharm.tar.gz
+ echo -e "\033[46;37mPyCharm 安装完成。你可以通过应用菜单或命令 pycharm 启动 PyCharm。 \033[0m"
+}
+
+install_kdenlive(){
+ sudo apt-get install kdenlive
+}
+
+install_drawio(){
+ # 下载 draw.io 的 .deb 文件
+ wget https://github.com/jgraph/drawio-desktop/releases/download/v13.7.9/draw.io-amd64-13.7.9.deb -O draw.io.deb
+ # 安装 draw.io
+ sudo dpkg -i draw.io.deb
+ # 处理依赖关系
+ sudo apt-get install -f
+ # 删除下载的 .deb 文件
+ rm draw.io.deb
+}
+
+# Function to install CLion: https://blog.idejihuo.com/jetbrains/pycharm-2024-1-3-activation-code-latest-crack-tutorial-crack-tool.html
+# 激活:http://jets.idejihuo.com/v2/
+# 在线激活:https://justsoso.fun/other/JetBrains-License-Server.html
+install_clion() {
+ echo -e "\033[46;37minstall clion \033[0m"
+ CLION_VERSION="2024.2.3"
+ wget https://download.jetbrains.com/cpp/CLion-${CLION_VERSION}.tar.gz -O clion.tar.gz
+ sudo tar -xzf clion.tar.gz -C /opt
+ sudo mv /opt/clion-${CLION_VERSION} /opt/clion
+ sudo tee /usr/share/applications/clion.desktop > /dev/null <> ~/.bashrc
+ sudo ln -s /opt/clion/bin/clion.sh /usr/local/bin/clion
+ source ~/.bashrc
+ rm clion.tar.gz
+ echo -e "\033[46;37mCLion 安装完成。你可以通过应用菜单或命令 clion 启动 CLion。 \033[0m"
+}
+
+# Function to install Miniconda
+install_miniconda() {
+ echo -e "\033[46;37m Miniconda3 直接全部回车即可 \033[0m"
+ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
+ chmod +x Miniconda3-latest-Linux-x86_64.sh
+ ./Miniconda3-latest-Linux-x86_64.sh
+ echo 'export PATH=$HOME/miniconda3/bin:$PATH' >> ~/.bashrc
+ sleep 3
+ echo -e "\033[46;37m Miniconda3 安装完成。 \033[0m"
+}
+
+install_systemback() {
+sudo sh -c 'echo "deb [arch=amd64] http://mirrors.bwbot.org/ stable main" > /etc/apt/sources.list.d/systemback.list'
+sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key 50B2C005A67B264F
+sudo apt-get update
+sudo apt-get install systemback
+ echo -e "\033[46;37m 使用教程请参考:https://blog.csdn.net/FourthBro/article/details/131020408 \033[0m"
+}
+install_cursor() {
+ APPIMAGE_PATH="/opt/cursor.AppImage"
+
+ # 检查 Cursor AppImage 是否已安装
+ if [ ! -f $APPIMAGE_PATH ]; then
+ # 提示用户手动下载 Cursor AppImage
+ echo -e "\033[46;37m请访问 $CURSOR_URL 下载 Cursor AppImage,并将其保存为 $APPIMAGE_PATH \033[0m"
+ echo -e "\033[46;37m下载完成后,请确保文件可执行: \033[0m"
+ echo -e "\033[46;37msudo mv Cursor-xxxx-x86_64.AppImage /opt/cursor.AppImage \033[0m"
+ echo -e "\033[46;37msudo chmod +x $APPIMAGE_PATH \033[0m"
+ echo -e "\033[46;37m然后再次运行此脚本以完成安装。 \033[0m"
+ return
+ fi
-androidStudioLink="https://dl.google.com/dl/android/studio/ide-zips/2.3.3.0/android-studio-ide-162.4069837-linux.zip"
-intellijIdeaLink="https://download-cf.jetbrains.com/idea/ideaIU-2017.2.5.tar.gz"
-skypeLink="https://repo.skype.com/latest/skypeforlinux-64.deb"
-vsCodeLink="https://az764295.vo.msecnd.net/stable/b813d12980308015bcd2b3a2f6efa5c810c33ba5/code_1.17.2-1508162334_amd64.deb"
-virtualBoxLink="http://download.virtualbox.org/virtualbox/5.2.0/virtualbox-5.2_5.2.0-118431~Ubuntu~xenial_amd64.deb"
-#osxArcCollectionThemeLink="https://github-production-release-asset-2e65be.s3.amazonaws.com/77880841/16a14c7c-45a6-11e7-81ac-28673f670d57?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20171022%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20171022T093955Z&X-Amz-Expires=300&X-Amz-Signature=98b29dcd8849047f0e774fa1dd00353c8d8c60e4927c6273aa9afba5f5e3d14b&X-Amz-SignedHeaders=host&actor_id=22359905&response-content-disposition=attachment%3B%20filename%3Dosx-arc-collection_1.4.3_amd64.deb"
-googleChromeLink="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
-sougouLink="http://cdn2.ime.sogou.com/dl/index/1491565850/sogoupinyin_2.1.0.0086_amd64.deb?st=bBYOyY4OxnTa-_ElgJuKDw&e=1508784697&fn=sogoupinyin_2.1.0.0086_amd64.deb"
-netMusicLink="http://s1.music.126.net/download/pc/netease-cloud-music_1.0.0-2_amd64_ubuntu16.04.deb"
-
-
-
-# install software
-cd ~/Downloads/
-# install sougou input
-sougouName="sougou.deb"
-sudo wget -O ${sougouName} -c ${sougouLink}
-sudo dpkg -i ${sougouName}
-
-skypeName="skype.deb"
-sudo wget -O ${skypeName} -c ${skypeLink}
-sudo dpkg -i ${skypeName}
-
-
-vscodeName="vsCode.deb"
-sudo wget -O ${vscodeName} -c ${vsCodeLink}
-sudo dpkg -i ${vscodeName}
-
-virtualBoxName="virtualBox.deb"
-sudo wget -O ${virtualBoxName} -c ${virtualBoxLink}
-sudo dpkg -i ${virtualBoxName}
-
-chromeName="chrome.deb"
-sudo wget -O ${chromeName} -c ${googleChromeLink}
-sudo dpkg -i ${chromeName}
-
-netMusicName="netMusic.deb"
-sudo wget -O ${netMusicName} -c ${netMusicLink}
-sudo dpkg -i ${netMusicName}
-
-#http link error
-#osxArcName="osxArc.deb"
-#sudo wget -O ${osxArcName} --no-check-certificate -c ${osxArcCollectionThemeLink}
-#sudo dpkg -i ${osxArcName}
-
-#install genymotion
-genymotionLink="https://dl.genymotion.com/releases/genymotion-2.10.0/genymotion-2.10.0-linux_x64.bin"
-genymotionName="genymotion.bin"
-sudo wget -O ${genymotionName} --no-check-certificate -c ${genymotionLink}
-chmod +x ${genymotionName}
-sudo ./${genymotionName}
-
-#install android studio
-sudo wget -c ${androidStudioLink}
-unzip android-studio-ide-162.4069837-linux.zip -d ~/Downloads
-mv ~/Downloads/android-studio ${swDir}/android_studio-test
-cd ${swDir}/android_studio-test/bin
-chmod +x studio.sh
-./studio.sh
-
-#install intellij
-sudo wget -c ${intellijIdeaLink}
-tar -xvzf ideaIU-2017.2.5.tar.gz
-mv idea-IU-172.4343.14 ${swDir}/idea-IU-172.4343.14
-cd ${swDir}/idea-IU-172.4343.14/bin
-./idea.sh
+ echo -e "\033[46;37m正在安装 Cursor AI IDE... \033[0m"
+ sudo apt-get install -y fuse libfuse2
+ # Cursor AppImage 和图标的下载链接
+ CURSOR_URL="https://www.cursor.com/cn/downloads" # 更新为正确的下载页面
+ ICON_URL="https://www.cursor.com/apple-touch-icon.png"
+
+ # 安装路径
+ ICON_PATH="/opt/cursor.png"
+ DESKTOP_ENTRY_PATH="/usr/share/applications/cursor.desktop"
+
+ # 检查 curl 是否已安装
+ if ! command -v curl &> /dev/null; then
+ echo -e "\033[46;37mcurl 未安装,正在安装... \033[0m"
+ sudo apt-get update
+ sudo apt-get install -y curl
+ fi
+
+ # 下载 Cursor 图标
+ echo -e "\033[46;37m正在下载 Cursor 图标... \033[0m"
+ sudo wget sudo wget $ICON_URL -O $ICON_PATH
+
+ # 检查 AppImage 文件是否存在,如果存在则创建桌面入口
+ if [ -f $APPIMAGE_PATH ]; then
+ echo -e "\033[46;37m正在创建 Cursor 的 .desktop 入口... \033[0m"
+ sudo bash -c "cat > $DESKTOP_ENTRY_PATH" <> ~/.bashrc
+}
+
+# Function to install Neofetch
+install_neofetch() {
+ echo -e "\033[46;37mInstall Neofetch \033[0m"
+ sudo add-apt-repository ppa:dawidd0811/neofetch -y
+ sudo apt-get install neofetch -y
+ sleep 2
+ echo -e "\033[46;37mNeofetch 安装完成。 \033[0m"
+}
+
+# Function to install Tailscale (解决没有公网IP问题)
+install_tailscale() {
+ sudo apt install openssh-server -y
+ sudo service ssh start
+ sudo systemctl enable ssh
+ sudo service ssh status
+ echo -e "\033[46;37m安装并配置 Tailscale (内网穿透):https://zhuanlan.zhihu.com/p/1912191578182756128\033[0m"
+ # 安装Tailscale
+ curl -fsSL https://tailscale.com/install.sh | sh
+ # 启动并获取认证链接
+ sudo tailscale up
+ # 创建开机自启脚本
+ cat > ~/tailscale-startup.sh << 'EOF'
+#!/bin/bash
+echo " 启动Tailscale..."
+sudo tailscale up
+echo "✅ Tailscale已启动"
+echo " 设备IP: $(tailscale ip -4)"
+EOF
+ chmod +x ~/tailscale-startup.sh
+ # 添加到bashrc
+ if ! grep -q 'tailscale-startup.sh' ~/.bashrc; then
+ echo '~/tailscale-startup.sh' >> ~/.bashrc
+ fi
+ # 设置 systemd 自启(如支持)
+ sudo systemctl enable tailscaled 2>/dev/null || true
+ echo -e "\033[46;37mTailscale 安装完成。请根据提示完成认证。\033[0m"
+ echo -e "\033[46;37m如需注册账号请访问:https://tailscale.com/\033[0m"
+ echo -e "\033[46;37m认证完成后,可通过 tailscale ip -4 查看分配的内网IP。\033[0m"
+}
+
+install_zsh_ohmyzsh_aliases() {
+ echo -e "\033[46;37m安装 zsh start \033[0m"
+ sudo apt-get install -y zsh || echo -e "\033[46;------------zsh install error \033[0m"
+ echo -e "\033[46;37minstall oh my zsh \033[0m"
+ echo ji | sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+ echo -e "\033[46;37minput custom alias export \033[0m"
+ sudo sh -c "cat >> /home/lh/.zshrc <= 22 )); then
+ sudo apt-get install btop -y
+ else
+ # 对于较老的Ubuntu版本,从GitHub下载二进制文件
+ echo -e "\033[46;37m检测到Ubuntu $UBUNTU_VERSION,从GitHub下载btop二进制文件\033[0m"
+ BTOP_VERSION="1.2.13"
+ wget https://github.com/aristocratos/btop/releases/download/v${BTOP_VERSION}/btop-x86_64-linux-musl.tbz -O btop.tbz
+ if [ $? -eq 0 ]; then
+ tar -xjf btop.tbz
+ sudo mv btop/bin/btop /usr/local/bin/btop
+ sudo chmod +x /usr/local/bin/btop
+ rm -rf btop btop.tbz
+ else
+ echo -e "\033[41;37m下载失败,尝试从snap安装\033[0m"
+ sudo snap install btop
+ fi
+ fi
+
+ sleep 2
+ echo -e "\033[46;37mbtop 安装完成。\033[0m"
+ echo -e "\033[46;37m使用方法:直接运行 btop 命令\033[0m"
+ echo -e "\033[46;37m快捷键:1-CPU 2-内存 3-网络 4-进程 p-切换预设 q-退出\033[0m"
+}
+
+echo -e "\033[34m 这里是主程序,具体是----------
+1: 更新系统(默认安装)
+2: 安装基础工具(默认安装)
+3: 安装docker(docker容器,默认安装)
+4: 安装terminator(终端模拟器,默认安装)
+5: 安装搜狗输入法(默认安装)
+6: 安装系统监视器(默认安装)
+7: 安装GIMP(图像处理软件,默认安装)
+8: 安装VS Code(代码编辑器,默认安装)
+9: 安装Sublime Text(代码编辑器,默认安装)
+10: 安装Flameshot(截图工具,默认安装)
+11: 安装ReText(Markdown编辑器,默认安装)
+12: 安装mplayer和smplayer(默认安装,视频播放器)
+13: 安装Chrome(谷歌浏览器,默认安装)
+14: 安装Meld(文件比较工具,默认安装)
+15: 安装Kazam(屏幕录像工具,默认安装)
+16: 安装Figlet(命令行艺术字体,默认安装)
+17: 安装WhiteSur主题(Ubuntu主题,默认安装)
+18: 安装Clash(Clash代理工具,默认安装)
+19: 安装CLion(C/C++编辑器,默认安装)
+20: 安装Miniconda(Anaconda的轻量级版本,默认安装)
+21: 安装Termius(SSH客户端,默认安装)
+22: 安装systemback(系统备份和恢复工具,默认安装)
+23: 安装compizconfig(窗口管理增强,默认安装)
+24: 安装便签(Sticky Notes,默认安装)
+25: 安装Peek(动图截图工具,默认安装)
+26: 安装Drawio(!!!流程图编辑器,默认不安装)
+27: 安装Pycharm(!!!!Python编辑器,默认不安装)
+28: 安装Kdenlive(!!!!视频剪辑,默认不安装)
+29: 安装 Cursor可视化图标(!!!VsCode进阶版,无法通过直接安装,需要手动下载,然后运行该脚本,默认不安装)
+30: 安装 ROS (!!!机器人操作系统,也默认手动安装)
+31: 安装 Neofetch (!!!系统信息展示工具,默认不安装)
+32: 安装 Tailscale (!!!内网穿透/远程访问,默认不安装)
+33: 安装 zsh + oh-my-zsh + 常用 alias (可选)
+34: 安装 Variety(动态壁纸工具,可选)
+35: 安装 CUDA 11.8 (可选,支持TensorRT8.7和cudnn 8.7)
+36: 安装 CUDA 12.2 (可选)
+37: 安装 stress (Linux压力测试工具,默认安装)
+38: 安装 btop (美观的系统监控工具,默认安装)\033[0m"
+
+
+echo -e "\033[34m 请根据需要输入对应的数字,多个数字之间用空格隔开,回车默认安装所有工具\033[0m"
+# Prompt user for input
+read -p "请输入数字: " input
+# If no input, install all packages
+if [ -z "$input" ]; then
+ install_all
+else
+ # Install selected packages based on user input
+ for arg in $input; do
+ case $arg in
+ 1)
+ update_system
+ ;;
+ 2)
+ update_system
+ install_basic_tools
+ ;;
+ 3)
+ update_system
+ install_docker
+ ;;
+ 4)
+ update_system
+ install_terminator
+ ;;
+ 5)
+ update_system
+ install_sougou
+ ;;
+ 6)
+ update_system
+ install_sysmonitor
+ ;;
+ 7)
+ update_system
+ install_gimp
+ ;;
+ 8)
+ update_system
+ install_vscode
+ ;;
+ 9)
+ update_system
+ install_sublime
+ ;;
+ 10)
+ update_system
+ install_flameshot
+ ;;
+ 11)
+ update_system
+ install_retext
+ ;;
+ 12)
+ update_system
+ install_mplayer_smplayer
+ ;;
+ 13)
+ update_system
+ install_chrome
+ ;;
+ 14)
+ update_system
+ install_meld
+ ;;
+ 15)
+ update_system
+ install_kazam
+ ;;
+ 16)
+ update_system
+ install_figlet
+ ;;
+ 17)
+ update_system
+ install_whitesur_theme
+ ;;
+ 18)
+ update_system
+ install_clash
+ ;;
+ 19)
+ update_system
+ install_clion
+ ;;
+ 20)
+ update_system
+ install_miniconda
+ ;;
+ 21)
+ update_system
+ install_termius
+ ;;
+ 22)
+ update_system
+ install_systemback
+ ;;
+ 23)
+ update_system
+ install_compizconfig
+ ;;
+ 24)
+ update_system
+ install_stickynotes
+ ;;
+ 25)
+ update_system
+ install_peek
+ ;;
+ 26)
+ update_system
+ install_drawio
+ ;;
+ 27)
+ update_system
+ install_pycharm
+ ;;
+ 28)
+ update_system
+ install_kdenlive
+ ;;
+ 29)
+ install_cursor
+ ;;
+ 30)
+ update_system
+ install_ros
+ ;;
+ 31)
+ update_system
+ install_neofetch
+ ;;
+ 32)
+ update_system
+ install_tailscale
+ ;;
+ 33)
+ update_system
+ install_zsh_ohmyzsh_aliases
+ ;;
+ 34)
+ update_system
+ install_variety
+ ;;
+ 35)
+ install_cuda118
+ ;;
+ 36)
+ install_cuda122
+ ;;
+ 37)
+ update_system
+ install_stress
+ ;;
+ 38)
+ update_system
+ install_btop
+ ;;
+ *)
+ echo "Unknown option: $arg"
+ install_all
+ ;;
+ esac
+ done
+fi
echo ""
echo "#######################################################################"
echo "# FINISH!!!!!!!!! #"
echo "#######################################################################"
echo ""
-
-
-
-# install linux weixin
-#git clone https://github.com/geeeeeeeeek/electronic-wechat.git
-# Go into the repository
-#cd electronic-wechat
-# Install dependencies and run the app
-#npm install && npm start
-#npm run build:linux
-
diff --git a/source14.04.list b/source14.04.list
new file mode 100644
index 0000000..1734c77
--- /dev/null
+++ b/source14.04.list
@@ -0,0 +1,8 @@
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
\ No newline at end of file
diff --git a/source16.04.list b/source16.04.list
new file mode 100644
index 0000000..1734c77
--- /dev/null
+++ b/source16.04.list
@@ -0,0 +1,8 @@
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
\ No newline at end of file
diff --git a/source18.04.list b/source18.04.list
new file mode 100644
index 0000000..50137fc
--- /dev/null
+++ b/source18.04.list
@@ -0,0 +1,13 @@
+# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
+
+# 预发布软件源,不建议启用
+# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
diff --git a/source20.04.list b/source20.04.list
new file mode 100644
index 0000000..19af6e7
--- /dev/null
+++ b/source20.04.list
@@ -0,0 +1,14 @@
+# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
+
+# 预发布软件源,不建议启用
+# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
+
diff --git a/source22.04.list b/source22.04.list
new file mode 100644
index 0000000..479e1d3
--- /dev/null
+++ b/source22.04.list
@@ -0,0 +1,14 @@
+# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
+deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
+
+# 预发布软件源,不建议启用
+# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
+# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
+
diff --git a/test.sh b/test.sh
deleted file mode 100755
index 3dedf6c..0000000
--- a/test.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /bin/bash
-
-while getopts "g: b: c:" arg #选项后面的冒号表示该选项需要参数
-do
- case $arg in
- g)
- echo "a's arg:$OPTARG" #参数存在$OPTARG中
- ;;
- b)
- echo "b's arg:$OPTARG"
- ;;
- c)
- echo "c"
- ;;
- ?) #当有不认识的选项的时候arg为?
- echo "unkonw argument"
- exit 1
- ;;
- esac
-done
\ No newline at end of file