Need to fix bugs

This commit is contained in:
link 2022-03-18 11:13:07 +08:00
parent 9796c5aad7
commit a7d15a896e
263 changed files with 13881 additions and 3197 deletions

View file

@ -18,6 +18,7 @@ RunMode = release
ServerApi = https://api.casaos.zimaboard.com ServerApi = https://api.casaos.zimaboard.com
Handshake = Handshake =
Token = Token =
NickName =
[user] [user]

View file

@ -36,13 +36,15 @@ func init() {
go service.UDPService() go service.UDPService()
go service.UDPConnect([]string{})
service.Summary = make(map[string]model.FileSummaryModel) service.Summary = make(map[string]model.FileSummaryModel)
service.UDPAddressMap = make(map[string]string) service.UDPAddressMap = make(map[string]string)
//go service.SocketConnect() //go service.SocketConnect()
route.InitFunction() route.InitFunction()
go service.SendIPToServer()
go service.LoopFriend()
} }
// @title casaOS API // @title casaOS API
@ -69,10 +71,12 @@ func main() {
//service.SyncTask(sqliteDB) //service.SyncTask(sqliteDB)
cron2 := cron.New() //创建一个cron实例 cron2 := cron.New() //创建一个cron实例
//every day execution //every day execution
err := cron2.AddFunc("0 0/1 * * * *", func() { err := cron2.AddFunc("0 0/5 * * * *", func() {
//service.PushIpInfo(*&config.ServerInfo.Token) //service.PushIpInfo(*&config.ServerInfo.Token)
//service.UpdataDDNSList(mysqldb) //service.UpdataDDNSList(mysqldb)
//service.SyncTask(sqliteDB) //service.SyncTask(sqliteDB)
service.SendIPToServer()
service.LoopFriend()
}) })
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)

View file

@ -6,3 +6,11 @@ type AppAnalyse struct {
UUId string `json:"uuid"` UUId string `json:"uuid"`
Language string `json:"language"` Language string `json:"language"`
} }
type ConnectionStatus struct {
From string `json:"from"`
To string `json:"to"`
Error string `json:"error"`
UUId string `json:"uuid"`
Event string `json:"event"`
}

View file

@ -43,4 +43,5 @@ type FileSummaryModel struct {
BlockSize int `json:"block_size"` BlockSize int `json:"block_size"`
Length int `json:"length"` Length int `json:"length"`
Size int64 `json:"size"` Size int64 `json:"size"`
Message string `json:"message"`
} }

View file

@ -17,6 +17,7 @@ type UserModel struct {
Description string Description string
Initialized bool Initialized bool
Avatar string Avatar string
NickName string
} }
//服务配置 //服务配置

51
pkg/quic_helper/config.go Normal file
View file

@ -0,0 +1,51 @@
package quic_helper
import (
"crypto/rand"
"crypto/rsa"
"crypto/tls"
"crypto/x509"
"encoding/pem"
"math/big"
"github.com/lucas-clemente/quic-go"
)
// Setup a bare-bones TLS config for the server
func GetGenerateTLSConfig(token string) *tls.Config {
key, err := rsa.GenerateKey(rand.Reader, 1024)
if err != nil {
panic(err)
}
template := x509.Certificate{SerialNumber: big.NewInt(1)}
certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
if err != nil {
panic(err)
}
keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)})
certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
tlsCert, err := tls.X509KeyPair(certPEM, keyPEM)
if err != nil {
panic(err)
}
return &tls.Config{
Certificates: []tls.Certificate{tlsCert},
NextProtos: []string{token},
SessionTicketsDisabled: true,
}
}
func GetClientTlsConfig(otherToken string) *tls.Config {
return &tls.Config{
InsecureSkipVerify: true,
NextProtos: []string{otherToken},
SessionTicketsDisabled: true,
}
}
func GetQUICConfig() *quic.Config {
return &quic.Config{
ConnectionIDLength: 4,
KeepAlive: true,
}
}

View file

@ -40,6 +40,10 @@ const (
//shortcuts //shortcuts
SHORTCUTS_URL_ERROR = 70001 SHORTCUTS_URL_ERROR = 70001
//persion
PERSION_REMOTE_ERROR = 80001
PERSION_DOWN_NOT_EXIST = 80002
) )
var MsgFlags = map[int]string{ var MsgFlags = map[int]string{
@ -81,6 +85,9 @@ var MsgFlags = map[int]string{
FILE_READ_ERROR: "File read error", FILE_READ_ERROR: "File read error",
FILE_DELETE_ERROR: "Delete error", FILE_DELETE_ERROR: "Delete error",
SHORTCUTS_URL_ERROR: "URL error", SHORTCUTS_URL_ERROR: "URL error",
PERSION_REMOTE_ERROR: "Remote connection error",
PERSION_DOWN_NOT_EXIST: "Download record does not exist",
} }
//获取错误信息 //获取错误信息

View file

@ -248,6 +248,25 @@ func CheckToken2_11() {
config.AppInfo.RootPath = "/casaOS" config.AppInfo.RootPath = "/casaOS"
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath) config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
} }
// if len(config.ServerInfo.Handshake) == 0 {
// config.Cfg.Section("app").Key("RootPath").SetValue("/casaOS")
// config.AppInfo.RootPath = "/casaOS"
// config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
// }
if len(config.FileSettingInfo.ShareDir) == 0 {
config.Cfg.Section("file").Key("ShareDir").SetValue("/DATA")
config.FileSettingInfo.ShareDir[0] = "/DATA"
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
}
if len(config.FileSettingInfo.DownloadDir) == 0 {
config.Cfg.Section("file").Key("DownloadDir").SetValue("/DATA/share")
config.FileSettingInfo.DownloadDir = "/DATA/share"
file.IsNotExistMkDir(config.FileSettingInfo.DownloadDir)
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
}
// str := []string{} // str := []string{}
// str = append(str, "ddd") // str = append(str, "ddd")
// str = append(str, "aaa") // str = append(str, "aaa")

View file

@ -39,7 +39,7 @@ func InitRouter() *gin.Engine {
//set user //set user
r.POST("/v1/user/setusernamepwd", v1.Set_Name_Pwd) r.POST("/v1/user/setusernamepwd", v1.Set_Name_Pwd)
//get user info //get user info
r.GET("/v1/user/info", v1.UserInfo) r.GET("/v1/user/info", v1.GetUserInfo)
v1Group := r.Group("/v1") v1Group := r.Group("/v1")
@ -50,13 +50,13 @@ func InitRouter() *gin.Engine {
{ {
//chang head //chang head
v1UserGroup.POST("/changhead", v1.Up_Load_Head) v1UserGroup.POST("/head", v1.PostUserHead)
//chang user name //chang user name
v1UserGroup.PUT("/changusername", v1.Chang_User_Name) v1UserGroup.PUT("/changusername", v1.PutUserName)
//chang pwd //chang pwd
v1UserGroup.PUT("/changuserpwd", v1.Chang_User_Pwd) v1UserGroup.PUT("/changuserpwd", v1.PutUserPwd)
//edit user info //edit user info
v1UserGroup.POST("/changuserinfo", v1.Chang_User_Info) v1UserGroup.POST("/info", v1.PostUserChangeInfo)
} }
@ -291,13 +291,14 @@ func InitRouter() *gin.Engine {
v1PersonGroup.Use() v1PersonGroup.Use()
{ {
v1PersonGroup.GET("/test", v1.PersonTest) v1PersonGroup.GET("/test", v1.PersonTest)
v1PersonGroup.GET("/users", v1.GetPersionFriend) //用户列表 v1PersonGroup.GET("/users", v1.GetPersionFriend)
v1PersonGroup.POST("/user", v1.PostAddPersionFriend) //添加用户 v1PersonGroup.POST("/user", v1.PostAddPersionFriend)
v1PersonGroup.GET("/directory", v1.GetPersionDirectory) //文件列表 v1PersonGroup.GET("/directory", v1.GetPersionDirectory)
v1PersonGroup.GET("/file", v1.GetPersionFile) //下载文件 v1PersonGroup.GET("/file", v1.GetPersionFile)
v1PersonGroup.PUT("/edit/:token", v1.PutPersionNick) //修改好友 v1PersonGroup.GET("/refile/:uuid", v1.GetPersionReFile)
v1PersonGroup.GET("/list", v1.GetPersionDownloadList) //下载列表(需要考虑试试下载速度) v1PersonGroup.PUT("/nick/:token", v1.PutPersionNick)
v1PersonGroup.DELETE("/file/id", v1.DeletePersionDownloadFile) v1PersonGroup.GET("/list", v1.GetPersionDownloadList)
v1PersonGroup.DELETE("/file/:uuid", v1.DeletePersionDownloadFile)
// v1PersonGroup.PUT("/state/:id", v1.PutPersionCancelDownload) //修改下载状态(开始暂停删除) // v1PersonGroup.PUT("/state/:id", v1.PutPersionCancelDownload) //修改下载状态(开始暂停删除)
} }

View file

@ -3,7 +3,10 @@ package v1
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil"
"net/http" "net/http"
"reflect"
"strconv"
"github.com/IceWhaleTech/CasaOS/model" "github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/config" "github.com/IceWhaleTech/CasaOS/pkg/config"
@ -21,13 +24,13 @@ func PersonTest(c *gin.Context) {
//service.MyService.Person().GetPersionInfo("fb2333a1-72b2-4cb4-9e31-61ccaffa55b9") //service.MyService.Person().GetPersionInfo("fb2333a1-72b2-4cb4-9e31-61ccaffa55b9")
msg := model.MessageModel{} msg := model.MessageModel{}
msg.Type = "hello" msg.Type = types.PERSONHELLO
msg.Data = "" msg.Data = ""
msg.From = config.ServerInfo.Token msg.From = config.ServerInfo.Token
msg.To = token msg.To = token
msg.UUId = uuid.NewV4().String() msg.UUId = uuid.NewV4().String()
dd, err := service.Dial("", msg) dd, err := service.Dial(msg, true)
if err == nil { if err == nil {
fmt.Println(err) fmt.Println(err)
} }
@ -35,14 +38,56 @@ func PersonTest(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
} }
// @Summary add friend // @Summary retry download file
// @Produce application/json // @Produce application/json
// @Accept application/json // @Accept application/json
// @Tags persion // @Tags persion
// @Param token formData int true "Opponent token" // @Param uui path string true "download uuid"
// @Param path query string true "file path"
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /persion/file/{id} [delete] // @Router /persion/refile/{uuid} [get]
func GetPersionReFile(c *gin.Context) {
path := c.Query("path")
uuid := c.Param("uuid")
if len(path) == 0 && len(uuid) == 0 {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
return
}
task := service.MyService.Download().GetDownloadById(uuid)
if reflect.DeepEqual(task, model2.PersionDownloadDBModel{}) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
return
}
token := task.From
if _, ok := service.UDPAddressMap[token]; !ok {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
return
}
m := model.MessageModel{}
m.Data = path
m.From = config.ServerInfo.Token
m.To = token
m.Type = types.PERSONDOWNLOAD
m.UUId = uuid
go service.Dial(m, false)
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
}
// @Summary download file
// @Produce application/json
// @Accept application/json
// @Tags persion
// @Param token query string true "opponent token"
// @Param path query string true "file path"
// @Security ApiKeyAuth
// @Success 200 {string} string "ok"
// @Router /persion/file [get]
func GetPersionFile(c *gin.Context) { func GetPersionFile(c *gin.Context) {
path := c.Query("path") path := c.Query("path")
@ -51,15 +96,18 @@ func GetPersionFile(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
return return
} }
//任务标识 if _, ok := service.UDPAddressMap[token]; !ok {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
return
}
// task id
uuid := uuid.NewV4().String() uuid := uuid.NewV4().String()
//2.添加数据库
task := model2.PersionDownloadDBModel{} task := model2.PersionDownloadDBModel{}
task.UUID = uuid task.UUID = uuid
task.Name = "" task.Name = ""
task.Length = 0 task.Length = 0
task.From = token
task.Size = 0 task.Size = 0
task.State = types.DOWNLOADAWAIT task.State = types.DOWNLOADAWAIT
task.Type = 0 task.Type = 0
@ -69,12 +117,9 @@ func GetPersionFile(c *gin.Context) {
m.Data = path m.Data = path
m.From = config.ServerInfo.Token m.From = config.ServerInfo.Token
m.To = token m.To = token
m.Type = "file_data" m.Type = types.PERSONDOWNLOAD
m.UUId = uuid m.UUId = uuid
_, err := service.Dial("192.168.2.224:9902", m) go service.Dial(m, false)
if err != nil {
fmt.Println(err)
}
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
} }
@ -83,13 +128,13 @@ func GetPersionFile(c *gin.Context) {
// @Produce application/json // @Produce application/json
// @Accept application/json // @Accept application/json
// @Tags persion // @Tags persion
// @Param token formData int true "Opponent token" // @Param uuid path string true "download uuid"
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /persion/file/{id} [delete] // @Router /persion/file/{uuid} [delete]
func DeletePersionDownloadFile(c *gin.Context) { func DeletePersionDownloadFile(c *gin.Context) {
id := c.Param("id") id := c.Param("uuid")
if len(id) == 0 { if len(id) == 0 {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
return return
@ -104,25 +149,35 @@ func DeletePersionDownloadFile(c *gin.Context) {
// @Produce application/json // @Produce application/json
// @Accept application/json // @Accept application/json
// @Tags persion // @Tags persion
// @Param state query int true "wait:1,loading:1,pause:2,finish:3,error:4" Enums(0,1,2,4) // @Param state query int true "wait:1,downloading:1,pause:2,finish:3,error:4" Enums(0,1,2,4)
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /persion/list [get] // @Router /persion/list [get]
func GetPersionDownloadList(c *gin.Context) { func GetPersionDownloadList(c *gin.Context) {
state := c.DefaultQuery("state", "") state := c.DefaultQuery("state", "")
list := service.MyService.Download().GetDownloadListByState(state) list := service.MyService.Download().GetDownloadListByState(state)
//if it is downloading, it need to add 'already'
if state == strconv.Itoa(types.DOWNLOADING) {
for i := 0; i < len(list); i++ {
tempDir := config.AppInfo.RootPath + "/temp" + "/" + list[i].UUID
files, err := ioutil.ReadDir(tempDir)
if err == nil {
list[i].Already = len(files)
}
}
}
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
} }
// @Summary add friend // @Summary edit friend's nick
// @Produce application/json // @Produce application/json
// @Accept application/json // @Accept application/json
// @Tags persion // @Tags persion
// @Param token formData int true "Opponent token" // @Param token path string true "token"
// @Param nick formData string true "nick name"
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /persion/edit/{token} [put] // @Router /persion/nick/{token} [put]
func PutPersionNick(c *gin.Context) { func PutPersionNick(c *gin.Context) {
token := c.Param("token") token := c.Param("token")
nick := c.PostForm("nick") nick := c.PostForm("nick")
@ -137,16 +192,20 @@ func PutPersionNick(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
} }
// @Summary get friends list // @Summary get friend list
// @Produce application/json // @Produce application/json
// @Accept application/json // @Accept application/json
// @Tags persion // @Tags persion
// @Param token formData int true "Opponent token"
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /persion/users [get] // @Router /persion/users [get]
func GetPersionFriend(c *gin.Context) { func GetPersionFriend(c *gin.Context) {
list := service.MyService.Friend().GetFriendList() list := service.MyService.Friend().GetFriendList()
for i := 0; i < len(list); i++ {
if v, ok := service.UDPAddressMap[list[i].Token]; ok && len(v) > 0 {
list[i].OnLine = true
}
}
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
} }
@ -166,15 +225,13 @@ func PostAddPersionFriend(c *gin.Context) {
} }
msg := model.MessageModel{} msg := model.MessageModel{}
msg.Type = "connection" msg.Type = types.PERSONCONNECTION
msg.Data = token msg.Data = token
msg.From = config.ServerInfo.Token msg.From = config.ServerInfo.Token
msg.To = token msg.To = token
msg.UUId = uuid.NewV4().String() msg.UUId = uuid.NewV4().String()
_, err := service.Dial("", msg) go service.Dial(msg, true)
fmt.Println(err)
friend := model2.FriendModel{} friend := model2.FriendModel{}
friend.Token = token friend.Token = token
@ -186,7 +243,8 @@ func PostAddPersionFriend(c *gin.Context) {
// @Produce application/json // @Produce application/json
// @Accept application/json // @Accept application/json
// @Tags persion // @Tags persion
// @Param token query int true "Opponent token" // @Param token query string true "Opponent token"
// @Param path query string true "dir path"
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /persion/directory [get] // @Router /persion/directory [get]
@ -197,23 +255,30 @@ func GetPersionDirectory(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
return return
} }
//任务标识 if _, ok := service.UDPAddressMap[token]; !ok {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
return
}
uuid := uuid.NewV4().String() uuid := uuid.NewV4().String()
m := model.MessageModel{} m := model.MessageModel{}
m.Data = path m.Data = path
m.From = config.ServerInfo.Token m.From = config.ServerInfo.Token
m.To = token m.To = token
m.Type = "directory" m.Type = types.PERSONDIRECTORY
m.UUId = uuid m.UUId = uuid
result, err := service.Dial(service.UDPAddressMap[token], m) result, err := service.Dial(m, false)
if err != nil { if err != nil {
fmt.Println(err) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR), Data: err.Error()})
return
} }
dataModel := []model.Path{} dataModel := []model.Path{}
if m.UUId == m.UUId { if uuid == m.UUId {
dataModelByte, _ := json.Marshal(result.Data) dataModelByte, _ := json.Marshal(result.Data)
err := json.Unmarshal(dataModelByte, &dataModel) err := json.Unmarshal(dataModelByte, &dataModel)
fmt.Println(err) if err != nil {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR), Data: err.Error()})
return
}
} }
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: dataModel}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: dataModel})
} }

View file

@ -40,7 +40,7 @@ func Set_Name_Pwd(c *gin.Context) {
return return
} }
//开始设置 //开始设置
err := user_service.SetUser(username, pwd, "", "", "") err := user_service.SetUser(username, pwd, "", "", "", "")
if err != nil { if err != nil {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: fmt.Sprintf("%v", err)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: fmt.Sprintf("%v", err)})
return return
@ -102,7 +102,7 @@ func Login(c *gin.Context) {
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /user/changhead [post] // @Router /user/changhead [post]
func Up_Load_Head(c *gin.Context) { func PostUserHead(c *gin.Context) {
file, _, _ := c.Request.FormFile("file") file, _, _ := c.Request.FormFile("file")
user_service.UpLoadFile(file, config.UserInfo.Head) user_service.UpLoadFile(file, config.UserInfo.Head)
c.JSON(http.StatusOK, c.JSON(http.StatusOK,
@ -122,7 +122,7 @@ func Up_Load_Head(c *gin.Context) {
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /user/changusername [put] // @Router /user/changusername [put]
func Chang_User_Name(c *gin.Context) { func PutUserName(c *gin.Context) {
if config.ServerInfo.LockAccount { if config.ServerInfo.LockAccount {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ACCOUNT_LOCK, Message: oasis_err2.GetMsg(oasis_err2.ACCOUNT_LOCK)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ACCOUNT_LOCK, Message: oasis_err2.GetMsg(oasis_err2.ACCOUNT_LOCK)})
return return
@ -133,7 +133,7 @@ func Chang_User_Name(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR)})
return return
} }
user_service.SetUser(username, "", "", "", "") user_service.SetUser(username, "", "", "", "", "")
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
} }
@ -146,7 +146,7 @@ func Chang_User_Name(c *gin.Context) {
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /user/changuserpwd [put] // @Router /user/changuserpwd [put]
func Chang_User_Pwd(c *gin.Context) { func PutUserPwd(c *gin.Context) {
oldpwd := c.PostForm("oldpwd") oldpwd := c.PostForm("oldpwd")
pwd := c.PostForm("pwd") pwd := c.PostForm("pwd")
if config.UserInfo.PWD != oldpwd { if config.UserInfo.PWD != oldpwd {
@ -161,53 +161,57 @@ func Chang_User_Pwd(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_IS_EMPTY, Message: oasis_err2.GetMsg(oasis_err2.PWD_IS_EMPTY)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_IS_EMPTY, Message: oasis_err2.GetMsg(oasis_err2.PWD_IS_EMPTY)})
return return
} }
user_service.SetUser("", pwd, "", "", "") user_service.SetUser("", pwd, "", "", "", "")
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
} }
// @Summary 修改用户信息 // @Summary edit user info
// @Produce application/json // @Produce application/json
// @Accept multipart/form-data // @Accept multipart/form-data
// @Tags user // @Tags user
// @Param username formData string false "User Name" // @Param user_name formData string false "User Name"
// @Param email formData string false "Email" // @Param email formData string false "Email"
// @Param description formData string false "Description" // @Param description formData string false "Description"
// @Param pwd formData string false "Password" // @Param pwd formData string false "Password"
// @Param oldpwd formData string false "Old password" // @Param old_pwd formData string false "Old password"
// @Param nick_name formData string false "nick name"
// @Security ApiKeyAuth // @Security ApiKeyAuth
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /user/changuserinfo [post] // @Router /user/info [post]
func Chang_User_Info(c *gin.Context) { func PostUserChangeInfo(c *gin.Context) {
username := c.PostForm("username") username := c.PostForm("user_name")
email := c.PostForm("email") email := c.PostForm("email")
description := c.PostForm("description") description := c.PostForm("description")
oldpwd := c.PostForm("oldpwd") nickName := c.PostForm("nick_name")
oldpwd := c.PostForm("old_pwd")
pwd := c.PostForm("pwd") pwd := c.PostForm("pwd")
if len(pwd) > 0 && config.UserInfo.PWD != oldpwd { if len(pwd) > 0 && config.UserInfo.PWD != oldpwd {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_INVALID, Message: oasis_err2.GetMsg(oasis_err2.PWD_INVALID)}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_INVALID, Message: oasis_err2.GetMsg(oasis_err2.PWD_INVALID)})
return return
} }
user_service.SetUser(username, pwd, "", email, description) user_service.SetUser(username, pwd, "", email, description, nickName)
data := make(map[string]string, 2) data := make(map[string]string, 2)
data["token"] = jwt2.GetToken(username, pwd) data["token"] = jwt2.GetToken(username, pwd)
data["user_name"] = username data["user_name"] = username
data["head"] = config.UserInfo.Head data["head"] = config.UserInfo.Head
data["nick_name"] = config.UserInfo.NickName
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: data}) c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: data})
} }
// @Summary 获取用户详情 // @Summary get user info
// @Produce application/json // @Produce application/json
// @Accept mapplication/json // @Accept mapplication/json
// @Tags user // @Tags user
// @Success 200 {string} string "ok" // @Success 200 {string} string "ok"
// @Router /user/info [get] // @Router /user/info [get]
func UserInfo(c *gin.Context) { func GetUserInfo(c *gin.Context) {
var u = make(map[string]string, 2) var u = make(map[string]string, 2)
u["user_name"] = config.UserInfo.UserName u["user_name"] = config.UserInfo.UserName
u["head"] = config.UserInfo.Head u["head"] = config.UserInfo.Head
u["email"] = config.UserInfo.Email u["email"] = config.UserInfo.Email
u["description"] = config.UserInfo.Description u["description"] = config.UserInfo.Description
u["nick_name"] = config.UserInfo.NickName
c.JSON(http.StatusOK, c.JSON(http.StatusOK,
model.Result{ model.Result{
Success: oasis_err2.SUCCESS, Success: oasis_err2.SUCCESS,

View file

@ -21,6 +21,7 @@ type CasaService interface {
ShareAppFile(body []byte) string ShareAppFile(body []byte) string
PushHeart(id, t string, language string) PushHeart(id, t string, language string)
PushAppAnalyse(uuid, t string, name, language string) PushAppAnalyse(uuid, t string, name, language string)
PushConnectionStatus(uuid, err string, from, to, event string)
} }
type casaService struct { type casaService struct {
@ -162,6 +163,26 @@ func (o *casaService) PushAppAnalyse(uuid, t string, name, language string) {
info := model.ServerAppList{} info := model.ServerAppList{}
json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info) json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info)
}
func (o *casaService) PushConnectionStatus(uuid, err string, from, to, event string) {
m := model.ConnectionStatus{}
m.UUId = uuid
m.Error = err
m.From = from
m.To = to
m.Event = event
b, _ := json.Marshal(m)
head := make(map[string]string)
head["Authorization"] = GetToken()
infoS := httper2.Post(config.ServerInfo.ServerApi+"/v1/analyse/app", b, "application/json", head)
info := model.ServerAppList{}
json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info)
} }
func NewCasaService() CasaService { func NewCasaService() CasaService {

View file

@ -12,6 +12,7 @@ type DownloadService interface {
DelDownload(uuid string) DelDownload(uuid string)
GetDownloadById(uuid string) model2.PersionDownloadDBModel GetDownloadById(uuid string) model2.PersionDownloadDBModel
GetDownloadListByState(state string) []model2.PersionDownloadDBModel GetDownloadListByState(state string) []model2.PersionDownloadDBModel
SetDownloadError(m model2.PersionDownloadDBModel)
} }
type downloadService struct { type downloadService struct {
db *gorm.DB db *gorm.DB
@ -24,6 +25,11 @@ func (d *downloadService) EditDownloadState(m model2.PersionDownloadDBModel) {
d.db.Model(&m).Where("uuid = ?", m.UUID).Update("state", m.State) d.db.Model(&m).Where("uuid = ?", m.UUID).Update("state", m.State)
} }
//failed during download
func (d *downloadService) SetDownloadError(m model2.PersionDownloadDBModel) {
d.db.Model(&m).Updates(m)
}
func (d *downloadService) DelDownload(uuid string) { func (d *downloadService) DelDownload(uuid string) {
var m model2.PersionDownloadDBModel var m model2.PersionDownloadDBModel
d.db.Where("uuid = ?", uuid).Delete(&m) d.db.Where("uuid = ?", uuid).Delete(&m)

View file

@ -9,6 +9,9 @@ type PersionDownloadDBModel struct {
BlockSize int `json:"block_size"` BlockSize int `json:"block_size"`
Length int `json:"length"` //slice length Length int `json:"length"` //slice length
Hash string `json:"hash"` Hash string `json:"hash"`
Error string `json:"error"`
From string `json:"from"`
Already int `json:"already" gorm:"-"`
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt int64 `gorm:"autoCreateTime;autoUpdateTime" json:"updated_at"` UpdatedAt int64 `gorm:"autoCreateTime;autoUpdateTime" json:"updated_at"`
} }

View file

@ -9,6 +9,7 @@ type FriendModel struct {
Name string `json:"name"` Name string `json:"name"`
Token string `gorm:"column:token;primary_key" json:"token"` Token string `gorm:"column:token;primary_key" json:"token"`
Profile string `json:"profile"` Profile string `json:"profile"`
OnLine bool `json:"on_line" gorm:"-"`
} }
func (p *FriendModel) TableName() string { func (p *FriendModel) TableName() string {

View file

@ -3,26 +3,18 @@ package service
import ( import (
"bufio" "bufio"
"context" "context"
"crypto/cipher"
"crypto/rand"
"crypto/rsa"
"crypto/tls"
"crypto/x509"
"encoding/json" "encoding/json"
"encoding/pem"
"fmt" "fmt"
"io" "io"
"log"
"math/big"
"net" "net"
"os" "os"
"path/filepath"
"reflect" "reflect"
"strconv" "strconv"
"time" "time"
"github.com/IceWhaleTech/CasaOS/model" "github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/config" "github.com/IceWhaleTech/CasaOS/pkg/config"
"github.com/IceWhaleTech/CasaOS/pkg/quic_helper"
"github.com/IceWhaleTech/CasaOS/pkg/utils/file" "github.com/IceWhaleTech/CasaOS/pkg/utils/file"
httper2 "github.com/IceWhaleTech/CasaOS/pkg/utils/httper" httper2 "github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
model2 "github.com/IceWhaleTech/CasaOS/service/model" model2 "github.com/IceWhaleTech/CasaOS/service/model"
@ -33,13 +25,6 @@ import (
type PersonService interface { type PersonService interface {
GetPersionInfo(token string) (m model.PersionModel, err error) GetPersionInfo(token string) (m model.PersionModel, err error)
Handshake(m model.ConnectState)
Download(m model.MessageModel)
GetFileDetail(uuid, path, to string)
SendFileData(m model.MessageModel, blockSize int, length int)
ReplyGetFileDetail(m model.MessageModel)
ReceiveFileData(m model.MessageModel)
ReceiveGetFileDetail(m model.MessageModel)
} }
type personService struct { type personService struct {
@ -68,311 +53,6 @@ func (p *personService) GetPersionInfo(token string) (m model.PersionModel, err
return return
} }
//尝试连接
func (p *personService) Handshake(m model.ConnectState) {
//1先进行udp打通成功
srcAddr := &net.UDPAddr{
IP: net.IPv4zero, Port: 9904} //注意端口必须固定
dstAddr := &net.UDPAddr{
IP: net.ParseIP(config.ServerInfo.Handshake), Port: 9527}
//DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。net必须是"udp"、"udp4"、"udp6"如果laddr不是nil将使用它作为本地地址否则自动选择一个本地地址。
//(conn)UDPConn代表一个UDP网络连接实现了Conn和PacketConn接口
conn, err := net.DialUDP("udp", srcAddr, dstAddr)
if err != nil {
fmt.Println(err)
}
b, _ := json.Marshal(m)
if _, err = conn.Write(b); err != nil {
fmt.Println(err)
}
data := make([]byte, 1024)
//ReadFromUDP从c读取一个UDP数据包将有效负载拷贝到b返回拷贝字节数和数据包来源地址。
//ReadFromUDP方***在超过一个固定的时间点之后超时,并返回一个错误。
n, _, err := conn.ReadFromUDP(data)
if err != nil {
fmt.Printf("error during read: %s", err)
}
toPersion := model.PersionModel{}
err = json.Unmarshal(data[:n], &toPersion)
if err != nil {
fmt.Println(err)
}
//websocket 连接
// bidirectionHole(srcAddr, &anotherPeer)
//2udp打洞成功向服务器汇报打洞结果
//3转udp打洞
}
var ipAddress chan string
type sysConn struct {
conn *net.UDPConn
header string
auth cipher.AEAD
}
func UDPConnect(ips []string) {
//m := model.ConnectState{}
//MyService.Person().Handshake(m)
}
// Setup a bare-bones TLS config for the server
func generateTLSConfig() *tls.Config {
key, err := rsa.GenerateKey(rand.Reader, 1024)
if err != nil {
panic(err)
}
template := x509.Certificate{SerialNumber: big.NewInt(1)}
certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
if err != nil {
panic(err)
}
keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)})
certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
tlsCert, err := tls.X509KeyPair(certPEM, keyPEM)
if err != nil {
panic(err)
}
return &tls.Config{
Certificates: []tls.Certificate{tlsCert},
NextProtos: []string{"bench"},
SessionTicketsDisabled: true,
}
}
//首次获取文件信息
func (p *personService) GetFileList(uuid, path, to string) {
msg := model.MessageModel{}
msg.Type = "file_list"
msg.Data = path
msg.To = to
msg.From = config.ServerInfo.Token
msg.UUId = uuid
b, _ := json.Marshal(msg)
fmt.Println(b)
// if ip, ok := PersonUDPMap[msg.To]; ok {
// _, err := UDPconn.WriteToUDP(b, ip)
// if err != nil {
// fmt.Println("写入错误", err)
// }
// }
//接收
}
//首次获取文件信息
func (p *personService) GetFileDetail(uuid, path, to string) {
msg := model.MessageModel{}
msg.Type = "file_detail"
msg.Data = path
msg.To = to
msg.From = config.ServerInfo.Token
msg.UUId = uuid
b, _ := json.Marshal(msg)
fmt.Println(b)
// if ip, ok := PersonUDPMap[msg.To]; ok {
// _, err := UDPconn.WriteToUDP(b, ip)
// if err != nil {
// fmt.Println("写入错误", err)
// }
// }
//创建临时文件夹
file.MkDir("/oasis/download/" + uuid)
}
func (p *personService) Download(m model.MessageModel) {
fDetail, err := os.Stat("/Users/liangjianli/Documents/images")
//发送需要发送的数据摘要
if err != nil {
fmt.Println("未获取到文件信息")
}
summary := model.FileSummaryModel{}
summary.Hash = file.GetHashByPath(fDetail.Name())
summary.BlockSize, summary.Length = file.GetBlockInfo(fDetail.Size())
msg := model.MessageModel{}
msg.Type = "download-reply"
msg.Data = summary
msg.From = config.ServerInfo.Token
msg.UUId = ""
b, _ := json.Marshal(msg)
fmt.Println(b)
// if ip, ok := PersonUDPMap[m.From]; ok {
// _, err := UDPconn.WriteToUDP(b, ip)
// if err != nil {
// fmt.Println("写入错误", err)
// }
// }
}
//receive file data
func (p *personService) ReceiveFileData(m model.MessageModel) {
//task := p.GetDownloadById(m.UUId)
task := model2.PersionDownloadDBModel{}
//需要重置参数
tempPath := "/oasis/download/" + task.UUID
tempFilePath := tempPath + "/" + task.Name
fmt.Println(tempFilePath)
filePath := "/oasis/download/" + task.Name
bss, _ := json.Marshal(m.Data)
tran := model.TranFileModel{}
err := json.Unmarshal(bss, &tran)
if err != nil {
fmt.Println(err)
}
// if file.ComparisonHash(tran.Hash) {
// f, err := os.Create(tempFilePath + strconv.Itoa(tran.Index))
// if err != nil {
// fmt.Println("创建文件错误", err)
// }
// defer f.Close()
// // _, err = f.Write(tran.Data)
// if err != nil {
// fmt.Println("写入错误", err, tran.Index)
// }
// }
var k int
err = filepath.Walk(tempPath, func(filename string, fi os.FileInfo, err error) error { //遍历目录
if fi.IsDir() { // 忽略目录
return nil
}
k++
return nil
})
if err != nil {
fmt.Println("获取文件错误", err)
}
if task.Length == k {
//err := file.SpliceFiles(tempPath, filePath)
if err == nil {
if h := file.GetHashByPath(filePath); h == task.Hash {
//最终文件比对成功
task.State = types.DOWNLOADFINISH
//p.EditDownloadState(task)
//remove temp path
file.RMDir(tempPath)
}
}
}
}
//1:say hi
//2:发送文件名称
//3:发送数据
//========================================接收端============================================================================================
// reply file detail
func (p *personService) ReplyGetFileDetail(m model.MessageModel) {
path := m.Data.(string)
f, err := os.Stat(path)
if err != nil {
fmt.Println(err)
}
summary := model.FileSummaryModel{}
summary.Name = f.Name()
summary.Size = f.Size()
summary.Hash = file.GetHashByPath(path)
summary.BlockSize, summary.Length = file.GetBlockInfo(f.Size())
msg := model.MessageModel{}
msg.Type = "file_detail_reply"
msg.Data = summary
msg.From = config.ServerInfo.Token
msg.To = m.From
msg.UUId = m.UUId
b, _ := json.Marshal(msg)
// if ip, ok := PersonUDPMap[m.To]; ok {
// _, err := UDPconn.WriteToUDP(b, ip)
// if err != nil {
// fmt.Println("写入错误", err)
// }
// }
fmt.Println(b)
//开始发送数据
p.SendFileData(m, summary.BlockSize, summary.Length)
}
func (p *personService) SendFileData(m model.MessageModel, blockSize int, length int) {
path := m.Data.(string)
f, err := os.Open(path)
if err != nil {
//读取时移动了文件,需要保存数据到数据库
fmt.Println("读取失败", err)
}
buf := make([]byte, blockSize)
for i := 0; i < length; i++ {
tran := model.TranFileModel{}
_, err := f.Read(buf)
if err == io.EOF {
fmt.Println("读取完毕", err)
}
tran.Hash = file.GetHashByContent(buf)
tran.Index = i + 1
msg := model.MessageModel{}
msg.Type = "file_data_reply"
msg.Data = tran
msg.From = config.ServerInfo.Token
msg.To = m.From
msg.UUId = m.UUId
b, _ := json.Marshal(msg)
// if ip, ok := PersonUDPMap[m.To]; ok {
// _, err := UDPconn.WriteToUDP(b, ip)
// if err != nil {
// fmt.Println("写入错误", err)
// }
// }
fmt.Println(b)
}
}
// 文件摘要返回
func (p *personService) ReceiveGetFileDetail(m model.MessageModel) {
// task := p.GetDownloadById("")
// bss, _ := json.Marshal(m.Data)
// summary := model.FileSummaryModel{}
// err := json.Unmarshal(bss, &summary)
// if err != nil {
// fmt.Println(err)
// }
// task.Hash = summary.Hash
// task.Length = summary.Length
// task.Size = summary.Size
// p.SaveDownloadState(task)
}
func AsyncUDPConnect(dst *net.UDPAddr) {
for {
time.Sleep(2 * time.Second)
if _, err := UDPConn.WriteToUDP([]byte(dst.IP.String()+" is ok"), dst); err != nil {
log.Println("send msg fail", err)
return
} else {
fmt.Println(dst.IP)
fmt.Println(dst.IP.To4())
}
}
}
func NewPersonService(db *gorm.DB) PersonService { func NewPersonService(db *gorm.DB) PersonService {
return &personService{db: db} return &personService{db: db}
} }
@ -383,18 +63,15 @@ var StreamList map[string]quic.Stream
var ServiceMessage chan model.MessageModel var ServiceMessage chan model.MessageModel
func UDPService() { func UDPService() {
quicConfig := &quic.Config{
ConnectionIDLength: 4,
KeepAlive: true,
}
srcAddr := &net.UDPAddr{ srcAddr := &net.UDPAddr{
IP: net.IPv4zero, Port: 9904} //注意端口必须固定 IP: net.IPv4zero, Port: 9904}
var err error var err error
UDPConn, err = net.ListenUDP("udp", srcAddr) UDPConn, err = net.ListenUDP("udp", srcAddr)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
listener, err := quic.Listen(UDPConn, generateTLSConfig(), quicConfig) listener, err := quic.Listen(UDPConn, quic_helper.GetGenerateTLSConfig(config.ServerInfo.Token), quic_helper.GetQUICConfig())
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
@ -467,8 +144,7 @@ func UDPService() {
func ProcessingContent(stream quic.Stream) { func ProcessingContent(stream quic.Stream) {
for { for {
prefixByte := make([]byte, 6) prefixByte := make([]byte, 6)
c1, err := io.ReadFull(stream, prefixByte) _, err := io.ReadFull(stream, prefixByte)
fmt.Println(c1)
if err != nil { if err != nil {
return return
} }
@ -477,21 +153,19 @@ func ProcessingContent(stream quic.Stream) {
fmt.Println(err) fmt.Println(err)
} }
messageByte := make([]byte, prefixLength) messageByte := make([]byte, prefixLength)
t, err := io.ReadFull(stream, messageByte) _, err = io.ReadFull(stream, messageByte)
if err != nil { if err != nil {
return return
} }
fmt.Println(t, err)
m := model.MessageModel{} m := model.MessageModel{}
err = json.Unmarshal(messageByte, &m) err = json.Unmarshal(messageByte, &m)
fmt.Println(m)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
if m.Type == "hello" { if m.Type == types.PERSONHELLO {
//什么也不做 //nothing
continue continue
} else if m.Type == "directory" { } else if m.Type == types.PERSONDIRECTORY {
var list []model.Path var list []model.Path
if m.Data.(string) == "" || m.Data.(string) == "/" { if m.Data.(string) == "" || m.Data.(string) == "/" {
for _, v := range config.FileSettingInfo.ShareDir { for _, v := range config.FileSettingInfo.ShareDir {
@ -506,7 +180,7 @@ func ProcessingContent(stream quic.Stream) {
m.From = config.ServerInfo.Token m.From = config.ServerInfo.Token
SendData(stream, m) SendData(stream, m)
break break
} else if m.Type == "file_data" { } else if m.Type == types.PERSONDOWNLOAD {
SendFileData(stream, m.Data.(string), m.From, m.UUId) SendFileData(stream, m.Data.(string), m.From, m.UUId)
break break
@ -522,7 +196,7 @@ func ProcessingContent(stream quic.Stream) {
mi := model2.FriendModel{} mi := model2.FriendModel{}
mi.Avatar = config.UserInfo.Avatar mi.Avatar = config.UserInfo.Avatar
mi.Profile = config.UserInfo.Description mi.Profile = config.UserInfo.Description
mi.Name = config.UserInfo.UserName mi.Name = config.UserInfo.NickName
m.To = m.From m.To = m.From
m.Data = mi m.Data = mi
m.Type = types.PERSONADDFRIEND m.Type = types.PERSONADDFRIEND
@ -530,13 +204,16 @@ func ProcessingContent(stream quic.Stream) {
SendData(stream, m) SendData(stream, m)
break break
} else if m.Type == "connection" { } else if m.Type == types.PERSONCONNECTION {
UDPAddressMap[m.From] = m.Data.(string) if len(m.Data.(string)) > 0 {
fmt.Println("persion", m) UDPAddressMap[m.From] = m.Data.(string)
} else {
delete(UDPAddressMap, m.From)
}
mi := model2.FriendModel{} mi := model2.FriendModel{}
mi.Avatar = config.UserInfo.Avatar mi.Avatar = config.UserInfo.Avatar
mi.Profile = config.UserInfo.Description mi.Profile = config.UserInfo.Description
mi.Name = config.UserInfo.UserName mi.Name = config.UserInfo.NickName
mi.Token = config.ServerInfo.Token mi.Token = config.ServerInfo.Token
msg := model.MessageModel{} msg := model.MessageModel{}
msg.Type = types.PERSONADDFRIEND msg.Type = types.PERSONADDFRIEND
@ -544,7 +221,7 @@ func ProcessingContent(stream quic.Stream) {
msg.To = m.From msg.To = m.From
msg.From = config.ServerInfo.Token msg.From = config.ServerInfo.Token
msg.UUId = m.UUId msg.UUId = m.UUId
Dial(m.Data.(string), msg) Dial(msg, false)
break break
} else { } else {
@ -559,9 +236,25 @@ func ProcessingContent(stream quic.Stream) {
//文件分片发送 //文件分片发送
func SendFileData(stream quic.Stream, filePath, to, uuid string) error { func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
summary := model.FileSummaryModel{}
msg := model.MessageModel{}
msg.Type = types.PERSONSUMMARY
msg.From = config.ServerInfo.Token
msg.To = to
msg.UUId = uuid
fStat, err := os.Stat(filePath) fStat, err := os.Stat(filePath)
if err != nil { if err != nil {
summary.Message = err.Error()
msg.Data = summary
summaryByte, _ := json.Marshal(msg)
summaryPrefixLength := file.PrefixLength(len(summaryByte))
summaryData := append(summaryPrefixLength, summaryByte...)
stream.Write(summaryData)
return err return err
} }
@ -569,25 +262,25 @@ func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
f, err := os.Open(filePath) f, err := os.Open(filePath)
if err != nil { if err != nil {
fmt.Println("读取失败", err)
summary.Message = err.Error()
msg.Data = summary
summaryByte, _ := json.Marshal(msg)
summaryPrefixLength := file.PrefixLength(len(summaryByte))
summaryData := append(summaryPrefixLength, summaryByte...)
stream.Write(summaryData)
return err return err
} }
//先发送文件摘要 //send file summary first
summary := model.FileSummaryModel{}
summary.BlockSize = blockSize summary.BlockSize = blockSize
summary.Hash = file.GetHashByPath(filePath) summary.Hash = file.GetHashByPath(filePath)
summary.Length = length summary.Length = length
summary.Name = fStat.Name() summary.Name = fStat.Name()
summary.Size = fStat.Size() summary.Size = fStat.Size()
msg := model.MessageModel{}
msg.Type = "summary"
msg.Data = summary msg.Data = summary
msg.From = config.ServerInfo.Token
msg.To = to
msg.UUId = uuid
summaryByte, _ := json.Marshal(msg) summaryByte, _ := json.Marshal(msg)
summaryPrefixLength := file.PrefixLength(len(summaryByte)) summaryPrefixLength := file.PrefixLength(len(summaryByte))
@ -610,13 +303,13 @@ func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
tran.Index = i tran.Index = i
tran.Length = length tran.Length = length
msg := model.MessageModel{} fileMsg := model.MessageModel{}
msg.Type = "file_data" fileMsg.Type = types.PERSONDOWNLOAD
msg.Data = tran fileMsg.Data = tran
msg.From = config.ServerInfo.Token fileMsg.From = config.ServerInfo.Token
msg.To = to fileMsg.To = to
msg.UUId = uuid fileMsg.UUId = uuid
b, _ := json.Marshal(msg) b, _ := json.Marshal(fileMsg)
prefixLength := file.PrefixLength(len(b)) prefixLength := file.PrefixLength(len(b))
dataLength := file.DataLength(len(buf[:n])) dataLength := file.DataLength(len(buf[:n]))
data := append(append(append(prefixLength, b...), dataLength...), buf[:n]...) data := append(append(append(prefixLength, b...), dataLength...), buf[:n]...)

View file

@ -1,103 +0,0 @@
package service
import (
"encoding/json"
"fmt"
"net/url"
"reflect"
"time"
"github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/config"
model2 "github.com/IceWhaleTech/CasaOS/service/model"
"github.com/IceWhaleTech/CasaOS/types"
"github.com/gorilla/websocket"
uuid "github.com/satori/go.uuid"
)
var WebSocketConn *websocket.Conn
func SocketConnect() {
Connect()
ticker := time.NewTicker(time.Second * 5)
defer ticker.Stop()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := WebSocketConn.ReadMessage()
if err != nil {
Connect()
}
msa := model.MessageModel{}
json.Unmarshal(message, &msa)
if msa.Type == "connection" {
bss, _ := json.Marshal(msa.Data)
content := model.PersionModel{}
err := json.Unmarshal(bss, &content)
fmt.Println(content)
fmt.Println(err)
//开始尝试udp链接
go UDPConnect(content.Ips)
} else if msa.Type == types.PERSONADDFRIEND {
// new add friend
uuid := uuid.NewV4().String()
mi := model2.FriendModel{}
mi.Avatar = config.UserInfo.Avatar
mi.Profile = config.UserInfo.Description
mi.Name = config.UserInfo.UserName
m := model.MessageModel{}
m.Data = mi
m.From = config.ServerInfo.Token
m.To = msa.From
m.Type = types.PERSONADDFRIEND
m.UUId = uuid
result, err := Dial("192.168.2.224:9902", m)
friend := model2.FriendModel{}
if err != nil && !reflect.DeepEqual(result, friend) {
dataModelByte, _ := json.Marshal(result.Data)
err := json.Unmarshal(dataModelByte, &friend)
if err != nil {
fmt.Println(err)
}
}
if len(friend.Token) == 0 {
friend.Token = m.From
}
MyService.Friend().AddFriend(friend)
}
}
}()
msg := model.MessageModel{}
msg.Data = config.ServerInfo.Token
msg.Type = "refresh"
msg.From = config.ServerInfo.Token
b, _ := json.Marshal(msg)
for {
select {
case <-ticker.C:
err := WebSocketConn.WriteMessage(websocket.TextMessage, b)
if err != nil {
Connect()
}
case <-done:
return
}
}
}
func Connect() {
u := url.URL{Scheme: "ws", Host: config.ServerInfo.Handshake + ":8088", Path: "/v1/ws"}
for {
d, _, e := websocket.DefaultDialer.Dial(u.String(), nil)
if e == nil {
WebSocketConn = d
return
}
fmt.Println(e)
time.Sleep(time.Second * 5)
}
}

View file

@ -3,7 +3,6 @@ package service
import ( import (
"context" "context"
"crypto/md5" "crypto/md5"
"crypto/tls"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
@ -16,6 +15,7 @@ import (
"github.com/IceWhaleTech/CasaOS/model" "github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/config" "github.com/IceWhaleTech/CasaOS/pkg/config"
"github.com/IceWhaleTech/CasaOS/pkg/quic_helper"
"github.com/IceWhaleTech/CasaOS/pkg/utils/file" "github.com/IceWhaleTech/CasaOS/pkg/utils/file"
model2 "github.com/IceWhaleTech/CasaOS/service/model" model2 "github.com/IceWhaleTech/CasaOS/service/model"
"github.com/IceWhaleTech/CasaOS/types" "github.com/IceWhaleTech/CasaOS/types"
@ -28,37 +28,33 @@ var PeopleMap map[string]quic.Stream
var Message chan model.MessageModel var Message chan model.MessageModel
var UDPAddressMap map[string]string var UDPAddressMap map[string]string
func Dial(addr string, msg model.MessageModel) (m model.MessageModel, err error) { func Dial(msg model.MessageModel, server bool) (m model.MessageModel, err error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel() defer cancel()
Message = make(chan model.MessageModel) Message = make(chan model.MessageModel)
quicConfig := &quic.Config{
ConnectionIDLength: 4,
KeepAlive: true,
}
tlsConf := &tls.Config{
InsecureSkipVerify: true,
NextProtos: []string{"bench"},
SessionTicketsDisabled: true,
}
srcAddr := &net.UDPAddr{ srcAddr := &net.UDPAddr{
IP: net.IPv4zero, Port: 9904} //注意端口必须固定 IP: net.IPv4zero, Port: 9904} //注意端口必须固定
//addr addr := UDPAddressMap[msg.To]
if len(addr) == 0 { ticker := msg.To
if server {
addr = config.ServerInfo.Handshake + ":9527" addr = config.ServerInfo.Handshake + ":9527"
ticker = "bench"
} }
dstAddr, err := net.ResolveUDPAddr("udp", addr) dstAddr, err := net.ResolveUDPAddr("udp", addr)
//DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。net必须是"udp"、"udp4"、"udp6"如果laddr不是nil将使用它作为本地地址否则自动选择一个本地地址。 //DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。net必须是"udp"、"udp4"、"udp6"如果laddr不是nil将使用它作为本地地址否则自动选择一个本地地址。
//(conn)UDPConn代表一个UDP网络连接实现了Conn和PacketConn接口 //(conn)UDPConn代表一个UDP网络连接实现了Conn和PacketConn接口
session, err := quic.DialContext(ctx, UDPConn, dstAddr, srcAddr.String(), tlsConf, quicConfig) session, err := quic.DialContext(ctx, UDPConn, dstAddr, srcAddr.String(), quic_helper.GetClientTlsConfig(ticker), quic_helper.GetQUICConfig())
if err != nil { if err != nil {
go MyService.Casa().PushConnectionStatus(m.UUId, err.Error(), m.From, m.To, m.Type)
return m, err return m, err
} }
stream, err := session.OpenStreamSync(ctx) stream, err := session.OpenStreamSync(ctx)
if err != nil { if err != nil {
go MyService.Casa().PushConnectionStatus(m.UUId, err.Error(), m.From, m.To, m.Type)
session.CloseWithError(1, err.Error()) session.CloseWithError(1, err.Error())
return m, err return m, err
} }
@ -70,12 +66,13 @@ func Dial(addr string, msg model.MessageModel) (m model.MessageModel, err error)
go ReadContent(stream) go ReadContent(stream)
result := <-Message result := <-Message
stream.Close() stream.Close()
go MyService.Casa().PushConnectionStatus(m.UUId, "OK", m.From, m.To, m.Type)
return result, nil return result, nil
} }
func SayHello(stream quic.Stream, to string) { func SayHello(stream quic.Stream, to string) {
msg := model.MessageModel{} msg := model.MessageModel{}
msg.Type = "hello" msg.Type = types.PERSONHELLO
msg.Data = "hello" msg.Data = "hello"
msg.To = to msg.To = to
msg.From = config.ServerInfo.Token msg.From = config.ServerInfo.Token
@ -83,8 +80,6 @@ func SayHello(stream quic.Stream, to string) {
SendData(stream, msg) SendData(stream, msg)
} }
var pathsss string
//发送数据 //发送数据
func SendData(stream quic.Stream, m model.MessageModel) { func SendData(stream quic.Stream, m model.MessageModel) {
b, _ := json.Marshal(m) b, _ := json.Marshal(m)
@ -99,41 +94,60 @@ var Summary map[string]model.FileSummaryModel
func ReadContent(stream quic.Stream) { func ReadContent(stream quic.Stream) {
for { for {
prefixByte := make([]byte, 6) prefixByte := make([]byte, 6)
c1, err := io.ReadFull(stream, prefixByte) _, err := io.ReadFull(stream, prefixByte)
fmt.Println(c1, err, string(prefixByte)) if err != nil {
fmt.Println(err)
break
}
prefixLength, err := strconv.Atoi(string(prefixByte)) prefixLength, err := strconv.Atoi(string(prefixByte))
if err != nil {
fmt.Println(err)
break
}
messageByte := make([]byte, prefixLength) messageByte := make([]byte, prefixLength)
t, err := io.ReadFull(stream, messageByte) _, err = io.ReadFull(stream, messageByte)
fmt.Println(t, err, string(messageByte)) if err != nil {
fmt.Println(err)
break
}
m := model.MessageModel{} m := model.MessageModel{}
err = json.Unmarshal(messageByte, &m) err = json.Unmarshal(messageByte, &m)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
break
} }
fmt.Println(m)
//传输数据需要继续读取 if m.Type == types.PERSONDOWNLOAD {
if m.Type == "file_data" {
dataModelByte, _ := json.Marshal(m.Data) dataModelByte, _ := json.Marshal(m.Data)
dataModel := model.TranFileModel{} dataModel := model.TranFileModel{}
err := json.Unmarshal(dataModelByte, &dataModel) err := json.Unmarshal(dataModelByte, &dataModel)
fmt.Println(err) if err != nil {
fmt.Println(err)
continue
}
dataLengthByte := make([]byte, 8) dataLengthByte := make([]byte, 8)
t, err = io.ReadFull(stream, dataLengthByte) _, err = io.ReadFull(stream, dataLengthByte)
if err != nil {
fmt.Println(err)
continue
}
dataLength, err := strconv.Atoi(string(dataLengthByte)) dataLength, err := strconv.Atoi(string(dataLengthByte))
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
continue
} }
dataByte := make([]byte, dataLength) dataByte := make([]byte, dataLength)
t, err = io.ReadFull(stream, dataByte) _, err = io.ReadFull(stream, dataByte)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
continue
} }
sum := md5.Sum(dataByte) sum := md5.Sum(dataByte)
hash := hex.EncodeToString(sum[:]) hash := hex.EncodeToString(sum[:])
if dataModel.Hash != hash { if dataModel.Hash != hash {
fmt.Println("hash不匹配", hash, dataModel.Hash) fmt.Println("hash不匹配", hash, dataModel.Hash)
continue
} }
tempPath := config.AppInfo.RootPath + "/temp" + "/" + m.UUId tempPath := config.AppInfo.RootPath + "/temp" + "/" + m.UUId
@ -143,15 +157,29 @@ func ReadContent(stream quic.Stream) {
if os.IsNotExist(err) || tempFile.Size() == 0 { if os.IsNotExist(err) || tempFile.Size() == 0 {
err = ioutil.WriteFile(filepath, dataByte, 0644) err = ioutil.WriteFile(filepath, dataByte, 0644)
task := model2.PersionDownloadDBModel{}
task.UUID = m.UUId
task.Error = err.Error()
task.State = types.DOWNLOADERROR
MyService.Download().SetDownloadError(task)
} else { } else {
if file.GetHashByPath(filepath) != dataModel.Hash { if file.GetHashByPath(filepath) != dataModel.Hash {
os.Remove(filepath) os.Remove(filepath)
err = ioutil.WriteFile(filepath, dataByte, 0644) err = ioutil.WriteFile(filepath, dataByte, 0644)
task := model2.PersionDownloadDBModel{}
task.UUID = m.UUId
task.Error = err.Error()
task.State = types.DOWNLOADERROR
MyService.Download().SetDownloadError(task)
} }
} }
files, err := ioutil.ReadDir(tempPath) files, err := ioutil.ReadDir(tempPath)
if err != nil {
fmt.Println(err)
continue
}
if len(files) >= dataModel.Length { if len(files) >= dataModel.Length {
summary := Summary[m.UUId] summary := Summary[m.UUId]
file.SpliceFiles(tempPath, config.FileSettingInfo.DownloadDir+"/"+summary.Name, dataModel.Length, 0) file.SpliceFiles(tempPath, config.FileSettingInfo.DownloadDir+"/"+summary.Name, dataModel.Length, 0)
@ -161,6 +189,7 @@ func ReadContent(stream quic.Stream) {
task.UUID = m.UUId task.UUID = m.UUId
task.State = types.DOWNLOADFINISH task.State = types.DOWNLOADFINISH
MyService.Download().EditDownloadState(task) MyService.Download().EditDownloadState(task)
delete(Summary, m.UUId)
} else { } else {
os.Remove(config.FileSettingInfo.DownloadDir + "/" + summary.Name) os.Remove(config.FileSettingInfo.DownloadDir + "/" + summary.Name)
task := model2.PersionDownloadDBModel{} task := model2.PersionDownloadDBModel{}
@ -171,14 +200,12 @@ func ReadContent(stream quic.Stream) {
break break
} }
} else if m.Type == "summary" { } else if m.Type == types.PERSONSUMMARY {
dataModel := model.FileSummaryModel{} dataModel := model.FileSummaryModel{}
if m.UUId == m.UUId { dataModelByte, _ := json.Marshal(m.Data)
dataModelByte, _ := json.Marshal(m.Data) err := json.Unmarshal(dataModelByte, &dataModel)
err := json.Unmarshal(dataModelByte, &dataModel) fmt.Println(err)
fmt.Println(err)
}
task := model2.PersionDownloadDBModel{} task := model2.PersionDownloadDBModel{}
task.UUID = m.UUId task.UUID = m.UUId
@ -189,17 +216,27 @@ func ReadContent(stream quic.Stream) {
task.BlockSize = dataModel.BlockSize task.BlockSize = dataModel.BlockSize
task.Hash = dataModel.Hash task.Hash = dataModel.Hash
task.Type = 0 task.Type = 0
task.From = m.From
if len(dataModel.Message) > 0 {
task.State = types.DOWNLOADERROR
task.Error = dataModel.Message
}
MyService.Download().SaveDownload(task) MyService.Download().SaveDownload(task)
Summary[m.UUId] = dataModel Summary[m.UUId] = dataModel
} else if m.Type == "connection" { } else if m.Type == types.PERSONCONNECTION {
UDPAddressMap[m.From] = m.Data.(string)
fmt.Println("udpconn", m) if len(m.Data.(string)) > 0 {
UDPAddressMap[m.From] = m.Data.(string)
} else {
delete(UDPAddressMap, m.From)
}
mi := model2.FriendModel{} mi := model2.FriendModel{}
mi.Avatar = config.UserInfo.Avatar mi.Avatar = config.UserInfo.Avatar
mi.Profile = config.UserInfo.Description mi.Profile = config.UserInfo.Description
mi.Name = config.UserInfo.UserName mi.Name = config.UserInfo.NickName
mi.Token = config.ServerInfo.Token mi.Token = config.ServerInfo.Token
msg := model.MessageModel{} msg := model.MessageModel{}
msg.Type = types.PERSONADDFRIEND msg.Type = types.PERSONADDFRIEND
@ -207,7 +244,15 @@ func ReadContent(stream quic.Stream) {
msg.To = m.From msg.To = m.From
msg.From = config.ServerInfo.Token msg.From = config.ServerInfo.Token
msg.UUId = m.UUId msg.UUId = m.UUId
Dial(m.Data.(string), msg) go Dial(msg, false)
Message <- m
break
} else if m.Type == "get_ip" {
if len(m.Data.(string)) == 0 {
delete(UDPAddressMap, m.From)
break
}
UDPAddressMap[m.From] = m.Data.(string)
Message <- m Message <- m
break break
} else { } else {
@ -216,3 +261,37 @@ func ReadContent(stream quic.Stream) {
} }
Message <- model.MessageModel{} Message <- model.MessageModel{}
} }
func SendIPToServer() {
msg := model.MessageModel{}
msg.Type = "hello"
msg.Data = ""
msg.From = config.ServerInfo.Token
msg.To = config.ServerInfo.Token
msg.UUId = uuid.NewV4().String()
Dial(msg, true)
}
func LoopFriend() {
list := MyService.Friend().GetFriendList()
for i := 0; i < len(list); i++ {
msg := model.MessageModel{}
msg.Type = "get_ip"
msg.Data = ""
msg.From = config.ServerInfo.Token
msg.To = list[i].Token
msg.UUId = uuid.NewV4().String()
Dial(msg, true)
msg.Type = "hello"
msg.Data = ""
msg.From = config.ServerInfo.Token
msg.To = list[i].Token
msg.UUId = uuid.NewV4().String()
if _, ok := UDPAddressMap[list[i].Token]; ok {
go Dial(msg, false)
}
}
}

View file

@ -9,7 +9,7 @@ import (
) )
type UserService interface { type UserService interface {
SetUser(username, pwd, token, email, desc string) error SetUser(username, pwd, token, email, desc, nickName string) error
UpLoadFile(file multipart.File, name string) error UpLoadFile(file multipart.File, name string) error
} }
@ -17,7 +17,7 @@ type user struct {
} }
//设置用户名密码 //设置用户名密码
func (c *user) SetUser(username, pwd, token, email, desc string) error { func (c *user) SetUser(username, pwd, token, email, desc, nickName string) error {
if len(username) > 0 { if len(username) > 0 {
config.Cfg.Section("user").Key("UserName").SetValue(username) config.Cfg.Section("user").Key("UserName").SetValue(username)
config.UserInfo.UserName = username config.UserInfo.UserName = username
@ -36,6 +36,10 @@ func (c *user) SetUser(username, pwd, token, email, desc string) error {
config.Cfg.Section("user").Key("Description").SetValue(desc) config.Cfg.Section("user").Key("Description").SetValue(desc)
config.UserInfo.Description = desc config.UserInfo.Description = desc
} }
if len(nickName) > 0 {
config.Cfg.Section("user").Key("NickName").SetValue(nickName)
config.UserInfo.NickName = nickName
}
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath) config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
return nil return nil
} }

View file

@ -1,3 +1,8 @@
package types package types
const PERSONADDFRIEND = "add_user" const PERSONADDFRIEND = "add_user"
const PERSONDOWNLOAD = "file_data"
const PERSONSUMMARY = "summary"
const PERSONCONNECTION = "connection"
const PERSONDIRECTORY = "directory"
const PERSONHELLO = "hello"

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

View file

@ -1,72 +0,0 @@
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 60C0 26.8629 26.8629 0 60 0V0C93.1371 0 120 26.8629 120 60V60C120 93.1371 93.1371 120 60 120V120C26.8629 120 0 93.1371 0 60V60Z" fill="url(#paint0_linear_582:2091)"/>
<g filter="url(#filter0_d_582:2091)">
<g filter="url(#filter1_iiiii_582:2091)">
<path d="M75.1248 42.125C75.1248 50.4783 68.3532 57.25 59.9999 57.25C51.6465 57.25 44.8749 50.4783 44.8749 42.125C44.8749 33.7717 51.6465 27 59.9999 27C68.3532 27 75.1248 33.7717 75.1248 42.125Z" fill="url(#paint1_linear_582:2091)"/>
<path d="M34.422 71.7327C41.316 66.1301 50.2453 62.75 59.9998 62.75C69.7544 62.75 78.6837 66.1301 85.5777 71.7327C89.5123 74.9302 89.5123 80.8198 85.5777 84.0174C78.6837 89.6199 69.7544 93 59.9998 93C50.2453 93 41.316 89.6199 34.422 84.0174C30.4874 80.8198 30.4874 74.9302 34.422 71.7327Z" fill="url(#paint2_linear_582:2091)"/>
</g>
</g>
<defs>
<filter id="filter0_d_582:2091" x="4" y="8" width="112" height="112" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="6"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_582:2091"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_582:2091" result="shape"/>
</filter>
<filter id="filter1_iiiii_582:2091" x="27.4711" y="23" width="63.0576" height="72" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="2" dy="2"/>
<feGaussianBlur stdDeviation="3"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.495833 0 0 0 0 0.879 0 0 0 0 1 0 0 0 0.4 0"/>
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_582:2091"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="-4" dy="-4"/>
<feGaussianBlur stdDeviation="3"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0205888 0 0 0 0 0.00944442 0 0 0 0 0.566667 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="effect1_innerShadow_582:2091" result="effect2_innerShadow_582:2091"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="1" dy="1"/>
<feGaussianBlur stdDeviation="1"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.816667 0 0 0 0 0.945 0 0 0 0 1 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="effect2_innerShadow_582:2091" result="effect3_innerShadow_582:2091"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="-2" dy="-2"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.00608333 0 0 0 0 0 0 0 0 0 0.304167 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="effect3_innerShadow_582:2091" result="effect4_innerShadow_582:2091"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="-1" dy="-1"/>
<feGaussianBlur stdDeviation="0.5"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.075 0 0 0 0 0.778 0 0 0 0 1 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="effect4_innerShadow_582:2091" result="effect5_innerShadow_582:2091"/>
</filter>
<linearGradient id="paint0_linear_582:2091" x1="60" y1="0" x2="60" y2="120" gradientUnits="userSpaceOnUse">
<stop stop-color="#5A9CFF"/>
<stop offset="0.87897" stop-color="#2A23D5"/>
<stop offset="1" stop-color="#4A3CEC"/>
</linearGradient>
<linearGradient id="paint1_linear_582:2091" x1="60" y1="40" x2="59.9998" y2="93" gradientUnits="userSpaceOnUse">
<stop offset="0.0350902" stop-color="white"/>
<stop offset="0.525594" stop-color="#B0D4FF"/>
<stop offset="0.837131" stop-color="#DEEDFF"/>
<stop offset="1" stop-color="#FEFEFF"/>
</linearGradient>
<linearGradient id="paint2_linear_582:2091" x1="60" y1="40" x2="59.9998" y2="93" gradientUnits="userSpaceOnUse">
<stop offset="0.0350902" stop-color="white"/>
<stop offset="0.525594" stop-color="#B0D4FF"/>
<stop offset="0.837131" stop-color="#DEEDFF"/>
<stop offset="1" stop-color="#FEFEFF"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -0,0 +1,17 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#9fda1e" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -89.043 4.424)" fill="#fff" opacity=".75">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
<path d="m32.883 44.933 2.1667-2.1667c0.33333-0.33333 0.33333-0.85 0-1.1833-0.33333-0.33333-0.85-0.33333-1.1833 0l-2.4667 2.4667c-1.3166-0.66667-2.8166-1.05-4.4-1.05-1.6 0-3.1001 0.38333-4.4332 1.05l-2.4833-2.4667c-0.33333-0.33333-0.85-0.33333-1.1833 0-0.33333 0.33333-0.33333 0.85 0 1.1833l2.1833 2.1833c-2.4667 1.8167-4.0833 4.7334-4.0833 8.05h20c0-3.3166-1.6167-6.2501-4.1168-8.0667zm-9.4547 4.4953h-1.4286v-1.4286h1.4286zm8.5713 0h-1.4286v-1.4286h1.4286z" enable-background="new" fill="#fff" opacity=".75" stroke-width="1.6667"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve"> viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
<g> <g>
<g> <g>
<g> <g>
<path fill="#A4C639" d="M32,0c17.7,0,32,14.3,32,32S49.7,64,32,64S0,49.7,0,32S14.3,0,32,0z"/> <path fill="#A4C639" d="M32,0c17.7,0,32,14.3,32,32S49.7,64,32,64S0,49.7,0,32S14.3,0,32,0z"/>
</g> </g>
</g> </g>
<g> <g>
<g> <g>
<path fill="#FFFFFF" d="M16.6,24.6c-1.4,0-2.6,1.2-2.6,2.6L14,38c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-10.9 <path fill="#FFFFFF" d="M16.6,24.6c-1.4,0-2.6,1.2-2.6,2.6L14,38c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-10.9
C19.3,25.7,18.1,24.6,16.6,24.6 M37.8,14.8l1.8-3.3c0.1-0.2,0-0.4-0.1-0.5c-0.2-0.1-0.4,0-0.5,0.1l-1.9,3.3 C19.3,25.7,18.1,24.6,16.6,24.6 M37.8,14.8l1.8-3.3c0.1-0.2,0-0.4-0.1-0.5c-0.2-0.1-0.4,0-0.5,0.1l-1.9,3.3
c-1.6-0.7-3.3-1.1-5.1-1.1c-1.8,0-3.6,0.4-5.1,1.1L25,11.2C24.9,11,24.7,11,24.5,11c-0.2,0.1-0.2,0.3-0.1,0.5l1.8,3.3 c-1.6-0.7-3.3-1.1-5.1-1.1c-1.8,0-3.6,0.4-5.1,1.1L25,11.2C24.9,11,24.7,11,24.5,11c-0.2,0.1-0.2,0.3-0.1,0.5l1.8,3.3
c-3.6,1.8-6,5.3-6,9.3l23.6,0C43.8,20.2,41.4,16.7,37.8,14.8 M26.6,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1 c-3.6,1.8-6,5.3-6,9.3l23.6,0C43.8,20.2,41.4,16.7,37.8,14.8 M26.6,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1
C27.6,19.5,27.2,19.9,26.6,19.9 M37.4,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1C38.4,19.5,37.9,19.9,37.4,19.9 C27.6,19.5,27.2,19.9,26.6,19.9 M37.4,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1C38.4,19.5,37.9,19.9,37.4,19.9
M20.3,25.1l0,16.8c0,1.5,1.3,2.8,2.8,2.8l1.9,0l0,5.7c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l3.5,0l0,5.7 M20.3,25.1l0,16.8c0,1.5,1.3,2.8,2.8,2.8l1.9,0l0,5.7c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l3.5,0l0,5.7
c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l1.9,0c1.5,0,2.8-1.2,2.8-2.8l0-16.8L20.3,25.1z M50,27.2 c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l1.9,0c1.5,0,2.8-1.2,2.8-2.8l0-16.8L20.3,25.1z M50,27.2
c0-1.4-1.2-2.6-2.6-2.6c-1.4,0-2.6,1.2-2.6,2.6l0,10.9c0,1.4,1.2,2.6,2.6,2.6c1.4,0,2.6-1.2,2.6-2.6L50,27.2z"/> c0-1.4-1.2-2.6-2.6-2.6c-1.4,0-2.6,1.2-2.6,2.6l0,10.9c0,1.4,1.2,2.6,2.6,2.6c1.4,0,2.6-1.2,2.6-2.6L50,27.2z"/>
</g> </g>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,17 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.667 -72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#84c835" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-14.713 -.1522)">
<path d="m22.651 6.7667v1.7198c0 0.073288 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059001 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000" fill="#fff"/>
<path d="m23.18 1.2105h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000" fill="#fff"/>
<path d="m25.359 10.922 0.80255-0.80255c0.12347-0.12347 0.12347-0.31485 0-0.43832s-0.31485-0.12347-0.43832 0l-0.91368 0.91368c-0.4877-0.24694-1.0433-0.38893-1.6298-0.38893-0.59266 0-1.1483 0.14199-1.6421 0.38893l-0.91985-0.91368c-0.12347-0.12347-0.31485-0.12347-0.43832 0s-0.12347 0.31485 0 0.43832l0.80873 0.80873c-0.91368 0.67291-1.5125 1.7533-1.5125 2.9818h7.4082c0-1.2285-0.59883-2.3151-1.5249-2.988zm-3.5021 1.6651h-0.52916v-0.52916h0.52916zm3.1749 0h-0.52916v-0.52916h0.52916z" enable-background="new" fill="#0c2809" opacity=".5" stroke-width=".61735"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.667 -72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f55" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="m30.662 18.545-1.291 1.666-2.0508-0.4668-0.55664 2.0293-2.0742 0.35547 0.26367 2.0879-1.7812 1.123 1.0449 1.8281-1.2168 1.7188 1.6621 1.2891-0.46289 2.0527 2.0293 0.55469 0.35547 2.0742 0.8125-0.10352v10.404l4.5938-3.3418 4.5938 3.3418v-9.832l0.09766 0.02344 0.55664-2.0293 2.0742-0.35742-0.26562-2.0879 1.7812-1.1211-1.043-1.8301 1.2148-1.7168-1.6621-1.291 0.46484-2.0508-2.0293-0.55664-0.35547-2.0723-2.0879 0.26367-1.123-1.7812-1.8281 1.043zm1.3379 4.3066a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5z" color="#4d4d4d" color-rendering="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.667 -72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#84c835" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m8.4664 10.961-2.4942-2.4944 2.4942-2.4941 0.83147 0.83132-1.6629 1.6627 0.83142 0.83147 2.4942-2.4941-2.1727-2.1727c-0.17742-0.17757-0.4652-0.17757-0.64277 0l-3.5142 3.5142c-0.17742 0.17742-0.17742 0.4652 0 0.64277l3.5142 3.5141c0.17757 0.17757 0.46535 0.17757 0.64277 0l3.5142-3.5141c0.17742-0.17757 0.17742-0.46535 0-0.64277l-0.51016-0.51001z" enable-background="new" fill="#fff" stroke-width=".050576"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#341c05" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".5" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path class="st1" d="m6.8166 9.7034-0.3832 1.4552c-0.0097 0.03881-0.02425 0.0485-0.07276 0.0485h-0.71304c-0.04851 0-0.05821-0.01455-0.04851-0.07276l1.3776-4.8215c0.02425-0.08731 0.0388-0.16492 0.04851-0.4026 0-0.03395 0.01455-0.0485 0.0388-0.0485h1.0186c0.03395 0 0.04851 0.0097 0.05821 0.0485l1.5425 5.2338c0.0097 0.03881 0 0.06306-0.0388 0.06306h-0.8052c-0.0388 0-0.06306-0.0097-0.07276-0.04366l-0.4026-1.46zm1.3485-0.7858c-0.13582-0.53842-0.45596-1.7123-0.57722-2.2798h-0.0097c-0.10186 0.56752-0.35894 1.5279-0.56267 2.2798zm2.1828-2.6969c0-0.31044 0.21828-0.49476 0.49476-0.49476 0.29589 0 0.49476 0.19887 0.49476 0.49476 0 0.32014-0.20858 0.49476-0.50446 0.49476-0.28134 0-0.48506-0.17462-0.48506-0.49476zm0.05821 1.1011c0-0.0388 0.01455-0.05821 0.05821-0.05821h0.76154c0.0388 0 0.05821 0.01455 0.05821 0.05821v3.8271c0 0.0388-0.0097 0.05821-0.05821 0.05821h-0.75185c-0.04851 0-0.06306-0.02425-0.06306-0.06306v-3.8223z" enable-background="new" fill="#ff7c00" stroke-width=".048506"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,22 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="b" x1="-666.12" x2="-553.27" y1="413.04" y2="525.91" gradientTransform="matrix(.99884 0 0 .9987 689.01 -388.84)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
<linearGradient id="a">
<stop stop-color="#3b3b3b" offset="0"/>
<stop stop-color="#fff" offset="1"/>
</linearGradient>
<linearGradient id="c" x1="-553.27" x2="-666.12" y1="525.91" y2="413.05" gradientTransform="matrix(.99884 0 0 .9987 689.01 -388.84)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
<linearGradient id="d" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#d)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(.049608 0 0 .049608 4.4978 4.4978)" enable-background="new" fill-rule="evenodd">
<path d="m79.865 119.1c35.398 48.255 70.04-13.469 69.989-50.587-0.0602-43.886-44.541-68.414-70.018-68.414-40.892 0-79.836 33.796-79.836 80.036 0 51.396 44.64 79.865 79.836 79.865-7.9645-1.1468-34.506-6.834-34.863-67.967-0.23987-41.347 13.488-57.866 34.805-50.599 0.47743 0.17707 23.514 9.2645 23.514 38.951 0 29.56-23.427 38.715-23.427 38.715z" color="#000000" fill="url(#b)"/>
<path d="m79.823 41.401c-23.39-8.0619-52.043 11.216-52.043 49.829 0 63.048 46.721 68.77 52.384 68.77 40.892 0 79.836-33.796 79.836-80.036 0-51.396-44.64-79.865-79.836-79.865 9.7481-1.35 52.541 10.55 52.541 69.037 0 38.141-31.953 58.905-52.735 50.033-0.47743-0.17707-23.514-9.2645-23.514-38.951 0-29.56 23.367-38.818 23.367-38.818z" color="#000000" fill="url(#c)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#994b91" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m22 21c-0.554 0-1 0.446-1 1v20c0 0.554 0.446 1 1 1h18c0.554 0 1-0.446 1-1v-1h1c0.554 0 1-0.446 1-1v-4c0-0.186-0.064344-0.351-0.15234-0.5 0.088-0.149 0.15234-0.314 0.15234-0.5v-4c0-0.186-0.064344-0.351-0.15234-0.5 0.088-0.149 0.15234-0.314 0.15234-0.5v-4c0-0.554-0.446-1-1-1h-1v-3c0-0.554-0.446-1-1-1h-18zm1 3h7v1h-7v-1zm9 0h7v1h-7v-1zm9 2h1v4h-1v-4zm-18 1h7v1h-7v-1zm9 0h7v1h-7v-1zm-9 3h7v1h-7v-1zm9 0h7v1h-7v-1zm9 1h1v4h-1v-4zm-18 2h7v1h-7v-1zm9 0h7v1h-7v-1zm-9 3h7v1h-7v-1zm9 0h7v1h-7v-1zm9 0h1v4h-1v-4zm-18 3h7v1h-7v-1zm9 0h7v1h-7v-1z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,18 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#576dab" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-52.837 -2.8601)">
<path transform="translate(52.837 2.8601)" d="m32 17.301-13.363 10.025c-0.02875 0.0187-0.054801 0.0418-0.082031 0.0625l-0.015626 0.011719v0.001953c-0.3259 0.2559-0.53906 0.64931-0.53906 1.0977v12.199c2e-6 2 1.5771 2 2 2h24s2 0 2-2v-12.199c0-0.45851-0.22189-0.86016-0.56055-1.1152l0.005859-0.007813-13.445-10.076zm0 6.3984a5 5 0 0 1 5 5v1.5c0 0.831-0.669 1.5-1.5 1.5-0.61296 0-1.1359-0.36612-1.3691-0.89062a3 3 0 0 1-2.1309 0.89062 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3v1.5c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-1.5a4 4 0 0 0-4-4 4 4 0 0 0-4 4 4 4 0 0 0 4 4h3.5c0.277 0 0.5 0.223 0.5 0.5s-0.223 0.5-0.5 0.5h-3.5a5 5 0 0 1-5-5 5 5 0 0 1 5-5zm0 3a2 2 0 0 0-2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2z" enable-background="new" fill="#fff" opacity=".75"/>
<path transform="translate(52.837 2.8601)" d="m22.5 20.699c-0.831 0-1.5 0.66967-1.5 1.5v15.002c0 0.83033 0.669 1.498 1.5 1.498h19c0.831 0 1.5-0.66772 1.5-1.498v-15.002c0-0.83033-0.669-1.5-1.5-1.5h-19zm9.5 3a5 5 0 0 1 5 5v1.5c0 0.831-0.669 1.5-1.5 1.5-0.61296 0-1.1359-0.36612-1.3691-0.89062a3 3 0 0 1-2.1309 0.89062 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3v1.5c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-1.5a4 4 0 0 0-4-4 4 4 0 0 0-4 4 4 4 0 0 0 4 4h3.5c0.277 0 0.5 0.223 0.5 0.5s-0.223 0.5-0.5 0.5h-3.5a5 5 0 0 1-5-5 5 5 0 0 1 5-5zm0 3a2 2 0 0 0-2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2z" enable-background="new" fill="#fff"/>
<path d="m70.837 31.36 26.6 18.2-24.6-2e-4c-1 0-2-0.5-2-2z" enable-background="new" fill="#e8ebf0"/>
<path d="m96.837 49.56c2-2e-5 2-2 2-2l-1e-5 -16.2-26.6 18.2z" enable-background="new" fill="#f2f2fa"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4747b5" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -75.6 4.949)" fill="#fff" stroke-width=".088193">
<path d="m28.768 3.453c-1.2902 0.22976-2.5811 0.53461-3.8713 0.76016 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5677 0.52447 3.8486 0.75844h0.38441v-7.4082zm-0.49905 2.3996-0.5944 2.4951-0.48788-0.03847c-0.11193-0.55714-0.24233-1.1109-0.34248-1.6706-0.09847 0.54368-0.2265 1.0823-0.33928 1.6226-0.16159-0.0084-0.32392-0.01852-0.48635-0.02946-0.13971-0.74062-0.30388-1.4762-0.43432-2.2185 0.14392-0.0067 0.28868-0.01258 0.4326-0.01763 0.08668 0.53611 0.18512 1.0697 0.26087 1.6066 0.11867-0.55041 0.23994-1.1008 0.35777-1.6512 0.15991-0.0093 0.31979-0.01599 0.47969-0.02441 0.11193 0.56809 0.22634 1.1352 0.34753 1.7008 0.0951-0.58408 0.20033-1.1664 0.30217-1.7496 0.16832-0.0059 0.33662-0.01517 0.5041-0.02527z" enable-background="new"/>
<path d="m29.395 4.5113h2.6458v5.2916h-2.6458v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52823h2.1166v-0.2655h-2.1166v-0.52916h2.1166v-0.26458h-2.1166z" enable-background="new"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,26 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-1.4e-4,-1.5875)" fill="#b3b3b3">
<path d="m5.7553 8.1738h-0.30961v-1.6044q0-0.33776 0.014073-0.6333l-0.47849 0.40813-0.16888-0.2111 0.67552-0.53479h0.26739z"/>
<path d="m6.656 6.879q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m8.6404 6.879q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m10.625 6.879q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61922-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40812 0-0.61922-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m4.6717 10.054q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m7.7397 11.349h-0.30961v-1.6044q0-0.33776 0.014073-0.6333l-0.47849 0.40813-0.16888-0.2111 0.67552-0.53479h0.26739z"/>
<path d="m8.6404 10.054q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m10.625 10.054q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61922-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40812 0-0.61922-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m4.6617 13.229q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513t-0.2111 0.9992q-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61922 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m6.6461 13.229q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513t-0.2111 0.9992q-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61922 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
<path d="m9.7141 14.524h-0.30961v-1.6044q0-0.33776 0.014073-0.6333l-0.47849 0.40813-0.16888-0.2111 0.67552-0.53478h0.26739z"/>
<path d="m10.615 13.229q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61922 0.33776 0.2111 0.32369 0.2111 0.98513t-0.2111 0.9992q-0.19703 0.32369-0.61922 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61922 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f9d351" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="m41.001 20c-0.35521-0.0038-0.82743 0.05144-1.4557 0.14586l-10.455 1.5986c-2.5242 0.5375-2.5155 0.70467-2.5241 2.8372v17.303c-0.10526-0.07374-0.20912-0.1479-0.31794-0.22084v7.49e-4c-0.80196-0.53742-1.6567-0.91988-2.8047-0.91988-1.438 0-2.2955 0.55061-2.8147 1.2759-0.51913 0.72527-0.69129 1.6394-0.69129 2.3461 0 0.85215 0.29095 1.7616 0.92211 2.4546 0.63116 0.69303 1.6015 1.1784 2.9967 1.1784 1.5755 0 2.6837-0.43994 3.3103-1.2991 0.49328-0.67647 0.76605-1.5803 0.86337-2.695v-0.0032c0.01361-0.13524 0.02343-0.27417 0.03213-0.41727 0.01323-0.22035 0.0102-0.63259 0.0102-0.63259v-13.249c0-1.8927-9.1e-5 -2.0056 2.5248-2.4373l7.4349-1.1662c2.5294-0.33094 2.53-0.1008 2.53 1.3206v12.159c-0.10243-0.07178-0.20361-0.144-0.30947-0.21491v7.49e-4c-0.80196-0.53742-1.6563-0.91988-2.8044-0.91988-1.438 0-2.2959 0.55061-2.815 1.2759-0.51913 0.72523-0.69129 1.6394-0.69129 2.3461 0 0.85215 0.29133 1.7616 0.92245 2.4546 0.63116 0.69306 1.6015 1.1787 2.9967 1.1787 1.5755 0 2.6837-0.44032 3.3103-1.2995 0.49328-0.67647 0.76567-1.5799 0.863-2.6947v-0.0035c0.01361-0.13523 0.02343-0.27379 0.03213-0.41693 0.01323-0.22035 0.01058-0.63293 0.01058-0.63293v-18.432c0-1.66-0.01096-2.2097-1.0765-2.2216z" enable-background="new" fill="#fff" stroke-width="3.7796"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#e84f43" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m6.942 9.1745c0.26366-0.51679 0.56331-1.099 0.80315-1.6836l0.09483-0.23076c-0.31327-1.1921-0.50112-2.149-0.3333-2.7677 0.04518-0.16131 0.23201-0.25919 0.43176-0.25919l0.12172 0.0018h0.02234c0.27347-0.0042 0.40223 0.34367 0.41685 0.47892 0.02413 0.22525-0.08008 0.60646-0.08008 0.60646 0-0.15394 6e-3 -0.40268-0.09113-0.61733-0.1131-0.24837-0.22113-0.39674-0.31798-0.42026-0.0489 0.03266-0.09643 0.1003-0.11272 0.23041-0.03372 0.18243-0.04383 0.4127-0.04383 0.5314 0 0.41939 0.08258 0.97295 0.24486 1.5436 0.03061-0.08835 0.05755-0.17324 0.07897-0.25278 0.03328-0.12535 0.24483-0.95628 0.24483-0.95628s-0.05331 1.1061-0.12778 1.4408c-0.01596 0.07072-0.03356 0.14067-0.05189 0.21226 0.2676 0.7477 0.6988 1.415 1.2132 1.8953 0.20281 0.18954 0.45896 0.34238 0.70139 0.48168 0.52942-0.07565 1.0169-0.11138 1.4235-0.10688 0.53953 0.0071 0.93557 0.08691 1.0959 0.24488 0.07852 0.07678 0.11039 0.16951 0.12028 0.27346 0.0023 0.04044-0.01734 0.13546-0.02312 0.15931 0.0058-0.02887 0.0058-0.17083-0.42733-0.30908-0.34111-0.10904-0.9795-0.10565-1.7455-0.02411 0.88603 0.43348 1.7492 0.64886 2.0228 0.51974 0.06688-0.03259 0.148-0.14373 0.148-0.14373s-0.04822 0.21908-0.08284 0.27384c-0.04419 0.0595-0.13086 0.12396-0.21304 0.14569-0.43202 0.11526-1.5566-0.15146-2.537-0.71164-1.0953 0.16131-2.2982 0.45931-3.2625 0.77558-0.94754 1.6606-1.6599 2.4232-2.2394 2.1331l-0.21306-0.10714c-0.08661-0.04954-0.09983-0.17013-0.0798-0.26833 0.06757-0.33057 0.48208-0.82846 1.3147-1.3256 0.08962-0.05423 0.48884-0.26531 0.48884-0.26531s-0.29555 0.28605-0.36479 0.34219c-0.66458 0.5446-1.1551 1.2298-1.1428 1.4954l0.0024 0.02316c0.56454-0.08045 1.4111-1.2295 2.4995-3.3591m0.34492 0.17661c-0.18179 0.34238-0.35948 0.65982-0.52353 0.95129 0.90746-0.3802 1.8841-0.6235 2.8139-0.79634-0.12495-0.08628-0.24624-0.17764-0.36038-0.27422-0.51198-0.43346-0.90232-0.97424-1.1853-1.5433-0.17944 0.48342-0.39281 0.99712-0.7447 1.6626" enable-background="new" fill="#fff" stroke-width=".025916"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-.35818 .95866)" fill="#57688e" fill-opacity=".471" stroke-width=".427">
<path d="m10.692 4.262a1.73 1.73 0 0 0-0.162 0.194l-0.132 0.174-0.047-0.032c-0.066-0.044-0.129-0.054-0.189-0.027-0.04 0.018-0.138 0.142-0.774 0.979a42.55 42.55 0 0 0-0.728 0.97c0 6e-3 0.162 0.133 0.357 0.281l0.357 0.271 0.475-0.625c0.26-0.344 0.478-0.622 0.483-0.618 0.017 0.012 0.046 0.283 0.04 0.37a0.904 0.904 0 0 1-0.04 0.19c-0.033 0.101-0.037 0.108-0.626 0.885-0.325 0.43-0.596 0.795-0.6 0.81-0.015 0.04 0 0.114 0.03 0.157 0.05 0.073 0.175 0.096 0.246 0.045 0.05-0.036 1.215-1.587 1.253-1.668 0.108-0.231 0.132-0.528 0.066-0.82a1.896 1.896 0 0 0-0.095-0.307c-0.01-0.022 7e-3 -0.05 0.116-0.194 0.103-0.138 0.126-0.177 0.128-0.213 5e-3 -0.077-0.018-0.12-0.093-0.178l-0.07-0.055 0.14-0.186c0.115-0.154 0.14-0.194 0.142-0.23 7e-3 -0.153-0.151-0.252-0.277-0.173"/>
<path d="m7.483 8.058c-0.837 1.104-0.956 1.267-1.033 1.408-0.154 0.28-0.322 0.707-0.435 1.097-0.072 0.25-0.075 0.228 0.024 0.175 0.308-0.164 0.71-0.43 0.944-0.627 0.23-0.193 0.268-0.242 1.241-1.523l0.936-1.233-0.36-0.273c-0.198-0.15-0.362-0.273-0.365-0.272-3e-3 0-0.431 0.562-0.952 1.248m0.935 1.612a0.631 0.631 0 0 0-0.384 0.3 1.301 1.301 0 0 0-0.075 0.186 1.9 1.9 0 0 1-0.039 0.122c-0.01 0.014-0.288 0.08-0.45 0.108-0.384 0.067-0.488 0.092-0.525 0.127-0.074 0.068-0.017 0.136 0.087 0.106 0.028-9e-3 0.146-0.032 0.26-0.052s0.288-0.055 0.387-0.078a0.971 0.971 0 0 1 0.187-0.034 0.813 0.813 0 0 1-0.04 0.176l-0.046 0.168-0.105 0.045a1.34 1.34 0 0 0-0.182 0.098c-0.13 0.086-0.156 0.194-0.064 0.264 0.05 0.038 0.189 0.037 0.276 0 0.077-0.035 0.12-0.083 0.18-0.21 0.032-0.066 0.056-0.1 0.076-0.105 0.016-6e-3 0.153-0.032 0.306-0.063l0.31-0.064c0.03-7e-3 0.033-6e-3 0.024 0.022a0.735 0.735 0 0 1-0.057 0.109 0.315 0.315 0 0 0-0.047 0.115c0 0.043 0.036 0.086 0.066 0.075a0.08 0.08 0 0 1 0.033-9e-3 0.255 0.255 0 0 0 0.068-0.05c0.057-0.052 0.196-0.304 0.196-0.356 0-0.027 0.02-0.034 0.033-0.013 4e-3 7e-3 0.037 0.02 0.071 0.028 0.05 0.013 0.063 0.022 0.063 0.045 0 0.043 0.071 0.106 0.134 0.118a0.32 0.32 0 0 0 0.178-0.029c0.024-0.01 0.025-7e-3 0.017 0.03a0.897 0.897 0 0 1-0.09 0.158 2.288 2.288 0 0 0-0.232 0.45c-0.023 0.082-0.013 0.143 0.03 0.172 0.038 0.025 0.102 0.014 0.136-0.022a4.34 4.34 0 0 0 0.246-0.52 0.563 0.563 0 0 1 0.156-0.237c0.078-0.082 0.103-0.102 0.086-0.07-0.027 0.06-0.026 0.106 5e-3 0.134 0.065 0.06 0.16 0 0.242-0.148 0.049-0.09 0.085-0.116 0.266-0.201l0.095-0.043-0.01 0.051a1.081 1.081 0 0 1-0.072 0.175c-0.065 0.138-0.078 0.226-0.039 0.3 0.027 0.052 0.055 0.053 0.183 0.01 0.178-0.06 0.41-0.198 0.47-0.277 0.082-0.112 0.107-0.22 0.057-0.255-0.052-0.038-0.08-0.022-0.146 0.074a0.837 0.837 0 0 1-0.3 0.283c-0.05 0.026-0.093 0.043-0.097 0.038a5.018 5.018 0 0 1 0.165-0.445 0.281 0.281 0 0 0 0.023-0.08c0-0.04-0.05-0.084-0.09-0.084a0.958 0.958 0 0 0-0.204 0.084c-0.19 0.095-0.178 0.103-0.13-0.075 0.03-0.11 0.02-0.139-0.046-0.146-0.064-7e-3 -0.09 0.015-0.148 0.119a0.822 0.822 0 0 1-0.183 0.218c-0.127 0.117-0.132 0.121-0.162 0.1-0.045-0.032-0.07-0.027-0.178 0.027-0.106 0.053-0.141 0.06-0.168 0.028-0.022-0.026 0.013-0.04 0.207-0.078 0.187-0.036 0.21-0.046 0.21-0.085 0-0.062-0.05-0.122-0.142-0.163-0.159-0.07-0.177-0.075-0.247-0.057-0.075 0.02-0.186 0.127-0.202 0.194-0.015 0.069-0.062 0.049-0.062-0.028a0.243 0.243 0 0 0-0.062-0.127c-0.047-0.032-0.124 0.038-0.182 0.165l-0.046 0.099-0.102 0.022c-0.134 0.03-0.522 0.107-0.574 0.117-0.034 6e-3 -0.04 6e-3 -0.032-0.017l0.039-0.137c0.043-0.172 0.055-0.195 0.118-0.217a6.14 6.14 0 0 0 0.394-0.169 0.86 0.86 0 0 0 0.14-0.104c0.14-0.131 0.162-0.252 0.062-0.341a0.424 0.424 0 0 0-0.08-0.056 0.59 0.59 0 0 0-0.24-0.014zm0.179 0.191c0.028 0.028 0.028 0.03 3e-3 0.083a0.323 0.323 0 0 1-0.105 0.106c-0.085 0.058-0.35 0.165-0.36 0.146-0.01-0.032 0.075-0.223 0.13-0.284 0.072-0.082 0.093-0.09 0.208-0.084 0.074 7e-3 0.103 0.012 0.124 0.034m-0.908 1.158c-0.018 0.034-0.065 0.06-0.091 0.05-0.03-0.013-0.023-0.03 0.026-0.055 0.064-0.032 0.084-0.03 0.066 7e-3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -0,0 +1,11 @@
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#0093dd" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".2" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="M32 20c-4.432 0-8 3.568-8 8v4h-1v5.687l.406-.53c.582-.781 2.131-1.897 3.344-2.376.639-.252 2.173-.53 3.906-.719C33.267 33.77 38.2 34 40 32v-4c0-4.432-3.568-8-8-8zm.656.969c.38.022.751.066 1.125.156 1.345.323 1.496.634.188.375-2.06-.408-4.794.508-6.469 2.187-.5.503-1.133 1.334-1.406 1.844-.564 1.052-.475.374.125-.906 1.097-2.341 3.783-3.811 6.437-3.656zM32 24c2.216 0 4 1.784 4 4v4h-8v-4c0-2.216 1.784-4 4-4zm9 9.156l-1.063.875c-.577.492-1.48 1.164-2.03 1.5-1.126.688-3.795 1.656-4.595 1.656-.3 0-.476.073-.406.188.134.216 1.731.119 3.406-.219.55-.11 1.827-.61 2.844-1.125L41 35.094v-1.938zm0 2.156l-.563.782c-1.865 2.571-4.903 3.996-9.125 4.25-2.819.169-1.787.49 1.594.5 2.29.003 2.807-.067 4.188-.532.864-.29 1.581-.512 1.625-.468.157.157-1.533 1.556-2.469 2.031-1.793.91-3.014 1.165-6.25 1.312-2.299.105-3.243.224-3.688.47-.566.311-.192.333 7.032.343H41v-8.688z" fill="#fff" overflow="visible"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#262626" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".5" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path class="st1" d="m5.4058 5.8326c0-0.03396 0.06791-0.05821 0.10671-0.05821 0.31044-0.01455 0.77124-0.02425 1.2515-0.02425 1.3436 0 1.8675 0.73729 1.8675 1.6832 0 1.2321-0.89251 1.7608-1.9887 1.7608-0.18432 0-0.24738-0.0097-0.37835-0.0097v1.8626c0 0.0388-0.01455 0.05821-0.05821 0.05821h-0.74214c-0.0388 0-0.05821-0.01455-0.05821-0.05821zm0.86341 2.5757c0.11156 0.0097 0.19888 0.0097 0.3929 0.0097 0.56752 0 1.1011-0.19887 1.1011-0.97012 0-0.61603-0.3832-0.92646-1.0283-0.92646-0.19402 0-0.37835 0.0097-0.46566 0.01455zm4.1715-0.57722c-0.3832 0-0.51416 0.19402-0.51416 0.35409 0 0.17462 0.08731 0.29589 0.60147 0.56267 0.76154 0.36865 0.99922 0.72274 0.99922 1.2418 0 0.7761-0.59177 1.1932-1.3921 1.1932-0.422 0-0.7858-0.08731-0.99437-0.20858-0.03395-0.01455-0.03881-0.0388-0.03881-0.07761v-0.71304c0-0.04851 0.02425-0.06306 0.05821-0.0388 0.30559 0.19888 0.65483 0.28618 0.97497 0.28618 0.3832 0 0.54327-0.16007 0.54327-0.37835 0-0.17462-0.11156-0.32984-0.60148-0.58207-0.68878-0.32984-0.97497-0.66453-0.97497-1.2224 0-0.62573 0.48991-1.1447 1.3388-1.1447 0.41715 0 0.70819 0.06306 0.86826 0.13582 0.03881 0.02425 0.04851 0.06306 0.04851 0.09701v0.66453c0 0.0388-0.02425 0.06306-0.07276 0.04851-0.21343-0.13582-0.52872-0.21828-0.844-0.21828z" enable-background="new" fill="#00c8ff" stroke-width=".048506"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#eb253e" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m9.079 4.806-3.0219 3.5789c0.78705 0.12623 2.1162 1.1213 1.9157 2.4429 0.40838-0.9801-0.34159-2.1756-1.0618-2.6582l2.6359-3.1482c-0.14118-0.10395-0.25253-0.15596-0.46785-0.21536zm-1.0166 0.24952c-0.11754 4e-4 -0.20572 0.01781-0.20108 0.01781l-0.96522 1.1063c-0.54203 0.0297-1.0692 0.06686-1.5816 0.11883-0.36383 0.03712-0.6534 0.32669-0.70538 0.7128-0.07425 0.67568-0.11135 1.3885-0.11135 2.1236 0 0.73508 0.0371 1.4479 0.11135 2.131 0.05198 0.43075 0.34156 0.64607 0.70538 0.7128 1.0098 0.16335 2.4726 0.0074 2.4726-1.381 0-1.2994-2.131-1.8563-2.8587-1.4999l3.3635-4.0169c-0.07796-0.01949-0.15904-0.02544-0.22956-0.02522zm2.2194 1.1389s-1.8932 4.2026-2.0789 4.6333c-0.28215 0.63855-0.66826 1.1063-1.2251 1.2697 0.49005 0.02228 0.98007 0.02966 1.485 0.02966 1.1062 0 2.1607-0.05196 3.1482-0.14849 0.36372-0.03712 0.66083-0.33412 0.70538-0.7128 0.08178-0.6831 0.11876-1.3959 0.11876-2.131 0-0.73508-0.03699-1.4479-0.11876-2.1236-0.04455-0.3861-0.34155-0.67567-0.70538-0.7128-0.43065-0.04455-0.87618-0.08173-1.3292-0.10401z" clip-rule="evenodd" enable-background="new" fill="#fff" fill-rule="evenodd" stroke-width=".066145"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,14 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#fc8f36" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m30.581 3.9566-3.1749-3.1749v1.852c0 0.73288 0.59001 1.3229 1.3229 1.3229z" fill="#fff" fill-rule="evenodd" opacity=".35" style="paint-order:stroke fill markers"/>
<path d="m3.7381 13.706c0-0.163 0.056-0.3 0.169-0.41a0.56 0.56 0 0 1 0.411-0.168c0.159 0 0.293 0.056 0.403 0.168 0.112 0.11 0.168 0.247 0.168 0.41a0.554 0.554 0 0 1-0.168 0.406 0.548 0.548 0 0 1-0.403 0.165 0.565 0.565 0 0 1-0.411-0.165 0.548 0.548 0 0 1-0.169-0.406m-0.033-2.61v0.962c1.228 0 2.225 0.999 2.225 2.229h0.964c0-1.762-1.43-3.19-3.19-3.19zm1e-3 -2.102v1.063a4.229 4.229 0 0 1 4.224 4.23h1.066a5.294 5.294 0 0 0-5.29-5.293z" fill="#fff" font-size="13.59" font-weight="700"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<g fill="#888">
<rect x="18" y="24" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
<rect x="18" y="31" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
<rect x="18" y="38" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
<rect x="18" y="45" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,19 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#55c1ec" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(.90322 0 0 .90322 .81896 -.26851)" fill="#fff">
<path d="m8.467 6.238a3.44 3.44 0 0 0-3.44 3.44 3.44 3.44 0 0 0 3.44 3.439 3.44 3.44 0 0 0 3.44-3.44 3.44 3.44 0 0 0-3.44-3.44zm0 1.393a2.046 2.046 0 0 1 2.046 2.046 2.046 2.046 0 0 1-2.046 2.045 2.046 2.046 0 0 1-2.046-2.045 2.046 2.046 0 0 1 2.046-2.046z" opacity=".15" style="paint-order:stroke markers fill"/>
<g transform="translate(-4.2406e-8,-280.07)" style="paint-order:stroke markers fill">
<path d="m8.467 286.83a2.91 2.91 0 0 0-2.91 2.91 2.91 2.91 0 0 0 2.91 2.911 2.91 2.91 0 0 0 2.91-2.91 2.91 2.91 0 0 0-2.91-2.91zm0 1.323a1.587 1.587 0 0 1 1.587 1.588 1.587 1.587 0 0 1-1.587 1.587 1.587 1.587 0 0 1-1.588-1.587 1.587 1.587 0 0 1 1.588-1.588z"/>
<path d="m7.938 285.64h1.058v1.852h-1.058zm0 6.35h1.058v1.852h-1.058zm4.63-2.778v1.058h-1.852v-1.058zm-6.35 0v1.058h-1.852v-1.058zm5.522 3.055-0.747 0.748-1.31-1.31 0.748-0.748zm-4.49-4.49-0.747 0.748-1.31-1.31 0.748-0.748zm-1.309 5.238-0.748-0.748 1.31-1.31 0.748 0.748zm4.49-4.49-0.748-0.748 1.31-1.31 0.748 0.748z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#40ace8" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m8.4665 4.3296-3.7041 1.9945v4.2847l3.7041 1.9945 3.7041-1.9945v-4.2847zm0 0.60098 2.8816 1.5516-2.8816 1.5516-2.8816-1.5516z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4d88cf" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="m31.934 16-13.88 8.012-0.054 15.976 14 8.012 14-7.998-0.06-15.99-14.007-8.012zm0 1.27v11.568l1.63 0.974-1.63 0.94-11.748-6.787zm13.066 7.562v14.633l-13 7.443v-14.635z" color="#000000" fill="#fff" overflow="visible" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#fad65c" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m32 21c-1.876 7-7 11.134-7 15s3.134 7 7 7 7-3.134 7-7-5.124-8-7-15m4.8125 11.428c0.7688 1.0325 1.1851 2.285 1.1875 3.5723 0 3.3137-2.6863 6-6 6-1.2849-0.0025-2.535-0.41738-3.5664-1.1836 0.51355 0.12001 1.039 0.1816 1.5664 0.18359 3.866 0 7-3.134 7-7-0.0028-0.52949-0.06574-1.057-0.1875-1.5723" color="#4d4d4d" color-rendering="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" opacity=".9" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#567dd2" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m6.9643 6.9697 2.9935 2.9935-1.4968 1.4136v-5.8207l1.4968 1.4136-2.9935 2.6609" fill="none" stroke="#fff" stroke-linecap="square" stroke-width=".33261"/>
<g fill="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".52916">
<circle cx="5.2916" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
<circle cx="6.3499" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
<circle cx="10.583" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
<circle cx="11.641" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#c92429" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m8.6318 4.7624c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm1.5215 1.0251c-0.29991 0.0029-0.59981 0.02779-0.89515 0.06847v1.0954c0.82989 0.12523 1.6951 0.09973 2.495-0.17014 0.16933-0.07408 0.38355-0.1667 0.41883-0.37219-0.04762-0.25135-0.32974-0.34576-0.54052-0.42426-0.47844-0.14607-0.97833-0.20218-1.4782-0.19727zm2.0179 1.0475c-0.31397 0.25223-0.71884 0.33605-1.1069 0.39338-0.59883 0.07849-1.2074 0.07934-1.8062 0.0035v1.1429c0.74788 0.09613 1.516 0.09183 2.2524-0.08191 0.22577-0.06438 0.47632-0.1315 0.63419-0.31935 0.05644-0.3757 0.0071-0.75931 0.02648-1.1385zm-5.0809 0.25747c0.29544 0.98776 0.57597 1.9809 0.86789 2.9695-0.20372-0.01323-0.40755-0.02825-0.60951-0.04677-0.0538-0.22048-0.11103-0.44094-0.16924-0.66054-0.27075-8.75e-4 -0.54156-0.0098-0.81143-0.023-0.05203 0.20902-0.10498 0.41714-0.15877 0.62527-0.17286-0.01323-0.34478-0.02548-0.51675-0.03695 0.25752-0.92867 0.52557-1.8538 0.78133-2.7825 0.20549-0.01499 0.41012-0.02921 0.61649-0.04509zm-0.33163 0.52838c-0.05909 0.41892-0.19139 0.82191-0.28047 1.2347 0.19402 0.0017 0.38812 0.0026 0.58303 0.0035-0.10054-0.41274-0.22319-0.82011-0.30256-1.2381zm5.4125 0.62527c-0.3122 0.25135-0.71442 0.33515-1.1016 0.39247-0.60059 0.07938-1.2109 0.08112-1.8115 0.0044v1.1438c0.74964 0.09525 1.5204 0.09089 2.2586-0.08462 0.22489-0.06438 0.47533-0.1314 0.62967-0.32013 0.05203-0.3757 0.0072-0.75761 0.02481-1.136zm0 1.411c-0.31397 0.25135-0.71703 0.33603-1.1051 0.39247-0.59971 0.07938-1.2083 0.08112-1.808 0.0044 0 0.38011 0.0027 0.75933-0.0035 1.1394 0.6297 0.09084 1.2726 0.08915 1.9014-7e-3 0.34307-0.06967 0.73909-0.11994 0.98868-0.39157 0.05556-0.3757 8e-3 -0.75942 0.02648-1.1378z" enable-background="new" fill="#fff" stroke-width=".088193"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#eca973" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-26.734 1.1705)" fill="#fff" opacity=".75">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
<path d="m3.7041 12.171v0.26458h3.1749v-0.26458zm0 0.52916v0.26458h2.6458v-0.26458zm0 0.52916v0.26458h3.1749v-0.26458zm0 0.52916v0.26458h2.1166v-0.26458z" color="#000000" fill="#d78a4d"/>
<g transform="matrix(1.25 0 0 1.25 -.92603 -2.5796)" fill="#d78a4d" stroke-width=".034981" aria-label="CAB">
<path d="m4.5267 10.416v0.14553q-0.069689-0.06491-0.14894-0.09702-0.078571-0.03211-0.16739-0.03211-0.1749 0-0.26782 0.10727-0.092918 0.10658-0.092918 0.30882 0 0.20155 0.092918 0.30882 0.092918 0.10658 0.26782 0.10658 0.088819 0 0.16739-0.03211 0.079254-0.03211 0.14894-0.09702v0.14416q-0.072422 0.04919-0.15373 0.07379-0.08062 0.0246-0.17081 0.0246-0.23161 0-0.36484-0.14143-0.13323-0.14211-0.13323-0.38739 0-0.24596 0.13323-0.38739 0.13323-0.14211 0.36484-0.14211 0.091552 0 0.17217 0.0246 0.081304 0.02391 0.15236 0.07242z"/>
<path d="m5.0808 10.473-0.1872 0.50763h0.37509zm-0.077887-0.13596h0.15646l0.38875 1.0201h-0.14348l-0.092918-0.26167h-0.45981l-0.092918 0.26167h-0.14553z"/>
<path d="m5.8351 10.87v0.37372h0.22136q0.11137 0 0.16466-0.04578 0.053975-0.04646 0.053975-0.14143 0-0.09565-0.053975-0.14074-0.053291-0.04578-0.16466-0.04578zm0-0.4195v0.30745h0.20428q0.10112 0 0.15031-0.03758 0.049875-0.03826 0.049875-0.11615 0-0.0772-0.049875-0.11546-0.049192-0.03826-0.15031-0.03826zm-0.13801-0.11342h0.35254q0.15782 0 0.24323 0.06559 0.085403 0.06559 0.085403 0.18652 0 0.0936-0.043726 0.14894-0.043726 0.05534-0.12845 0.06901 0.1018 0.02186 0.15782 0.09155 0.056707 0.069 0.056707 0.17286 0 0.13664-0.092918 0.21112-0.092918 0.07447-0.26441 0.07447h-0.36621z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#008a50" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-20.433 -.26906)" fill="#fff" stroke-width=".088193">
<path d="m29.199 5.0315c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.4e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-0.86117 2.3092c-0.22469 0.46033-0.45024 0.9207-0.67914 1.3793 0.23143 0.47127 0.46794 0.93908 0.7002 1.4104-0.20281-0.01178-0.40476-0.02445-0.60757-0.03876-0.14306-0.35093-0.31732-0.68998-0.41999-1.0569-0.11445 0.34167-0.27773 0.66395-0.40901 0.99889-0.1843-0.0025-0.36863-0.01013-0.55293-0.0177 0.21628-0.4233 0.425-0.85005 0.64801-1.2708-0.18935-0.4334-0.39722-0.8583-0.59246-1.2892 0.18514-0.01094 0.37037-0.02181 0.55551-0.03191 0.12539 0.32905 0.26248 0.6538 0.36599 0.99126 0.11108-0.35766 0.27687-0.69422 0.41909-1.0401 0.19019-0.01346 0.38127-0.02524 0.5723-0.03449z" enable-background="new"/>
<path d="m29.825 6.0898v0.52916h0.79373v0.52916h-0.79373v0.26458h0.79373v0.53006h-0.79373v0.26367h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.52916h2.6458v-5.5561zm1.0583 0.52916h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.53006h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583z" enable-background="new"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3f755a" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796,0,0,3.7796,-77.229,-1.0169)" fill="#fff" stroke-width=".088193">
<path d="m29.199 5.0315c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.4e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-0.86117 2.3092c-0.22469 0.46033-0.45024 0.9207-0.67914 1.3793 0.23143 0.47127 0.46794 0.93908 0.7002 1.4104-0.20281-0.01178-0.40476-0.02445-0.60757-0.03876-0.14306-0.35093-0.31732-0.68998-0.41999-1.0569-0.11445 0.34167-0.27773 0.66395-0.40901 0.99889-0.1843-0.0025-0.36863-0.01013-0.55293-0.0177 0.21628-0.4233 0.425-0.85005 0.64801-1.2708-0.18935-0.4334-0.39722-0.8583-0.59246-1.2892 0.18514-0.01094 0.37037-0.02181 0.55551-0.03191 0.12539 0.32905 0.26248 0.6538 0.36599 0.99126 0.11108-0.35766 0.27687-0.69422 0.41909-1.0401 0.19019-0.01346 0.38127-0.02524 0.5723-0.03449z" enable-background="new"/>
<path d="m29.825 6.0898v0.52916h0.79373v0.52916h-0.79373v0.26458h0.79373v0.53006h-0.79373v0.26367h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.52916h2.6458v-5.5561zm1.0583 0.52916h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.53006h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583z" enable-background="new"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3fa7d7" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m8.4365 4.4978a3.9687 3.9687 0 0 0-3.9387 3.9687 3.9687 3.9687 0 0 0 3.9687 3.9687 3.9687 3.9687 0 0 0 3.9687-3.9687 3.9687 3.9687 0 0 0-3.9687-3.9687 3.9687 3.9687 0 0 0-0.029972 0zm0.027388 1.5875a2.3812 2.3812 0 0 1 0.00258 0 2.3812 2.3812 0 0 1 2.3812 2.3812 2.3812 2.3812 0 0 1-2.3812 2.3812 2.3812 2.3812 0 0 1-2.3812-2.3812 2.3812 2.3812 0 0 1 2.3786-2.3812z" fill="#ff6e65" stroke-linecap="round" stroke-linejoin="round" stroke-width=".61164" style="paint-order:stroke fill markers"/>
<path d="m4.862 6.821a3.948 3.948 0 0 0-0.364 1.645c0 0.587 0.134 1.144 0.364 1.646l1.389-0.794a2.378 2.378 0 0 1-0.166-0.852c0-0.3 0.064-0.587 0.166-0.851m-1.39-0.794m7.211 0-1.39 0.794c0.102 0.264 0.166 0.55 0.166 0.851 0 0.301-0.064 0.587-0.165 0.852l1.389 0.794c0.229-0.502 0.363-1.059 0.363-1.646 0-0.587-0.134-1.144-0.363-1.645m-4.457 3.862-0.794 1.388c0.502 0.23 1.059 0.364 1.646 0.364 0.587 0 1.144-0.134 1.645-0.364l-0.794-1.389c-0.264 0.102-0.55 0.166-0.851 0.166-0.301 0-0.587-0.064-0.852-0.166m0.852-6.184c-0.587 0-1.144 0.134-1.646 0.363l0.794 1.39c0.265-0.102 0.55-0.166 0.852-0.166 0.3 0 0.587 0.064 0.851 0.165l0.794-1.389a3.948 3.948 0 0 0-1.645-0.363" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8e50c7" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m38 18-4 4.5-1.26 1.5h3.26v3h-12v13h-3.238l1.238 1.5 4 4.5 4-4.5 1.26-1.5h-3.26v-3h12v-13h3.238l-1.238-1.5zm-10 13h8v2h-8z" color="#4d4d4d" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 982 B

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#e34e2b" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-17.672 1.3286)" fill="#fff" stroke-width=".088193">
<path d="m26.438 3.4338c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-1.9413 2.3328c0.25455-0.0054 0.4988 0.03123 0.69723 0.21071 0.38011 0.46125 0.27959 1.3096-0.28396 1.5857-0.2002 0.1023-0.42953 0.08832-0.64736 0.08126-8.75e-4 0.34483-0.0018 0.68958-9e-4 1.0344-0.17462-0.01499-0.35001-0.02994-0.52463-0.04405-0.0079-0.9419-0.0098-1.8411 7.75e-4 -2.783 0.24834-0.03094 0.50431-0.07957 0.75885-0.08497zm-0.02933 0.51107c-0.06946-0.0018-0.14052 0.0045-0.20567 0.0075-0.0026 0.29633-0.0043 0.59169 0.01421 0.88714 0.1755-0.02117 0.40304-0.0035 0.50358-0.18513 0.08378-0.17815 0.08904-0.40578-0.0115-0.57864-0.07331-0.10197-0.18485-0.12777-0.30062-0.13087z" enable-background="new"/>
<path d="m27.065 4.4921v0.87939c0.124-0.02662 0.25872-0.0767 0.39674-0.085v1.19h1.1827c-0.04202 0.36101-0.20295 0.73206-0.52128 0.92073-0.3122 0.2099-0.70894 0.2126-1.0582 0.10413 8.75e-4 0.17286-8.75e-4 0.52205 0 0.6949h2.1165v0.26458h-2.1165v0.52916h2.1165v0.26458h-2.1165v0.79374h2.6457v-5.5561zm0.66132 0.63406c0.56254 0.05826 1.0277 0.52454 1.0889 1.0857h-1.0889z" enable-background="new"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#813d17" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -66.793 5.0216)" fill="#fff" stroke-width=".088193">
<path d="m26.438 3.4338c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-1.9413 2.3328c0.25455-0.0054 0.4988 0.03123 0.69723 0.21071 0.38011 0.46125 0.27959 1.3096-0.28396 1.5857-0.2002 0.1023-0.42953 0.08832-0.64736 0.08126-8.75e-4 0.34483-0.0018 0.68958-9e-4 1.0344-0.17462-0.01499-0.35001-0.02994-0.52463-0.04405-0.0079-0.9419-0.0098-1.8411 7.75e-4 -2.783 0.24834-0.03094 0.50431-0.07957 0.75885-0.08497zm-0.02933 0.51107c-0.06946-0.0018-0.14052 0.0045-0.20567 0.0075-0.0026 0.29633-0.0043 0.59169 0.01421 0.88714 0.1755-0.02117 0.40304-0.0035 0.50358-0.18513 0.08378-0.17815 0.08904-0.40578-0.0115-0.57864-0.07331-0.10197-0.18485-0.12777-0.30062-0.13087z" enable-background="new"/>
<path d="m27.065 4.4921v0.87939c0.124-0.02662 0.25872-0.0767 0.39674-0.085v1.19h1.1827c-0.04202 0.36101-0.20295 0.73206-0.52128 0.92073-0.3122 0.2099-0.70894 0.2126-1.0582 0.10413 8.75e-4 0.17286-8.75e-4 0.52205 0 0.6949h2.1165v0.26458h-2.1165v0.52916h2.1165v0.26458h-2.1165v0.79374h2.6457v-5.5561zm0.66132 0.63406c0.56254 0.05826 1.0277 0.52454 1.0889 1.0857h-1.0889z" enable-background="new"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#56cc56" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m35 21c-0.554 0-1 0.446-1 1v2h-12c-0.554 0-1 0.446-1 1v17c0 0.554 0.446 1 1 1h17c0.554 0 1-0.446 1-1v-4h2c0.554 0 1-0.446 1-1v-15c0-0.554-0.446-1-1-1h-7zm0 1h7v15h-2v-12c0-0.554-0.446-1-1-1-1.556-0.611-4.061-0.985-4-2zm-12 5h15v4h-15v-4zm0 6h7v1h-7v-1zm8 0h7v1h-7v-1zm-8 3h7v1h-7v-1zm8 0h7v1h-7v-1zm-8 3h7v1h-7v-1zm8 0h7v1h-7v-1z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".9" shape-rendering="auto" solid-color="#000000" stroke-width="2" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3374d4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-20.002 1.3094)" fill="#fff" stroke-width=".088193">
<path d="m28.768 3.453c-1.2902 0.22976-2.5811 0.53461-3.8713 0.76016 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5677 0.52447 3.8486 0.75844h0.38441v-7.4082zm-0.49905 2.3996-0.5944 2.4951-0.48788-0.03847c-0.11193-0.55714-0.24233-1.1109-0.34248-1.6706-0.09847 0.54368-0.2265 1.0823-0.33928 1.6226-0.16159-0.0084-0.32392-0.01852-0.48635-0.02946-0.13971-0.74062-0.30388-1.4762-0.43432-2.2185 0.14392-0.0067 0.28868-0.01258 0.4326-0.01763 0.08668 0.53611 0.18512 1.0697 0.26087 1.6066 0.11867-0.55041 0.23994-1.1008 0.35777-1.6512 0.15991-0.0093 0.31979-0.01599 0.47969-0.02441 0.11193 0.56809 0.22634 1.1352 0.34753 1.7008 0.0951-0.58408 0.20033-1.1664 0.30217-1.7496 0.16832-0.0059 0.33662-0.01517 0.5041-0.02527z" enable-background="new"/>
<path d="m29.395 4.5113h2.6458v5.2916h-2.6458v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52823h2.1166v-0.2655h-2.1166v-0.52916h2.1166v-0.26458h-2.1166z" enable-background="new"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="m19 16h6v32h-6z" color="#bebebe" fill="#68b723" overflow="visible"/>
<path d="m29 32h6v16h-6z" fill="#c6262e" overflow="visible"/>
<path d="m39 24h6v24h-6z" color="#bebebe" fill="#3689e6" overflow="visible"/>
</svg>

After

Width:  |  Height:  |  Size: 834 B

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4d4d4d" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".35" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m40 24.505-8 4e-3 -4.441 7.691-1.555-2.695h-2v1h1.428l2.133 3.693 5.02-8.693h6.42v1h1zm-5 3c-1.662 0-3 1.338-3 3s1.338 3 3 3c0.773 0 1.469-0.298 2-0.775v0.775h1v-6h-1v0.775c-0.531-0.477-1.227-0.775-2-0.775m0 1c1.108 0 2 0.892 2 2s-0.892 2-2 2-2-0.892-2-2 0.892-2 2-2m-11.99 6.99c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h17.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5zm8 3c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h1.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5z" color="#000000" color-rendering="auto" fill="#afafaf" image-rendering="auto" shape-rendering="auto"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#808080" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m40 24.505-8 4e-3 -4.441 7.691-1.555-2.695h-2v1h1.428l2.133 3.693 5.02-8.693h6.42v1h1zm-5 3c-1.662 0-3 1.338-3 3s1.338 3 3 3c0.773 0 1.469-0.298 2-0.775v0.775h1v-6h-1v0.775c-0.531-0.477-1.227-0.775-2-0.775m0 1c1.108 0 2 0.892 2 2s-0.892 2-2 2-2-0.892-2-2 0.892-2 2-2m-11.99 6.99c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h17.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5zm8 3c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h1.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#84603e" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m24 28.667c-2.9454 0-5.333 2.3877-5.333 5.3334 0 2.9455 2.3878 5.3334 5.333 5.3334 2.9454 0 5.333-2.3877 5.333-5.3334h-5.333zm8.0003 1.333v2h13v-2zm0.14351 6.0001-0.14351 2h13v-2zm-12.143 7.9999v1.9999h19.999l5.07e-4 -1.9999z" color="#000000" enable-background="new" fill="#fff" stroke-width="3.7796" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#396939" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m20 50h24v-20h-24zm2-18h4v4h-4zm6.0001 0h14v4h-14zm-6.0001 6.0001h4v4h-4zm6.0001 0h14v4h-14zm-6.0001 6.0001h4v4h-4zm6.0001 0h14v4h-14z" enable-background="new" fill="#fff" stroke-width="3.7796"/>
</svg>

After

Width:  |  Height:  |  Size: 874 B

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#35677f" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m17 48.999v-2h20v2zm0-6.0001v-2h28v2zm0-6.0001v-2h28v2zm0-6.0001v-2h28v2z" enable-background="new" fill="#fff" stroke-width="3.7796"/>
</svg>

After

Width:  |  Height:  |  Size: 813 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m4.4314 4.6853 4.3741 4.3741v-2.7971zm5.0362 1.5966 3.034 1.3638-0.6679-1.3638zm-0.39338 0.09999v2.5419l1.8243-1.7127zm-1.3036 2.0513-2.0213 3.8145 2.9321-2.9322z" enable-background="new" fill="#c8c4b7" stroke-width=".13229"/>
</svg>

After

Width:  |  Height:  |  Size: 917 B

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3d58a5" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m22 21c-0.554 0-1 0.446-1 1v20c0 0.554 0.446 1 1 1h20c0.554 0 1-0.446 1-1v-20c0-0.554-0.446-1-1-1h-20zm15.5 2.5 3 2.9961-2.5 2.5v9h-3v2h-5v-2h-4v-9.0508c-1.1624-0.23728-1.998-1.2589-2-2.4453 0-1.3807 1.1193-2.5 2.5-2.5 1.1879 1.38e-4 2.2116 0.83613 2.4492 2h6.0508l2.5-2.5zm-8.5605 3.5c-0.1999 0.9805-0.96522 1.7474-1.9453 1.9492v8.0508h3v-2h5v2h2v-8l-2-2h-6.0488-0.005859z" fill="#fff" opacity=".75"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#415aa2" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#71cd4f" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m7.7527 4.4038c-0.48833-0.03224-1.0378 0.31461-1.0183 0.84901-0.05775 0.31806 0.24896 0.55539 0.23561 0.84243-0.18067 0.0792-0.31804 0.0792-0.44525 0.0792h-2.1166c0 0.61015 1e-6 1.4849 1e-6 2.095 0.16525 0.35983 0.50265-0.15404 0.76917-0.09846 0.50926-0.1066 0.96764 0.3398 0.99203 0.83311 0.06771 0.47064-0.11443 1.0824-0.64776 1.1771-0.28767 0.04857-0.59728-0.0047-0.83352-0.18047-0.28447-0.17171-0.30258 0.20506-0.27993 0.38962v2.134h2.4342c0.35983-0.16525-0.15404-0.50265-0.09846-0.76917-0.10654-0.50914 0.33976-0.96791 0.83311-0.99209 0.47065-0.06757 1.0824 0.11445 1.1771 0.64782 0.04857 0.28767-0.0047 0.59728-0.18047 0.83352-0.17171 0.28447 0.20506 0.30258 0.38962 0.27993l1.7948 1e-6v-2.4231c0.16921-0.36295 0.50633 0.16805 0.78146 0.08895 0.44172 0.08689 0.88936-0.2288 0.956-0.67343 0.11271-0.49203-0.02706-1.1447-0.56572-1.3173-0.34122-0.11621-0.68122 0.03221-0.96926 0.20758-0.26514 0.03742-0.19416-0.28348-0.20248-0.4489 0-0.50636-1e-6 -1.2773-1e-6 -1.7837l-1.852-1e-6h-0.23185c-0.36296-0.1692 0.16805-0.50633 0.08895-0.78146 0.08689-0.44172-0.2288-0.88936-0.67342-0.956-0.1106-0.02387-0.22396-0.03314-0.33697-0.03317z" color="#000000" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F4F4F4;}
.st1{opacity:0.1;fill-rule:evenodd;clip-rule:evenodd;fill:url(#SVGID_1_);enable-background:new ;}
.st2{fill:#999999;}
</style>
<g id="图层_1">
<g transform="scale(.26458)">
<path class="st0" d="M49.1,15.1h143.6c10.4,0,18.9,8.5,18.9,18.9v173.9c0,10.4-8.5,18.9-18.9,18.9H49.1
c-10.4,0-18.9-8.5-18.9-18.9V34C30.2,23.6,38.7,15.1,49.1,15.1z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-957.3084" y1="2609.5137" x2="-955.1654" y2="2607.3706" gradientTransform="matrix(2.3333 0 0 -2.3333 2411.3325 6281.5693)">
<stop offset="0" style="stop-color:#000000"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<path class="st1" d="M211.7,173.9l-52.9,52.9h34c10.5,0,18.9-8.4,18.9-18.9V173.9z"/>
</g>
</g>
<g id="图层_2">
<path class="st2" d="M41.1,31.4c0-4.2,3.4-6.2,3.6-6.3c-2-2.9-5-3.3-6.1-3.3c-2.6-0.3-5.1,1.5-6.4,1.5c-1.3,0-3.3-1.5-5.5-1.4
c-2.8,0-5.4,1.6-6.9,4.2c-2.9,5.1-0.8,12.6,2.1,16.8c1.4,2,3.1,4.3,5.3,4.2c2.1-0.1,2.9-1.4,5.4-1.4c2.5,0,3.3,1.4,5.5,1.3
c2.3,0,3.7-2.1,5.1-4.1c1.6-2.3,2.3-4.6,2.3-4.7C45.5,38.1,41.1,36.4,41.1,31.4L41.1,31.4z M36.9,19c1.2-1.4,1.9-3.4,1.7-5.3
c-1.7,0.1-3.7,1.1-4.9,2.5c-1.1,1.2-2,3.2-1.8,5.1C33.8,21.5,35.7,20.5,36.9,19L36.9,19z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#2bacf2" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#87d07d" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#deaa87" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(-26.734 1.1705)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f38144" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(.61734 0 0 .61734 -18.168 -19.05)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="2.1166" y="1.0583" width="12.7" height="14.816" ry="1.3229" fill="#8f76e4" stroke-width=".26458" style="paint-order:stroke fill markers"/>
<g transform="matrix(.066145 0 0 .066145 -1.0583 -1.852)" enable-background="new" fill="none" stroke="#8f76e4" stroke-width="8">
<path transform="matrix(4 0 0 4 16 27.999)" d="m34 17c-5.3575 0-10.312 2.8604-12.99 7.5-2.6786 4.6396-2.6786 10.36 0 15 2.6786 4.6396 7.633 7.5 12.99 7.5h22v-2h-22c-4.6458 0-8.9349-2.4765-11.258-6.5-2.3229-4.0235-2.3229-8.9765 0-13 2.3229-4.0235 6.6117-6.5 11.258-6.5v-2zm-0.58008 4.0156c-2.665 0.14145-5.2478 1.2484-7.209 3.2148-3.138 3.1463-4.0744 7.8801-2.3711 11.984 1.7032 4.1042 5.7165 6.7852 10.16 6.7852h22v-2h-22c-3.6409 0-6.9189-2.1879-8.3145-5.5508-1.3956-3.3628-0.62968-7.2268 1.9414-9.8047 2.5711-2.5779 6.4344-3.3534 9.8008-1.9668l0.76172-1.8496c-1.5407-0.63463-3.1705-0.89737-4.7695-0.8125zm0.36719 3.9902c-1.1298 0.033356-2.2597 0.33851-3.2871 0.93164-2.7398 1.5817-4.0806 4.8194-3.2617 7.875 0.81876 3.0556 3.5984 5.1875 6.7617 5.1875h22v-2h-22c-2.2677 0-4.2431-1.5146-4.8301-3.7051-0.58708-2.1905 0.36586-4.491 2.3301-5.625 1.9643-1.134 4.4315-0.80873 6.0352 0.79492l1.4141-1.4141c-1.398-1.398-3.2791-2.1005-5.1621-2.0449z" color="#000000" color-rendering="auto" dominant-baseline="auto" enable-background="accumulate" fill="#fff" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="none" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
</g>
<path d="m14.816 12.171-3.7041 3.7041h2.3812c0.73288 0 1.3229-0.59001 1.3229-1.3229z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="2.3333" style="paint-order:stroke fill markers"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f37329" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="m32 15.719-15 7.5723v17.225l15 7.7656 15-7.7656v-17.225zm0 2.2402 11.799 5.957-11.797 6.0684-11.781-6.0801zm-13 7.5664 12 6.1934v13.793l-12-6.2129zm26 0.02148v13.752l-12 6.2129v-13.791z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8175c0" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#a469d8" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#5c3183" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#666" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m12.7 8.4665a4.2223 4.2223 0 0 0-4.2332-4.2332 4.2223 4.2223 0 0 0-4.2332 4.2332 4.2223 4.2223 0 0 0 4.2332 4.2332 4.2223 4.2223 0 0 0 4.2332-4.2332zm-2.6848 0c0 0.85305-0.679 1.5492-1.5484 1.5492a1.5414 1.5414 0 0 1-1.55-1.5492c0-0.85227 0.62827-1.5484 1.5492-1.5484s1.5484 0.71334 1.5484 1.5484z" fill="#fff" opacity=".75"/>
<path d="m8.4664 6.349a2.1175 2.1175 0 1 0 1e-3 4.235 2.1175 2.1175 0 0 0-1e-3 -4.235zm0 1.058a1.059 1.059 0 1 1-1e-3 2.118 1.059 1.059 0 0 1 0-2.118z" fill="#fff" opacity=".5" overflow="visible"/>
<path d="m8.4664 6.4815a1.985 1.985 0 1 0 1e-3 3.97 1.985 1.985 0 0 0-1e-3 -3.97zm0 0.992a0.993 0.993 0 1 1-1e-3 1.985 0.993 0.993 0 0 1 0-1.985z" fill="none" overflow="visible"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,17 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#59dd59" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(.25 0 0 .25 -5.9994 -6.9998)" enable-background="new" fill="#fff" shape-rendering="auto">
<path d="m152 96c-33.104 0-60 26.898-60 60s26.896 60 60 60 60-26.898 60-60-26.896-60-60-60zm2e-3 6a54 54 0 0 1 54 54 54 54 0 0 1-54 54 54 54 0 0 1-54-54 54 54 0 0 1 54-54z" color="#000000" color-rendering="auto" enable-background="accumulate" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
<path d="m148 148v40l8 1e-5v-40z" color="#000000" color-rendering="auto" enable-background="accumulate" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
<path d="m152 126c-3.3137 1e-5 -6 2.6863-6 6 1e-5 3.3137 2.6863 6 6 6 3.3137-1e-5 6-2.6863 6-6-1e-5 -3.3137-2.6863-6-6-6z" color="#000000" color-rendering="auto" enable-background="accumulate" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#ff8830" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<path d="m16.178 25.295a22.066 22.331 0 0 0-8.1777 1.5898v3.1836c2.4265-1.2598 4.9643-1.6913 8.1777-1.7129 0.29464-0.0032 0.5745 0.01829 0.86914 0.03125-0.04164 5.338-0.86591 16.338-3.8027 20.354-4.2467-11.062-3.7304-9.0909-0.86719 0.33398a3.334 3.3739 0 0 0-0.59961 0.42188l-1.3164-0.99805 0.6582 1.9121c-1.0419 0.15889-2.0814 0.15756-3.1191 0.15039v1.1348c0.99303-0.32071 2.0028-0.39211 3.1504 0.26367 0.04164 0.21067 0.14736 0.39467 0.24023 0.57617l-3.3906 1.3828v0.74805c1.3029-0.45113 2.5939-0.86031 3.8105-1.5234 0.19216 0.17502 0.44778 0.30054 0.7168 0.39453l-3.377 4.625c0.17952 0.21851 0.37419 0.42045 0.58789 0.60547 1.1487-1.596 1.8191-3.3727 3.4199-5.1094 0.22418 0.01945 0.48348 0.053905 0.74609 0.021485a22.483 22.752 0 0 0 0.16211 6.3203h2.248c-0.76491-2.1186-1.6258-4.2171-1.5098-6.5039 0.8519 0.33059 1.2962 0.75813 2.2441 1.4258-0.42595-0.64821-0.9474-1.0706-1.3125-1.8809a1.9985 2.0224 0 0 0 0.20508-0.41992c4.362 1.6789 8.4457 2.1504 12.875 4.8438l2.4219 1.8164a11.497 11.635 0 0 1-0.51953 0.71875h3.5742a21.877 22.14 0 0 0 0.26953-0.17578 21.858 22.12 0 0 0 3.7109-12.295c0-12.209-9.8481-22.234-22.092-22.234h-0.003907zm3.627 3.4219c7.302 1.452 13.675 7.255 15.059 14.055l-0.33008 0.42383c-0.6149 1.076-6.3794 2.9359-8.4707 3.6035-3.9937 0.86536-6.8539 2.9179-10.688 3.0605a2.8664 2.9007 0 0 0-0.83984-0.78711c2.3315-4.1939 1.5673-15.41 5.2695-20.355zm-11.805 3.1172v3.002c1.7111 4.5413 1.6459 3.6289 0-3.002zm26.297 12.816h0.001953l0.86523 0.8457c0 0.68062-0.071483 1.3461-0.18359 2.0332-0.56687 3.6267-1.2869 7.2114-2.7793 10.145l-3.1738-1.0566c-3.619-1.7826-9.0432-2.9442-12.902-5.5176 5.531-3.2119 12.103-4.5046 18.172-6.4492z" fill="#fff" stroke-width="3.0418"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#b08888" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.668 -72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="7.9999" y="4" width="48.001" height="55.999" ry="5" fill="#f85879" style="paint-order:stroke fill markers"/>
<path d="m55.999 46.002-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8193" style="paint-order:stroke fill markers"/>
<path d="m30.002 25v6.5002c0 0.277 0.223 0.5 0.5 0.5h3c0.27701 0 0.5-0.223 0.5-0.5v-6.5002zm1 4h2v2h-2z" color="#000000" fill="#fff" stroke-width="3.7796"/>
<path d="m32.002 4h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2z" color="#000000" fill="#fff" stroke-width="3.7796"/>
<path d="m25.354 34.799c-0.6899 0.05743-1.3772 0.09387-2.0547 0.17969l0.29688 0.04102c0.49799-0.18211 1.2278-0.10088 1.7578-0.2207zm-3.0098 0.31445c-1.1208 0.06757-2.6794 0.65311-2.1992 0.12109-1.8285 0.81627-5.0739 1.9648-6.8965 3.6738l-0.05859-0.38476c-0.83509 1.0023-3.6397 2.9896-3.8633 4.2891l-0.22656 0.05273c-0.43384 0.73586-0.71608 1.5716-1.0605 2.3281-0.014093 0.02403-0.025344 0.03645-0.039062 0.05859v5.9941c0.30021-0.8219 0.94987-1.7497 1.4727-3.0605l-0.39648-0.07031c0.76099-1.3265 4.3399-5.3323 6-5.127 0.80401-1.0097-0.15705-0.0021-0.31445-0.25586 1.7663-1.8275 2.3179-1.29 3.5098-1.6191 1.2846-0.76256-1.0972 0.29773-0.48828-0.29102 2.2223-0.56704 1.5703-1.2884 4.4688-1.5762 0.30598 0.17379-0.7063 0.26855-0.96095 0.49414 1.8507-0.90614 5.8533-0.70176 8.4571 0.5 3.0189 1.4119 6.4126 5.5848 6.5469 9.5099l0.15625 0.04102c-0.07658 1.5604 0.23584 3.3642-0.3125 5.0215l0.37109-0.78516c0.04392 1.1923-0.34828 1.7685-0.70312 2.793l-0.63477 0.32031c-0.52167 1.0137 0.04737 0.64332-0.32617 1.4492-0.40421 0.35897-1.015 0.91842-1.5918 1.4082h2.2734c0.30196-0.29251 0.55329-0.52279 0.66797-0.5293-0.28559 0.42965-0.1267 0.38839-0.13086 0.5293h0.04297c0.47622-0.92521-0.40688-0.41366 0.70508-2.0254l0.44922 0.61719c-0.16782-1.1075 1.3718-2.4511 1.2148-4.2012 0.35385-0.53494 0.39842 0.57962 0.02344 1.8105 0.52064-1.3656 0.13435-1.5857 0.26758-2.7129 0.14359 0.37896 0.33443 0.7814 0.43164 1.1816-0.33956-1.3201 0.34685-2.2248 0.51758-2.9922-0.16884-0.07435-0.52358 0.58197-0.60547-0.97657 0.01247-0.67708 0.18817-0.35081 0.25586-0.51758-0.13221-0.07657-0.47971-0.60026-0.69142-1.5957 0.15247-0.23449 0.41381 0.60661 0.62305 0.64062-0.13467-0.79116-0.36911-1.3945-0.37891-2.002-0.612-1.2782-0.21555 0.17266-0.71094-0.54688-0.6515-2.0303 0.53619-0.46872 0.61719-1.3906 0.98609 1.4287 1.5515 3.645 1.8105 4.5625-0.19741-1.1188-0.51872-2.2051-0.90821-3.2539 0.30059 0.12681-0.47698-2.2994 0.39648-0.69142-0.93226-3.4274-3.9882-6.6345-6.7988-8.1368 0.34304 0.31432 0.77214 0.71128 0.61719 0.77345-1.3986-0.83159-1.1493-0.89864-1.3496-1.25-1.1376-0.46343-1.2142 0.03715-1.9668 0-2.147-1.139-2.5576-1.0159-4.5332-1.7285l0.08594 0.41797c-1.4218-0.47379-1.657 0.1776-3.1934 0-0.09347-0.07208 0.49386-0.26048 0.97657-0.33008-1.375 0.18166-1.3089-0.27571-2.6543 0.04492 0.33062-0.23211 0.68238-0.38525 1.0352-0.58203zm1.1074 0.25586c0.39382 0.06982 0.85085 0.12644 0.78516 0.2207 0.43234-0.09573 0.52955-0.1832-0.78516-0.2207zm0.78516 0.2207-0.27344 0.05859 0.25586-0.02344 0.01758-0.03516zm0.98439 11.479c-2.1819 0.03591-4.2252 1.4201-4.9062 2.9258-1.1173 0.7033-1.2477 2.7119-1.7344 3.0801-0.43951 3.2276 0.2826 5.2193 1.7559 6.9238h1.7207c-1.3374-1.3635-2.233-3.214-2.2031-5.2949-0.04392 0.33166-0.12405 0.2496-0.21484 0.38281-0.21215-2.6901 1.2473-5.3891 3.7012-6.4941 2.4001-1.1875 5.2137-0.70114 6.9316 0.90235-0.94363-1.2368-2.8245-2.5472-5.0508-2.4258zm6.3359 5.5684c-0.0912 0.0023-0.20862 0.22946-0.26758 0.48242 0.1372 0.07208 0.24624 0.9373 0.37891 0.40234 0.04505-0.664-0.02001-0.88703-0.11133-0.88477zm8.0606 2.2344-0.10352 0.27344c-0.19847 1.4104-0.62982 2.8091-1.2871 4.1035 0.7265-1.3656 1.1917-2.8634 1.3906-4.377zm-8.5372 0.5c-0.0991 0.48854-0.36651 0.90939-0.61719 1.3555-1.3785 0.86807-0.12934-0.51441 0-1.041-1.4815 1.867-0.20158 1.1191-0.25586 1.6406 0.44069-0.60657 0.76008-1.2691 0.87306-1.9551zm-3.0078 2.8457c-0.59868 0.14654-1.2074 0.14882-1.8223 0.09375-0.73733 0.0098 0.1367 0.38075 1.0996 0.5293 0.26701-0.20822 0.50744-0.41865 0.72267-0.62305zm-9.3067 0.09961c0.16284 0.59767 0.49913 1.1058 0.8086 1.6289l-0.23242-0.66798c-0.25667-0.28426-0.40546-0.62139-0.57617-0.96095zm-0.56446 1.0059-0.10547 0.51953c0.03809 0.05172 0.07235 0.10398 0.10938 0.15625h0.38281c-0.12618-0.21645-0.23059-0.37445-0.38672-0.67578z" fill="#d70751" stroke-width=".49352"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -0,0 +1,14 @@
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#90d344" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m138.06 8.421-12-12v6.9998c0 2.77 2.23 5 5 5z" fill="#fff" fill-rule="evenodd" opacity=".35" stroke-width="3.7796" style="paint-order:stroke fill markers"/>
<path d="m46.997 24-30 22h6v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2m-2-18.449v12.45h-16" fill="#fff" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 953 B

View file

@ -0,0 +1,18 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(.49563 0 0 .49563 -158.07 -64.931)" enable-background="new" opacity=".75" stroke-width=".13346">
<rect transform="rotate(90)" x="140.04" y="-343.99" width="16" height="16" color="#000000" enable-background="accumulate" fill="none"/>
<path d="m337.31 139.96-2.6322 0.39327v1.3534a6.4893 6.4775 43.146 0 1 2.6322 5e-3v-1.7515zm-5.3858 1.1906-2.0054 1.7049 0.98801 1.1776a6.4893 6.4775 43.146 0 1 2.0174-1.6908zm8.1287 0.0127-0.99285 1.1835a6.4893 6.4775 43.146 0 1 0.17056 0.0905 6.4893 6.4775 43.146 0 1 1.8446 1.6029l1.0051-1.1977zm-11.61 4.2168-0.44056 2.5954 1.5154 0.26739a6.4893 6.4775 43.146 0 1 0.45509-2.5927zm15.086 3e-3 -1.5228 0.26851a6.4893 6.4775 43.146 0 1 0.46365 2.5909l1.5329-0.27zm-13.682 4.6946-1.3515 0.78058h-3.4e-4l1.331 2.271 1.3381-0.77238a6.4893 6.4775 43.146 0 1-1.3172-2.2792zm12.301 3e-3a6.4893 6.4775 43.146 0 1-0.53478 1.2148 6.4893 6.4775 43.146 0 1-0.77388 1.0692l1.3388 0.77313 1.3016-2.2881zm-9.5569 3.4716-0.53479 1.4688 2.4795 0.88448 0.52585-1.4453a6.4893 6.4775 43.146 0 1-2.3034-0.79995 6.4893 6.4775 43.146 0 1-0.16721-0.10799zm6.8133 0.0153a6.4893 6.4775 43.146 0 1-2.4747 0.89752l0.53031 1.4565 2.4676-0.91651z" color="#000000" enable-background="accumulate" fill="#999"/>
<circle cx="336" cy="148" r="6.44" fill="none" opacity="1" stroke="#999" stroke-linecap="square" stroke-linejoin="round" stroke-width=".53382"/>
<circle cx="336" cy="148" r="4.44" fill="none" opacity="1" stroke="#999" stroke-linecap="square" stroke-linejoin="round" stroke-width=".53382"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,17 @@
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#afdde9" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="translate(71.441 -.82775)">
<path transform="translate(-71.441 .82775)" d="m31 21.801v20.4h7s1-6.56e-4 1-0.97266v-14.57s0-0.97266-1-0.97266h-4v-3.8848h-3zm3.002 5.8281h2v12.629h-2v-12.629z"/>
<path d="m-45.441 43.028v-14.57h-1v-1.944h1v-2.914c0-0.971 1-0.971 1-0.971h3v1.943h-1v1.942h1v1.943h-1v14.57z" fill-rule="evenodd"/>
</g>
<rect x="15.983" y="4" width="1" height="56" ry="0" opacity=".15" style="paint-order:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<rect x="4.5" y="4.5" width="55" height="55" rx="3" ry="3" fill="#3a9d4a" overflow="visible"/>
<path d="m14 18v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2z" fill="#fff" font-family="sans-serif" font-weight="400" opacity=".5" overflow="visible" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
<path d="M18 13.5h28c.277 0 .5.223.5.5v37c0 .277-.223.5-.5.5H18a.499.499 0 0 1-.5-.5V14c0-.277.223-.5.5-.5z" fill="#4d4d4d" overflow="visible" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".498" stroke-width="0"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f35450" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m19 43.604v6.396s10.285 1.514 14.812-12.198h8.188v-6h-5.726s2.174-7 7.726-7v-6s-8.64-1.99-14.192 12.413c-4.801 14.105-10.808 12.389-10.808 12.389z" color="#000000" fill="#fff" overflow="visible"/>
</svg>

After

Width:  |  Height:  |  Size: 855 B

View file

@ -0,0 +1,16 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#fec21a" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,14 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f63163" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<g transform="matrix(3.7796,0,0,3.7796,-101.04,4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,15 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#ff9230" style="paint-order:stroke fill markers"/>
<g fill="#fff">
<path d="m30.003 31v6.5002c0 0.27701 0.223 0.5 0.5 0.5h3c0.27701 0 0.5-0.223 0.5-0.5v-6.5002zm1 4h2v2h-2z" color="#000000" stroke-width="3.7796"/>
<path d="m32.002 4.0001v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2z" color="#000000" stroke-width="3.7796"/>
<path d="m21.391 21.055c1.8182 7.1629-6.4139 9.3261-9.3848 13.787-2.0231 3.0394 0.99325 6.3057 5.1055 10.016-1.6035-3.625-7.0413-6.7979 0.001953-12.361 8.7836-6.9333 4.2773-11.441 4.2773-11.441zm5.4355 8.8613c1.12e-4 0-14.853 3.709-7.7598 11.883 2.0941 2.4104-0.54883 4.5781-0.54883 4.5781s5.3129-2.7433 2.873-6.1797c-2.2797-3.2031-4.0264-4.7942 5.4355-10.281zm2.6289 14.602c-0.52186 0.0017-1.0761 0.09122-1.6445 0.29102-0.45578 0.16136-0.69531 0.53711-0.69531 0.53711s0.28921-0.1159 0.93164-0.25c2.6272-0.54744 6.3905 3.5171-1.75 7.7461-0.03776 0.1008-0.16222 0.21289-0.16211 0.21289 9.6812-2.545 7.5701-8.5453 3.3203-8.5371zm-17.443 0.41211c-0.45307-0.010459-1.9864 0.016966-4.0117 0.59961v0.85742c1.0592-0.71666 4.1523-1.4512 4.1523-1.4512s-0.047312-0.004059-0.13867-0.005859h-0.001953zm14.318 1.5859s-3.2754 0.58545-6.5391 0.85938c-3.9947 0.33514-8.2808 0.40114-10.432 0.11328-0.65614-0.08772-1.0894-0.19566-1.3594-0.31641v1.2949c4.2908 0.51786 11.611 0.35701 16.348-0.88867 0.83261-0.56821 1.9824-1.0625 1.9824-1.0625zm-16.016 3.3418c-1.519 0.50414-2.225 1.0217-2.3145 1.5v0.20117c0.31384 1.7215 8.8302 2.7944 16.674 0.5-1.091-0.38455-1.7852-1.0879-1.7852-1.0879-5.0205 0.96621-7.9204 0.93583-11.594 0.55664-2.8399-0.29354-0.98047-1.6699-0.98047-1.6699zm1.0391 4.75c-6.6709 1.864 4.0583 5.7136 12.553 2.0742-1.3912-0.54061-2.3887-1.1641-2.3887-1.1641-3.7879 0.71596-5.5443 0.77144-8.9824 0.37891-2.8376-0.32546-1.1816-1.2891-1.1816-1.2891zm18.945 3.5137s1.2262 1.0109-1.3516 1.793c-0.099226 0.030055-0.2282 0.056744-0.33594 0.085938h1.5625c1.1574-0.65952 1.3178-1.3407 0.125-1.8789z" clip-rule="evenodd" enable-background="new" fill-rule="evenodd" opacity=".35" stroke-width="1.3868"/>
</g>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(.26458)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#df5943" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m9.2608 4.4978c0.33263 1.3104-1.1733 1.7062-1.7168 2.5223-0.37011 0.55604 0.18168 1.1535 0.93397 1.8322-0.29336-0.66316-1.2882-1.2433 4e-4 -2.2611 1.6069-1.2684 0.7824-2.0934 0.7824-2.0934zm0.99418 1.6213c1.8e-5 0-2.7172 0.67846-1.4195 2.1738 0.38309 0.44098-0.10049 0.83749-0.10049 0.83749s0.97214-0.50173 0.52578-1.1304c-0.41705-0.58598-0.73675-0.87708 0.99425-1.8809zm0.4812 2.6711c-0.09547 3.25e-4 -0.19685 0.01688-0.30085 0.05343-0.08338 0.02952-0.12714 0.09814-0.12714 0.09814s0.05272-0.02122 0.17025-0.04575c0.48064-0.10015 1.1693 0.64343-0.31995 1.4171-0.0069 0.01844-0.02978 0.0391-0.02976 0.0391 1.7711-0.46559 1.3849-1.5635 0.60744-1.562zm-3.191 0.07551c-0.11666-0.0027-0.621 0.0048-1.2237 0.29635-0.8148 0.39398 2.0151 0.57346 3.4802 0.18811 0.15232-0.10395 0.36272-0.1942 0.36272-0.1942s-0.59924 0.10713-1.1963 0.15724c-0.73082 0.06131-1.5148 0.07342-1.9083 0.02076-0.9317-0.12456 0.51076-0.46722 0.51076-0.46722s-0.0087-7e-4 -0.0254-1e-3zm-0.31047 0.90144c-1.3441 0.44609 0.74823 0.95234 2.6267 0.40286-0.19959-0.07035-0.32632-0.19911-0.32632-0.19911-0.91846 0.17676-1.449 0.17111-2.121 0.10174-0.51952-0.0537-0.17946-0.30549-0.17946-0.30549zm0.18998 0.86891c-1.2204 0.341 0.74253 1.0454 2.2965 0.37961-0.25451-0.0989-0.43705-0.21309-0.43705-0.21309-0.69296 0.13098-1.0144 0.1413-1.6434 0.06949-0.51913-0.05954-0.216-0.236-0.216-0.236zm-0.84766 0.57609c-0.54806 0.01691-1.6199 0.50969-0.63969 0.66876 3.168 0.51351 5.7749-0.2313 4.9532-0.60204 0 0 0.22444 0.18505-0.24714 0.32812-0.89672 0.27161-3.733 0.35353-4.5208 0.01086-0.28299-0.12326 0.24792-0.29411 0.41497-0.33019 0.17418-0.03768 0.27365-0.0308 0.27365-0.0308-0.04921-0.03465-0.13278-0.04784-0.23427-0.04471zm4.8165 0.47096s-0.09986 0.25639-1.1812 0.45982c-1.22 0.22968-2.725 0.2029-3.6173 0.05558 0 0 0.18277 0.15132 1.1221 0.21178 1.4292 0.09137 3.6245-0.05084 3.6765-0.72717z" clip-rule="evenodd" enable-background="new" fill="#fff" fill-rule="evenodd" stroke-width=".25371"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="matrix(0 1 1 0 -.0002268 -.0002268)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#748290" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".2" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m32 18c-7.7319 0-14 6.2681-14 14s6.2681 14 14 14c7.7319 0 14-6.2681 14-14s-6.2681-14-14-14zm0 3c6.075 0 11 4.9248 11 11 0 6.075-4.9248 11-11 11-6.075 0-11-4.9248-11-11 0-6.075 4.9248-11 11-11zm-4 4.5v13l11-6.5002z" fill="#fff" stroke-width="3.7796"/>
</svg>

After

Width:  |  Height:  |  Size: 955 B

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8542c2" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m32 21c-6.075 0-11 1.343-11 3v10a11 3 0 0 0 1 1.2422 11 3 0 0 0 0.0117 0.0059 11 3 0 0 0 0.47656 0.25195 11 3 0 0 0 0.0312 0.01367 11 3 0 0 0 0.55079 0.23242 11 3 0 0 0 0.0645 0.02344 11 3 0 0 0 0.58984 0.20117 11 3 0 0 0 0.13281 0.04102 11 3 0 0 0 0.65039 0.17969 11 3 0 0 0 0.0996 0.02539 11 3 0 0 0 0.77344 0.17578 11 3 0 0 0 0.0527 0.0098 11 3 0 0 0 0.81445 0.15039 11 3 0 0 0 0.13867 0.02344 11 3 0 0 0 0.7793 0.11523 11 3 0 0 0 0.2207 0.0293 11 3 0 0 0 0.73633 0.08203 11 3 0 0 0 0.36719 0.03711 11 3 0 0 0 0.53906 0.04492 11 3 0 0 0 0.5918 0.04102 11 3 0 0 0 0.49023 0.02539 11 3 0 0 0 0.57617 0.02344 11 3 0 0 0 0.4629 0.01367 11 3 0 0 0 0.84961 0.01163 11 3 0 0 0 0.95899-0.01367 11 3 0 0 0 0.41406-0.01367 11 3 0 0 0 0.7168-0.0293 11 3 0 0 0 0.3457-0.02148 11 3 0 0 0 0.70703-0.04883 11 3 0 0 0 0.31836-0.0293 11 3 0 0 0 0.76758-0.07617 11 3 0 0 0 0.17969-0.02148 11 3 0 0 0 0.80859-0.10742 11 3 0 0 0 0.21289-0.03516 11 3 0 0 0 0.67773-0.11133 11 3 0 0 0 0.3125-0.06055 11 3 0 0 0 0.59571-0.125 11 3 0 0 0 0.19531-0.04687 11 3 0 0 0 0.66211-0.16797 11 3 0 0 0 0.0137-0.0039 11 3 0 0 0 0.0234-0.0078 11 3 0 0 0 0.70117-0.21875 11 3 0 0 0 0.63672-0.24414 11 3 0 0 0 2e-3 0 11 3 0 0 0 6e-3 -2e-3 11 3 0 0 0 0.53516-0.25391 11 3 0 0 0 6e-3 -0.0039 11 3 0 0 0 0.20299-0.11522 11 3 0 0 0 1-1.2422v-10c0-1.657-4.925-3-11-3m0 16h-1v3h1v1h-8v-1h-3v3h3v-1h16v1h3v-3h-3v1h-7v-1h1v-3zm0-15c5.523 0 10 0.895 10 2s-4.477 2-10 2-10-0.895-10-2 4.477-2 10-2m-10 3.242c1.784 1.069 5.692 1.756 10 1.758 4.308-1e-3 8.216-0.688 10-1.758v3.758c0 1.105-4.477 2-10 2s-10-0.895-10-2zm0 5c1.784 1.069 5.692 1.756 10 1.758 4.308-1e-3 8.216-0.688 10-1.758v3.758a10 2 0 0 1-10 2 10 2 0 0 1-10-2v-2zm10 7.758h1v1h-1zm-10 3h1v1h-1zm19 0h1v1h-1z" fill="#fff" opacity=".75"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8542c2" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m32 22a11 3 0 0 0 -2.125 .05859c-.02.001-.041.001-.061.002-.059.003-.113.008-.172.012a11 3 0 0 0 -1.923828 .164062 11 3 0 0 0 -.002 0A11 3 0 0 0 25.933594 22.5c-.036.007-.075.011-.111.018a11 3 0 0 0 -1.517578 .34375c-.037.01-.077.017-.113.027a11 3 0 0 0 -1.214844 .40039c-.057.022-.119.044-.174.066a11 3 0 0 0 -.222656 .101562c-.11.05-.22.1-.32.152a11 3 0 0 0 -.19336 .109375c-.093.054-.186.107-.268.162a11 3 0 0 0 -.138672 .103516c-.079.06-.155.12-.221.182a11 3 0 0 0 -.0957 .101562c-.057.062-.112.124-.154.188a11 3 0 0 0 -.06836 .121094c-.029.055-.057.11-.074.166A11 3 0 0 0 21 25v10a11 3 0 0 0 1 1.242188 11 3 0 0 0 .01172 .0059 11 3 0 0 0 .476562 .251953 11 3 0 0 0 .03125 .01367 11 3 0 0 0 .550781 .232422 11 3 0 0 0 .06445 .02344 11 3 0 0 0 .589843 .201172 11 3 0 0 0 .132813 .04102 11 3 0 0 0 .65039 .179687 11 3 0 0 0 .09961 .02539 11 3 0 0 0 .773437 .175781 11 3 0 0 0 .05273 .0098 11 3 0 0 0 .814453 .15039 11 3 0 0 0 .138672 .02344 11 3 0 0 0 .779297 .115234 11 3 0 0 0 .220703 .0293 11 3 0 0 0 .736328 .08203 11 3 0 0 0 .367187 .03711 11 3 0 0 0 .539063 .04492 11 3 0 0 0 .591797 .04102 11 3 0 0 0 .490234 .02539 11 3 0 0 0 .576172 .02344 11 3 0 0 0 .462891 .01367A11 3 0 0 0 32 38a11 3 0 0 0 .958984 -.01367 11 3 0 0 0 .414063 -.01367 11 3 0 0 0 .716797 -.0293 11 3 0 0 0 .345703 -.02148 11 3 0 0 0 .707031 -.04883 11 3 0 0 0 .31836 -.0293 11 3 0 0 0 .767578 -.07617 11 3 0 0 0 .179687 -.02148 11 3 0 0 0 .808594 -.107422 11 3 0 0 0 .212891 -.03516 11 3 0 0 0 .677734 -.111328 11 3 0 0 0 .3125 -.06055 11 3 0 0 0 .595703 -.125 11 3 0 0 0 .195313 -.04687 11 3 0 0 0 .662109 -.167969 11 3 0 0 0 .01367 -.0039 11 3 0 0 0 .02344 -.0078 11 3 0 0 0 .701172 -.21875 11 3 0 0 0 .636719 -.24414 11 3 0 0 0 .002 0 11 3 0 0 0 .0059 -.002 11 3 0 0 0 .535157 -.253906 11 3 0 0 0 .0059 -.0039A11 3 0 0 0 42 36.24219 11 3 0 0 0 43 35v-4h-2.385C38.883 31.596 35.693 32 32 32 26.477 32 22 31.1 22 30v-3.758c.001.001.003.001.004.002a11 3 0 0 0 .744141 .371093c.011.005.02.009.031.014a11 3 0 0 0 .929687 .339844 11 3 0 0 0 1.058594 .287109c.029.007.058.013.088.02a11 3 0 0 0 2.511719 .441406c.036.005.073.009.109.014a11 3 0 0 0 1.316407 .136719c.039.003.076.007.115.01a11 3 0 0 0 1.398438 .08594c.108.005.217.006.326.01A11 3 0 0 0 32 28 11 3 0 0 0 35 27.882812v-.977a10 2 0 0 1 -1 .05273v-.01C33.35 26.979 32.693 27 32 27 31.31 27 30.635 26.986 29.984 26.959 29.389 26.935 28.819 26.898 28.27 26.854a10 2 0 0 1 -.289062 -.02344c-.524-.046-1.028-.101-1.5-.164-.031-.004-.065-.008-.096-.012-.486-.066-.934-.143-1.354-.225a10 2 0 0 1 -.138672 -.02539c-.393-.08-.746-.166-1.068-.258a10 2 0 0 1 -.171875 -.04883c-.293-.089-.544-.183-.764-.281a10 2 0 0 1 -.177735 -.07813c-.029-.015-.054-.03-.082-.045a10 2 0 0 1 -.232422 -.140625c-.031-.022-.057-.044-.084-.066a10 2 0 0 1 -.132813 -.117187c-.027-.029-.047-.058-.068-.088a10 2 0 0 1 -.06836 -.113281C22.02 25.11 22 25.06 22 25a10 2 0 0 1 .199219 -.396484 10 2 0 0 1 .623047 -.396485c.228-.106.505-.206.816-.301a10 2 0 0 1 .103516 -.0332 10 2 0 0 1 .0039 -.002c.342-.1.729-.192 1.154-.277.016-.003.029-.007.045-.01.422-.084.884-.161 1.375-.229a10 2 0 0 1 .142579 -.01953c.456-.061.946-.113 1.451-.158a10 2 0 0 1 .34961 -.03125c.512-.041 1.044-.074 1.594-.098a10 2 0 0 1 .220703 -.0098C30.701 23.01 31.342 23 32 23c.693 0 1.353.021 2 .051v-.01a10 2 0 0 1 1 .05273v-.979A11 3 0 0 0 32 22m0 16h-1v3h1v1h-8v-1h-3v3h3v-1h16v1h3v-3h-3v1h-7v-1h1v-3zm7-16V25h1v-1.219c.611.545 1 1.331 1 2.219 0 1.662-1.338 3-3 3h-2v1h2c2.216 0 4-1.784 4-4 0-1.205-.534-2.272-1.373-3H42V22zM22 31.24C23.784 32.31 27.692 32.999 32 33 36.31 32.999 40.22 32.31 42 31.24V35A10 2 0 0 1 32 37 10 2 0 0 1 22 35V33zM32 39h1v1h-1zm-10 3h1v1h-1zm19 0h1v1h-1z" fill="#fff" opacity=".75"/>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#986230" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m24 22a1 1 0 0 0-1 1h-2v21h22v-21h-2a1 1 0 0 0-1-1h-5a1 1 0 0 0-1 1h-3a1 1 0 0 0-1-1zm0 1h6.449v1h-6.449zm11 0h5v1h-5zm-13 4h20v16h-20zm2 2v5h1v-2h6v2h1v-5h-1v2h-6v-2zm8 7v5.25h1v-2.25h6v2h1v-5h-1v2h-6v-2z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,13 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#5f6c79" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<path d="m21 22v22h22v-22zm1 1h20v20h-20zm2 3v2h16v-2zm0 4v1h7v-1zm9 0v1h7v-1zm-9 3v1h7v-1zm9 0v1h7v-1zm-9 3v1h7v-1zm9 0v1h7v-1zm-9 3v1h7v-1zm9 0v1h7v-1z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".9" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
</svg>

After

Width:  |  Height:  |  Size: 1,003 B

View file

@ -0,0 +1,26 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<g transform="scale(1)">
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4d4d4d" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
</g>
<g fill="none">
<path d="m21 31.513c7.043 0 8.3464 8.9615 11.453 8.9893 3.1068 0.02484 4.5065-9.0108 11.547-9.0108" stroke="#1d99f3"/>
<path d="m21 30.545c7.043 0 8.4753-6.1008 11.485-6.0943 2.9904 0.0064 4.4749 7.0415 11.515 7.0415" stroke="#da4453"/>
<path d="m21 30.545c7.043 0 7.4697-10.014 11.47-10.014s4.4901 10.961 11.53 10.961" stroke="#d6d6d6"/>
</g>
<g fill="#d6d6d6" style="">
<rect x="20" y="20" width="1" height="23" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" stroke-width="1.109"/>
<g style="">
<rect x="20" y="31" width="24" height="1"/>
<rect x="26" y="30" width="1" height="3"/>
<rect x="32" y="30" width="1" height="3"/>
<rect x="38" y="30" width="1" height="3"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,14 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f7a42d" style="paint-order:stroke fill markers"/>
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
<g transform="matrix(3.7796,0,0,3.7796,-101.04,4.424)" fill="#fff">
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show more