Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SCRIPT C:\Users\mbakiev\.vim\bundle\unite.vim\autoload\unite\sources\buffer.vim
- Sourced 1 time
- Total time: 0.000349
- Self time: 0.000331
- count total (s) self (s)
- "=============================================================================
- " FILE: buffer.vim
- " AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>
- " License: MIT license {{{
- " Permission is hereby granted, free of charge, to any person obtaining
- " a copy of this software and associated documentation files (the
- " "Software"), to deal in the Software without restriction, including
- " without limitation the rights to use, copy, modify, merge, publish,
- " distribute, sublicense, and/or sell copies of the Software, and to
- " permit persons to whom the Software is furnished to do so, subject to
- " the following conditions:
- "
- " The above copyright notice and this permission notice shall be included
- " in all copies or substantial portions of the Software.
- "
- " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- " OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- " MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- " IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- " CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- " TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- " SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- " }}}
- "=============================================================================
- 1 0.000011 let s:save_cpo = &cpo
- 1 0.000008 set cpo&vim
- " Variables "{{{
- 1 0.000031 0.000014 call unite#util#set_default(
- \ 'g:unite_source_buffer_time_format',
- \ '(%Y/%m/%d %H:%M:%S) ')
- "}}}
- 1 0.000004 function! unite#sources#buffer#define() "{{{
- return [s:source_buffer_all, s:source_buffer_tab]
- endfunction"}}}
- 1 0.000010 let s:source_buffer_all = {
- \ 'name' : 'buffer',
- \ 'description' : 'candidates from buffer list',
- \ 'syntax' : 'uniteSource__Buffer',
- \ 'hooks' : {},
- \ 'default_kind' : 'buffer',
- \}
- 1 0.000003 function! s:source_buffer_all.hooks.on_init(args, context) "{{{
- let a:context.source__is_bang =
- \ (get(a:args, 0, '') ==# '!')
- let a:context.source__is_question =
- \ (get(a:args, 0, '') ==# '?')
- let a:context.source__is_plus =
- \ (get(a:args, 0, '') ==# '+')
- let a:context.source__is_minus =
- \ (get(a:args, 0, '') ==# '-')
- let a:context.source__buffer_list =
- \ s:get_buffer_list(a:context.source__is_bang,
- \ a:context.source__is_question,
- \ a:context.source__is_plus,
- \ a:context.source__is_minus)
- endfunction"}}}
- 1 0.000002 function! s:source_buffer_all.hooks.on_syntax(args, context) "{{{
- syntax match uniteSource__Buffer_Name /[^/ \[\]]\+\s/
- \ contained containedin=uniteSource__Buffer
- highlight default link uniteSource__Buffer_Name Function
- syntax match uniteSource__Buffer_Prefix /\s\d\+\s\%(\S\+\)\?/
- \ contained containedin=uniteSource__Buffer
- highlight default link uniteSource__Buffer_Prefix Constant
- syntax match uniteSource__Buffer_Info /\[.\{-}\] /
- \ contained containedin=uniteSource__Buffer
- highlight default link uniteSource__Buffer_Info PreProc
- syntax match uniteSource__Buffer_Modified /\[.\{-}+\]/
- \ contained containedin=uniteSource__Buffer
- highlight default link uniteSource__Buffer_Modified Statement
- syntax match uniteSource__Buffer_NoFile /\[nofile\]/
- \ contained containedin=uniteSource__Buffer
- highlight default link uniteSource__Buffer_NoFile Function
- syntax match uniteSource__Buffer_Time /(.\{-}) /
- \ contained containedin=uniteSource__Buffer
- highlight default link uniteSource__Buffer_Time Statement
- endfunction"}}}
- 1 0.000001 function! s:source_buffer_all.hooks.on_post_filter(args, context) "{{{
- for candidate in a:context.candidates
- let candidate.action__path =
- \ unite#util#substitute_path_separator(
- \ fnamemodify(s:make_word(candidate.action__buffer_nr), ':p'))
- let candidate.action__directory =
- \ unite#helper#get_buffer_directory(candidate.action__buffer_nr)
- endfor
- endfunction"}}}
- 1 0.000003 function! s:source_buffer_all.gather_candidates(args, context) "{{{
- if a:context.is_redraw
- " Recaching.
- let a:context.source__buffer_list =
- \ s:get_buffer_list(a:context.source__is_bang,
- \ a:context.source__is_question,
- \ a:context.source__is_plus,
- \ a:context.source__is_minus)
- endif
- let candidates = map(a:context.source__buffer_list, "{
- \ 'word' : unite#util#substitute_path_separator(
- \ filereadable(s:make_word(v:val.action__buffer_nr)) ?
- \ fnamemodify(s:make_word(v:val.action__buffer_nr), ':p') :
- \ s:make_word(v:val.action__buffer_nr)),
- \ 'abbr' : s:make_abbr(v:val.action__buffer_nr, v:val.source__flags)
- \ . s:format_time(v:val.source__time),
- \ 'action__buffer_nr' : v:val.action__buffer_nr,
- \}")
- return candidates
- endfunction"}}}
- 1 0.000003 function! s:source_buffer_all.complete(args, context, arglead, cmdline, cursorpos) "{{{
- return ['!', '?', '+', '-']
- endfunction"}}}
- 1 0.000007 let s:source_buffer_tab = deepcopy(s:source_buffer_all)
- 1 0.000003 let s:source_buffer_tab.name = 'buffer_tab'
- 1 0.000003 let s:source_buffer_tab.description =
- \ 'candidates from buffer list in current tab'
- 1 0.000001 function! s:source_buffer_tab.gather_candidates(args, context) "{{{
- if a:context.is_redraw
- " Recaching.
- let a:context.source__buffer_list =
- \ s:get_buffer_list(a:context.source__is_bang,
- \ a:context.source__is_question,
- \ a:context.source__is_plus,
- \ a:context.source__is_minus)
- endif
- if !exists('g:loaded_tabpagebuffer')
- call unite#print_source_message(
- \ 'tabpagebuffer plugin is not installed.', self.name)
- return []
- endif
- if !exists('t:tabpagebuffer')
- return []
- endif
- let list = filter(copy(a:context.source__buffer_list),
- \ 'has_key(t:tabpagebuffer, v:val.action__buffer_nr)')
- let candidates = map(list, "{
- \ 'word' : unite#util#substitute_path_separator(
- \ fnamemodify(s:make_word(v:val.action__buffer_nr), ':p')),
- \ 'abbr' : s:make_abbr(v:val.action__buffer_nr, v:val.source__flags)
- \ . s:format_time(v:val.source__time),
- \ 'action__buffer_nr' : v:val.action__buffer_nr,
- \}")
- return candidates
- endfunction"}}}
- " Misc
- 1 0.000002 function! s:make_word(bufnr) "{{{
- let filetype = getbufvar(a:bufnr, '&filetype')
- if filetype ==# 'vimfiler'
- let path = getbufvar(a:bufnr, 'vimfiler').current_dir
- let path = printf('*vimfiler* [%s]',
- \ unite#util#substitute_path_separator(simplify(path)))
- elseif filetype ==# 'vimshell'
- let vimshell = getbufvar(a:bufnr, 'vimshell')
- let path = printf('*vimshell*: [%s]',
- \ unite#util#substitute_path_separator(simplify(vimshell.current_dir)))
- else
- let path = unite#util#substitute_path_separator(simplify(bufname(a:bufnr)))
- endif
- return path
- endfunction"}}}
- 1 0.000002 function! s:make_abbr(bufnr, flags) "{{{
- let bufname = fnamemodify(bufname(a:bufnr), ':t')
- if bufname == ''
- let bufname = bufname(a:bufnr)
- endif
- let filetype = getbufvar(a:bufnr, '&filetype')
- if filetype ==# 'vimfiler' || filetype ==# 'vimshell'
- if filetype ==# 'vimfiler'
- let vimfiler = getbufvar(a:bufnr, 'vimfiler')
- let path = vimfiler.current_dir
- if vimfiler.source !=# 'file'
- let path = vimfiler.source . ':' . path
- endif
- else
- let path = simplify(getbufvar(a:bufnr, 'vimshell').current_dir)
- endif
- let path = printf('%s [%s : %s]', bufname, path, filetype)
- else
- let path = bufname(a:bufnr) == '' ? 'No Name' :
- \ simplify(fnamemodify(bufname(a:bufnr), ':~:.'))
- if a:flags != ''
- " Format flags so that buffer numbers are aligned on the left.
- " example: '42 a% +' => ' 42 a%+ '
- " '3 h +' => ' 3 h+ '
- let nowhitespace = substitute(a:flags, '\s*', '', 'g')
- let path = substitute(nowhitespace, '\v(\d+)(.*)',
- \ '\=printf("%*s %-*s", 3, submatch(1), 4, submatch(2))', 'g') . path
- endif
- if filetype != ''
- let path .= ' [' . filetype . ']'
- endif
- endif
- return (getbufvar(a:bufnr, '&buftype') =~# 'nofile' ? '[nofile] ' : '' ) .
- \ unite#util#substitute_path_separator(path) . ' '
- endfunction"}}}
- 1 0.000003 function! s:compare(candidate_a, candidate_b) "{{{
- return a:candidate_b.source__time - a:candidate_a.source__time
- endfunction"}}}
- 1 0.000003 function! s:get_buffer_list(is_bang, is_question, is_plus, is_minus) "{{{
- " Get :ls flags.
- redir => output
- silent! ls
- redir END
- let flag_dict = {}
- for out in map(split(output, '\n'), 'split(v:val)')
- let flag_dict[out[0]] = matchstr(join(out), '^.*\ze\s\+"')
- endfor
- " Make buffer list.
- let list = []
- let bufnr = 1
- let buffer_list = unite#sources#buffer#variables#get_buffer_list()
- while bufnr <= bufnr('$')
- if s:is_listed(a:is_bang, a:is_question, a:is_plus, a:is_minus, bufnr)
- \ && bufnr != bufnr('%')
- let dict = get(buffer_list, bufnr, {
- \ 'action__buffer_nr' : bufnr,
- \ 'source__time' : 0,
- \ })
- let dict.source__flags = get(flag_dict, bufnr, '')
- call add(list, dict)
- endif
- let bufnr += 1
- endwhile
- call sort(list, 's:compare')
- if s:is_listed(a:is_bang, a:is_question, a:is_plus, a:is_minus, bufnr('%'))
- " Add current buffer.
- let dict = get(unite#sources#buffer#variables#get_buffer_list(),
- \ bufnr('%'), {
- \ 'action__buffer_nr' : bufnr('%'),
- \ 'source__time' : 0,
- \ })
- let dict.source__flags = get(flag_dict, bufnr('%'), '')
- call add(list, dict)
- endif
- return list
- endfunction"}}}
- 1 0.000003 function! s:is_listed(is_bang, is_question, is_plus, is_minus, bufnr) "{{{
- return bufexists(a:bufnr) &&
- \ (a:is_question ? !buflisted(a:bufnr) :
- \ (a:is_bang || buflisted(a:bufnr)))
- \ && (!a:is_plus || getbufvar(a:bufnr, '&mod'))
- \ && (!a:is_minus || getbufvar(a:bufnr, '&buftype') !~# 'nofile')
- \ && (getbufvar(a:bufnr, '&filetype') !=# 'unite'
- \ || getbufvar(a:bufnr, 'unite').buffer_name !=#
- \ unite#get_current_unite().buffer_name)
- endfunction"}}}
- 1 0.000003 function! s:format_time(time) "{{{
- if empty(a:time)
- return ''
- endif
- return strftime(g:unite_source_buffer_time_format, a:time)
- endfunction"}}}
- 1 0.000007 let &cpo = s:save_cpo
- 1 0.000002 unlet s:save_cpo
- " vim: foldmethod=marker
- FUNCTION <SNR>124_is_listed()
- Called 4 times
- Total time: 0.000040
- Self time: 0.000040
- count total (s) self (s)
- 4 0.000038 return bufexists(a:bufnr) && (a:is_question ? !buflisted(a:bufnr) : (a:is_bang || buflisted(a:bufnr))) && (!a:is_plus || getbufvar(a:bufnr, '&mod')) && (!a:is_minus || getbufvar(a:bufnr, '&buftype') !~# 'nofile') && (getbufvar(a:bufnr, '&filetype') !=# 'unite' || getbufvar(a:bufnr, 'unite').buffer_name !=# unite#get_current_unite().buffer_name)
- FUNCTION <SNR>124_get_buffer_list()
- Called 1 time
- Total time: 0.000294
- Self time: 0.000245
- count total (s) self (s)
- " Get :ls flags.
- 1 0.000003 redir => output
- 1 0.000031 silent! ls
- 1 0.000002 redir END
- 1 0.000005 let flag_dict = {}
- 4 0.000053 for out in map(split(output, '\n'), 'split(v:val)')
- 3 0.000036 let flag_dict[out[0]] = matchstr(join(out), '^.*\ze\s\+"')
- 3 0.000003 endfor
- " Make buffer list.
- 1 0.000001 let list = []
- 1 0.000001 let bufnr = 1
- 1 0.000008 0.000005 let buffer_list = unite#sources#buffer#variables#get_buffer_list()
- 4 0.000007 while bufnr <= bufnr('$')
- 3 0.000050 0.000019 if s:is_listed(a:is_bang, a:is_question, a:is_plus, a:is_minus, bufnr) && bufnr != bufnr('%')
- 2 0.000008 let dict = get(buffer_list, bufnr, { 'action__buffer_nr' : bufnr, 'source__time' : 0, })
- 2 0.000005 let dict.source__flags = get(flag_dict, bufnr, '')
- 2 0.000004 call add(list, dict)
- 2 0.000001 endif
- 3 0.000004 let bufnr += 1
- 3 0.000002 endwhile
- 1 0.000012 0.000008 call sort(list, 's:compare')
- 1 0.000014 0.000005 if s:is_listed(a:is_bang, a:is_question, a:is_plus, a:is_minus, bufnr('%'))
- " Add current buffer.
- 1 0.000010 0.000008 let dict = get(unite#sources#buffer#variables#get_buffer_list(), bufnr('%'), { 'action__buffer_nr' : bufnr('%'), 'source__time' : 0, })
- 1 0.000003 let dict.source__flags = get(flag_dict, bufnr('%'), '')
- 1 0.000002 call add(list, dict)
- 1 0.000001 endif
- 1 0.000001 return list
- FUNCTION 510()
- Called 1 time
- Total time: 0.000401
- Self time: 0.000106
- count total (s) self (s)
- 1 0.000027 let a:context.source__is_bang = (get(a:args, 0, '') ==# '!')
- 1 0.000010 let a:context.source__is_question = (get(a:args, 0, '') ==# '?')
- 1 0.000055 let a:context.source__is_plus = (get(a:args, 0, '') ==# '+')
- 1 0.000003 let a:context.source__is_minus = (get(a:args, 0, '') ==# '-')
- 1 0.000304 0.000010 let a:context.source__buffer_list = s:get_buffer_list(a:context.source__is_bang, a:context.source__is_question, a:context.source__is_plus, a:context.source__is_minus)
- FUNCTION 512()
- Called 1 time
- Total time: 0.024335
- Self time: 0.011775
- count total (s) self (s)
- 4 0.000007 for candidate in a:context.candidates
- 3 0.011996 0.011730 let candidate.action__path = unite#util#substitute_path_separator( fnamemodify(s:make_word(candidate.action__buffer_nr), ':p'))
- 3 0.012316 0.000022 let candidate.action__directory = unite#helper#get_buffer_directory(candidate.action__buffer_nr)
- 3 0.000003 endfor
- FUNCTION 513()
- Called 1 time
- Total time: 1.375129
- Self time: 1.343592
- count total (s) self (s)
- 1 0.000001 if a:context.is_redraw
- " Recaching.
- let a:context.source__buffer_list = s:get_buffer_list(a:context.source__is_bang, a:context.source__is_question, a:context.source__is_plus, a:context.source__is_minus)
- endif
- 1 1.375116 1.343579 let candidates = map(a:context.source__buffer_list, "{ 'word' : unite#util#substitute_path_separator( filereadable(s:make_word(v:val.action__buffer_nr)) ? fnamemodify(s:make_word(v:val.action__buffer_nr), ':p') : s:make_word(v:val.action__buffer_nr)), 'abbr' : s:make_abbr(v:val.action__buffer_nr, v:val.source__flags) . s:format_time(v:val.source__time), 'action__buffer_nr' : v:val.action__buffer_nr,}")
- 1 0.000003 return candidates
- FUNCTION 514()
- Called 0 times
- Total time: 0.000000
- Self time: 0.000000
- count total (s) self (s)
- return ['!', '?', '+', '-']
- FUNCTION 511()
- Called 1 time
- Total time: 0.000066
- Self time: 0.000066
- count total (s) self (s)
- 1 0.000011 syntax match uniteSource__Buffer_Name /[^/ \[\]]\+\s/ contained containedin=uniteSource__Buffer
- 1 0.000003 highlight default link uniteSource__Buffer_Name Function
- 1 0.000008 syntax match uniteSource__Buffer_Prefix /\s\d\+\s\%(\S\+\)\?/ contained containedin=uniteSource__Buffer
- 1 0.000003 highlight default link uniteSource__Buffer_Prefix Constant
- 1 0.000008 syntax match uniteSource__Buffer_Info /\[.\{-}\] / contained containedin=uniteSource__Buffer
- 1 0.000003 highlight default link uniteSource__Buffer_Info PreProc
- 1 0.000007 syntax match uniteSource__Buffer_Modified /\[.\{-}+\]/ contained containedin=uniteSource__Buffer
- 1 0.000002 highlight default link uniteSource__Buffer_Modified Statement
- 1 0.000007 syntax match uniteSource__Buffer_NoFile /\[nofile\]/ contained containedin=uniteSource__Buffer
- 1 0.000002 highlight default link uniteSource__Buffer_NoFile Function
- 1 0.000007 syntax match uniteSource__Buffer_Time /(.\{-}) / contained containedin=uniteSource__Buffer
- 1 0.000002 highlight default link uniteSource__Buffer_Time Statement
- FUNCTION 515()
- Called 0 times
- Total time: 0.000000
- Self time: 0.000000
- count total (s) self (s)
- if a:context.is_redraw
- " Recaching.
- let a:context.source__buffer_list = s:get_buffer_list(a:context.source__is_bang, a:context.source__is_question, a:context.source__is_plus, a:context.source__is_minus)
- endif
- if !exists('g:loaded_tabpagebuffer')
- call unite#print_source_message( 'tabpagebuffer plugin is not installed.', self.name)
- return []
- endif
- if !exists('t:tabpagebuffer')
- return []
- endif
- let list = filter(copy(a:context.source__buffer_list), 'has_key(t:tabpagebuffer, v:val.action__buffer_nr)')
- let candidates = map(list, "{ 'word' : unite#util#substitute_path_separator( fnamemodify(s:make_word(v:val.action__buffer_nr), ':p')), 'abbr' : s:make_abbr(v:val.action__buffer_nr, v:val.source__flags) . s:format_time(v:val.source__time), 'action__buffer_nr' : v:val.action__buffer_nr,}")
- return candidates
- FUNCTION <SNR>124_make_abbr()
- Called 3 times
- Total time: 0.030298
- Self time: 0.030102
- count total (s) self (s)
- 3 0.000045 let bufname = fnamemodify(bufname(a:bufnr), ':t')
- 3 0.000016 if bufname == ''
- let bufname = bufname(a:bufnr)
- endif
- 3 0.000031 let filetype = getbufvar(a:bufnr, '&filetype')
- 3 0.000018 if filetype ==# 'vimfiler' || filetype ==# 'vimshell'
- if filetype ==# 'vimfiler'
- let vimfiler = getbufvar(a:bufnr, 'vimfiler')
- let path = vimfiler.current_dir
- if vimfiler.source !=# 'file'
- let path = vimfiler.source . ':' . path
- endif
- else
- let path = simplify(getbufvar(a:bufnr, 'vimshell').current_dir)
- endif
- let path = printf('%s [%s : %s]', bufname, path, filetype)
- else
- 3 0.029358 let path = bufname(a:bufnr) == '' ? 'No Name' : simplify(fnamemodify(bufname(a:bufnr), ':~:.'))
- 3 0.000042 if a:flags != ''
- " Format flags so that buffer numbers are aligned on the left.
- " example: '42 a% +' => ' 42 a%+ '
- " '3 h +' => ' 3 h+ '
- 3 0.000146 let nowhitespace = substitute(a:flags, '\s*', '', 'g')
- 3 0.000129 let path = substitute(nowhitespace, '\v(\d+)(.*)', '\=printf("%*s %-*s", 3, submatch(1), 4, submatch(2))', 'g') . path
- 3 0.000008 endif
- 3 0.000011 if filetype != ''
- 1 0.000007 let path .= ' [' . filetype . ']'
- 1 0.000001 endif
- 3 0.000004 endif
- 3 0.000306 0.000110 return (getbufvar(a:bufnr, '&buftype') =~# 'nofile' ? '[nofile] ' : '' ) . unite#util#substitute_path_separator(path) . ' '
- FUNCTION <SNR>124_format_time()
- Called 3 times
- Total time: 0.000059
- Self time: 0.000059
- count total (s) self (s)
- 3 0.000015 if empty(a:time)
- 2 0.000004 return ''
- endif
- 1 0.000029 return strftime(g:unite_source_buffer_time_format, a:time)
- FUNCTION unite#sources#buffer#define()
- Called 1 time
- Total time: 0.000005
- Self time: 0.000005
- count total (s) self (s)
- 1 0.000004 return [s:source_buffer_all, s:source_buffer_tab]
- FUNCTION <SNR>124_make_word()
- Called 9 times
- Total time: 0.001004
- Self time: 0.000563
- count total (s) self (s)
- 9 0.000121 let filetype = getbufvar(a:bufnr, '&filetype')
- 9 0.000037 if filetype ==# 'vimfiler'
- let path = getbufvar(a:bufnr, 'vimfiler').current_dir
- let path = printf('*vimfiler* [%s]', unite#util#substitute_path_separator(simplify(path)))
- elseif filetype ==# 'vimshell'
- let vimshell = getbufvar(a:bufnr, 'vimshell')
- let path = printf('*vimshell*: [%s]', unite#util#substitute_path_separator(simplify(vimshell.current_dir)))
- else
- 9 0.000581 0.000140 let path = unite#util#substitute_path_separator(simplify(bufname(a:bufnr)))
- 9 0.000014 endif
- 9 0.000017 return path
- FUNCTION <SNR>124_compare()
- Called 2 times
- Total time: 0.000004
- Self time: 0.000004
- count total (s) self (s)
- 2 0.000004 return a:candidate_b.source__time - a:candidate_a.source__time
- FUNCTIONS SORTED ON TOTAL TIME
- count total (s) self (s) function
- 1 1.375129 1.343592 513()
- 3 0.030298 0.030102 <SNR>124_make_abbr()
- 1 0.024335 0.011775 512()
- 9 0.001004 0.000563 <SNR>124_make_word()
- 1 0.000401 0.000106 510()
- 1 0.000294 0.000245 <SNR>124_get_buffer_list()
- 1 0.000066 511()
- 3 0.000059 <SNR>124_format_time()
- 4 0.000040 <SNR>124_is_listed()
- 1 0.000005 unite#sources#buffer#define()
- 2 0.000004 <SNR>124_compare()
- 514()
- 515()
- FUNCTIONS SORTED ON SELF TIME
- count total (s) self (s) function
- 1 1.375129 1.343592 513()
- 3 0.030298 0.030102 <SNR>124_make_abbr()
- 1 0.024335 0.011775 512()
- 9 0.001004 0.000563 <SNR>124_make_word()
- 1 0.000294 0.000245 <SNR>124_get_buffer_list()
- 1 0.000401 0.000106 510()
- 1 0.000066 511()
- 3 0.000059 <SNR>124_format_time()
- 4 0.000040 <SNR>124_is_listed()
- 1 0.000005 unite#sources#buffer#define()
- 2 0.000004 <SNR>124_compare()
- 515()
- 514()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement