v1.6
This commit is contained in:
parent
3b7eee30c6
commit
59c79a8aa8
85
init.lua
85
init.lua
|
@ -159,6 +159,8 @@ vim.opt.scrolloff = 10
|
||||||
|
|
||||||
-- term gui colors for nvim.notify
|
-- term gui colors for nvim.notify
|
||||||
vim.opt.termguicolors = true
|
vim.opt.termguicolors = true
|
||||||
|
vim.opt.conceallevel = 2
|
||||||
|
vim.g.codeium_open_chat_in_buffer = 1
|
||||||
|
|
||||||
-- [[ Basic Keymaps ]]
|
-- [[ Basic Keymaps ]]
|
||||||
-- See `:help vim.keymap.set()`
|
-- See `:help vim.keymap.set()`
|
||||||
|
@ -166,6 +168,10 @@ vim.opt.termguicolors = true
|
||||||
-- For conciseness
|
-- For conciseness
|
||||||
local opts = { noremap = true, silent = true }
|
local opts = { noremap = true, silent = true }
|
||||||
|
|
||||||
|
-- local codeium = require('custom.plugins.codeium')
|
||||||
|
--
|
||||||
|
-- vim.api.nvim_set_keymap('n', '<leader>c', ':lua codeium.chat_buffer()<CR>', { noremap = true, silent = true })
|
||||||
|
|
||||||
-- Clear highlights on search when pressing <Esc> in normal mode
|
-- Clear highlights on search when pressing <Esc> in normal mode
|
||||||
-- See `:help hlsearch`
|
-- See `:help hlsearch`
|
||||||
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
|
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
|
||||||
|
@ -204,6 +210,7 @@ vim.keymap.set('n', '<leader>q', '<cmd>q!<CR>', { desc = 'Close file' })
|
||||||
|
|
||||||
-- Keep last yanked when pasting
|
-- Keep last yanked when pasting
|
||||||
vim.keymap.set('v', 'p', '"_dP', opts)
|
vim.keymap.set('v', 'p', '"_dP', opts)
|
||||||
|
vim.keymap.set('n', '<leader>A', 'ggVG', opts)
|
||||||
|
|
||||||
-- Vertical scroll and center
|
-- Vertical scroll and center
|
||||||
vim.keymap.set('n', '<C-d>', '<C-d>zz', opts)
|
vim.keymap.set('n', '<C-d>', '<C-d>zz', opts)
|
||||||
|
@ -241,6 +248,21 @@ vim.keymap.set('n', '<leader>tp', ':tabp<CR>', opts) -- go to previous tab
|
||||||
vim.keymap.set('v', '<', '<gv', opts)
|
vim.keymap.set('v', '<', '<gv', opts)
|
||||||
vim.keymap.set('v', '>', '>gv', opts)
|
vim.keymap.set('v', '>', '>gv', opts)
|
||||||
|
|
||||||
|
-- Obsidian
|
||||||
|
vim.keymap.set('n', '<leader>Oc', "<cmd>lua require('obsidian').util.toggle_checkbox()<CR>", { desc = 'Obsidian Check Checkbox' })
|
||||||
|
vim.keymap.set('n', '<leader>Ot', '<cmd>ObsidianTemplate<CR>', { desc = 'Insert Obsidian Template' })
|
||||||
|
vim.keymap.set('n', '<leader>Po', '<cmd>ObsidianOpen<CR>', { desc = 'Open in Obsidian App' })
|
||||||
|
vim.keymap.set('n', '<leader>Ob', '<cmd>ObsidianBacklinks<CR>', { desc = 'Show ObsidianBacklinks' })
|
||||||
|
vim.keymap.set('n', '<leader>Ol', '<cmd>ObsidianLinks<CR>', { desc = 'Show ObsidianLinks' })
|
||||||
|
vim.keymap.set('n', '<leader>On', '<cmd>ObsidianNew<CR>', { desc = 'Create New Note' })
|
||||||
|
vim.keymap.set('n', '<leader>Os', '<cmd>ObsidianSearch<CR>', { desc = 'Search Obsidian' })
|
||||||
|
vim.keymap.set('n', '<leader>Oq', '<cmd>ObsidianQuickSwitch<CR>', { desc = 'Quick Switch' })
|
||||||
|
|
||||||
|
-- Copilot
|
||||||
|
-- vim.keymap.set('i', '<C-CR>', function()
|
||||||
|
-- require('copilot.panel').accept()
|
||||||
|
-- end, { desc = 'Accept Copilot suggestion' })
|
||||||
|
vim.keymap.set('n', '<leader>cc', '<cmd>call codeium#Chat()<CR>', { desc = 'Codeium Chat' })
|
||||||
-- [[ Basic Autocommands ]]
|
-- [[ Basic Autocommands ]]
|
||||||
-- See `:help lua-guide-autocommands`
|
-- See `:help lua-guide-autocommands`
|
||||||
|
|
||||||
|
@ -365,13 +387,15 @@ require('lazy').setup({
|
||||||
|
|
||||||
-- Document existing key chains
|
-- Document existing key chains
|
||||||
spec = {
|
spec = {
|
||||||
{ '<leader>c', group = '[C]opilot', mode = { 'n', 'x' } },
|
{ '<leader>c', group = '[C]hatGPT', mode = { 'n', 'x' } },
|
||||||
{ '<leader>d', group = '[D]ocument' },
|
{ '<leader>d', group = '[D]ocument' },
|
||||||
{ '<leader>r', group = '[R]ename' },
|
{ '<leader>r', group = '[R]ename' },
|
||||||
{ '<leader>f', group = '[F]ind' },
|
{ '<leader>f', group = '[F]ind' },
|
||||||
-- { '<leader>w', group = '[W]orkspace' },
|
-- { '<leader>w', group = '[W]orkspace' },
|
||||||
{ '<leader>t', group = '[T]oggle' },
|
{ '<leader>t', group = '[T]oggle' },
|
||||||
|
{ '<leader>O', group = '[O]bsidian' },
|
||||||
{ '<leader>gh', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
{ '<leader>gh', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
||||||
|
{ '<leader>g', group = '[G]it', mode = { 'n', 'v' } },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -439,9 +463,47 @@ require('lazy').setup({
|
||||||
-- },
|
-- },
|
||||||
-- },
|
-- },
|
||||||
-- pickers = {}
|
-- pickers = {}
|
||||||
|
defaults = {
|
||||||
|
layout_strategy = 'vertical',
|
||||||
|
layout_config = {
|
||||||
|
preview_height = 0.7,
|
||||||
|
vertical = {
|
||||||
|
width = '95%',
|
||||||
|
height = '95%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
pickers = {
|
pickers = {
|
||||||
|
current_buffer_fuzzy_find = {
|
||||||
|
-- Override the layout strategy and config for current_buffer_fuzzy_find
|
||||||
|
layout_strategy = 'horizontal', -- or any other strategy you prefer
|
||||||
|
layout_config = {
|
||||||
|
preview_width = 0.5, -- example config, adjust as needed
|
||||||
|
},
|
||||||
|
},
|
||||||
|
old_files = {
|
||||||
|
layout_strategy = 'vertical',
|
||||||
|
layout_config = {
|
||||||
|
preview_height = 0.7,
|
||||||
|
vertical = {
|
||||||
|
size = {
|
||||||
|
width = '95%',
|
||||||
|
height = '95%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
find_files = {
|
find_files = {
|
||||||
themes = 'dropdown',
|
layout_strategy = 'vertical',
|
||||||
|
layout_config = {
|
||||||
|
preview_height = 0.7,
|
||||||
|
vertical = {
|
||||||
|
size = {
|
||||||
|
width = '95%',
|
||||||
|
height = '95%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
file_ignore_patterns = { 'node_modules', '.git', '.venv' },
|
file_ignore_patterns = { 'node_modules', '.git', '.venv' },
|
||||||
hidden = true,
|
hidden = true,
|
||||||
},
|
},
|
||||||
|
@ -457,18 +519,7 @@ require('lazy').setup({
|
||||||
require('telescope.themes').get_dropdown(),
|
require('telescope.themes').get_dropdown(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
defaults = {
|
defaults = {},
|
||||||
layout_strategy = 'vertical',
|
|
||||||
layout_config = {
|
|
||||||
preview_height = 0.7,
|
|
||||||
vertical = {
|
|
||||||
size = {
|
|
||||||
width = '95%',
|
|
||||||
height = '95%',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Enable Telescope extensions if they are installed
|
-- Enable Telescope extensions if they are installed
|
||||||
|
@ -486,7 +537,10 @@ require('lazy').setup({
|
||||||
vim.keymap.set('n', '<leader>fd', builtin.diagnostics, { desc = '[F]ind [D]iagnostics' })
|
vim.keymap.set('n', '<leader>fd', builtin.diagnostics, { desc = '[F]ind [D]iagnostics' })
|
||||||
vim.keymap.set('n', '<leader>f<CR>', builtin.resume, { desc = '[F]ind [R]esume' })
|
vim.keymap.set('n', '<leader>f<CR>', builtin.resume, { desc = '[F]ind [R]esume' })
|
||||||
vim.keymap.set('n', '<leader>fo', builtin.oldfiles, { desc = '[F]ind Recent Files ("." for repeat)' })
|
vim.keymap.set('n', '<leader>fo', builtin.oldfiles, { desc = '[F]ind Recent Files ("." for repeat)' })
|
||||||
vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' })
|
vim.keymap.set('n', '<leader>fF', function()
|
||||||
|
require('telescope.builtin').find_files { hidden = true, no_ignore = true }
|
||||||
|
end, { desc = '[F]ind in all files' })
|
||||||
|
-- vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' })
|
||||||
|
|
||||||
-- Slightly advanced example of overriding default behavior and theme
|
-- Slightly advanced example of overriding default behavior and theme
|
||||||
vim.keymap.set('n', '<leader>f/', function()
|
vim.keymap.set('n', '<leader>f/', function()
|
||||||
|
@ -787,6 +841,7 @@ require('lazy').setup({
|
||||||
end,
|
end,
|
||||||
formatters_by_ft = {
|
formatters_by_ft = {
|
||||||
lua = { 'stylua' },
|
lua = { 'stylua' },
|
||||||
|
go = { 'gofmt' },
|
||||||
-- Conform can also run multiple formatters sequentially
|
-- Conform can also run multiple formatters sequentially
|
||||||
-- python = { "isort", "black" },
|
-- python = { "isort", "black" },
|
||||||
--
|
--
|
||||||
|
|
|
@ -1,123 +0,0 @@
|
||||||
return {
|
|
||||||
'yetone/avante.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
lazy = false,
|
|
||||||
version = false, -- set this if you want to always pull the latest change
|
|
||||||
opts = {
|
|
||||||
-- add any opts here
|
|
||||||
{
|
|
||||||
---@alias Provider "claude" | "openai" | "azure" | "gemini" | "cohere" | "copilot" | string
|
|
||||||
provider = 'copilot', -- Recommend using Claude
|
|
||||||
auto_suggestions_provider = 'copilot', -- Since auto-suggestions are a high-frequency operation and therefore expensive, it is recommended to specify an inexpensive provider or even a free provider: copilot
|
|
||||||
-- claude = {
|
|
||||||
-- endpoint = 'https://api.anthropic.com',
|
|
||||||
-- model = 'claude-3-5-sonnet-20240620',
|
|
||||||
-- temperature = 0,
|
|
||||||
-- max_tokens = 4096,
|
|
||||||
-- },
|
|
||||||
behaviour = {
|
|
||||||
auto_suggestions = false, -- Experimental stage
|
|
||||||
auto_set_highlight_group = true,
|
|
||||||
auto_set_keymaps = true,
|
|
||||||
auto_apply_diff_after_generation = false,
|
|
||||||
support_paste_from_clipboard = true,
|
|
||||||
},
|
|
||||||
mappings = {
|
|
||||||
--- @class AvanteConflictMappings
|
|
||||||
diff = {
|
|
||||||
ours = 'co',
|
|
||||||
theirs = 'ct',
|
|
||||||
all_theirs = 'ca',
|
|
||||||
both = 'cb',
|
|
||||||
cursor = 'cc',
|
|
||||||
next = ']x',
|
|
||||||
prev = '[x',
|
|
||||||
},
|
|
||||||
suggestion = {
|
|
||||||
accept = '<M-l>',
|
|
||||||
next = '<M-]>',
|
|
||||||
prev = '<M-[>',
|
|
||||||
dismiss = '<C-]>',
|
|
||||||
},
|
|
||||||
jump = {
|
|
||||||
next = ']]',
|
|
||||||
prev = '[[',
|
|
||||||
},
|
|
||||||
submit = {
|
|
||||||
normal = '<CR>',
|
|
||||||
insert = '<C-s>',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
hints = { enabled = true },
|
|
||||||
windows = {
|
|
||||||
---@type "right" | "left" | "top" | "bottom"
|
|
||||||
position = 'right', -- the position of the sidebar
|
|
||||||
wrap = true, -- similar to vim.o.wrap
|
|
||||||
width = 30, -- default % based on available width
|
|
||||||
sidebar_header = {
|
|
||||||
align = 'center', -- left, center, right for title
|
|
||||||
rounded = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
highlights = {
|
|
||||||
---@type AvanteConflictHighlights
|
|
||||||
diff = {
|
|
||||||
current = 'DiffText',
|
|
||||||
incoming = 'DiffAdd',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
--- @class AvanteConflictUserConfig
|
|
||||||
diff = {
|
|
||||||
autojump = true,
|
|
||||||
---@type string | fun(): any
|
|
||||||
list_opener = 'copen',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
|
|
||||||
build = 'make',
|
|
||||||
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
|
|
||||||
dependencies = {
|
|
||||||
'stevearc/dressing.nvim',
|
|
||||||
'nvim-lua/plenary.nvim',
|
|
||||||
'MunifTanjim/nui.nvim',
|
|
||||||
--- The below dependencies are optional,
|
|
||||||
'nvim-tree/nvim-web-devicons', -- or echasnovski/mini.icons
|
|
||||||
'zbirenbaum/copilot.lua', -- for providers='copilot'
|
|
||||||
{
|
|
||||||
-- support for image pasting
|
|
||||||
'HakonHarnes/img-clip.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
opts = {
|
|
||||||
-- recommended settings
|
|
||||||
default = {
|
|
||||||
embed_image_as_base64 = false,
|
|
||||||
prompt_for_file_name = false,
|
|
||||||
drag_and_drop = {
|
|
||||||
insert_mode = true,
|
|
||||||
},
|
|
||||||
-- required for Windows users
|
|
||||||
use_absolute_path = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-- Make sure to set this up properly if you have lazy=true
|
|
||||||
'MeanderingProgrammer/render-markdown.nvim',
|
|
||||||
opts = {
|
|
||||||
file_types = { 'markdown', 'Avante' },
|
|
||||||
},
|
|
||||||
ft = { 'markdown', 'Avante' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
init = function()
|
|
||||||
vim.api.nvim_create_autocmd('VimEnter', {
|
|
||||||
callback = function()
|
|
||||||
-- Ensure Avante.nvim has been loaded before switching providers
|
|
||||||
if vim.fn.exists ':AvanteSwitchProvider' == 2 then
|
|
||||||
vim.cmd 'AvanteSwitchProvider copilot'
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
}
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
return {
|
||||||
|
'Exafunction/codeium.vim',
|
||||||
|
event = 'BufEnter',
|
||||||
|
config = function()
|
||||||
|
-- Change '<C-g>' here to any keycode you like.
|
||||||
|
vim.keymap.set('i', '<C-l>', function()
|
||||||
|
return vim.fn['codeium#Accept']()
|
||||||
|
end, { expr = true, silent = true })
|
||||||
|
vim.keymap.set('i', '<C-;>', function()
|
||||||
|
return vim.fn['codeium#CycleCompletions'](1)
|
||||||
|
end, { expr = true, silent = true })
|
||||||
|
vim.keymap.set('i', '<C-,>', function()
|
||||||
|
return vim.fn['codeium#CycleCompletions'](-1)
|
||||||
|
end, { expr = true, silent = true })
|
||||||
|
vim.keymap.set('i', '<C-x>', function()
|
||||||
|
return vim.fn['codeium#Clear']()
|
||||||
|
end, { expr = true, silent = true })
|
||||||
|
vim.keymap.set('i', '<C-n>', function()
|
||||||
|
return vim.fn['codeium#CycleCompletions(1)']()
|
||||||
|
end, { expr = true, silent = true })
|
||||||
|
vim.keymap.set('i', '<leader>cc', function()
|
||||||
|
return vim.fn['codeium#Chat()']()
|
||||||
|
end, { expr = true, silent = true })
|
||||||
|
end,
|
||||||
|
}
|
|
@ -1,46 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
'CopilotC-Nvim/CopilotChat.nvim',
|
|
||||||
branch = 'canary',
|
|
||||||
dependencies = {
|
|
||||||
{ 'zbirenbaum/copilot.lua' }, -- or github/copilot.vim
|
|
||||||
{ 'nvim-lua/plenary.nvim' }, -- for curl, log wrapper
|
|
||||||
},
|
|
||||||
build = 'make tiktoken', -- Only on MacOS or Linux
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
'<leader>ccq',
|
|
||||||
function()
|
|
||||||
local input = vim.fn.input 'Quick Chat: '
|
|
||||||
if input ~= '' then
|
|
||||||
require('CopilotChat').ask(input, { selection = require('CopilotChat.select').buffer })
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
desc = 'CopilotChat Buffer chat',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cct',
|
|
||||||
'<cmd>CopilotChatToggle<CR>',
|
|
||||||
desc = 'Copilot Chat Toggle',
|
|
||||||
},
|
|
||||||
-- {
|
|
||||||
-- '<leader>ccs',
|
|
||||||
-- 'CopilotChatSave',
|
|
||||||
-- desc = 'CopilotChat - Quick chat',
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
debug = false, -- Enable debug logging
|
|
||||||
window = {
|
|
||||||
layout = 'float',
|
|
||||||
relative = 'editor',
|
|
||||||
title = 'Copilot',
|
|
||||||
footer = '<C-i> to toggle chat | <C-l> to clean chat',
|
|
||||||
width = 0.6,
|
|
||||||
height = 0.5,
|
|
||||||
row = 0,
|
|
||||||
border = 'rounded', -- 'none', single', 'double', 'rounded', 'solid', 'shadow'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -135,5 +135,57 @@ return {
|
||||||
end,
|
end,
|
||||||
config = true,
|
config = true,
|
||||||
},
|
},
|
||||||
{ 'github/copilot.vim' },
|
-- {
|
||||||
|
-- 'zbirenbaum/copilot.lua',
|
||||||
|
-- cmd = 'Copilot',
|
||||||
|
-- event = 'InsertEnter',
|
||||||
|
-- config = function()
|
||||||
|
-- require('copilot').setup {
|
||||||
|
-- panel = {
|
||||||
|
-- enabled = true,
|
||||||
|
-- auto_refresh = false,
|
||||||
|
-- keymap = {
|
||||||
|
-- jump_prev = '[[',
|
||||||
|
-- jump_next = ']]',
|
||||||
|
-- accept = '<CR>',
|
||||||
|
-- refresh = 'gr',
|
||||||
|
-- open = '<M-CR>',
|
||||||
|
-- },
|
||||||
|
-- layout = {
|
||||||
|
-- position = 'bottom', -- | top | left | right
|
||||||
|
-- ratio = 0.4,
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- suggestion = {
|
||||||
|
-- enabled = true,
|
||||||
|
-- auto_trigger = true,
|
||||||
|
-- hide_during_completion = true,
|
||||||
|
-- debounce = 75,
|
||||||
|
-- keymap = {
|
||||||
|
-- accept = '<M-l>',
|
||||||
|
-- accept_word = false,
|
||||||
|
-- accept_line = false,
|
||||||
|
-- next = '<M-]>',
|
||||||
|
-- prev = '<M-[>',
|
||||||
|
-- dismiss = '<C-]>',
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- filetypes = {
|
||||||
|
-- yaml = false,
|
||||||
|
-- markdown = false,
|
||||||
|
-- help = false,
|
||||||
|
-- gitcommit = false,
|
||||||
|
-- gitrebase = false,
|
||||||
|
-- hgcommit = false,
|
||||||
|
-- svn = false,
|
||||||
|
-- cvs = false,
|
||||||
|
-- ['.'] = false,
|
||||||
|
-- },
|
||||||
|
-- copilot_node_command = 'node', -- Node.js version must be > 18.x
|
||||||
|
-- server_opts_overrides = {},
|
||||||
|
-- }
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
{ 'norcalli/nvim-colorizer.lua' },
|
||||||
|
{ 'wsdjeg/vim-chat' },
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,7 +151,7 @@ return {
|
||||||
-- see `:h neo-tree-custom-commands-global`
|
-- see `:h neo-tree-custom-commands-global`
|
||||||
commands = {},
|
commands = {},
|
||||||
window = {
|
window = {
|
||||||
position = 'right',
|
position = 'left',
|
||||||
width = 40,
|
width = 40,
|
||||||
mapping_options = {
|
mapping_options = {
|
||||||
noremap = true,
|
noremap = true,
|
||||||
|
@ -334,7 +334,7 @@ return {
|
||||||
}
|
}
|
||||||
|
|
||||||
-- vim.cmd [[nnoremap \ :Neotree reveal<cr>]]
|
-- vim.cmd [[nnoremap \ :Neotree reveal<cr>]]
|
||||||
vim.keymap.set('n', '<leader>e', ':Neotree toggle position=right<CR>', { noremap = true, silent = true }) -- focus file explorer
|
vim.keymap.set('n', '<leader>e', ':Neotree toggle position=left<CR>', { noremap = true, silent = true }) -- focus file explorer
|
||||||
vim.keymap.set('n', '<leader>gt', ':Neotree float git_status<CR>', { noremap = true, silent = true }) -- open git status window
|
vim.keymap.set('n', '<leader>gt', ':Neotree float git_status<CR>', { noremap = true, silent = true }) -- open git status window
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue