Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 911000 Details for
Bug 1111781
internal compiler error: Segmentation fault
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
preprocessed source 2
ccIpN3EP.out (text/plain), 7.45 MB, created by
josef radinger
on 2014-06-21 11:37:43 UTC
(
hide
)
Description:
preprocessed source 2
Filename:
MIME Type:
Creator:
josef radinger
Created:
2014-06-21 11:37:43 UTC
Size:
7.45 MB
patch
obsolete
>// /usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1plus -quiet -I /usr/include -I /usr/X11R6/include -I /usr/include/OpenEXR -D_GNU_SOURCE -D_REENTRANT -D gmic_build -D cimg_use_vt100 -D gmic_is_parallel -D cimg_display=1 -D cimg_appname="gmic" -D cimg_use_openmp -D cimg_use_png -D cimg_use_jpeg -D cimg_use_tiff -D cimg_use_zlib -D cimg_use_openexr -D cimg_use_fftw3 -D gmic_float_only -D gmic_main gmic.cpp -quiet -dumpbase gmic.cpp -mtune=generic -march=x86-64 -auxbase gmic -O2 -Wall -Wextra -fopenmp -fno-ipa-sra -o - -frandom-seed=0 ># 1 "gmic.cpp" ># 1 "<command-line>" ># 1 "/usr/include/stdc-predef.h" 1 3 4 ># 1 "<command-line>" 2 ># 1 "gmic.cpp" ># 1879 "gmic.cpp" ># 1 "gmic.h" 1 ># 47 "gmic.h" ># 1 "/usr/include/c++/4.8.2/locale" 1 3 ># 36 "/usr/include/c++/4.8.2/locale" 3 > ># 37 "/usr/include/c++/4.8.2/locale" 3 > ># 1 "/usr/include/c++/4.8.2/bits/localefwd.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/localefwd.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/localefwd.h" 3 > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 1 3 > > ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 4 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 2 3 ># 1855 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 3 >namespace std >{ > typedef long unsigned int size_t; > typedef long int ptrdiff_t; > > > > >} ># 2097 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h" 1 3 ># 39 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h" 3 ># 1 "/usr/include/features.h" 1 3 4 ># 364 "/usr/include/features.h" 3 4 ># 1 "/usr/include/sys/cdefs.h" 1 3 4 ># 385 "/usr/include/sys/cdefs.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 386 "/usr/include/sys/cdefs.h" 2 3 4 ># 365 "/usr/include/features.h" 2 3 4 ># 388 "/usr/include/features.h" 3 4 ># 1 "/usr/include/gnu/stubs.h" 1 3 4 ># 10 "/usr/include/gnu/stubs.h" 3 4 ># 1 "/usr/include/gnu/stubs-64.h" 1 3 4 ># 11 "/usr/include/gnu/stubs.h" 2 3 4 ># 389 "/usr/include/features.h" 2 3 4 ># 40 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h" 2 3 ># 2098 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 2 3 > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/cpu_defines.h" 1 3 ># 2101 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h" 2 3 ># 40 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 1 3 ># 39 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 3 > ># 40 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 3 > ># 1 "/usr/include/c++/4.8.2/clocale" 1 3 ># 39 "/usr/include/c++/4.8.2/clocale" 3 > ># 40 "/usr/include/c++/4.8.2/clocale" 3 > > ># 1 "/usr/include/locale.h" 1 3 4 ># 28 "/usr/include/locale.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 29 "/usr/include/locale.h" 2 3 4 ># 1 "/usr/include/bits/locale.h" 1 3 4 ># 30 "/usr/include/locale.h" 2 3 4 > >extern "C" { ># 50 "/usr/include/locale.h" 3 4 > > > >struct lconv >{ > > > char *decimal_point; > char *thousands_sep; > > > > > > char *grouping; > > > > > > char *int_curr_symbol; > char *currency_symbol; > char *mon_decimal_point; > char *mon_thousands_sep; > char *mon_grouping; > char *positive_sign; > char *negative_sign; > char int_frac_digits; > char frac_digits; > > char p_cs_precedes; > > char p_sep_by_space; > > char n_cs_precedes; > > char n_sep_by_space; > > > > > > > char p_sign_posn; > char n_sign_posn; > > > char int_p_cs_precedes; > > char int_p_sep_by_space; > > char int_n_cs_precedes; > > char int_n_sep_by_space; > > > > > > > char int_p_sign_posn; > char int_n_sign_posn; ># 120 "/usr/include/locale.h" 3 4 >}; > > > >extern char *setlocale (int __category, const char *__locale) throw (); > > >extern struct lconv *localeconv (void) throw (); > > ># 145 "/usr/include/locale.h" 3 4 ># 1 "/usr/include/xlocale.h" 1 3 4 ># 27 "/usr/include/xlocale.h" 3 4 >typedef struct __locale_struct >{ > > struct __locale_data *__locales[13]; > > > const unsigned short int *__ctype_b; > const int *__ctype_tolower; > const int *__ctype_toupper; > > > const char *__names[13]; >} *__locale_t; > > >typedef __locale_t locale_t; ># 146 "/usr/include/locale.h" 2 3 4 > > > > > >extern __locale_t newlocale (int __category_mask, const char *__locale, > __locale_t __base) throw (); ># 186 "/usr/include/locale.h" 3 4 >extern __locale_t duplocale (__locale_t __dataset) throw (); > > > >extern void freelocale (__locale_t __dataset) throw (); > > > > > > >extern __locale_t uselocale (__locale_t __dataset) throw (); > > > > > > > >} ># 43 "/usr/include/c++/4.8.2/clocale" 2 3 ># 51 "/usr/include/c++/4.8.2/clocale" 3 >namespace std >{ > using ::lconv; > using ::setlocale; > using ::localeconv; >} ># 42 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 2 3 > > > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > extern "C" __typeof(uselocale) __uselocale; > > >} > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > typedef __locale_t __c_locale; > > > > > > inline int > __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), > char* __out, > const int __size __attribute__ ((__unused__)), > const char* __fmt, ...) > { > > __c_locale __old = __gnu_cxx::__uselocale(__cloc); ># 88 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++locale.h" 3 > __builtin_va_list __args; > __builtin_va_start(__args, __fmt); > > > const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); > > > > > __builtin_va_end(__args); > > > __gnu_cxx::__uselocale(__old); > > > > > > > > return __ret; > } > > >} ># 41 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 ># 1 "/usr/include/c++/4.8.2/iosfwd" 1 3 ># 36 "/usr/include/c++/4.8.2/iosfwd" 3 > ># 37 "/usr/include/c++/4.8.2/iosfwd" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/stringfwd.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 1 3 ># 46 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 3 > ># 47 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 63 "/usr/include/c++/4.8.2/bits/memoryfwd.h" 3 > template<typename> > class allocator; > > template<> > class allocator<void>; > > > template<typename, typename> > struct uses_allocator; > > > > >} ># 41 "/usr/include/c++/4.8.2/bits/stringfwd.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > > > template<class _CharT> > struct char_traits; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_string; > > template<> struct char_traits<char>; > > > typedef basic_string<char> string; > > > template<> struct char_traits<wchar_t>; > > > typedef basic_string<wchar_t> wstring; ># 86 "/usr/include/c++/4.8.2/bits/stringfwd.h" 3 > >} ># 40 "/usr/include/c++/4.8.2/iosfwd" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/postypes.h" 1 3 ># 38 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > ># 39 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > ># 1 "/usr/include/c++/4.8.2/cwchar" 1 3 ># 39 "/usr/include/c++/4.8.2/cwchar" 3 > ># 40 "/usr/include/c++/4.8.2/cwchar" 3 > > > > ># 1 "/usr/include/wchar.h" 1 3 4 ># 36 "/usr/include/wchar.h" 3 4 ># 1 "/usr/include/stdio.h" 1 3 4 ># 44 "/usr/include/stdio.h" 3 4 >struct _IO_FILE; > > > >typedef struct _IO_FILE FILE; > > > > > ># 64 "/usr/include/stdio.h" 3 4 >typedef struct _IO_FILE __FILE; ># 37 "/usr/include/wchar.h" 2 3 4 > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 1 3 4 ># 40 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 3 4 >typedef __builtin_va_list __gnuc_va_list; ># 40 "/usr/include/wchar.h" 2 3 4 > ># 1 "/usr/include/bits/wchar.h" 1 3 4 ># 42 "/usr/include/wchar.h" 2 3 4 ># 51 "/usr/include/wchar.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 212 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 3 4 >typedef long unsigned int size_t; ># 353 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 3 4 >typedef unsigned int wint_t; ># 52 "/usr/include/wchar.h" 2 3 4 ># 82 "/usr/include/wchar.h" 3 4 >typedef struct >{ > int __count; > union > { > > unsigned int __wch; > > > > char __wchb[4]; > } __value; >} __mbstate_t; ># 104 "/usr/include/wchar.h" 3 4 > > >typedef __mbstate_t mbstate_t; > > > > > > ># 132 "/usr/include/wchar.h" 3 4 >extern "C" { > > > > >struct tm; > > > > > > > > > >extern wchar_t *wcscpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src) throw (); > >extern wchar_t *wcsncpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src, size_t __n) > throw (); > > >extern wchar_t *wcscat (wchar_t *__restrict __dest, > const wchar_t *__restrict __src) throw (); > >extern wchar_t *wcsncat (wchar_t *__restrict __dest, > const wchar_t *__restrict __src, size_t __n) > throw (); > > >extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) > throw () __attribute__ ((__pure__)); > >extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) > throw () __attribute__ ((__pure__)); > > > > >extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw (); > > >extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, > size_t __n) throw (); > > > > > >extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, > __locale_t __loc) throw (); > >extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, > size_t __n, __locale_t __loc) throw (); > > > > > >extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw (); > > > >extern size_t wcsxfrm (wchar_t *__restrict __s1, > const wchar_t *__restrict __s2, size_t __n) throw (); > > > > > > > > >extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, > __locale_t __loc) throw (); > > > > >extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, > size_t __n, __locale_t __loc) throw (); > > >extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__)); > > > > > >extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcschr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcschr") __attribute__ ((__pure__)); > > > > > > >extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcsrchr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) > throw () __asm ("wcsrchr") __attribute__ ((__pure__)); > > > > > > > > > >extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) > throw () __attribute__ ((__pure__)); > > > > > >extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) > throw () __attribute__ ((__pure__)); > > >extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) > throw () __attribute__ ((__pure__)); > > >extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) > throw () __asm ("wcspbrk") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, > const wchar_t *__accept) > throw () __asm ("wcspbrk") __attribute__ ((__pure__)); > > > > > > >extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) > throw () __asm ("wcsstr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, > const wchar_t *__needle) > throw () __asm ("wcsstr") __attribute__ ((__pure__)); > > > > > > >extern wchar_t *wcstok (wchar_t *__restrict __s, > const wchar_t *__restrict __delim, > wchar_t **__restrict __ptr) throw (); > > >extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__)); > > > > > >extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) > throw () __asm ("wcswcs") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, > const wchar_t *__needle) > throw () __asm ("wcswcs") __attribute__ ((__pure__)); ># 306 "/usr/include/wchar.h" 3 4 >extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) > throw () __attribute__ ((__pure__)); > > > > > > >extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) > throw () __asm ("wmemchr") __attribute__ ((__pure__)); >extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, > size_t __n) > throw () __asm ("wmemchr") __attribute__ ((__pure__)); > > > > > > >extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) > throw () __attribute__ ((__pure__)); > > >extern wchar_t *wmemcpy (wchar_t *__restrict __s1, > const wchar_t *__restrict __s2, size_t __n) throw (); > > > >extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) > throw (); > > >extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw (); > > > > > >extern wchar_t *wmempcpy (wchar_t *__restrict __s1, > const wchar_t *__restrict __s2, size_t __n) > throw (); > > > > > > >extern wint_t btowc (int __c) throw (); > > > >extern int wctob (wint_t __c) throw (); > > > >extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__)); > > > >extern size_t mbrtowc (wchar_t *__restrict __pwc, > const char *__restrict __s, size_t __n, > mbstate_t *__restrict __p) throw (); > > >extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, > mbstate_t *__restrict __ps) throw (); > > >extern size_t __mbrlen (const char *__restrict __s, size_t __n, > mbstate_t *__restrict __ps) throw (); >extern size_t mbrlen (const char *__restrict __s, size_t __n, > mbstate_t *__restrict __ps) throw (); > > > > > > > > >extern wint_t __btowc_alias (int __c) __asm ("btowc"); >extern __inline __attribute__ ((__gnu_inline__)) wint_t >__attribute__ ((__leaf__)) btowc (int __c) throw () >{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' > ? (wint_t) __c : __btowc_alias (__c)); } > >extern int __wctob_alias (wint_t __c) __asm ("wctob"); >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) wctob (wint_t __wc) throw () >{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' > ? (int) __wc : __wctob_alias (__wc)); } > >extern __inline __attribute__ ((__gnu_inline__)) size_t >__attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) throw () > >{ return (__ps != __null > ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); } > > > > > >extern size_t mbsrtowcs (wchar_t *__restrict __dst, > const char **__restrict __src, size_t __len, > mbstate_t *__restrict __ps) throw (); > > > >extern size_t wcsrtombs (char *__restrict __dst, > const wchar_t **__restrict __src, size_t __len, > mbstate_t *__restrict __ps) throw (); > > > > > > >extern size_t mbsnrtowcs (wchar_t *__restrict __dst, > const char **__restrict __src, size_t __nmc, > size_t __len, mbstate_t *__restrict __ps) throw (); > > > >extern size_t wcsnrtombs (char *__restrict __dst, > const wchar_t **__restrict __src, > size_t __nwc, size_t __len, > mbstate_t *__restrict __ps) throw (); > > > > > > >extern int wcwidth (wchar_t __c) throw (); > > > >extern int wcswidth (const wchar_t *__s, size_t __n) throw (); > > > > > > >extern double wcstod (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr) throw (); > > > > > >extern float wcstof (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr) throw (); >extern long double wcstold (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr) throw (); > > > > > > > >extern long int wcstol (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) throw (); > > > >extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > throw (); > > > > > > >__extension__ >extern long long int wcstoll (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > throw (); > > > >__extension__ >extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) throw (); > > > > > > >__extension__ >extern long long int wcstoq (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base) > throw (); > > > >__extension__ >extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base) throw (); ># 530 "/usr/include/wchar.h" 3 4 >extern long int wcstol_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, int __base, > __locale_t __loc) throw (); > >extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, __locale_t __loc) throw (); > >__extension__ >extern long long int wcstoll_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, __locale_t __loc) throw (); > >__extension__ >extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > int __base, __locale_t __loc) > throw (); > >extern double wcstod_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, __locale_t __loc) > throw (); > >extern float wcstof_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, __locale_t __loc) > throw (); > >extern long double wcstold_l (const wchar_t *__restrict __nptr, > wchar_t **__restrict __endptr, > __locale_t __loc) throw (); > > > > > > >extern wchar_t *wcpcpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src) throw (); > > > >extern wchar_t *wcpncpy (wchar_t *__restrict __dest, > const wchar_t *__restrict __src, size_t __n) > throw (); > > > > > > >extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw (); > > > > > > >extern int fwide (__FILE *__fp, int __mode) throw (); > > > > > > >extern int fwprintf (__FILE *__restrict __stream, > const wchar_t *__restrict __format, ...) > ; > > > > >extern int wprintf (const wchar_t *__restrict __format, ...) > ; > >extern int swprintf (wchar_t *__restrict __s, size_t __n, > const wchar_t *__restrict __format, ...) > throw () ; > > > > > >extern int vfwprintf (__FILE *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > > > > >extern int vwprintf (const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > > >extern int vswprintf (wchar_t *__restrict __s, size_t __n, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > throw () ; > > > > > > >extern int fwscanf (__FILE *__restrict __stream, > const wchar_t *__restrict __format, ...) > ; > > > > >extern int wscanf (const wchar_t *__restrict __format, ...) > ; > >extern int swscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, ...) > throw () ; ># 680 "/usr/include/wchar.h" 3 4 > > > > > > > > > >extern int vfwscanf (__FILE *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > > > > >extern int vwscanf (const wchar_t *__restrict __format, > __gnuc_va_list __arg) > ; > >extern int vswscanf (const wchar_t *__restrict __s, > const wchar_t *__restrict __format, > __gnuc_va_list __arg) > throw () ; ># 736 "/usr/include/wchar.h" 3 4 > > > > > > > > > >extern wint_t fgetwc (__FILE *__stream); >extern wint_t getwc (__FILE *__stream); > > > > > >extern wint_t getwchar (void); > > > > > > >extern wint_t fputwc (wchar_t __wc, __FILE *__stream); >extern wint_t putwc (wchar_t __wc, __FILE *__stream); > > > > > >extern wint_t putwchar (wchar_t __wc); > > > > > > > >extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, > __FILE *__restrict __stream); > > > > > >extern int fputws (const wchar_t *__restrict __ws, > __FILE *__restrict __stream); > > > > > > >extern wint_t ungetwc (wint_t __wc, __FILE *__stream); > ># 801 "/usr/include/wchar.h" 3 4 >extern wint_t getwc_unlocked (__FILE *__stream); >extern wint_t getwchar_unlocked (void); > > > > > > > >extern wint_t fgetwc_unlocked (__FILE *__stream); > > > > > > > >extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); ># 827 "/usr/include/wchar.h" 3 4 >extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); >extern wint_t putwchar_unlocked (wchar_t __wc); ># 837 "/usr/include/wchar.h" 3 4 >extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, > __FILE *__restrict __stream); > > > > > > > >extern int fputws_unlocked (const wchar_t *__restrict __ws, > __FILE *__restrict __stream); > > > > > > > >extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, > const wchar_t *__restrict __format, > const struct tm *__restrict __tp) throw (); > > > > > > > >extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, > const wchar_t *__restrict __format, > const struct tm *__restrict __tp, > __locale_t __loc) throw (); ># 891 "/usr/include/wchar.h" 3 4 >} ># 45 "/usr/include/c++/4.8.2/cwchar" 2 3 ># 62 "/usr/include/c++/4.8.2/cwchar" 3 >namespace std >{ > using ::mbstate_t; >} ># 135 "/usr/include/c++/4.8.2/cwchar" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > using ::wint_t; > > using ::btowc; > using ::fgetwc; > using ::fgetws; > using ::fputwc; > using ::fputws; > using ::fwide; > using ::fwprintf; > using ::fwscanf; > using ::getwc; > using ::getwchar; > using ::mbrlen; > using ::mbrtowc; > using ::mbsinit; > using ::mbsrtowcs; > using ::putwc; > using ::putwchar; > > using ::swprintf; > > using ::swscanf; > using ::ungetwc; > using ::vfwprintf; > > using ::vfwscanf; > > > using ::vswprintf; > > > using ::vswscanf; > > using ::vwprintf; > > using ::vwscanf; > > using ::wcrtomb; > using ::wcscat; > using ::wcscmp; > using ::wcscoll; > using ::wcscpy; > using ::wcscspn; > using ::wcsftime; > using ::wcslen; > using ::wcsncat; > using ::wcsncmp; > using ::wcsncpy; > using ::wcsrtombs; > using ::wcsspn; > using ::wcstod; > > using ::wcstof; > > using ::wcstok; > using ::wcstol; > using ::wcstoul; > using ::wcsxfrm; > using ::wctob; > using ::wmemcmp; > using ::wmemcpy; > using ::wmemmove; > using ::wmemset; > using ::wprintf; > using ::wscanf; > using ::wcschr; > using ::wcspbrk; > using ::wcsrchr; > using ::wcsstr; > using ::wmemchr; ># 232 "/usr/include/c++/4.8.2/cwchar" 3 > >} > > > > > > > >namespace __gnu_cxx >{ > > > > > > using ::wcstold; ># 257 "/usr/include/c++/4.8.2/cwchar" 3 > using ::wcstoll; > using ::wcstoull; > >} > >namespace std >{ > using ::__gnu_cxx::wcstold; > using ::__gnu_cxx::wcstoll; > using ::__gnu_cxx::wcstoull; >} ># 41 "/usr/include/c++/4.8.2/bits/postypes.h" 2 3 ># 68 "/usr/include/c++/4.8.2/bits/postypes.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 88 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > typedef long streamoff; ># 98 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > typedef ptrdiff_t streamsize; ># 111 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > template<typename _StateT> > class fpos > { > private: > streamoff _M_off; > _StateT _M_state; > > public: > > > > > fpos() > : _M_off(0), _M_state() { } ># 133 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > fpos(streamoff __off) > : _M_off(__off), _M_state() { } > > > operator streamoff() const { return _M_off; } > > > void > state(_StateT __st) > { _M_state = __st; } > > > _StateT > state() const > { return _M_state; } > > > > > > fpos& > operator+=(streamoff __off) > { > _M_off += __off; > return *this; > } > > > > > > fpos& > operator-=(streamoff __off) > { > _M_off -= __off; > return *this; > } > > > > > > > > fpos > operator+(streamoff __off) const > { > fpos __pos(*this); > __pos += __off; > return __pos; > } > > > > > > > > fpos > operator-(streamoff __off) const > { > fpos __pos(*this); > __pos -= __off; > return __pos; > } > > > > > > > streamoff > operator-(const fpos& __other) const > { return _M_off - __other._M_off; } > }; > > > > > > > template<typename _StateT> > inline bool > operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) > { return streamoff(__lhs) == streamoff(__rhs); } > > template<typename _StateT> > inline bool > operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) > { return streamoff(__lhs) != streamoff(__rhs); } > > > > > > typedef fpos<mbstate_t> streampos; > > typedef fpos<mbstate_t> wstreampos; ># 239 "/usr/include/c++/4.8.2/bits/postypes.h" 3 > >} ># 41 "/usr/include/c++/4.8.2/iosfwd" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 74 "/usr/include/c++/4.8.2/iosfwd" 3 > class ios_base; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ios; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_streambuf; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_istream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ostream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_iostream; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_stringbuf; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_istringstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_ostringstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT>, > typename _Alloc = allocator<_CharT> > > class basic_stringstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_filebuf; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ifstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_ofstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class basic_fstream; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class istreambuf_iterator; > > template<typename _CharT, typename _Traits = char_traits<_CharT> > > class ostreambuf_iterator; > > > > typedef basic_ios<char> ios; > > > typedef basic_streambuf<char> streambuf; > > > typedef basic_istream<char> istream; > > > typedef basic_ostream<char> ostream; > > > typedef basic_iostream<char> iostream; > > > typedef basic_stringbuf<char> stringbuf; > > > typedef basic_istringstream<char> istringstream; > > > typedef basic_ostringstream<char> ostringstream; > > > typedef basic_stringstream<char> stringstream; > > > typedef basic_filebuf<char> filebuf; > > > typedef basic_ifstream<char> ifstream; > > > typedef basic_ofstream<char> ofstream; > > > typedef basic_fstream<char> fstream; > > > > typedef basic_ios<wchar_t> wios; > > > typedef basic_streambuf<wchar_t> wstreambuf; > > > typedef basic_istream<wchar_t> wistream; > > > typedef basic_ostream<wchar_t> wostream; > > > typedef basic_iostream<wchar_t> wiostream; > > > typedef basic_stringbuf<wchar_t> wstringbuf; > > > typedef basic_istringstream<wchar_t> wistringstream; > > > typedef basic_ostringstream<wchar_t> wostringstream; > > > typedef basic_stringstream<wchar_t> wstringstream; > > > typedef basic_filebuf<wchar_t> wfilebuf; > > > typedef basic_ifstream<wchar_t> wifstream; > > > typedef basic_ofstream<wchar_t> wofstream; > > > typedef basic_fstream<wchar_t> wfstream; > > > > >} ># 42 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 ># 1 "/usr/include/c++/4.8.2/cctype" 1 3 ># 39 "/usr/include/c++/4.8.2/cctype" 3 > ># 40 "/usr/include/c++/4.8.2/cctype" 3 > > ># 1 "/usr/include/ctype.h" 1 3 4 ># 26 "/usr/include/ctype.h" 3 4 ># 1 "/usr/include/bits/types.h" 1 3 4 ># 27 "/usr/include/bits/types.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 28 "/usr/include/bits/types.h" 2 3 4 > > >typedef unsigned char __u_char; >typedef unsigned short int __u_short; >typedef unsigned int __u_int; >typedef unsigned long int __u_long; > > >typedef signed char __int8_t; >typedef unsigned char __uint8_t; >typedef signed short int __int16_t; >typedef unsigned short int __uint16_t; >typedef signed int __int32_t; >typedef unsigned int __uint32_t; > >typedef signed long int __int64_t; >typedef unsigned long int __uint64_t; > > > > > > > >typedef long int __quad_t; >typedef unsigned long int __u_quad_t; ># 121 "/usr/include/bits/types.h" 3 4 ># 1 "/usr/include/bits/typesizes.h" 1 3 4 ># 122 "/usr/include/bits/types.h" 2 3 4 > > >typedef unsigned long int __dev_t; >typedef unsigned int __uid_t; >typedef unsigned int __gid_t; >typedef unsigned long int __ino_t; >typedef unsigned long int __ino64_t; >typedef unsigned int __mode_t; >typedef unsigned long int __nlink_t; >typedef long int __off_t; >typedef long int __off64_t; >typedef int __pid_t; >typedef struct { int __val[2]; } __fsid_t; >typedef long int __clock_t; >typedef unsigned long int __rlim_t; >typedef unsigned long int __rlim64_t; >typedef unsigned int __id_t; >typedef long int __time_t; >typedef unsigned int __useconds_t; >typedef long int __suseconds_t; > >typedef int __daddr_t; >typedef int __key_t; > > >typedef int __clockid_t; > > >typedef void * __timer_t; > > >typedef long int __blksize_t; > > > > >typedef long int __blkcnt_t; >typedef long int __blkcnt64_t; > > >typedef unsigned long int __fsblkcnt_t; >typedef unsigned long int __fsblkcnt64_t; > > >typedef unsigned long int __fsfilcnt_t; >typedef unsigned long int __fsfilcnt64_t; > > >typedef long int __fsword_t; > >typedef long int __ssize_t; > > >typedef long int __syscall_slong_t; > >typedef unsigned long int __syscall_ulong_t; > > > >typedef __off64_t __loff_t; >typedef __quad_t *__qaddr_t; >typedef char *__caddr_t; > > >typedef long int __intptr_t; > > >typedef unsigned int __socklen_t; ># 27 "/usr/include/ctype.h" 2 3 4 > >extern "C" { ># 39 "/usr/include/ctype.h" 3 4 ># 1 "/usr/include/endian.h" 1 3 4 ># 36 "/usr/include/endian.h" 3 4 ># 1 "/usr/include/bits/endian.h" 1 3 4 ># 37 "/usr/include/endian.h" 2 3 4 ># 60 "/usr/include/endian.h" 3 4 ># 1 "/usr/include/bits/byteswap.h" 1 3 4 ># 28 "/usr/include/bits/byteswap.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 29 "/usr/include/bits/byteswap.h" 2 3 4 > > > > > > ># 1 "/usr/include/bits/byteswap-16.h" 1 3 4 ># 36 "/usr/include/bits/byteswap.h" 2 3 4 ># 44 "/usr/include/bits/byteswap.h" 3 4 >static __inline unsigned int >__bswap_32 (unsigned int __bsx) >{ > return __builtin_bswap32 (__bsx); >} ># 108 "/usr/include/bits/byteswap.h" 3 4 >static __inline __uint64_t >__bswap_64 (__uint64_t __bsx) >{ > return __builtin_bswap64 (__bsx); >} ># 61 "/usr/include/endian.h" 2 3 4 ># 40 "/usr/include/ctype.h" 2 3 4 > > > > > > >enum >{ > _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), > _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), > _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), > _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), > _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), > _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), > _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), > _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), > _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), > _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), > _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), > _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) >}; ># 79 "/usr/include/ctype.h" 3 4 >extern const unsigned short int **__ctype_b_loc (void) > throw () __attribute__ ((__const__)); >extern const __int32_t **__ctype_tolower_loc (void) > throw () __attribute__ ((__const__)); >extern const __int32_t **__ctype_toupper_loc (void) > throw () __attribute__ ((__const__)); ># 104 "/usr/include/ctype.h" 3 4 > > > > > > >extern int isalnum (int) throw (); >extern int isalpha (int) throw (); >extern int iscntrl (int) throw (); >extern int isdigit (int) throw (); >extern int islower (int) throw (); >extern int isgraph (int) throw (); >extern int isprint (int) throw (); >extern int ispunct (int) throw (); >extern int isspace (int) throw (); >extern int isupper (int) throw (); >extern int isxdigit (int) throw (); > > > >extern int tolower (int __c) throw (); > > >extern int toupper (int __c) throw (); > > > > > > > > >extern int isblank (int) throw (); > > > > > > >extern int isctype (int __c, int __mask) throw (); > > > > > > >extern int isascii (int __c) throw (); > > > >extern int toascii (int __c) throw (); > > > >extern int _toupper (int) throw (); >extern int _tolower (int) throw (); ># 271 "/usr/include/ctype.h" 3 4 >extern int isalnum_l (int, __locale_t) throw (); >extern int isalpha_l (int, __locale_t) throw (); >extern int iscntrl_l (int, __locale_t) throw (); >extern int isdigit_l (int, __locale_t) throw (); >extern int islower_l (int, __locale_t) throw (); >extern int isgraph_l (int, __locale_t) throw (); >extern int isprint_l (int, __locale_t) throw (); >extern int ispunct_l (int, __locale_t) throw (); >extern int isspace_l (int, __locale_t) throw (); >extern int isupper_l (int, __locale_t) throw (); >extern int isxdigit_l (int, __locale_t) throw (); > >extern int isblank_l (int, __locale_t) throw (); > > > >extern int __tolower_l (int __c, __locale_t __l) throw (); >extern int tolower_l (int __c, __locale_t __l) throw (); > > >extern int __toupper_l (int __c, __locale_t __l) throw (); >extern int toupper_l (int __c, __locale_t __l) throw (); ># 347 "/usr/include/ctype.h" 3 4 >} ># 43 "/usr/include/c++/4.8.2/cctype" 2 3 ># 62 "/usr/include/c++/4.8.2/cctype" 3 >namespace std >{ > using ::isalnum; > using ::isalpha; > using ::iscntrl; > using ::isdigit; > using ::isgraph; > using ::islower; > using ::isprint; > using ::ispunct; > using ::isspace; > using ::isupper; > using ::isxdigit; > using ::tolower; > using ::toupper; >} ># 43 "/usr/include/c++/4.8.2/bits/localefwd.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 55 "/usr/include/c++/4.8.2/bits/localefwd.h" 3 > class locale; > > template<typename _Facet> > bool > has_facet(const locale&) throw(); > > template<typename _Facet> > const _Facet& > use_facet(const locale&); > > > template<typename _CharT> > bool > isspace(_CharT, const locale&); > > template<typename _CharT> > bool > isprint(_CharT, const locale&); > > template<typename _CharT> > bool > iscntrl(_CharT, const locale&); > > template<typename _CharT> > bool > isupper(_CharT, const locale&); > > template<typename _CharT> > bool > islower(_CharT, const locale&); > > template<typename _CharT> > bool > isalpha(_CharT, const locale&); > > template<typename _CharT> > bool > isdigit(_CharT, const locale&); > > template<typename _CharT> > bool > ispunct(_CharT, const locale&); > > template<typename _CharT> > bool > isxdigit(_CharT, const locale&); > > template<typename _CharT> > bool > isalnum(_CharT, const locale&); > > template<typename _CharT> > bool > isgraph(_CharT, const locale&); > > template<typename _CharT> > _CharT > toupper(_CharT, const locale&); > > template<typename _CharT> > _CharT > tolower(_CharT, const locale&); > > > class ctype_base; > template<typename _CharT> > class ctype; > template<> class ctype<char>; > > template<> class ctype<wchar_t>; > > template<typename _CharT> > class ctype_byname; > > > class codecvt_base; > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt; > template<> class codecvt<char, char, mbstate_t>; > > template<> class codecvt<wchar_t, char, mbstate_t>; > > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt_byname; > > > > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class num_get; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class num_put; > > template<typename _CharT> class numpunct; > template<typename _CharT> class numpunct_byname; > > > template<typename _CharT> > class collate; > template<typename _CharT> class > collate_byname; > > > class time_base; > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class time_get; > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class time_get_byname; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class time_put; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class time_put_byname; > > > class money_base; > > template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> > > class money_get; > template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> > > class money_put; > > template<typename _CharT, bool _Intl = false> > class moneypunct; > template<typename _CharT, bool _Intl = false> > class moneypunct_byname; > > > class messages_base; > template<typename _CharT> > class messages; > template<typename _CharT> > class messages_byname; > > >} ># 39 "/usr/include/c++/4.8.2/locale" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/locale_classes.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > > ># 1 "/usr/include/c++/4.8.2/string" 1 3 ># 36 "/usr/include/c++/4.8.2/string" 3 > ># 37 "/usr/include/c++/4.8.2/string" 3 > > > ># 1 "/usr/include/c++/4.8.2/bits/char_traits.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > ># 1 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 1 3 ># 60 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/functexcept.h" 1 3 ># 40 "/usr/include/c++/4.8.2/bits/functexcept.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/exception_defines.h" 1 3 ># 41 "/usr/include/c++/4.8.2/bits/functexcept.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > void > __throw_bad_exception(void) __attribute__((__noreturn__)); > > > void > __throw_bad_alloc(void) __attribute__((__noreturn__)); > > > void > __throw_bad_cast(void) __attribute__((__noreturn__)); > > void > __throw_bad_typeid(void) __attribute__((__noreturn__)); > > > void > __throw_logic_error(const char*) __attribute__((__noreturn__)); > > void > __throw_domain_error(const char*) __attribute__((__noreturn__)); > > void > __throw_invalid_argument(const char*) __attribute__((__noreturn__)); > > void > __throw_length_error(const char*) __attribute__((__noreturn__)); > > void > __throw_out_of_range(const char*) __attribute__((__noreturn__)); > > void > __throw_runtime_error(const char*) __attribute__((__noreturn__)); > > void > __throw_range_error(const char*) __attribute__((__noreturn__)); > > void > __throw_overflow_error(const char*) __attribute__((__noreturn__)); > > void > __throw_underflow_error(const char*) __attribute__((__noreturn__)); > > > void > __throw_ios_failure(const char*) __attribute__((__noreturn__)); > > void > __throw_system_error(int) __attribute__((__noreturn__)); > > void > __throw_future_error(int) __attribute__((__noreturn__)); > > > void > __throw_bad_function_call() __attribute__((__noreturn__)); > > >} ># 61 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 1 3 ># 35 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 > ># 36 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 ># 68 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _Iterator, typename _Container> > class __normal_iterator; > > >} > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > struct __true_type { }; > struct __false_type { }; > > template<bool> > struct __truth_type > { typedef __false_type __type; }; > > template<> > struct __truth_type<true> > { typedef __true_type __type; }; > > > > template<class _Sp, class _Tp> > struct __traitor > { > enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; > typedef typename __truth_type<__value>::__type __type; > }; > > > template<typename, typename> > struct __are_same > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<typename _Tp> > struct __are_same<_Tp, _Tp> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<typename _Tp> > struct __is_void > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<> > struct __is_void<void> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_integer > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > > > > template<> > struct __is_integer<bool> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<signed char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<> > struct __is_integer<wchar_t> > { > enum { __value = 1 }; > typedef __true_type __type; > }; ># 198 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 > template<> > struct __is_integer<short> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned short> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<int> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned int> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<long long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_integer<unsigned long long> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_floating > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > > template<> > struct __is_floating<float> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_floating<double> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_floating<long double> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_pointer > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<typename _Tp> > struct __is_pointer<_Tp*> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_normal_iterator > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<typename _Iterator, typename _Container> > struct __is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator, > _Container> > > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_arithmetic > : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > > { }; > > > > > template<typename _Tp> > struct __is_fundamental > : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> > > { }; > > > > > template<typename _Tp> > struct __is_scalar > : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > > { }; > > > > > template<typename _Tp> > struct __is_char > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<> > struct __is_char<char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<> > struct __is_char<wchar_t> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > template<typename _Tp> > struct __is_byte > { > enum { __value = 0 }; > typedef __false_type __type; > }; > > template<> > struct __is_byte<char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_byte<signed char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > template<> > struct __is_byte<unsigned char> > { > enum { __value = 1 }; > typedef __true_type __type; > }; > > > > > template<typename _Tp> > struct __is_move_iterator > { > enum { __value = 0 }; > typedef __false_type __type; > }; ># 421 "/usr/include/c++/4.8.2/bits/cpp_type_traits.h" 3 > >} ># 62 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/ext/type_traits.h" 1 3 ># 32 "/usr/include/c++/4.8.2/ext/type_traits.h" 3 > ># 33 "/usr/include/c++/4.8.2/ext/type_traits.h" 3 > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > > template<bool, typename> > struct __enable_if > { }; > > template<typename _Tp> > struct __enable_if<true, _Tp> > { typedef _Tp __type; }; > > > > template<bool _Cond, typename _Iftrue, typename _Iffalse> > struct __conditional_type > { typedef _Iftrue __type; }; > > template<typename _Iftrue, typename _Iffalse> > struct __conditional_type<false, _Iftrue, _Iffalse> > { typedef _Iffalse __type; }; > > > > template<typename _Tp> > struct __add_unsigned > { > private: > typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type; > > public: > typedef typename __if_type::__type __type; > }; > > template<> > struct __add_unsigned<char> > { typedef unsigned char __type; }; > > template<> > struct __add_unsigned<signed char> > { typedef unsigned char __type; }; > > template<> > struct __add_unsigned<short> > { typedef unsigned short __type; }; > > template<> > struct __add_unsigned<int> > { typedef unsigned int __type; }; > > template<> > struct __add_unsigned<long> > { typedef unsigned long __type; }; > > template<> > struct __add_unsigned<long long> > { typedef unsigned long long __type; }; > > > template<> > struct __add_unsigned<bool>; > > template<> > struct __add_unsigned<wchar_t>; > > > > template<typename _Tp> > struct __remove_unsigned > { > private: > typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type; > > public: > typedef typename __if_type::__type __type; > }; > > template<> > struct __remove_unsigned<char> > { typedef signed char __type; }; > > template<> > struct __remove_unsigned<unsigned char> > { typedef signed char __type; }; > > template<> > struct __remove_unsigned<unsigned short> > { typedef short __type; }; > > template<> > struct __remove_unsigned<unsigned int> > { typedef int __type; }; > > template<> > struct __remove_unsigned<unsigned long> > { typedef long __type; }; > > template<> > struct __remove_unsigned<unsigned long long> > { typedef long long __type; }; > > > template<> > struct __remove_unsigned<bool>; > > template<> > struct __remove_unsigned<wchar_t>; > > > > template<typename _Type> > inline bool > __is_null_pointer(_Type* __ptr) > { return __ptr == 0; } > > template<typename _Type> > inline bool > __is_null_pointer(_Type) > { return false; } > > > > template<typename _Tp, bool = std::__is_integer<_Tp>::__value> > struct __promote > { typedef double __type; }; > > > > > template<typename _Tp> > struct __promote<_Tp, false> > { }; > > template<> > struct __promote<long double> > { typedef long double __type; }; > > template<> > struct __promote<double> > { typedef double __type; }; > > template<> > struct __promote<float> > { typedef float __type; }; > > template<typename _Tp, typename _Up, > typename _Tp2 = typename __promote<_Tp>::__type, > typename _Up2 = typename __promote<_Up>::__type> > struct __promote_2 > { > typedef __typeof__(_Tp2() + _Up2()) __type; > }; > > template<typename _Tp, typename _Up, typename _Vp, > typename _Tp2 = typename __promote<_Tp>::__type, > typename _Up2 = typename __promote<_Up>::__type, > typename _Vp2 = typename __promote<_Vp>::__type> > struct __promote_3 > { > typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type; > }; > > template<typename _Tp, typename _Up, typename _Vp, typename _Wp, > typename _Tp2 = typename __promote<_Tp>::__type, > typename _Up2 = typename __promote<_Up>::__type, > typename _Vp2 = typename __promote<_Vp>::__type, > typename _Wp2 = typename __promote<_Wp>::__type> > struct __promote_4 > { > typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type; > }; > > >} ># 63 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 1 3 ># 32 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > ># 33 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > ># 54 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > template<typename _Value> > struct __numeric_traits_integer > { > > static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0); > static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0); > > > > static const bool __is_signed = ((_Value)(-1) < 0); > static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0)); > }; > > template<typename _Value> > const _Value __numeric_traits_integer<_Value>::__min; > > template<typename _Value> > const _Value __numeric_traits_integer<_Value>::__max; > > template<typename _Value> > const bool __numeric_traits_integer<_Value>::__is_signed; > > template<typename _Value> > const int __numeric_traits_integer<_Value>::__digits; ># 99 "/usr/include/c++/4.8.2/ext/numeric_traits.h" 3 > template<typename _Value> > struct __numeric_traits_floating > { > > static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136); > > > static const bool __is_signed = true; > static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18); > static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932); > }; > > template<typename _Value> > const int __numeric_traits_floating<_Value>::__max_digits10; > > template<typename _Value> > const bool __numeric_traits_floating<_Value>::__is_signed; > > template<typename _Value> > const int __numeric_traits_floating<_Value>::__digits10; > > template<typename _Value> > const int __numeric_traits_floating<_Value>::__max_exponent10; > > template<typename _Value> > struct __numeric_traits > : public __conditional_type<std::__is_integer<_Value>::__value, > __numeric_traits_integer<_Value>, > __numeric_traits_floating<_Value> >::__type > { }; > > >} ># 64 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_pair.h" 1 3 ># 59 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/move.h" 1 3 ># 34 "/usr/include/c++/4.8.2/bits/move.h" 3 ># 1 "/usr/include/c++/4.8.2/bits/concept_check.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/concept_check.h" 3 > ># 34 "/usr/include/c++/4.8.2/bits/concept_check.h" 3 ># 35 "/usr/include/c++/4.8.2/bits/move.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > > template<typename _Tp> > inline _Tp* > __addressof(_Tp& __r) > { > return reinterpret_cast<_Tp*> > (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r))); > } > > >} ># 149 "/usr/include/c++/4.8.2/bits/move.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 164 "/usr/include/c++/4.8.2/bits/move.h" 3 > template<typename _Tp> > inline void > swap(_Tp& __a, _Tp& __b) > > > > > { > > > > _Tp __tmp = (__a); > __a = (__b); > __b = (__tmp); > } > > > > > template<typename _Tp, size_t _Nm> > inline void > swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) > > > > { > for (size_t __n = 0; __n < _Nm; ++__n) > swap(__a[__n], __b[__n]); > } > > > >} ># 60 "/usr/include/c++/4.8.2/bits/stl_pair.h" 2 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 95 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 > template<class _T1, class _T2> > struct pair > { > typedef _T1 first_type; > typedef _T2 second_type; > > _T1 first; > _T2 second; > > > > > > pair() > : first(), second() { } > > > pair(const _T1& __a, const _T2& __b) > : first(__a), second(__b) { } > > > > template<class _U1, class _U2> > pair(const pair<_U1, _U2>& __p) > : first(__p.first), second(__p.second) { } ># 209 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 > }; > > > template<class _T1, class _T2> > inline bool > operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return __x.first == __y.first && __x.second == __y.second; } > > > template<class _T1, class _T2> > inline bool > operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return __x.first < __y.first > || (!(__y.first < __x.first) && __x.second < __y.second); } > > > template<class _T1, class _T2> > inline bool > operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return !(__x == __y); } > > > template<class _T1, class _T2> > inline bool > operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return __y < __x; } > > > template<class _T1, class _T2> > inline bool > operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return !(__y < __x); } > > > template<class _T1, class _T2> > inline bool > operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) > { return !(__x < __y); } ># 284 "/usr/include/c++/4.8.2/bits/stl_pair.h" 3 > template<class _T1, class _T2> > inline pair<_T1, _T2> > make_pair(_T1 __x, _T2 __y) > { return pair<_T1, _T2>(__x, __y); } > > > > > >} ># 65 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 1 3 ># 62 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > ># 63 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > > > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 89 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > struct input_iterator_tag { }; > > > struct output_iterator_tag { }; > > > struct forward_iterator_tag : public input_iterator_tag { }; > > > > struct bidirectional_iterator_tag : public forward_iterator_tag { }; > > > > struct random_access_iterator_tag : public bidirectional_iterator_tag { }; ># 116 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, > typename _Pointer = _Tp*, typename _Reference = _Tp&> > struct iterator > { > > typedef _Category iterator_category; > > typedef _Tp value_type; > > typedef _Distance difference_type; > > typedef _Pointer pointer; > > typedef _Reference reference; > }; ># 162 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > template<typename _Iterator> > struct iterator_traits > { > typedef typename _Iterator::iterator_category iterator_category; > typedef typename _Iterator::value_type value_type; > typedef typename _Iterator::difference_type difference_type; > typedef typename _Iterator::pointer pointer; > typedef typename _Iterator::reference reference; > }; > > > > template<typename _Tp> > struct iterator_traits<_Tp*> > { > typedef random_access_iterator_tag iterator_category; > typedef _Tp value_type; > typedef ptrdiff_t difference_type; > typedef _Tp* pointer; > typedef _Tp& reference; > }; > > > template<typename _Tp> > struct iterator_traits<const _Tp*> > { > typedef random_access_iterator_tag iterator_category; > typedef _Tp value_type; > typedef ptrdiff_t difference_type; > typedef const _Tp* pointer; > typedef const _Tp& reference; > }; > > > > > > template<typename _Iter> > inline typename iterator_traits<_Iter>::iterator_category > __iterator_category(const _Iter&) > { return typename iterator_traits<_Iter>::iterator_category(); } > > > > > > template<typename _Iterator, bool _HasBase> > struct _Iter_base > { > typedef _Iterator iterator_type; > static iterator_type _S_base(_Iterator __it) > { return __it; } > }; > > template<typename _Iterator> > struct _Iter_base<_Iterator, true> > { > typedef typename _Iterator::iterator_type iterator_type; > static iterator_type _S_base(_Iterator __it) > { return __it.base(); } > }; ># 232 "/usr/include/c++/4.8.2/bits/stl_iterator_base_types.h" 3 > >} ># 66 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 1 3 ># 62 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > ># 63 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > > ># 1 "/usr/include/c++/4.8.2/debug/debug.h" 1 3 ># 46 "/usr/include/c++/4.8.2/debug/debug.h" 3 >namespace std >{ > namespace __debug { } >} > > > > >namespace __gnu_debug >{ > using namespace std::__debug; >} ># 66 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _InputIterator> > inline typename iterator_traits<_InputIterator>::difference_type > __distance(_InputIterator __first, _InputIterator __last, > input_iterator_tag) > { > > > > typename iterator_traits<_InputIterator>::difference_type __n = 0; > while (__first != __last) > { > ++__first; > ++__n; > } > return __n; > } > > template<typename _RandomAccessIterator> > inline typename iterator_traits<_RandomAccessIterator>::difference_type > __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, > random_access_iterator_tag) > { > > > > return __last - __first; > } ># 112 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > template<typename _InputIterator> > inline typename iterator_traits<_InputIterator>::difference_type > distance(_InputIterator __first, _InputIterator __last) > { > > return std::__distance(__first, __last, > std::__iterator_category(__first)); > } > > template<typename _InputIterator, typename _Distance> > inline void > __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) > { > > > ; > while (__n--) > ++__i; > } > > template<typename _BidirectionalIterator, typename _Distance> > inline void > __advance(_BidirectionalIterator& __i, _Distance __n, > bidirectional_iterator_tag) > { > > > > if (__n > 0) > while (__n--) > ++__i; > else > while (__n++) > --__i; > } > > template<typename _RandomAccessIterator, typename _Distance> > inline void > __advance(_RandomAccessIterator& __i, _Distance __n, > random_access_iterator_tag) > { > > > > __i += __n; > } ># 171 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > template<typename _InputIterator, typename _Distance> > inline void > advance(_InputIterator& __i, _Distance __n) > { > > typename iterator_traits<_InputIterator>::difference_type __d = __n; > std::__advance(__i, __d, std::__iterator_category(__i)); > } ># 202 "/usr/include/c++/4.8.2/bits/stl_iterator_base_funcs.h" 3 > >} ># 67 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 1 3 ># 67 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 95 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Iterator> > class reverse_iterator > : public iterator<typename iterator_traits<_Iterator>::iterator_category, > typename iterator_traits<_Iterator>::value_type, > typename iterator_traits<_Iterator>::difference_type, > typename iterator_traits<_Iterator>::pointer, > typename iterator_traits<_Iterator>::reference> > { > protected: > _Iterator current; > > typedef iterator_traits<_Iterator> __traits_type; > > public: > typedef _Iterator iterator_type; > typedef typename __traits_type::difference_type difference_type; > typedef typename __traits_type::pointer pointer; > typedef typename __traits_type::reference reference; > > > > > > > > reverse_iterator() : current() { } > > > > > explicit > reverse_iterator(iterator_type __x) : current(__x) { } > > > > > reverse_iterator(const reverse_iterator& __x) > : current(__x.current) { } > > > > > > template<typename _Iter> > reverse_iterator(const reverse_iterator<_Iter>& __x) > : current(__x.base()) { } > > > > > iterator_type > base() const > { return current; } ># 159 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > reference > operator*() const > { > _Iterator __tmp = current; > return *--__tmp; > } > > > > > > > pointer > operator->() const > { return &(operator*()); } > > > > > > > reverse_iterator& > operator++() > { > --current; > return *this; > } > > > > > > > reverse_iterator > operator++(int) > { > reverse_iterator __tmp = *this; > --current; > return __tmp; > } > > > > > > > reverse_iterator& > operator--() > { > ++current; > return *this; > } > > > > > > > reverse_iterator > operator--(int) > { > reverse_iterator __tmp = *this; > ++current; > return __tmp; > } > > > > > > > reverse_iterator > operator+(difference_type __n) const > { return reverse_iterator(current - __n); } > > > > > > > > reverse_iterator& > operator+=(difference_type __n) > { > current -= __n; > return *this; > } > > > > > > > reverse_iterator > operator-(difference_type __n) const > { return reverse_iterator(current + __n); } > > > > > > > > reverse_iterator& > operator-=(difference_type __n) > { > current += __n; > return *this; > } > > > > > > > reference > operator[](difference_type __n) const > { return *(*this + __n); } > }; ># 289 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Iterator> > inline bool > operator==(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __x.base() == __y.base(); } > > template<typename _Iterator> > inline bool > operator<(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __y.base() < __x.base(); } > > template<typename _Iterator> > inline bool > operator!=(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return !(__x == __y); } > > template<typename _Iterator> > inline bool > operator>(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __y < __x; } > > template<typename _Iterator> > inline bool > operator<=(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return !(__y < __x); } > > template<typename _Iterator> > inline bool > operator>=(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return !(__x < __y); } > > template<typename _Iterator> > inline typename reverse_iterator<_Iterator>::difference_type > operator-(const reverse_iterator<_Iterator>& __x, > const reverse_iterator<_Iterator>& __y) > { return __y.base() - __x.base(); } > > template<typename _Iterator> > inline reverse_iterator<_Iterator> > operator+(typename reverse_iterator<_Iterator>::difference_type __n, > const reverse_iterator<_Iterator>& __x) > { return reverse_iterator<_Iterator>(__x.base() - __n); } > > > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator==(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return __x.base() == __y.base(); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator<(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return __y.base() < __x.base(); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator!=(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return !(__x == __y); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator>(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return __y < __x; } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator<=(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return !(__y < __x); } > > template<typename _IteratorL, typename _IteratorR> > inline bool > operator>=(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > { return !(__x < __y); } > > template<typename _IteratorL, typename _IteratorR> > > > > > > > > inline typename reverse_iterator<_IteratorL>::difference_type > operator-(const reverse_iterator<_IteratorL>& __x, > const reverse_iterator<_IteratorR>& __y) > > { return __y.base() - __x.base(); } ># 401 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > class back_insert_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > protected: > _Container* container; > > public: > > typedef _Container container_type; > > > explicit > back_insert_iterator(_Container& __x) : container(&__x) { } ># 428 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > back_insert_iterator& > operator=(typename _Container::const_reference __value) > { > container->push_back(__value); > return *this; > } ># 451 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > back_insert_iterator& > operator*() > { return *this; } > > > back_insert_iterator& > operator++() > { return *this; } > > > back_insert_iterator > operator++(int) > { return *this; } > }; ># 477 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > inline back_insert_iterator<_Container> > back_inserter(_Container& __x) > { return back_insert_iterator<_Container>(__x); } ># 492 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > class front_insert_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > protected: > _Container* container; > > public: > > typedef _Container container_type; > > > explicit front_insert_iterator(_Container& __x) : container(&__x) { } ># 518 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > front_insert_iterator& > operator=(typename _Container::const_reference __value) > { > container->push_front(__value); > return *this; > } ># 541 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > front_insert_iterator& > operator*() > { return *this; } > > > front_insert_iterator& > operator++() > { return *this; } > > > front_insert_iterator > operator++(int) > { return *this; } > }; ># 567 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > inline front_insert_iterator<_Container> > front_inserter(_Container& __x) > { return front_insert_iterator<_Container>(__x); } ># 586 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container> > class insert_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > protected: > _Container* container; > typename _Container::iterator iter; > > public: > > typedef _Container container_type; > > > > > > insert_iterator(_Container& __x, typename _Container::iterator __i) > : container(&__x), iter(__i) {} ># 629 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > insert_iterator& > operator=(typename _Container::const_reference __value) > { > iter = container->insert(iter, __value); > ++iter; > return *this; > } ># 655 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > insert_iterator& > operator*() > { return *this; } > > > insert_iterator& > operator++() > { return *this; } > > > insert_iterator& > operator++(int) > { return *this; } > }; ># 681 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _Container, typename _Iterator> > inline insert_iterator<_Container> > inserter(_Container& __x, _Iterator __i) > { > return insert_iterator<_Container>(__x, > typename _Container::iterator(__i)); > } > > > > >} > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > ># 705 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > using std::iterator_traits; > using std::iterator; > template<typename _Iterator, typename _Container> > class __normal_iterator > { > protected: > _Iterator _M_current; > > typedef iterator_traits<_Iterator> __traits_type; > > public: > typedef _Iterator iterator_type; > typedef typename __traits_type::iterator_category iterator_category; > typedef typename __traits_type::value_type value_type; > typedef typename __traits_type::difference_type difference_type; > typedef typename __traits_type::reference reference; > typedef typename __traits_type::pointer pointer; > > __normal_iterator() : _M_current(_Iterator()) { } > > explicit > __normal_iterator(const _Iterator& __i) : _M_current(__i) { } > > > template<typename _Iter> > __normal_iterator(const __normal_iterator<_Iter, > typename __enable_if< > (std::__are_same<_Iter, typename _Container::pointer>::__value), > _Container>::__type>& __i) > : _M_current(__i.base()) { } > > > reference > operator*() const > { return *_M_current; } > > pointer > operator->() const > { return _M_current; } > > __normal_iterator& > operator++() > { > ++_M_current; > return *this; > } > > __normal_iterator > operator++(int) > { return __normal_iterator(_M_current++); } > > > __normal_iterator& > operator--() > { > --_M_current; > return *this; > } > > __normal_iterator > operator--(int) > { return __normal_iterator(_M_current--); } > > > reference > operator[](const difference_type& __n) const > { return _M_current[__n]; } > > __normal_iterator& > operator+=(const difference_type& __n) > { _M_current += __n; return *this; } > > __normal_iterator > operator+(const difference_type& __n) const > { return __normal_iterator(_M_current + __n); } > > __normal_iterator& > operator-=(const difference_type& __n) > { _M_current -= __n; return *this; } > > __normal_iterator > operator-(const difference_type& __n) const > { return __normal_iterator(_M_current - __n); } > > const _Iterator& > base() const > { return _M_current; } > }; ># 803 "/usr/include/c++/4.8.2/bits/stl_iterator.h" 3 > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() == __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator==(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() == __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() != __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() != __rhs.base(); } > > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() < __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator<(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() < __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() > __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator>(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() > __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() <= __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() <= __rhs.base(); } > > template<typename _IteratorL, typename _IteratorR, typename _Container> > inline bool > operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > { return __lhs.base() >= __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline bool > operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() >= __rhs.base(); } > > > > > > template<typename _IteratorL, typename _IteratorR, typename _Container> > > > > > > > > inline typename __normal_iterator<_IteratorL, _Container>::difference_type > operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, > const __normal_iterator<_IteratorR, _Container>& __rhs) > > { return __lhs.base() - __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline typename __normal_iterator<_Iterator, _Container>::difference_type > operator-(const __normal_iterator<_Iterator, _Container>& __lhs, > const __normal_iterator<_Iterator, _Container>& __rhs) > { return __lhs.base() - __rhs.base(); } > > template<typename _Iterator, typename _Container> > inline __normal_iterator<_Iterator, _Container> > operator+(typename __normal_iterator<_Iterator, _Container>::difference_type > __n, const __normal_iterator<_Iterator, _Container>& __i) > { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } > > >} ># 68 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 2 3 > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > template<bool _BoolType> > struct __iter_swap > { > template<typename _ForwardIterator1, typename _ForwardIterator2> > static void > iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) > { > typedef typename iterator_traits<_ForwardIterator1>::value_type > _ValueType1; > _ValueType1 __tmp = (*__a); > *__a = (*__b); > *__b = (__tmp); > } > }; > > template<> > struct __iter_swap<true> > { > template<typename _ForwardIterator1, typename _ForwardIterator2> > static void > iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) > { > swap(*__a, *__b); > } > }; ># 117 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator1, typename _ForwardIterator2> > inline void > iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) > { > > > > > > > > typedef typename iterator_traits<_ForwardIterator1>::value_type > _ValueType1; > typedef typename iterator_traits<_ForwardIterator2>::value_type > _ValueType2; > > > > > > > typedef typename iterator_traits<_ForwardIterator1>::reference > _ReferenceType1; > typedef typename iterator_traits<_ForwardIterator2>::reference > _ReferenceType2; > std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value > && __are_same<_ValueType1&, _ReferenceType1>::__value > && __are_same<_ValueType2&, _ReferenceType2>::__value>:: > iter_swap(__a, __b); > > > > } ># 163 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator1, typename _ForwardIterator2> > _ForwardIterator2 > swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, > _ForwardIterator2 __first2) > { > > > > > > ; > > for (; __first1 != __last1; ++__first1, ++__first2) > std::iter_swap(__first1, __first2); > return __first2; > } ># 191 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp> > inline const _Tp& > min(const _Tp& __a, const _Tp& __b) > { > > > > if (__b < __a) > return __b; > return __a; > } ># 214 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp> > inline const _Tp& > max(const _Tp& __a, const _Tp& __b) > { > > > > if (__a < __b) > return __b; > return __a; > } ># 237 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp, typename _Compare> > inline const _Tp& > min(const _Tp& __a, const _Tp& __b, _Compare __comp) > { > > if (__comp(__b, __a)) > return __b; > return __a; > } ># 258 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _Tp, typename _Compare> > inline const _Tp& > max(const _Tp& __a, const _Tp& __b, _Compare __comp) > { > > if (__comp(__a, __b)) > return __b; > return __a; > } > > > > template<typename _Iterator> > struct _Niter_base > : _Iter_base<_Iterator, __is_normal_iterator<_Iterator>::__value> > { }; > > template<typename _Iterator> > inline typename _Niter_base<_Iterator>::iterator_type > __niter_base(_Iterator __it) > { return std::_Niter_base<_Iterator>::_S_base(__it); } > > > template<typename _Iterator> > struct _Miter_base > : _Iter_base<_Iterator, __is_move_iterator<_Iterator>::__value> > { }; > > template<typename _Iterator> > inline typename _Miter_base<_Iterator>::iterator_type > __miter_base(_Iterator __it) > { return std::_Miter_base<_Iterator>::_S_base(__it); } > > > > > > > > template<bool, bool, typename> > struct __copy_move > { > template<typename _II, typename _OI> > static _OI > __copy_m(_II __first, _II __last, _OI __result) > { > for (; __first != __last; ++__result, ++__first) > *__result = *__first; > return __result; > } > }; ># 325 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<> > struct __copy_move<false, false, random_access_iterator_tag> > { > template<typename _II, typename _OI> > static _OI > __copy_m(_II __first, _II __last, _OI __result) > { > typedef typename iterator_traits<_II>::difference_type _Distance; > for(_Distance __n = __last - __first; __n > 0; --__n) > { > *__result = *__first; > ++__first; > ++__result; > } > return __result; > } > }; ># 363 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<bool _IsMove> > struct __copy_move<_IsMove, true, random_access_iterator_tag> > { > template<typename _Tp> > static _Tp* > __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) > { > const ptrdiff_t _Num = __last - __first; > if (_Num) > __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); > return __result + _Num; > } > }; > > template<bool _IsMove, typename _II, typename _OI> > inline _OI > __copy_move_a(_II __first, _II __last, _OI __result) > { > typedef typename iterator_traits<_II>::value_type _ValueTypeI; > typedef typename iterator_traits<_OI>::value_type _ValueTypeO; > typedef typename iterator_traits<_II>::iterator_category _Category; > const bool __simple = (__is_trivial(_ValueTypeI) > && __is_pointer<_II>::__value > && __is_pointer<_OI>::__value > && __are_same<_ValueTypeI, _ValueTypeO>::__value); > > return std::__copy_move<_IsMove, __simple, > _Category>::__copy_m(__first, __last, __result); > } > > > > template<typename _CharT> > struct char_traits; > > template<typename _CharT, typename _Traits> > class istreambuf_iterator; > > template<typename _CharT, typename _Traits> > class ostreambuf_iterator; > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type > __copy_move_a2(_CharT*, _CharT*, > ostreambuf_iterator<_CharT, char_traits<_CharT> >); > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type > __copy_move_a2(const _CharT*, const _CharT*, > ostreambuf_iterator<_CharT, char_traits<_CharT> >); > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > _CharT*>::__type > __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, > istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); > > template<bool _IsMove, typename _II, typename _OI> > inline _OI > __copy_move_a2(_II __first, _II __last, _OI __result) > { > return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first), > std::__niter_base(__last), > std::__niter_base(__result))); > } ># 448 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II, typename _OI> > inline _OI > copy(_II __first, _II __last, _OI __result) > { > > > > > ; > > return (std::__copy_move_a2<__is_move_iterator<_II>::__value> > (std::__miter_base(__first), std::__miter_base(__last), > __result)); > } ># 500 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<bool, bool, typename> > struct __copy_move_backward > { > template<typename _BI1, typename _BI2> > static _BI2 > __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) > { > while (__first != __last) > *--__result = *--__last; > return __result; > } > }; ># 528 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<> > struct __copy_move_backward<false, false, random_access_iterator_tag> > { > template<typename _BI1, typename _BI2> > static _BI2 > __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) > { > typename iterator_traits<_BI1>::difference_type __n; > for (__n = __last - __first; __n > 0; --__n) > *--__result = *--__last; > return __result; > } > }; ># 558 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<bool _IsMove> > struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> > { > template<typename _Tp> > static _Tp* > __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result) > { > const ptrdiff_t _Num = __last - __first; > if (_Num) > __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); > return __result - _Num; > } > }; > > template<bool _IsMove, typename _BI1, typename _BI2> > inline _BI2 > __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result) > { > typedef typename iterator_traits<_BI1>::value_type _ValueType1; > typedef typename iterator_traits<_BI2>::value_type _ValueType2; > typedef typename iterator_traits<_BI1>::iterator_category _Category; > const bool __simple = (__is_trivial(_ValueType1) > && __is_pointer<_BI1>::__value > && __is_pointer<_BI2>::__value > && __are_same<_ValueType1, _ValueType2>::__value); > > return std::__copy_move_backward<_IsMove, __simple, > _Category>::__copy_move_b(__first, > __last, > __result); > } > > template<bool _IsMove, typename _BI1, typename _BI2> > inline _BI2 > __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) > { > return _BI2(std::__copy_move_backward_a<_IsMove> > (std::__niter_base(__first), std::__niter_base(__last), > std::__niter_base(__result))); > } ># 617 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _BI1, typename _BI2> > inline _BI2 > copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) > { > > > > > > > ; > > return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value> > (std::__miter_base(__first), std::__miter_base(__last), > __result)); > } ># 675 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator, typename _Tp> > inline typename > __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type > __fill_a(_ForwardIterator __first, _ForwardIterator __last, > const _Tp& __value) > { > for (; __first != __last; ++__first) > *__first = __value; > } > > template<typename _ForwardIterator, typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type > __fill_a(_ForwardIterator __first, _ForwardIterator __last, > const _Tp& __value) > { > const _Tp __tmp = __value; > for (; __first != __last; ++__first) > *__first = __tmp; > } > > > template<typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type > __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c) > { > const _Tp __tmp = __c; > __builtin_memset(__first, static_cast<unsigned char>(__tmp), > __last - __first); > } ># 719 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator, typename _Tp> > inline void > fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) > { > > > > ; > > std::__fill_a(std::__niter_base(__first), std::__niter_base(__last), > __value); > } > > template<typename _OutputIterator, typename _Size, typename _Tp> > inline typename > __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type > __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) > { > for (__decltype(__n + 0) __niter = __n; > __niter > 0; --__niter, ++__first) > *__first = __value; > return __first; > } > > template<typename _OutputIterator, typename _Size, typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type > __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) > { > const _Tp __tmp = __value; > for (__decltype(__n + 0) __niter = __n; > __niter > 0; --__niter, ++__first) > *__first = __tmp; > return __first; > } > > template<typename _Size, typename _Tp> > inline typename > __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type > __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c) > { > std::__fill_a(__first, __first + __n, __c); > return __first + __n; > } ># 779 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _OI, typename _Size, typename _Tp> > inline _OI > fill_n(_OI __first, _Size __n, const _Tp& __value) > { > > > > return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value)); > } > > template<bool _BoolType> > struct __equal > { > template<typename _II1, typename _II2> > static bool > equal(_II1 __first1, _II1 __last1, _II2 __first2) > { > for (; __first1 != __last1; ++__first1, ++__first2) > if (!(*__first1 == *__first2)) > return false; > return true; > } > }; > > template<> > struct __equal<true> > { > template<typename _Tp> > static bool > equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) > { > return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) > * (__last1 - __first1)); > } > }; > > template<typename _II1, typename _II2> > inline bool > __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) > { > typedef typename iterator_traits<_II1>::value_type _ValueType1; > typedef typename iterator_traits<_II2>::value_type _ValueType2; > const bool __simple = ((__is_integer<_ValueType1>::__value > || __is_pointer<_ValueType1>::__value) > && __is_pointer<_II1>::__value > && __is_pointer<_II2>::__value > && __are_same<_ValueType1, _ValueType2>::__value); > > return std::__equal<__simple>::equal(__first1, __last1, __first2); > } > > > template<typename, typename> > struct __lc_rai > { > template<typename _II1, typename _II2> > static _II1 > __newlast1(_II1, _II1 __last1, _II2, _II2) > { return __last1; } > > template<typename _II> > static bool > __cnd2(_II __first, _II __last) > { return __first != __last; } > }; > > template<> > struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag> > { > template<typename _RAI1, typename _RAI2> > static _RAI1 > __newlast1(_RAI1 __first1, _RAI1 __last1, > _RAI2 __first2, _RAI2 __last2) > { > const typename iterator_traits<_RAI1>::difference_type > __diff1 = __last1 - __first1; > const typename iterator_traits<_RAI2>::difference_type > __diff2 = __last2 - __first2; > return __diff2 < __diff1 ? __first1 + __diff2 : __last1; > } > > template<typename _RAI> > static bool > __cnd2(_RAI, _RAI) > { return true; } > }; > > template<bool _BoolType> > struct __lexicographical_compare > { > template<typename _II1, typename _II2> > static bool __lc(_II1, _II1, _II2, _II2); > }; > > template<bool _BoolType> > template<typename _II1, typename _II2> > bool > __lexicographical_compare<_BoolType>:: > __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) > { > typedef typename iterator_traits<_II1>::iterator_category _Category1; > typedef typename iterator_traits<_II2>::iterator_category _Category2; > typedef std::__lc_rai<_Category1, _Category2> __rai_type; > > __last1 = __rai_type::__newlast1(__first1, __last1, > __first2, __last2); > for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); > ++__first1, ++__first2) > { > if (*__first1 < *__first2) > return true; > if (*__first2 < *__first1) > return false; > } > return __first1 == __last1 && __first2 != __last2; > } > > template<> > struct __lexicographical_compare<true> > { > template<typename _Tp, typename _Up> > static bool > __lc(const _Tp* __first1, const _Tp* __last1, > const _Up* __first2, const _Up* __last2) > { > const size_t __len1 = __last1 - __first1; > const size_t __len2 = __last2 - __first2; > const int __result = __builtin_memcmp(__first1, __first2, > std::min(__len1, __len2)); > return __result != 0 ? __result < 0 : __len1 < __len2; > } > }; > > template<typename _II1, typename _II2> > inline bool > __lexicographical_compare_aux(_II1 __first1, _II1 __last1, > _II2 __first2, _II2 __last2) > { > typedef typename iterator_traits<_II1>::value_type _ValueType1; > typedef typename iterator_traits<_II2>::value_type _ValueType2; > const bool __simple = > (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value > && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed > && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed > && __is_pointer<_II1>::__value > && __is_pointer<_II2>::__value); > > return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, > __first2, __last2); > } ># 941 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _ForwardIterator, typename _Tp> > _ForwardIterator > lower_bound(_ForwardIterator __first, _ForwardIterator __last, > const _Tp& __val) > { > > > > > typedef typename iterator_traits<_ForwardIterator>::difference_type > _DistanceType; > > > > > ; > > _DistanceType __len = std::distance(__first, __last); > > while (__len > 0) > { > _DistanceType __half = __len >> 1; > _ForwardIterator __middle = __first; > std::advance(__middle, __half); > if (*__middle < __val) > { > __first = __middle; > ++__first; > __len = __len - __half - 1; > } > else > __len = __half; > } > return __first; > } > > > > inline int > __lg(int __n) > { return sizeof(int) * 8 - 1 - __builtin_clz(__n); } > > inline unsigned > __lg(unsigned __n) > { return sizeof(int) * 8 - 1 - __builtin_clz(__n); } > > inline long > __lg(long __n) > { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); } > > inline unsigned long > __lg(unsigned long __n) > { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); } > > inline long long > __lg(long long __n) > { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } > > inline unsigned long long > __lg(unsigned long long __n) > { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } > > > > ># 1019 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II1, typename _II2> > inline bool > equal(_II1 __first1, _II1 __last1, _II2 __first2) > { > > > > > > > ; > > return std::__equal_aux(std::__niter_base(__first1), > std::__niter_base(__last1), > std::__niter_base(__first2)); > } ># 1051 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> > inline bool > equal(_IIter1 __first1, _IIter1 __last1, > _IIter2 __first2, _BinaryPredicate __binary_pred) > { > > > > ; > > for (; __first1 != __last1; ++__first1, ++__first2) > if (!bool(__binary_pred(*__first1, *__first2))) > return false; > return true; > } ># 1082 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II1, typename _II2> > inline bool > lexicographical_compare(_II1 __first1, _II1 __last1, > _II2 __first2, _II2 __last2) > { > > > > > > > > > > ; > ; > > return std::__lexicographical_compare_aux(std::__niter_base(__first1), > std::__niter_base(__last1), > std::__niter_base(__first2), > std::__niter_base(__last2)); > } ># 1118 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _II1, typename _II2, typename _Compare> > bool > lexicographical_compare(_II1 __first1, _II1 __last1, > _II2 __first2, _II2 __last2, _Compare __comp) > { > typedef typename iterator_traits<_II1>::iterator_category _Category1; > typedef typename iterator_traits<_II2>::iterator_category _Category2; > typedef std::__lc_rai<_Category1, _Category2> __rai_type; > > > > > ; > ; > > __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); > for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); > ++__first1, ++__first2) > { > if (__comp(*__first1, *__first2)) > return true; > if (__comp(*__first2, *__first1)) > return false; > } > return __first1 == __last1 && __first2 != __last2; > } ># 1158 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _InputIterator1, typename _InputIterator2> > pair<_InputIterator1, _InputIterator2> > mismatch(_InputIterator1 __first1, _InputIterator1 __last1, > _InputIterator2 __first2) > { > > > > > > > ; > > while (__first1 != __last1 && *__first1 == *__first2) > { > ++__first1; > ++__first2; > } > return pair<_InputIterator1, _InputIterator2>(__first1, __first2); > } ># 1195 "/usr/include/c++/4.8.2/bits/stl_algobase.h" 3 > template<typename _InputIterator1, typename _InputIterator2, > typename _BinaryPredicate> > pair<_InputIterator1, _InputIterator2> > mismatch(_InputIterator1 __first1, _InputIterator1 __last1, > _InputIterator2 __first2, _BinaryPredicate __binary_pred) > { > > > > ; > > while (__first1 != __last1 && bool(__binary_pred(*__first1, *__first2))) > { > ++__first1; > ++__first2; > } > return pair<_InputIterator1, _InputIterator2>(__first1, __first2); > } > > >} ># 40 "/usr/include/c++/4.8.2/bits/char_traits.h" 2 3 > ># 1 "/usr/include/c++/4.8.2/cwchar" 1 3 ># 39 "/usr/include/c++/4.8.2/cwchar" 3 > ># 40 "/usr/include/c++/4.8.2/cwchar" 3 > > > > ># 1 "/usr/include/wchar.h" 1 3 4 ># 45 "/usr/include/c++/4.8.2/cwchar" 2 3 ># 42 "/usr/include/c++/4.8.2/bits/char_traits.h" 2 3 > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > ># 57 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > template<typename _CharT> > struct _Char_types > { > typedef unsigned long int_type; > typedef std::streampos pos_type; > typedef std::streamoff off_type; > typedef std::mbstate_t state_type; > }; ># 82 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > template<typename _CharT> > struct char_traits > { > typedef _CharT char_type; > typedef typename _Char_types<_CharT>::int_type int_type; > typedef typename _Char_types<_CharT>::pos_type pos_type; > typedef typename _Char_types<_CharT>::off_type off_type; > typedef typename _Char_types<_CharT>::state_type state_type; > > static void > assign(char_type& __c1, const char_type& __c2) > { __c1 = __c2; } > > static bool > eq(const char_type& __c1, const char_type& __c2) > { return __c1 == __c2; } > > static bool > lt(const char_type& __c1, const char_type& __c2) > { return __c1 < __c2; } > > static int > compare(const char_type* __s1, const char_type* __s2, std::size_t __n); > > static std::size_t > length(const char_type* __s); > > static const char_type* > find(const char_type* __s, std::size_t __n, const char_type& __a); > > static char_type* > move(char_type* __s1, const char_type* __s2, std::size_t __n); > > static char_type* > copy(char_type* __s1, const char_type* __s2, std::size_t __n); > > static char_type* > assign(char_type* __s, std::size_t __n, char_type __a); > > static char_type > to_char_type(const int_type& __c) > { return static_cast<char_type>(__c); } > > static int_type > to_int_type(const char_type& __c) > { return static_cast<int_type>(__c); } > > static bool > eq_int_type(const int_type& __c1, const int_type& __c2) > { return __c1 == __c2; } > > static int_type > eof() > { return static_cast<int_type>(-1); } > > static int_type > not_eof(const int_type& __c) > { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } > }; > > template<typename _CharT> > int > char_traits<_CharT>:: > compare(const char_type* __s1, const char_type* __s2, std::size_t __n) > { > for (std::size_t __i = 0; __i < __n; ++__i) > if (lt(__s1[__i], __s2[__i])) > return -1; > else if (lt(__s2[__i], __s1[__i])) > return 1; > return 0; > } > > template<typename _CharT> > std::size_t > char_traits<_CharT>:: > length(const char_type* __p) > { > std::size_t __i = 0; > while (!eq(__p[__i], char_type())) > ++__i; > return __i; > } > > template<typename _CharT> > const typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > find(const char_type* __s, std::size_t __n, const char_type& __a) > { > for (std::size_t __i = 0; __i < __n; ++__i) > if (eq(__s[__i], __a)) > return __s + __i; > return 0; > } > > template<typename _CharT> > typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > move(char_type* __s1, const char_type* __s2, std::size_t __n) > { > return static_cast<_CharT*>(__builtin_memmove(__s1, __s2, > __n * sizeof(char_type))); > } > > template<typename _CharT> > typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > copy(char_type* __s1, const char_type* __s2, std::size_t __n) > { > > std::copy(__s2, __s2 + __n, __s1); > return __s1; > } > > template<typename _CharT> > typename char_traits<_CharT>::char_type* > char_traits<_CharT>:: > assign(char_type* __s, std::size_t __n, char_type __a) > { > > std::fill_n(__s, __n, __a); > return __s; > } > > >} > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 226 "/usr/include/c++/4.8.2/bits/char_traits.h" 3 > template<class _CharT> > struct char_traits : public __gnu_cxx::char_traits<_CharT> > { }; > > > > template<> > struct char_traits<char> > { > typedef char char_type; > typedef int int_type; > typedef streampos pos_type; > typedef streamoff off_type; > typedef mbstate_t state_type; > > static void > assign(char_type& __c1, const char_type& __c2) > { __c1 = __c2; } > > static bool > eq(const char_type& __c1, const char_type& __c2) > { return __c1 == __c2; } > > static bool > lt(const char_type& __c1, const char_type& __c2) > { return __c1 < __c2; } > > static int > compare(const char_type* __s1, const char_type* __s2, size_t __n) > { return __builtin_memcmp(__s1, __s2, __n); } > > static size_t > length(const char_type* __s) > { return __builtin_strlen(__s); } > > static const char_type* > find(const char_type* __s, size_t __n, const char_type& __a) > { return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n)); } > > static char_type* > move(char_type* __s1, const char_type* __s2, size_t __n) > { return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n)); } > > static char_type* > copy(char_type* __s1, const char_type* __s2, size_t __n) > { return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n)); } > > static char_type* > assign(char_type* __s, size_t __n, char_type __a) > { return static_cast<char_type*>(__builtin_memset(__s, __a, __n)); } > > static char_type > to_char_type(const int_type& __c) > { return static_cast<char_type>(__c); } > > > > static int_type > to_int_type(const char_type& __c) > { return static_cast<int_type>(static_cast<unsigned char>(__c)); } > > static bool > eq_int_type(const int_type& __c1, const int_type& __c2) > { return __c1 == __c2; } > > static int_type > eof() > { return static_cast<int_type>(-1); } > > static int_type > not_eof(const int_type& __c) > { return (__c == eof()) ? 0 : __c; } > }; > > > > > template<> > struct char_traits<wchar_t> > { > typedef wchar_t char_type; > typedef wint_t int_type; > typedef streamoff off_type; > typedef wstreampos pos_type; > typedef mbstate_t state_type; > > static void > assign(char_type& __c1, const char_type& __c2) > { __c1 = __c2; } > > static bool > eq(const char_type& __c1, const char_type& __c2) > { return __c1 == __c2; } > > static bool > lt(const char_type& __c1, const char_type& __c2) > { return __c1 < __c2; } > > static int > compare(const char_type* __s1, const char_type* __s2, size_t __n) > { return wmemcmp(__s1, __s2, __n); } > > static size_t > length(const char_type* __s) > { return wcslen(__s); } > > static const char_type* > find(const char_type* __s, size_t __n, const char_type& __a) > { return wmemchr(__s, __a, __n); } > > static char_type* > move(char_type* __s1, const char_type* __s2, size_t __n) > { return wmemmove(__s1, __s2, __n); } > > static char_type* > copy(char_type* __s1, const char_type* __s2, size_t __n) > { return wmemcpy(__s1, __s2, __n); } > > static char_type* > assign(char_type* __s, size_t __n, char_type __a) > { return wmemset(__s, __a, __n); } > > static char_type > to_char_type(const int_type& __c) > { return char_type(__c); } > > static int_type > to_int_type(const char_type& __c) > { return int_type(__c); } > > static bool > eq_int_type(const int_type& __c1, const int_type& __c2) > { return __c1 == __c2; } > > static int_type > eof() > { return static_cast<int_type>((0xffffffffu)); } > > static int_type > not_eof(const int_type& __c) > { return eq_int_type(__c, eof()) ? 0 : __c; } > }; > > > >} ># 41 "/usr/include/c++/4.8.2/string" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/allocator.h" 1 3 ># 46 "/usr/include/c++/4.8.2/bits/allocator.h" 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++allocator.h" 1 3 ># 33 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++allocator.h" 3 ># 1 "/usr/include/c++/4.8.2/ext/new_allocator.h" 1 3 ># 33 "/usr/include/c++/4.8.2/ext/new_allocator.h" 3 ># 1 "/usr/include/c++/4.8.2/new" 1 3 ># 37 "/usr/include/c++/4.8.2/new" 3 > ># 38 "/usr/include/c++/4.8.2/new" 3 > > ># 1 "/usr/include/c++/4.8.2/exception" 1 3 ># 33 "/usr/include/c++/4.8.2/exception" 3 > ># 34 "/usr/include/c++/4.8.2/exception" 3 > >#pragma GCC visibility push(default) > > ># 1 "/usr/include/c++/4.8.2/bits/atomic_lockfree_defines.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/atomic_lockfree_defines.h" 3 > ># 34 "/usr/include/c++/4.8.2/bits/atomic_lockfree_defines.h" 3 ># 39 "/usr/include/c++/4.8.2/exception" 2 3 > >extern "C++" { > >namespace std >{ ># 60 "/usr/include/c++/4.8.2/exception" 3 > class exception > { > public: > exception() throw() { } > virtual ~exception() throw(); > > > > virtual const char* what() const throw(); > }; > > > > class bad_exception : public exception > { > public: > bad_exception() throw() { } > > > > virtual ~bad_exception() throw(); > > > virtual const char* what() const throw(); > }; > > > typedef void (*terminate_handler) (); > > > typedef void (*unexpected_handler) (); > > > terminate_handler set_terminate(terminate_handler) throw(); > > > > void terminate() throw() __attribute__ ((__noreturn__)); > > > unexpected_handler set_unexpected(unexpected_handler) throw(); > > > > void unexpected() __attribute__ ((__noreturn__)); ># 117 "/usr/include/c++/4.8.2/exception" 3 > bool uncaught_exception() throw() __attribute__ ((__pure__)); > > >} > >namespace __gnu_cxx >{ > ># 142 "/usr/include/c++/4.8.2/exception" 3 > void __verbose_terminate_handler(); > > >} > >} > >#pragma GCC visibility pop ># 41 "/usr/include/c++/4.8.2/new" 2 3 > >#pragma GCC visibility push(default) > >extern "C++" { > >namespace std >{ > > > > > > > class bad_alloc : public exception > { > public: > bad_alloc() throw() { } > > > > virtual ~bad_alloc() throw(); > > > virtual const char* what() const throw(); > }; > > struct nothrow_t { }; > > extern const nothrow_t nothrow; > > > > typedef void (*new_handler)(); > > > > new_handler set_new_handler(new_handler) throw(); >} ># 91 "/usr/include/c++/4.8.2/new" 3 >void* operator new(std::size_t) throw(std::bad_alloc) > __attribute__((__externally_visible__)); >void* operator new[](std::size_t) throw(std::bad_alloc) > __attribute__((__externally_visible__)); >void operator delete(void*) throw() > __attribute__((__externally_visible__)); >void operator delete[](void*) throw() > __attribute__((__externally_visible__)); >void* operator new(std::size_t, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); >void* operator new[](std::size_t, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); >void operator delete(void*, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); >void operator delete[](void*, const std::nothrow_t&) throw() > __attribute__((__externally_visible__)); > > >inline void* operator new(std::size_t, void* __p) throw() >{ return __p; } >inline void* operator new[](std::size_t, void* __p) throw() >{ return __p; } > > >inline void operator delete (void*, void*) throw() { } >inline void operator delete[](void*, void*) throw() { } > >} > >#pragma GCC visibility pop ># 34 "/usr/include/c++/4.8.2/ext/new_allocator.h" 2 3 > > > > > > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > using std::size_t; > using std::ptrdiff_t; ># 57 "/usr/include/c++/4.8.2/ext/new_allocator.h" 3 > template<typename _Tp> > class new_allocator > { > public: > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef _Tp* pointer; > typedef const _Tp* const_pointer; > typedef _Tp& reference; > typedef const _Tp& const_reference; > typedef _Tp value_type; > > template<typename _Tp1> > struct rebind > { typedef new_allocator<_Tp1> other; }; > > > > > > > > new_allocator() throw() { } > > new_allocator(const new_allocator&) throw() { } > > template<typename _Tp1> > new_allocator(const new_allocator<_Tp1>&) throw() { } > > ~new_allocator() throw() { } > > pointer > address(reference __x) const > { return std::__addressof(__x); } > > const_pointer > address(const_reference __x) const > { return std::__addressof(__x); } > > > > pointer > allocate(size_type __n, const void* = 0) > { > if (__n > this->max_size()) > std::__throw_bad_alloc(); > > return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); > } > > > void > deallocate(pointer __p, size_type) > { ::operator delete(__p); } > > size_type > max_size() const throw() > { return size_t(-1) / sizeof(_Tp); } ># 128 "/usr/include/c++/4.8.2/ext/new_allocator.h" 3 > void > construct(pointer __p, const _Tp& __val) > { ::new((void *)__p) _Tp(__val); } > > void > destroy(pointer __p) { __p->~_Tp(); } > > }; > > template<typename _Tp> > inline bool > operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&) > { return true; } > > template<typename _Tp> > inline bool > operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&) > { return false; } > > >} ># 34 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++allocator.h" 2 3 ># 47 "/usr/include/c++/4.8.2/bits/allocator.h" 2 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > > > template<> > class allocator<void> > { > public: > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef void* pointer; > typedef const void* const_pointer; > typedef void value_type; > > template<typename _Tp1> > struct rebind > { typedef allocator<_Tp1> other; }; > > > > > > > }; ># 91 "/usr/include/c++/4.8.2/bits/allocator.h" 3 > template<typename _Tp> > class allocator: public __gnu_cxx::new_allocator<_Tp> > { > public: > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef _Tp* pointer; > typedef const _Tp* const_pointer; > typedef _Tp& reference; > typedef const _Tp& const_reference; > typedef _Tp value_type; > > template<typename _Tp1> > struct rebind > { typedef allocator<_Tp1> other; }; > > > > > > > > allocator() throw() { } > > allocator(const allocator& __a) throw() > : __gnu_cxx::new_allocator<_Tp>(__a) { } > > template<typename _Tp1> > allocator(const allocator<_Tp1>&) throw() { } > > ~allocator() throw() { } > > > }; > > template<typename _T1, typename _T2> > inline bool > operator==(const allocator<_T1>&, const allocator<_T2>&) > { return true; } > > template<typename _Tp> > inline bool > operator==(const allocator<_Tp>&, const allocator<_Tp>&) > { return true; } > > template<typename _T1, typename _T2> > inline bool > operator!=(const allocator<_T1>&, const allocator<_T2>&) > { return false; } > > template<typename _Tp> > inline bool > operator!=(const allocator<_Tp>&, const allocator<_Tp>&) > { return false; } > > > > > > > extern template class allocator<char>; > extern template class allocator<wchar_t>; > > > > > > > template<typename _Alloc, bool = __is_empty(_Alloc)> > struct __alloc_swap > { static void _S_do_it(_Alloc&, _Alloc&) { } }; > > template<typename _Alloc> > struct __alloc_swap<_Alloc, false> > { > static void > _S_do_it(_Alloc& __one, _Alloc& __two) > { > > if (__one != __two) > swap(__one, __two); > } > }; > > > template<typename _Alloc, bool = __is_empty(_Alloc)> > struct __alloc_neq > { > static bool > _S_do_it(const _Alloc&, const _Alloc&) > { return false; } > }; > > template<typename _Alloc> > struct __alloc_neq<_Alloc, false> > { > static bool > _S_do_it(const _Alloc& __one, const _Alloc& __two) > { return __one != __two; } > }; ># 218 "/usr/include/c++/4.8.2/bits/allocator.h" 3 > >} ># 42 "/usr/include/c++/4.8.2/string" 2 3 > > ># 1 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 3 > ># 34 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/cxxabi_forced.h" 1 3 ># 34 "/usr/include/c++/4.8.2/bits/cxxabi_forced.h" 3 > ># 35 "/usr/include/c++/4.8.2/bits/cxxabi_forced.h" 3 > >#pragma GCC visibility push(default) > > >namespace __cxxabiv1 >{ > > > > > > > > class __forced_unwind > { > virtual ~__forced_unwind() throw(); > > > virtual void __pure_dummy() = 0; > }; >} > > >#pragma GCC visibility pop ># 37 "/usr/include/c++/4.8.2/bits/ostream_insert.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > inline void > __ostream_write(basic_ostream<_CharT, _Traits>& __out, > const _CharT* __s, streamsize __n) > { > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef typename __ostream_type::ios_base __ios_base; > > const streamsize __put = __out.rdbuf()->sputn(__s, __n); > if (__put != __n) > __out.setstate(__ios_base::badbit); > } > > template<typename _CharT, typename _Traits> > inline void > __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) > { > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef typename __ostream_type::ios_base __ios_base; > > const _CharT __c = __out.fill(); > for (; __n > 0; --__n) > { > const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); > if (_Traits::eq_int_type(__put, _Traits::eof())) > { > __out.setstate(__ios_base::badbit); > break; > } > } > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > __ostream_insert(basic_ostream<_CharT, _Traits>& __out, > const _CharT* __s, streamsize __n) > { > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef typename __ostream_type::ios_base __ios_base; > > typename __ostream_type::sentry __cerb(__out); > if (__cerb) > { > try > { > const streamsize __w = __out.width(); > if (__w > __n) > { > const bool __left = ((__out.flags() > & __ios_base::adjustfield) > == __ios_base::left); > if (!__left) > __ostream_fill(__out, __w - __n); > if (__out.good()) > __ostream_write(__out, __s, __n); > if (__left && __out.good()) > __ostream_fill(__out, __w - __n); > } > else > __ostream_write(__out, __s, __n); > __out.width(0); > } > catch(__cxxabiv1::__forced_unwind&) > { > __out._M_setstate(__ios_base::badbit); > throw; > } > catch(...) > { __out._M_setstate(__ios_base::badbit); } > } > return __out; > } > > > > > extern template ostream& __ostream_insert(ostream&, const char*, streamsize); > > > extern template wostream& __ostream_insert(wostream&, const wchar_t*, > streamsize); > > > > >} ># 45 "/usr/include/c++/4.8.2/string" 2 3 > > > ># 1 "/usr/include/c++/4.8.2/bits/stl_function.h" 1 3 ># 59 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 100 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Arg, typename _Result> > struct unary_function > { > > typedef _Arg argument_type; > > > typedef _Result result_type; > }; > > > > > template<typename _Arg1, typename _Arg2, typename _Result> > struct binary_function > { > > typedef _Arg1 first_argument_type; > > > typedef _Arg2 second_argument_type; > > > typedef _Result result_type; > }; ># 139 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Tp> > struct plus : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x + __y; } > }; > > > template<typename _Tp> > struct minus : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x - __y; } > }; > > > template<typename _Tp> > struct multiplies : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x * __y; } > }; > > > template<typename _Tp> > struct divides : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x / __y; } > }; > > > template<typename _Tp> > struct modulus : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x % __y; } > }; > > > template<typename _Tp> > struct negate : public unary_function<_Tp, _Tp> > { > _Tp > operator()(const _Tp& __x) const > { return -__x; } > }; ># 203 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Tp> > struct equal_to : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x == __y; } > }; > > > template<typename _Tp> > struct not_equal_to : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x != __y; } > }; > > > template<typename _Tp> > struct greater : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x > __y; } > }; > > > template<typename _Tp> > struct less : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x < __y; } > }; > > > template<typename _Tp> > struct greater_equal : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x >= __y; } > }; > > > template<typename _Tp> > struct less_equal : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x <= __y; } > }; ># 267 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Tp> > struct logical_and : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x && __y; } > }; > > > template<typename _Tp> > struct logical_or : public binary_function<_Tp, _Tp, bool> > { > bool > operator()(const _Tp& __x, const _Tp& __y) const > { return __x || __y; } > }; > > > template<typename _Tp> > struct logical_not : public unary_function<_Tp, bool> > { > bool > operator()(const _Tp& __x) const > { return !__x; } > }; > > > > > template<typename _Tp> > struct bit_and : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x & __y; } > }; > > template<typename _Tp> > struct bit_or : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x | __y; } > }; > > template<typename _Tp> > struct bit_xor : public binary_function<_Tp, _Tp, _Tp> > { > _Tp > operator()(const _Tp& __x, const _Tp& __y) const > { return __x ^ __y; } > }; ># 350 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Predicate> > class unary_negate > : public unary_function<typename _Predicate::argument_type, bool> > { > protected: > _Predicate _M_pred; > > public: > explicit > unary_negate(const _Predicate& __x) : _M_pred(__x) { } > > bool > operator()(const typename _Predicate::argument_type& __x) const > { return !_M_pred(__x); } > }; > > > template<typename _Predicate> > inline unary_negate<_Predicate> > not1(const _Predicate& __pred) > { return unary_negate<_Predicate>(__pred); } > > > template<typename _Predicate> > class binary_negate > : public binary_function<typename _Predicate::first_argument_type, > typename _Predicate::second_argument_type, bool> > { > protected: > _Predicate _M_pred; > > public: > explicit > binary_negate(const _Predicate& __x) : _M_pred(__x) { } > > bool > operator()(const typename _Predicate::first_argument_type& __x, > const typename _Predicate::second_argument_type& __y) const > { return !_M_pred(__x, __y); } > }; > > > template<typename _Predicate> > inline binary_negate<_Predicate> > not2(const _Predicate& __pred) > { return binary_negate<_Predicate>(__pred); } ># 421 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Arg, typename _Result> > class pointer_to_unary_function : public unary_function<_Arg, _Result> > { > protected: > _Result (*_M_ptr)(_Arg); > > public: > pointer_to_unary_function() { } > > explicit > pointer_to_unary_function(_Result (*__x)(_Arg)) > : _M_ptr(__x) { } > > _Result > operator()(_Arg __x) const > { return _M_ptr(__x); } > }; > > > template<typename _Arg, typename _Result> > inline pointer_to_unary_function<_Arg, _Result> > ptr_fun(_Result (*__x)(_Arg)) > { return pointer_to_unary_function<_Arg, _Result>(__x); } > > > template<typename _Arg1, typename _Arg2, typename _Result> > class pointer_to_binary_function > : public binary_function<_Arg1, _Arg2, _Result> > { > protected: > _Result (*_M_ptr)(_Arg1, _Arg2); > > public: > pointer_to_binary_function() { } > > explicit > pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) > : _M_ptr(__x) { } > > _Result > operator()(_Arg1 __x, _Arg2 __y) const > { return _M_ptr(__x, __y); } > }; > > > template<typename _Arg1, typename _Arg2, typename _Result> > inline pointer_to_binary_function<_Arg1, _Arg2, _Result> > ptr_fun(_Result (*__x)(_Arg1, _Arg2)) > { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } > > > template<typename _Tp> > struct _Identity > : public unary_function<_Tp,_Tp> > { > _Tp& > operator()(_Tp& __x) const > { return __x; } > > const _Tp& > operator()(const _Tp& __x) const > { return __x; } > }; > > template<typename _Pair> > struct _Select1st > : public unary_function<_Pair, typename _Pair::first_type> > { > typename _Pair::first_type& > operator()(_Pair& __x) const > { return __x.first; } > > const typename _Pair::first_type& > operator()(const _Pair& __x) const > { return __x.first; } ># 508 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > }; > > template<typename _Pair> > struct _Select2nd > : public unary_function<_Pair, typename _Pair::second_type> > { > typename _Pair::second_type& > operator()(_Pair& __x) const > { return __x.second; } > > const typename _Pair::second_type& > operator()(const _Pair& __x) const > { return __x.second; } > }; ># 541 "/usr/include/c++/4.8.2/bits/stl_function.h" 3 > template<typename _Ret, typename _Tp> > class mem_fun_t : public unary_function<_Tp*, _Ret> > { > public: > explicit > mem_fun_t(_Ret (_Tp::*__pf)()) > : _M_f(__pf) { } > > _Ret > operator()(_Tp* __p) const > { return (__p->*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)(); > }; > > > > template<typename _Ret, typename _Tp> > class const_mem_fun_t : public unary_function<const _Tp*, _Ret> > { > public: > explicit > const_mem_fun_t(_Ret (_Tp::*__pf)() const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp* __p) const > { return (__p->*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)() const; > }; > > > > template<typename _Ret, typename _Tp> > class mem_fun_ref_t : public unary_function<_Tp, _Ret> > { > public: > explicit > mem_fun_ref_t(_Ret (_Tp::*__pf)()) > : _M_f(__pf) { } > > _Ret > operator()(_Tp& __r) const > { return (__r.*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)(); > }; > > > > template<typename _Ret, typename _Tp> > class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> > { > public: > explicit > const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp& __r) const > { return (__r.*_M_f)(); } > > private: > _Ret (_Tp::*_M_f)() const; > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> > { > public: > explicit > mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) > : _M_f(__pf) { } > > _Ret > operator()(_Tp* __p, _Arg __x) const > { return (__p->*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg); > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret> > { > public: > explicit > const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp* __p, _Arg __x) const > { return (__p->*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg) const; > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> > { > public: > explicit > mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) > : _M_f(__pf) { } > > _Ret > operator()(_Tp& __r, _Arg __x) const > { return (__r.*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg); > }; > > > > template<typename _Ret, typename _Tp, typename _Arg> > class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> > { > public: > explicit > const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) > : _M_f(__pf) { } > > _Ret > operator()(const _Tp& __r, _Arg __x) const > { return (__r.*_M_f)(__x); } > > private: > _Ret (_Tp::*_M_f)(_Arg) const; > }; > > > > template<typename _Ret, typename _Tp> > inline mem_fun_t<_Ret, _Tp> > mem_fun(_Ret (_Tp::*__f)()) > { return mem_fun_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp> > inline const_mem_fun_t<_Ret, _Tp> > mem_fun(_Ret (_Tp::*__f)() const) > { return const_mem_fun_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp> > inline mem_fun_ref_t<_Ret, _Tp> > mem_fun_ref(_Ret (_Tp::*__f)()) > { return mem_fun_ref_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp> > inline const_mem_fun_ref_t<_Ret, _Tp> > mem_fun_ref(_Ret (_Tp::*__f)() const) > { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline mem_fun1_t<_Ret, _Tp, _Arg> > mem_fun(_Ret (_Tp::*__f)(_Arg)) > { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline const_mem_fun1_t<_Ret, _Tp, _Arg> > mem_fun(_Ret (_Tp::*__f)(_Arg) const) > { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline mem_fun1_ref_t<_Ret, _Tp, _Arg> > mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) > { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } > > template<typename _Ret, typename _Tp, typename _Arg> > inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> > mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) > { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } > > > > >} > > ># 1 "/usr/include/c++/4.8.2/backward/binders.h" 1 3 ># 59 "/usr/include/c++/4.8.2/backward/binders.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 103 "/usr/include/c++/4.8.2/backward/binders.h" 3 > template<typename _Operation> > class binder1st > : public unary_function<typename _Operation::second_argument_type, > typename _Operation::result_type> > { > protected: > _Operation op; > typename _Operation::first_argument_type value; > > public: > binder1st(const _Operation& __x, > const typename _Operation::first_argument_type& __y) > : op(__x), value(__y) { } > > typename _Operation::result_type > operator()(const typename _Operation::second_argument_type& __x) const > { return op(value, __x); } > > > > typename _Operation::result_type > operator()(typename _Operation::second_argument_type& __x) const > { return op(value, __x); } > } ; > > > template<typename _Operation, typename _Tp> > inline binder1st<_Operation> > bind1st(const _Operation& __fn, const _Tp& __x) > { > typedef typename _Operation::first_argument_type _Arg1_type; > return binder1st<_Operation>(__fn, _Arg1_type(__x)); > } > > > template<typename _Operation> > class binder2nd > : public unary_function<typename _Operation::first_argument_type, > typename _Operation::result_type> > { > protected: > _Operation op; > typename _Operation::second_argument_type value; > > public: > binder2nd(const _Operation& __x, > const typename _Operation::second_argument_type& __y) > : op(__x), value(__y) { } > > typename _Operation::result_type > operator()(const typename _Operation::first_argument_type& __x) const > { return op(__x, value); } > > > > typename _Operation::result_type > operator()(typename _Operation::first_argument_type& __x) const > { return op(__x, value); } > } ; > > > template<typename _Operation, typename _Tp> > inline binder2nd<_Operation> > bind2nd(const _Operation& __fn, const _Tp& __x) > { > typedef typename _Operation::second_argument_type _Arg2_type; > return binder2nd<_Operation>(__fn, _Arg2_type(__x)); > } > > > >} ># 732 "/usr/include/c++/4.8.2/bits/stl_function.h" 2 3 ># 49 "/usr/include/c++/4.8.2/string" 2 3 > > ># 1 "/usr/include/c++/4.8.2/bits/range_access.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/range_access.h" 3 > ># 34 "/usr/include/c++/4.8.2/bits/range_access.h" 3 ># 52 "/usr/include/c++/4.8.2/string" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/basic_string.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > ># 1 "/usr/include/c++/4.8.2/ext/atomicity.h" 1 3 ># 32 "/usr/include/c++/4.8.2/ext/atomicity.h" 3 > ># 33 "/usr/include/c++/4.8.2/ext/atomicity.h" 3 > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 1 3 ># 30 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 3 >#pragma GCC visibility push(default) ># 148 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 1 3 ># 35 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 ># 1 "/usr/include/pthread.h" 1 3 4 ># 23 "/usr/include/pthread.h" 3 4 ># 1 "/usr/include/sched.h" 1 3 4 ># 28 "/usr/include/sched.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 29 "/usr/include/sched.h" 2 3 4 > > > ># 1 "/usr/include/time.h" 1 3 4 ># 73 "/usr/include/time.h" 3 4 > > >typedef __time_t time_t; > > > ># 120 "/usr/include/time.h" 3 4 >struct timespec > { > __time_t tv_sec; > __syscall_slong_t tv_nsec; > }; ># 33 "/usr/include/sched.h" 2 3 4 > > >typedef __pid_t pid_t; > > > > > ># 1 "/usr/include/bits/sched.h" 1 3 4 ># 72 "/usr/include/bits/sched.h" 3 4 >struct sched_param > { > int __sched_priority; > }; > >extern "C" { > > > >extern int clone (int (*__fn) (void *__arg), void *__child_stack, > int __flags, void *__arg, ...) throw (); > > >extern int unshare (int __flags) throw (); > > >extern int sched_getcpu (void) throw (); > > >extern int setns (int __fd, int __nstype) throw (); > > > >} > > > > > > > >struct __sched_param > { > int __sched_priority; > }; ># 118 "/usr/include/bits/sched.h" 3 4 >typedef unsigned long int __cpu_mask; > > > > > > >typedef struct >{ > __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))]; >} cpu_set_t; ># 201 "/usr/include/bits/sched.h" 3 4 >extern "C" { > >extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) > throw (); >extern cpu_set_t *__sched_cpualloc (size_t __count) throw () ; >extern void __sched_cpufree (cpu_set_t *__set) throw (); > >} ># 42 "/usr/include/sched.h" 2 3 4 > > > > >extern "C" { > > >extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) > throw (); > > >extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw (); > > >extern int sched_setscheduler (__pid_t __pid, int __policy, > const struct sched_param *__param) throw (); > > >extern int sched_getscheduler (__pid_t __pid) throw (); > > >extern int sched_yield (void) throw (); > > >extern int sched_get_priority_max (int __algorithm) throw (); > > >extern int sched_get_priority_min (int __algorithm) throw (); > > >extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw (); ># 116 "/usr/include/sched.h" 3 4 >extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, > const cpu_set_t *__cpuset) throw (); > > >extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, > cpu_set_t *__cpuset) throw (); > > >} ># 24 "/usr/include/pthread.h" 2 3 4 ># 1 "/usr/include/time.h" 1 3 4 ># 29 "/usr/include/time.h" 3 4 >extern "C" { > > > > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 38 "/usr/include/time.h" 2 3 4 > > > ># 1 "/usr/include/bits/time.h" 1 3 4 ># 30 "/usr/include/bits/time.h" 3 4 >struct timeval > { > __time_t tv_sec; > __suseconds_t tv_usec; > }; ># 86 "/usr/include/bits/time.h" 3 4 ># 1 "/usr/include/bits/timex.h" 1 3 4 ># 25 "/usr/include/bits/timex.h" 3 4 >struct timex >{ > unsigned int modes; > __syscall_slong_t offset; > __syscall_slong_t freq; > __syscall_slong_t maxerror; > __syscall_slong_t esterror; > int status; > __syscall_slong_t constant; > __syscall_slong_t precision; > __syscall_slong_t tolerance; > struct timeval time; > __syscall_slong_t tick; > __syscall_slong_t ppsfreq; > __syscall_slong_t jitter; > int shift; > __syscall_slong_t stabil; > __syscall_slong_t jitcnt; > __syscall_slong_t calcnt; > __syscall_slong_t errcnt; > __syscall_slong_t stbcnt; > > int tai; > > > int :32; int :32; int :32; int :32; > int :32; int :32; int :32; int :32; > int :32; int :32; int :32; >}; ># 87 "/usr/include/bits/time.h" 2 3 4 > >extern "C" { > > >extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw (); > >} ># 42 "/usr/include/time.h" 2 3 4 ># 57 "/usr/include/time.h" 3 4 > > >typedef __clock_t clock_t; > > > ># 91 "/usr/include/time.h" 3 4 >typedef __clockid_t clockid_t; ># 103 "/usr/include/time.h" 3 4 >typedef __timer_t timer_t; ># 131 "/usr/include/time.h" 3 4 > > >struct tm >{ > int tm_sec; > int tm_min; > int tm_hour; > int tm_mday; > int tm_mon; > int tm_year; > int tm_wday; > int tm_yday; > int tm_isdst; > > > long int tm_gmtoff; > const char *tm_zone; > > > > >}; > > > > > > > > >struct itimerspec > { > struct timespec it_interval; > struct timespec it_value; > }; > > >struct sigevent; ># 186 "/usr/include/time.h" 3 4 > > > >extern clock_t clock (void) throw (); > > >extern time_t time (time_t *__timer) throw (); > > >extern double difftime (time_t __time1, time_t __time0) > throw () __attribute__ ((__const__)); > > >extern time_t mktime (struct tm *__tp) throw (); > > > > > >extern size_t strftime (char *__restrict __s, size_t __maxsize, > const char *__restrict __format, > const struct tm *__restrict __tp) throw (); > > > > > >extern char *strptime (const char *__restrict __s, > const char *__restrict __fmt, struct tm *__tp) > throw (); > > > > > > > >extern size_t strftime_l (char *__restrict __s, size_t __maxsize, > const char *__restrict __format, > const struct tm *__restrict __tp, > __locale_t __loc) throw (); > > > >extern char *strptime_l (const char *__restrict __s, > const char *__restrict __fmt, struct tm *__tp, > __locale_t __loc) throw (); > > > > > > >extern struct tm *gmtime (const time_t *__timer) throw (); > > > >extern struct tm *localtime (const time_t *__timer) throw (); > > > > > >extern struct tm *gmtime_r (const time_t *__restrict __timer, > struct tm *__restrict __tp) throw (); > > > >extern struct tm *localtime_r (const time_t *__restrict __timer, > struct tm *__restrict __tp) throw (); > > > > > >extern char *asctime (const struct tm *__tp) throw (); > > >extern char *ctime (const time_t *__timer) throw (); > > > > > > > >extern char *asctime_r (const struct tm *__restrict __tp, > char *__restrict __buf) throw (); > > >extern char *ctime_r (const time_t *__restrict __timer, > char *__restrict __buf) throw (); > > > > >extern char *__tzname[2]; >extern int __daylight; >extern long int __timezone; > > > > >extern char *tzname[2]; > > > >extern void tzset (void) throw (); > > > >extern int daylight; >extern long int timezone; > > > > > >extern int stime (const time_t *__when) throw (); ># 319 "/usr/include/time.h" 3 4 >extern time_t timegm (struct tm *__tp) throw (); > > >extern time_t timelocal (struct tm *__tp) throw (); > > >extern int dysize (int __year) throw () __attribute__ ((__const__)); ># 334 "/usr/include/time.h" 3 4 >extern int nanosleep (const struct timespec *__requested_time, > struct timespec *__remaining); > > > >extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw (); > > >extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw (); > > >extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) > throw (); > > > > > > >extern int clock_nanosleep (clockid_t __clock_id, int __flags, > const struct timespec *__req, > struct timespec *__rem); > > >extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw (); > > > > >extern int timer_create (clockid_t __clock_id, > struct sigevent *__restrict __evp, > timer_t *__restrict __timerid) throw (); > > >extern int timer_delete (timer_t __timerid) throw (); > > >extern int timer_settime (timer_t __timerid, int __flags, > const struct itimerspec *__restrict __value, > struct itimerspec *__restrict __ovalue) throw (); > > >extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) > throw (); > > >extern int timer_getoverrun (timer_t __timerid) throw (); > > > > > >extern int timespec_get (struct timespec *__ts, int __base) > throw () __attribute__ ((__nonnull__ (1))); ># 403 "/usr/include/time.h" 3 4 >extern int getdate_err; ># 412 "/usr/include/time.h" 3 4 >extern struct tm *getdate (const char *__string); ># 426 "/usr/include/time.h" 3 4 >extern int getdate_r (const char *__restrict __string, > struct tm *__restrict __resbufp); > > >} ># 25 "/usr/include/pthread.h" 2 3 4 > ># 1 "/usr/include/bits/pthreadtypes.h" 1 3 4 ># 21 "/usr/include/bits/pthreadtypes.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 22 "/usr/include/bits/pthreadtypes.h" 2 3 4 ># 60 "/usr/include/bits/pthreadtypes.h" 3 4 >typedef unsigned long int pthread_t; > > >union pthread_attr_t >{ > char __size[56]; > long int __align; >}; > >typedef union pthread_attr_t pthread_attr_t; > > > > > >typedef struct __pthread_internal_list >{ > struct __pthread_internal_list *__prev; > struct __pthread_internal_list *__next; >} __pthread_list_t; ># 90 "/usr/include/bits/pthreadtypes.h" 3 4 >typedef union >{ > struct __pthread_mutex_s > { > int __lock; > unsigned int __count; > int __owner; > > unsigned int __nusers; > > > > int __kind; > > short __spins; > short __elision; > __pthread_list_t __list; ># 124 "/usr/include/bits/pthreadtypes.h" 3 4 > } __data; > char __size[40]; > long int __align; >} pthread_mutex_t; > >typedef union >{ > char __size[4]; > int __align; >} pthread_mutexattr_t; > > > > >typedef union >{ > struct > { > int __lock; > unsigned int __futex; > __extension__ unsigned long long int __total_seq; > __extension__ unsigned long long int __wakeup_seq; > __extension__ unsigned long long int __woken_seq; > void *__mutex; > unsigned int __nwaiters; > unsigned int __broadcast_seq; > } __data; > char __size[48]; > __extension__ long long int __align; >} pthread_cond_t; > >typedef union >{ > char __size[4]; > int __align; >} pthread_condattr_t; > > > >typedef unsigned int pthread_key_t; > > > >typedef int pthread_once_t; > > > > > >typedef union >{ > > struct > { > int __lock; > unsigned int __nr_readers; > unsigned int __readers_wakeup; > unsigned int __writer_wakeup; > unsigned int __nr_readers_queued; > unsigned int __nr_writers_queued; > int __writer; > int __shared; > unsigned long int __pad1; > unsigned long int __pad2; > > > unsigned int __flags; > > } __data; ># 211 "/usr/include/bits/pthreadtypes.h" 3 4 > char __size[56]; > long int __align; >} pthread_rwlock_t; > >typedef union >{ > char __size[8]; > long int __align; >} pthread_rwlockattr_t; > > > > > >typedef volatile int pthread_spinlock_t; > > > > >typedef union >{ > char __size[32]; > long int __align; >} pthread_barrier_t; > >typedef union >{ > char __size[4]; > int __align; >} pthread_barrierattr_t; ># 27 "/usr/include/pthread.h" 2 3 4 ># 1 "/usr/include/bits/setjmp.h" 1 3 4 ># 26 "/usr/include/bits/setjmp.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 27 "/usr/include/bits/setjmp.h" 2 3 4 > > > > >typedef long int __jmp_buf[8]; ># 28 "/usr/include/pthread.h" 2 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 29 "/usr/include/pthread.h" 2 3 4 > > > >enum >{ > PTHREAD_CREATE_JOINABLE, > > PTHREAD_CREATE_DETACHED > >}; > > > >enum >{ > PTHREAD_MUTEX_TIMED_NP, > PTHREAD_MUTEX_RECURSIVE_NP, > PTHREAD_MUTEX_ERRORCHECK_NP, > PTHREAD_MUTEX_ADAPTIVE_NP > > , > PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, > PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, > PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, > PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL > > > > , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP > >}; > > > > >enum >{ > PTHREAD_MUTEX_STALLED, > PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, > PTHREAD_MUTEX_ROBUST, > PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST >}; > > > > > >enum >{ > PTHREAD_PRIO_NONE, > PTHREAD_PRIO_INHERIT, > PTHREAD_PRIO_PROTECT >}; ># 125 "/usr/include/pthread.h" 3 4 >enum >{ > PTHREAD_RWLOCK_PREFER_READER_NP, > PTHREAD_RWLOCK_PREFER_WRITER_NP, > PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, > PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP >}; ># 166 "/usr/include/pthread.h" 3 4 >enum >{ > PTHREAD_INHERIT_SCHED, > > PTHREAD_EXPLICIT_SCHED > >}; > > > >enum >{ > PTHREAD_SCOPE_SYSTEM, > > PTHREAD_SCOPE_PROCESS > >}; > > > >enum >{ > PTHREAD_PROCESS_PRIVATE, > > PTHREAD_PROCESS_SHARED > >}; ># 201 "/usr/include/pthread.h" 3 4 >struct _pthread_cleanup_buffer >{ > void (*__routine) (void *); > void *__arg; > int __canceltype; > struct _pthread_cleanup_buffer *__prev; >}; > > >enum >{ > PTHREAD_CANCEL_ENABLE, > > PTHREAD_CANCEL_DISABLE > >}; >enum >{ > PTHREAD_CANCEL_DEFERRED, > > PTHREAD_CANCEL_ASYNCHRONOUS > >}; ># 239 "/usr/include/pthread.h" 3 4 >extern "C" { > > > > >extern int pthread_create (pthread_t *__restrict __newthread, > const pthread_attr_t *__restrict __attr, > void *(*__start_routine) (void *), > void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3))); > > > > > >extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); > > > > > > > >extern int pthread_join (pthread_t __th, void **__thread_return); > > > > >extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw (); > > > > > > > >extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, > const struct timespec *__abstime); > > > > > > >extern int pthread_detach (pthread_t __th) throw (); > > > >extern pthread_t pthread_self (void) throw () __attribute__ ((__const__)); > > >extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) > throw () __attribute__ ((__const__)); > > > > > > > >extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_destroy (pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, > int *__detachstate) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, > int __detachstate) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, > size_t *__guardsize) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setguardsize (pthread_attr_t *__attr, > size_t __guardsize) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, > struct sched_param *__restrict __param) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, > const struct sched_param *__restrict > __param) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict > __attr, int *__restrict __policy) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict > __attr, int *__restrict __inherit) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, > int __inherit) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, > int *__restrict __scope) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict > __attr, void **__restrict __stackaddr) > throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__)); > > > > > >extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, > void *__stackaddr) > throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)); > > >extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict > __attr, size_t *__restrict __stacksize) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int pthread_attr_setstacksize (pthread_attr_t *__attr, > size_t __stacksize) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, > void **__restrict __stackaddr, > size_t *__restrict __stacksize) > throw () __attribute__ ((__nonnull__ (1, 2, 3))); > > > > >extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, > size_t __stacksize) throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, > size_t __cpusetsize, > const cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (1, 3))); > > > >extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, > size_t __cpusetsize, > cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (1, 3))); > > >extern int pthread_getattr_default_np (pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_setattr_default_np (const pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > > > >extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) > throw () __attribute__ ((__nonnull__ (2))); > > > > > > > >extern int pthread_setschedparam (pthread_t __target_thread, int __policy, > const struct sched_param *__param) > throw () __attribute__ ((__nonnull__ (3))); > > >extern int pthread_getschedparam (pthread_t __target_thread, > int *__restrict __policy, > struct sched_param *__restrict __param) > throw () __attribute__ ((__nonnull__ (2, 3))); > > >extern int pthread_setschedprio (pthread_t __target_thread, int __prio) > throw (); > > > > >extern int pthread_getname_np (pthread_t __target_thread, char *__buf, > size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))); > > >extern int pthread_setname_np (pthread_t __target_thread, const char *__name) > throw () __attribute__ ((__nonnull__ (2))); > > > > > >extern int pthread_getconcurrency (void) throw (); > > >extern int pthread_setconcurrency (int __level) throw (); > > > > > > > >extern int pthread_yield (void) throw (); > > > > >extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, > const cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (3))); > > >extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, > cpu_set_t *__cpuset) > throw () __attribute__ ((__nonnull__ (3))); ># 505 "/usr/include/pthread.h" 3 4 >extern int pthread_once (pthread_once_t *__once_control, > void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2))); ># 517 "/usr/include/pthread.h" 3 4 >extern int pthread_setcancelstate (int __state, int *__oldstate); > > > >extern int pthread_setcanceltype (int __type, int *__oldtype); > > >extern int pthread_cancel (pthread_t __th); > > > > >extern void pthread_testcancel (void); > > > > >typedef struct >{ > struct > { > __jmp_buf __cancel_jmp_buf; > int __mask_was_saved; > } __cancel_jmp_buf[1]; > void *__pad[4]; >} __pthread_unwind_buf_t __attribute__ ((__aligned__)); ># 551 "/usr/include/pthread.h" 3 4 >struct __pthread_cleanup_frame >{ > void (*__cancel_routine) (void *); > void *__cancel_arg; > int __do_it; > int __cancel_type; >}; > > > > >class __pthread_cleanup_class >{ > void (*__cancel_routine) (void *); > void *__cancel_arg; > int __do_it; > int __cancel_type; > > public: > __pthread_cleanup_class (void (*__fct) (void *), void *__arg) > : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } > ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } > void __setdoit (int __newval) { __do_it = __newval; } > void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, > &__cancel_type); } > void __restore () const { pthread_setcanceltype (__cancel_type, 0); } >}; ># 753 "/usr/include/pthread.h" 3 4 >struct __jmp_buf_tag; >extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw (); > > > > > >extern int pthread_mutex_init (pthread_mutex_t *__mutex, > const pthread_mutexattr_t *__mutexattr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutex_lock (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, > const struct timespec *__restrict > __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutex_getprioceiling (const pthread_mutex_t * > __restrict __mutex, > int *__restrict __prioceiling) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, > int __prioceiling, > int *__restrict __old_ceiling) > throw () __attribute__ ((__nonnull__ (1, 3))); > > > > >extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); > >extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) > throw () __attribute__ ((__nonnull__ (1))); ># 817 "/usr/include/pthread.h" 3 4 >extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, > int __pshared) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict > __attr, int *__restrict __kind) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * > __restrict __attr, > int *__restrict __protocol) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, > int __protocol) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * > __restrict __attr, > int *__restrict __prioceiling) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, > int __prioceiling) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, > int *__robustness) > throw () __attribute__ ((__nonnull__ (1, 2))); > >extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, > int *__robustness) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, > int __robustness) > throw () __attribute__ ((__nonnull__ (1))); > >extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, > int __robustness) > throw () __attribute__ ((__nonnull__ (1))); ># 899 "/usr/include/pthread.h" 3 4 >extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, > const pthread_rwlockattr_t *__restrict > __attr) throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, > const struct timespec *__restrict > __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, > const struct timespec *__restrict > __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, > int __pshared) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * > __restrict __attr, > int *__restrict __pref) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, > int __pref) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >extern int pthread_cond_init (pthread_cond_t *__restrict __cond, > const pthread_condattr_t *__restrict __cond_attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_cond_destroy (pthread_cond_t *__cond) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_cond_signal (pthread_cond_t *__cond) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_cond_broadcast (pthread_cond_t *__cond) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, > pthread_mutex_t *__restrict __mutex) > __attribute__ ((__nonnull__ (1, 2))); ># 1011 "/usr/include/pthread.h" 3 4 >extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, > pthread_mutex_t *__restrict __mutex, > const struct timespec *__restrict __abstime) > __attribute__ ((__nonnull__ (1, 2, 3))); > > > > >extern int pthread_condattr_init (pthread_condattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_condattr_destroy (pthread_condattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_condattr_getpshared (const pthread_condattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, > int __pshared) throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_condattr_getclock (const pthread_condattr_t * > __restrict __attr, > __clockid_t *__restrict __clock_id) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_condattr_setclock (pthread_condattr_t *__attr, > __clockid_t __clock_id) > throw () __attribute__ ((__nonnull__ (1))); ># 1055 "/usr/include/pthread.h" 3 4 >extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_destroy (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_lock (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_trylock (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_spin_unlock (pthread_spinlock_t *__lock) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, > const pthread_barrierattr_t *__restrict > __attr, unsigned int __count) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrier_wait (pthread_barrier_t *__barrier) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * > __restrict __attr, > int *__restrict __pshared) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, > int __pshared) > throw () __attribute__ ((__nonnull__ (1))); ># 1122 "/usr/include/pthread.h" 3 4 >extern int pthread_key_create (pthread_key_t *__key, > void (*__destr_function) (void *)) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int pthread_key_delete (pthread_key_t __key) throw (); > > >extern void *pthread_getspecific (pthread_key_t __key) throw (); > > >extern int pthread_setspecific (pthread_key_t __key, > const void *__pointer) throw () ; > > > > >extern int pthread_getcpuclockid (pthread_t __thread_id, > __clockid_t *__clock_id) > throw () __attribute__ ((__nonnull__ (2))); ># 1156 "/usr/include/pthread.h" 3 4 >extern int pthread_atfork (void (*__prepare) (void), > void (*__parent) (void), > void (*__child) (void)) throw (); > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) throw () >{ > return __thread1 == __thread2; >} > > >} ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 2 3 ># 47 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >typedef pthread_t __gthread_t; >typedef pthread_key_t __gthread_key_t; >typedef pthread_once_t __gthread_once_t; >typedef pthread_mutex_t __gthread_mutex_t; >typedef pthread_mutex_t __gthread_recursive_mutex_t; >typedef pthread_cond_t __gthread_cond_t; >typedef struct timespec __gthread_time_t; ># 101 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once"))); >static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific"))); >static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific"))); > >static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create"))); >static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join"))); >static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal"))); >static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self"))); >static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach"))); > >static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel"))); > >static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield"))); > >static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock"))); >static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock"))); > >static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock"))); > >static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock"))); >static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init"))); >static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy"))); > >static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init"))); >static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast"))); >static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal"))); >static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait"))); >static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait"))); >static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy"))); > >static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create"))); >static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete"))); >static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init"))); >static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype"))); >static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy"))); ># 236 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create"))); ># 246 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_active_p (void) >{ > static void *const __gthread_active_ptr > = __extension__ (void *) &__gthrw___pthread_key_create; > return __gthread_active_ptr != 0; >} ># 658 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), > void *__args) >{ > return __gthrw_pthread_create (__threadid, __null, __func, __args); >} > >static inline int >__gthread_join (__gthread_t __threadid, void **__value_ptr) >{ > return __gthrw_pthread_join (__threadid, __value_ptr); >} > >static inline int >__gthread_detach (__gthread_t __threadid) >{ > return __gthrw_pthread_detach (__threadid); >} > >static inline int >__gthread_equal (__gthread_t __t1, __gthread_t __t2) >{ > return __gthrw_pthread_equal (__t1, __t2); >} > >static inline __gthread_t >__gthread_self (void) >{ > return __gthrw_pthread_self (); >} > >static inline int >__gthread_yield (void) >{ > return __gthrw_sched_yield (); >} > >static inline int >__gthread_once (__gthread_once_t *__once, void (*__func) (void)) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_once (__once, __func); > else > return -1; >} > >static inline int >__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) >{ > return __gthrw_pthread_key_create (__key, __dtor); >} > >static inline int >__gthread_key_delete (__gthread_key_t __key) >{ > return __gthrw_pthread_key_delete (__key); >} > >static inline void * >__gthread_getspecific (__gthread_key_t __key) >{ > return __gthrw_pthread_getspecific (__key); >} > >static inline int >__gthread_setspecific (__gthread_key_t __key, const void *__ptr) >{ > return __gthrw_pthread_setspecific (__key, __ptr); >} > >static inline void >__gthread_mutex_init_function (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > __gthrw_pthread_mutex_init (__mutex, __null); >} > >static inline int >__gthread_mutex_destroy (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_destroy (__mutex); > else > return 0; >} > >static inline int >__gthread_mutex_lock (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_lock (__mutex); > else > return 0; >} > >static inline int >__gthread_mutex_trylock (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_trylock (__mutex); > else > return 0; >} > > >static inline int >__gthread_mutex_timedlock (__gthread_mutex_t *__mutex, > const __gthread_time_t *__abs_timeout) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout); > else > return 0; >} > > >static inline int >__gthread_mutex_unlock (__gthread_mutex_t *__mutex) >{ > if (__gthread_active_p ()) > return __gthrw_pthread_mutex_unlock (__mutex); > else > return 0; >} ># 807 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_lock (__mutex); >} > >static inline int >__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_trylock (__mutex); >} > > >static inline int >__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, > const __gthread_time_t *__abs_timeout) >{ > return __gthread_mutex_timedlock (__mutex, __abs_timeout); >} > > >static inline int >__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_unlock (__mutex); >} > >static inline int >__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) >{ > return __gthread_mutex_destroy (__mutex); >} ># 849 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr-default.h" 3 >static inline int >__gthread_cond_broadcast (__gthread_cond_t *__cond) >{ > return __gthrw_pthread_cond_broadcast (__cond); >} > >static inline int >__gthread_cond_signal (__gthread_cond_t *__cond) >{ > return __gthrw_pthread_cond_signal (__cond); >} > >static inline int >__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) >{ > return __gthrw_pthread_cond_wait (__cond, __mutex); >} > >static inline int >__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, > const __gthread_time_t *__abs_timeout) >{ > return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout); >} > >static inline int >__gthread_cond_wait_recursive (__gthread_cond_t *__cond, > __gthread_recursive_mutex_t *__mutex) >{ > return __gthread_cond_wait (__cond, __mutex); >} > >static inline int >__gthread_cond_destroy (__gthread_cond_t* __cond) >{ > return __gthrw_pthread_cond_destroy (__cond); >} ># 149 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/gthr.h" 2 3 > > >#pragma GCC visibility pop ># 36 "/usr/include/c++/4.8.2/ext/atomicity.h" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/atomic_word.h" 1 3 ># 32 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/atomic_word.h" 3 >typedef int _Atomic_word; ># 37 "/usr/include/c++/4.8.2/ext/atomicity.h" 2 3 > >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > > static inline _Atomic_word > __exchange_and_add(volatile _Atomic_word* __mem, int __val) > { return __atomic_fetch_add(__mem, __val, 4); } > > static inline void > __atomic_add(volatile _Atomic_word* __mem, int __val) > { __atomic_fetch_add(__mem, __val, 4); } ># 64 "/usr/include/c++/4.8.2/ext/atomicity.h" 3 > static inline _Atomic_word > __exchange_and_add_single(_Atomic_word* __mem, int __val) > { > _Atomic_word __result = *__mem; > *__mem += __val; > return __result; > } > > static inline void > __atomic_add_single(_Atomic_word* __mem, int __val) > { *__mem += __val; } > > static inline _Atomic_word > __attribute__ ((__unused__)) > __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) > { > > if (__gthread_active_p()) > return __exchange_and_add(__mem, __val); > else > return __exchange_and_add_single(__mem, __val); > > > > } > > static inline void > __attribute__ ((__unused__)) > __atomic_add_dispatch(_Atomic_word* __mem, int __val) > { > > if (__gthread_active_p()) > __atomic_add(__mem, __val); > else > __atomic_add_single(__mem, __val); > > > > } > > >} ># 40 "/usr/include/c++/4.8.2/bits/basic_string.h" 2 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 111 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > class basic_string > { > typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type; > > > public: > typedef _Traits traits_type; > typedef typename _Traits::char_type value_type; > typedef _Alloc allocator_type; > typedef typename _CharT_alloc_type::size_type size_type; > typedef typename _CharT_alloc_type::difference_type difference_type; > typedef typename _CharT_alloc_type::reference reference; > typedef typename _CharT_alloc_type::const_reference const_reference; > typedef typename _CharT_alloc_type::pointer pointer; > typedef typename _CharT_alloc_type::const_pointer const_pointer; > typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator; > typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string> > const_iterator; > typedef std::reverse_iterator<const_iterator> const_reverse_iterator; > typedef std::reverse_iterator<iterator> reverse_iterator; > > private: ># 148 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > struct _Rep_base > { > size_type _M_length; > size_type _M_capacity; > _Atomic_word _M_refcount; > }; > > struct _Rep : _Rep_base > { > > typedef typename _Alloc::template rebind<char>::other _Raw_bytes_alloc; ># 173 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > static const size_type _S_max_size; > static const _CharT _S_terminal; > > > > static size_type _S_empty_rep_storage[]; > > static _Rep& > _S_empty_rep() > { > > > > void* __p = reinterpret_cast<void*>(&_S_empty_rep_storage); > return *reinterpret_cast<_Rep*>(__p); > } > > bool > _M_is_leaked() const > { return this->_M_refcount < 0; } > > bool > _M_is_shared() const > { return this->_M_refcount > 0; } > > void > _M_set_leaked() > { this->_M_refcount = -1; } > > void > _M_set_sharable() > { this->_M_refcount = 0; } > > void > _M_set_length_and_sharable(size_type __n) > { > > if (__builtin_expect(this != &_S_empty_rep(), false)) > > { > this->_M_set_sharable(); > this->_M_length = __n; > traits_type::assign(this->_M_refdata()[__n], _S_terminal); > > > } > } > > _CharT* > _M_refdata() throw() > { return reinterpret_cast<_CharT*>(this + 1); } > > _CharT* > _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2) > { > return (!_M_is_leaked() && __alloc1 == __alloc2) > ? _M_refcopy() : _M_clone(__alloc1); > } > > > static _Rep* > _S_create(size_type, size_type, const _Alloc&); > > void > _M_dispose(const _Alloc& __a) > { > > if (__builtin_expect(this != &_S_empty_rep(), false)) > > { > > ; > if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, > -1) <= 0) > { > ; > _M_destroy(__a); > } > } > } > > void > _M_destroy(const _Alloc&) throw(); > > _CharT* > _M_refcopy() throw() > { > > if (__builtin_expect(this != &_S_empty_rep(), false)) > > __gnu_cxx::__atomic_add_dispatch(&this->_M_refcount, 1); > return _M_refdata(); > } > > _CharT* > _M_clone(const _Alloc&, size_type __res = 0); > }; > > > struct _Alloc_hider : _Alloc > { > _Alloc_hider(_CharT* __dat, const _Alloc& __a) > : _Alloc(__a), _M_p(__dat) { } > > _CharT* _M_p; > }; > > public: > > > > > static const size_type npos = static_cast<size_type>(-1); > > private: > > mutable _Alloc_hider _M_dataplus; > > _CharT* > _M_data() const > { return _M_dataplus._M_p; } > > _CharT* > _M_data(_CharT* __p) > { return (_M_dataplus._M_p = __p); } > > _Rep* > _M_rep() const > { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); } > > > > iterator > _M_ibegin() const > { return iterator(_M_data()); } > > iterator > _M_iend() const > { return iterator(_M_data() + this->size()); } > > void > _M_leak() > { > if (!_M_rep()->_M_is_leaked()) > _M_leak_hard(); > } > > size_type > _M_check(size_type __pos, const char* __s) const > { > if (__pos > this->size()) > __throw_out_of_range((__s)); > return __pos; > } > > void > _M_check_length(size_type __n1, size_type __n2, const char* __s) const > { > if (this->max_size() - (this->size() - __n1) < __n2) > __throw_length_error((__s)); > } > > > size_type > _M_limit(size_type __pos, size_type __off) const > { > const bool __testoff = __off < this->size() - __pos; > return __testoff ? __off : this->size() - __pos; > } > > > bool > _M_disjunct(const _CharT* __s) const > { > return (less<const _CharT*>()(__s, _M_data()) > || less<const _CharT*>()(_M_data() + this->size(), __s)); > } > > > > static void > _M_copy(_CharT* __d, const _CharT* __s, size_type __n) > { > if (__n == 1) > traits_type::assign(*__d, *__s); > else > traits_type::copy(__d, __s, __n); > } > > static void > _M_move(_CharT* __d, const _CharT* __s, size_type __n) > { > if (__n == 1) > traits_type::assign(*__d, *__s); > else > traits_type::move(__d, __s, __n); > } > > static void > _M_assign(_CharT* __d, size_type __n, _CharT __c) > { > if (__n == 1) > traits_type::assign(*__d, __c); > else > traits_type::assign(__d, __n, __c); > } > > > > template<class _Iterator> > static void > _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) > { > for (; __k1 != __k2; ++__k1, ++__p) > traits_type::assign(*__p, *__k1); > } > > static void > _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) > { _S_copy_chars(__p, __k1.base(), __k2.base()); } > > static void > _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) > { _S_copy_chars(__p, __k1.base(), __k2.base()); } > > static void > _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) > { _M_copy(__p, __k1, __k2 - __k1); } > > static void > _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) > { _M_copy(__p, __k1, __k2 - __k1); } > > static int > _S_compare(size_type __n1, size_type __n2) > { > const difference_type __d = difference_type(__n1 - __n2); > > if (__d > __gnu_cxx::__numeric_traits<int>::__max) > return __gnu_cxx::__numeric_traits<int>::__max; > else if (__d < __gnu_cxx::__numeric_traits<int>::__min) > return __gnu_cxx::__numeric_traits<int>::__min; > else > return int(__d); > } > > void > _M_mutate(size_type __pos, size_type __len1, size_type __len2); > > void > _M_leak_hard(); > > static _Rep& > _S_empty_rep() > { return _Rep::_S_empty_rep(); } > > public: > > > > > > > > basic_string() > > : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { } > > > > > > > > explicit > basic_string(const _Alloc& __a); > > > > > > > basic_string(const basic_string& __str); > > > > > > > basic_string(const basic_string& __str, size_type __pos, > size_type __n = npos); > > > > > > > > basic_string(const basic_string& __str, size_type __pos, > size_type __n, const _Alloc& __a); ># 483 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string(const _CharT* __s, size_type __n, > const _Alloc& __a = _Alloc()); > > > > > > basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()); > > > > > > > basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()); ># 531 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string(_InputIterator __beg, _InputIterator __end, > const _Alloc& __a = _Alloc()); > > > > > ~basic_string() > { _M_rep()->_M_dispose(this->get_allocator()); } > > > > > > basic_string& > operator=(const basic_string& __str) > { return this->assign(__str); } > > > > > > basic_string& > operator=(const _CharT* __s) > { return this->assign(__s); } ># 564 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > operator=(_CharT __c) > { > this->assign(1, __c); > return *this; > } ># 604 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > begin() > { > _M_leak(); > return iterator(_M_data()); > } > > > > > > const_iterator > begin() const > { return const_iterator(_M_data()); } > > > > > > iterator > end() > { > _M_leak(); > return iterator(_M_data() + this->size()); > } > > > > > > const_iterator > end() const > { return const_iterator(_M_data() + this->size()); } > > > > > > > reverse_iterator > rbegin() > { return reverse_iterator(this->end()); } > > > > > > > const_reverse_iterator > rbegin() const > { return const_reverse_iterator(this->end()); } > > > > > > > reverse_iterator > rend() > { return reverse_iterator(this->begin()); } > > > > > > > const_reverse_iterator > rend() const > { return const_reverse_iterator(this->begin()); } ># 710 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > public: > > > > size_type > size() const > { return _M_rep()->_M_length; } > > > > size_type > length() const > { return _M_rep()->_M_length; } > > > size_type > max_size() const > { return _Rep::_S_max_size; } ># 739 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > resize(size_type __n, _CharT __c); ># 752 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > resize(size_type __n) > { this->resize(__n, _CharT()); } ># 775 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > capacity() const > { return _M_rep()->_M_capacity; } ># 796 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > reserve(size_type __res_arg = 0); > > > > > void > clear() > { _M_mutate(0, this->size(), 0); } > > > > > > bool > empty() const > { return this->size() == 0; } ># 825 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > const_reference > operator[] (size_type __pos) const > { > ; > return _M_data()[__pos]; > } ># 842 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > reference > operator[](size_type __pos) > { > > ; > > ; > _M_leak(); > return _M_data()[__pos]; > } ># 863 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > const_reference > at(size_type __n) const > { > if (__n >= this->size()) > __throw_out_of_range(("basic_string::at")); > return _M_data()[__n]; > } ># 882 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > reference > at(size_type __n) > { > if (__n >= size()) > __throw_out_of_range(("basic_string::at")); > _M_leak(); > return _M_data()[__n]; > } ># 931 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > operator+=(const basic_string& __str) > { return this->append(__str); } > > > > > > > basic_string& > operator+=(const _CharT* __s) > { return this->append(__s); } > > > > > > > basic_string& > operator+=(_CharT __c) > { > this->push_back(__c); > return *this; > } ># 972 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > append(const basic_string& __str); ># 988 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > append(const basic_string& __str, size_type __pos, size_type __n); > > > > > > > > basic_string& > append(const _CharT* __s, size_type __n); > > > > > > > basic_string& > append(const _CharT* __s) > { > ; > return this->append(__s, traits_type::length(__s)); > } ># 1020 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > append(size_type __n, _CharT __c); ># 1042 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string& > append(_InputIterator __first, _InputIterator __last) > { return this->replace(_M_iend(), _M_iend(), __first, __last); } > > > > > > void > push_back(_CharT __c) > { > const size_type __len = 1 + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > traits_type::assign(_M_data()[this->size()], __c); > _M_rep()->_M_set_length_and_sharable(__len); > } > > > > > > > basic_string& > assign(const basic_string& __str); ># 1099 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(const basic_string& __str, size_type __pos, size_type __n) > { return this->assign(__str._M_data() > + __str._M_check(__pos, "basic_string::assign"), > __str._M_limit(__pos, __n)); } ># 1115 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(const _CharT* __s, size_type __n); ># 1127 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(const _CharT* __s) > { > ; > return this->assign(__s, traits_type::length(__s)); > } ># 1143 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > assign(size_type __n, _CharT __c) > { return _M_replace_aux(size_type(0), this->size(), __n, __c); } ># 1155 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string& > assign(_InputIterator __first, _InputIterator __last) > { return this->replace(_M_ibegin(), _M_iend(), __first, __last); } ># 1184 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > insert(iterator __p, size_type __n, _CharT __c) > { this->replace(__p, __p, __n, __c); } ># 1200 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > void > insert(iterator __p, _InputIterator __beg, _InputIterator __end) > { this->replace(__p, __p, __beg, __end); } ># 1232 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos1, const basic_string& __str) > { return this->insert(__pos1, __str, size_type(0), __str.size()); } ># 1254 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos1, const basic_string& __str, > size_type __pos2, size_type __n) > { return this->insert(__pos1, __str._M_data() > + __str._M_check(__pos2, "basic_string::insert"), > __str._M_limit(__pos2, __n)); } ># 1277 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos, const _CharT* __s, size_type __n); ># 1295 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos, const _CharT* __s) > { > ; > return this->insert(__pos, __s, traits_type::length(__s)); > } ># 1318 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > insert(size_type __pos, size_type __n, _CharT __c) > { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), > size_type(0), __n, __c); } ># 1336 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > insert(iterator __p, _CharT __c) > { > ; > const size_type __pos = __p - _M_ibegin(); > _M_replace_aux(__pos, size_type(0), size_type(1), __c); > _M_rep()->_M_set_leaked(); > return iterator(_M_data() + __pos); > } ># 1361 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > erase(size_type __pos = 0, size_type __n = npos) > { > _M_mutate(_M_check(__pos, "basic_string::erase"), > _M_limit(__pos, __n), size_type(0)); > return *this; > } ># 1377 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > erase(iterator __position) > { > > ; > const size_type __pos = __position - _M_ibegin(); > _M_mutate(__pos, size_type(1), size_type(0)); > _M_rep()->_M_set_leaked(); > return iterator(_M_data() + __pos); > } ># 1397 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > iterator > erase(iterator __first, iterator __last); ># 1428 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n, const basic_string& __str) > { return this->replace(__pos, __n, __str._M_data(), __str.size()); } ># 1450 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos1, size_type __n1, const basic_string& __str, > size_type __pos2, size_type __n2) > { return this->replace(__pos1, __n1, __str._M_data() > + __str._M_check(__pos2, "basic_string::replace"), > __str._M_limit(__pos2, __n2)); } ># 1475 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2); ># 1495 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n1, const _CharT* __s) > { > ; > return this->replace(__pos, __n1, __s, traits_type::length(__s)); > } ># 1519 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) > { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), > _M_limit(__pos, __n1), __n2, __c); } ># 1537 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, const basic_string& __str) > { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } ># 1556 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n) > { > > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n); > } ># 1577 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, const _CharT* __s) > { > ; > return this->replace(__i1, __i2, __s, traits_type::length(__s)); > } ># 1598 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string& > replace(iterator __i1, iterator __i2, size_type __n, _CharT __c) > { > > ; > return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __c); > } ># 1621 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<class _InputIterator> > basic_string& > replace(iterator __i1, iterator __i2, > _InputIterator __k1, _InputIterator __k2) > { > > ; > ; > typedef typename std::__is_integer<_InputIterator>::__type _Integral; > return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); > } > > > > basic_string& > replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1, __k2 - __k1); > } > > basic_string& > replace(iterator __i1, iterator __i2, > const _CharT* __k1, const _CharT* __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1, __k2 - __k1); > } > > basic_string& > replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1.base(), __k2 - __k1); > } > > basic_string& > replace(iterator __i1, iterator __i2, > const_iterator __k1, const_iterator __k2) > { > > ; > ; > return this->replace(__i1 - _M_ibegin(), __i2 - __i1, > __k1.base(), __k2 - __k1); > } ># 1697 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > private: > template<class _Integer> > basic_string& > _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n, > _Integer __val, __true_type) > { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); } > > template<class _InputIterator> > basic_string& > _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, > _InputIterator __k2, __false_type); > > basic_string& > _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, > _CharT __c); > > basic_string& > _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s, > size_type __n2); > > > > template<class _InIterator> > static _CharT* > _S_construct_aux(_InIterator __beg, _InIterator __end, > const _Alloc& __a, __false_type) > { > typedef typename iterator_traits<_InIterator>::iterator_category _Tag; > return _S_construct(__beg, __end, __a, _Tag()); > } > > > > template<class _Integer> > static _CharT* > _S_construct_aux(_Integer __beg, _Integer __end, > const _Alloc& __a, __true_type) > { return _S_construct_aux_2(static_cast<size_type>(__beg), > __end, __a); } > > static _CharT* > _S_construct_aux_2(size_type __req, _CharT __c, const _Alloc& __a) > { return _S_construct(__req, __c, __a); } > > template<class _InIterator> > static _CharT* > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a) > { > typedef typename std::__is_integer<_InIterator>::__type _Integral; > return _S_construct_aux(__beg, __end, __a, _Integral()); > } > > > template<class _InIterator> > static _CharT* > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, > input_iterator_tag); > > > > template<class _FwdIterator> > static _CharT* > _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, > forward_iterator_tag); > > static _CharT* > _S_construct(size_type __req, _CharT __c, const _Alloc& __a); > > public: ># 1779 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > copy(_CharT* __s, size_type __n, size_type __pos = 0) const; ># 1789 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > void > swap(basic_string& __s); ># 1799 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > const _CharT* > c_str() const > { return _M_data(); } > > > > > > > > const _CharT* > data() const > { return _M_data(); } > > > > > allocator_type > get_allocator() const > { return _M_dataplus; } ># 1832 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(const _CharT* __s, size_type __pos, size_type __n) const; ># 1845 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(const basic_string& __str, size_type __pos = 0) const > > { return this->find(__str.data(), __pos, __str.size()); } ># 1860 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(const _CharT* __s, size_type __pos = 0) const > { > ; > return this->find(__s, __pos, traits_type::length(__s)); > } ># 1877 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find(_CharT __c, size_type __pos = 0) const ; ># 1890 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(const basic_string& __str, size_type __pos = npos) const > > { return this->rfind(__str.data(), __pos, __str.size()); } ># 1907 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(const _CharT* __s, size_type __pos, size_type __n) const; ># 1920 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(const _CharT* __s, size_type __pos = npos) const > { > ; > return this->rfind(__s, __pos, traits_type::length(__s)); > } ># 1937 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > rfind(_CharT __c, size_type __pos = npos) const ; ># 1951 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(const basic_string& __str, size_type __pos = 0) const > > { return this->find_first_of(__str.data(), __pos, __str.size()); } ># 1968 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(const _CharT* __s, size_type __pos, size_type __n) const; ># 1981 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(const _CharT* __s, size_type __pos = 0) const > { > ; > return this->find_first_of(__s, __pos, traits_type::length(__s)); > } ># 2000 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_of(_CharT __c, size_type __pos = 0) const > { return this->find(__c, __pos); } ># 2015 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(const basic_string& __str, size_type __pos = npos) const > > { return this->find_last_of(__str.data(), __pos, __str.size()); } ># 2032 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(const _CharT* __s, size_type __pos, size_type __n) const; ># 2045 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(const _CharT* __s, size_type __pos = npos) const > { > ; > return this->find_last_of(__s, __pos, traits_type::length(__s)); > } ># 2064 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_of(_CharT __c, size_type __pos = npos) const > { return this->rfind(__c, __pos); } ># 2078 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(const basic_string& __str, size_type __pos = 0) const > > { return this->find_first_not_of(__str.data(), __pos, __str.size()); } ># 2095 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(const _CharT* __s, size_type __pos, > size_type __n) const; ># 2109 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(const _CharT* __s, size_type __pos = 0) const > { > ; > return this->find_first_not_of(__s, __pos, traits_type::length(__s)); > } ># 2126 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_first_not_of(_CharT __c, size_type __pos = 0) const > ; ># 2141 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(const basic_string& __str, size_type __pos = npos) const > > { return this->find_last_not_of(__str.data(), __pos, __str.size()); } ># 2158 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(const _CharT* __s, size_type __pos, > size_type __n) const; ># 2172 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(const _CharT* __s, size_type __pos = npos) const > { > ; > return this->find_last_not_of(__s, __pos, traits_type::length(__s)); > } ># 2189 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > size_type > find_last_not_of(_CharT __c, size_type __pos = npos) const > ; ># 2205 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > basic_string > substr(size_type __pos = 0, size_type __n = npos) const > { return basic_string(*this, > _M_check(__pos, "basic_string::substr"), __n); } ># 2224 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(const basic_string& __str) const > { > const size_type __size = this->size(); > const size_type __osize = __str.size(); > const size_type __len = std::min(__size, __osize); > > int __r = traits_type::compare(_M_data(), __str.data(), __len); > if (!__r) > __r = _S_compare(__size, __osize); > return __r; > } ># 2256 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos, size_type __n, const basic_string& __str) const; ># 2282 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos1, size_type __n1, const basic_string& __str, > size_type __pos2, size_type __n2) const; ># 2300 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(const _CharT* __s) const; ># 2324 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos, size_type __n1, const _CharT* __s) const; ># 2351 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > int > compare(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2) const; > }; ># 2363 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc> > operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { > basic_string<_CharT, _Traits, _Alloc> __str(__lhs); > __str.append(__rhs); > return __str; > } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT,_Traits,_Alloc> > operator+(const _CharT* __lhs, > const basic_string<_CharT,_Traits,_Alloc>& __rhs); > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT,_Traits,_Alloc> > operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs); > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_string<_CharT, _Traits, _Alloc> > operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { > basic_string<_CharT, _Traits, _Alloc> __str(__lhs); > __str.append(__rhs); > return __str; > } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_string<_CharT, _Traits, _Alloc> > operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) > { > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > __string_type __str(__lhs); > __str.append(__size_type(1), __rhs); > return __str; > } ># 2484 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) == 0; } > > template<typename _CharT> > inline > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type > operator==(const basic_string<_CharT>& __lhs, > const basic_string<_CharT>& __rhs) > { return (__lhs.size() == __rhs.size() > && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(), > __lhs.size())); } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator==(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) == 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) == 0; } ># 2530 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return !(__lhs == __rhs); } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator!=(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return !(__lhs == __rhs); } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return !(__lhs == __rhs); } ># 2567 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) < 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) < 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) > 0; } ># 2604 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) > 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) > 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) < 0; } ># 2641 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) <= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) <= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator<=(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) >= 0; } ># 2678 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __lhs.compare(__rhs) >= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, > const _CharT* __rhs) > { return __lhs.compare(__rhs) >= 0; } > > > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > inline bool > operator>=(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { return __rhs.compare(__lhs) <= 0; } ># 2715 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline void > swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, > basic_string<_CharT, _Traits, _Alloc>& __rhs) > { __lhs.swap(__rhs); } ># 2733 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, > basic_string<_CharT, _Traits, _Alloc>& __str); > > template<> > basic_istream<char>& > operator>>(basic_istream<char>& __is, basic_string<char>& __str); ># 2751 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, > const basic_string<_CharT, _Traits, _Alloc>& __str) > { > > > return __ostream_insert(__os, __str.data(), __str.size()); > } ># 2774 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > getline(basic_istream<_CharT, _Traits>& __is, > basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); ># 2791 "/usr/include/c++/4.8.2/bits/basic_string.h" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > inline basic_istream<_CharT, _Traits>& > getline(basic_istream<_CharT, _Traits>& __is, > basic_string<_CharT, _Traits, _Alloc>& __str) > { return getline(__is, __str, __is.widen('\n')); } > > template<> > basic_istream<char>& > getline(basic_istream<char>& __in, basic_string<char>& __str, > char __delim); > > > template<> > basic_istream<wchar_t>& > getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str, > wchar_t __delim); > > > >} ># 53 "/usr/include/c++/4.8.2/string" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 1 3 ># 40 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > ># 41 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits, typename _Alloc> > const typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > _Rep::_S_max_size = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; > > template<typename _CharT, typename _Traits, typename _Alloc> > const _CharT > basic_string<_CharT, _Traits, _Alloc>:: > _Rep::_S_terminal = _CharT(); > > template<typename _CharT, typename _Traits, typename _Alloc> > const typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>::npos; > > > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[ > (sizeof(_Rep_base) + sizeof(_CharT) + sizeof(size_type) - 1) / > sizeof(size_type)]; > > > > > > template<typename _CharT, typename _Traits, typename _Alloc> > template<typename _InIterator> > _CharT* > basic_string<_CharT, _Traits, _Alloc>:: > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, > input_iterator_tag) > { > > if (__beg == __end && __a == _Alloc()) > return _S_empty_rep()._M_refdata(); > > > _CharT __buf[128]; > size_type __len = 0; > while (__beg != __end && __len < sizeof(__buf) / sizeof(_CharT)) > { > __buf[__len++] = *__beg; > ++__beg; > } > _Rep* __r = _Rep::_S_create(__len, size_type(0), __a); > _M_copy(__r->_M_refdata(), __buf, __len); > try > { > while (__beg != __end) > { > if (__len == __r->_M_capacity) > { > > _Rep* __another = _Rep::_S_create(__len + 1, __len, __a); > _M_copy(__another->_M_refdata(), __r->_M_refdata(), __len); > __r->_M_destroy(__a); > __r = __another; > } > __r->_M_refdata()[__len++] = *__beg; > ++__beg; > } > } > catch(...) > { > __r->_M_destroy(__a); > throw; > } > __r->_M_set_length_and_sharable(__len); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > template <typename _InIterator> > _CharT* > basic_string<_CharT, _Traits, _Alloc>:: > _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, > forward_iterator_tag) > { > > if (__beg == __end && __a == _Alloc()) > return _S_empty_rep()._M_refdata(); > > > if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end) > __throw_logic_error(("basic_string::_S_construct null not valid")); > > const size_type __dnew = static_cast<size_type>(std::distance(__beg, > __end)); > > _Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a); > try > { _S_copy_chars(__r->_M_refdata(), __beg, __end); } > catch(...) > { > __r->_M_destroy(__a); > throw; > } > __r->_M_set_length_and_sharable(__dnew); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > _CharT* > basic_string<_CharT, _Traits, _Alloc>:: > _S_construct(size_type __n, _CharT __c, const _Alloc& __a) > { > > if (__n == 0 && __a == _Alloc()) > return _S_empty_rep()._M_refdata(); > > > _Rep* __r = _Rep::_S_create(__n, size_type(0), __a); > if (__n) > _M_assign(__r->_M_refdata(), __n, __c); > > __r->_M_set_length_and_sharable(__n); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const basic_string& __str) > : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(__str.get_allocator()), > __str.get_allocator()), > __str.get_allocator()) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const _Alloc& __a) > : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const basic_string& __str, size_type __pos, size_type __n) > : _M_dataplus(_S_construct(__str._M_data() > + __str._M_check(__pos, > "basic_string::basic_string"), > __str._M_data() + __str._M_limit(__pos, __n) > + __pos, _Alloc()), _Alloc()) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const basic_string& __str, size_type __pos, > size_type __n, const _Alloc& __a) > : _M_dataplus(_S_construct(__str._M_data() > + __str._M_check(__pos, > "basic_string::basic_string"), > __str._M_data() + __str._M_limit(__pos, __n) > + __pos, __a), __a) > { } > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const _CharT* __s, size_type __n, const _Alloc& __a) > : _M_dataplus(_S_construct(__s, __s + __n, __a), __a) > { } > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(const _CharT* __s, const _Alloc& __a) > : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) : > __s + npos, __a), __a) > { } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(size_type __n, _CharT __c, const _Alloc& __a) > : _M_dataplus(_S_construct(__n, __c, __a), __a) > { } > > > template<typename _CharT, typename _Traits, typename _Alloc> > template<typename _InputIterator> > basic_string<_CharT, _Traits, _Alloc>:: > basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a) > : _M_dataplus(_S_construct(__beg, __end, __a), __a) > { } ># 240 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > assign(const basic_string& __str) > { > if (_M_rep() != __str._M_rep()) > { > > const allocator_type __a = this->get_allocator(); > _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator()); > _M_rep()->_M_dispose(__a); > _M_data(__tmp); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > assign(const _CharT* __s, size_type __n) > { > ; > _M_check_length(this->size(), __n, "basic_string::assign"); > if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) > return _M_replace_safe(size_type(0), this->size(), __s, __n); > else > { > > const size_type __pos = __s - _M_data(); > if (__pos >= __n) > _M_copy(_M_data(), __s, __n); > else if (__pos) > _M_move(_M_data(), __s, __n); > _M_rep()->_M_set_length_and_sharable(__n); > return *this; > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(size_type __n, _CharT __c) > { > if (__n) > { > _M_check_length(size_type(0), __n, "basic_string::append"); > const size_type __len = __n + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > _M_assign(_M_data() + this->size(), __n, __c); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(const _CharT* __s, size_type __n) > { > ; > if (__n) > { > _M_check_length(size_type(0), __n, "basic_string::append"); > const size_type __len = __n + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > { > if (_M_disjunct(__s)) > this->reserve(__len); > else > { > const size_type __off = __s - _M_data(); > this->reserve(__len); > __s = _M_data() + __off; > } > } > _M_copy(_M_data() + this->size(), __s, __n); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(const basic_string& __str) > { > const size_type __size = __str.size(); > if (__size) > { > const size_type __len = __size + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > _M_copy(_M_data() + this->size(), __str._M_data(), __size); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > append(const basic_string& __str, size_type __pos, size_type __n) > { > __str._M_check(__pos, "basic_string::append"); > __n = __str._M_limit(__pos, __n); > if (__n) > { > const size_type __len = __n + this->size(); > if (__len > this->capacity() || _M_rep()->_M_is_shared()) > this->reserve(__len); > _M_copy(_M_data() + this->size(), __str._M_data() + __pos, __n); > _M_rep()->_M_set_length_and_sharable(__len); > } > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > insert(size_type __pos, const _CharT* __s, size_type __n) > { > ; > _M_check(__pos, "basic_string::insert"); > _M_check_length(size_type(0), __n, "basic_string::insert"); > if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) > return _M_replace_safe(__pos, size_type(0), __s, __n); > else > { > > const size_type __off = __s - _M_data(); > _M_mutate(__pos, 0, __n); > __s = _M_data() + __off; > _CharT* __p = _M_data() + __pos; > if (__s + __n <= __p) > _M_copy(__p, __s, __n); > else if (__s >= __p) > _M_copy(__p, __s + __n, __n); > else > { > const size_type __nleft = __p - __s; > _M_copy(__p, __s, __nleft); > _M_copy(__p + __nleft, __p + __n, __n - __nleft); > } > return *this; > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::iterator > basic_string<_CharT, _Traits, _Alloc>:: > erase(iterator __first, iterator __last) > { > > ; > > > > > const size_type __size = __last - __first; > if (__size) > { > const size_type __pos = __first - _M_ibegin(); > _M_mutate(__pos, __size, size_type(0)); > _M_rep()->_M_set_leaked(); > return iterator(_M_data() + __pos); > } > else > return __first; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > replace(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2) > { > ; > _M_check(__pos, "basic_string::replace"); > __n1 = _M_limit(__pos, __n1); > _M_check_length(__n1, __n2, "basic_string::replace"); > bool __left; > if (_M_disjunct(__s) || _M_rep()->_M_is_shared()) > return _M_replace_safe(__pos, __n1, __s, __n2); > else if ((__left = __s + __n2 <= _M_data() + __pos) > || _M_data() + __pos + __n1 <= __s) > { > > size_type __off = __s - _M_data(); > __left ? __off : (__off += __n2 - __n1); > _M_mutate(__pos, __n1, __n2); > _M_copy(_M_data() + __pos, _M_data() + __off, __n2); > return *this; > } > else > { > > const basic_string __tmp(__s, __n2); > return _M_replace_safe(__pos, __n1, __tmp._M_data(), __n2); > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>::_Rep:: > _M_destroy(const _Alloc& __a) throw () > { > const size_type __size = sizeof(_Rep_base) + > (this->_M_capacity + 1) * sizeof(_CharT); > _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > _M_leak_hard() > { > > if (_M_rep() == &_S_empty_rep()) > return; > > if (_M_rep()->_M_is_shared()) > _M_mutate(0, 0, 0); > _M_rep()->_M_set_leaked(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > _M_mutate(size_type __pos, size_type __len1, size_type __len2) > { > const size_type __old_size = this->size(); > const size_type __new_size = __old_size + __len2 - __len1; > const size_type __how_much = __old_size - __pos - __len1; > > if (__new_size > this->capacity() || _M_rep()->_M_is_shared()) > { > > const allocator_type __a = get_allocator(); > _Rep* __r = _Rep::_S_create(__new_size, this->capacity(), __a); > > if (__pos) > _M_copy(__r->_M_refdata(), _M_data(), __pos); > if (__how_much) > _M_copy(__r->_M_refdata() + __pos + __len2, > _M_data() + __pos + __len1, __how_much); > > _M_rep()->_M_dispose(__a); > _M_data(__r->_M_refdata()); > } > else if (__how_much && __len1 != __len2) > { > > _M_move(_M_data() + __pos + __len2, > _M_data() + __pos + __len1, __how_much); > } > _M_rep()->_M_set_length_and_sharable(__new_size); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > reserve(size_type __res) > { > if (__res != this->capacity() || _M_rep()->_M_is_shared()) > { > > if (__res < this->size()) > __res = this->size(); > const allocator_type __a = get_allocator(); > _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size()); > _M_rep()->_M_dispose(__a); > _M_data(__tmp); > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > swap(basic_string& __s) > { > if (_M_rep()->_M_is_leaked()) > _M_rep()->_M_set_sharable(); > if (__s._M_rep()->_M_is_leaked()) > __s._M_rep()->_M_set_sharable(); > if (this->get_allocator() == __s.get_allocator()) > { > _CharT* __tmp = _M_data(); > _M_data(__s._M_data()); > __s._M_data(__tmp); > } > > else > { > const basic_string __tmp1(_M_ibegin(), _M_iend(), > __s.get_allocator()); > const basic_string __tmp2(__s._M_ibegin(), __s._M_iend(), > this->get_allocator()); > *this = __tmp2; > __s = __tmp1; > } > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::_Rep* > basic_string<_CharT, _Traits, _Alloc>::_Rep:: > _S_create(size_type __capacity, size_type __old_capacity, > const _Alloc& __alloc) > { > > > if (__capacity > _S_max_size) > __throw_length_error(("basic_string::_S_create")); ># 577 "/usr/include/c++/4.8.2/bits/basic_string.tcc" 3 > const size_type __pagesize = 4096; > const size_type __malloc_header_size = 4 * sizeof(void*); > > > > > > > > if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) > __capacity = 2 * __old_capacity; > > > > > size_type __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep); > > const size_type __adj_size = __size + __malloc_header_size; > if (__adj_size > __pagesize && __capacity > __old_capacity) > { > const size_type __extra = __pagesize - __adj_size % __pagesize; > __capacity += __extra / sizeof(_CharT); > > if (__capacity > _S_max_size) > __capacity = _S_max_size; > __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep); > } > > > > void* __place = _Raw_bytes_alloc(__alloc).allocate(__size); > _Rep *__p = new (__place) _Rep; > __p->_M_capacity = __capacity; > > > > > > > > __p->_M_set_sharable(); > return __p; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > _CharT* > basic_string<_CharT, _Traits, _Alloc>::_Rep:: > _M_clone(const _Alloc& __alloc, size_type __res) > { > > const size_type __requested_cap = this->_M_length + __res; > _Rep* __r = _Rep::_S_create(__requested_cap, this->_M_capacity, > __alloc); > if (this->_M_length) > _M_copy(__r->_M_refdata(), _M_refdata(), this->_M_length); > > __r->_M_set_length_and_sharable(this->_M_length); > return __r->_M_refdata(); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > void > basic_string<_CharT, _Traits, _Alloc>:: > resize(size_type __n, _CharT __c) > { > const size_type __size = this->size(); > _M_check_length(__size, __n, "basic_string::resize"); > if (__size < __n) > this->append(__n - __size, __c); > else if (__n < __size) > this->erase(__n); > > } > > template<typename _CharT, typename _Traits, typename _Alloc> > template<typename _InputIterator> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, > _InputIterator __k2, __false_type) > { > const basic_string __s(__k1, __k2); > const size_type __n1 = __i2 - __i1; > _M_check_length(__n1, __s.size(), "basic_string::_M_replace_dispatch"); > return _M_replace_safe(__i1 - _M_ibegin(), __n1, __s._M_data(), > __s.size()); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, > _CharT __c) > { > _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); > _M_mutate(__pos1, __n1, __n2); > if (__n2) > _M_assign(_M_data() + __pos1, __n2, __c); > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc>& > basic_string<_CharT, _Traits, _Alloc>:: > _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s, > size_type __n2) > { > _M_mutate(__pos1, __n1, __n2); > if (__n2) > _M_copy(_M_data() + __pos1, __s, __n2); > return *this; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc> > operator+(const _CharT* __lhs, > const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { > ; > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > const __size_type __len = _Traits::length(__lhs); > __string_type __str; > __str.reserve(__len + __rhs.size()); > __str.append(__lhs, __len); > __str.append(__rhs); > return __str; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_string<_CharT, _Traits, _Alloc> > operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) > { > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > __string_type __str; > const __size_type __len = __rhs.size(); > __str.reserve(__len + 1); > __str.append(__size_type(1), __lhs); > __str.append(__rhs); > return __str; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > copy(_CharT* __s, size_type __n, size_type __pos) const > { > _M_check(__pos, "basic_string::copy"); > __n = _M_limit(__pos, __n); > ; > if (__n) > _M_copy(__s, _M_data() + __pos, __n); > > return __n; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > const size_type __size = this->size(); > const _CharT* __data = _M_data(); > > if (__n == 0) > return __pos <= __size ? __pos : npos; > > if (__n <= __size) > { > for (; __pos <= __size - __n; ++__pos) > if (traits_type::eq(__data[__pos], __s[0]) > && traits_type::compare(__data + __pos + 1, > __s + 1, __n - 1) == 0) > return __pos; > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find(_CharT __c, size_type __pos) const > { > size_type __ret = npos; > const size_type __size = this->size(); > if (__pos < __size) > { > const _CharT* __data = _M_data(); > const size_type __n = __size - __pos; > const _CharT* __p = traits_type::find(__data + __pos, __n, __c); > if (__p) > __ret = __p - __data; > } > return __ret; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > rfind(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > const size_type __size = this->size(); > if (__n <= __size) > { > __pos = std::min(size_type(__size - __n), __pos); > const _CharT* __data = _M_data(); > do > { > if (traits_type::compare(__data + __pos, __s, __n) == 0) > return __pos; > } > while (__pos-- > 0); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > rfind(_CharT __c, size_type __pos) const > { > size_type __size = this->size(); > if (__size) > { > if (--__size > __pos) > __size = __pos; > for (++__size; __size-- > 0; ) > if (traits_type::eq(_M_data()[__size], __c)) > return __size; > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_first_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > for (; __n && __pos < this->size(); ++__pos) > { > const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); > if (__p) > return __pos; > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_last_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > size_type __size = this->size(); > if (__size && __n) > { > if (--__size > __pos) > __size = __pos; > do > { > if (traits_type::find(__s, __n, _M_data()[__size])) > return __size; > } > while (__size-- != 0); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > for (; __pos < this->size(); ++__pos) > if (!traits_type::find(__s, __n, _M_data()[__pos])) > return __pos; > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_first_not_of(_CharT __c, size_type __pos) const > { > for (; __pos < this->size(); ++__pos) > if (!traits_type::eq(_M_data()[__pos], __c)) > return __pos; > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const > { > ; > size_type __size = this->size(); > if (__size) > { > if (--__size > __pos) > __size = __pos; > do > { > if (!traits_type::find(__s, __n, _M_data()[__size])) > return __size; > } > while (__size--); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > typename basic_string<_CharT, _Traits, _Alloc>::size_type > basic_string<_CharT, _Traits, _Alloc>:: > find_last_not_of(_CharT __c, size_type __pos) const > { > size_type __size = this->size(); > if (__size) > { > if (--__size > __pos) > __size = __pos; > do > { > if (!traits_type::eq(_M_data()[__size], __c)) > return __size; > } > while (__size--); > } > return npos; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string<_CharT, _Traits, _Alloc>:: > compare(size_type __pos, size_type __n, const basic_string& __str) const > { > _M_check(__pos, "basic_string::compare"); > __n = _M_limit(__pos, __n); > const size_type __osize = __str.size(); > const size_type __len = std::min(__n, __osize); > int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); > if (!__r) > __r = _S_compare(__n, __osize); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string<_CharT, _Traits, _Alloc>:: > compare(size_type __pos1, size_type __n1, const basic_string& __str, > size_type __pos2, size_type __n2) const > { > _M_check(__pos1, "basic_string::compare"); > __str._M_check(__pos2, "basic_string::compare"); > __n1 = _M_limit(__pos1, __n1); > __n2 = __str._M_limit(__pos2, __n2); > const size_type __len = std::min(__n1, __n2); > int __r = traits_type::compare(_M_data() + __pos1, > __str.data() + __pos2, __len); > if (!__r) > __r = _S_compare(__n1, __n2); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string<_CharT, _Traits, _Alloc>:: > compare(const _CharT* __s) const > { > ; > const size_type __size = this->size(); > const size_type __osize = traits_type::length(__s); > const size_type __len = std::min(__size, __osize); > int __r = traits_type::compare(_M_data(), __s, __len); > if (!__r) > __r = _S_compare(__size, __osize); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string <_CharT, _Traits, _Alloc>:: > compare(size_type __pos, size_type __n1, const _CharT* __s) const > { > ; > _M_check(__pos, "basic_string::compare"); > __n1 = _M_limit(__pos, __n1); > const size_type __osize = traits_type::length(__s); > const size_type __len = std::min(__n1, __osize); > int __r = traits_type::compare(_M_data() + __pos, __s, __len); > if (!__r) > __r = _S_compare(__n1, __osize); > return __r; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > int > basic_string <_CharT, _Traits, _Alloc>:: > compare(size_type __pos, size_type __n1, const _CharT* __s, > size_type __n2) const > { > ; > _M_check(__pos, "basic_string::compare"); > __n1 = _M_limit(__pos, __n1); > const size_type __len = std::min(__n1, __n2); > int __r = traits_type::compare(_M_data() + __pos, __s, __len); > if (!__r) > __r = _S_compare(__n1, __n2); > return __r; > } > > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __in, > basic_string<_CharT, _Traits, _Alloc>& __str) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __istream_type::ios_base __ios_base; > typedef typename __istream_type::int_type __int_type; > typedef typename __string_type::size_type __size_type; > typedef ctype<_CharT> __ctype_type; > typedef typename __ctype_type::ctype_base __ctype_base; > > __size_type __extracted = 0; > typename __ios_base::iostate __err = __ios_base::goodbit; > typename __istream_type::sentry __cerb(__in, false); > if (__cerb) > { > try > { > > __str.erase(); > _CharT __buf[128]; > __size_type __len = 0; > const streamsize __w = __in.width(); > const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) > : __str.max_size(); > const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); > const __int_type __eof = _Traits::eof(); > __int_type __c = __in.rdbuf()->sgetc(); > > while (__extracted < __n > && !_Traits::eq_int_type(__c, __eof) > && !__ct.is(__ctype_base::space, > _Traits::to_char_type(__c))) > { > if (__len == sizeof(__buf) / sizeof(_CharT)) > { > __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); > __len = 0; > } > __buf[__len++] = _Traits::to_char_type(__c); > ++__extracted; > __c = __in.rdbuf()->snextc(); > } > __str.append(__buf, __len); > > if (_Traits::eq_int_type(__c, __eof)) > __err |= __ios_base::eofbit; > __in.width(0); > } > catch(__cxxabiv1::__forced_unwind&) > { > __in._M_setstate(__ios_base::badbit); > throw; > } > catch(...) > { > > > > __in._M_setstate(__ios_base::badbit); > } > } > > if (!__extracted) > __err |= __ios_base::failbit; > if (__err) > __in.setstate(__err); > return __in; > } > > template<typename _CharT, typename _Traits, typename _Alloc> > basic_istream<_CharT, _Traits>& > getline(basic_istream<_CharT, _Traits>& __in, > basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef typename __istream_type::ios_base __ios_base; > typedef typename __istream_type::int_type __int_type; > typedef typename __string_type::size_type __size_type; > > __size_type __extracted = 0; > const __size_type __n = __str.max_size(); > typename __ios_base::iostate __err = __ios_base::goodbit; > typename __istream_type::sentry __cerb(__in, true); > if (__cerb) > { > try > { > __str.erase(); > const __int_type __idelim = _Traits::to_int_type(__delim); > const __int_type __eof = _Traits::eof(); > __int_type __c = __in.rdbuf()->sgetc(); > > while (__extracted < __n > && !_Traits::eq_int_type(__c, __eof) > && !_Traits::eq_int_type(__c, __idelim)) > { > __str += _Traits::to_char_type(__c); > ++__extracted; > __c = __in.rdbuf()->snextc(); > } > > if (_Traits::eq_int_type(__c, __eof)) > __err |= __ios_base::eofbit; > else if (_Traits::eq_int_type(__c, __idelim)) > { > ++__extracted; > __in.rdbuf()->sbumpc(); > } > else > __err |= __ios_base::failbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > __in._M_setstate(__ios_base::badbit); > throw; > } > catch(...) > { > > > > __in._M_setstate(__ios_base::badbit); > } > } > if (!__extracted) > __err |= __ios_base::failbit; > if (__err) > __in.setstate(__err); > return __in; > } > > > > > extern template class basic_string<char>; > extern template > basic_istream<char>& > operator>>(basic_istream<char>&, string&); > extern template > basic_ostream<char>& > operator<<(basic_ostream<char>&, const string&); > extern template > basic_istream<char>& > getline(basic_istream<char>&, string&, char); > extern template > basic_istream<char>& > getline(basic_istream<char>&, string&); > > > extern template class basic_string<wchar_t>; > extern template > basic_istream<wchar_t>& > operator>>(basic_istream<wchar_t>&, wstring&); > extern template > basic_ostream<wchar_t>& > operator<<(basic_ostream<wchar_t>&, const wstring&); > extern template > basic_istream<wchar_t>& > getline(basic_istream<wchar_t>&, wstring&, wchar_t); > extern template > basic_istream<wchar_t>& > getline(basic_istream<wchar_t>&, wstring&); > > > > >} ># 54 "/usr/include/c++/4.8.2/string" 2 3 ># 41 "/usr/include/c++/4.8.2/bits/locale_classes.h" 2 3 > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 62 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > class locale > { > public: > > > typedef int category; > > > class facet; > class id; > class _Impl; > > friend class facet; > friend class _Impl; > > template<typename _Facet> > friend bool > has_facet(const locale&) throw(); > > template<typename _Facet> > friend const _Facet& > use_facet(const locale&); > > template<typename _Cache> > friend struct __use_cache; ># 98 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > static const category none = 0; > static const category ctype = 1L << 0; > static const category numeric = 1L << 1; > static const category collate = 1L << 2; > static const category time = 1L << 3; > static const category monetary = 1L << 4; > static const category messages = 1L << 5; > static const category all = (ctype | numeric | collate | > time | monetary | messages); ># 117 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale() throw(); ># 126 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale(const locale& __other) throw(); ># 136 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > locale(const char* __s); ># 151 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale(const locale& __base, const char* __s, category __cat); ># 164 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > locale(const locale& __base, const locale& __add, category __cat); ># 177 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _Facet> > locale(const locale& __other, _Facet* __f); > > > ~locale() throw(); ># 191 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > const locale& > operator=(const locale& __other) throw(); ># 206 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _Facet> > locale > combine(const locale& __other) const; > > > > > > > string > name() const; ># 225 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > bool > operator==(const locale& __other) const throw(); > > > > > > > > bool > operator!=(const locale& __other) const throw() > { return !(this->operator==(__other)); } ># 253 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _Char, typename _Traits, typename _Alloc> > bool > operator()(const basic_string<_Char, _Traits, _Alloc>& __s1, > const basic_string<_Char, _Traits, _Alloc>& __s2) const; ># 269 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > static locale > global(const locale& __loc); > > > > > static const locale& > classic(); > > private: > > _Impl* _M_impl; > > > static _Impl* _S_classic; > > > static _Impl* _S_global; > > > > > > static const char* const* const _S_categories; ># 304 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > enum { _S_categories_size = 6 + 6 }; > > > static __gthread_once_t _S_once; > > > explicit > locale(_Impl*) throw(); > > static void > _S_initialize(); > > static void > _S_initialize_once() throw(); > > static category > _S_normalize_category(category); > > void > _M_coalesce(const locale& __base, const locale& __add, category __cat); > }; ># 338 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > class locale::facet > { > private: > friend class locale; > friend class locale::_Impl; > > mutable _Atomic_word _M_refcount; > > > static __c_locale _S_c_locale; > > > static const char _S_c_name[2]; > > > static __gthread_once_t _S_once; > > > static void > _S_initialize_once(); > > protected: ># 369 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0) > { } > > > virtual > ~facet(); > > static void > _S_create_c_locale(__c_locale& __cloc, const char* __s, > __c_locale __old = 0); > > static __c_locale > _S_clone_c_locale(__c_locale& __cloc) throw(); > > static void > _S_destroy_c_locale(__c_locale& __cloc); > > static __c_locale > _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s); > > > > static __c_locale > _S_get_c_locale(); > > __attribute__ ((__const__)) static const char* > _S_get_c_name() throw(); > > private: > void > _M_add_reference() const throw() > { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } > > void > _M_remove_reference() const throw() > { > > ; > if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) > { > ; > try > { delete this; } > catch(...) > { } > } > } > > facet(const facet&); > > facet& > operator=(const facet&); > }; ># 436 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > class locale::id > { > private: > friend class locale; > friend class locale::_Impl; > > template<typename _Facet> > friend const _Facet& > use_facet(const locale&); > > template<typename _Facet> > friend bool > has_facet(const locale&) throw(); > > > > > mutable size_t _M_index; > > > static _Atomic_word _S_refcount; > > void > operator=(const id&); > > id(const id&); > > public: > > > > id() { } > > size_t > _M_id() const throw(); > }; > > > > class locale::_Impl > { > public: > > friend class locale; > friend class locale::facet; > > template<typename _Facet> > friend bool > has_facet(const locale&) throw(); > > template<typename _Facet> > friend const _Facet& > use_facet(const locale&); > > template<typename _Cache> > friend struct __use_cache; > > private: > > _Atomic_word _M_refcount; > const facet** _M_facets; > size_t _M_facets_size; > const facet** _M_caches; > char** _M_names; > static const locale::id* const _S_id_ctype[]; > static const locale::id* const _S_id_numeric[]; > static const locale::id* const _S_id_collate[]; > static const locale::id* const _S_id_time[]; > static const locale::id* const _S_id_monetary[]; > static const locale::id* const _S_id_messages[]; > static const locale::id* const* const _S_facet_categories[]; > > void > _M_add_reference() throw() > { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } > > void > _M_remove_reference() throw() > { > > ; > if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) > { > ; > try > { delete this; } > catch(...) > { } > } > } > > _Impl(const _Impl&, size_t); > _Impl(const char*, size_t); > _Impl(size_t) throw(); > > ~_Impl() throw(); > > _Impl(const _Impl&); > > void > operator=(const _Impl&); > > bool > _M_check_same_name() > { > bool __ret = true; > if (_M_names[1]) > > for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i) > __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0; > return __ret; > } > > void > _M_replace_categories(const _Impl*, category); > > void > _M_replace_category(const _Impl*, const locale::id* const*); > > void > _M_replace_facet(const _Impl*, const locale::id*); > > void > _M_install_facet(const locale::id*, const facet*); > > template<typename _Facet> > void > _M_init_facet(_Facet* __facet) > { _M_install_facet(&_Facet::id, __facet); } > > void > _M_install_cache(const facet*, size_t); > }; ># 583 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > template<typename _CharT> > class collate : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > > protected: > > > __c_locale _M_c_locale_collate; > > public: > > static locale::id id; ># 610 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > collate(size_t __refs = 0) > : facet(__refs), _M_c_locale_collate(_S_get_c_locale()) > { } ># 624 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > explicit > collate(__c_locale __cloc, size_t __refs = 0) > : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc)) > { } ># 641 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > int > compare(const _CharT* __lo1, const _CharT* __hi1, > const _CharT* __lo2, const _CharT* __hi2) const > { return this->do_compare(__lo1, __hi1, __lo2, __hi2); } ># 660 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > string_type > transform(const _CharT* __lo, const _CharT* __hi) const > { return this->do_transform(__lo, __hi); } ># 674 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > long > hash(const _CharT* __lo, const _CharT* __hi) const > { return this->do_hash(__lo, __hi); } > > > int > _M_compare(const _CharT*, const _CharT*) const throw(); > > size_t > _M_transform(_CharT*, const _CharT*, size_t) const throw(); > > protected: > > virtual > ~collate() > { _S_destroy_c_locale(_M_c_locale_collate); } ># 703 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > virtual int > do_compare(const _CharT* __lo1, const _CharT* __hi1, > const _CharT* __lo2, const _CharT* __hi2) const; ># 717 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > virtual string_type > do_transform(const _CharT* __lo, const _CharT* __hi) const; ># 730 "/usr/include/c++/4.8.2/bits/locale_classes.h" 3 > virtual long > do_hash(const _CharT* __lo, const _CharT* __hi) const; > }; > > template<typename _CharT> > locale::id collate<_CharT>::id; > > > template<> > int > collate<char>::_M_compare(const char*, const char*) const throw(); > > template<> > size_t > collate<char>::_M_transform(char*, const char*, size_t) const throw(); > > > template<> > int > collate<wchar_t>::_M_compare(const wchar_t*, const wchar_t*) const throw(); > > template<> > size_t > collate<wchar_t>::_M_transform(wchar_t*, const wchar_t*, size_t) const throw(); > > > > template<typename _CharT> > class collate_byname : public collate<_CharT> > { > public: > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > > explicit > collate_byname(const char* __s, size_t __refs = 0) > : collate<_CharT>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > this->_S_destroy_c_locale(this->_M_c_locale_collate); > this->_S_create_c_locale(this->_M_c_locale_collate, __s); > } > } > > protected: > virtual > ~collate_byname() { } > }; > > >} > ># 1 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > ># 38 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _Facet> > locale:: > locale(const locale& __other, _Facet* __f) > { > _M_impl = new _Impl(*__other._M_impl, 1); > > try > { _M_impl->_M_install_facet(&_Facet::id, __f); } > catch(...) > { > _M_impl->_M_remove_reference(); > throw; > } > delete [] _M_impl->_M_names[0]; > _M_impl->_M_names[0] = 0; > } > > template<typename _Facet> > locale > locale:: > combine(const locale& __other) const > { > _Impl* __tmp = new _Impl(*_M_impl, 1); > try > { > __tmp->_M_replace_facet(__other._M_impl, &_Facet::id); > } > catch(...) > { > __tmp->_M_remove_reference(); > throw; > } > return locale(__tmp); > } > > template<typename _CharT, typename _Traits, typename _Alloc> > bool > locale:: > operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1, > const basic_string<_CharT, _Traits, _Alloc>& __s2) const > { > typedef std::collate<_CharT> __collate_type; > const __collate_type& __collate = use_facet<__collate_type>(*this); > return (__collate.compare(__s1.data(), __s1.data() + __s1.length(), > __s2.data(), __s2.data() + __s2.length()) < 0); > } ># 102 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > template<typename _Facet> > bool > has_facet(const locale& __loc) throw() > { > const size_t __i = _Facet::id._M_id(); > const locale::facet** __facets = __loc._M_impl->_M_facets; > return (__i < __loc._M_impl->_M_facets_size > > && dynamic_cast<const _Facet*>(__facets[__i])); > > > > } ># 130 "/usr/include/c++/4.8.2/bits/locale_classes.tcc" 3 > template<typename _Facet> > const _Facet& > use_facet(const locale& __loc) > { > const size_t __i = _Facet::id._M_id(); > const locale::facet** __facets = __loc._M_impl->_M_facets; > if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) > __throw_bad_cast(); > > return dynamic_cast<const _Facet&>(*__facets[__i]); > > > > } > > > > template<typename _CharT> > int > collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw () > { return 0; } > > > template<typename _CharT> > size_t > collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw () > { return 0; } > > template<typename _CharT> > int > collate<_CharT>:: > do_compare(const _CharT* __lo1, const _CharT* __hi1, > const _CharT* __lo2, const _CharT* __hi2) const > { > > > const string_type __one(__lo1, __hi1); > const string_type __two(__lo2, __hi2); > > const _CharT* __p = __one.c_str(); > const _CharT* __pend = __one.data() + __one.length(); > const _CharT* __q = __two.c_str(); > const _CharT* __qend = __two.data() + __two.length(); > > > > > for (;;) > { > const int __res = _M_compare(__p, __q); > if (__res) > return __res; > > __p += char_traits<_CharT>::length(__p); > __q += char_traits<_CharT>::length(__q); > if (__p == __pend && __q == __qend) > return 0; > else if (__p == __pend) > return -1; > else if (__q == __qend) > return 1; > > __p++; > __q++; > } > } > > template<typename _CharT> > typename collate<_CharT>::string_type > collate<_CharT>:: > do_transform(const _CharT* __lo, const _CharT* __hi) const > { > string_type __ret; > > > const string_type __str(__lo, __hi); > > const _CharT* __p = __str.c_str(); > const _CharT* __pend = __str.data() + __str.length(); > > size_t __len = (__hi - __lo) * 2; > > _CharT* __c = new _CharT[__len]; > > try > { > > > > for (;;) > { > > size_t __res = _M_transform(__c, __p, __len); > > > if (__res >= __len) > { > __len = __res + 1; > delete [] __c, __c = 0; > __c = new _CharT[__len]; > __res = _M_transform(__c, __p, __len); > } > > __ret.append(__c, __res); > __p += char_traits<_CharT>::length(__p); > if (__p == __pend) > break; > > __p++; > __ret.push_back(_CharT()); > } > } > catch(...) > { > delete [] __c; > throw; > } > > delete [] __c; > > return __ret; > } > > template<typename _CharT> > long > collate<_CharT>:: > do_hash(const _CharT* __lo, const _CharT* __hi) const > { > unsigned long __val = 0; > for (; __lo < __hi; ++__lo) > __val = > *__lo + ((__val << 7) > | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>:: > __digits - 7))); > return static_cast<long>(__val); > } > > > > > extern template class collate<char>; > extern template class collate_byname<char>; > > extern template > const collate<char>& > use_facet<collate<char> >(const locale&); > > extern template > bool > has_facet<collate<char> >(const locale&); > > > extern template class collate<wchar_t>; > extern template class collate_byname<wchar_t>; > > extern template > const collate<wchar_t>& > use_facet<collate<wchar_t> >(const locale&); > > extern template > bool > has_facet<collate<wchar_t> >(const locale&); > > > > >} ># 788 "/usr/include/c++/4.8.2/bits/locale_classes.h" 2 3 ># 40 "/usr/include/c++/4.8.2/locale" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/locale_facets.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > ># 1 "/usr/include/c++/4.8.2/cwctype" 1 3 ># 39 "/usr/include/c++/4.8.2/cwctype" 3 > ># 40 "/usr/include/c++/4.8.2/cwctype" 3 ># 50 "/usr/include/c++/4.8.2/cwctype" 3 ># 1 "/usr/include/wctype.h" 1 3 4 ># 33 "/usr/include/wctype.h" 3 4 ># 1 "/usr/include/wchar.h" 1 3 4 ># 34 "/usr/include/wctype.h" 2 3 4 ># 49 "/usr/include/wctype.h" 3 4 > > > >typedef unsigned long int wctype_t; > ># 71 "/usr/include/wctype.h" 3 4 >enum >{ > __ISwupper = 0, > __ISwlower = 1, > __ISwalpha = 2, > __ISwdigit = 3, > __ISwxdigit = 4, > __ISwspace = 5, > __ISwprint = 6, > __ISwgraph = 7, > __ISwblank = 8, > __ISwcntrl = 9, > __ISwpunct = 10, > __ISwalnum = 11, > > _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))), > _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))), > _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))), > _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))), > _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))), > _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))), > _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))), > _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))), > _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))), > _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))), > _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))), > _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24)))) >}; > > > >extern "C" { > > > > > > > > >extern int iswalnum (wint_t __wc) throw (); > > > > > >extern int iswalpha (wint_t __wc) throw (); > > >extern int iswcntrl (wint_t __wc) throw (); > > > >extern int iswdigit (wint_t __wc) throw (); > > > >extern int iswgraph (wint_t __wc) throw (); > > > > >extern int iswlower (wint_t __wc) throw (); > > >extern int iswprint (wint_t __wc) throw (); > > > > >extern int iswpunct (wint_t __wc) throw (); > > > > >extern int iswspace (wint_t __wc) throw (); > > > > >extern int iswupper (wint_t __wc) throw (); > > > > >extern int iswxdigit (wint_t __wc) throw (); > > > > > >extern int iswblank (wint_t __wc) throw (); ># 171 "/usr/include/wctype.h" 3 4 >extern wctype_t wctype (const char *__property) throw (); > > > >extern int iswctype (wint_t __wc, wctype_t __desc) throw (); > > > > > > > > > > >typedef const __int32_t *wctrans_t; > > > > > > > >extern wint_t towlower (wint_t __wc) throw (); > > >extern wint_t towupper (wint_t __wc) throw (); > > >} ># 213 "/usr/include/wctype.h" 3 4 >extern "C" { > > > > >extern wctrans_t wctrans (const char *__property) throw (); > > >extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw (); > > > > > > > > >extern int iswalnum_l (wint_t __wc, __locale_t __locale) throw (); > > > > > >extern int iswalpha_l (wint_t __wc, __locale_t __locale) throw (); > > >extern int iswcntrl_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern int iswdigit_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern int iswgraph_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswlower_l (wint_t __wc, __locale_t __locale) throw (); > > >extern int iswprint_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswpunct_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswspace_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswupper_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswxdigit_l (wint_t __wc, __locale_t __locale) throw (); > > > > >extern int iswblank_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern wctype_t wctype_l (const char *__property, __locale_t __locale) > throw (); > > > >extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale) > throw (); > > > > > > > >extern wint_t towlower_l (wint_t __wc, __locale_t __locale) throw (); > > >extern wint_t towupper_l (wint_t __wc, __locale_t __locale) throw (); > > > >extern wctrans_t wctrans_l (const char *__property, __locale_t __locale) > throw (); > > >extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, > __locale_t __locale) throw (); > > > >} ># 51 "/usr/include/c++/4.8.2/cwctype" 2 3 ># 80 "/usr/include/c++/4.8.2/cwctype" 3 >namespace std >{ > using ::wctrans_t; > using ::wctype_t; > using ::wint_t; > > using ::iswalnum; > using ::iswalpha; > > using ::iswblank; > > using ::iswcntrl; > using ::iswctype; > using ::iswdigit; > using ::iswgraph; > using ::iswlower; > using ::iswprint; > using ::iswpunct; > using ::iswspace; > using ::iswupper; > using ::iswxdigit; > using ::towctrans; > using ::towlower; > using ::towupper; > using ::wctrans; > using ::wctype; >} ># 40 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 1 "/usr/include/c++/4.8.2/cctype" 1 3 ># 39 "/usr/include/c++/4.8.2/cctype" 3 > ># 40 "/usr/include/c++/4.8.2/cctype" 3 ># 41 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_base.h" 1 3 ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_base.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > struct ctype_base > { > > typedef const int* __to_type; > > > > typedef unsigned short mask; > static const mask upper = _ISupper; > static const mask lower = _ISlower; > static const mask alpha = _ISalpha; > static const mask digit = _ISdigit; > static const mask xdigit = _ISxdigit; > static const mask space = _ISspace; > static const mask print = _ISprint; > static const mask graph = _ISalpha | _ISdigit | _ISpunct; > static const mask cntrl = _IScntrl; > static const mask punct = _ISpunct; > static const mask alnum = _ISalpha | _ISdigit; > }; > > >} ># 42 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > ># 1 "/usr/include/c++/4.8.2/bits/ios_base.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > > enum _Ios_Fmtflags > { > _S_boolalpha = 1L << 0, > _S_dec = 1L << 1, > _S_fixed = 1L << 2, > _S_hex = 1L << 3, > _S_internal = 1L << 4, > _S_left = 1L << 5, > _S_oct = 1L << 6, > _S_right = 1L << 7, > _S_scientific = 1L << 8, > _S_showbase = 1L << 9, > _S_showpoint = 1L << 10, > _S_showpos = 1L << 11, > _S_skipws = 1L << 12, > _S_unitbuf = 1L << 13, > _S_uppercase = 1L << 14, > _S_adjustfield = _S_left | _S_right | _S_internal, > _S_basefield = _S_dec | _S_oct | _S_hex, > _S_floatfield = _S_scientific | _S_fixed, > _S_ios_fmtflags_end = 1L << 16 > }; > > inline _Ios_Fmtflags > operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) > { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); } > > inline _Ios_Fmtflags > operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) > { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); } > > inline _Ios_Fmtflags > operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) > { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); } > > inline _Ios_Fmtflags > operator~(_Ios_Fmtflags __a) > { return _Ios_Fmtflags(~static_cast<int>(__a)); } > > inline const _Ios_Fmtflags& > operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) > { return __a = __a | __b; } > > inline const _Ios_Fmtflags& > operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) > { return __a = __a & __b; } > > inline const _Ios_Fmtflags& > operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) > { return __a = __a ^ __b; } > > > enum _Ios_Openmode > { > _S_app = 1L << 0, > _S_ate = 1L << 1, > _S_bin = 1L << 2, > _S_in = 1L << 3, > _S_out = 1L << 4, > _S_trunc = 1L << 5, > _S_ios_openmode_end = 1L << 16 > }; > > inline _Ios_Openmode > operator&(_Ios_Openmode __a, _Ios_Openmode __b) > { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); } > > inline _Ios_Openmode > operator|(_Ios_Openmode __a, _Ios_Openmode __b) > { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); } > > inline _Ios_Openmode > operator^(_Ios_Openmode __a, _Ios_Openmode __b) > { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); } > > inline _Ios_Openmode > operator~(_Ios_Openmode __a) > { return _Ios_Openmode(~static_cast<int>(__a)); } > > inline const _Ios_Openmode& > operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) > { return __a = __a | __b; } > > inline const _Ios_Openmode& > operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) > { return __a = __a & __b; } > > inline const _Ios_Openmode& > operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) > { return __a = __a ^ __b; } > > > enum _Ios_Iostate > { > _S_goodbit = 0, > _S_badbit = 1L << 0, > _S_eofbit = 1L << 1, > _S_failbit = 1L << 2, > _S_ios_iostate_end = 1L << 16 > }; > > inline _Ios_Iostate > operator&(_Ios_Iostate __a, _Ios_Iostate __b) > { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); } > > inline _Ios_Iostate > operator|(_Ios_Iostate __a, _Ios_Iostate __b) > { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); } > > inline _Ios_Iostate > operator^(_Ios_Iostate __a, _Ios_Iostate __b) > { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); } > > inline _Ios_Iostate > operator~(_Ios_Iostate __a) > { return _Ios_Iostate(~static_cast<int>(__a)); } > > inline const _Ios_Iostate& > operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) > { return __a = __a | __b; } > > inline const _Ios_Iostate& > operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) > { return __a = __a & __b; } > > inline const _Ios_Iostate& > operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) > { return __a = __a ^ __b; } > > > enum _Ios_Seekdir > { > _S_beg = 0, > _S_cur = 1, > _S_end = 2, > _S_ios_seekdir_end = 1L << 16 > }; ># 199 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > class ios_base > { > public: > > > > > > > > class failure : public exception > { > public: > > > explicit > failure(const string& __str) throw(); > > > > virtual > ~failure() throw(); > > virtual const char* > what() const throw(); > > private: > string _M_msg; > }; ># 255 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Fmtflags fmtflags; > > > static const fmtflags boolalpha = _S_boolalpha; > > > static const fmtflags dec = _S_dec; > > > static const fmtflags fixed = _S_fixed; > > > static const fmtflags hex = _S_hex; > > > > > static const fmtflags internal = _S_internal; > > > > static const fmtflags left = _S_left; > > > static const fmtflags oct = _S_oct; > > > > static const fmtflags right = _S_right; > > > static const fmtflags scientific = _S_scientific; > > > > static const fmtflags showbase = _S_showbase; > > > > static const fmtflags showpoint = _S_showpoint; > > > static const fmtflags showpos = _S_showpos; > > > static const fmtflags skipws = _S_skipws; > > > static const fmtflags unitbuf = _S_unitbuf; > > > > static const fmtflags uppercase = _S_uppercase; > > > static const fmtflags adjustfield = _S_adjustfield; > > > static const fmtflags basefield = _S_basefield; > > > static const fmtflags floatfield = _S_floatfield; ># 330 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Iostate iostate; > > > > static const iostate badbit = _S_badbit; > > > static const iostate eofbit = _S_eofbit; > > > > > static const iostate failbit = _S_failbit; > > > static const iostate goodbit = _S_goodbit; ># 361 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Openmode openmode; > > > static const openmode app = _S_app; > > > static const openmode ate = _S_ate; > > > > > static const openmode binary = _S_bin; > > > static const openmode in = _S_in; > > > static const openmode out = _S_out; > > > static const openmode trunc = _S_trunc; ># 393 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef _Ios_Seekdir seekdir; > > > static const seekdir beg = _S_beg; > > > static const seekdir cur = _S_cur; > > > static const seekdir end = _S_end; > > > typedef int io_state; > typedef int open_mode; > typedef int seek_dir; > > typedef std::streampos streampos; > typedef std::streamoff streamoff; ># 419 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > enum event > { > erase_event, > imbue_event, > copyfmt_event > }; ># 436 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > typedef void (*event_callback) (event __e, ios_base& __b, int __i); ># 448 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > void > register_callback(event_callback __fn, int __index); > > protected: > streamsize _M_precision; > streamsize _M_width; > fmtflags _M_flags; > iostate _M_exception; > iostate _M_streambuf_state; > > > > struct _Callback_list > { > > _Callback_list* _M_next; > ios_base::event_callback _M_fn; > int _M_index; > _Atomic_word _M_refcount; > > _Callback_list(ios_base::event_callback __fn, int __index, > _Callback_list* __cb) > : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } > > void > _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } > > > int > _M_remove_reference() > { > > ; > int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); > if (__res == 0) > { > ; > } > return __res; > } > }; > > _Callback_list* _M_callbacks; > > void > _M_call_callbacks(event __ev) throw(); > > void > _M_dispose_callbacks(void) throw(); > > > struct _Words > { > void* _M_pword; > long _M_iword; > _Words() : _M_pword(0), _M_iword(0) { } > }; > > > _Words _M_word_zero; > > > > enum { _S_local_word_size = 8 }; > _Words _M_local_word[_S_local_word_size]; > > > int _M_word_size; > _Words* _M_word; > > _Words& > _M_grow_words(int __index, bool __iword); > > > locale _M_ios_locale; > > void > _M_init() throw(); > > public: > > > > > > class Init > { > friend class ios_base; > public: > Init(); > ~Init(); > > private: > static _Atomic_word _S_refcount; > static bool _S_synced_with_stdio; > }; > > > > > > > fmtflags > flags() const > { return _M_flags; } ># 561 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > fmtflags > flags(fmtflags __fmtfl) > { > fmtflags __old = _M_flags; > _M_flags = __fmtfl; > return __old; > } ># 577 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > fmtflags > setf(fmtflags __fmtfl) > { > fmtflags __old = _M_flags; > _M_flags |= __fmtfl; > return __old; > } ># 594 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > fmtflags > setf(fmtflags __fmtfl, fmtflags __mask) > { > fmtflags __old = _M_flags; > _M_flags &= ~__mask; > _M_flags |= (__fmtfl & __mask); > return __old; > } > > > > > > > > void > unsetf(fmtflags __mask) > { _M_flags &= ~__mask; } ># 620 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > streamsize > precision() const > { return _M_precision; } > > > > > > > streamsize > precision(streamsize __prec) > { > streamsize __old = _M_precision; > _M_precision = __prec; > return __old; > } > > > > > > > > streamsize > width() const > { return _M_width; } > > > > > > > streamsize > width(streamsize __wide) > { > streamsize __old = _M_width; > _M_width = __wide; > return __old; > } ># 671 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > static bool > sync_with_stdio(bool __sync = true); ># 683 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > locale > imbue(const locale& __loc) throw(); ># 694 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > locale > getloc() const > { return _M_ios_locale; } ># 705 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > const locale& > _M_getloc() const > { return _M_ios_locale; } ># 724 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > static int > xalloc() throw(); ># 740 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > long& > iword(int __ix) > { > _Words& __word = (__ix < _M_word_size) > ? _M_word[__ix] : _M_grow_words(__ix, true); > return __word._M_iword; > } ># 761 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > void*& > pword(int __ix) > { > _Words& __word = (__ix < _M_word_size) > ? _M_word[__ix] : _M_grow_words(__ix, false); > return __word._M_pword; > } ># 778 "/usr/include/c++/4.8.2/bits/ios_base.h" 3 > virtual ~ios_base(); > > protected: > ios_base() throw (); > > > > private: > ios_base(const ios_base&); > > ios_base& > operator=(const ios_base&); > }; > > > > inline ios_base& > boolalpha(ios_base& __base) > { > __base.setf(ios_base::boolalpha); > return __base; > } > > > inline ios_base& > noboolalpha(ios_base& __base) > { > __base.unsetf(ios_base::boolalpha); > return __base; > } > > > inline ios_base& > showbase(ios_base& __base) > { > __base.setf(ios_base::showbase); > return __base; > } > > > inline ios_base& > noshowbase(ios_base& __base) > { > __base.unsetf(ios_base::showbase); > return __base; > } > > > inline ios_base& > showpoint(ios_base& __base) > { > __base.setf(ios_base::showpoint); > return __base; > } > > > inline ios_base& > noshowpoint(ios_base& __base) > { > __base.unsetf(ios_base::showpoint); > return __base; > } > > > inline ios_base& > showpos(ios_base& __base) > { > __base.setf(ios_base::showpos); > return __base; > } > > > inline ios_base& > noshowpos(ios_base& __base) > { > __base.unsetf(ios_base::showpos); > return __base; > } > > > inline ios_base& > skipws(ios_base& __base) > { > __base.setf(ios_base::skipws); > return __base; > } > > > inline ios_base& > noskipws(ios_base& __base) > { > __base.unsetf(ios_base::skipws); > return __base; > } > > > inline ios_base& > uppercase(ios_base& __base) > { > __base.setf(ios_base::uppercase); > return __base; > } > > > inline ios_base& > nouppercase(ios_base& __base) > { > __base.unsetf(ios_base::uppercase); > return __base; > } > > > inline ios_base& > unitbuf(ios_base& __base) > { > __base.setf(ios_base::unitbuf); > return __base; > } > > > inline ios_base& > nounitbuf(ios_base& __base) > { > __base.unsetf(ios_base::unitbuf); > return __base; > } > > > > inline ios_base& > internal(ios_base& __base) > { > __base.setf(ios_base::internal, ios_base::adjustfield); > return __base; > } > > > inline ios_base& > left(ios_base& __base) > { > __base.setf(ios_base::left, ios_base::adjustfield); > return __base; > } > > > inline ios_base& > right(ios_base& __base) > { > __base.setf(ios_base::right, ios_base::adjustfield); > return __base; > } > > > > inline ios_base& > dec(ios_base& __base) > { > __base.setf(ios_base::dec, ios_base::basefield); > return __base; > } > > > inline ios_base& > hex(ios_base& __base) > { > __base.setf(ios_base::hex, ios_base::basefield); > return __base; > } > > > inline ios_base& > oct(ios_base& __base) > { > __base.setf(ios_base::oct, ios_base::basefield); > return __base; > } > > > > inline ios_base& > fixed(ios_base& __base) > { > __base.setf(ios_base::fixed, ios_base::floatfield); > return __base; > } > > > inline ios_base& > scientific(ios_base& __base) > { > __base.setf(ios_base::scientific, ios_base::floatfield); > return __base; > } > > >} ># 44 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 1 "/usr/include/c++/4.8.2/streambuf" 1 3 ># 36 "/usr/include/c++/4.8.2/streambuf" 3 > ># 37 "/usr/include/c++/4.8.2/streambuf" 3 ># 45 "/usr/include/c++/4.8.2/streambuf" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > streamsize > __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*, > basic_streambuf<_CharT, _Traits>*, bool&); ># 119 "/usr/include/c++/4.8.2/streambuf" 3 > template<typename _CharT, typename _Traits> > class basic_streambuf > { > public: > > > > > > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > > > typedef basic_streambuf<char_type, traits_type> __streambuf_type; > > > friend class basic_ios<char_type, traits_type>; > friend class basic_istream<char_type, traits_type>; > friend class basic_ostream<char_type, traits_type>; > friend class istreambuf_iterator<char_type, traits_type>; > friend class ostreambuf_iterator<char_type, traits_type>; > > friend streamsize > __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&); > > template<bool _IsMove, typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > _CharT2*>::__type > __copy_move_a2(istreambuf_iterator<_CharT2>, > istreambuf_iterator<_CharT2>, _CharT2*); > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > istreambuf_iterator<_CharT2> >::__type > find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > const _CharT2&); > > template<typename _CharT2, typename _Traits2> > friend basic_istream<_CharT2, _Traits2>& > operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*); > > template<typename _CharT2, typename _Traits2, typename _Alloc> > friend basic_istream<_CharT2, _Traits2>& > operator>>(basic_istream<_CharT2, _Traits2>&, > basic_string<_CharT2, _Traits2, _Alloc>&); > > template<typename _CharT2, typename _Traits2, typename _Alloc> > friend basic_istream<_CharT2, _Traits2>& > getline(basic_istream<_CharT2, _Traits2>&, > basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2); > > protected: > > > > > > > > char_type* _M_in_beg; > char_type* _M_in_cur; > char_type* _M_in_end; > char_type* _M_out_beg; > char_type* _M_out_cur; > char_type* _M_out_end; > > > locale _M_buf_locale; > > public: > > virtual > ~basic_streambuf() > { } ># 208 "/usr/include/c++/4.8.2/streambuf" 3 > locale > pubimbue(const locale& __loc) > { > locale __tmp(this->getloc()); > this->imbue(__loc); > _M_buf_locale = __loc; > return __tmp; > } ># 225 "/usr/include/c++/4.8.2/streambuf" 3 > locale > getloc() const > { return _M_buf_locale; } ># 238 "/usr/include/c++/4.8.2/streambuf" 3 > basic_streambuf* > pubsetbuf(char_type* __s, streamsize __n) > { return this->setbuf(__s, __n); } ># 250 "/usr/include/c++/4.8.2/streambuf" 3 > pos_type > pubseekoff(off_type __off, ios_base::seekdir __way, > ios_base::openmode __mode = ios_base::in | ios_base::out) > { return this->seekoff(__off, __way, __mode); } ># 262 "/usr/include/c++/4.8.2/streambuf" 3 > pos_type > pubseekpos(pos_type __sp, > ios_base::openmode __mode = ios_base::in | ios_base::out) > { return this->seekpos(__sp, __mode); } > > > > > int > pubsync() { return this->sync(); } ># 283 "/usr/include/c++/4.8.2/streambuf" 3 > streamsize > in_avail() > { > const streamsize __ret = this->egptr() - this->gptr(); > return __ret ? __ret : this->showmanyc(); > } ># 297 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > snextc() > { > int_type __ret = traits_type::eof(); > if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(), > __ret), true)) > __ret = this->sgetc(); > return __ret; > } ># 315 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sbumpc() > { > int_type __ret; > if (__builtin_expect(this->gptr() < this->egptr(), true)) > { > __ret = traits_type::to_int_type(*this->gptr()); > this->gbump(1); > } > else > __ret = this->uflow(); > return __ret; > } ># 337 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sgetc() > { > int_type __ret; > if (__builtin_expect(this->gptr() < this->egptr(), true)) > __ret = traits_type::to_int_type(*this->gptr()); > else > __ret = this->underflow(); > return __ret; > } ># 356 "/usr/include/c++/4.8.2/streambuf" 3 > streamsize > sgetn(char_type* __s, streamsize __n) > { return this->xsgetn(__s, __n); } ># 371 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sputbackc(char_type __c) > { > int_type __ret; > const bool __testpos = this->eback() < this->gptr(); > if (__builtin_expect(!__testpos || > !traits_type::eq(__c, this->gptr()[-1]), false)) > __ret = this->pbackfail(traits_type::to_int_type(__c)); > else > { > this->gbump(-1); > __ret = traits_type::to_int_type(*this->gptr()); > } > return __ret; > } ># 396 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sungetc() > { > int_type __ret; > if (__builtin_expect(this->eback() < this->gptr(), true)) > { > this->gbump(-1); > __ret = traits_type::to_int_type(*this->gptr()); > } > else > __ret = this->pbackfail(); > return __ret; > } ># 423 "/usr/include/c++/4.8.2/streambuf" 3 > int_type > sputc(char_type __c) > { > int_type __ret; > if (__builtin_expect(this->pptr() < this->epptr(), true)) > { > *this->pptr() = __c; > this->pbump(1); > __ret = traits_type::to_int_type(__c); > } > else > __ret = this->overflow(traits_type::to_int_type(__c)); > return __ret; > } ># 449 "/usr/include/c++/4.8.2/streambuf" 3 > streamsize > sputn(const char_type* __s, streamsize __n) > { return this->xsputn(__s, __n); } > > protected: ># 463 "/usr/include/c++/4.8.2/streambuf" 3 > basic_streambuf() > : _M_in_beg(0), _M_in_cur(0), _M_in_end(0), > _M_out_beg(0), _M_out_cur(0), _M_out_end(0), > _M_buf_locale(locale()) > { } ># 481 "/usr/include/c++/4.8.2/streambuf" 3 > char_type* > eback() const { return _M_in_beg; } > > char_type* > gptr() const { return _M_in_cur; } > > char_type* > egptr() const { return _M_in_end; } ># 497 "/usr/include/c++/4.8.2/streambuf" 3 > void > gbump(int __n) { _M_in_cur += __n; } ># 508 "/usr/include/c++/4.8.2/streambuf" 3 > void > setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) > { > _M_in_beg = __gbeg; > _M_in_cur = __gnext; > _M_in_end = __gend; > } ># 528 "/usr/include/c++/4.8.2/streambuf" 3 > char_type* > pbase() const { return _M_out_beg; } > > char_type* > pptr() const { return _M_out_cur; } > > char_type* > epptr() const { return _M_out_end; } ># 544 "/usr/include/c++/4.8.2/streambuf" 3 > void > pbump(int __n) { _M_out_cur += __n; } ># 554 "/usr/include/c++/4.8.2/streambuf" 3 > void > setp(char_type* __pbeg, char_type* __pend) > { > _M_out_beg = _M_out_cur = __pbeg; > _M_out_end = __pend; > } ># 575 "/usr/include/c++/4.8.2/streambuf" 3 > virtual void > imbue(const locale& __loc) > { } ># 590 "/usr/include/c++/4.8.2/streambuf" 3 > virtual basic_streambuf<char_type,_Traits>* > setbuf(char_type*, streamsize) > { return this; } ># 601 "/usr/include/c++/4.8.2/streambuf" 3 > virtual pos_type > seekoff(off_type, ios_base::seekdir, > ios_base::openmode = ios_base::in | ios_base::out) > { return pos_type(off_type(-1)); } ># 613 "/usr/include/c++/4.8.2/streambuf" 3 > virtual pos_type > seekpos(pos_type, > ios_base::openmode = ios_base::in | ios_base::out) > { return pos_type(off_type(-1)); } ># 626 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int > sync() { return 0; } ># 648 "/usr/include/c++/4.8.2/streambuf" 3 > virtual streamsize > showmanyc() { return 0; } ># 664 "/usr/include/c++/4.8.2/streambuf" 3 > virtual streamsize > xsgetn(char_type* __s, streamsize __n); ># 686 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > underflow() > { return traits_type::eof(); } ># 699 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > uflow() > { > int_type __ret = traits_type::eof(); > const bool __testeof = traits_type::eq_int_type(this->underflow(), > __ret); > if (!__testeof) > { > __ret = traits_type::to_int_type(*this->gptr()); > this->gbump(1); > } > return __ret; > } ># 723 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > pbackfail(int_type __c = traits_type::eof()) > { return traits_type::eof(); } ># 741 "/usr/include/c++/4.8.2/streambuf" 3 > virtual streamsize > xsputn(const char_type* __s, streamsize __n); ># 767 "/usr/include/c++/4.8.2/streambuf" 3 > virtual int_type > overflow(int_type __c = traits_type::eof()) > { return traits_type::eof(); } > > > > public: ># 782 "/usr/include/c++/4.8.2/streambuf" 3 > void > stossc() > { > if (this->gptr() < this->egptr()) > this->gbump(1); > else > this->uflow(); > } > > > > void > __safe_gbump(streamsize __n) { _M_in_cur += __n; } > > void > __safe_pbump(streamsize __n) { _M_out_cur += __n; } > > private: > > > basic_streambuf(const basic_streambuf& __sb) > : _M_in_beg(__sb._M_in_beg), _M_in_cur(__sb._M_in_cur), > _M_in_end(__sb._M_in_end), _M_out_beg(__sb._M_out_beg), > _M_out_cur(__sb._M_out_cur), _M_out_end(__sb._M_out_cur), > _M_buf_locale(__sb._M_buf_locale) > { } > > basic_streambuf& > operator=(const basic_streambuf&) { return *this; }; > }; > > > template<> > streamsize > __copy_streambufs_eof(basic_streambuf<char>* __sbin, > basic_streambuf<char>* __sbout, bool& __ineof); > > template<> > streamsize > __copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin, > basic_streambuf<wchar_t>* __sbout, bool& __ineof); > > > >} > ># 1 "/usr/include/c++/4.8.2/bits/streambuf.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/streambuf.tcc" 3 > ># 38 "/usr/include/c++/4.8.2/bits/streambuf.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > streamsize > basic_streambuf<_CharT, _Traits>:: > xsgetn(char_type* __s, streamsize __n) > { > streamsize __ret = 0; > while (__ret < __n) > { > const streamsize __buf_len = this->egptr() - this->gptr(); > if (__buf_len) > { > const streamsize __remaining = __n - __ret; > const streamsize __len = std::min(__buf_len, __remaining); > traits_type::copy(__s, this->gptr(), __len); > __ret += __len; > __s += __len; > this->__safe_gbump(__len); > } > > if (__ret < __n) > { > const int_type __c = this->uflow(); > if (!traits_type::eq_int_type(__c, traits_type::eof())) > { > traits_type::assign(*__s++, traits_type::to_char_type(__c)); > ++__ret; > } > else > break; > } > } > return __ret; > } > > template<typename _CharT, typename _Traits> > streamsize > basic_streambuf<_CharT, _Traits>:: > xsputn(const char_type* __s, streamsize __n) > { > streamsize __ret = 0; > while (__ret < __n) > { > const streamsize __buf_len = this->epptr() - this->pptr(); > if (__buf_len) > { > const streamsize __remaining = __n - __ret; > const streamsize __len = std::min(__buf_len, __remaining); > traits_type::copy(this->pptr(), __s, __len); > __ret += __len; > __s += __len; > this->__safe_pbump(__len); > } > > if (__ret < __n) > { > int_type __c = this->overflow(traits_type::to_int_type(*__s)); > if (!traits_type::eq_int_type(__c, traits_type::eof())) > { > ++__ret; > ++__s; > } > else > break; > } > } > return __ret; > } > > > > > template<typename _CharT, typename _Traits> > streamsize > __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin, > basic_streambuf<_CharT, _Traits>* __sbout, > bool& __ineof) > { > streamsize __ret = 0; > __ineof = true; > typename _Traits::int_type __c = __sbin->sgetc(); > while (!_Traits::eq_int_type(__c, _Traits::eof())) > { > __c = __sbout->sputc(_Traits::to_char_type(__c)); > if (_Traits::eq_int_type(__c, _Traits::eof())) > { > __ineof = false; > break; > } > ++__ret; > __c = __sbin->snextc(); > } > return __ret; > } > > template<typename _CharT, typename _Traits> > inline streamsize > __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, > basic_streambuf<_CharT, _Traits>* __sbout) > { > bool __ineof; > return __copy_streambufs_eof(__sbin, __sbout, __ineof); > } > > > > > extern template class basic_streambuf<char>; > extern template > streamsize > __copy_streambufs(basic_streambuf<char>*, > basic_streambuf<char>*); > extern template > streamsize > __copy_streambufs_eof(basic_streambuf<char>*, > basic_streambuf<char>*, bool&); > > > extern template class basic_streambuf<wchar_t>; > extern template > streamsize > __copy_streambufs(basic_streambuf<wchar_t>*, > basic_streambuf<wchar_t>*); > extern template > streamsize > __copy_streambufs_eof(basic_streambuf<wchar_t>*, > basic_streambuf<wchar_t>*, bool&); > > > > >} ># 829 "/usr/include/c++/4.8.2/streambuf" 2 3 ># 45 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > > > ># 1 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > ># 34 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 49 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > template<typename _CharT, typename _Traits> > class istreambuf_iterator > : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type, > _CharT*, > > > > > _CharT&> > > { > public: > > > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename _Traits::int_type int_type; > typedef basic_streambuf<_CharT, _Traits> streambuf_type; > typedef basic_istream<_CharT, _Traits> istream_type; > > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > ostreambuf_iterator<_CharT2> >::__type > copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > ostreambuf_iterator<_CharT2>); > > template<bool _IsMove, typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > _CharT2*>::__type > __copy_move_a2(istreambuf_iterator<_CharT2>, > istreambuf_iterator<_CharT2>, _CharT2*); > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > istreambuf_iterator<_CharT2> >::__type > find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > const _CharT2&); > > private: > > > > > > > > mutable streambuf_type* _M_sbuf; > mutable int_type _M_c; > > public: > > istreambuf_iterator() throw() > : _M_sbuf(0), _M_c(traits_type::eof()) { } ># 112 "/usr/include/c++/4.8.2/bits/streambuf_iterator.h" 3 > istreambuf_iterator(istream_type& __s) throw() > : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } > > > istreambuf_iterator(streambuf_type* __s) throw() > : _M_sbuf(__s), _M_c(traits_type::eof()) { } > > > > > char_type > operator*() const > { > > > > > > > > return traits_type::to_char_type(_M_get()); > } > > > istreambuf_iterator& > operator++() > { > > > ; > if (_M_sbuf) > { > _M_sbuf->sbumpc(); > _M_c = traits_type::eof(); > } > return *this; > } > > > istreambuf_iterator > operator++(int) > { > > > ; > > istreambuf_iterator __old = *this; > if (_M_sbuf) > { > __old._M_c = _M_sbuf->sbumpc(); > _M_c = traits_type::eof(); > } > return __old; > } > > > > > > bool > equal(const istreambuf_iterator& __b) const > { return _M_at_eof() == __b._M_at_eof(); } > > private: > int_type > _M_get() const > { > const int_type __eof = traits_type::eof(); > int_type __ret = __eof; > if (_M_sbuf) > { > if (!traits_type::eq_int_type(_M_c, __eof)) > __ret = _M_c; > else if (!traits_type::eq_int_type((__ret = _M_sbuf->sgetc()), > __eof)) > _M_c = __ret; > else > _M_sbuf = 0; > } > return __ret; > } > > bool > _M_at_eof() const > { > const int_type __eof = traits_type::eof(); > return traits_type::eq_int_type(_M_get(), __eof); > } > }; > > template<typename _CharT, typename _Traits> > inline bool > operator==(const istreambuf_iterator<_CharT, _Traits>& __a, > const istreambuf_iterator<_CharT, _Traits>& __b) > { return __a.equal(__b); } > > template<typename _CharT, typename _Traits> > inline bool > operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, > const istreambuf_iterator<_CharT, _Traits>& __b) > { return !__a.equal(__b); } > > > template<typename _CharT, typename _Traits> > class ostreambuf_iterator > : public iterator<output_iterator_tag, void, void, void, void> > { > public: > > > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef basic_streambuf<_CharT, _Traits> streambuf_type; > typedef basic_ostream<_CharT, _Traits> ostream_type; > > > template<typename _CharT2> > friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, > ostreambuf_iterator<_CharT2> >::__type > copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, > ostreambuf_iterator<_CharT2>); > > private: > streambuf_type* _M_sbuf; > bool _M_failed; > > public: > > ostreambuf_iterator(ostream_type& __s) throw() > : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } > > > ostreambuf_iterator(streambuf_type* __s) throw() > : _M_sbuf(__s), _M_failed(!_M_sbuf) { } > > > ostreambuf_iterator& > operator=(_CharT __c) > { > if (!_M_failed && > _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) > _M_failed = true; > return *this; > } > > > ostreambuf_iterator& > operator*() > { return *this; } > > > ostreambuf_iterator& > operator++(int) > { return *this; } > > > ostreambuf_iterator& > operator++() > { return *this; } > > > bool > failed() const throw() > { return _M_failed; } > > ostreambuf_iterator& > _M_put(const _CharT* __ws, streamsize __len) > { > if (__builtin_expect(!_M_failed, true) > && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, > false)) > _M_failed = true; > return *this; > } > }; > > > template<typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT> >::__type > copy(istreambuf_iterator<_CharT> __first, > istreambuf_iterator<_CharT> __last, > ostreambuf_iterator<_CharT> __result) > { > if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) > { > bool __ineof; > __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); > if (!__ineof) > __result._M_failed = true; > } > return __result; > } > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT> >::__type > __copy_move_a2(_CharT* __first, _CharT* __last, > ostreambuf_iterator<_CharT> __result) > { > const streamsize __num = __last - __first; > if (__num > 0) > __result._M_put(__first, __num); > return __result; > } > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > ostreambuf_iterator<_CharT> >::__type > __copy_move_a2(const _CharT* __first, const _CharT* __last, > ostreambuf_iterator<_CharT> __result) > { > const streamsize __num = __last - __first; > if (__num > 0) > __result._M_put(__first, __num); > return __result; > } > > template<bool _IsMove, typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > _CharT*>::__type > __copy_move_a2(istreambuf_iterator<_CharT> __first, > istreambuf_iterator<_CharT> __last, _CharT* __result) > { > typedef istreambuf_iterator<_CharT> __is_iterator_type; > typedef typename __is_iterator_type::traits_type traits_type; > typedef typename __is_iterator_type::streambuf_type streambuf_type; > typedef typename traits_type::int_type int_type; > > if (__first._M_sbuf && !__last._M_sbuf) > { > streambuf_type* __sb = __first._M_sbuf; > int_type __c = __sb->sgetc(); > while (!traits_type::eq_int_type(__c, traits_type::eof())) > { > const streamsize __n = __sb->egptr() - __sb->gptr(); > if (__n > 1) > { > traits_type::copy(__result, __sb->gptr(), __n); > __sb->__safe_gbump(__n); > __result += __n; > __c = __sb->underflow(); > } > else > { > *__result++ = traits_type::to_char_type(__c); > __c = __sb->snextc(); > } > } > } > return __result; > } > > template<typename _CharT> > typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, > istreambuf_iterator<_CharT> >::__type > find(istreambuf_iterator<_CharT> __first, > istreambuf_iterator<_CharT> __last, const _CharT& __val) > { > typedef istreambuf_iterator<_CharT> __is_iterator_type; > typedef typename __is_iterator_type::traits_type traits_type; > typedef typename __is_iterator_type::streambuf_type streambuf_type; > typedef typename traits_type::int_type int_type; > > if (__first._M_sbuf && !__last._M_sbuf) > { > const int_type __ival = traits_type::to_int_type(__val); > streambuf_type* __sb = __first._M_sbuf; > int_type __c = __sb->sgetc(); > while (!traits_type::eq_int_type(__c, traits_type::eof()) > && !traits_type::eq_int_type(__c, __ival)) > { > streamsize __n = __sb->egptr() - __sb->gptr(); > if (__n > 1) > { > const _CharT* __p = traits_type::find(__sb->gptr(), > __n, __val); > if (__p) > __n = __p - __sb->gptr(); > __sb->__safe_gbump(__n); > __c = __sb->sgetc(); > } > else > __c = __sb->snextc(); > } > > if (!traits_type::eq_int_type(__c, traits_type::eof())) > __first._M_c = __c; > else > __first._M_sbuf = 0; > } > return __first; > } > > > > >} ># 49 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 64 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _Tp> > void > __convert_to_v(const char*, _Tp&, ios_base::iostate&, > const __c_locale&) throw(); > > > template<> > void > __convert_to_v(const char*, float&, ios_base::iostate&, > const __c_locale&) throw(); > > template<> > void > __convert_to_v(const char*, double&, ios_base::iostate&, > const __c_locale&) throw(); > > template<> > void > __convert_to_v(const char*, long double&, ios_base::iostate&, > const __c_locale&) throw(); > > > > template<typename _CharT, typename _Traits> > struct __pad > { > static void > _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, > const _CharT* __olds, streamsize __newlen, streamsize __oldlen); > }; > > > > > > > template<typename _CharT> > _CharT* > __add_grouping(_CharT* __s, _CharT __sep, > const char* __gbeg, size_t __gsize, > const _CharT* __first, const _CharT* __last); > > > > > template<typename _CharT> > inline > ostreambuf_iterator<_CharT> > __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len) > { > __s._M_put(__ws, __len); > return __s; > } > > > template<typename _CharT, typename _OutIter> > inline > _OutIter > __write(_OutIter __s, const _CharT* __ws, int __len) > { > for (int __j = 0; __j < __len; __j++, ++__s) > *__s = __ws[__j]; > return __s; > } ># 142 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > class __ctype_abstract_base : public locale::facet, public ctype_base > { > public: > > > typedef _CharT char_type; ># 161 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > bool > is(mask __m, char_type __c) const > { return this->do_is(__m, __c); } ># 178 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > is(const char_type *__lo, const char_type *__hi, mask *__vec) const > { return this->do_is(__lo, __hi, __vec); } ># 194 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > scan_is(mask __m, const char_type* __lo, const char_type* __hi) const > { return this->do_scan_is(__m, __lo, __hi); } ># 210 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > scan_not(mask __m, const char_type* __lo, const char_type* __hi) const > { return this->do_scan_not(__m, __lo, __hi); } ># 224 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > toupper(char_type __c) const > { return this->do_toupper(__c); } ># 239 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > toupper(char_type *__lo, const char_type* __hi) const > { return this->do_toupper(__lo, __hi); } ># 253 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > tolower(char_type __c) const > { return this->do_tolower(__c); } ># 268 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > tolower(char_type* __lo, const char_type* __hi) const > { return this->do_tolower(__lo, __hi); } ># 285 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > widen(char __c) const > { return this->do_widen(__c); } ># 304 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char* > widen(const char* __lo, const char* __hi, char_type* __to) const > { return this->do_widen(__lo, __hi, __to); } ># 323 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char > narrow(char_type __c, char __dfault) const > { return this->do_narrow(__c, __dfault); } ># 345 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const > { return this->do_narrow(__lo, __hi, __dfault, __to); } > > protected: > explicit > __ctype_abstract_base(size_t __refs = 0): facet(__refs) { } > > virtual > ~__ctype_abstract_base() { } ># 370 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual bool > do_is(mask __m, char_type __c) const = 0; ># 389 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_is(const char_type* __lo, const char_type* __hi, > mask* __vec) const = 0; ># 408 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_is(mask __m, const char_type* __lo, > const char_type* __hi) const = 0; ># 427 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_not(mask __m, const char_type* __lo, > const char_type* __hi) const = 0; ># 445 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_toupper(char_type __c) const = 0; ># 462 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const = 0; ># 478 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_tolower(char_type __c) const = 0; ># 495 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const = 0; ># 514 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_widen(char __c) const = 0; ># 535 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0; ># 556 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char > do_narrow(char_type __c, char __dfault) const = 0; ># 581 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const = 0; > }; ># 604 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > class ctype : public __ctype_abstract_base<_CharT> > { > public: > > typedef _CharT char_type; > typedef typename __ctype_abstract_base<_CharT>::mask mask; > > > static locale::id id; > > explicit > ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { } > > protected: > virtual > ~ctype(); > > virtual bool > do_is(mask __m, char_type __c) const; > > virtual const char_type* > do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; > > virtual const char_type* > do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; > > virtual const char_type* > do_scan_not(mask __m, const char_type* __lo, > const char_type* __hi) const; > > virtual char_type > do_toupper(char_type __c) const; > > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const; > > virtual char_type > do_tolower(char_type __c) const; > > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const; > > virtual char_type > do_widen(char __c) const; > > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __dest) const; > > virtual char > do_narrow(char_type, char __dfault) const; > > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const; > }; > > template<typename _CharT> > locale::id ctype<_CharT>::id; ># 673 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<> > class ctype<char> : public locale::facet, public ctype_base > { > public: > > > typedef char char_type; > > protected: > > __c_locale _M_c_locale_ctype; > bool _M_del; > __to_type _M_toupper; > __to_type _M_tolower; > const mask* _M_table; > mutable char _M_widen_ok; > mutable char _M_widen[1 + static_cast<unsigned char>(-1)]; > mutable char _M_narrow[1 + static_cast<unsigned char>(-1)]; > mutable char _M_narrow_ok; > > > public: > > static locale::id id; > > static const size_t table_size = 1 + static_cast<unsigned char>(-1); ># 710 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0); ># 723 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, > size_t __refs = 0); ># 736 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline bool > is(mask __m, char __c) const; ># 751 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline const char* > is(const char* __lo, const char* __hi, mask* __vec) const; ># 765 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline const char* > scan_is(mask __m, const char* __lo, const char* __hi) const; ># 779 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > inline const char* > scan_not(mask __m, const char* __lo, const char* __hi) const; ># 794 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > toupper(char_type __c) const > { return this->do_toupper(__c); } ># 811 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > toupper(char_type *__lo, const char_type* __hi) const > { return this->do_toupper(__lo, __hi); } ># 827 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > tolower(char_type __c) const > { return this->do_tolower(__c); } ># 844 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > tolower(char_type* __lo, const char_type* __hi) const > { return this->do_tolower(__lo, __hi); } ># 864 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > widen(char __c) const > { > if (_M_widen_ok) > return _M_widen[static_cast<unsigned char>(__c)]; > this->_M_widen_init(); > return this->do_widen(__c); > } ># 891 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char* > widen(const char* __lo, const char* __hi, char_type* __to) const > { > if (_M_widen_ok == 1) > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } > if (!_M_widen_ok) > _M_widen_init(); > return this->do_widen(__lo, __hi, __to); > } ># 922 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char > narrow(char_type __c, char __dfault) const > { > if (_M_narrow[static_cast<unsigned char>(__c)]) > return _M_narrow[static_cast<unsigned char>(__c)]; > const char __t = do_narrow(__c, __dfault); > if (__t != __dfault) > _M_narrow[static_cast<unsigned char>(__c)] = __t; > return __t; > } ># 955 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > const char_type* > narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const > { > if (__builtin_expect(_M_narrow_ok == 1, true)) > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } > if (!_M_narrow_ok) > _M_narrow_init(); > return this->do_narrow(__lo, __hi, __dfault, __to); > } > > > > > > const mask* > table() const throw() > { return _M_table; } > > > static const mask* > classic_table() throw(); > protected: > > > > > > > > virtual > ~ctype(); ># 1004 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_toupper(char_type __c) const; ># 1021 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const; ># 1037 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_tolower(char_type __c) const; ># 1054 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const; ># 1074 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_widen(char __c) const > { return __c; } ># 1097 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __to) const > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } ># 1123 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char > do_narrow(char_type __c, char __dfault) const > { return __c; } ># 1149 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const > { > __builtin_memcpy(__to, __lo, __hi - __lo); > return __hi; > } > > private: > void _M_narrow_init() const; > void _M_widen_init() const; > }; ># 1174 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<> > class ctype<wchar_t> : public __ctype_abstract_base<wchar_t> > { > public: > > > typedef wchar_t char_type; > typedef wctype_t __wmask_type; > > protected: > __c_locale _M_c_locale_ctype; > > > bool _M_narrow_ok; > char _M_narrow[128]; > wint_t _M_widen[1 + static_cast<unsigned char>(-1)]; > > > mask _M_bit[16]; > __wmask_type _M_wmask[16]; > > public: > > > static locale::id id; ># 1207 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(size_t __refs = 0); ># 1218 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > ctype(__c_locale __cloc, size_t __refs = 0); > > protected: > __wmask_type > _M_convert_to_wmask(const mask __m) const throw(); > > > virtual > ~ctype(); ># 1242 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual bool > do_is(mask __m, char_type __c) const; ># 1261 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; ># 1279 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; ># 1297 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_scan_not(mask __m, const char_type* __lo, > const char_type* __hi) const; ># 1314 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_toupper(char_type __c) const; ># 1331 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_toupper(char_type* __lo, const char_type* __hi) const; ># 1347 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_tolower(char_type __c) const; ># 1364 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_tolower(char_type* __lo, const char_type* __hi) const; ># 1384 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_widen(char __c) const; ># 1406 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char* > do_widen(const char* __lo, const char* __hi, char_type* __to) const; ># 1429 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char > do_narrow(char_type __c, char __dfault) const; ># 1455 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual const char_type* > do_narrow(const char_type* __lo, const char_type* __hi, > char __dfault, char* __to) const; > > > void > _M_initialize_ctype() throw(); > }; > > > > template<typename _CharT> > class ctype_byname : public ctype<_CharT> > { > public: > typedef typename ctype<_CharT>::mask mask; > > explicit > ctype_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~ctype_byname() { }; > }; > > > template<> > class ctype_byname<char> : public ctype<char> > { > public: > explicit > ctype_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~ctype_byname(); > }; > > > template<> > class ctype_byname<wchar_t> : public ctype<wchar_t> > { > public: > explicit > ctype_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~ctype_byname(); > }; > > > >} > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_inline.h" 1 3 ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/ctype_inline.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > bool > ctype<char>:: > is(mask __m, char __c) const > { return _M_table[static_cast<unsigned char>(__c)] & __m; } > > const char* > ctype<char>:: > is(const char* __low, const char* __high, mask* __vec) const > { > while (__low < __high) > *__vec++ = _M_table[static_cast<unsigned char>(*__low++)]; > return __high; > } > > const char* > ctype<char>:: > scan_is(mask __m, const char* __low, const char* __high) const > { > while (__low < __high > && !(_M_table[static_cast<unsigned char>(*__low)] & __m)) > ++__low; > return __low; > } > > const char* > ctype<char>:: > scan_not(mask __m, const char* __low, const char* __high) const > { > while (__low < __high > && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0) > ++__low; > return __low; > } > > >} ># 1512 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > class __num_base > { > public: > > > enum > { > _S_ominus, > _S_oplus, > _S_ox, > _S_oX, > _S_odigits, > _S_odigits_end = _S_odigits + 16, > _S_oudigits = _S_odigits_end, > _S_oudigits_end = _S_oudigits + 16, > _S_oe = _S_odigits + 14, > _S_oE = _S_oudigits + 14, > _S_oend = _S_oudigits_end > }; > > > > > > > static const char* _S_atoms_out; > > > > static const char* _S_atoms_in; > > enum > { > _S_iminus, > _S_iplus, > _S_ix, > _S_iX, > _S_izero, > _S_ie = _S_izero + 14, > _S_iE = _S_izero + 20, > _S_iend = 26 > }; > > > > static void > _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw(); > }; > > template<typename _CharT> > struct __numpunct_cache : public locale::facet > { > const char* _M_grouping; > size_t _M_grouping_size; > bool _M_use_grouping; > const _CharT* _M_truename; > size_t _M_truename_size; > const _CharT* _M_falsename; > size_t _M_falsename_size; > _CharT _M_decimal_point; > _CharT _M_thousands_sep; > > > > > > _CharT _M_atoms_out[__num_base::_S_oend]; > > > > > > _CharT _M_atoms_in[__num_base::_S_iend]; > > bool _M_allocated; > > __numpunct_cache(size_t __refs = 0) > : facet(__refs), _M_grouping(0), _M_grouping_size(0), > _M_use_grouping(false), > _M_truename(0), _M_truename_size(0), _M_falsename(0), > _M_falsename_size(0), _M_decimal_point(_CharT()), > _M_thousands_sep(_CharT()), _M_allocated(false) > { } > > ~__numpunct_cache(); > > void > _M_cache(const locale& __loc); > > private: > __numpunct_cache& > operator=(const __numpunct_cache&); > > explicit > __numpunct_cache(const __numpunct_cache&); > }; > > template<typename _CharT> > __numpunct_cache<_CharT>::~__numpunct_cache() > { > if (_M_allocated) > { > delete [] _M_grouping; > delete [] _M_truename; > delete [] _M_falsename; > } > } ># 1640 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT> > class numpunct : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > typedef __numpunct_cache<_CharT> __cache_type; > > protected: > __cache_type* _M_data; > > public: > > static locale::id id; > > > > > > > explicit > numpunct(size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_numpunct(); } ># 1678 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > numpunct(__cache_type* __cache, size_t __refs = 0) > : facet(__refs), _M_data(__cache) > { _M_initialize_numpunct(); } ># 1692 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > numpunct(__c_locale __cloc, size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_numpunct(__cloc); } ># 1706 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > decimal_point() const > { return this->do_decimal_point(); } ># 1719 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > char_type > thousands_sep() const > { return this->do_thousands_sep(); } ># 1750 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > string > grouping() const > { return this->do_grouping(); } ># 1763 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > string_type > truename() const > { return this->do_truename(); } ># 1776 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > string_type > falsename() const > { return this->do_falsename(); } > > protected: > > virtual > ~numpunct(); ># 1793 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_decimal_point() const > { return _M_data->_M_decimal_point; } ># 1805 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual char_type > do_thousands_sep() const > { return _M_data->_M_thousands_sep; } ># 1818 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual string > do_grouping() const > { return _M_data->_M_grouping; } ># 1831 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual string_type > do_truename() const > { return _M_data->_M_truename; } ># 1844 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual string_type > do_falsename() const > { return _M_data->_M_falsename; } > > > void > _M_initialize_numpunct(__c_locale __cloc = 0); > }; > > template<typename _CharT> > locale::id numpunct<_CharT>::id; > > template<> > numpunct<char>::~numpunct(); > > template<> > void > numpunct<char>::_M_initialize_numpunct(__c_locale __cloc); > > > template<> > numpunct<wchar_t>::~numpunct(); > > template<> > void > numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc); > > > > template<typename _CharT> > class numpunct_byname : public numpunct<_CharT> > { > public: > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > explicit > numpunct_byname(const char* __s, size_t __refs = 0) > : numpunct<_CharT>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > __c_locale __tmp; > this->_S_create_c_locale(__tmp, __s); > this->_M_initialize_numpunct(__tmp); > this->_S_destroy_c_locale(__tmp); > } > } > > protected: > virtual > ~numpunct_byname() { } > }; > > ># 1914 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT, typename _InIter> > class num_get : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _InIter iter_type; > > > > static locale::id id; ># 1935 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > num_get(size_t __refs = 0) : facet(__refs) { } ># 1961 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, bool& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } ># 1998 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned short& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned int& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long long& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } ># 2058 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, float& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, double& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long double& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } ># 2101 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > get(iter_type __in, iter_type __end, ios_base& __io, > ios_base::iostate& __err, void*& __v) const > { return this->do_get(__in, __end, __io, __err, __v); } > > protected: > > virtual ~num_get() { } > > iter_type > _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&, > string&) const; > > template<typename _ValueT> > iter_type > _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, > _ValueT&) const; > > template<typename _CharT2> > typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type > _M_find(const _CharT2*, size_t __len, _CharT2 __c) const > { > int __ret = -1; > if (__len <= 10) > { > if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len)) > __ret = __c - _CharT2('0'); > } > else > { > if (__c >= _CharT2('0') && __c <= _CharT2('9')) > __ret = __c - _CharT2('0'); > else if (__c >= _CharT2('a') && __c <= _CharT2('f')) > __ret = 10 + (__c - _CharT2('a')); > else if (__c >= _CharT2('A') && __c <= _CharT2('F')) > __ret = 10 + (__c - _CharT2('A')); > } > return __ret; > } > > template<typename _CharT2> > typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value, > int>::__type > _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const > { > int __ret = -1; > const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); > if (__q) > { > __ret = __q - __zero; > if (__ret > 15) > __ret -= 6; > } > return __ret; > } ># 2172 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned short& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned int& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > virtual iter_type > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, unsigned long long& __v) const > { return _M_extract_int(__beg, __end, __io, __err, __v); } > > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, > double&) const; > > > > > > > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, > long double&) const; > > > virtual iter_type > do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const; ># 2235 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > }; > > template<typename _CharT, typename _InIter> > locale::id num_get<_CharT, _InIter>::id; ># 2253 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > template<typename _CharT, typename _OutIter> > class num_put : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _OutIter iter_type; > > > > static locale::id id; ># 2274 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > explicit > num_put(size_t __refs = 0) : facet(__refs) { } ># 2292 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const > { return this->do_put(__s, __io, __fill, __v); } ># 2334 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, long __v) const > { return this->do_put(__s, __io, __fill, __v); } > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long __v) const > { return this->do_put(__s, __io, __fill, __v); } > > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const > { return this->do_put(__s, __io, __fill, __v); } > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long long __v) const > { return this->do_put(__s, __io, __fill, __v); } ># 2397 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, double __v) const > { return this->do_put(__s, __io, __fill, __v); } > > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > long double __v) const > { return this->do_put(__s, __io, __fill, __v); } ># 2422 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > const void* __v) const > { return this->do_put(__s, __io, __fill, __v); } > > protected: > template<typename _ValueT> > iter_type > _M_insert_float(iter_type, ios_base& __io, char_type __fill, > char __mod, _ValueT __v) const; > > void > _M_group_float(const char* __grouping, size_t __grouping_size, > char_type __sep, const char_type* __p, char_type* __new, > char_type* __cs, int& __len) const; > > template<typename _ValueT> > iter_type > _M_insert_int(iter_type, ios_base& __io, char_type __fill, > _ValueT __v) const; > > void > _M_group_int(const char* __grouping, size_t __grouping_size, > char_type __sep, ios_base& __io, char_type* __new, > char_type* __cs, int& __len) const; > > void > _M_pad(char_type __fill, streamsize __w, ios_base& __io, > char_type* __new, const char_type* __cs, int& __len) const; > > > virtual > ~num_put() { }; ># 2470 "/usr/include/c++/4.8.2/bits/locale_facets.h" 3 > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const; > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, > long long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, > unsigned long long __v) const > { return _M_insert_int(__s, __io, __fill, __v); } > > > virtual iter_type > do_put(iter_type, ios_base&, char_type, double) const; > > > > > > > virtual iter_type > do_put(iter_type, ios_base&, char_type, long double) const; > > > virtual iter_type > do_put(iter_type, ios_base&, char_type, const void*) const; > > > > > > > > }; > > template <typename _CharT, typename _OutIter> > locale::id num_put<_CharT, _OutIter>::id; > > > > > > > > > > template<typename _CharT> > inline bool > isspace(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); } > > > template<typename _CharT> > inline bool > isprint(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); } > > > template<typename _CharT> > inline bool > iscntrl(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); } > > > template<typename _CharT> > inline bool > isupper(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); } > > > template<typename _CharT> > inline bool > islower(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); } > > > template<typename _CharT> > inline bool > isalpha(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); } > > > template<typename _CharT> > inline bool > isdigit(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); } > > > template<typename _CharT> > inline bool > ispunct(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); } > > > template<typename _CharT> > inline bool > isxdigit(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); } > > > template<typename _CharT> > inline bool > isalnum(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); } > > > template<typename _CharT> > inline bool > isgraph(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); } > > > template<typename _CharT> > inline _CharT > toupper(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).toupper(__c); } > > > template<typename _CharT> > inline _CharT > tolower(_CharT __c, const locale& __loc) > { return use_facet<ctype<_CharT> >(__loc).tolower(__c); } > > >} > ># 1 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > ># 34 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > template<typename _Facet> > struct __use_cache > { > const _Facet* > operator() (const locale& __loc) const; > }; > > > template<typename _CharT> > struct __use_cache<__numpunct_cache<_CharT> > > { > const __numpunct_cache<_CharT>* > operator() (const locale& __loc) const > { > const size_t __i = numpunct<_CharT>::id._M_id(); > const locale::facet** __caches = __loc._M_impl->_M_caches; > if (!__caches[__i]) > { > __numpunct_cache<_CharT>* __tmp = 0; > try > { > __tmp = new __numpunct_cache<_CharT>; > __tmp->_M_cache(__loc); > } > catch(...) > { > delete __tmp; > throw; > } > __loc._M_impl->_M_install_cache(__tmp, __i); > } > return static_cast<const __numpunct_cache<_CharT>*>(__caches[__i]); > } > }; > > template<typename _CharT> > void > __numpunct_cache<_CharT>::_M_cache(const locale& __loc) > { > _M_allocated = true; > > const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc); > > char* __grouping = 0; > _CharT* __truename = 0; > _CharT* __falsename = 0; > try > { > _M_grouping_size = __np.grouping().size(); > __grouping = new char[_M_grouping_size]; > __np.grouping().copy(__grouping, _M_grouping_size); > _M_grouping = __grouping; > _M_use_grouping = (_M_grouping_size > && static_cast<signed char>(_M_grouping[0]) > 0 > && (_M_grouping[0] > != __gnu_cxx::__numeric_traits<char>::__max)); > > _M_truename_size = __np.truename().size(); > __truename = new _CharT[_M_truename_size]; > __np.truename().copy(__truename, _M_truename_size); > _M_truename = __truename; > > _M_falsename_size = __np.falsename().size(); > __falsename = new _CharT[_M_falsename_size]; > __np.falsename().copy(__falsename, _M_falsename_size); > _M_falsename = __falsename; > > _M_decimal_point = __np.decimal_point(); > _M_thousands_sep = __np.thousands_sep(); > > const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc); > __ct.widen(__num_base::_S_atoms_out, > __num_base::_S_atoms_out > + __num_base::_S_oend, _M_atoms_out); > __ct.widen(__num_base::_S_atoms_in, > __num_base::_S_atoms_in > + __num_base::_S_iend, _M_atoms_in); > } > catch(...) > { > delete [] __grouping; > delete [] __truename; > delete [] __falsename; > throw; > } > } ># 136 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > __attribute__ ((__pure__)) bool > __verify_grouping(const char* __grouping, size_t __grouping_size, > const string& __grouping_tmp) throw (); > > > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io, > ios_base::iostate& __err, string& __xtrc) const > { > typedef char_traits<_CharT> __traits_type; > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > const _CharT* __lit = __lc->_M_atoms_in; > char_type __c = char_type(); > > > bool __testeof = __beg == __end; > > > if (!__testeof) > { > __c = *__beg; > const bool __plus = __c == __lit[__num_base::_S_iplus]; > if ((__plus || __c == __lit[__num_base::_S_iminus]) > && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > && !(__c == __lc->_M_decimal_point)) > { > __xtrc += __plus ? '+' : '-'; > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > } > > > bool __found_mantissa = false; > int __sep_pos = 0; > while (!__testeof) > { > if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > || __c == __lc->_M_decimal_point) > break; > else if (__c == __lit[__num_base::_S_izero]) > { > if (!__found_mantissa) > { > __xtrc += '0'; > __found_mantissa = true; > } > ++__sep_pos; > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > else > break; > } > > > bool __found_dec = false; > bool __found_sci = false; > string __found_grouping; > if (__lc->_M_use_grouping) > __found_grouping.reserve(32); > const char_type* __lit_zero = __lit + __num_base::_S_izero; > > if (!__lc->_M_allocated) > > while (!__testeof) > { > const int __digit = _M_find(__lit_zero, 10, __c); > if (__digit != -1) > { > __xtrc += '0' + __digit; > __found_mantissa = true; > } > else if (__c == __lc->_M_decimal_point > && !__found_dec && !__found_sci) > { > __xtrc += '.'; > __found_dec = true; > } > else if ((__c == __lit[__num_base::_S_ie] > || __c == __lit[__num_base::_S_iE]) > && !__found_sci && __found_mantissa) > { > > __xtrc += 'e'; > __found_sci = true; > > > if (++__beg != __end) > { > __c = *__beg; > const bool __plus = __c == __lit[__num_base::_S_iplus]; > if (__plus || __c == __lit[__num_base::_S_iminus]) > __xtrc += __plus ? '+' : '-'; > else > continue; > } > else > { > __testeof = true; > break; > } > } > else > break; > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > else > while (!__testeof) > { > > > if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > { > if (!__found_dec && !__found_sci) > { > > > if (__sep_pos) > { > __found_grouping += static_cast<char>(__sep_pos); > __sep_pos = 0; > } > else > { > > > __xtrc.clear(); > break; > } > } > else > break; > } > else if (__c == __lc->_M_decimal_point) > { > if (!__found_dec && !__found_sci) > { > > > > if (__found_grouping.size()) > __found_grouping += static_cast<char>(__sep_pos); > __xtrc += '.'; > __found_dec = true; > } > else > break; > } > else > { > const char_type* __q = > __traits_type::find(__lit_zero, 10, __c); > if (__q) > { > __xtrc += '0' + (__q - __lit_zero); > __found_mantissa = true; > ++__sep_pos; > } > else if ((__c == __lit[__num_base::_S_ie] > || __c == __lit[__num_base::_S_iE]) > && !__found_sci && __found_mantissa) > { > > if (__found_grouping.size() && !__found_dec) > __found_grouping += static_cast<char>(__sep_pos); > __xtrc += 'e'; > __found_sci = true; > > > if (++__beg != __end) > { > __c = *__beg; > const bool __plus = __c == __lit[__num_base::_S_iplus]; > if ((__plus || __c == __lit[__num_base::_S_iminus]) > && !(__lc->_M_use_grouping > && __c == __lc->_M_thousands_sep) > && !(__c == __lc->_M_decimal_point)) > __xtrc += __plus ? '+' : '-'; > else > continue; > } > else > { > __testeof = true; > break; > } > } > else > break; > } > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > > > > if (__found_grouping.size()) > { > > if (!__found_dec && !__found_sci) > __found_grouping += static_cast<char>(__sep_pos); > > if (!std::__verify_grouping(__lc->_M_grouping, > __lc->_M_grouping_size, > __found_grouping)) > __err = ios_base::failbit; > } > > return __beg; > } > > template<typename _CharT, typename _InIter> > template<typename _ValueT> > _InIter > num_get<_CharT, _InIter>:: > _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io, > ios_base::iostate& __err, _ValueT& __v) const > { > typedef char_traits<_CharT> __traits_type; > using __gnu_cxx::__add_unsigned; > typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > const _CharT* __lit = __lc->_M_atoms_in; > char_type __c = char_type(); > > > const ios_base::fmtflags __basefield = __io.flags() > & ios_base::basefield; > const bool __oct = __basefield == ios_base::oct; > int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10); > > > bool __testeof = __beg == __end; > > > bool __negative = false; > if (!__testeof) > { > __c = *__beg; > __negative = __c == __lit[__num_base::_S_iminus]; > if ((__negative || __c == __lit[__num_base::_S_iplus]) > && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > && !(__c == __lc->_M_decimal_point)) > { > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > } > > > > bool __found_zero = false; > int __sep_pos = 0; > while (!__testeof) > { > if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > || __c == __lc->_M_decimal_point) > break; > else if (__c == __lit[__num_base::_S_izero] > && (!__found_zero || __base == 10)) > { > __found_zero = true; > ++__sep_pos; > if (__basefield == 0) > __base = 8; > if (__base == 8) > __sep_pos = 0; > } > else if (__found_zero > && (__c == __lit[__num_base::_S_ix] > || __c == __lit[__num_base::_S_iX])) > { > if (__basefield == 0) > __base = 16; > if (__base == 16) > { > __found_zero = false; > __sep_pos = 0; > } > else > break; > } > else > break; > > if (++__beg != __end) > { > __c = *__beg; > if (!__found_zero) > break; > } > else > __testeof = true; > } > > > > const size_t __len = (__base == 16 ? __num_base::_S_iend > - __num_base::_S_izero : __base); > > > string __found_grouping; > if (__lc->_M_use_grouping) > __found_grouping.reserve(32); > bool __testfail = false; > bool __testoverflow = false; > const __unsigned_type __max = > (__negative && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) > ? -__gnu_cxx::__numeric_traits<_ValueT>::__min > : __gnu_cxx::__numeric_traits<_ValueT>::__max; > const __unsigned_type __smax = __max / __base; > __unsigned_type __result = 0; > int __digit = 0; > const char_type* __lit_zero = __lit + __num_base::_S_izero; > > if (!__lc->_M_allocated) > > while (!__testeof) > { > __digit = _M_find(__lit_zero, __len, __c); > if (__digit == -1) > break; > > if (__result > __smax) > __testoverflow = true; > else > { > __result *= __base; > __testoverflow |= __result > __max - __digit; > __result += __digit; > ++__sep_pos; > } > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > else > while (!__testeof) > { > > > if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) > { > > > if (__sep_pos) > { > __found_grouping += static_cast<char>(__sep_pos); > __sep_pos = 0; > } > else > { > __testfail = true; > break; > } > } > else if (__c == __lc->_M_decimal_point) > break; > else > { > const char_type* __q = > __traits_type::find(__lit_zero, __len, __c); > if (!__q) > break; > > __digit = __q - __lit_zero; > if (__digit > 15) > __digit -= 6; > if (__result > __smax) > __testoverflow = true; > else > { > __result *= __base; > __testoverflow |= __result > __max - __digit; > __result += __digit; > ++__sep_pos; > } > } > > if (++__beg != __end) > __c = *__beg; > else > __testeof = true; > } > > > > if (__found_grouping.size()) > { > > __found_grouping += static_cast<char>(__sep_pos); > > if (!std::__verify_grouping(__lc->_M_grouping, > __lc->_M_grouping_size, > __found_grouping)) > __err = ios_base::failbit; > } > > > > if ((!__sep_pos && !__found_zero && !__found_grouping.size()) > || __testfail) > { > __v = 0; > __err = ios_base::failbit; > } > else if (__testoverflow) > { > if (__negative > && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) > __v = __gnu_cxx::__numeric_traits<_ValueT>::__min; > else > __v = __gnu_cxx::__numeric_traits<_ValueT>::__max; > __err = ios_base::failbit; > } > else > __v = __negative ? -__result : __result; > > if (__testeof) > __err |= ios_base::eofbit; > return __beg; > } > > > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, bool& __v) const > { > if (!(__io.flags() & ios_base::boolalpha)) > { > > > > long __l = -1; > __beg = _M_extract_int(__beg, __end, __io, __err, __l); > if (__l == 0 || __l == 1) > __v = bool(__l); > else > { > > > __v = true; > __err = ios_base::failbit; > if (__beg == __end) > __err |= ios_base::eofbit; > } > } > else > { > > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > > bool __testf = true; > bool __testt = true; > bool __donef = __lc->_M_falsename_size == 0; > bool __donet = __lc->_M_truename_size == 0; > bool __testeof = false; > size_t __n = 0; > while (!__donef || !__donet) > { > if (__beg == __end) > { > __testeof = true; > break; > } > > const char_type __c = *__beg; > > if (!__donef) > __testf = __c == __lc->_M_falsename[__n]; > > if (!__testf && __donet) > break; > > if (!__donet) > __testt = __c == __lc->_M_truename[__n]; > > if (!__testt && __donef) > break; > > if (!__testt && !__testf) > break; > > ++__n; > ++__beg; > > __donef = !__testf || __n >= __lc->_M_falsename_size; > __donet = !__testt || __n >= __lc->_M_truename_size; > } > if (__testf && __n == __lc->_M_falsename_size && __n) > { > __v = false; > if (__testt && __n == __lc->_M_truename_size) > __err = ios_base::failbit; > else > __err = __testeof ? ios_base::eofbit : ios_base::goodbit; > } > else if (__testt && __n == __lc->_M_truename_size && __n) > { > __v = true; > __err = __testeof ? ios_base::eofbit : ios_base::goodbit; > } > else > { > > > __v = false; > __err = ios_base::failbit; > if (__testeof) > __err |= ios_base::eofbit; > } > } > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, float& __v) const > { > string __xtrc; > __xtrc.reserve(32); > __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); > std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, double& __v) const > { > string __xtrc; > __xtrc.reserve(32); > __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); > std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } ># 730 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, long double& __v) const > { > string __xtrc; > __xtrc.reserve(32); > __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); > std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > num_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, void*& __v) const > { > > typedef ios_base::fmtflags fmtflags; > const fmtflags __fmt = __io.flags(); > __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex); > > typedef __gnu_cxx::__conditional_type<(sizeof(void*) > <= sizeof(unsigned long)), > unsigned long, unsigned long long>::__type _UIntPtrType; > > _UIntPtrType __ul; > __beg = _M_extract_int(__beg, __end, __io, __err, __ul); > > > __io.flags(__fmt); > > __v = reinterpret_cast<void*>(__ul); > return __beg; > } > > > > template<typename _CharT, typename _OutIter> > void > num_put<_CharT, _OutIter>:: > _M_pad(_CharT __fill, streamsize __w, ios_base& __io, > _CharT* __new, const _CharT* __cs, int& __len) const > { > > > __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new, > __cs, __w, __len); > __len = static_cast<int>(__w); > } > > > > template<typename _CharT, typename _ValueT> > int > __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit, > ios_base::fmtflags __flags, bool __dec) > { > _CharT* __buf = __bufend; > if (__builtin_expect(__dec, true)) > { > > do > { > *--__buf = __lit[(__v % 10) + __num_base::_S_odigits]; > __v /= 10; > } > while (__v != 0); > } > else if ((__flags & ios_base::basefield) == ios_base::oct) > { > > do > { > *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits]; > __v >>= 3; > } > while (__v != 0); > } > else > { > > const bool __uppercase = __flags & ios_base::uppercase; > const int __case_offset = __uppercase ? __num_base::_S_oudigits > : __num_base::_S_odigits; > do > { > *--__buf = __lit[(__v & 0xf) + __case_offset]; > __v >>= 4; > } > while (__v != 0); > } > return __bufend - __buf; > } > > > > template<typename _CharT, typename _OutIter> > void > num_put<_CharT, _OutIter>:: > _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep, > ios_base&, _CharT* __new, _CharT* __cs, int& __len) const > { > _CharT* __p = std::__add_grouping(__new, __sep, __grouping, > __grouping_size, __cs, __cs + __len); > __len = __p - __new; > } > > template<typename _CharT, typename _OutIter> > template<typename _ValueT> > _OutIter > num_put<_CharT, _OutIter>:: > _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill, > _ValueT __v) const > { > using __gnu_cxx::__add_unsigned; > typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > const _CharT* __lit = __lc->_M_atoms_out; > const ios_base::fmtflags __flags = __io.flags(); > > > const int __ilen = 5 * sizeof(_ValueT); > _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __ilen)); > > > > const ios_base::fmtflags __basefield = __flags & ios_base::basefield; > const bool __dec = (__basefield != ios_base::oct > && __basefield != ios_base::hex); > const __unsigned_type __u = ((__v > 0 || !__dec) > ? __unsigned_type(__v) > : -__unsigned_type(__v)); > int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec); > __cs += __ilen - __len; > > > if (__lc->_M_use_grouping) > { > > > _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * (__len + 1) > * 2)); > _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size, > __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len); > __cs = __cs2 + 2; > } > > > if (__builtin_expect(__dec, true)) > { > > if (__v >= 0) > { > if (bool(__flags & ios_base::showpos) > && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) > *--__cs = __lit[__num_base::_S_oplus], ++__len; > } > else > *--__cs = __lit[__num_base::_S_ominus], ++__len; > } > else if (bool(__flags & ios_base::showbase) && __v) > { > if (__basefield == ios_base::oct) > *--__cs = __lit[__num_base::_S_odigits], ++__len; > else > { > > const bool __uppercase = __flags & ios_base::uppercase; > *--__cs = __lit[__num_base::_S_ox + __uppercase]; > > *--__cs = __lit[__num_base::_S_odigits]; > __len += 2; > } > } > > > const streamsize __w = __io.width(); > if (__w > static_cast<streamsize>(__len)) > { > _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __w)); > _M_pad(__fill, __w, __io, __cs3, __cs, __len); > __cs = __cs3; > } > __io.width(0); > > > > return std::__write(__s, __cs, __len); > } > > template<typename _CharT, typename _OutIter> > void > num_put<_CharT, _OutIter>:: > _M_group_float(const char* __grouping, size_t __grouping_size, > _CharT __sep, const _CharT* __p, _CharT* __new, > _CharT* __cs, int& __len) const > { > > > > const int __declen = __p ? __p - __cs : __len; > _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping, > __grouping_size, > __cs, __cs + __declen); > > > int __newlen = __p2 - __new; > if (__p) > { > char_traits<_CharT>::copy(__p2, __p, __len - __declen); > __newlen += __len - __declen; > } > __len = __newlen; > } ># 966 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _OutIter> > template<typename _ValueT> > _OutIter > num_put<_CharT, _OutIter>:: > _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, > _ValueT __v) const > { > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > > > const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); > > const int __max_digits = > __gnu_cxx::__numeric_traits<_ValueT>::__digits10; > > > int __len; > > char __fbuf[16]; > __num_base::_S_format_float(__io, __fbuf, __mod); > > > > > int __cs_size = __max_digits * 3; > char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > __fbuf, __prec, __v); > > > if (__len >= __cs_size) > { > __cs_size = __len + 1; > __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > __fbuf, __prec, __v); > } ># 1027 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __len)); > __ctype.widen(__cs, __cs + __len, __ws); > > > _CharT* __wp = 0; > const char* __p = char_traits<char>::find(__cs, __len, '.'); > if (__p) > { > __wp = __ws + (__p - __cs); > *__wp = __lc->_M_decimal_point; > } > > > > > if (__lc->_M_use_grouping > && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9' > && __cs[1] >= '0' && __cs[2] >= '0'))) > { > > > _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __len * 2)); > > streamsize __off = 0; > if (__cs[0] == '-' || __cs[0] == '+') > { > __off = 1; > __ws2[0] = __ws[0]; > __len -= 1; > } > > _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size, > __lc->_M_thousands_sep, __wp, __ws2 + __off, > __ws + __off, __len); > __len += __off; > > __ws = __ws2; > } > > > const streamsize __w = __io.width(); > if (__w > static_cast<streamsize>(__len)) > { > _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __w)); > _M_pad(__fill, __w, __io, __ws3, __ws, __len); > __ws = __ws3; > } > __io.width(0); > > > > return std::__write(__s, __ws, __len); > } > > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const > { > const ios_base::fmtflags __flags = __io.flags(); > if ((__flags & ios_base::boolalpha) == 0) > { > const long __l = __v; > __s = _M_insert_int(__s, __io, __fill, __l); > } > else > { > typedef __numpunct_cache<_CharT> __cache_type; > __use_cache<__cache_type> __uc; > const locale& __loc = __io._M_getloc(); > const __cache_type* __lc = __uc(__loc); > > const _CharT* __name = __v ? __lc->_M_truename > : __lc->_M_falsename; > int __len = __v ? __lc->_M_truename_size > : __lc->_M_falsename_size; > > const streamsize __w = __io.width(); > if (__w > static_cast<streamsize>(__len)) > { > const streamsize __plen = __w - __len; > _CharT* __ps > = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) > * __plen)); > > char_traits<_CharT>::assign(__ps, __plen, __fill); > __io.width(0); > > if ((__flags & ios_base::adjustfield) == ios_base::left) > { > __s = std::__write(__s, __name, __len); > __s = std::__write(__s, __ps, __plen); > } > else > { > __s = std::__write(__s, __ps, __plen); > __s = std::__write(__s, __name, __len); > } > return __s; > } > __io.width(0); > __s = std::__write(__s, __name, __len); > } > return __s; > } > > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const > { return _M_insert_float(__s, __io, __fill, char(), __v); } ># 1152 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, > long double __v) const > { return _M_insert_float(__s, __io, __fill, 'L', __v); } > > template<typename _CharT, typename _OutIter> > _OutIter > num_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type __fill, > const void* __v) const > { > const ios_base::fmtflags __flags = __io.flags(); > const ios_base::fmtflags __fmt = ~(ios_base::basefield > | ios_base::uppercase); > __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase)); > > typedef __gnu_cxx::__conditional_type<(sizeof(const void*) > <= sizeof(unsigned long)), > unsigned long, unsigned long long>::__type _UIntPtrType; > > __s = _M_insert_int(__s, __io, __fill, > reinterpret_cast<_UIntPtrType>(__v)); > __io.flags(__flags); > return __s; > } > > ># 1189 "/usr/include/c++/4.8.2/bits/locale_facets.tcc" 3 > template<typename _CharT, typename _Traits> > void > __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill, > _CharT* __news, const _CharT* __olds, > streamsize __newlen, streamsize __oldlen) > { > const size_t __plen = static_cast<size_t>(__newlen - __oldlen); > const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield; > > > if (__adjust == ios_base::left) > { > _Traits::copy(__news, __olds, __oldlen); > _Traits::assign(__news + __oldlen, __plen, __fill); > return; > } > > size_t __mod = 0; > if (__adjust == ios_base::internal) > { > > > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > if (__ctype.widen('-') == __olds[0] > || __ctype.widen('+') == __olds[0]) > { > __news[0] = __olds[0]; > __mod = 1; > ++__news; > } > else if (__ctype.widen('0') == __olds[0] > && __oldlen > 1 > && (__ctype.widen('x') == __olds[1] > || __ctype.widen('X') == __olds[1])) > { > __news[0] = __olds[0]; > __news[1] = __olds[1]; > __mod = 2; > __news += 2; > } > > } > _Traits::assign(__news, __plen, __fill); > _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod); > } > > template<typename _CharT> > _CharT* > __add_grouping(_CharT* __s, _CharT __sep, > const char* __gbeg, size_t __gsize, > const _CharT* __first, const _CharT* __last) > { > size_t __idx = 0; > size_t __ctr = 0; > > while (__last - __first > __gbeg[__idx] > && static_cast<signed char>(__gbeg[__idx]) > 0 > && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max) > { > __last -= __gbeg[__idx]; > __idx < __gsize - 1 ? ++__idx : ++__ctr; > } > > while (__first != __last) > *__s++ = *__first++; > > while (__ctr--) > { > *__s++ = __sep; > for (char __i = __gbeg[__idx]; __i > 0; --__i) > *__s++ = *__first++; > } > > while (__idx--) > { > *__s++ = __sep; > for (char __i = __gbeg[__idx]; __i > 0; --__i) > *__s++ = *__first++; > } > > return __s; > } > > > > > extern template class numpunct<char>; > extern template class numpunct_byname<char>; > extern template class num_get<char>; > extern template class num_put<char>; > extern template class ctype_byname<char>; > > extern template > const ctype<char>& > use_facet<ctype<char> >(const locale&); > > extern template > const numpunct<char>& > use_facet<numpunct<char> >(const locale&); > > extern template > const num_put<char>& > use_facet<num_put<char> >(const locale&); > > extern template > const num_get<char>& > use_facet<num_get<char> >(const locale&); > > extern template > bool > has_facet<ctype<char> >(const locale&); > > extern template > bool > has_facet<numpunct<char> >(const locale&); > > extern template > bool > has_facet<num_put<char> >(const locale&); > > extern template > bool > has_facet<num_get<char> >(const locale&); > > > extern template class numpunct<wchar_t>; > extern template class numpunct_byname<wchar_t>; > extern template class num_get<wchar_t>; > extern template class num_put<wchar_t>; > extern template class ctype_byname<wchar_t>; > > extern template > const ctype<wchar_t>& > use_facet<ctype<wchar_t> >(const locale&); > > extern template > const numpunct<wchar_t>& > use_facet<numpunct<wchar_t> >(const locale&); > > extern template > const num_put<wchar_t>& > use_facet<num_put<wchar_t> >(const locale&); > > extern template > const num_get<wchar_t>& > use_facet<num_get<wchar_t> >(const locale&); > > extern template > bool > has_facet<ctype<wchar_t> >(const locale&); > > extern template > bool > has_facet<numpunct<wchar_t> >(const locale&); > > extern template > bool > has_facet<num_put<wchar_t> >(const locale&); > > extern template > bool > has_facet<num_get<wchar_t> >(const locale&); > > > > >} ># 2609 "/usr/include/c++/4.8.2/bits/locale_facets.h" 2 3 ># 41 "/usr/include/c++/4.8.2/locale" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > ># 38 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > ># 1 "/usr/include/c++/4.8.2/ctime" 1 3 ># 39 "/usr/include/c++/4.8.2/ctime" 3 > ># 40 "/usr/include/c++/4.8.2/ctime" 3 ># 58 "/usr/include/c++/4.8.2/ctime" 3 >namespace std >{ > using ::clock_t; > using ::time_t; > using ::tm; > > using ::clock; > using ::difftime; > using ::mktime; > using ::time; > using ::asctime; > using ::ctime; > using ::gmtime; > using ::localtime; > using ::strftime; >} ># 40 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 52 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > class time_base > { > public: > enum dateorder { no_order, dmy, mdy, ymd, ydm }; > }; > > template<typename _CharT> > struct __timepunct_cache : public locale::facet > { > > static const _CharT* _S_timezones[14]; > > const _CharT* _M_date_format; > const _CharT* _M_date_era_format; > const _CharT* _M_time_format; > const _CharT* _M_time_era_format; > const _CharT* _M_date_time_format; > const _CharT* _M_date_time_era_format; > const _CharT* _M_am; > const _CharT* _M_pm; > const _CharT* _M_am_pm_format; > > > const _CharT* _M_day1; > const _CharT* _M_day2; > const _CharT* _M_day3; > const _CharT* _M_day4; > const _CharT* _M_day5; > const _CharT* _M_day6; > const _CharT* _M_day7; > > > const _CharT* _M_aday1; > const _CharT* _M_aday2; > const _CharT* _M_aday3; > const _CharT* _M_aday4; > const _CharT* _M_aday5; > const _CharT* _M_aday6; > const _CharT* _M_aday7; > > > const _CharT* _M_month01; > const _CharT* _M_month02; > const _CharT* _M_month03; > const _CharT* _M_month04; > const _CharT* _M_month05; > const _CharT* _M_month06; > const _CharT* _M_month07; > const _CharT* _M_month08; > const _CharT* _M_month09; > const _CharT* _M_month10; > const _CharT* _M_month11; > const _CharT* _M_month12; > > > const _CharT* _M_amonth01; > const _CharT* _M_amonth02; > const _CharT* _M_amonth03; > const _CharT* _M_amonth04; > const _CharT* _M_amonth05; > const _CharT* _M_amonth06; > const _CharT* _M_amonth07; > const _CharT* _M_amonth08; > const _CharT* _M_amonth09; > const _CharT* _M_amonth10; > const _CharT* _M_amonth11; > const _CharT* _M_amonth12; > > bool _M_allocated; > > __timepunct_cache(size_t __refs = 0) : facet(__refs), > _M_date_format(0), _M_date_era_format(0), _M_time_format(0), > _M_time_era_format(0), _M_date_time_format(0), > _M_date_time_era_format(0), _M_am(0), _M_pm(0), > _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0), > _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0), > _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0), > _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0), > _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0), > _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0), > _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0), > _M_amonth02(0), _M_amonth03(0), _M_amonth04(0), > _M_amonth05(0), _M_amonth06(0), _M_amonth07(0), > _M_amonth08(0), _M_amonth09(0), _M_amonth10(0), > _M_amonth11(0), _M_amonth12(0), _M_allocated(false) > { } > > ~__timepunct_cache(); > > void > _M_cache(const locale& __loc); > > private: > __timepunct_cache& > operator=(const __timepunct_cache&); > > explicit > __timepunct_cache(const __timepunct_cache&); > }; > > template<typename _CharT> > __timepunct_cache<_CharT>::~__timepunct_cache() > { > if (_M_allocated) > { > > } > } > > > template<> > const char* > __timepunct_cache<char>::_S_timezones[14]; > > > template<> > const wchar_t* > __timepunct_cache<wchar_t>::_S_timezones[14]; > > > > template<typename _CharT> > const _CharT* __timepunct_cache<_CharT>::_S_timezones[14]; > > template<typename _CharT> > class __timepunct : public locale::facet > { > public: > > typedef _CharT __char_type; > typedef basic_string<_CharT> __string_type; > typedef __timepunct_cache<_CharT> __cache_type; > > protected: > __cache_type* _M_data; > __c_locale _M_c_locale_timepunct; > const char* _M_name_timepunct; > > public: > > static locale::id id; > > explicit > __timepunct(size_t __refs = 0); > > explicit > __timepunct(__cache_type* __cache, size_t __refs = 0); ># 210 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0); > > > > void > _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format, > const tm* __tm) const throw (); > > void > _M_date_formats(const _CharT** __date) const > { > > __date[0] = _M_data->_M_date_format; > __date[1] = _M_data->_M_date_era_format; > } > > void > _M_time_formats(const _CharT** __time) const > { > > __time[0] = _M_data->_M_time_format; > __time[1] = _M_data->_M_time_era_format; > } > > void > _M_date_time_formats(const _CharT** __dt) const > { > > __dt[0] = _M_data->_M_date_time_format; > __dt[1] = _M_data->_M_date_time_era_format; > } > > void > _M_am_pm_format(const _CharT* __ampm) const > { __ampm = _M_data->_M_am_pm_format; } > > void > _M_am_pm(const _CharT** __ampm) const > { > __ampm[0] = _M_data->_M_am; > __ampm[1] = _M_data->_M_pm; > } > > void > _M_days(const _CharT** __days) const > { > __days[0] = _M_data->_M_day1; > __days[1] = _M_data->_M_day2; > __days[2] = _M_data->_M_day3; > __days[3] = _M_data->_M_day4; > __days[4] = _M_data->_M_day5; > __days[5] = _M_data->_M_day6; > __days[6] = _M_data->_M_day7; > } > > void > _M_days_abbreviated(const _CharT** __days) const > { > __days[0] = _M_data->_M_aday1; > __days[1] = _M_data->_M_aday2; > __days[2] = _M_data->_M_aday3; > __days[3] = _M_data->_M_aday4; > __days[4] = _M_data->_M_aday5; > __days[5] = _M_data->_M_aday6; > __days[6] = _M_data->_M_aday7; > } > > void > _M_months(const _CharT** __months) const > { > __months[0] = _M_data->_M_month01; > __months[1] = _M_data->_M_month02; > __months[2] = _M_data->_M_month03; > __months[3] = _M_data->_M_month04; > __months[4] = _M_data->_M_month05; > __months[5] = _M_data->_M_month06; > __months[6] = _M_data->_M_month07; > __months[7] = _M_data->_M_month08; > __months[8] = _M_data->_M_month09; > __months[9] = _M_data->_M_month10; > __months[10] = _M_data->_M_month11; > __months[11] = _M_data->_M_month12; > } > > void > _M_months_abbreviated(const _CharT** __months) const > { > __months[0] = _M_data->_M_amonth01; > __months[1] = _M_data->_M_amonth02; > __months[2] = _M_data->_M_amonth03; > __months[3] = _M_data->_M_amonth04; > __months[4] = _M_data->_M_amonth05; > __months[5] = _M_data->_M_amonth06; > __months[6] = _M_data->_M_amonth07; > __months[7] = _M_data->_M_amonth08; > __months[8] = _M_data->_M_amonth09; > __months[9] = _M_data->_M_amonth10; > __months[10] = _M_data->_M_amonth11; > __months[11] = _M_data->_M_amonth12; > } > > protected: > virtual > ~__timepunct(); > > > void > _M_initialize_timepunct(__c_locale __cloc = 0); > }; > > template<typename _CharT> > locale::id __timepunct<_CharT>::id; > > > template<> > void > __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc); > > template<> > void > __timepunct<char>::_M_put(char*, size_t, const char*, const tm*) const throw (); > > > template<> > void > __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc); > > template<> > void > __timepunct<wchar_t>::_M_put(wchar_t*, size_t, const wchar_t*, > const tm*) const throw (); > > > >} > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/time_members.h" 1 3 ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/time_members.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT> > __timepunct<_CharT>::__timepunct(size_t __refs) > : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), > _M_name_timepunct(_S_get_c_name()) > { _M_initialize_timepunct(); } > > template<typename _CharT> > __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) > : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0), > _M_name_timepunct(_S_get_c_name()) > { _M_initialize_timepunct(); } > > template<typename _CharT> > __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, > size_t __refs) > : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), > _M_name_timepunct(0) > { > if (__builtin_strcmp(__s, _S_get_c_name()) != 0) > { > const size_t __len = __builtin_strlen(__s) + 1; > char* __tmp = new char[__len]; > __builtin_memcpy(__tmp, __s, __len); > _M_name_timepunct = __tmp; > } > else > _M_name_timepunct = _S_get_c_name(); > > try > { _M_initialize_timepunct(__cloc); } > catch(...) > { > if (_M_name_timepunct != _S_get_c_name()) > delete [] _M_name_timepunct; > throw; > } > } > > template<typename _CharT> > __timepunct<_CharT>::~__timepunct() > { > if (_M_name_timepunct != _S_get_c_name()) > delete [] _M_name_timepunct; > delete _M_data; > _S_destroy_c_locale(_M_c_locale_timepunct); > } > > >} ># 349 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 367 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _InIter> > class time_get : public locale::facet, public time_base > { > public: > > > > typedef _CharT char_type; > typedef _InIter iter_type; > > typedef basic_string<_CharT> __string_type; > > > static locale::id id; ># 389 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > time_get(size_t __refs = 0) > : facet (__refs) { } ># 406 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > dateorder > date_order() const > { return this->do_date_order(); } ># 430 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_time(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_time(__beg, __end, __io, __err, __tm); } ># 455 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_date(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_date(__beg, __end, __io, __err, __tm); } ># 483 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_weekday(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_weekday(__beg, __end, __io, __err, __tm); } ># 512 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_monthname(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_monthname(__beg, __end, __io, __err, __tm); } ># 538 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get_year(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { return this->do_get_year(__beg, __end, __io, __err, __tm); } > > protected: > > virtual > ~time_get() { } ># 558 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual dateorder > do_date_order() const; ># 576 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_time(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const; ># 595 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_date(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const; ># 614 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_weekday(iter_type __beg, iter_type __end, ios_base&, > ios_base::iostate& __err, tm* __tm) const; ># 633 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_monthname(iter_type __beg, iter_type __end, ios_base&, > ios_base::iostate& __err, tm* __tm) const; ># 652 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get_year(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const; > > > iter_type > _M_extract_num(iter_type __beg, iter_type __end, int& __member, > int __min, int __max, size_t __len, > ios_base& __io, ios_base::iostate& __err) const; > > > iter_type > _M_extract_name(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const; > > > iter_type > _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const; > > > iter_type > _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm, > const _CharT* __format) const; > }; > > template<typename _CharT, typename _InIter> > locale::id time_get<_CharT, _InIter>::id; > > > template<typename _CharT, typename _InIter> > class time_get_byname : public time_get<_CharT, _InIter> > { > public: > > typedef _CharT char_type; > typedef _InIter iter_type; > > explicit > time_get_byname(const char*, size_t __refs = 0) > : time_get<_CharT, _InIter>(__refs) { } > > protected: > virtual > ~time_get_byname() { } > }; ># 714 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _OutIter> > class time_put : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _OutIter iter_type; > > > > static locale::id id; ># 735 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > time_put(size_t __refs = 0) > : facet(__refs) { } ># 754 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, > const _CharT* __beg, const _CharT* __end) const; ># 774 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, ios_base& __io, char_type __fill, > const tm* __tm, char __format, char __mod = 0) const > { return this->do_put(__s, __io, __fill, __tm, __format, __mod); } > > protected: > > virtual > ~time_put() > { } ># 801 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, > char __format, char __mod) const; > }; > > template<typename _CharT, typename _OutIter> > locale::id time_put<_CharT, _OutIter>::id; > > > template<typename _CharT, typename _OutIter> > class time_put_byname : public time_put<_CharT, _OutIter> > { > public: > > typedef _CharT char_type; > typedef _OutIter iter_type; > > explicit > time_put_byname(const char*, size_t __refs = 0) > : time_put<_CharT, _OutIter>(__refs) > { }; > > protected: > virtual > ~time_put_byname() { } > }; ># 840 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > class money_base > { > public: > enum part { none, space, symbol, sign, value }; > struct pattern { char field[4]; }; > > static const pattern _S_default_pattern; > > enum > { > _S_minus, > _S_zero, > _S_end = 11 > }; > > > > static const char* _S_atoms; > > > > __attribute__ ((__const__)) static pattern > _S_construct_pattern(char __precedes, char __space, char __posn) throw (); > }; > > template<typename _CharT, bool _Intl> > struct __moneypunct_cache : public locale::facet > { > const char* _M_grouping; > size_t _M_grouping_size; > bool _M_use_grouping; > _CharT _M_decimal_point; > _CharT _M_thousands_sep; > const _CharT* _M_curr_symbol; > size_t _M_curr_symbol_size; > const _CharT* _M_positive_sign; > size_t _M_positive_sign_size; > const _CharT* _M_negative_sign; > size_t _M_negative_sign_size; > int _M_frac_digits; > money_base::pattern _M_pos_format; > money_base::pattern _M_neg_format; > > > > > _CharT _M_atoms[money_base::_S_end]; > > bool _M_allocated; > > __moneypunct_cache(size_t __refs = 0) : facet(__refs), > _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false), > _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()), > _M_curr_symbol(0), _M_curr_symbol_size(0), > _M_positive_sign(0), _M_positive_sign_size(0), > _M_negative_sign(0), _M_negative_sign_size(0), > _M_frac_digits(0), > _M_pos_format(money_base::pattern()), > _M_neg_format(money_base::pattern()), _M_allocated(false) > { } > > ~__moneypunct_cache(); > > void > _M_cache(const locale& __loc); > > private: > __moneypunct_cache& > operator=(const __moneypunct_cache&); > > explicit > __moneypunct_cache(const __moneypunct_cache&); > }; > > template<typename _CharT, bool _Intl> > __moneypunct_cache<_CharT, _Intl>::~__moneypunct_cache() > { > if (_M_allocated) > { > delete [] _M_grouping; > delete [] _M_curr_symbol; > delete [] _M_positive_sign; > delete [] _M_negative_sign; > } > } ># 933 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, bool _Intl> > class moneypunct : public locale::facet, public money_base > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > typedef __moneypunct_cache<_CharT, _Intl> __cache_type; > > private: > __cache_type* _M_data; > > public: > > > static const bool intl = _Intl; > > static locale::id id; ># 962 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > moneypunct(size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_moneypunct(); } ># 975 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > moneypunct(__cache_type* __cache, size_t __refs = 0) > : facet(__refs), _M_data(__cache) > { _M_initialize_moneypunct(); } ># 990 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0) > : facet(__refs), _M_data(0) > { _M_initialize_moneypunct(__cloc, __s); } ># 1004 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > char_type > decimal_point() const > { return this->do_decimal_point(); } ># 1017 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > char_type > thousands_sep() const > { return this->do_thousands_sep(); } ># 1047 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string > grouping() const > { return this->do_grouping(); } ># 1060 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > curr_symbol() const > { return this->do_curr_symbol(); } ># 1077 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > positive_sign() const > { return this->do_positive_sign(); } ># 1094 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > negative_sign() const > { return this->do_negative_sign(); } ># 1110 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > int > frac_digits() const > { return this->do_frac_digits(); } ># 1146 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > pattern > pos_format() const > { return this->do_pos_format(); } > > pattern > neg_format() const > { return this->do_neg_format(); } > > > protected: > > virtual > ~moneypunct(); ># 1168 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual char_type > do_decimal_point() const > { return _M_data->_M_decimal_point; } ># 1180 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual char_type > do_thousands_sep() const > { return _M_data->_M_thousands_sep; } ># 1193 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string > do_grouping() const > { return _M_data->_M_grouping; } ># 1206 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_curr_symbol() const > { return _M_data->_M_curr_symbol; } ># 1219 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_positive_sign() const > { return _M_data->_M_positive_sign; } ># 1232 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_negative_sign() const > { return _M_data->_M_negative_sign; } ># 1246 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual int > do_frac_digits() const > { return _M_data->_M_frac_digits; } ># 1260 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual pattern > do_pos_format() const > { return _M_data->_M_pos_format; } ># 1274 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual pattern > do_neg_format() const > { return _M_data->_M_neg_format; } > > > void > _M_initialize_moneypunct(__c_locale __cloc = 0, > const char* __name = 0); > }; > > template<typename _CharT, bool _Intl> > locale::id moneypunct<_CharT, _Intl>::id; > > template<typename _CharT, bool _Intl> > const bool moneypunct<_CharT, _Intl>::intl; > > template<> > moneypunct<char, true>::~moneypunct(); > > template<> > moneypunct<char, false>::~moneypunct(); > > template<> > void > moneypunct<char, true>::_M_initialize_moneypunct(__c_locale, const char*); > > template<> > void > moneypunct<char, false>::_M_initialize_moneypunct(__c_locale, const char*); > > > template<> > moneypunct<wchar_t, true>::~moneypunct(); > > template<> > moneypunct<wchar_t, false>::~moneypunct(); > > template<> > void > moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale, > const char*); > > template<> > void > moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale, > const char*); > > > > template<typename _CharT, bool _Intl> > class moneypunct_byname : public moneypunct<_CharT, _Intl> > { > public: > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > static const bool intl = _Intl; > > explicit > moneypunct_byname(const char* __s, size_t __refs = 0) > : moneypunct<_CharT, _Intl>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > __c_locale __tmp; > this->_S_create_c_locale(__tmp, __s); > this->_M_initialize_moneypunct(__tmp); > this->_S_destroy_c_locale(__tmp); > } > } > > protected: > virtual > ~moneypunct_byname() { } > }; > > template<typename _CharT, bool _Intl> > const bool moneypunct_byname<_CharT, _Intl>::intl; > > ># 1369 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _InIter> > class money_get : public locale::facet > { > public: > > > > typedef _CharT char_type; > typedef _InIter iter_type; > typedef basic_string<_CharT> string_type; > > > > static locale::id id; ># 1391 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > money_get(size_t __refs = 0) : facet(__refs) { } ># 1421 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, long double& __units) const > { return this->do_get(__s, __end, __intl, __io, __err, __units); } ># 1452 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, string_type& __digits) const > { return this->do_get(__s, __end, __intl, __io, __err, __digits); } > > protected: > > virtual > ~money_get() { } ># 1475 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, long double& __units) const; ># 1487 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, string_type& __digits) const; ># 1498 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<bool _Intl> > iter_type > _M_extract(iter_type __s, iter_type __end, ios_base& __io, > ios_base::iostate& __err, string& __digits) const; > }; > > template<typename _CharT, typename _InIter> > locale::id money_get<_CharT, _InIter>::id; ># 1520 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT, typename _OutIter> > class money_put : public locale::facet > { > public: > > > typedef _CharT char_type; > typedef _OutIter iter_type; > typedef basic_string<_CharT> string_type; > > > > static locale::id id; ># 1541 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > money_put(size_t __refs = 0) : facet(__refs) { } ># 1561 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, bool __intl, ios_base& __io, > char_type __fill, long double __units) const > { return this->do_put(__s, __intl, __io, __fill, __units); } ># 1584 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > iter_type > put(iter_type __s, bool __intl, ios_base& __io, > char_type __fill, const string_type& __digits) const > { return this->do_put(__s, __intl, __io, __fill, __digits); } > > protected: > > virtual > ~money_put() { } ># 1618 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > long double __units) const; ># 1642 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual iter_type > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > const string_type& __digits) const; ># 1653 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<bool _Intl> > iter_type > _M_insert(iter_type __s, ios_base& __io, char_type __fill, > const string_type& __digits) const; > }; > > template<typename _CharT, typename _OutIter> > locale::id money_put<_CharT, _OutIter>::id; > > > > > > > > struct messages_base > { > typedef int catalog; > }; ># 1694 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > template<typename _CharT> > class messages : public locale::facet, public messages_base > { > public: > > > > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > > protected: > > > __c_locale _M_c_locale_messages; > const char* _M_name_messages; > > public: > > static locale::id id; ># 1722 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > messages(size_t __refs = 0); ># 1736 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > explicit > messages(__c_locale __cloc, const char* __s, size_t __refs = 0); ># 1749 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > catalog > open(const basic_string<char>& __s, const locale& __loc) const > { return this->do_open(__s, __loc); } ># 1767 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > catalog > open(const basic_string<char>&, const locale&, const char*) const; ># 1785 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > string_type > get(catalog __c, int __set, int __msgid, const string_type& __s) const > { return this->do_get(__c, __set, __msgid, __s); } ># 1796 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > void > close(catalog __c) const > { return this->do_close(__c); } > > protected: > > virtual > ~messages(); ># 1816 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual catalog > do_open(const basic_string<char>&, const locale&) const; ># 1835 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 3 > virtual string_type > do_get(catalog, int, int, const string_type& __dfault) const; > > > > > > > virtual void > do_close(catalog) const; > > > char* > _M_convert_to_char(const string_type& __msg) const > { > > return reinterpret_cast<char*>(const_cast<_CharT*>(__msg.c_str())); > } > > > string_type > _M_convert_from_char(char*) const > { > > return string_type(); > } > }; > > template<typename _CharT> > locale::id messages<_CharT>::id; > > > template<> > string > messages<char>::do_get(catalog, int, int, const string&) const; > > > template<> > wstring > messages<wchar_t>::do_get(catalog, int, int, const wstring&) const; > > > > template<typename _CharT> > class messages_byname : public messages<_CharT> > { > public: > typedef _CharT char_type; > typedef basic_string<_CharT> string_type; > > explicit > messages_byname(const char* __s, size_t __refs = 0); > > protected: > virtual > ~messages_byname() > { } > }; > > >} > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/messages_members.h" 1 3 ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/messages_members.h" 3 ># 1 "/usr/include/libintl.h" 1 3 4 ># 34 "/usr/include/libintl.h" 3 4 >extern "C" { > > > > >extern char *gettext (const char *__msgid) > throw () __attribute__ ((__format_arg__ (1))); > > > >extern char *dgettext (const char *__domainname, const char *__msgid) > throw () __attribute__ ((__format_arg__ (2))); >extern char *__dgettext (const char *__domainname, const char *__msgid) > throw () __attribute__ ((__format_arg__ (2))); > > > >extern char *dcgettext (const char *__domainname, > const char *__msgid, int __category) > throw () __attribute__ ((__format_arg__ (2))); >extern char *__dcgettext (const char *__domainname, > const char *__msgid, int __category) > throw () __attribute__ ((__format_arg__ (2))); > > > > >extern char *ngettext (const char *__msgid1, const char *__msgid2, > unsigned long int __n) > throw () __attribute__ ((__format_arg__ (1))) __attribute__ ((__format_arg__ (2))); > > > >extern char *dngettext (const char *__domainname, const char *__msgid1, > const char *__msgid2, unsigned long int __n) > throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3))); > > > >extern char *dcngettext (const char *__domainname, const char *__msgid1, > const char *__msgid2, unsigned long int __n, > int __category) > throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3))); > > > > > >extern char *textdomain (const char *__domainname) throw (); > > > >extern char *bindtextdomain (const char *__domainname, > const char *__dirname) throw (); > > > >extern char *bind_textdomain_codeset (const char *__domainname, > const char *__codeset) throw (); ># 121 "/usr/include/libintl.h" 3 4 >} ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/messages_members.h" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > template<typename _CharT> > messages<_CharT>::messages(size_t __refs) > : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), > _M_name_messages(_S_get_c_name()) > { } > > template<typename _CharT> > messages<_CharT>::messages(__c_locale __cloc, const char* __s, > size_t __refs) > : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0) > { > if (__builtin_strcmp(__s, _S_get_c_name()) != 0) > { > const size_t __len = __builtin_strlen(__s) + 1; > char* __tmp = new char[__len]; > __builtin_memcpy(__tmp, __s, __len); > _M_name_messages = __tmp; > } > else > _M_name_messages = _S_get_c_name(); > > > _M_c_locale_messages = _S_clone_c_locale(__cloc); > } > > template<typename _CharT> > typename messages<_CharT>::catalog > messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, > const char* __dir) const > { > bindtextdomain(__s.c_str(), __dir); > return this->do_open(__s, __loc); > } > > > template<typename _CharT> > messages<_CharT>::~messages() > { > if (_M_name_messages != _S_get_c_name()) > delete [] _M_name_messages; > _S_destroy_c_locale(_M_c_locale_messages); > } > > template<typename _CharT> > typename messages<_CharT>::catalog > messages<_CharT>::do_open(const basic_string<char>& __s, > const locale&) const > { > > > textdomain(__s.c_str()); > return 0; > } > > template<typename _CharT> > void > messages<_CharT>::do_close(catalog) const > { } > > > template<typename _CharT> > messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) > : messages<_CharT>(__refs) > { > if (this->_M_name_messages != locale::facet::_S_get_c_name()) > { > delete [] this->_M_name_messages; > if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0) > { > const size_t __len = __builtin_strlen(__s) + 1; > char* __tmp = new char[__len]; > __builtin_memcpy(__tmp, __s, __len); > this->_M_name_messages = __tmp; > } > else > this->_M_name_messages = locale::facet::_S_get_c_name(); > } > > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > this->_S_destroy_c_locale(this->_M_c_locale_messages); > this->_S_create_c_locale(this->_M_c_locale_messages, __s); > } > } > > >} ># 1899 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > > ># 1 "/usr/include/c++/4.8.2/bits/codecvt.h" 1 3 ># 39 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > ># 40 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > class codecvt_base > { > public: > enum result > { > ok, > partial, > error, > noconv > }; > }; ># 67 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > template<typename _InternT, typename _ExternT, typename _StateT> > class __codecvt_abstract_base > : public locale::facet, public codecvt_base > { > public: > > typedef codecvt_base::result result; > typedef _InternT intern_type; > typedef _ExternT extern_type; > typedef _StateT state_type; ># 115 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > result > out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const > { > return this->do_out(__state, __from, __from_end, __from_next, > __to, __to_end, __to_next); > } ># 154 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > result > unshift(state_type& __state, extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const > { return this->do_unshift(__state, __to,__to_end,__to_next); } ># 195 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > result > in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const > { > return this->do_in(__state, __from, __from_end, __from_next, > __to, __to_end, __to_next); > } > > int > encoding() const throw() > { return this->do_encoding(); } > > bool > always_noconv() const throw() > { return this->do_always_noconv(); } > > int > length(state_type& __state, const extern_type* __from, > const extern_type* __end, size_t __max) const > { return this->do_length(__state, __from, __end, __max); } > > int > max_length() const throw() > { return this->do_max_length(); } > > protected: > explicit > __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { } > > virtual > ~__codecvt_abstract_base() { } ># 236 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const = 0; > > virtual result > do_unshift(state_type& __state, extern_type* __to, > extern_type* __to_end, extern_type*& __to_next) const = 0; > > virtual result > do_in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const = 0; > > virtual int > do_encoding() const throw() = 0; > > virtual bool > do_always_noconv() const throw() = 0; > > virtual int > do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const = 0; > > virtual int > do_max_length() const throw() = 0; > }; ># 275 "/usr/include/c++/4.8.2/bits/codecvt.h" 3 > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt > : public __codecvt_abstract_base<_InternT, _ExternT, _StateT> > { > public: > > typedef codecvt_base::result result; > typedef _InternT intern_type; > typedef _ExternT extern_type; > typedef _StateT state_type; > > protected: > __c_locale _M_c_locale_codecvt; > > public: > static locale::id id; > > explicit > codecvt(size_t __refs = 0) > : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs), > _M_c_locale_codecvt(0) > { } > > explicit > codecvt(__c_locale __cloc, size_t __refs = 0); > > protected: > virtual > ~codecvt() { } > > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_unshift(state_type& __state, extern_type* __to, > extern_type* __to_end, extern_type*& __to_next) const; > > virtual result > do_in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const; > > virtual int > do_encoding() const throw(); > > virtual bool > do_always_noconv() const throw(); > > virtual int > do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const; > > virtual int > do_max_length() const throw(); > }; > > template<typename _InternT, typename _ExternT, typename _StateT> > locale::id codecvt<_InternT, _ExternT, _StateT>::id; > > > template<> > class codecvt<char, char, mbstate_t> > : public __codecvt_abstract_base<char, char, mbstate_t> > { > public: > > typedef char intern_type; > typedef char extern_type; > typedef mbstate_t state_type; > > protected: > __c_locale _M_c_locale_codecvt; > > public: > static locale::id id; > > explicit > codecvt(size_t __refs = 0); > > explicit > codecvt(__c_locale __cloc, size_t __refs = 0); > > protected: > virtual > ~codecvt(); > > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_unshift(state_type& __state, extern_type* __to, > extern_type* __to_end, extern_type*& __to_next) const; > > virtual result > do_in(state_type& __state, const extern_type* __from, > const extern_type* __from_end, const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const; > > virtual int > do_encoding() const throw(); > > virtual bool > do_always_noconv() const throw(); > > virtual int > do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const; > > virtual int > do_max_length() const throw(); > }; > > > > template<> > class codecvt<wchar_t, char, mbstate_t> > : public __codecvt_abstract_base<wchar_t, char, mbstate_t> > { > public: > > typedef wchar_t intern_type; > typedef char extern_type; > typedef mbstate_t state_type; > > protected: > __c_locale _M_c_locale_codecvt; > > public: > static locale::id id; > > explicit > codecvt(size_t __refs = 0); > > explicit > codecvt(__c_locale __cloc, size_t __refs = 0); > > protected: > virtual > ~codecvt(); > > virtual result > do_out(state_type& __state, const intern_type* __from, > const intern_type* __from_end, const intern_type*& __from_next, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_unshift(state_type& __state, > extern_type* __to, extern_type* __to_end, > extern_type*& __to_next) const; > > virtual result > do_in(state_type& __state, > const extern_type* __from, const extern_type* __from_end, > const extern_type*& __from_next, > intern_type* __to, intern_type* __to_end, > intern_type*& __to_next) const; > > virtual > int do_encoding() const throw(); > > virtual > bool do_always_noconv() const throw(); > > virtual > int do_length(state_type&, const extern_type* __from, > const extern_type* __end, size_t __max) const; > > virtual int > do_max_length() const throw(); > }; > > > > template<typename _InternT, typename _ExternT, typename _StateT> > class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> > { > public: > explicit > codecvt_byname(const char* __s, size_t __refs = 0) > : codecvt<_InternT, _ExternT, _StateT>(__refs) > { > if (__builtin_strcmp(__s, "C") != 0 > && __builtin_strcmp(__s, "POSIX") != 0) > { > this->_S_destroy_c_locale(this->_M_c_locale_codecvt); > this->_S_create_c_locale(this->_M_c_locale_codecvt, __s); > } > } > > protected: > virtual > ~codecvt_byname() { } > }; > > > > > extern template class codecvt_byname<char, char, mbstate_t>; > > extern template > const codecvt<char, char, mbstate_t>& > use_facet<codecvt<char, char, mbstate_t> >(const locale&); > > extern template > bool > has_facet<codecvt<char, char, mbstate_t> >(const locale&); > > > extern template class codecvt_byname<wchar_t, char, mbstate_t>; > > extern template > const codecvt<wchar_t, char, mbstate_t>& > use_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&); > > extern template > bool > has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&); > > > > >} ># 1902 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 > ># 1 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > ># 34 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, bool _Intl> > struct __use_cache<__moneypunct_cache<_CharT, _Intl> > > { > const __moneypunct_cache<_CharT, _Intl>* > operator() (const locale& __loc) const > { > const size_t __i = moneypunct<_CharT, _Intl>::id._M_id(); > const locale::facet** __caches = __loc._M_impl->_M_caches; > if (!__caches[__i]) > { > __moneypunct_cache<_CharT, _Intl>* __tmp = 0; > try > { > __tmp = new __moneypunct_cache<_CharT, _Intl>; > __tmp->_M_cache(__loc); > } > catch(...) > { > delete __tmp; > throw; > } > __loc._M_impl->_M_install_cache(__tmp, __i); > } > return static_cast< > const __moneypunct_cache<_CharT, _Intl>*>(__caches[__i]); > } > }; > > template<typename _CharT, bool _Intl> > void > __moneypunct_cache<_CharT, _Intl>::_M_cache(const locale& __loc) > { > _M_allocated = true; > > const moneypunct<_CharT, _Intl>& __mp = > use_facet<moneypunct<_CharT, _Intl> >(__loc); > > _M_decimal_point = __mp.decimal_point(); > _M_thousands_sep = __mp.thousands_sep(); > _M_frac_digits = __mp.frac_digits(); > > char* __grouping = 0; > _CharT* __curr_symbol = 0; > _CharT* __positive_sign = 0; > _CharT* __negative_sign = 0; > try > { > _M_grouping_size = __mp.grouping().size(); > __grouping = new char[_M_grouping_size]; > __mp.grouping().copy(__grouping, _M_grouping_size); > _M_grouping = __grouping; > _M_use_grouping = (_M_grouping_size > && static_cast<signed char>(_M_grouping[0]) > 0 > && (_M_grouping[0] > != __gnu_cxx::__numeric_traits<char>::__max)); > > _M_curr_symbol_size = __mp.curr_symbol().size(); > __curr_symbol = new _CharT[_M_curr_symbol_size]; > __mp.curr_symbol().copy(__curr_symbol, _M_curr_symbol_size); > _M_curr_symbol = __curr_symbol; > > _M_positive_sign_size = __mp.positive_sign().size(); > __positive_sign = new _CharT[_M_positive_sign_size]; > __mp.positive_sign().copy(__positive_sign, _M_positive_sign_size); > _M_positive_sign = __positive_sign; > > _M_negative_sign_size = __mp.negative_sign().size(); > __negative_sign = new _CharT[_M_negative_sign_size]; > __mp.negative_sign().copy(__negative_sign, _M_negative_sign_size); > _M_negative_sign = __negative_sign; > > _M_pos_format = __mp.pos_format(); > _M_neg_format = __mp.neg_format(); > > const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc); > __ct.widen(money_base::_S_atoms, > money_base::_S_atoms + money_base::_S_end, _M_atoms); > } > catch(...) > { > delete [] __grouping; > delete [] __curr_symbol; > delete [] __positive_sign; > delete [] __negative_sign; > throw; > } > } > > > > template<typename _CharT, typename _InIter> > template<bool _Intl> > _InIter > money_get<_CharT, _InIter>:: > _M_extract(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, string& __units) const > { > typedef char_traits<_CharT> __traits_type; > typedef typename string_type::size_type size_type; > typedef money_base::part part; > typedef __moneypunct_cache<_CharT, _Intl> __cache_type; > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > __use_cache<__cache_type> __uc; > const __cache_type* __lc = __uc(__loc); > const char_type* __lit = __lc->_M_atoms; > > > bool __negative = false; > > size_type __sign_size = 0; > > const bool __mandatory_sign = (__lc->_M_positive_sign_size > && __lc->_M_negative_sign_size); > > string __grouping_tmp; > if (__lc->_M_use_grouping) > __grouping_tmp.reserve(32); > > int __last_pos = 0; > > int __n = 0; > > bool __testvalid = true; > > bool __testdecfound = false; > > > string __res; > __res.reserve(32); > > const char_type* __lit_zero = __lit + money_base::_S_zero; > const money_base::pattern __p = __lc->_M_neg_format; > for (int __i = 0; __i < 4 && __testvalid; ++__i) > { > const part __which = static_cast<part>(__p.field[__i]); > switch (__which) > { > case money_base::symbol: > > > > > if (__io.flags() & ios_base::showbase || __sign_size > 1 > || __i == 0 > || (__i == 1 && (__mandatory_sign > || (static_cast<part>(__p.field[0]) > == money_base::sign) > || (static_cast<part>(__p.field[2]) > == money_base::space))) > || (__i == 2 && ((static_cast<part>(__p.field[3]) > == money_base::value) > || (__mandatory_sign > && (static_cast<part>(__p.field[3]) > == money_base::sign))))) > { > const size_type __len = __lc->_M_curr_symbol_size; > size_type __j = 0; > for (; __beg != __end && __j < __len > && *__beg == __lc->_M_curr_symbol[__j]; > ++__beg, ++__j); > if (__j != __len > && (__j || __io.flags() & ios_base::showbase)) > __testvalid = false; > } > break; > case money_base::sign: > > if (__lc->_M_positive_sign_size && __beg != __end > && *__beg == __lc->_M_positive_sign[0]) > { > __sign_size = __lc->_M_positive_sign_size; > ++__beg; > } > else if (__lc->_M_negative_sign_size && __beg != __end > && *__beg == __lc->_M_negative_sign[0]) > { > __negative = true; > __sign_size = __lc->_M_negative_sign_size; > ++__beg; > } > else if (__lc->_M_positive_sign_size > && !__lc->_M_negative_sign_size) > > > __negative = true; > else if (__mandatory_sign) > __testvalid = false; > break; > case money_base::value: > > > for (; __beg != __end; ++__beg) > { > const char_type __c = *__beg; > const char_type* __q = __traits_type::find(__lit_zero, > 10, __c); > if (__q != 0) > { > __res += money_base::_S_atoms[__q - __lit]; > ++__n; > } > else if (__c == __lc->_M_decimal_point > && !__testdecfound) > { > if (__lc->_M_frac_digits <= 0) > break; > > __last_pos = __n; > __n = 0; > __testdecfound = true; > } > else if (__lc->_M_use_grouping > && __c == __lc->_M_thousands_sep > && !__testdecfound) > { > if (__n) > { > > __grouping_tmp += static_cast<char>(__n); > __n = 0; > } > else > { > __testvalid = false; > break; > } > } > else > break; > } > if (__res.empty()) > __testvalid = false; > break; > case money_base::space: > > if (__beg != __end && __ctype.is(ctype_base::space, *__beg)) > ++__beg; > else > __testvalid = false; > case money_base::none: > > if (__i != 3) > for (; __beg != __end > && __ctype.is(ctype_base::space, *__beg); ++__beg); > break; > } > } > > > if (__sign_size > 1 && __testvalid) > { > const char_type* __sign = __negative ? __lc->_M_negative_sign > : __lc->_M_positive_sign; > size_type __i = 1; > for (; __beg != __end && __i < __sign_size > && *__beg == __sign[__i]; ++__beg, ++__i); > > if (__i != __sign_size) > __testvalid = false; > } > > if (__testvalid) > { > > if (__res.size() > 1) > { > const size_type __first = __res.find_first_not_of('0'); > const bool __only_zeros = __first == string::npos; > if (__first) > __res.erase(0, __only_zeros ? __res.size() - 1 : __first); > } > > > if (__negative && __res[0] != '0') > __res.insert(__res.begin(), '-'); > > > if (__grouping_tmp.size()) > { > > __grouping_tmp += static_cast<char>(__testdecfound ? __last_pos > : __n); > if (!std::__verify_grouping(__lc->_M_grouping, > __lc->_M_grouping_size, > __grouping_tmp)) > __err |= ios_base::failbit; > } > > > if (__testdecfound && __n != __lc->_M_frac_digits) > __testvalid = false; > } > > > if (!__testvalid) > __err |= ios_base::failbit; > else > __units.swap(__res); > > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } ># 362 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > template<typename _CharT, typename _InIter> > _InIter > money_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, long double& __units) const > { > string __str; > __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str) > : _M_extract<false>(__beg, __end, __io, __err, __str); > std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > money_get<_CharT, _InIter>:: > do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, > ios_base::iostate& __err, string_type& __digits) const > { > typedef typename string::size_type size_type; > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > string __str; > __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str) > : _M_extract<false>(__beg, __end, __io, __err, __str); > const size_type __len = __str.size(); > if (__len) > { > __digits.resize(__len); > __ctype.widen(__str.data(), __str.data() + __len, &__digits[0]); > } > return __beg; > } > > template<typename _CharT, typename _OutIter> > template<bool _Intl> > _OutIter > money_put<_CharT, _OutIter>:: > _M_insert(iter_type __s, ios_base& __io, char_type __fill, > const string_type& __digits) const > { > typedef typename string_type::size_type size_type; > typedef money_base::part part; > typedef __moneypunct_cache<_CharT, _Intl> __cache_type; > > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > __use_cache<__cache_type> __uc; > const __cache_type* __lc = __uc(__loc); > const char_type* __lit = __lc->_M_atoms; > > > > const char_type* __beg = __digits.data(); > > money_base::pattern __p; > const char_type* __sign; > size_type __sign_size; > if (!(*__beg == __lit[money_base::_S_minus])) > { > __p = __lc->_M_pos_format; > __sign = __lc->_M_positive_sign; > __sign_size = __lc->_M_positive_sign_size; > } > else > { > __p = __lc->_M_neg_format; > __sign = __lc->_M_negative_sign; > __sign_size = __lc->_M_negative_sign_size; > if (__digits.size()) > ++__beg; > } > > > size_type __len = __ctype.scan_not(ctype_base::digit, __beg, > __beg + __digits.size()) - __beg; > if (__len) > { > > > > string_type __value; > __value.reserve(2 * __len); > > > > long __paddec = __len - __lc->_M_frac_digits; > if (__paddec > 0) > { > if (__lc->_M_frac_digits < 0) > __paddec = __len; > if (__lc->_M_grouping_size) > { > __value.assign(2 * __paddec, char_type()); > _CharT* __vend = > std::__add_grouping(&__value[0], __lc->_M_thousands_sep, > __lc->_M_grouping, > __lc->_M_grouping_size, > __beg, __beg + __paddec); > __value.erase(__vend - &__value[0]); > } > else > __value.assign(__beg, __paddec); > } > > > if (__lc->_M_frac_digits > 0) > { > __value += __lc->_M_decimal_point; > if (__paddec >= 0) > __value.append(__beg + __paddec, __lc->_M_frac_digits); > else > { > > __value.append(-__paddec, __lit[money_base::_S_zero]); > __value.append(__beg, __len); > } > } > > > const ios_base::fmtflags __f = __io.flags() > & ios_base::adjustfield; > __len = __value.size() + __sign_size; > __len += ((__io.flags() & ios_base::showbase) > ? __lc->_M_curr_symbol_size : 0); > > string_type __res; > __res.reserve(2 * __len); > > const size_type __width = static_cast<size_type>(__io.width()); > const bool __testipad = (__f == ios_base::internal > && __len < __width); > > for (int __i = 0; __i < 4; ++__i) > { > const part __which = static_cast<part>(__p.field[__i]); > switch (__which) > { > case money_base::symbol: > if (__io.flags() & ios_base::showbase) > __res.append(__lc->_M_curr_symbol, > __lc->_M_curr_symbol_size); > break; > case money_base::sign: > > > > if (__sign_size) > __res += __sign[0]; > break; > case money_base::value: > __res += __value; > break; > case money_base::space: > > > > if (__testipad) > __res.append(__width - __len, __fill); > else > __res += __fill; > break; > case money_base::none: > if (__testipad) > __res.append(__width - __len, __fill); > break; > } > } > > > if (__sign_size > 1) > __res.append(__sign + 1, __sign_size - 1); > > > __len = __res.size(); > if (__width > __len) > { > if (__f == ios_base::left) > > __res.append(__width - __len, __fill); > else > > __res.insert(0, __width - __len, __fill); > __len = __width; > } > > > __s = std::__write(__s, __res.data(), __len); > } > __io.width(0); > return __s; > } ># 567 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > template<typename _CharT, typename _OutIter> > _OutIter > money_put<_CharT, _OutIter>:: > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > long double __units) const > { > const locale __loc = __io.getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > > int __cs_size = 64; > char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > > > int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > "%.*Lf", 0, __units); > > if (__len >= __cs_size) > { > __cs_size = __len + 1; > __cs = static_cast<char*>(__builtin_alloca(__cs_size)); > __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, > "%.*Lf", 0, __units); > } ># 599 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.tcc" 3 > string_type __digits(__len, char_type()); > __ctype.widen(__cs, __cs + __len, &__digits[0]); > return __intl ? _M_insert<true>(__s, __io, __fill, __digits) > : _M_insert<false>(__s, __io, __fill, __digits); > } > > template<typename _CharT, typename _OutIter> > _OutIter > money_put<_CharT, _OutIter>:: > do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, > const string_type& __digits) const > { return __intl ? _M_insert<true>(__s, __io, __fill, __digits) > : _M_insert<false>(__s, __io, __fill, __digits); } > > > > > > > template<typename _CharT, typename _InIter> > time_base::dateorder > time_get<_CharT, _InIter>::do_date_order() const > { return time_base::no_order; } > > > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm, > const _CharT* __format) const > { > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > const size_t __len = char_traits<_CharT>::length(__format); > > ios_base::iostate __tmperr = ios_base::goodbit; > size_t __i = 0; > for (; __beg != __end && __i < __len && !__tmperr; ++__i) > { > if (__ctype.narrow(__format[__i], 0) == '%') > { > > char __c = __ctype.narrow(__format[++__i], 0); > int __mem = 0; > if (__c == 'E' || __c == 'O') > __c = __ctype.narrow(__format[++__i], 0); > switch (__c) > { > const char* __cs; > _CharT __wcs[10]; > case 'a': > > const char_type* __days1[7]; > __tp._M_days_abbreviated(__days1); > __beg = _M_extract_name(__beg, __end, __tm->tm_wday, __days1, > 7, __io, __tmperr); > break; > case 'A': > > const char_type* __days2[7]; > __tp._M_days(__days2); > __beg = _M_extract_name(__beg, __end, __tm->tm_wday, __days2, > 7, __io, __tmperr); > break; > case 'h': > case 'b': > > const char_type* __months1[12]; > __tp._M_months_abbreviated(__months1); > __beg = _M_extract_name(__beg, __end, __tm->tm_mon, > __months1, 12, __io, __tmperr); > break; > case 'B': > > const char_type* __months2[12]; > __tp._M_months(__months2); > __beg = _M_extract_name(__beg, __end, __tm->tm_mon, > __months2, 12, __io, __tmperr); > break; > case 'c': > > const char_type* __dt[2]; > __tp._M_date_time_formats(__dt); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __dt[0]); > break; > case 'd': > > __beg = _M_extract_num(__beg, __end, __tm->tm_mday, 1, 31, 2, > __io, __tmperr); > break; > case 'e': > > > if (__ctype.is(ctype_base::space, *__beg)) > __beg = _M_extract_num(++__beg, __end, __tm->tm_mday, 1, 9, > 1, __io, __tmperr); > else > __beg = _M_extract_num(__beg, __end, __tm->tm_mday, 10, 31, > 2, __io, __tmperr); > break; > case 'D': > > __cs = "%m/%d/%y"; > __ctype.widen(__cs, __cs + 9, __wcs); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __wcs); > break; > case 'H': > > __beg = _M_extract_num(__beg, __end, __tm->tm_hour, 0, 23, 2, > __io, __tmperr); > break; > case 'I': > > __beg = _M_extract_num(__beg, __end, __tm->tm_hour, 1, 12, 2, > __io, __tmperr); > break; > case 'm': > > __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2, > __io, __tmperr); > if (!__tmperr) > __tm->tm_mon = __mem - 1; > break; > case 'M': > > __beg = _M_extract_num(__beg, __end, __tm->tm_min, 0, 59, 2, > __io, __tmperr); > break; > case 'n': > if (__ctype.narrow(*__beg, 0) == '\n') > ++__beg; > else > __tmperr |= ios_base::failbit; > break; > case 'R': > > __cs = "%H:%M"; > __ctype.widen(__cs, __cs + 6, __wcs); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __wcs); > break; > case 'S': > > > > __beg = _M_extract_num(__beg, __end, __tm->tm_sec, 0, 60, 2, > > > > __io, __tmperr); > break; > case 't': > if (__ctype.narrow(*__beg, 0) == '\t') > ++__beg; > else > __tmperr |= ios_base::failbit; > break; > case 'T': > > __cs = "%H:%M:%S"; > __ctype.widen(__cs, __cs + 9, __wcs); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __wcs); > break; > case 'x': > > const char_type* __dates[2]; > __tp._M_date_formats(__dates); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __dates[0]); > break; > case 'X': > > const char_type* __times[2]; > __tp._M_time_formats(__times); > __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, > __tm, __times[0]); > break; > case 'y': > case 'C': > > case 'Y': > > > > > __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4, > __io, __tmperr); > if (!__tmperr) > __tm->tm_year = __mem < 0 ? __mem + 100 : __mem - 1900; > break; > case 'Z': > > if (__ctype.is(ctype_base::upper, *__beg)) > { > int __tmp; > __beg = _M_extract_name(__beg, __end, __tmp, > __timepunct_cache<_CharT>::_S_timezones, > 14, __io, __tmperr); > > > if (__beg != __end && !__tmperr && __tmp == 0 > && (*__beg == __ctype.widen('-') > || *__beg == __ctype.widen('+'))) > { > __beg = _M_extract_num(__beg, __end, __tmp, 0, 23, 2, > __io, __tmperr); > __beg = _M_extract_num(__beg, __end, __tmp, 0, 59, 2, > __io, __tmperr); > } > } > else > __tmperr |= ios_base::failbit; > break; > default: > > __tmperr |= ios_base::failbit; > } > } > else > { > > if (__format[__i] == *__beg) > ++__beg; > else > __tmperr |= ios_base::failbit; > } > } > > if (__tmperr || __i != __len) > __err |= ios_base::failbit; > > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_num(iter_type __beg, iter_type __end, int& __member, > int __min, int __max, size_t __len, > ios_base& __io, ios_base::iostate& __err) const > { > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > > int __mult = __len == 2 ? 10 : (__len == 4 ? 1000 : 1); > > ++__min; > size_t __i = 0; > int __value = 0; > for (; __beg != __end && __i < __len; ++__beg, ++__i) > { > const char __c = __ctype.narrow(*__beg, '*'); > if (__c >= '0' && __c <= '9') > { > __value = __value * 10 + (__c - '0'); > const int __valuec = __value * __mult; > if (__valuec > __max || __valuec + __mult < __min) > break; > __mult /= 10; > } > else > break; > } > if (__i == __len) > __member = __value; > > else if (__len == 4 && __i == 2) > __member = __value - 100; > else > __err |= ios_base::failbit; > > return __beg; > } > > > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_name(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > int* __matches = static_cast<int*>(__builtin_alloca(sizeof(int) > * __indexlen)); > size_t __nmatches = 0; > size_t __pos = 0; > bool __testvalid = true; > const char_type* __name; > > > > > > if (__beg != __end) > { > const char_type __c = *__beg; > for (size_t __i1 = 0; __i1 < __indexlen; ++__i1) > if (__c == __names[__i1][0] > || __c == __ctype.toupper(__names[__i1][0])) > __matches[__nmatches++] = __i1; > } > > while (__nmatches > 1) > { > > size_t __minlen = __traits_type::length(__names[__matches[0]]); > for (size_t __i2 = 1; __i2 < __nmatches; ++__i2) > __minlen = std::min(__minlen, > __traits_type::length(__names[__matches[__i2]])); > ++__beg, ++__pos; > if (__pos < __minlen && __beg != __end) > for (size_t __i3 = 0; __i3 < __nmatches;) > { > __name = __names[__matches[__i3]]; > if (!(__name[__pos] == *__beg)) > __matches[__i3] = __matches[--__nmatches]; > else > ++__i3; > } > else > break; > } > > if (__nmatches == 1) > { > > ++__beg, ++__pos; > __name = __names[__matches[0]]; > const size_t __len = __traits_type::length(__name); > while (__pos < __len && __beg != __end && __name[__pos] == *__beg) > ++__beg, ++__pos; > > if (__len == __pos) > __member = __matches[0]; > else > __testvalid = false; > } > else > __testvalid = false; > if (!__testvalid) > __err |= ios_base::failbit; > > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, > const _CharT** __names, size_t __indexlen, > ios_base& __io, ios_base::iostate& __err) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > > int* __matches = static_cast<int*>(__builtin_alloca(2 * sizeof(int) > * __indexlen)); > size_t __nmatches = 0; > size_t* __matches_lengths = 0; > size_t __pos = 0; > > if (__beg != __end) > { > const char_type __c = *__beg; > for (size_t __i = 0; __i < 2 * __indexlen; ++__i) > if (__c == __names[__i][0] > || __c == __ctype.toupper(__names[__i][0])) > __matches[__nmatches++] = __i; > } > > if (__nmatches) > { > ++__beg, ++__pos; > > __matches_lengths > = static_cast<size_t*>(__builtin_alloca(sizeof(size_t) > * __nmatches)); > for (size_t __i = 0; __i < __nmatches; ++__i) > __matches_lengths[__i] > = __traits_type::length(__names[__matches[__i]]); > } > > for (; __beg != __end; ++__beg, ++__pos) > { > size_t __nskipped = 0; > const char_type __c = *__beg; > for (size_t __i = 0; __i < __nmatches;) > { > const char_type* __name = __names[__matches[__i]]; > if (__pos >= __matches_lengths[__i]) > ++__nskipped, ++__i; > else if (!(__name[__pos] == __c)) > { > --__nmatches; > __matches[__i] = __matches[__nmatches]; > __matches_lengths[__i] = __matches_lengths[__nmatches]; > } > else > ++__i; > } > if (__nskipped == __nmatches) > break; > } > > if ((__nmatches == 1 && __matches_lengths[0] == __pos) > || (__nmatches == 2 && (__matches_lengths[0] == __pos > || __matches_lengths[1] == __pos))) > __member = (__matches[0] >= __indexlen > ? __matches[0] - __indexlen : __matches[0]); > else > __err |= ios_base::failbit; > > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_time(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const char_type* __times[2]; > __tp._M_time_formats(__times); > __beg = _M_extract_via_format(__beg, __end, __io, __err, > __tm, __times[0]); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_date(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const char_type* __dates[2]; > __tp._M_date_formats(__dates); > __beg = _M_extract_via_format(__beg, __end, __io, __err, > __tm, __dates[0]); > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > const char_type* __days[14]; > __tp._M_days_abbreviated(__days); > __tp._M_days(__days + 7); > int __tmpwday; > ios_base::iostate __tmperr = ios_base::goodbit; > > __beg = _M_extract_wday_or_month(__beg, __end, __tmpwday, __days, 7, > __io, __tmperr); > if (!__tmperr) > __tm->tm_wday = __tmpwday; > else > __err |= ios_base::failbit; > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_monthname(iter_type __beg, iter_type __end, > ios_base& __io, ios_base::iostate& __err, tm* __tm) const > { > typedef char_traits<_CharT> __traits_type; > const locale& __loc = __io._M_getloc(); > const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > const char_type* __months[24]; > __tp._M_months_abbreviated(__months); > __tp._M_months(__months + 12); > int __tmpmon; > ios_base::iostate __tmperr = ios_base::goodbit; > > __beg = _M_extract_wday_or_month(__beg, __end, __tmpmon, __months, 12, > __io, __tmperr); > if (!__tmperr) > __tm->tm_mon = __tmpmon; > else > __err |= ios_base::failbit; > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _InIter> > _InIter > time_get<_CharT, _InIter>:: > do_get_year(iter_type __beg, iter_type __end, ios_base& __io, > ios_base::iostate& __err, tm* __tm) const > { > const locale& __loc = __io._M_getloc(); > const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc); > int __tmpyear; > ios_base::iostate __tmperr = ios_base::goodbit; > > __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 9999, 4, > __io, __tmperr); > if (!__tmperr) > __tm->tm_year = __tmpyear < 0 ? __tmpyear + 100 : __tmpyear - 1900; > else > __err |= ios_base::failbit; > > if (__beg == __end) > __err |= ios_base::eofbit; > return __beg; > } > > template<typename _CharT, typename _OutIter> > _OutIter > time_put<_CharT, _OutIter>:: > put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, > const _CharT* __beg, const _CharT* __end) const > { > const locale& __loc = __io._M_getloc(); > ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); > for (; __beg != __end; ++__beg) > if (__ctype.narrow(*__beg, 0) != '%') > { > *__s = *__beg; > ++__s; > } > else if (++__beg != __end) > { > char __format; > char __mod = 0; > const char __c = __ctype.narrow(*__beg, 0); > if (__c != 'E' && __c != 'O') > __format = __c; > else if (++__beg != __end) > { > __mod = __c; > __format = __ctype.narrow(*__beg, 0); > } > else > break; > __s = this->do_put(__s, __io, __fill, __tm, __format, __mod); > } > else > break; > return __s; > } > > template<typename _CharT, typename _OutIter> > _OutIter > time_put<_CharT, _OutIter>:: > do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm, > char __format, char __mod) const > { > const locale& __loc = __io._M_getloc(); > ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); > __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc); > > > > const size_t __maxlen = 128; > char_type __res[__maxlen]; > > > > > > > char_type __fmt[4]; > __fmt[0] = __ctype.widen('%'); > if (!__mod) > { > __fmt[1] = __format; > __fmt[2] = char_type(); > } > else > { > __fmt[1] = __mod; > __fmt[2] = __format; > __fmt[3] = char_type(); > } > > __tp._M_put(__res, __maxlen, __fmt, __tm); > > > return std::__write(__s, __res, char_traits<char_type>::length(__res)); > } > > > > > > extern template class moneypunct<char, false>; > extern template class moneypunct<char, true>; > extern template class moneypunct_byname<char, false>; > extern template class moneypunct_byname<char, true>; > extern template class money_get<char>; > extern template class money_put<char>; > extern template class __timepunct<char>; > extern template class time_put<char>; > extern template class time_put_byname<char>; > extern template class time_get<char>; > extern template class time_get_byname<char>; > extern template class messages<char>; > extern template class messages_byname<char>; > > extern template > const moneypunct<char, true>& > use_facet<moneypunct<char, true> >(const locale&); > > extern template > const moneypunct<char, false>& > use_facet<moneypunct<char, false> >(const locale&); > > extern template > const money_put<char>& > use_facet<money_put<char> >(const locale&); > > extern template > const money_get<char>& > use_facet<money_get<char> >(const locale&); > > extern template > const __timepunct<char>& > use_facet<__timepunct<char> >(const locale&); > > extern template > const time_put<char>& > use_facet<time_put<char> >(const locale&); > > extern template > const time_get<char>& > use_facet<time_get<char> >(const locale&); > > extern template > const messages<char>& > use_facet<messages<char> >(const locale&); > > extern template > bool > has_facet<moneypunct<char> >(const locale&); > > extern template > bool > has_facet<money_put<char> >(const locale&); > > extern template > bool > has_facet<money_get<char> >(const locale&); > > extern template > bool > has_facet<__timepunct<char> >(const locale&); > > extern template > bool > has_facet<time_put<char> >(const locale&); > > extern template > bool > has_facet<time_get<char> >(const locale&); > > extern template > bool > has_facet<messages<char> >(const locale&); > > > extern template class moneypunct<wchar_t, false>; > extern template class moneypunct<wchar_t, true>; > extern template class moneypunct_byname<wchar_t, false>; > extern template class moneypunct_byname<wchar_t, true>; > extern template class money_get<wchar_t>; > extern template class money_put<wchar_t>; > extern template class __timepunct<wchar_t>; > extern template class time_put<wchar_t>; > extern template class time_put_byname<wchar_t>; > extern template class time_get<wchar_t>; > extern template class time_get_byname<wchar_t>; > extern template class messages<wchar_t>; > extern template class messages_byname<wchar_t>; > > extern template > const moneypunct<wchar_t, true>& > use_facet<moneypunct<wchar_t, true> >(const locale&); > > extern template > const moneypunct<wchar_t, false>& > use_facet<moneypunct<wchar_t, false> >(const locale&); > > extern template > const money_put<wchar_t>& > use_facet<money_put<wchar_t> >(const locale&); > > extern template > const money_get<wchar_t>& > use_facet<money_get<wchar_t> >(const locale&); > > extern template > const __timepunct<wchar_t>& > use_facet<__timepunct<wchar_t> >(const locale&); > > extern template > const time_put<wchar_t>& > use_facet<time_put<wchar_t> >(const locale&); > > extern template > const time_get<wchar_t>& > use_facet<time_get<wchar_t> >(const locale&); > > extern template > const messages<wchar_t>& > use_facet<messages<wchar_t> >(const locale&); > > extern template > bool > has_facet<moneypunct<wchar_t> >(const locale&); > > extern template > bool > has_facet<money_put<wchar_t> >(const locale&); > > extern template > bool > has_facet<money_get<wchar_t> >(const locale&); > > extern template > bool > has_facet<__timepunct<wchar_t> >(const locale&); > > extern template > bool > has_facet<time_put<wchar_t> >(const locale&); > > extern template > bool > has_facet<time_get<wchar_t> >(const locale&); > > extern template > bool > has_facet<messages<wchar_t> >(const locale&); > > > > >} ># 1904 "/usr/include/c++/4.8.2/bits/locale_facets_nonio.h" 2 3 ># 42 "/usr/include/c++/4.8.2/locale" 2 3 ># 48 "gmic.h" 2 ># 70 "gmic.h" ># 1 "./CImg.h" 1 ># 73 "./CImg.h" ># 1 "/usr/include/c++/4.8.2/cstdio" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdio" 3 > ># 40 "/usr/include/c++/4.8.2/cstdio" 3 > > ># 1 "/usr/include/stdio.h" 1 3 4 ># 29 "/usr/include/stdio.h" 3 4 >extern "C" { > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 34 "/usr/include/stdio.h" 2 3 4 ># 74 "/usr/include/stdio.h" 3 4 ># 1 "/usr/include/libio.h" 1 3 4 ># 31 "/usr/include/libio.h" 3 4 ># 1 "/usr/include/_G_config.h" 1 3 4 ># 15 "/usr/include/_G_config.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 16 "/usr/include/_G_config.h" 2 3 4 > > > > ># 1 "/usr/include/wchar.h" 1 3 4 ># 21 "/usr/include/_G_config.h" 2 3 4 >typedef struct >{ > __off_t __pos; > __mbstate_t __state; >} _G_fpos_t; >typedef struct >{ > __off64_t __pos; > __mbstate_t __state; >} _G_fpos64_t; ># 32 "/usr/include/libio.h" 2 3 4 ># 49 "/usr/include/libio.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 1 3 4 ># 50 "/usr/include/libio.h" 2 3 4 ># 144 "/usr/include/libio.h" 3 4 >struct _IO_jump_t; struct _IO_FILE; ># 154 "/usr/include/libio.h" 3 4 >typedef void _IO_lock_t; > > > > > >struct _IO_marker { > struct _IO_marker *_next; > struct _IO_FILE *_sbuf; > > > > int _pos; ># 177 "/usr/include/libio.h" 3 4 >}; > > >enum __codecvt_result >{ > __codecvt_ok, > __codecvt_partial, > __codecvt_error, > __codecvt_noconv >}; ># 245 "/usr/include/libio.h" 3 4 >struct _IO_FILE { > int _flags; > > > > > char* _IO_read_ptr; > char* _IO_read_end; > char* _IO_read_base; > char* _IO_write_base; > char* _IO_write_ptr; > char* _IO_write_end; > char* _IO_buf_base; > char* _IO_buf_end; > > char *_IO_save_base; > char *_IO_backup_base; > char *_IO_save_end; > > struct _IO_marker *_markers; > > struct _IO_FILE *_chain; > > int _fileno; > > > > int _flags2; > > __off_t _old_offset; > > > > unsigned short _cur_column; > signed char _vtable_offset; > char _shortbuf[1]; > > > > _IO_lock_t *_lock; ># 293 "/usr/include/libio.h" 3 4 > __off64_t _offset; ># 302 "/usr/include/libio.h" 3 4 > void *__pad1; > void *__pad2; > void *__pad3; > void *__pad4; > size_t __pad5; > > int _mode; > > char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; > >}; > > > > > >struct _IO_FILE_plus; > >extern struct _IO_FILE_plus _IO_2_1_stdin_; >extern struct _IO_FILE_plus _IO_2_1_stdout_; >extern struct _IO_FILE_plus _IO_2_1_stderr_; ># 338 "/usr/include/libio.h" 3 4 >typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes); > > > > > > > >typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf, > size_t __n); > > > > > > > >typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w); > > >typedef int __io_close_fn (void *__cookie); > > > > >typedef __io_read_fn cookie_read_function_t; >typedef __io_write_fn cookie_write_function_t; >typedef __io_seek_fn cookie_seek_function_t; >typedef __io_close_fn cookie_close_function_t; > > >typedef struct >{ > __io_read_fn *read; > __io_write_fn *write; > __io_seek_fn *seek; > __io_close_fn *close; >} _IO_cookie_io_functions_t; >typedef _IO_cookie_io_functions_t cookie_io_functions_t; > >struct _IO_cookie_file; > > >extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write, > void *__cookie, _IO_cookie_io_functions_t __fns); > > > > >extern "C" { > > >extern int __underflow (_IO_FILE *); >extern int __uflow (_IO_FILE *); >extern int __overflow (_IO_FILE *, int); ># 434 "/usr/include/libio.h" 3 4 >extern int _IO_getc (_IO_FILE *__fp); >extern int _IO_putc (int __c, _IO_FILE *__fp); >extern int _IO_feof (_IO_FILE *__fp) throw (); >extern int _IO_ferror (_IO_FILE *__fp) throw (); > >extern int _IO_peekc_locked (_IO_FILE *__fp); > > > > > >extern void _IO_flockfile (_IO_FILE *) throw (); >extern void _IO_funlockfile (_IO_FILE *) throw (); >extern int _IO_ftrylockfile (_IO_FILE *) throw (); ># 464 "/usr/include/libio.h" 3 4 >extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict, > __gnuc_va_list, int *__restrict); >extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict, > __gnuc_va_list); >extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t); >extern size_t _IO_sgetn (_IO_FILE *, void *, size_t); > >extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int); >extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int); > >extern void _IO_free_backup_area (_IO_FILE *) throw (); ># 526 "/usr/include/libio.h" 3 4 >} ># 75 "/usr/include/stdio.h" 2 3 4 > > > > >typedef __gnuc_va_list va_list; ># 90 "/usr/include/stdio.h" 3 4 >typedef __off_t off_t; > > > > > > >typedef __off64_t off64_t; > > > > >typedef __ssize_t ssize_t; > > > > > > > >typedef _G_fpos_t fpos_t; > > > > > >typedef _G_fpos64_t fpos64_t; ># 164 "/usr/include/stdio.h" 3 4 ># 1 "/usr/include/bits/stdio_lim.h" 1 3 4 ># 165 "/usr/include/stdio.h" 2 3 4 > > > >extern struct _IO_FILE *stdin; >extern struct _IO_FILE *stdout; >extern struct _IO_FILE *stderr; > > > > > > > >extern int remove (const char *__filename) throw (); > >extern int rename (const char *__old, const char *__new) throw (); > > > > >extern int renameat (int __oldfd, const char *__old, int __newfd, > const char *__new) throw (); > > > > > > > > >extern FILE *tmpfile (void) ; ># 205 "/usr/include/stdio.h" 3 4 >extern FILE *tmpfile64 (void) ; > > > >extern char *tmpnam (char *__s) throw () ; > > > > > >extern char *tmpnam_r (char *__s) throw () ; ># 227 "/usr/include/stdio.h" 3 4 >extern char *tempnam (const char *__dir, const char *__pfx) > throw () __attribute__ ((__malloc__)) ; > > > > > > > > >extern int fclose (FILE *__stream); > > > > >extern int fflush (FILE *__stream); > ># 252 "/usr/include/stdio.h" 3 4 >extern int fflush_unlocked (FILE *__stream); ># 262 "/usr/include/stdio.h" 3 4 >extern int fcloseall (void); > > > > > > > > > >extern FILE *fopen (const char *__restrict __filename, > const char *__restrict __modes) ; > > > > >extern FILE *freopen (const char *__restrict __filename, > const char *__restrict __modes, > FILE *__restrict __stream) ; ># 295 "/usr/include/stdio.h" 3 4 > > >extern FILE *fopen64 (const char *__restrict __filename, > const char *__restrict __modes) ; >extern FILE *freopen64 (const char *__restrict __filename, > const char *__restrict __modes, > FILE *__restrict __stream) ; > > > > >extern FILE *fdopen (int __fd, const char *__modes) throw () ; > > > > > >extern FILE *fopencookie (void *__restrict __magic_cookie, > const char *__restrict __modes, > _IO_cookie_io_functions_t __io_funcs) throw () ; > > > > >extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) > throw () ; > > > > >extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ; > > > > > > >extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw (); > > > >extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, > int __modes, size_t __n) throw (); > > > > > >extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, > size_t __size) throw (); > > >extern void setlinebuf (FILE *__stream) throw (); > > > > > > > > >extern int fprintf (FILE *__restrict __stream, > const char *__restrict __format, ...); > > > > >extern int printf (const char *__restrict __format, ...); > >extern int sprintf (char *__restrict __s, > const char *__restrict __format, ...) throw (); > > > > > >extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, > __gnuc_va_list __arg); > > > > >extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); > >extern int vsprintf (char *__restrict __s, const char *__restrict __format, > __gnuc_va_list __arg) throw (); > > > > > >extern int snprintf (char *__restrict __s, size_t __maxlen, > const char *__restrict __format, ...) > throw () __attribute__ ((__format__ (__printf__, 3, 4))); > >extern int vsnprintf (char *__restrict __s, size_t __maxlen, > const char *__restrict __format, __gnuc_va_list __arg) > throw () __attribute__ ((__format__ (__printf__, 3, 0))); > > > > > > >extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, > __gnuc_va_list __arg) > throw () __attribute__ ((__format__ (__printf__, 2, 0))) ; >extern int __asprintf (char **__restrict __ptr, > const char *__restrict __fmt, ...) > throw () __attribute__ ((__format__ (__printf__, 2, 3))) ; >extern int asprintf (char **__restrict __ptr, > const char *__restrict __fmt, ...) > throw () __attribute__ ((__format__ (__printf__, 2, 3))) ; > > > > >extern int vdprintf (int __fd, const char *__restrict __fmt, > __gnuc_va_list __arg) > __attribute__ ((__format__ (__printf__, 2, 0))); >extern int dprintf (int __fd, const char *__restrict __fmt, ...) > __attribute__ ((__format__ (__printf__, 2, 3))); > > > > > > > > >extern int fscanf (FILE *__restrict __stream, > const char *__restrict __format, ...) ; > > > > >extern int scanf (const char *__restrict __format, ...) ; > >extern int sscanf (const char *__restrict __s, > const char *__restrict __format, ...) throw (); ># 463 "/usr/include/stdio.h" 3 4 > > > > > > > > >extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, > __gnuc_va_list __arg) > __attribute__ ((__format__ (__scanf__, 2, 0))) ; > > > > > >extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) > __attribute__ ((__format__ (__scanf__, 1, 0))) ; > > >extern int vsscanf (const char *__restrict __s, > const char *__restrict __format, __gnuc_va_list __arg) > throw () __attribute__ ((__format__ (__scanf__, 2, 0))); ># 522 "/usr/include/stdio.h" 3 4 > > > > > > > > > >extern int fgetc (FILE *__stream); >extern int getc (FILE *__stream); > > > > > >extern int getchar (void); > ># 550 "/usr/include/stdio.h" 3 4 >extern int getc_unlocked (FILE *__stream); >extern int getchar_unlocked (void); ># 561 "/usr/include/stdio.h" 3 4 >extern int fgetc_unlocked (FILE *__stream); > > > > > > > > > > > >extern int fputc (int __c, FILE *__stream); >extern int putc (int __c, FILE *__stream); > > > > > >extern int putchar (int __c); > ># 594 "/usr/include/stdio.h" 3 4 >extern int fputc_unlocked (int __c, FILE *__stream); > > > > > > > >extern int putc_unlocked (int __c, FILE *__stream); >extern int putchar_unlocked (int __c); > > > > > > >extern int getw (FILE *__stream); > > >extern int putw (int __w, FILE *__stream); > > > > > > > > >extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) > ; ># 638 "/usr/include/stdio.h" 3 4 >extern char *gets (char *__s) __attribute__ ((__deprecated__)); > > ># 649 "/usr/include/stdio.h" 3 4 >extern char *fgets_unlocked (char *__restrict __s, int __n, > FILE *__restrict __stream) ; ># 665 "/usr/include/stdio.h" 3 4 >extern __ssize_t __getdelim (char **__restrict __lineptr, > size_t *__restrict __n, int __delimiter, > FILE *__restrict __stream) ; >extern __ssize_t getdelim (char **__restrict __lineptr, > size_t *__restrict __n, int __delimiter, > FILE *__restrict __stream) ; > > > > > > > >extern __ssize_t getline (char **__restrict __lineptr, > size_t *__restrict __n, > FILE *__restrict __stream) ; > > > > > > > > >extern int fputs (const char *__restrict __s, FILE *__restrict __stream); > > > > > >extern int puts (const char *__s); > > > > > > >extern int ungetc (int __c, FILE *__stream); > > > > > > >extern size_t fread (void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __stream) ; > > > > >extern size_t fwrite (const void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __s); > ># 726 "/usr/include/stdio.h" 3 4 >extern int fputs_unlocked (const char *__restrict __s, > FILE *__restrict __stream); ># 737 "/usr/include/stdio.h" 3 4 >extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __stream) ; >extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, > size_t __n, FILE *__restrict __stream); > > > > > > > > >extern int fseek (FILE *__stream, long int __off, int __whence); > > > > >extern long int ftell (FILE *__stream) ; > > > > >extern void rewind (FILE *__stream); > ># 773 "/usr/include/stdio.h" 3 4 >extern int fseeko (FILE *__stream, __off_t __off, int __whence); > > > > >extern __off_t ftello (FILE *__stream) ; ># 792 "/usr/include/stdio.h" 3 4 > > > > > > >extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); > > > > >extern int fsetpos (FILE *__stream, const fpos_t *__pos); ># 815 "/usr/include/stdio.h" 3 4 > > > >extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); >extern __off64_t ftello64 (FILE *__stream) ; >extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); >extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); > > > > >extern void clearerr (FILE *__stream) throw (); > >extern int feof (FILE *__stream) throw () ; > >extern int ferror (FILE *__stream) throw () ; > > > > >extern void clearerr_unlocked (FILE *__stream) throw (); >extern int feof_unlocked (FILE *__stream) throw () ; >extern int ferror_unlocked (FILE *__stream) throw () ; > > > > > > > > >extern void perror (const char *__s); > > > > > > ># 1 "/usr/include/bits/sys_errlist.h" 1 3 4 ># 26 "/usr/include/bits/sys_errlist.h" 3 4 >extern int sys_nerr; >extern const char *const sys_errlist[]; > > >extern int _sys_nerr; >extern const char *const _sys_errlist[]; ># 854 "/usr/include/stdio.h" 2 3 4 > > > > >extern int fileno (FILE *__stream) throw () ; > > > > >extern int fileno_unlocked (FILE *__stream) throw () ; ># 873 "/usr/include/stdio.h" 3 4 >extern FILE *popen (const char *__command, const char *__modes) ; > > > > > >extern int pclose (FILE *__stream); > > > > > >extern char *ctermid (char *__s) throw (); > > > > > >extern char *cuserid (char *__s); > > > > >struct obstack; > > >extern int obstack_printf (struct obstack *__restrict __obstack, > const char *__restrict __format, ...) > throw () __attribute__ ((__format__ (__printf__, 2, 3))); >extern int obstack_vprintf (struct obstack *__restrict __obstack, > const char *__restrict __format, > __gnuc_va_list __args) > throw () __attribute__ ((__format__ (__printf__, 2, 0))); > > > > > > > >extern void flockfile (FILE *__stream) throw (); > > > >extern int ftrylockfile (FILE *__stream) throw () ; > > >extern void funlockfile (FILE *__stream) throw (); ># 934 "/usr/include/stdio.h" 3 4 ># 1 "/usr/include/bits/stdio.h" 1 3 4 ># 35 "/usr/include/bits/stdio.h" 3 4 >extern __inline __attribute__ ((__gnu_inline__)) int >vprintf (const char *__restrict __fmt, __gnuc_va_list __arg) >{ > return vfprintf (stdout, __fmt, __arg); >} > > > >extern __inline __attribute__ ((__gnu_inline__)) int >getchar (void) >{ > return _IO_getc (stdin); >} > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >fgetc_unlocked (FILE *__fp) >{ > return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >getc_unlocked (FILE *__fp) >{ > return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); >} > > >extern __inline __attribute__ ((__gnu_inline__)) int >getchar_unlocked (void) >{ > return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++); >} > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >putchar (int __c) >{ > return _IO_putc (__c, stdout); >} > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >fputc_unlocked (int __c, FILE *__stream) >{ > return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >putc_unlocked (int __c, FILE *__stream) >{ > return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); >} > > >extern __inline __attribute__ ((__gnu_inline__)) int >putchar_unlocked (int __c) >{ > return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c))); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) __ssize_t >getline (char **__lineptr, size_t *__n, FILE *__stream) >{ > return __getdelim (__lineptr, __n, '\n', __stream); >} > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) throw () >{ > return (((__stream)->_flags & 0x10) != 0); >} > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) throw () >{ > return (((__stream)->_flags & 0x20) != 0); >} ># 935 "/usr/include/stdio.h" 2 3 4 ># 943 "/usr/include/stdio.h" 3 4 >} ># 43 "/usr/include/c++/4.8.2/cstdio" 2 3 ># 94 "/usr/include/c++/4.8.2/cstdio" 3 >namespace std >{ > using ::FILE; > using ::fpos_t; > > using ::clearerr; > using ::fclose; > using ::feof; > using ::ferror; > using ::fflush; > using ::fgetc; > using ::fgetpos; > using ::fgets; > using ::fopen; > using ::fprintf; > using ::fputc; > using ::fputs; > using ::fread; > using ::freopen; > using ::fscanf; > using ::fseek; > using ::fsetpos; > using ::ftell; > using ::fwrite; > using ::getc; > using ::getchar; > using ::gets; > using ::perror; > using ::printf; > using ::putc; > using ::putchar; > using ::puts; > using ::remove; > using ::rename; > using ::rewind; > using ::scanf; > using ::setbuf; > using ::setvbuf; > using ::sprintf; > using ::sscanf; > using ::tmpfile; > using ::tmpnam; > using ::ungetc; > using ::vfprintf; > using ::vprintf; > using ::vsprintf; >} ># 150 "/usr/include/c++/4.8.2/cstdio" 3 >namespace __gnu_cxx >{ ># 168 "/usr/include/c++/4.8.2/cstdio" 3 > using ::snprintf; > using ::vfscanf; > using ::vscanf; > using ::vsnprintf; > using ::vsscanf; > >} > >namespace std >{ > using ::__gnu_cxx::snprintf; > using ::__gnu_cxx::vfscanf; > using ::__gnu_cxx::vscanf; > using ::__gnu_cxx::vsnprintf; > using ::__gnu_cxx::vsscanf; >} ># 74 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cstdlib" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdlib" 3 > ># 40 "/usr/include/c++/4.8.2/cstdlib" 3 ># 72 "/usr/include/c++/4.8.2/cstdlib" 3 ># 1 "/usr/include/stdlib.h" 1 3 4 ># 32 "/usr/include/stdlib.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 33 "/usr/include/stdlib.h" 2 3 4 > >extern "C" { > > > > > > ># 1 "/usr/include/bits/waitflags.h" 1 3 4 ># 42 "/usr/include/stdlib.h" 2 3 4 ># 1 "/usr/include/bits/waitstatus.h" 1 3 4 ># 66 "/usr/include/bits/waitstatus.h" 3 4 >union wait > { > int w_status; > struct > { > > unsigned int __w_termsig:7; > unsigned int __w_coredump:1; > unsigned int __w_retcode:8; > unsigned int:16; > > > > > > > > } __wait_terminated; > struct > { > > unsigned int __w_stopval:8; > unsigned int __w_stopsig:8; > unsigned int:16; > > > > > > > } __wait_stopped; > }; ># 43 "/usr/include/stdlib.h" 2 3 4 ># 95 "/usr/include/stdlib.h" 3 4 > > >typedef struct > { > int quot; > int rem; > } div_t; > > > >typedef struct > { > long int quot; > long int rem; > } ldiv_t; > > > > > > > >__extension__ typedef struct > { > long long int quot; > long long int rem; > } lldiv_t; > > ># 139 "/usr/include/stdlib.h" 3 4 >extern size_t __ctype_get_mb_cur_max (void) throw () ; > > > > >extern double atof (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > >extern int atoi (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > >extern long int atol (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > > > > > >__extension__ extern long long int atoll (const char *__nptr) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > > > > > >extern double strtod (const char *__restrict __nptr, > char **__restrict __endptr) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern float strtof (const char *__restrict __nptr, > char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))); > >extern long double strtold (const char *__restrict __nptr, > char **__restrict __endptr) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern long int strtol (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > >extern unsigned long int strtoul (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > > > > >__extension__ >extern long long int strtoq (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > >__extension__ >extern unsigned long long int strtouq (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >__extension__ >extern long long int strtoll (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > >__extension__ >extern unsigned long long int strtoull (const char *__restrict __nptr, > char **__restrict __endptr, int __base) > throw () __attribute__ ((__nonnull__ (1))); > ># 239 "/usr/include/stdlib.h" 3 4 >extern long int strtol_l (const char *__restrict __nptr, > char **__restrict __endptr, int __base, > __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))); > >extern unsigned long int strtoul_l (const char *__restrict __nptr, > char **__restrict __endptr, > int __base, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 4))); > >__extension__ >extern long long int strtoll_l (const char *__restrict __nptr, > char **__restrict __endptr, int __base, > __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 4))); > >__extension__ >extern unsigned long long int strtoull_l (const char *__restrict __nptr, > char **__restrict __endptr, > int __base, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 4))); > >extern double strtod_l (const char *__restrict __nptr, > char **__restrict __endptr, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 3))); > >extern float strtof_l (const char *__restrict __nptr, > char **__restrict __endptr, __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 3))); > >extern long double strtold_l (const char *__restrict __nptr, > char **__restrict __endptr, > __locale_t __loc) > throw () __attribute__ ((__nonnull__ (1, 3))); > > > > > >extern __inline __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) atoi (const char *__nptr) throw () >{ > return (int) strtol (__nptr, (char **) __null, 10); >} >extern __inline __attribute__ ((__gnu_inline__)) long int >__attribute__ ((__leaf__)) atol (const char *__nptr) throw () >{ > return strtol (__nptr, (char **) __null, 10); >} > > > > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int >__attribute__ ((__leaf__)) atoll (const char *__nptr) throw () >{ > return strtoll (__nptr, (char **) __null, 10); >} > ># 305 "/usr/include/stdlib.h" 3 4 >extern char *l64a (long int __n) throw () ; > > >extern long int a64l (const char *__s) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; > > > > ># 1 "/usr/include/sys/types.h" 1 3 4 ># 27 "/usr/include/sys/types.h" 3 4 >extern "C" { > > > > > >typedef __u_char u_char; >typedef __u_short u_short; >typedef __u_int u_int; >typedef __u_long u_long; >typedef __quad_t quad_t; >typedef __u_quad_t u_quad_t; >typedef __fsid_t fsid_t; > > > > >typedef __loff_t loff_t; > > > >typedef __ino_t ino_t; > > > > > > >typedef __ino64_t ino64_t; > > > > >typedef __dev_t dev_t; > > > > >typedef __gid_t gid_t; > > > > >typedef __mode_t mode_t; > > > > >typedef __nlink_t nlink_t; > > > > >typedef __uid_t uid_t; ># 104 "/usr/include/sys/types.h" 3 4 >typedef __id_t id_t; ># 115 "/usr/include/sys/types.h" 3 4 >typedef __daddr_t daddr_t; >typedef __caddr_t caddr_t; > > > > > >typedef __key_t key_t; ># 136 "/usr/include/sys/types.h" 3 4 >typedef __useconds_t useconds_t; > > > >typedef __suseconds_t suseconds_t; > > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 147 "/usr/include/sys/types.h" 2 3 4 > > > >typedef unsigned long int ulong; >typedef unsigned short int ushort; >typedef unsigned int uint; ># 194 "/usr/include/sys/types.h" 3 4 >typedef int int8_t __attribute__ ((__mode__ (__QI__))); >typedef int int16_t __attribute__ ((__mode__ (__HI__))); >typedef int int32_t __attribute__ ((__mode__ (__SI__))); >typedef int int64_t __attribute__ ((__mode__ (__DI__))); > > >typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__))); >typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__))); >typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__))); >typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__))); > >typedef int register_t __attribute__ ((__mode__ (__word__))); ># 219 "/usr/include/sys/types.h" 3 4 ># 1 "/usr/include/sys/select.h" 1 3 4 ># 30 "/usr/include/sys/select.h" 3 4 ># 1 "/usr/include/bits/select.h" 1 3 4 ># 22 "/usr/include/bits/select.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 23 "/usr/include/bits/select.h" 2 3 4 ># 31 "/usr/include/sys/select.h" 2 3 4 > > ># 1 "/usr/include/bits/sigset.h" 1 3 4 ># 22 "/usr/include/bits/sigset.h" 3 4 >typedef int __sig_atomic_t; > > > > >typedef struct > { > unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; > } __sigset_t; ># 34 "/usr/include/sys/select.h" 2 3 4 > > > >typedef __sigset_t sigset_t; > > > > > > > ># 1 "/usr/include/bits/time.h" 1 3 4 ># 46 "/usr/include/sys/select.h" 2 3 4 ># 54 "/usr/include/sys/select.h" 3 4 >typedef long int __fd_mask; ># 64 "/usr/include/sys/select.h" 3 4 >typedef struct > { > > > > __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; > > > > > > } fd_set; > > > > > > >typedef __fd_mask fd_mask; ># 96 "/usr/include/sys/select.h" 3 4 >extern "C" { ># 106 "/usr/include/sys/select.h" 3 4 >extern int select (int __nfds, fd_set *__restrict __readfds, > fd_set *__restrict __writefds, > fd_set *__restrict __exceptfds, > struct timeval *__restrict __timeout); ># 118 "/usr/include/sys/select.h" 3 4 >extern int pselect (int __nfds, fd_set *__restrict __readfds, > fd_set *__restrict __writefds, > fd_set *__restrict __exceptfds, > const struct timespec *__restrict __timeout, > const __sigset_t *__restrict __sigmask); ># 131 "/usr/include/sys/select.h" 3 4 >} ># 220 "/usr/include/sys/types.h" 2 3 4 > > ># 1 "/usr/include/sys/sysmacros.h" 1 3 4 ># 24 "/usr/include/sys/sysmacros.h" 3 4 >extern "C" { > >__extension__ >extern unsigned int gnu_dev_major (unsigned long long int __dev) > throw () __attribute__ ((__const__)); >__extension__ >extern unsigned int gnu_dev_minor (unsigned long long int __dev) > throw () __attribute__ ((__const__)); >__extension__ >extern unsigned long long int gnu_dev_makedev (unsigned int __major, > unsigned int __minor) > throw () __attribute__ ((__const__)); > > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int >__attribute__ ((__leaf__)) gnu_dev_major (unsigned long long int __dev) throw () >{ > return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff); >} > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int >__attribute__ ((__leaf__)) gnu_dev_minor (unsigned long long int __dev) throw () >{ > return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff); >} > >__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned long long int >__attribute__ ((__leaf__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor) throw () >{ > return ((__minor & 0xff) | ((__major & 0xfff) << 8) > | (((unsigned long long int) (__minor & ~0xff)) << 12) > | (((unsigned long long int) (__major & ~0xfff)) << 32)); >} > >} ># 223 "/usr/include/sys/types.h" 2 3 4 > > > > > >typedef __blksize_t blksize_t; > > > > > > >typedef __blkcnt_t blkcnt_t; > > > >typedef __fsblkcnt_t fsblkcnt_t; > > > >typedef __fsfilcnt_t fsfilcnt_t; ># 262 "/usr/include/sys/types.h" 3 4 >typedef __blkcnt64_t blkcnt64_t; >typedef __fsblkcnt64_t fsblkcnt64_t; >typedef __fsfilcnt64_t fsfilcnt64_t; ># 273 "/usr/include/sys/types.h" 3 4 >} ># 315 "/usr/include/stdlib.h" 2 3 4 > > > > > > >extern long int random (void) throw (); > > >extern void srandom (unsigned int __seed) throw (); > > > > > >extern char *initstate (unsigned int __seed, char *__statebuf, > size_t __statelen) throw () __attribute__ ((__nonnull__ (2))); > > > >extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >struct random_data > { > int32_t *fptr; > int32_t *rptr; > int32_t *state; > int rand_type; > int rand_deg; > int rand_sep; > int32_t *end_ptr; > }; > >extern int random_r (struct random_data *__restrict __buf, > int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); > >extern int srandom_r (unsigned int __seed, struct random_data *__buf) > throw () __attribute__ ((__nonnull__ (2))); > >extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, > size_t __statelen, > struct random_data *__restrict __buf) > throw () __attribute__ ((__nonnull__ (2, 4))); > >extern int setstate_r (char *__restrict __statebuf, > struct random_data *__restrict __buf) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > > >extern int rand (void) throw (); > >extern void srand (unsigned int __seed) throw (); > > > > >extern int rand_r (unsigned int *__seed) throw (); > > > > > > > >extern double drand48 (void) throw (); >extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1))); > > >extern long int lrand48 (void) throw (); >extern long int nrand48 (unsigned short int __xsubi[3]) > throw () __attribute__ ((__nonnull__ (1))); > > >extern long int mrand48 (void) throw (); >extern long int jrand48 (unsigned short int __xsubi[3]) > throw () __attribute__ ((__nonnull__ (1))); > > >extern void srand48 (long int __seedval) throw (); >extern unsigned short int *seed48 (unsigned short int __seed16v[3]) > throw () __attribute__ ((__nonnull__ (1))); >extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1))); > > > > > >struct drand48_data > { > unsigned short int __x[3]; > unsigned short int __old_x[3]; > unsigned short int __c; > unsigned short int __init; > __extension__ unsigned long long int __a; > > }; > > >extern int drand48_r (struct drand48_data *__restrict __buffer, > double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); >extern int erand48_r (unsigned short int __xsubi[3], > struct drand48_data *__restrict __buffer, > double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int lrand48_r (struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern int nrand48_r (unsigned short int __xsubi[3], > struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int mrand48_r (struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern int jrand48_r (unsigned short int __xsubi[3], > struct drand48_data *__restrict __buffer, > long int *__restrict __result) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int srand48_r (long int __seedval, struct drand48_data *__buffer) > throw () __attribute__ ((__nonnull__ (2))); > >extern int seed48_r (unsigned short int __seed16v[3], > struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2))); > >extern int lcong48_r (unsigned short int __param[7], > struct drand48_data *__buffer) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > > > > > >extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ; > >extern void *calloc (size_t __nmemb, size_t __size) > throw () __attribute__ ((__malloc__)) ; > > > > > > > > > > >extern void *realloc (void *__ptr, size_t __size) > throw () __attribute__ ((__warn_unused_result__)); > >extern void free (void *__ptr) throw (); > > > > >extern void cfree (void *__ptr) throw (); > > > ># 1 "/usr/include/alloca.h" 1 3 4 ># 24 "/usr/include/alloca.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 25 "/usr/include/alloca.h" 2 3 4 > >extern "C" { > > > > > >extern void *alloca (size_t __size) throw (); > > > > > >} ># 493 "/usr/include/stdlib.h" 2 3 4 > > > > > >extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ; > > > > >extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > >extern void *aligned_alloc (size_t __alignment, size_t __size) > throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) ; > > > > >extern void abort (void) throw () __attribute__ ((__noreturn__)); > > > >extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1))); > > > > >extern "C++" int at_quick_exit (void (*__func) (void)) > throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); > > > > > > > > > >extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern void exit (int __status) throw () __attribute__ ((__noreturn__)); > > > > > >extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__)); > > > > > > > >extern void _Exit (int __status) throw () __attribute__ ((__noreturn__)); > > > > > > >extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) ; > > > > > >extern char *secure_getenv (const char *__name) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > > > >extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int setenv (const char *__name, const char *__value, int __replace) > throw () __attribute__ ((__nonnull__ (2))); > > >extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int clearenv (void) throw (); ># 606 "/usr/include/stdlib.h" 3 4 >extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))); ># 620 "/usr/include/stdlib.h" 3 4 >extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ; ># 630 "/usr/include/stdlib.h" 3 4 >extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ; ># 642 "/usr/include/stdlib.h" 3 4 >extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; ># 652 "/usr/include/stdlib.h" 3 4 >extern int mkstemps64 (char *__template, int __suffixlen) > __attribute__ ((__nonnull__ (1))) ; ># 663 "/usr/include/stdlib.h" 3 4 >extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ; ># 674 "/usr/include/stdlib.h" 3 4 >extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; ># 684 "/usr/include/stdlib.h" 3 4 >extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; ># 694 "/usr/include/stdlib.h" 3 4 >extern int mkostemps (char *__template, int __suffixlen, int __flags) > __attribute__ ((__nonnull__ (1))) ; ># 706 "/usr/include/stdlib.h" 3 4 >extern int mkostemps64 (char *__template, int __suffixlen, int __flags) > __attribute__ ((__nonnull__ (1))) ; > > > > > > > > > >extern int system (const char *__command) ; > > > > > > >extern char *canonicalize_file_name (const char *__name) > throw () __attribute__ ((__nonnull__ (1))) ; ># 734 "/usr/include/stdlib.h" 3 4 >extern char *realpath (const char *__restrict __name, > char *__restrict __resolved) throw () ; > > > > > > >typedef int (*__compar_fn_t) (const void *, const void *); > > >typedef __compar_fn_t comparison_fn_t; > > > >typedef int (*__compar_d_fn_t) (const void *, const void *, void *); > > > > > >extern void *bsearch (const void *__key, const void *__base, > size_t __nmemb, size_t __size, __compar_fn_t __compar) > __attribute__ ((__nonnull__ (1, 2, 5))) ; > > ># 1 "/usr/include/bits/stdlib-bsearch.h" 1 3 4 ># 19 "/usr/include/bits/stdlib-bsearch.h" 3 4 >extern __inline __attribute__ ((__gnu_inline__)) void * >bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, > __compar_fn_t __compar) >{ > size_t __l, __u, __idx; > const void *__p; > int __comparison; > > __l = 0; > __u = __nmemb; > while (__l < __u) > { > __idx = (__l + __u) / 2; > __p = (void *) (((const char *) __base) + (__idx * __size)); > __comparison = (*__compar) (__key, __p); > if (__comparison < 0) > __u = __idx; > else if (__comparison > 0) > __l = __idx + 1; > else > return (void *) __p; > } > > return __null; >} ># 761 "/usr/include/stdlib.h" 2 3 4 > > > > >extern void qsort (void *__base, size_t __nmemb, size_t __size, > __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); > >extern void qsort_r (void *__base, size_t __nmemb, size_t __size, > __compar_d_fn_t __compar, void *__arg) > __attribute__ ((__nonnull__ (1, 4))); > > > > >extern int abs (int __x) throw () __attribute__ ((__const__)) ; >extern long int labs (long int __x) throw () __attribute__ ((__const__)) ; > > > >__extension__ extern long long int llabs (long long int __x) > throw () __attribute__ ((__const__)) ; > > > > > > > >extern div_t div (int __numer, int __denom) > throw () __attribute__ ((__const__)) ; >extern ldiv_t ldiv (long int __numer, long int __denom) > throw () __attribute__ ((__const__)) ; > > > > >__extension__ extern lldiv_t lldiv (long long int __numer, > long long int __denom) > throw () __attribute__ ((__const__)) ; > ># 812 "/usr/include/stdlib.h" 3 4 >extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ; > > > > >extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ; > > > > >extern char *gcvt (double __value, int __ndigit, char *__buf) > throw () __attribute__ ((__nonnull__ (3))) ; > > > > >extern char *qecvt (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign) > throw () __attribute__ ((__nonnull__ (3, 4))) ; >extern char *qfcvt (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign) > throw () __attribute__ ((__nonnull__ (3, 4))) ; >extern char *qgcvt (long double __value, int __ndigit, char *__buf) > throw () __attribute__ ((__nonnull__ (3))) ; > > > > >extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign, char *__restrict __buf, > size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); >extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, > int *__restrict __sign, char *__restrict __buf, > size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); > >extern int qecvt_r (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (3, 4, 5))); >extern int qfcvt_r (long double __value, int __ndigit, > int *__restrict __decpt, int *__restrict __sign, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (3, 4, 5))); > > > > > > >extern int mblen (const char *__s, size_t __n) throw (); > > >extern int mbtowc (wchar_t *__restrict __pwc, > const char *__restrict __s, size_t __n) throw (); > > >extern int wctomb (char *__s, wchar_t __wchar) throw (); > > > >extern size_t mbstowcs (wchar_t *__restrict __pwcs, > const char *__restrict __s, size_t __n) throw (); > >extern size_t wcstombs (char *__restrict __s, > const wchar_t *__restrict __pwcs, size_t __n) > throw (); > > > > > > > > >extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) ; ># 899 "/usr/include/stdlib.h" 3 4 >extern int getsubopt (char **__restrict __optionp, > char *const *__restrict __tokens, > char **__restrict __valuep) > throw () __attribute__ ((__nonnull__ (1, 2, 3))) ; > > > > > >extern void setkey (const char *__key) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >extern int posix_openpt (int __oflag) ; > > > > > > > >extern int grantpt (int __fd) throw (); > > > >extern int unlockpt (int __fd) throw (); > > > > >extern char *ptsname (int __fd) throw () ; > > > > > > >extern int ptsname_r (int __fd, char *__buf, size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))); > > >extern int getpt (void); > > > > > > >extern int getloadavg (double __loadavg[], int __nelem) > throw () __attribute__ ((__nonnull__ (1))); > > ># 1 "/usr/include/bits/stdlib-float.h" 1 3 4 ># 24 "/usr/include/bits/stdlib-float.h" 3 4 > >extern __inline __attribute__ ((__gnu_inline__)) double >__attribute__ ((__leaf__)) atof (const char *__nptr) throw () >{ > return strtod (__nptr, (char **) __null); >} > ># 956 "/usr/include/stdlib.h" 2 3 4 ># 968 "/usr/include/stdlib.h" 3 4 >} ># 73 "/usr/include/c++/4.8.2/cstdlib" 2 3 ># 114 "/usr/include/c++/4.8.2/cstdlib" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > using ::div_t; > using ::ldiv_t; > > using ::abort; > using ::abs; > using ::atexit; > > > > > > using ::atof; > using ::atoi; > using ::atol; > using ::bsearch; > using ::calloc; > using ::div; > using ::exit; > using ::free; > using ::getenv; > using ::labs; > using ::ldiv; > using ::malloc; > > using ::mblen; > using ::mbstowcs; > using ::mbtowc; > > using ::qsort; > > > > > > using ::rand; > using ::realloc; > using ::srand; > using ::strtod; > using ::strtol; > using ::strtoul; > using ::system; > > using ::wcstombs; > using ::wctomb; > > > > inline long > abs(long __i) { return __builtin_labs(__i); } > > inline ldiv_t > div(long __i, long __j) { return ldiv(__i, __j); } > > > > inline long long > abs(long long __x) { return __builtin_llabs (__x); } > > > > inline __int128 > abs(__int128 __x) { return __x >= 0 ? __x : -__x; } > > > >} ># 196 "/usr/include/c++/4.8.2/cstdlib" 3 >namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) >{ > > > > using ::lldiv_t; > > > > > > using ::_Exit; > > > > using ::llabs; > > inline lldiv_t > div(long long __n, long long __d) > { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } > > using ::lldiv; ># 228 "/usr/include/c++/4.8.2/cstdlib" 3 > using ::atoll; > using ::strtoll; > using ::strtoull; > > using ::strtof; > using ::strtold; > > >} > >namespace std >{ > > using ::__gnu_cxx::lldiv_t; > > using ::__gnu_cxx::_Exit; > > using ::__gnu_cxx::llabs; > using ::__gnu_cxx::div; > using ::__gnu_cxx::lldiv; > > using ::__gnu_cxx::atoll; > using ::__gnu_cxx::strtof; > using ::__gnu_cxx::strtoll; > using ::__gnu_cxx::strtoull; > using ::__gnu_cxx::strtold; >} ># 75 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cstdarg" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdarg" 3 > ># 40 "/usr/include/c++/4.8.2/cstdarg" 3 > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stdarg.h" 1 3 4 ># 43 "/usr/include/c++/4.8.2/cstdarg" 2 3 ># 52 "/usr/include/c++/4.8.2/cstdarg" 3 >namespace std >{ > using ::va_list; >} ># 76 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cstring" 1 3 ># 39 "/usr/include/c++/4.8.2/cstring" 3 > ># 40 "/usr/include/c++/4.8.2/cstring" 3 > > ># 1 "/usr/include/string.h" 1 3 4 ># 27 "/usr/include/string.h" 3 4 >extern "C" { > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 33 "/usr/include/string.h" 2 3 4 > > > > > > > > > >extern void *memcpy (void *__restrict __dest, const void *__restrict __src, > size_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern void *memmove (void *__dest, const void *__src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > > >extern void *memccpy (void *__restrict __dest, const void *__restrict __src, > int __c, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > >extern int memcmp (const void *__s1, const void *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > > >extern "C++" >{ >extern void *memchr (void *__s, int __c, size_t __n) > throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const void *memchr (const void *__s, int __c, size_t __n) > throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void * >memchr (void *__s, int __c, size_t __n) throw () >{ > return __builtin_memchr (__s, __c, __n); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void * >memchr (const void *__s, int __c, size_t __n) throw () >{ > return __builtin_memchr (__s, __c, __n); >} > >} > > > > > > > > > > >extern "C++" void *rawmemchr (void *__s, int __c) > throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern "C++" const void *rawmemchr (const void *__s, int __c) > throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > > > >extern "C++" void *memrchr (void *__s, int __c, size_t __n) > throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) > throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > > > > > >extern char *strcpy (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); > >extern char *strncpy (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern char *strcat (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); > >extern char *strncat (char *__restrict __dest, const char *__restrict __src, > size_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern int strcmp (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > >extern int strncmp (const char *__s1, const char *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern int strcoll (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > >extern size_t strxfrm (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (2))); > ># 162 "/usr/include/string.h" 3 4 >extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); > >extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, > __locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4))); > > > > > >extern char *strdup (const char *__s) > throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); > > > > > > >extern char *strndup (const char *__string, size_t __n) > throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); ># 207 "/usr/include/string.h" 3 4 > > > >extern "C++" >{ >extern char *strchr (char *__s, int __c) > throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *strchr (const char *__s, int __c) > throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strchr (char *__s, int __c) throw () >{ > return __builtin_strchr (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strchr (const char *__s, int __c) throw () >{ > return __builtin_strchr (__s, __c); >} > >} > > > > > > >extern "C++" >{ >extern char *strrchr (char *__s, int __c) > throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *strrchr (const char *__s, int __c) > throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strrchr (char *__s, int __c) throw () >{ > return __builtin_strrchr (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strrchr (const char *__s, int __c) throw () >{ > return __builtin_strrchr (__s, __c); >} > >} > > > > > > > > > > >extern "C++" char *strchrnul (char *__s, int __c) > throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern "C++" const char *strchrnul (const char *__s, int __c) > throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > > > > > >extern size_t strcspn (const char *__s, const char *__reject) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern size_t strspn (const char *__s, const char *__accept) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern "C++" >{ >extern char *strpbrk (char *__s, const char *__accept) > throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); >extern const char *strpbrk (const char *__s, const char *__accept) > throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strpbrk (char *__s, const char *__accept) throw () >{ > return __builtin_strpbrk (__s, __accept); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strpbrk (const char *__s, const char *__accept) throw () >{ > return __builtin_strpbrk (__s, __accept); >} > >} > > > > > > >extern "C++" >{ >extern char *strstr (char *__haystack, const char *__needle) > throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); >extern const char *strstr (const char *__haystack, const char *__needle) > throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >strstr (char *__haystack, const char *__needle) throw () >{ > return __builtin_strstr (__haystack, __needle); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >strstr (const char *__haystack, const char *__needle) throw () >{ > return __builtin_strstr (__haystack, __needle); >} > >} > > > > > > > >extern char *strtok (char *__restrict __s, const char *__restrict __delim) > throw () __attribute__ ((__nonnull__ (2))); > > > > >extern char *__strtok_r (char *__restrict __s, > const char *__restrict __delim, > char **__restrict __save_ptr) > throw () __attribute__ ((__nonnull__ (2, 3))); > >extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, > char **__restrict __save_ptr) > throw () __attribute__ ((__nonnull__ (2, 3))); > > > > > >extern "C++" char *strcasestr (char *__haystack, const char *__needle) > throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); >extern "C++" const char *strcasestr (const char *__haystack, > const char *__needle) > throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); ># 378 "/usr/include/string.h" 3 4 >extern void *memmem (const void *__haystack, size_t __haystacklen, > const void *__needle, size_t __needlelen) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3))); > > > >extern void *__mempcpy (void *__restrict __dest, > const void *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern void *mempcpy (void *__restrict __dest, > const void *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern size_t strlen (const char *__s) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > >extern size_t strnlen (const char *__string, size_t __maxlen) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > > > > >extern char *strerror (int __errnum) throw (); > ># 434 "/usr/include/string.h" 3 4 >extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))) ; > > > > > >extern char *strerror_l (int __errnum, __locale_t __l) throw (); > > > > > >extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > > >extern void bcopy (const void *__src, void *__dest, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > >extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > >extern int bcmp (const void *__s1, const void *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > > >extern "C++" >{ >extern char *index (char *__s, int __c) > throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *index (const char *__s, int __c) > throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >index (char *__s, int __c) throw () >{ > return __builtin_index (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >index (const char *__s, int __c) throw () >{ > return __builtin_index (__s, __c); >} > >} > > > > > > > >extern "C++" >{ >extern char *rindex (char *__s, int __c) > throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); >extern const char *rindex (const char *__s, int __c) > throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * >rindex (char *__s, int __c) throw () >{ > return __builtin_rindex (__s, __c); >} > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * >rindex (const char *__s, int __c) throw () >{ > return __builtin_rindex (__s, __c); >} > >} > > > > > > > >extern int ffs (int __i) throw () __attribute__ ((__const__)); > > > > >extern int ffsl (long int __l) throw () __attribute__ ((__const__)); >__extension__ extern int ffsll (long long int __ll) > throw () __attribute__ ((__const__)); > > > >extern int strcasecmp (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern int strcasecmp_l (const char *__s1, const char *__s2, > __locale_t __loc) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); > >extern int strncasecmp_l (const char *__s1, const char *__s2, > size_t __n, __locale_t __loc) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4))); > > > > > >extern char *strsep (char **__restrict __stringp, > const char *__restrict __delim) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern char *strsignal (int __sig) throw (); > > >extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern char *__stpncpy (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); >extern char *stpncpy (char *__restrict __dest, > const char *__restrict __src, size_t __n) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int strverscmp (const char *__s1, const char *__s2) > throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); > > >extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1))); > > >extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); > > > > > > > >extern "C++" char *basename (char *__filename) > throw () __asm ("basename") __attribute__ ((__nonnull__ (1))); >extern "C++" const char *basename (const char *__filename) > throw () __asm ("basename") __attribute__ ((__nonnull__ (1))); ># 640 "/usr/include/string.h" 3 4 >} ># 43 "/usr/include/c++/4.8.2/cstring" 2 3 ># 71 "/usr/include/c++/4.8.2/cstring" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > using ::memchr; > using ::memcmp; > using ::memcpy; > using ::memmove; > using ::memset; > using ::strcat; > using ::strcmp; > using ::strcoll; > using ::strcpy; > using ::strcspn; > using ::strerror; > using ::strlen; > using ::strncat; > using ::strncmp; > using ::strncpy; > using ::strspn; > using ::strtok; > using ::strxfrm; > using ::strchr; > using ::strpbrk; > using ::strrchr; > using ::strstr; ># 120 "/usr/include/c++/4.8.2/cstring" 3 > >} ># 77 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/cmath" 1 3 ># 39 "/usr/include/c++/4.8.2/cmath" 3 > ># 40 "/usr/include/c++/4.8.2/cmath" 3 > > > > ># 1 "/usr/include/math.h" 1 3 4 ># 28 "/usr/include/math.h" 3 4 >extern "C" { > > > ># 1 "/usr/include/bits/huge_val.h" 1 3 4 ># 33 "/usr/include/math.h" 2 3 4 > ># 1 "/usr/include/bits/huge_valf.h" 1 3 4 ># 35 "/usr/include/math.h" 2 3 4 ># 1 "/usr/include/bits/huge_vall.h" 1 3 4 ># 36 "/usr/include/math.h" 2 3 4 > > ># 1 "/usr/include/bits/inf.h" 1 3 4 ># 39 "/usr/include/math.h" 2 3 4 > > ># 1 "/usr/include/bits/nan.h" 1 3 4 ># 42 "/usr/include/math.h" 2 3 4 > > > ># 1 "/usr/include/bits/mathdef.h" 1 3 4 ># 28 "/usr/include/bits/mathdef.h" 3 4 >typedef float float_t; >typedef double double_t; ># 46 "/usr/include/math.h" 2 3 4 ># 69 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathcalls.h" 1 3 4 ># 52 "/usr/include/bits/mathcalls.h" 3 4 > > >extern double acos (double __x) throw (); extern double __acos (double __x) throw (); > >extern double asin (double __x) throw (); extern double __asin (double __x) throw (); > >extern double atan (double __x) throw (); extern double __atan (double __x) throw (); > >extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw (); > > >extern double cos (double __x) throw (); extern double __cos (double __x) throw (); > >extern double sin (double __x) throw (); extern double __sin (double __x) throw (); > >extern double tan (double __x) throw (); extern double __tan (double __x) throw (); > > > > >extern double cosh (double __x) throw (); extern double __cosh (double __x) throw (); > >extern double sinh (double __x) throw (); extern double __sinh (double __x) throw (); > >extern double tanh (double __x) throw (); extern double __tanh (double __x) throw (); > > > > >extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw () > ; > > > > > >extern double acosh (double __x) throw (); extern double __acosh (double __x) throw (); > >extern double asinh (double __x) throw (); extern double __asinh (double __x) throw (); > >extern double atanh (double __x) throw (); extern double __atanh (double __x) throw (); > > > > > > > >extern double exp (double __x) throw (); extern double __exp (double __x) throw (); > > >extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw (); > > >extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw (); > > >extern double log (double __x) throw (); extern double __log (double __x) throw (); > > >extern double log10 (double __x) throw (); extern double __log10 (double __x) throw (); > > >extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2))); > > > > >extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw (); > >extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw (); > > > > > >extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw (); > > >extern double log1p (double __x) throw (); extern double __log1p (double __x) throw (); > > >extern double logb (double __x) throw (); extern double __logb (double __x) throw (); > > > > > > >extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw (); > > >extern double log2 (double __x) throw (); extern double __log2 (double __x) throw (); > > > > > > > > >extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw (); > > >extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw (); > > > > > >extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw (); > > > > > > >extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw (); > > > > > > > > >extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__)); > > >extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__)); > > >extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__)); > > >extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw (); > > > > >extern int __isinf (double __value) throw () __attribute__ ((__const__)); > > >extern int __finite (double __value) throw () __attribute__ ((__const__)); > > > > > >extern int isinf (double __value) throw () __attribute__ ((__const__)); > > >extern int finite (double __value) throw () __attribute__ ((__const__)); > > >extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw (); > > > >extern double significand (double __x) throw (); extern double __significand (double __x) throw (); > > > > > >extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__)); > > > > > > >extern double nan (const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (const char *__tagb) throw () __attribute__ ((__const__)); > > > > > >extern int __isnan (double __value) throw () __attribute__ ((__const__)); > > > >extern int isnan (double __value) throw () __attribute__ ((__const__)); > > >extern double j0 (double) throw (); extern double __j0 (double) throw (); >extern double j1 (double) throw (); extern double __j1 (double) throw (); >extern double jn (int, double) throw (); extern double __jn (int, double) throw (); >extern double y0 (double) throw (); extern double __y0 (double) throw (); >extern double y1 (double) throw (); extern double __y1 (double) throw (); >extern double yn (int, double) throw (); extern double __yn (int, double) throw (); > > > > > > >extern double erf (double) throw (); extern double __erf (double) throw (); >extern double erfc (double) throw (); extern double __erfc (double) throw (); >extern double lgamma (double) throw (); extern double __lgamma (double) throw (); > > > > > > >extern double tgamma (double) throw (); extern double __tgamma (double) throw (); > > > > > >extern double gamma (double) throw (); extern double __gamma (double) throw (); > > > > > > >extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw (); > > > > > > > >extern double rint (double __x) throw (); extern double __rint (double __x) throw (); > > >extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__)); > >extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw (); > > > >extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw (); > > > >extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw (); > > > > >extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw (); > > > >extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw (); > > > >extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__)); > > > >extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__)); > > > > >extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw (); > > > > > > >extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw (); >__extension__ >extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw (); > > > >extern long int lround (double __x) throw (); extern long int __lround (double __x) throw (); >__extension__ >extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw (); > > > >extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw (); > > >extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__)); > > >extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__)); > > > >extern int __fpclassify (double __value) throw () > __attribute__ ((__const__)); > > >extern int __signbit (double __value) throw () > __attribute__ ((__const__)); > > > >extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw (); > > > > > > > > >extern int __issignaling (double __value) throw () > __attribute__ ((__const__)); > > > > >extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw (); ># 70 "/usr/include/math.h" 2 3 4 ># 88 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathcalls.h" 1 3 4 ># 52 "/usr/include/bits/mathcalls.h" 3 4 > > >extern float acosf (float __x) throw (); extern float __acosf (float __x) throw (); > >extern float asinf (float __x) throw (); extern float __asinf (float __x) throw (); > >extern float atanf (float __x) throw (); extern float __atanf (float __x) throw (); > >extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw (); > > >extern float cosf (float __x) throw (); extern float __cosf (float __x) throw (); > >extern float sinf (float __x) throw (); extern float __sinf (float __x) throw (); > >extern float tanf (float __x) throw (); extern float __tanf (float __x) throw (); > > > > >extern float coshf (float __x) throw (); extern float __coshf (float __x) throw (); > >extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw (); > >extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw (); > > > > >extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw () > ; > > > > > >extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw (); > >extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw (); > >extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw (); > > > > > > > >extern float expf (float __x) throw (); extern float __expf (float __x) throw (); > > >extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw (); > > >extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw (); > > >extern float logf (float __x) throw (); extern float __logf (float __x) throw (); > > >extern float log10f (float __x) throw (); extern float __log10f (float __x) throw (); > > >extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2))); > > > > >extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw (); > >extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw (); > > > > > >extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw (); > > >extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw (); > > >extern float logbf (float __x) throw (); extern float __logbf (float __x) throw (); > > > > > > >extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw (); > > >extern float log2f (float __x) throw (); extern float __log2f (float __x) throw (); > > > > > > > > >extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw (); > > >extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw (); > > > > > >extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw (); > > > > > > >extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw (); > > > > > > > > >extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__)); > > >extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__)); > > >extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__)); > > >extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw (); > > > > >extern int __isinff (float __value) throw () __attribute__ ((__const__)); > > >extern int __finitef (float __value) throw () __attribute__ ((__const__)); > > > > > >extern int isinff (float __value) throw () __attribute__ ((__const__)); > > >extern int finitef (float __value) throw () __attribute__ ((__const__)); > > >extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw (); > > > >extern float significandf (float __x) throw (); extern float __significandf (float __x) throw (); > > > > > >extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__)); > > > > > > >extern float nanf (const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (const char *__tagb) throw () __attribute__ ((__const__)); > > > > > >extern int __isnanf (float __value) throw () __attribute__ ((__const__)); > > > >extern int isnanf (float __value) throw () __attribute__ ((__const__)); > > >extern float j0f (float) throw (); extern float __j0f (float) throw (); >extern float j1f (float) throw (); extern float __j1f (float) throw (); >extern float jnf (int, float) throw (); extern float __jnf (int, float) throw (); >extern float y0f (float) throw (); extern float __y0f (float) throw (); >extern float y1f (float) throw (); extern float __y1f (float) throw (); >extern float ynf (int, float) throw (); extern float __ynf (int, float) throw (); > > > > > > >extern float erff (float) throw (); extern float __erff (float) throw (); >extern float erfcf (float) throw (); extern float __erfcf (float) throw (); >extern float lgammaf (float) throw (); extern float __lgammaf (float) throw (); > > > > > > >extern float tgammaf (float) throw (); extern float __tgammaf (float) throw (); > > > > > >extern float gammaf (float) throw (); extern float __gammaf (float) throw (); > > > > > > >extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw (); > > > > > > > >extern float rintf (float __x) throw (); extern float __rintf (float __x) throw (); > > >extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); > >extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw (); > > > >extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw (); > > > >extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw (); > > > > >extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw (); > > > >extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw (); > > > >extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__)); > > > >extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__)); > > > > >extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw (); > > > > > > >extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw (); >__extension__ >extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw (); > > > >extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw (); >__extension__ >extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw (); > > > >extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw (); > > >extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); > > >extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__)); > > > >extern int __fpclassifyf (float __value) throw () > __attribute__ ((__const__)); > > >extern int __signbitf (float __value) throw () > __attribute__ ((__const__)); > > > >extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw (); > > > > > > > > >extern int __issignalingf (float __value) throw () > __attribute__ ((__const__)); > > > > >extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw (); ># 89 "/usr/include/math.h" 2 3 4 ># 132 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathcalls.h" 1 3 4 ># 52 "/usr/include/bits/mathcalls.h" 3 4 > > >extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw (); > >extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw (); > >extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw (); > >extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw (); > > >extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw (); > >extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw (); > >extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw (); > > > > >extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw (); > >extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw (); > >extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw (); > > > > >extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw () > ; > > > > > >extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw (); > >extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw (); > >extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw (); > > > > > > > >extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw (); > > >extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw (); > > >extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw (); > > >extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw (); > > >extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw (); > > >extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2))); > > > > >extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw (); > >extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw (); > > > > > >extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw (); > > >extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw (); > > >extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw (); > > > > > > >extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw (); > > >extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw (); > > > > > > > > >extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw (); > > >extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw (); > > > > > >extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw (); > > > > > > >extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw (); > > > > > > > > >extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__)); > > >extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__)); > > >extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__)); > > >extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw (); > > > > >extern int __isinfl (long double __value) throw () __attribute__ ((__const__)); > > >extern int __finitel (long double __value) throw () __attribute__ ((__const__)); > > > > > >extern int isinfl (long double __value) throw () __attribute__ ((__const__)); > > >extern int finitel (long double __value) throw () __attribute__ ((__const__)); > > >extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw (); > > > >extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw (); > > > > > >extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > > > > > >extern long double nanl (const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (const char *__tagb) throw () __attribute__ ((__const__)); > > > > > >extern int __isnanl (long double __value) throw () __attribute__ ((__const__)); > > > >extern int isnanl (long double __value) throw () __attribute__ ((__const__)); > > >extern long double j0l (long double) throw (); extern long double __j0l (long double) throw (); >extern long double j1l (long double) throw (); extern long double __j1l (long double) throw (); >extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw (); >extern long double y0l (long double) throw (); extern long double __y0l (long double) throw (); >extern long double y1l (long double) throw (); extern long double __y1l (long double) throw (); >extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw (); > > > > > > >extern long double erfl (long double) throw (); extern long double __erfl (long double) throw (); >extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw (); >extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw (); > > > > > > >extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw (); > > > > > >extern long double gammal (long double) throw (); extern long double __gammal (long double) throw (); > > > > > > >extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw (); > > > > > > > >extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw (); > > >extern long double nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); > >extern long double nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw (); > > > >extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw (); > > > >extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw (); > > > > >extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw (); > > > >extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw (); > > > >extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__)); > > > >extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__)); > > > > >extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw (); > > > > > > >extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw (); >__extension__ >extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw (); > > > >extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw (); >__extension__ >extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw (); > > > >extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw (); > > >extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > >extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); > > > >extern int __fpclassifyl (long double __value) throw () > __attribute__ ((__const__)); > > >extern int __signbitl (long double __value) throw () > __attribute__ ((__const__)); > > > >extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw (); > > > > > > > > >extern int __issignalingl (long double __value) throw () > __attribute__ ((__const__)); > > > > >extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw (); ># 133 "/usr/include/math.h" 2 3 4 ># 148 "/usr/include/math.h" 3 4 >extern int signgam; ># 189 "/usr/include/math.h" 3 4 >enum > { > FP_NAN = > > 0, > FP_INFINITE = > > 1, > FP_ZERO = > > 2, > FP_SUBNORMAL = > > 3, > FP_NORMAL = > > 4 > }; ># 301 "/usr/include/math.h" 3 4 >typedef enum >{ > _IEEE_ = -1, > _SVID_, > _XOPEN_, > _POSIX_, > _ISOC_ >} _LIB_VERSION_TYPE; > > > > >extern _LIB_VERSION_TYPE _LIB_VERSION; ># 324 "/usr/include/math.h" 3 4 >struct __exception > > > > { > int type; > char *name; > double arg1; > double arg2; > double retval; > }; > > >extern int matherr (struct __exception *__exc) throw (); ># 426 "/usr/include/math.h" 3 4 ># 1 "/usr/include/bits/mathinline.h" 1 3 4 ># 123 "/usr/include/bits/mathinline.h" 3 4 > > > >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) __signbitf (float __x) throw () >{ > > int __m; > __asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x)); > return (__m & 0x8) != 0; > > > > >} >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) __signbit (double __x) throw () >{ > > int __m; > __asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x)); > return (__m & 0x80) != 0; > > > > >} >extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int >__attribute__ ((__leaf__)) __signbitl (long double __x) throw () >{ > __extension__ union { long double __l; int __i[3]; } __u = { __l: __x }; > return (__u.__i[2] & 0x8000) != 0; >} > > ># 427 "/usr/include/math.h" 2 3 4 ># 488 "/usr/include/math.h" 3 4 >} ># 45 "/usr/include/c++/4.8.2/cmath" 2 3 ># 75 "/usr/include/c++/4.8.2/cmath" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > inline double > abs(double __x) > { return __builtin_fabs(__x); } > > > > inline float > abs(float __x) > { return __builtin_fabsf(__x); } > > inline long double > abs(long double __x) > { return __builtin_fabsl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > abs(_Tp __x) > { return __builtin_fabs(__x); } > > using ::acos; > > > inline float > acos(float __x) > { return __builtin_acosf(__x); } > > inline long double > acos(long double __x) > { return __builtin_acosl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > acos(_Tp __x) > { return __builtin_acos(__x); } > > using ::asin; > > > inline float > asin(float __x) > { return __builtin_asinf(__x); } > > inline long double > asin(long double __x) > { return __builtin_asinl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > asin(_Tp __x) > { return __builtin_asin(__x); } > > using ::atan; > > > inline float > atan(float __x) > { return __builtin_atanf(__x); } > > inline long double > atan(long double __x) > { return __builtin_atanl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > atan(_Tp __x) > { return __builtin_atan(__x); } > > using ::atan2; > > > inline float > atan2(float __y, float __x) > { return __builtin_atan2f(__y, __x); } > > inline long double > atan2(long double __y, long double __x) > { return __builtin_atan2l(__y, __x); } > > > template<typename _Tp, typename _Up> > inline > typename __gnu_cxx::__promote_2<_Tp, _Up>::__type > atan2(_Tp __y, _Up __x) > { > typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; > return atan2(__type(__y), __type(__x)); > } > > using ::ceil; > > > inline float > ceil(float __x) > { return __builtin_ceilf(__x); } > > inline long double > ceil(long double __x) > { return __builtin_ceill(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > ceil(_Tp __x) > { return __builtin_ceil(__x); } > > using ::cos; > > > inline float > cos(float __x) > { return __builtin_cosf(__x); } > > inline long double > cos(long double __x) > { return __builtin_cosl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > cos(_Tp __x) > { return __builtin_cos(__x); } > > using ::cosh; > > > inline float > cosh(float __x) > { return __builtin_coshf(__x); } > > inline long double > cosh(long double __x) > { return __builtin_coshl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > cosh(_Tp __x) > { return __builtin_cosh(__x); } > > using ::exp; > > > inline float > exp(float __x) > { return __builtin_expf(__x); } > > inline long double > exp(long double __x) > { return __builtin_expl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > exp(_Tp __x) > { return __builtin_exp(__x); } > > using ::fabs; > > > inline float > fabs(float __x) > { return __builtin_fabsf(__x); } > > inline long double > fabs(long double __x) > { return __builtin_fabsl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > fabs(_Tp __x) > { return __builtin_fabs(__x); } > > using ::floor; > > > inline float > floor(float __x) > { return __builtin_floorf(__x); } > > inline long double > floor(long double __x) > { return __builtin_floorl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > floor(_Tp __x) > { return __builtin_floor(__x); } > > using ::fmod; > > > inline float > fmod(float __x, float __y) > { return __builtin_fmodf(__x, __y); } > > inline long double > fmod(long double __x, long double __y) > { return __builtin_fmodl(__x, __y); } > > > template<typename _Tp, typename _Up> > inline > typename __gnu_cxx::__promote_2<_Tp, _Up>::__type > fmod(_Tp __x, _Up __y) > { > typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; > return fmod(__type(__x), __type(__y)); > } > > using ::frexp; > > > inline float > frexp(float __x, int* __exp) > { return __builtin_frexpf(__x, __exp); } > > inline long double > frexp(long double __x, int* __exp) > { return __builtin_frexpl(__x, __exp); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > frexp(_Tp __x, int* __exp) > { return __builtin_frexp(__x, __exp); } > > using ::ldexp; > > > inline float > ldexp(float __x, int __exp) > { return __builtin_ldexpf(__x, __exp); } > > inline long double > ldexp(long double __x, int __exp) > { return __builtin_ldexpl(__x, __exp); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > ldexp(_Tp __x, int __exp) > { return __builtin_ldexp(__x, __exp); } > > using ::log; > > > inline float > log(float __x) > { return __builtin_logf(__x); } > > inline long double > log(long double __x) > { return __builtin_logl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > log(_Tp __x) > { return __builtin_log(__x); } > > using ::log10; > > > inline float > log10(float __x) > { return __builtin_log10f(__x); } > > inline long double > log10(long double __x) > { return __builtin_log10l(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > log10(_Tp __x) > { return __builtin_log10(__x); } > > using ::modf; > > > inline float > modf(float __x, float* __iptr) > { return __builtin_modff(__x, __iptr); } > > inline long double > modf(long double __x, long double* __iptr) > { return __builtin_modfl(__x, __iptr); } > > > using ::pow; > > > inline float > pow(float __x, float __y) > { return __builtin_powf(__x, __y); } > > inline long double > pow(long double __x, long double __y) > { return __builtin_powl(__x, __y); } > > > > > inline double > pow(double __x, int __i) > { return __builtin_powi(__x, __i); } > > inline float > pow(float __x, int __n) > { return __builtin_powif(__x, __n); } > > inline long double > pow(long double __x, int __n) > { return __builtin_powil(__x, __n); } > > > > template<typename _Tp, typename _Up> > inline > typename __gnu_cxx::__promote_2<_Tp, _Up>::__type > pow(_Tp __x, _Up __y) > { > typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; > return pow(__type(__x), __type(__y)); > } > > using ::sin; > > > inline float > sin(float __x) > { return __builtin_sinf(__x); } > > inline long double > sin(long double __x) > { return __builtin_sinl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > sin(_Tp __x) > { return __builtin_sin(__x); } > > using ::sinh; > > > inline float > sinh(float __x) > { return __builtin_sinhf(__x); } > > inline long double > sinh(long double __x) > { return __builtin_sinhl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > sinh(_Tp __x) > { return __builtin_sinh(__x); } > > using ::sqrt; > > > inline float > sqrt(float __x) > { return __builtin_sqrtf(__x); } > > inline long double > sqrt(long double __x) > { return __builtin_sqrtl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > sqrt(_Tp __x) > { return __builtin_sqrt(__x); } > > using ::tan; > > > inline float > tan(float __x) > { return __builtin_tanf(__x); } > > inline long double > tan(long double __x) > { return __builtin_tanl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > tan(_Tp __x) > { return __builtin_tan(__x); } > > using ::tanh; > > > inline float > tanh(float __x) > { return __builtin_tanhf(__x); } > > inline long double > tanh(long double __x) > { return __builtin_tanhl(__x); } > > > template<typename _Tp> > inline > typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > tanh(_Tp __x) > { return __builtin_tanh(__x); } > > >} ># 555 "/usr/include/c++/4.8.2/cmath" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 805 "/usr/include/c++/4.8.2/cmath" 3 > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > fpclassify(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_fpclassify(0, 1, 4, > 3, 2, __type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isfinite(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isfinite(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isinf(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isinf(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isnan(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isnan(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isnormal(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isnormal(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > signbit(_Tp __f) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_signbit(__type(__f)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isgreater(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isgreater(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isgreaterequal(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isgreaterequal(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isless(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isless(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > islessequal(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_islessequal(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > islessgreater(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_islessgreater(__type(__f1), __type(__f2)); > } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, > int>::__type > isunordered(_Tp __f1, _Tp __f2) > { > typedef typename __gnu_cxx::__promote<_Tp>::__type __type; > return __builtin_isunordered(__type(__f1), __type(__f2)); > } > > > > >} ># 78 "./CImg.h" 2 ># 1 "/usr/include/c++/4.8.2/ctime" 1 3 ># 39 "/usr/include/c++/4.8.2/ctime" 3 > ># 40 "/usr/include/c++/4.8.2/ctime" 3 ># 79 "./CImg.h" 2 ># 123 "./CImg.h" ># 1 "/usr/include/sys/time.h" 1 3 4 ># 27 "/usr/include/sys/time.h" 3 4 ># 1 "/usr/include/bits/time.h" 1 3 4 ># 28 "/usr/include/sys/time.h" 2 3 4 ># 37 "/usr/include/sys/time.h" 3 4 >extern "C" { ># 55 "/usr/include/sys/time.h" 3 4 >struct timezone > { > int tz_minuteswest; > int tz_dsttime; > }; > >typedef struct timezone *__restrict __timezone_ptr_t; ># 71 "/usr/include/sys/time.h" 3 4 >extern int gettimeofday (struct timeval *__restrict __tv, > __timezone_ptr_t __tz) throw () __attribute__ ((__nonnull__ (1))); > > > > >extern int settimeofday (const struct timeval *__tv, > const struct timezone *__tz) > throw (); > > > > > >extern int adjtime (const struct timeval *__delta, > struct timeval *__olddelta) throw (); > > > > >enum __itimer_which > { > > ITIMER_REAL = 0, > > > ITIMER_VIRTUAL = 1, > > > > ITIMER_PROF = 2 > > }; > > > >struct itimerval > { > > struct timeval it_interval; > > struct timeval it_value; > }; > > > > > > >typedef int __itimer_which_t; > > > > >extern int getitimer (__itimer_which_t __which, > struct itimerval *__value) throw (); > > > > >extern int setitimer (__itimer_which_t __which, > const struct itimerval *__restrict __new, > struct itimerval *__restrict __old) throw (); > > > > >extern int utimes (const char *__file, const struct timeval __tvp[2]) > throw () __attribute__ ((__nonnull__ (1))); > > > >extern int lutimes (const char *__file, const struct timeval __tvp[2]) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int futimes (int __fd, const struct timeval __tvp[2]) throw (); > > > > > > >extern int futimesat (int __fd, const char *__file, > const struct timeval __tvp[2]) throw (); ># 189 "/usr/include/sys/time.h" 3 4 >} ># 124 "./CImg.h" 2 ># 1 "/usr/include/unistd.h" 1 3 4 ># 27 "/usr/include/unistd.h" 3 4 >extern "C" { ># 202 "/usr/include/unistd.h" 3 4 ># 1 "/usr/include/bits/posix_opt.h" 1 3 4 ># 203 "/usr/include/unistd.h" 2 3 4 > > > ># 1 "/usr/include/bits/environments.h" 1 3 4 ># 22 "/usr/include/bits/environments.h" 3 4 ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 23 "/usr/include/bits/environments.h" 2 3 4 ># 207 "/usr/include/unistd.h" 2 3 4 ># 226 "/usr/include/unistd.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 227 "/usr/include/unistd.h" 2 3 4 ># 267 "/usr/include/unistd.h" 3 4 >typedef __intptr_t intptr_t; > > > > > > >typedef __socklen_t socklen_t; ># 287 "/usr/include/unistd.h" 3 4 >extern int access (const char *__name, int __type) throw () __attribute__ ((__nonnull__ (1))); > > > > >extern int euidaccess (const char *__name, int __type) > throw () __attribute__ ((__nonnull__ (1))); > > >extern int eaccess (const char *__name, int __type) > throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int faccessat (int __fd, const char *__file, int __type, int __flag) > throw () __attribute__ ((__nonnull__ (2))) ; ># 334 "/usr/include/unistd.h" 3 4 >extern __off_t lseek (int __fd, __off_t __offset, int __whence) throw (); ># 345 "/usr/include/unistd.h" 3 4 >extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) > throw (); > > > > > > >extern int close (int __fd); > > > > > > >extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ; > > > > > >extern ssize_t write (int __fd, const void *__buf, size_t __n) ; ># 376 "/usr/include/unistd.h" 3 4 >extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, > __off_t __offset) ; > > > > > > >extern ssize_t pwrite (int __fd, const void *__buf, size_t __n, > __off_t __offset) ; ># 404 "/usr/include/unistd.h" 3 4 >extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, > __off64_t __offset) ; > > >extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n, > __off64_t __offset) ; > > > > > > > >extern int pipe (int __pipedes[2]) throw () ; > > > > >extern int pipe2 (int __pipedes[2], int __flags) throw () ; ># 432 "/usr/include/unistd.h" 3 4 >extern unsigned int alarm (unsigned int __seconds) throw (); ># 444 "/usr/include/unistd.h" 3 4 >extern unsigned int sleep (unsigned int __seconds); > > > > > > > >extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) > throw (); > > > > > > >extern int usleep (__useconds_t __useconds); ># 469 "/usr/include/unistd.h" 3 4 >extern int pause (void); > > > >extern int chown (const char *__file, __uid_t __owner, __gid_t __group) > throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern int fchown (int __fd, __uid_t __owner, __gid_t __group) throw () ; > > > > >extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > > > >extern int fchownat (int __fd, const char *__file, __uid_t __owner, > __gid_t __group, int __flag) > throw () __attribute__ ((__nonnull__ (2))) ; > > > >extern int chdir (const char *__path) throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern int fchdir (int __fd) throw () ; ># 511 "/usr/include/unistd.h" 3 4 >extern char *getcwd (char *__buf, size_t __size) throw () ; > > > > > >extern char *get_current_dir_name (void) throw (); > > > > > > > >extern char *getwd (char *__buf) > throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ; > > > > >extern int dup (int __fd) throw () ; > > >extern int dup2 (int __fd, int __fd2) throw (); > > > > >extern int dup3 (int __fd, int __fd2, int __flags) throw (); > > > >extern char **__environ; > >extern char **environ; > > > > > >extern int execve (const char *__path, char *const __argv[], > char *const __envp[]) throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) > throw () __attribute__ ((__nonnull__ (2))); > > > > >extern int execv (const char *__path, char *const __argv[]) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int execle (const char *__path, const char *__arg, ...) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int execl (const char *__path, const char *__arg, ...) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern int execvp (const char *__file, char *const __argv[]) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int execlp (const char *__file, const char *__arg, ...) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > >extern int execvpe (const char *__file, char *const __argv[], > char *const __envp[]) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > > > >extern int nice (int __inc) throw () ; > > > > >extern void _exit (int __status) __attribute__ ((__noreturn__)); > > > > > ># 1 "/usr/include/bits/confname.h" 1 3 4 ># 24 "/usr/include/bits/confname.h" 3 4 >enum > { > _PC_LINK_MAX, > > _PC_MAX_CANON, > > _PC_MAX_INPUT, > > _PC_NAME_MAX, > > _PC_PATH_MAX, > > _PC_PIPE_BUF, > > _PC_CHOWN_RESTRICTED, > > _PC_NO_TRUNC, > > _PC_VDISABLE, > > _PC_SYNC_IO, > > _PC_ASYNC_IO, > > _PC_PRIO_IO, > > _PC_SOCK_MAXBUF, > > _PC_FILESIZEBITS, > > _PC_REC_INCR_XFER_SIZE, > > _PC_REC_MAX_XFER_SIZE, > > _PC_REC_MIN_XFER_SIZE, > > _PC_REC_XFER_ALIGN, > > _PC_ALLOC_SIZE_MIN, > > _PC_SYMLINK_MAX, > > _PC_2_SYMLINKS > > }; > > >enum > { > _SC_ARG_MAX, > > _SC_CHILD_MAX, > > _SC_CLK_TCK, > > _SC_NGROUPS_MAX, > > _SC_OPEN_MAX, > > _SC_STREAM_MAX, > > _SC_TZNAME_MAX, > > _SC_JOB_CONTROL, > > _SC_SAVED_IDS, > > _SC_REALTIME_SIGNALS, > > _SC_PRIORITY_SCHEDULING, > > _SC_TIMERS, > > _SC_ASYNCHRONOUS_IO, > > _SC_PRIORITIZED_IO, > > _SC_SYNCHRONIZED_IO, > > _SC_FSYNC, > > _SC_MAPPED_FILES, > > _SC_MEMLOCK, > > _SC_MEMLOCK_RANGE, > > _SC_MEMORY_PROTECTION, > > _SC_MESSAGE_PASSING, > > _SC_SEMAPHORES, > > _SC_SHARED_MEMORY_OBJECTS, > > _SC_AIO_LISTIO_MAX, > > _SC_AIO_MAX, > > _SC_AIO_PRIO_DELTA_MAX, > > _SC_DELAYTIMER_MAX, > > _SC_MQ_OPEN_MAX, > > _SC_MQ_PRIO_MAX, > > _SC_VERSION, > > _SC_PAGESIZE, > > > _SC_RTSIG_MAX, > > _SC_SEM_NSEMS_MAX, > > _SC_SEM_VALUE_MAX, > > _SC_SIGQUEUE_MAX, > > _SC_TIMER_MAX, > > > > > _SC_BC_BASE_MAX, > > _SC_BC_DIM_MAX, > > _SC_BC_SCALE_MAX, > > _SC_BC_STRING_MAX, > > _SC_COLL_WEIGHTS_MAX, > > _SC_EQUIV_CLASS_MAX, > > _SC_EXPR_NEST_MAX, > > _SC_LINE_MAX, > > _SC_RE_DUP_MAX, > > _SC_CHARCLASS_NAME_MAX, > > > _SC_2_VERSION, > > _SC_2_C_BIND, > > _SC_2_C_DEV, > > _SC_2_FORT_DEV, > > _SC_2_FORT_RUN, > > _SC_2_SW_DEV, > > _SC_2_LOCALEDEF, > > > _SC_PII, > > _SC_PII_XTI, > > _SC_PII_SOCKET, > > _SC_PII_INTERNET, > > _SC_PII_OSI, > > _SC_POLL, > > _SC_SELECT, > > _SC_UIO_MAXIOV, > > _SC_IOV_MAX = _SC_UIO_MAXIOV, > > _SC_PII_INTERNET_STREAM, > > _SC_PII_INTERNET_DGRAM, > > _SC_PII_OSI_COTS, > > _SC_PII_OSI_CLTS, > > _SC_PII_OSI_M, > > _SC_T_IOV_MAX, > > > > _SC_THREADS, > > _SC_THREAD_SAFE_FUNCTIONS, > > _SC_GETGR_R_SIZE_MAX, > > _SC_GETPW_R_SIZE_MAX, > > _SC_LOGIN_NAME_MAX, > > _SC_TTY_NAME_MAX, > > _SC_THREAD_DESTRUCTOR_ITERATIONS, > > _SC_THREAD_KEYS_MAX, > > _SC_THREAD_STACK_MIN, > > _SC_THREAD_THREADS_MAX, > > _SC_THREAD_ATTR_STACKADDR, > > _SC_THREAD_ATTR_STACKSIZE, > > _SC_THREAD_PRIORITY_SCHEDULING, > > _SC_THREAD_PRIO_INHERIT, > > _SC_THREAD_PRIO_PROTECT, > > _SC_THREAD_PROCESS_SHARED, > > > _SC_NPROCESSORS_CONF, > > _SC_NPROCESSORS_ONLN, > > _SC_PHYS_PAGES, > > _SC_AVPHYS_PAGES, > > _SC_ATEXIT_MAX, > > _SC_PASS_MAX, > > > _SC_XOPEN_VERSION, > > _SC_XOPEN_XCU_VERSION, > > _SC_XOPEN_UNIX, > > _SC_XOPEN_CRYPT, > > _SC_XOPEN_ENH_I18N, > > _SC_XOPEN_SHM, > > > _SC_2_CHAR_TERM, > > _SC_2_C_VERSION, > > _SC_2_UPE, > > > _SC_XOPEN_XPG2, > > _SC_XOPEN_XPG3, > > _SC_XOPEN_XPG4, > > > _SC_CHAR_BIT, > > _SC_CHAR_MAX, > > _SC_CHAR_MIN, > > _SC_INT_MAX, > > _SC_INT_MIN, > > _SC_LONG_BIT, > > _SC_WORD_BIT, > > _SC_MB_LEN_MAX, > > _SC_NZERO, > > _SC_SSIZE_MAX, > > _SC_SCHAR_MAX, > > _SC_SCHAR_MIN, > > _SC_SHRT_MAX, > > _SC_SHRT_MIN, > > _SC_UCHAR_MAX, > > _SC_UINT_MAX, > > _SC_ULONG_MAX, > > _SC_USHRT_MAX, > > > _SC_NL_ARGMAX, > > _SC_NL_LANGMAX, > > _SC_NL_MSGMAX, > > _SC_NL_NMAX, > > _SC_NL_SETMAX, > > _SC_NL_TEXTMAX, > > > _SC_XBS5_ILP32_OFF32, > > _SC_XBS5_ILP32_OFFBIG, > > _SC_XBS5_LP64_OFF64, > > _SC_XBS5_LPBIG_OFFBIG, > > > _SC_XOPEN_LEGACY, > > _SC_XOPEN_REALTIME, > > _SC_XOPEN_REALTIME_THREADS, > > > _SC_ADVISORY_INFO, > > _SC_BARRIERS, > > _SC_BASE, > > _SC_C_LANG_SUPPORT, > > _SC_C_LANG_SUPPORT_R, > > _SC_CLOCK_SELECTION, > > _SC_CPUTIME, > > _SC_THREAD_CPUTIME, > > _SC_DEVICE_IO, > > _SC_DEVICE_SPECIFIC, > > _SC_DEVICE_SPECIFIC_R, > > _SC_FD_MGMT, > > _SC_FIFO, > > _SC_PIPE, > > _SC_FILE_ATTRIBUTES, > > _SC_FILE_LOCKING, > > _SC_FILE_SYSTEM, > > _SC_MONOTONIC_CLOCK, > > _SC_MULTI_PROCESS, > > _SC_SINGLE_PROCESS, > > _SC_NETWORKING, > > _SC_READER_WRITER_LOCKS, > > _SC_SPIN_LOCKS, > > _SC_REGEXP, > > _SC_REGEX_VERSION, > > _SC_SHELL, > > _SC_SIGNALS, > > _SC_SPAWN, > > _SC_SPORADIC_SERVER, > > _SC_THREAD_SPORADIC_SERVER, > > _SC_SYSTEM_DATABASE, > > _SC_SYSTEM_DATABASE_R, > > _SC_TIMEOUTS, > > _SC_TYPED_MEMORY_OBJECTS, > > _SC_USER_GROUPS, > > _SC_USER_GROUPS_R, > > _SC_2_PBS, > > _SC_2_PBS_ACCOUNTING, > > _SC_2_PBS_LOCATE, > > _SC_2_PBS_MESSAGE, > > _SC_2_PBS_TRACK, > > _SC_SYMLOOP_MAX, > > _SC_STREAMS, > > _SC_2_PBS_CHECKPOINT, > > > _SC_V6_ILP32_OFF32, > > _SC_V6_ILP32_OFFBIG, > > _SC_V6_LP64_OFF64, > > _SC_V6_LPBIG_OFFBIG, > > > _SC_HOST_NAME_MAX, > > _SC_TRACE, > > _SC_TRACE_EVENT_FILTER, > > _SC_TRACE_INHERIT, > > _SC_TRACE_LOG, > > > _SC_LEVEL1_ICACHE_SIZE, > > _SC_LEVEL1_ICACHE_ASSOC, > > _SC_LEVEL1_ICACHE_LINESIZE, > > _SC_LEVEL1_DCACHE_SIZE, > > _SC_LEVEL1_DCACHE_ASSOC, > > _SC_LEVEL1_DCACHE_LINESIZE, > > _SC_LEVEL2_CACHE_SIZE, > > _SC_LEVEL2_CACHE_ASSOC, > > _SC_LEVEL2_CACHE_LINESIZE, > > _SC_LEVEL3_CACHE_SIZE, > > _SC_LEVEL3_CACHE_ASSOC, > > _SC_LEVEL3_CACHE_LINESIZE, > > _SC_LEVEL4_CACHE_SIZE, > > _SC_LEVEL4_CACHE_ASSOC, > > _SC_LEVEL4_CACHE_LINESIZE, > > > > _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, > > _SC_RAW_SOCKETS, > > > _SC_V7_ILP32_OFF32, > > _SC_V7_ILP32_OFFBIG, > > _SC_V7_LP64_OFF64, > > _SC_V7_LPBIG_OFFBIG, > > > _SC_SS_REPL_MAX, > > > _SC_TRACE_EVENT_NAME_MAX, > > _SC_TRACE_NAME_MAX, > > _SC_TRACE_SYS_MAX, > > _SC_TRACE_USER_EVENT_MAX, > > > _SC_XOPEN_STREAMS, > > > _SC_THREAD_ROBUST_PRIO_INHERIT, > > _SC_THREAD_ROBUST_PRIO_PROTECT > > }; > > >enum > { > _CS_PATH, > > > _CS_V6_WIDTH_RESTRICTED_ENVS, > > > > _CS_GNU_LIBC_VERSION, > > _CS_GNU_LIBPTHREAD_VERSION, > > > _CS_V5_WIDTH_RESTRICTED_ENVS, > > > > _CS_V7_WIDTH_RESTRICTED_ENVS, > > > > _CS_LFS_CFLAGS = 1000, > > _CS_LFS_LDFLAGS, > > _CS_LFS_LIBS, > > _CS_LFS_LINTFLAGS, > > _CS_LFS64_CFLAGS, > > _CS_LFS64_LDFLAGS, > > _CS_LFS64_LIBS, > > _CS_LFS64_LINTFLAGS, > > > _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, > > _CS_XBS5_ILP32_OFF32_LDFLAGS, > > _CS_XBS5_ILP32_OFF32_LIBS, > > _CS_XBS5_ILP32_OFF32_LINTFLAGS, > > _CS_XBS5_ILP32_OFFBIG_CFLAGS, > > _CS_XBS5_ILP32_OFFBIG_LDFLAGS, > > _CS_XBS5_ILP32_OFFBIG_LIBS, > > _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, > > _CS_XBS5_LP64_OFF64_CFLAGS, > > _CS_XBS5_LP64_OFF64_LDFLAGS, > > _CS_XBS5_LP64_OFF64_LIBS, > > _CS_XBS5_LP64_OFF64_LINTFLAGS, > > _CS_XBS5_LPBIG_OFFBIG_CFLAGS, > > _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, > > _CS_XBS5_LPBIG_OFFBIG_LIBS, > > _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, > > > _CS_POSIX_V6_ILP32_OFF32_CFLAGS, > > _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, > > _CS_POSIX_V6_ILP32_OFF32_LIBS, > > _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, > > _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, > > _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, > > _CS_POSIX_V6_ILP32_OFFBIG_LIBS, > > _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, > > _CS_POSIX_V6_LP64_OFF64_CFLAGS, > > _CS_POSIX_V6_LP64_OFF64_LDFLAGS, > > _CS_POSIX_V6_LP64_OFF64_LIBS, > > _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, > > _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, > > _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, > > _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, > > _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, > > > _CS_POSIX_V7_ILP32_OFF32_CFLAGS, > > _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, > > _CS_POSIX_V7_ILP32_OFF32_LIBS, > > _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, > > _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, > > _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, > > _CS_POSIX_V7_ILP32_OFFBIG_LIBS, > > _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, > > _CS_POSIX_V7_LP64_OFF64_CFLAGS, > > _CS_POSIX_V7_LP64_OFF64_LDFLAGS, > > _CS_POSIX_V7_LP64_OFF64_LIBS, > > _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, > > _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, > > _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, > > _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, > > _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, > > > _CS_V6_ENV, > > _CS_V7_ENV > > }; ># 610 "/usr/include/unistd.h" 2 3 4 > > >extern long int pathconf (const char *__path, int __name) > throw () __attribute__ ((__nonnull__ (1))); > > >extern long int fpathconf (int __fd, int __name) throw (); > > >extern long int sysconf (int __name) throw (); > > > >extern size_t confstr (int __name, char *__buf, size_t __len) throw (); > > > > >extern __pid_t getpid (void) throw (); > > >extern __pid_t getppid (void) throw (); > > > > >extern __pid_t getpgrp (void) throw (); ># 646 "/usr/include/unistd.h" 3 4 >extern __pid_t __getpgid (__pid_t __pid) throw (); > >extern __pid_t getpgid (__pid_t __pid) throw (); > > > > > > >extern int setpgid (__pid_t __pid, __pid_t __pgid) throw (); ># 672 "/usr/include/unistd.h" 3 4 >extern int setpgrp (void) throw (); ># 689 "/usr/include/unistd.h" 3 4 >extern __pid_t setsid (void) throw (); > > > >extern __pid_t getsid (__pid_t __pid) throw (); > > > >extern __uid_t getuid (void) throw (); > > >extern __uid_t geteuid (void) throw (); > > >extern __gid_t getgid (void) throw (); > > >extern __gid_t getegid (void) throw (); > > > > >extern int getgroups (int __size, __gid_t __list[]) throw () ; > > > >extern int group_member (__gid_t __gid) throw (); > > > > > > >extern int setuid (__uid_t __uid) throw () ; > > > > >extern int setreuid (__uid_t __ruid, __uid_t __euid) throw () ; > > > > >extern int seteuid (__uid_t __uid) throw () ; > > > > > > >extern int setgid (__gid_t __gid) throw () ; > > > > >extern int setregid (__gid_t __rgid, __gid_t __egid) throw () ; > > > > >extern int setegid (__gid_t __gid) throw () ; > > > > > >extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) > throw (); > > > >extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) > throw (); > > > >extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) > throw () ; > > > >extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) > throw () ; > > > > > > >extern __pid_t fork (void) throw (); > > > > > > > >extern __pid_t vfork (void) throw (); > > > > > >extern char *ttyname (int __fd) throw (); > > > >extern int ttyname_r (int __fd, char *__buf, size_t __buflen) > throw () __attribute__ ((__nonnull__ (2))) ; > > > >extern int isatty (int __fd) throw (); > > > > > >extern int ttyslot (void) throw (); > > > > >extern int link (const char *__from, const char *__to) > throw () __attribute__ ((__nonnull__ (1, 2))) ; > > > > >extern int linkat (int __fromfd, const char *__from, int __tofd, > const char *__to, int __flags) > throw () __attribute__ ((__nonnull__ (2, 4))) ; > > > > >extern int symlink (const char *__from, const char *__to) > throw () __attribute__ ((__nonnull__ (1, 2))) ; > > > > >extern ssize_t readlink (const char *__restrict __path, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (1, 2))) ; > > > > >extern int symlinkat (const char *__from, int __tofd, > const char *__to) throw () __attribute__ ((__nonnull__ (1, 3))) ; > > >extern ssize_t readlinkat (int __fd, const char *__restrict __path, > char *__restrict __buf, size_t __len) > throw () __attribute__ ((__nonnull__ (2, 3))) ; > > > >extern int unlink (const char *__name) throw () __attribute__ ((__nonnull__ (1))); > > > >extern int unlinkat (int __fd, const char *__name, int __flag) > throw () __attribute__ ((__nonnull__ (2))); > > > >extern int rmdir (const char *__path) throw () __attribute__ ((__nonnull__ (1))); > > > >extern __pid_t tcgetpgrp (int __fd) throw (); > > >extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) throw (); > > > > > > >extern char *getlogin (void); > > > > > > > >extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1))); > > > > >extern int setlogin (const char *__name) throw () __attribute__ ((__nonnull__ (1))); ># 893 "/usr/include/unistd.h" 3 4 ># 1 "/usr/include/getopt.h" 1 3 4 ># 48 "/usr/include/getopt.h" 3 4 >extern "C" { ># 57 "/usr/include/getopt.h" 3 4 >extern char *optarg; ># 71 "/usr/include/getopt.h" 3 4 >extern int optind; > > > > >extern int opterr; > > > >extern int optopt; ># 150 "/usr/include/getopt.h" 3 4 >extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) > throw (); ># 185 "/usr/include/getopt.h" 3 4 >} ># 894 "/usr/include/unistd.h" 2 3 4 > > > > > > > >extern int gethostname (char *__name, size_t __len) throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern int sethostname (const char *__name, size_t __len) > throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern int sethostid (long int __id) throw () ; > > > > > >extern int getdomainname (char *__name, size_t __len) > throw () __attribute__ ((__nonnull__ (1))) ; >extern int setdomainname (const char *__name, size_t __len) > throw () __attribute__ ((__nonnull__ (1))) ; > > > > > >extern int vhangup (void) throw (); > > >extern int revoke (const char *__file) throw () __attribute__ ((__nonnull__ (1))) ; > > > > > > > >extern int profil (unsigned short int *__sample_buffer, size_t __size, > size_t __offset, unsigned int __scale) > throw () __attribute__ ((__nonnull__ (1))); > > > > > >extern int acct (const char *__name) throw (); > > > >extern char *getusershell (void) throw (); >extern void endusershell (void) throw (); >extern void setusershell (void) throw (); > > > > > >extern int daemon (int __nochdir, int __noclose) throw () ; > > > > > > >extern int chroot (const char *__path) throw () __attribute__ ((__nonnull__ (1))) ; > > > >extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1))); > > > > > > > >extern int fsync (int __fd); > > > > > >extern int syncfs (int __fd) throw (); > > > > > > >extern long int gethostid (void); > > >extern void sync (void) throw (); > > > > > >extern int getpagesize (void) throw () __attribute__ ((__const__)); > > > > >extern int getdtablesize (void) throw (); ># 1015 "/usr/include/unistd.h" 3 4 >extern int truncate (const char *__file, __off_t __length) > throw () __attribute__ ((__nonnull__ (1))) ; ># 1027 "/usr/include/unistd.h" 3 4 >extern int truncate64 (const char *__file, __off64_t __length) > throw () __attribute__ ((__nonnull__ (1))) ; ># 1038 "/usr/include/unistd.h" 3 4 >extern int ftruncate (int __fd, __off_t __length) throw () ; ># 1048 "/usr/include/unistd.h" 3 4 >extern int ftruncate64 (int __fd, __off64_t __length) throw () ; ># 1059 "/usr/include/unistd.h" 3 4 >extern int brk (void *__addr) throw () ; > > > > > >extern void *sbrk (intptr_t __delta) throw (); ># 1080 "/usr/include/unistd.h" 3 4 >extern long int syscall (long int __sysno, ...) throw (); ># 1103 "/usr/include/unistd.h" 3 4 >extern int lockf (int __fd, int __cmd, __off_t __len) ; ># 1113 "/usr/include/unistd.h" 3 4 >extern int lockf64 (int __fd, int __cmd, __off64_t __len) ; ># 1134 "/usr/include/unistd.h" 3 4 >extern int fdatasync (int __fildes); > > > > > > > >extern char *crypt (const char *__key, const char *__salt) > throw () __attribute__ ((__nonnull__ (1, 2))); > > > >extern void encrypt (char *__block, int __edflag) throw () __attribute__ ((__nonnull__ (1))); > > > > > > >extern void swab (const void *__restrict __from, void *__restrict __to, > ssize_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); ># 1172 "/usr/include/unistd.h" 3 4 >} ># 125 "./CImg.h" 2 ># 198 "./CImg.h" ># 1 "/usr/include/X11/Xlib.h" 1 3 4 ># 44 "/usr/include/X11/Xlib.h" 3 4 ># 1 "/usr/include/X11/X.h" 1 3 4 ># 66 "/usr/include/X11/X.h" 3 4 >typedef unsigned long XID; > > > >typedef unsigned long Mask; > > > >typedef unsigned long Atom; > >typedef unsigned long VisualID; >typedef unsigned long Time; ># 96 "/usr/include/X11/X.h" 3 4 >typedef XID Window; >typedef XID Drawable; > > >typedef XID Font; > >typedef XID Pixmap; >typedef XID Cursor; >typedef XID Colormap; >typedef XID GContext; >typedef XID KeySym; > >typedef unsigned char KeyCode; ># 45 "/usr/include/X11/Xlib.h" 2 3 4 > > ># 1 "/usr/include/X11/Xfuncproto.h" 1 3 4 ># 48 "/usr/include/X11/Xlib.h" 2 3 4 ># 1 "/usr/include/X11/Xosdefs.h" 1 3 4 ># 49 "/usr/include/X11/Xlib.h" 2 3 4 > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 147 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 3 4 >typedef long int ptrdiff_t; ># 52 "/usr/include/X11/Xlib.h" 2 3 4 ># 69 "/usr/include/X11/Xlib.h" 3 4 >extern int >_Xmblen( > > > > > char *str, > int len > > ); ># 92 "/usr/include/X11/Xlib.h" 3 4 >typedef char *XPointer; ># 160 "/usr/include/X11/Xlib.h" 3 4 >typedef struct _XExtData { > int number; > struct _XExtData *next; > int (*free_private)( > struct _XExtData *extension > ); > XPointer private_data; >} XExtData; > > > > >typedef struct { > int extension; > int major_opcode; > int first_event; > int first_error; >} XExtCodes; > > > > > >typedef struct { > int depth; > int bits_per_pixel; > int scanline_pad; >} XPixmapFormatValues; > > > > > >typedef struct { > int function; > unsigned long plane_mask; > unsigned long foreground; > unsigned long background; > int line_width; > int line_style; > int cap_style; > > int join_style; > int fill_style; > > int fill_rule; > int arc_mode; > Pixmap tile; > Pixmap stipple; > int ts_x_origin; > int ts_y_origin; > Font font; > int subwindow_mode; > int graphics_exposures; > int clip_x_origin; > int clip_y_origin; > Pixmap clip_mask; > int dash_offset; > char dashes; >} XGCValues; > > > > > > >typedef struct _XGC > > > > > > > >*GC; > > > > >typedef struct { > XExtData *ext_data; > VisualID visualid; > > int c_class; > > > > unsigned long red_mask, green_mask, blue_mask; > int bits_per_rgb; > int map_entries; >} Visual; > > > > >typedef struct { > int depth; > int nvisuals; > Visual *visuals; >} Depth; > > > > > > > >struct _XDisplay; > >typedef struct { > XExtData *ext_data; > struct _XDisplay *display; > Window root; > int width, height; > int mwidth, mheight; > int ndepths; > Depth *depths; > int root_depth; > Visual *root_visual; > GC default_gc; > Colormap cmap; > unsigned long white_pixel; > unsigned long black_pixel; > int max_maps, min_maps; > int backing_store; > int save_unders; > long root_input_mask; >} Screen; > > > > >typedef struct { > XExtData *ext_data; > int depth; > int bits_per_pixel; > int scanline_pad; >} ScreenFormat; > > > > >typedef struct { > Pixmap background_pixmap; > unsigned long background_pixel; > Pixmap border_pixmap; > unsigned long border_pixel; > int bit_gravity; > int win_gravity; > int backing_store; > unsigned long backing_planes; > unsigned long backing_pixel; > int save_under; > long event_mask; > long do_not_propagate_mask; > int override_redirect; > Colormap colormap; > Cursor cursor; >} XSetWindowAttributes; > >typedef struct { > int x, y; > int width, height; > int border_width; > int depth; > Visual *visual; > Window root; > > int c_class; > > > > int bit_gravity; > int win_gravity; > int backing_store; > unsigned long backing_planes; > unsigned long backing_pixel; > int save_under; > Colormap colormap; > int map_installed; > int map_state; > long all_event_masks; > long your_event_mask; > long do_not_propagate_mask; > int override_redirect; > Screen *screen; >} XWindowAttributes; > > > > > > >typedef struct { > int family; > int length; > char *address; >} XHostAddress; > > > > >typedef struct { > int typelength; > int valuelength; > char *type; > char *value; >} XServerInterpretedAddress; > > > > >typedef struct _XImage { > int width, height; > int xoffset; > int format; > char *data; > int byte_order; > int bitmap_unit; > int bitmap_bit_order; > int bitmap_pad; > int depth; > int bytes_per_line; > int bits_per_pixel; > unsigned long red_mask; > unsigned long green_mask; > unsigned long blue_mask; > XPointer obdata; > struct funcs { > struct _XImage *(*create_image)( > struct _XDisplay* , > Visual* , > unsigned int , > int , > int , > char* , > unsigned int , > unsigned int , > int , > int ); > int (*destroy_image) (struct _XImage *); > unsigned long (*get_pixel) (struct _XImage *, int, int); > int (*put_pixel) (struct _XImage *, int, int, unsigned long); > struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int); > int (*add_pixel) (struct _XImage *, long); > } f; >} XImage; > > > > >typedef struct { > int x, y; > int width, height; > int border_width; > Window sibling; > int stack_mode; >} XWindowChanges; > > > > >typedef struct { > unsigned long pixel; > unsigned short red, green, blue; > char flags; > char pad; >} XColor; > > > > > > >typedef struct { > short x1, y1, x2, y2; >} XSegment; > >typedef struct { > short x, y; >} XPoint; > >typedef struct { > short x, y; > unsigned short width, height; >} XRectangle; > >typedef struct { > short x, y; > unsigned short width, height; > short angle1, angle2; >} XArc; > > > > >typedef struct { > int key_click_percent; > int bell_percent; > int bell_pitch; > int bell_duration; > int led; > int led_mode; > int key; > int auto_repeat_mode; >} XKeyboardControl; > > > >typedef struct { > int key_click_percent; > int bell_percent; > unsigned int bell_pitch, bell_duration; > unsigned long led_mask; > int global_auto_repeat; > char auto_repeats[32]; >} XKeyboardState; > > > >typedef struct { > Time time; > short x, y; >} XTimeCoord; > > > >typedef struct { > int max_keypermod; > KeyCode *modifiermap; >} XModifierKeymap; ># 499 "/usr/include/X11/Xlib.h" 3 4 >typedef struct _XDisplay Display; > > >struct _XPrivate; >struct _XrmHashBucketRec; > >typedef struct > > > >{ > XExtData *ext_data; > struct _XPrivate *private1; > int fd; > int private2; > int proto_major_version; > int proto_minor_version; > char *vendor; > XID private3; > XID private4; > XID private5; > int private6; > XID (*resource_alloc)( > struct _XDisplay* > ); > int byte_order; > int bitmap_unit; > int bitmap_pad; > int bitmap_bit_order; > int nformats; > ScreenFormat *pixmap_format; > int private8; > int release; > struct _XPrivate *private9, *private10; > int qlen; > unsigned long last_request_read; > unsigned long request; > XPointer private11; > XPointer private12; > XPointer private13; > XPointer private14; > unsigned max_request_size; > struct _XrmHashBucketRec *db; > int (*private15)( > struct _XDisplay* > ); > char *display_name; > int default_screen; > int nscreens; > Screen *screens; > unsigned long motion_buffer; > unsigned long private16; > int min_keycode; > int max_keycode; > XPointer private17; > XPointer private18; > int private19; > char *xdefaults; > >} > > > >*_XPrivDisplay; > > > > > > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Window root; > Window subwindow; > Time time; > int x, y; > int x_root, y_root; > unsigned int state; > unsigned int keycode; > int same_screen; >} XKeyEvent; >typedef XKeyEvent XKeyPressedEvent; >typedef XKeyEvent XKeyReleasedEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Window root; > Window subwindow; > Time time; > int x, y; > int x_root, y_root; > unsigned int state; > unsigned int button; > int same_screen; >} XButtonEvent; >typedef XButtonEvent XButtonPressedEvent; >typedef XButtonEvent XButtonReleasedEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Window root; > Window subwindow; > Time time; > int x, y; > int x_root, y_root; > unsigned int state; > char is_hint; > int same_screen; >} XMotionEvent; >typedef XMotionEvent XPointerMovedEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Window root; > Window subwindow; > Time time; > int x, y; > int x_root, y_root; > int mode; > int detail; > > > > > int same_screen; > int focus; > unsigned int state; >} XCrossingEvent; >typedef XCrossingEvent XEnterWindowEvent; >typedef XCrossingEvent XLeaveWindowEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > int mode; > > int detail; > > > > > >} XFocusChangeEvent; >typedef XFocusChangeEvent XFocusInEvent; >typedef XFocusChangeEvent XFocusOutEvent; > > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > char key_vector[32]; >} XKeymapEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > int x, y; > int width, height; > int count; >} XExposeEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Drawable drawable; > int x, y; > int width, height; > int count; > int major_code; > int minor_code; >} XGraphicsExposeEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Drawable drawable; > int major_code; > int minor_code; >} XNoExposeEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > int state; >} XVisibilityEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window parent; > Window window; > int x, y; > int width, height; > int border_width; > int override_redirect; >} XCreateWindowEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; >} XDestroyWindowEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; > int from_configure; >} XUnmapEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; > int override_redirect; >} XMapEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window parent; > Window window; >} XMapRequestEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; > Window parent; > int x, y; > int override_redirect; >} XReparentEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; > int x, y; > int width, height; > int border_width; > Window above; > int override_redirect; >} XConfigureEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; > int x, y; >} XGravityEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > int width, height; >} XResizeRequestEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window parent; > Window window; > int x, y; > int width, height; > int border_width; > Window above; > int detail; > unsigned long value_mask; >} XConfigureRequestEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window event; > Window window; > int place; >} XCirculateEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window parent; > Window window; > int place; >} XCirculateRequestEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Atom atom; > Time time; > int state; >} XPropertyEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Atom selection; > Time time; >} XSelectionClearEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window owner; > Window requestor; > Atom selection; > Atom target; > Atom property; > Time time; >} XSelectionRequestEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window requestor; > Atom selection; > Atom target; > Atom property; > Time time; >} XSelectionEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Colormap colormap; > > int c_new; > > > > int state; >} XColormapEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > Atom message_type; > int format; > union { > char b[20]; > short s[10]; > long l[5]; > } data; >} XClientMessageEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; > int request; > > int first_keycode; > int count; >} XMappingEvent; > >typedef struct { > int type; > Display *display; > XID resourceid; > unsigned long serial; > unsigned char error_code; > unsigned char request_code; > unsigned char minor_code; >} XErrorEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > Window window; >} XAnyEvent; > > > > > > > >typedef struct > { > int type; > unsigned long serial; > int send_event; > Display *display; > int extension; > int evtype; > } XGenericEvent; > >typedef struct { > int type; > unsigned long serial; > int send_event; > Display *display; > int extension; > int evtype; > unsigned int cookie; > void *data; >} XGenericEventCookie; > > > > > >typedef union _XEvent { > int type; > XAnyEvent xany; > XKeyEvent xkey; > XButtonEvent xbutton; > XMotionEvent xmotion; > XCrossingEvent xcrossing; > XFocusChangeEvent xfocus; > XExposeEvent xexpose; > XGraphicsExposeEvent xgraphicsexpose; > XNoExposeEvent xnoexpose; > XVisibilityEvent xvisibility; > XCreateWindowEvent xcreatewindow; > XDestroyWindowEvent xdestroywindow; > XUnmapEvent xunmap; > XMapEvent xmap; > XMapRequestEvent xmaprequest; > XReparentEvent xreparent; > XConfigureEvent xconfigure; > XGravityEvent xgravity; > XResizeRequestEvent xresizerequest; > XConfigureRequestEvent xconfigurerequest; > XCirculateEvent xcirculate; > XCirculateRequestEvent xcirculaterequest; > XPropertyEvent xproperty; > XSelectionClearEvent xselectionclear; > XSelectionRequestEvent xselectionrequest; > XSelectionEvent xselection; > XColormapEvent xcolormap; > XClientMessageEvent xclient; > XMappingEvent xmapping; > XErrorEvent xerror; > XKeymapEvent xkeymap; > XGenericEvent xgeneric; > XGenericEventCookie xcookie; > long pad[24]; >} XEvent; > > > > > > > >typedef struct { > short lbearing; > short rbearing; > short width; > short ascent; > short descent; > unsigned short attributes; >} XCharStruct; > > > > > >typedef struct { > Atom name; > unsigned long card32; >} XFontProp; > >typedef struct { > XExtData *ext_data; > Font fid; > unsigned direction; > unsigned min_char_or_byte2; > unsigned max_char_or_byte2; > unsigned min_byte1; > unsigned max_byte1; > int all_chars_exist; > unsigned default_char; > int n_properties; > XFontProp *properties; > XCharStruct min_bounds; > XCharStruct max_bounds; > XCharStruct *per_char; > int ascent; > int descent; >} XFontStruct; > > > > >typedef struct { > char *chars; > int nchars; > int delta; > Font font; >} XTextItem; > >typedef struct { > unsigned char byte1; > unsigned char byte2; >} XChar2b; > >typedef struct { > XChar2b *chars; > int nchars; > int delta; > Font font; >} XTextItem16; > > >typedef union { Display *display; > GC gc; > Visual *visual; > Screen *screen; > ScreenFormat *pixmap_format; > XFontStruct *font; } XEDataObject; > >typedef struct { > XRectangle max_ink_extent; > XRectangle max_logical_extent; >} XFontSetExtents; > > > > > >typedef struct _XOM *XOM; >typedef struct _XOC *XOC, *XFontSet; > >typedef struct { > char *chars; > int nchars; > int delta; > XFontSet font_set; >} XmbTextItem; > >typedef struct { > wchar_t *chars; > int nchars; > int delta; > XFontSet font_set; >} XwcTextItem; ># 1133 "/usr/include/X11/Xlib.h" 3 4 >typedef struct { > int charset_count; > char **charset_list; >} XOMCharSetList; > >typedef enum { > XOMOrientation_LTR_TTB, > XOMOrientation_RTL_TTB, > XOMOrientation_TTB_LTR, > XOMOrientation_TTB_RTL, > XOMOrientation_Context >} XOrientation; > >typedef struct { > int num_orientation; > XOrientation *orientation; >} XOMOrientation; > >typedef struct { > int num_font; > XFontStruct **font_struct_list; > char **font_name_list; >} XOMFontInfo; > >typedef struct _XIM *XIM; >typedef struct _XIC *XIC; > >typedef void (*XIMProc)( > XIM, > XPointer, > XPointer >); > >typedef int (*XICProc)( > XIC, > XPointer, > XPointer >); > >typedef void (*XIDProc)( > Display*, > XPointer, > XPointer >); > >typedef unsigned long XIMStyle; > >typedef struct { > unsigned short count_styles; > XIMStyle *supported_styles; >} XIMStyles; ># 1245 "/usr/include/X11/Xlib.h" 3 4 >typedef void *XVaNestedList; > >typedef struct { > XPointer client_data; > XIMProc callback; >} XIMCallback; > >typedef struct { > XPointer client_data; > XICProc callback; >} XICCallback; > >typedef unsigned long XIMFeedback; ># 1269 "/usr/include/X11/Xlib.h" 3 4 >typedef struct _XIMText { > unsigned short length; > XIMFeedback *feedback; > int encoding_is_wchar; > union { > char *multi_byte; > wchar_t *wide_char; > } string; >} XIMText; > >typedef unsigned long XIMPreeditState; > > > > > >typedef struct _XIMPreeditStateNotifyCallbackStruct { > XIMPreeditState state; >} XIMPreeditStateNotifyCallbackStruct; > >typedef unsigned long XIMResetState; > > > > >typedef unsigned long XIMStringConversionFeedback; ># 1303 "/usr/include/X11/Xlib.h" 3 4 >typedef struct _XIMStringConversionText { > unsigned short length; > XIMStringConversionFeedback *feedback; > int encoding_is_wchar; > union { > char *mbs; > wchar_t *wcs; > } string; >} XIMStringConversionText; > >typedef unsigned short XIMStringConversionPosition; > >typedef unsigned short XIMStringConversionType; > > > > > > >typedef unsigned short XIMStringConversionOperation; > > > > >typedef enum { > XIMForwardChar, XIMBackwardChar, > XIMForwardWord, XIMBackwardWord, > XIMCaretUp, XIMCaretDown, > XIMNextLine, XIMPreviousLine, > XIMLineStart, XIMLineEnd, > XIMAbsolutePosition, > XIMDontChange >} XIMCaretDirection; > >typedef struct _XIMStringConversionCallbackStruct { > XIMStringConversionPosition position; > XIMCaretDirection direction; > XIMStringConversionOperation operation; > unsigned short factor; > XIMStringConversionText *text; >} XIMStringConversionCallbackStruct; > >typedef struct _XIMPreeditDrawCallbackStruct { > int caret; > int chg_first; > int chg_length; > XIMText *text; >} XIMPreeditDrawCallbackStruct; > >typedef enum { > XIMIsInvisible, > XIMIsPrimary, > XIMIsSecondary >} XIMCaretStyle; > >typedef struct _XIMPreeditCaretCallbackStruct { > int position; > XIMCaretDirection direction; > XIMCaretStyle style; >} XIMPreeditCaretCallbackStruct; > >typedef enum { > XIMTextType, > XIMBitmapType >} XIMStatusDataType; > >typedef struct _XIMStatusDrawCallbackStruct { > XIMStatusDataType type; > union { > XIMText *text; > Pixmap bitmap; > } data; >} XIMStatusDrawCallbackStruct; > >typedef struct _XIMHotKeyTrigger { > KeySym keysym; > int modifier; > int modifier_mask; >} XIMHotKeyTrigger; > >typedef struct _XIMHotKeyTriggers { > int num_hot_key; > XIMHotKeyTrigger *key; >} XIMHotKeyTriggers; > >typedef unsigned long XIMHotKeyState; > > > > >typedef struct { > unsigned short count_values; > char **supported_values; >} XIMValuesList; > >extern "C" { > > > > > >extern int _Xdebug; > >extern XFontStruct *XLoadQueryFont( > Display* , > const char* >); > >extern XFontStruct *XQueryFont( > Display* , > XID >); > > >extern XTimeCoord *XGetMotionEvents( > Display* , > Window , > Time , > Time , > int* >); > >extern XModifierKeymap *XDeleteModifiermapEntry( > XModifierKeymap* , > > > > KeyCode , > > int >); > >extern XModifierKeymap *XGetModifierMapping( > Display* >); > >extern XModifierKeymap *XInsertModifiermapEntry( > XModifierKeymap* , > > > > KeyCode , > > int >); > >extern XModifierKeymap *XNewModifiermap( > int >); > >extern XImage *XCreateImage( > Display* , > Visual* , > unsigned int , > int , > int , > char* , > unsigned int , > unsigned int , > int , > int >); >extern int XInitImage( > XImage* >); >extern XImage *XGetImage( > Display* , > Drawable , > int , > int , > unsigned int , > unsigned int , > unsigned long , > int >); >extern XImage *XGetSubImage( > Display* , > Drawable , > int , > int , > unsigned int , > unsigned int , > unsigned long , > int , > XImage* , > int , > int >); > > > > >extern Display *XOpenDisplay( > const char* >); > >extern void XrmInitialize( > void >); > >extern char *XFetchBytes( > Display* , > int* >); >extern char *XFetchBuffer( > Display* , > int* , > int >); >extern char *XGetAtomName( > Display* , > Atom >); >extern int XGetAtomNames( > Display* , > Atom* , > int , > char** >); >extern char *XGetDefault( > Display* , > const char* , > const char* >); >extern char *XDisplayName( > const char* >); >extern char *XKeysymToString( > KeySym >); > >extern int (*XSynchronize( > Display* , > int >))( > Display* >); >extern int (*XSetAfterFunction( > Display* , > int (*) ( > Display* > ) >))( > Display* >); >extern Atom XInternAtom( > Display* , > const char* , > int >); >extern int XInternAtoms( > Display* , > char** , > int , > int , > Atom* >); >extern Colormap XCopyColormapAndFree( > Display* , > Colormap >); >extern Colormap XCreateColormap( > Display* , > Window , > Visual* , > int >); >extern Cursor XCreatePixmapCursor( > Display* , > Pixmap , > Pixmap , > XColor* , > XColor* , > unsigned int , > unsigned int >); >extern Cursor XCreateGlyphCursor( > Display* , > Font , > Font , > unsigned int , > unsigned int , > XColor const * , > XColor const * >); >extern Cursor XCreateFontCursor( > Display* , > unsigned int >); >extern Font XLoadFont( > Display* , > const char* >); >extern GC XCreateGC( > Display* , > Drawable , > unsigned long , > XGCValues* >); >extern GContext XGContextFromGC( > GC >); >extern void XFlushGC( > Display* , > GC >); >extern Pixmap XCreatePixmap( > Display* , > Drawable , > unsigned int , > unsigned int , > unsigned int >); >extern Pixmap XCreateBitmapFromData( > Display* , > Drawable , > const char* , > unsigned int , > unsigned int >); >extern Pixmap XCreatePixmapFromBitmapData( > Display* , > Drawable , > char* , > unsigned int , > unsigned int , > unsigned long , > unsigned long , > unsigned int >); >extern Window XCreateSimpleWindow( > Display* , > Window , > int , > int , > unsigned int , > unsigned int , > unsigned int , > unsigned long , > unsigned long >); >extern Window XGetSelectionOwner( > Display* , > Atom >); >extern Window XCreateWindow( > Display* , > Window , > int , > int , > unsigned int , > unsigned int , > unsigned int , > int , > unsigned int , > Visual* , > unsigned long , > XSetWindowAttributes* >); >extern Colormap *XListInstalledColormaps( > Display* , > Window , > int* >); >extern char **XListFonts( > Display* , > const char* , > int , > int* >); >extern char **XListFontsWithInfo( > Display* , > const char* , > int , > int* , > XFontStruct** >); >extern char **XGetFontPath( > Display* , > int* >); >extern char **XListExtensions( > Display* , > int* >); >extern Atom *XListProperties( > Display* , > Window , > int* >); >extern XHostAddress *XListHosts( > Display* , > int* , > int* >); >__attribute__((deprecated)) >extern KeySym XKeycodeToKeysym( > Display* , > > > > KeyCode , > > int >); >extern KeySym XLookupKeysym( > XKeyEvent* , > int >); >extern KeySym *XGetKeyboardMapping( > Display* , > > > > KeyCode , > > int , > int* >); >extern KeySym XStringToKeysym( > const char* >); >extern long XMaxRequestSize( > Display* >); >extern long XExtendedMaxRequestSize( > Display* >); >extern char *XResourceManagerString( > Display* >); >extern char *XScreenResourceString( > Screen* >); >extern unsigned long XDisplayMotionBufferSize( > Display* >); >extern VisualID XVisualIDFromVisual( > Visual* >); > > > >extern int XInitThreads( > void >); > >extern void XLockDisplay( > Display* >); > >extern void XUnlockDisplay( > Display* >); > > > >extern XExtCodes *XInitExtension( > Display* , > const char* >); > >extern XExtCodes *XAddExtension( > Display* >); >extern XExtData *XFindOnExtensionList( > XExtData** , > int >); >extern XExtData **XEHeadOfExtensionList( > XEDataObject >); > > >extern Window XRootWindow( > Display* , > int >); >extern Window XDefaultRootWindow( > Display* >); >extern Window XRootWindowOfScreen( > Screen* >); >extern Visual *XDefaultVisual( > Display* , > int >); >extern Visual *XDefaultVisualOfScreen( > Screen* >); >extern GC XDefaultGC( > Display* , > int >); >extern GC XDefaultGCOfScreen( > Screen* >); >extern unsigned long XBlackPixel( > Display* , > int >); >extern unsigned long XWhitePixel( > Display* , > int >); >extern unsigned long XAllPlanes( > void >); >extern unsigned long XBlackPixelOfScreen( > Screen* >); >extern unsigned long XWhitePixelOfScreen( > Screen* >); >extern unsigned long XNextRequest( > Display* >); >extern unsigned long XLastKnownRequestProcessed( > Display* >); >extern char *XServerVendor( > Display* >); >extern char *XDisplayString( > Display* >); >extern Colormap XDefaultColormap( > Display* , > int >); >extern Colormap XDefaultColormapOfScreen( > Screen* >); >extern Display *XDisplayOfScreen( > Screen* >); >extern Screen *XScreenOfDisplay( > Display* , > int >); >extern Screen *XDefaultScreenOfDisplay( > Display* >); >extern long XEventMaskOfScreen( > Screen* >); > >extern int XScreenNumberOfScreen( > Screen* >); > >typedef int (*XErrorHandler) ( > Display* , > XErrorEvent* >); > >extern XErrorHandler XSetErrorHandler ( > XErrorHandler >); > > >typedef int (*XIOErrorHandler) ( > Display* >); > >extern XIOErrorHandler XSetIOErrorHandler ( > XIOErrorHandler >); > > >extern XPixmapFormatValues *XListPixmapFormats( > Display* , > int* >); >extern int *XListDepths( > Display* , > int , > int* >); > > > >extern int XReconfigureWMWindow( > Display* , > Window , > int , > unsigned int , > XWindowChanges* >); > >extern int XGetWMProtocols( > Display* , > Window , > Atom** , > int* >); >extern int XSetWMProtocols( > Display* , > Window , > Atom* , > int >); >extern int XIconifyWindow( > Display* , > Window , > int >); >extern int XWithdrawWindow( > Display* , > Window , > int >); >extern int XGetCommand( > Display* , > Window , > char*** , > int* >); >extern int XGetWMColormapWindows( > Display* , > Window , > Window** , > int* >); >extern int XSetWMColormapWindows( > Display* , > Window , > Window* , > int >); >extern void XFreeStringList( > char** >); >extern int XSetTransientForHint( > Display* , > Window , > Window >); > > > >extern int XActivateScreenSaver( > Display* >); > >extern int XAddHost( > Display* , > XHostAddress* >); > >extern int XAddHosts( > Display* , > XHostAddress* , > int >); > >extern int XAddToExtensionList( > struct _XExtData** , > XExtData* >); > >extern int XAddToSaveSet( > Display* , > Window >); > >extern int XAllocColor( > Display* , > Colormap , > XColor* >); > >extern int XAllocColorCells( > Display* , > Colormap , > int , > unsigned long* , > unsigned int , > unsigned long* , > unsigned int >); > >extern int XAllocColorPlanes( > Display* , > Colormap , > int , > unsigned long* , > int , > int , > int , > int , > unsigned long* , > unsigned long* , > unsigned long* >); > >extern int XAllocNamedColor( > Display* , > Colormap , > const char* , > XColor* , > XColor* >); > >extern int XAllowEvents( > Display* , > int , > Time >); > >extern int XAutoRepeatOff( > Display* >); > >extern int XAutoRepeatOn( > Display* >); > >extern int XBell( > Display* , > int >); > >extern int XBitmapBitOrder( > Display* >); > >extern int XBitmapPad( > Display* >); > >extern int XBitmapUnit( > Display* >); > >extern int XCellsOfScreen( > Screen* >); > >extern int XChangeActivePointerGrab( > Display* , > unsigned int , > Cursor , > Time >); > >extern int XChangeGC( > Display* , > GC , > unsigned long , > XGCValues* >); > >extern int XChangeKeyboardControl( > Display* , > unsigned long , > XKeyboardControl* >); > >extern int XChangeKeyboardMapping( > Display* , > int , > int , > KeySym* , > int >); > >extern int XChangePointerControl( > Display* , > int , > int , > int , > int , > int >); > >extern int XChangeProperty( > Display* , > Window , > Atom , > Atom , > int , > int , > const unsigned char* , > int >); > >extern int XChangeSaveSet( > Display* , > Window , > int >); > >extern int XChangeWindowAttributes( > Display* , > Window , > unsigned long , > XSetWindowAttributes* >); > >extern int XCheckIfEvent( > Display* , > XEvent* , > int (*) ( > Display* , > XEvent* , > XPointer > ) , > XPointer >); > >extern int XCheckMaskEvent( > Display* , > long , > XEvent* >); > >extern int XCheckTypedEvent( > Display* , > int , > XEvent* >); > >extern int XCheckTypedWindowEvent( > Display* , > Window , > int , > XEvent* >); > >extern int XCheckWindowEvent( > Display* , > Window , > long , > XEvent* >); > >extern int XCirculateSubwindows( > Display* , > Window , > int >); > >extern int XCirculateSubwindowsDown( > Display* , > Window >); > >extern int XCirculateSubwindowsUp( > Display* , > Window >); > >extern int XClearArea( > Display* , > Window , > int , > int , > unsigned int , > unsigned int , > int >); > >extern int XClearWindow( > Display* , > Window >); > >extern int XCloseDisplay( > Display* >); > >extern int XConfigureWindow( > Display* , > Window , > unsigned int , > XWindowChanges* >); > >extern int XConnectionNumber( > Display* >); > >extern int XConvertSelection( > Display* , > Atom , > Atom , > Atom , > Window , > Time >); > >extern int XCopyArea( > Display* , > Drawable , > Drawable , > GC , > int , > int , > unsigned int , > unsigned int , > int , > int >); > >extern int XCopyGC( > Display* , > GC , > unsigned long , > GC >); > >extern int XCopyPlane( > Display* , > Drawable , > Drawable , > GC , > int , > int , > unsigned int , > unsigned int , > int , > int , > unsigned long >); > >extern int XDefaultDepth( > Display* , > int >); > >extern int XDefaultDepthOfScreen( > Screen* >); > >extern int XDefaultScreen( > Display* >); > >extern int XDefineCursor( > Display* , > Window , > Cursor >); > >extern int XDeleteProperty( > Display* , > Window , > Atom >); > >extern int XDestroyWindow( > Display* , > Window >); > >extern int XDestroySubwindows( > Display* , > Window >); > >extern int XDoesBackingStore( > Screen* >); > >extern int XDoesSaveUnders( > Screen* >); > >extern int XDisableAccessControl( > Display* >); > > >extern int XDisplayCells( > Display* , > int >); > >extern int XDisplayHeight( > Display* , > int >); > >extern int XDisplayHeightMM( > Display* , > int >); > >extern int XDisplayKeycodes( > Display* , > int* , > int* >); > >extern int XDisplayPlanes( > Display* , > int >); > >extern int XDisplayWidth( > Display* , > int >); > >extern int XDisplayWidthMM( > Display* , > int >); > >extern int XDrawArc( > Display* , > Drawable , > GC , > int , > int , > unsigned int , > unsigned int , > int , > int >); > >extern int XDrawArcs( > Display* , > Drawable , > GC , > XArc* , > int >); > >extern int XDrawImageString( > Display* , > Drawable , > GC , > int , > int , > const char* , > int >); > >extern int XDrawImageString16( > Display* , > Drawable , > GC , > int , > int , > const XChar2b* , > int >); > >extern int XDrawLine( > Display* , > Drawable , > GC , > int , > int , > int , > int >); > >extern int XDrawLines( > Display* , > Drawable , > GC , > XPoint* , > int , > int >); > >extern int XDrawPoint( > Display* , > Drawable , > GC , > int , > int >); > >extern int XDrawPoints( > Display* , > Drawable , > GC , > XPoint* , > int , > int >); > >extern int XDrawRectangle( > Display* , > Drawable , > GC , > int , > int , > unsigned int , > unsigned int >); > >extern int XDrawRectangles( > Display* , > Drawable , > GC , > XRectangle* , > int >); > >extern int XDrawSegments( > Display* , > Drawable , > GC , > XSegment* , > int >); > >extern int XDrawString( > Display* , > Drawable , > GC , > int , > int , > const char* , > int >); > >extern int XDrawString16( > Display* , > Drawable , > GC , > int , > int , > const XChar2b* , > int >); > >extern int XDrawText( > Display* , > Drawable , > GC , > int , > int , > XTextItem* , > int >); > >extern int XDrawText16( > Display* , > Drawable , > GC , > int , > int , > XTextItem16* , > int >); > >extern int XEnableAccessControl( > Display* >); > >extern int XEventsQueued( > Display* , > int >); > >extern int XFetchName( > Display* , > Window , > char** >); > >extern int XFillArc( > Display* , > Drawable , > GC , > int , > int , > unsigned int , > unsigned int , > int , > int >); > >extern int XFillArcs( > Display* , > Drawable , > GC , > XArc* , > int >); > >extern int XFillPolygon( > Display* , > Drawable , > GC , > XPoint* , > int , > int , > int >); > >extern int XFillRectangle( > Display* , > Drawable , > GC , > int , > int , > unsigned int , > unsigned int >); > >extern int XFillRectangles( > Display* , > Drawable , > GC , > XRectangle* , > int >); > >extern int XFlush( > Display* >); > >extern int XForceScreenSaver( > Display* , > int >); > >extern int XFree( > void* >); > >extern int XFreeColormap( > Display* , > Colormap >); > >extern int XFreeColors( > Display* , > Colormap , > unsigned long* , > int , > unsigned long >); > >extern int XFreeCursor( > Display* , > Cursor >); > >extern int XFreeExtensionList( > char** >); > >extern int XFreeFont( > Display* , > XFontStruct* >); > >extern int XFreeFontInfo( > char** , > XFontStruct* , > int >); > >extern int XFreeFontNames( > char** >); > >extern int XFreeFontPath( > char** >); > >extern int XFreeGC( > Display* , > GC >); > >extern int XFreeModifiermap( > XModifierKeymap* >); > >extern int XFreePixmap( > Display* , > Pixmap >); > >extern int XGeometry( > Display* , > int , > const char* , > const char* , > unsigned int , > unsigned int , > unsigned int , > int , > int , > int* , > int* , > int* , > int* >); > >extern int XGetErrorDatabaseText( > Display* , > const char* , > const char* , > const char* , > char* , > int >); > >extern int XGetErrorText( > Display* , > int , > char* , > int >); > >extern int XGetFontProperty( > XFontStruct* , > Atom , > unsigned long* >); > >extern int XGetGCValues( > Display* , > GC , > unsigned long , > XGCValues* >); > >extern int XGetGeometry( > Display* , > Drawable , > Window* , > int* , > int* , > unsigned int* , > unsigned int* , > unsigned int* , > unsigned int* >); > >extern int XGetIconName( > Display* , > Window , > char** >); > >extern int XGetInputFocus( > Display* , > Window* , > int* >); > >extern int XGetKeyboardControl( > Display* , > XKeyboardState* >); > >extern int XGetPointerControl( > Display* , > int* , > int* , > int* >); > >extern int XGetPointerMapping( > Display* , > unsigned char* , > int >); > >extern int XGetScreenSaver( > Display* , > int* , > int* , > int* , > int* >); > >extern int XGetTransientForHint( > Display* , > Window , > Window* >); > >extern int XGetWindowProperty( > Display* , > Window , > Atom , > long , > long , > int , > Atom , > Atom* , > int* , > unsigned long* , > unsigned long* , > unsigned char** >); > >extern int XGetWindowAttributes( > Display* , > Window , > XWindowAttributes* >); > >extern int XGrabButton( > Display* , > unsigned int , > unsigned int , > Window , > int , > unsigned int , > int , > int , > Window , > Cursor >); > >extern int XGrabKey( > Display* , > int , > unsigned int , > Window , > int , > int , > int >); > >extern int XGrabKeyboard( > Display* , > Window , > int , > int , > int , > Time >); > >extern int XGrabPointer( > Display* , > Window , > int , > unsigned int , > int , > int , > Window , > Cursor , > Time >); > >extern int XGrabServer( > Display* >); > >extern int XHeightMMOfScreen( > Screen* >); > >extern int XHeightOfScreen( > Screen* >); > >extern int XIfEvent( > Display* , > XEvent* , > int (*) ( > Display* , > XEvent* , > XPointer > ) , > XPointer >); > >extern int XImageByteOrder( > Display* >); > >extern int XInstallColormap( > Display* , > Colormap >); > >extern KeyCode XKeysymToKeycode( > Display* , > KeySym >); > >extern int XKillClient( > Display* , > XID >); > >extern int XLookupColor( > Display* , > Colormap , > const char* , > XColor* , > XColor* >); > >extern int XLowerWindow( > Display* , > Window >); > >extern int XMapRaised( > Display* , > Window >); > >extern int XMapSubwindows( > Display* , > Window >); > >extern int XMapWindow( > Display* , > Window >); > >extern int XMaskEvent( > Display* , > long , > XEvent* >); > >extern int XMaxCmapsOfScreen( > Screen* >); > >extern int XMinCmapsOfScreen( > Screen* >); > >extern int XMoveResizeWindow( > Display* , > Window , > int , > int , > unsigned int , > unsigned int >); > >extern int XMoveWindow( > Display* , > Window , > int , > int >); > >extern int XNextEvent( > Display* , > XEvent* >); > >extern int XNoOp( > Display* >); > >extern int XParseColor( > Display* , > Colormap , > const char* , > XColor* >); > >extern int XParseGeometry( > const char* , > int* , > int* , > unsigned int* , > unsigned int* >); > >extern int XPeekEvent( > Display* , > XEvent* >); > >extern int XPeekIfEvent( > Display* , > XEvent* , > int (*) ( > Display* , > XEvent* , > XPointer > ) , > XPointer >); > >extern int XPending( > Display* >); > >extern int XPlanesOfScreen( > Screen* >); > >extern int XProtocolRevision( > Display* >); > >extern int XProtocolVersion( > Display* >); > > >extern int XPutBackEvent( > Display* , > XEvent* >); > >extern int XPutImage( > Display* , > Drawable , > GC , > XImage* , > int , > int , > int , > int , > unsigned int , > unsigned int >); > >extern int XQLength( > Display* >); > >extern int XQueryBestCursor( > Display* , > Drawable , > unsigned int , > unsigned int , > unsigned int* , > unsigned int* >); > >extern int XQueryBestSize( > Display* , > int , > Drawable , > unsigned int , > unsigned int , > unsigned int* , > unsigned int* >); > >extern int XQueryBestStipple( > Display* , > Drawable , > unsigned int , > unsigned int , > unsigned int* , > unsigned int* >); > >extern int XQueryBestTile( > Display* , > Drawable , > unsigned int , > unsigned int , > unsigned int* , > unsigned int* >); > >extern int XQueryColor( > Display* , > Colormap , > XColor* >); > >extern int XQueryColors( > Display* , > Colormap , > XColor* , > int >); > >extern int XQueryExtension( > Display* , > const char* , > int* , > int* , > int* >); > >extern int XQueryKeymap( > Display* , > char [32] >); > >extern int XQueryPointer( > Display* , > Window , > Window* , > Window* , > int* , > int* , > int* , > int* , > unsigned int* >); > >extern int XQueryTextExtents( > Display* , > XID , > const char* , > int , > int* , > int* , > int* , > XCharStruct* >); > >extern int XQueryTextExtents16( > Display* , > XID , > const XChar2b* , > int , > int* , > int* , > int* , > XCharStruct* >); > >extern int XQueryTree( > Display* , > Window , > Window* , > Window* , > Window** , > unsigned int* >); > >extern int XRaiseWindow( > Display* , > Window >); > >extern int XReadBitmapFile( > Display* , > Drawable , > const char* , > unsigned int* , > unsigned int* , > Pixmap* , > int* , > int* >); > >extern int XReadBitmapFileData( > const char* , > unsigned int* , > unsigned int* , > unsigned char** , > int* , > int* >); > >extern int XRebindKeysym( > Display* , > KeySym , > KeySym* , > int , > const unsigned char* , > int >); > >extern int XRecolorCursor( > Display* , > Cursor , > XColor* , > XColor* >); > >extern int XRefreshKeyboardMapping( > XMappingEvent* >); > >extern int XRemoveFromSaveSet( > Display* , > Window >); > >extern int XRemoveHost( > Display* , > XHostAddress* >); > >extern int XRemoveHosts( > Display* , > XHostAddress* , > int >); > >extern int XReparentWindow( > Display* , > Window , > Window , > int , > int >); > >extern int XResetScreenSaver( > Display* >); > >extern int XResizeWindow( > Display* , > Window , > unsigned int , > unsigned int >); > >extern int XRestackWindows( > Display* , > Window* , > int >); > >extern int XRotateBuffers( > Display* , > int >); > >extern int XRotateWindowProperties( > Display* , > Window , > Atom* , > int , > int >); > >extern int XScreenCount( > Display* >); > >extern int XSelectInput( > Display* , > Window , > long >); > >extern int XSendEvent( > Display* , > Window , > int , > long , > XEvent* >); > >extern int XSetAccessControl( > Display* , > int >); > >extern int XSetArcMode( > Display* , > GC , > int >); > >extern int XSetBackground( > Display* , > GC , > unsigned long >); > >extern int XSetClipMask( > Display* , > GC , > Pixmap >); > >extern int XSetClipOrigin( > Display* , > GC , > int , > int >); > >extern int XSetClipRectangles( > Display* , > GC , > int , > int , > XRectangle* , > int , > int >); > >extern int XSetCloseDownMode( > Display* , > int >); > >extern int XSetCommand( > Display* , > Window , > char** , > int >); > >extern int XSetDashes( > Display* , > GC , > int , > const char* , > int >); > >extern int XSetFillRule( > Display* , > GC , > int >); > >extern int XSetFillStyle( > Display* , > GC , > int >); > >extern int XSetFont( > Display* , > GC , > Font >); > >extern int XSetFontPath( > Display* , > char** , > int >); > >extern int XSetForeground( > Display* , > GC , > unsigned long >); > >extern int XSetFunction( > Display* , > GC , > int >); > >extern int XSetGraphicsExposures( > Display* , > GC , > int >); > >extern int XSetIconName( > Display* , > Window , > const char* >); > >extern int XSetInputFocus( > Display* , > Window , > int , > Time >); > >extern int XSetLineAttributes( > Display* , > GC , > unsigned int , > int , > int , > int >); > >extern int XSetModifierMapping( > Display* , > XModifierKeymap* >); > >extern int XSetPlaneMask( > Display* , > GC , > unsigned long >); > >extern int XSetPointerMapping( > Display* , > const unsigned char* , > int >); > >extern int XSetScreenSaver( > Display* , > int , > int , > int , > int >); > >extern int XSetSelectionOwner( > Display* , > Atom , > Window , > Time >); > >extern int XSetState( > Display* , > GC , > unsigned long , > unsigned long , > int , > unsigned long >); > >extern int XSetStipple( > Display* , > GC , > Pixmap >); > >extern int XSetSubwindowMode( > Display* , > GC , > int >); > >extern int XSetTSOrigin( > Display* , > GC , > int , > int >); > >extern int XSetTile( > Display* , > GC , > Pixmap >); > >extern int XSetWindowBackground( > Display* , > Window , > unsigned long >); > >extern int XSetWindowBackgroundPixmap( > Display* , > Window , > Pixmap >); > >extern int XSetWindowBorder( > Display* , > Window , > unsigned long >); > >extern int XSetWindowBorderPixmap( > Display* , > Window , > Pixmap >); > >extern int XSetWindowBorderWidth( > Display* , > Window , > unsigned int >); > >extern int XSetWindowColormap( > Display* , > Window , > Colormap >); > >extern int XStoreBuffer( > Display* , > const char* , > int , > int >); > >extern int XStoreBytes( > Display* , > const char* , > int >); > >extern int XStoreColor( > Display* , > Colormap , > XColor* >); > >extern int XStoreColors( > Display* , > Colormap , > XColor* , > int >); > >extern int XStoreName( > Display* , > Window , > const char* >); > >extern int XStoreNamedColor( > Display* , > Colormap , > const char* , > unsigned long , > int >); > >extern int XSync( > Display* , > int >); > >extern int XTextExtents( > XFontStruct* , > const char* , > int , > int* , > int* , > int* , > XCharStruct* >); > >extern int XTextExtents16( > XFontStruct* , > const XChar2b* , > int , > int* , > int* , > int* , > XCharStruct* >); > >extern int XTextWidth( > XFontStruct* , > const char* , > int >); > >extern int XTextWidth16( > XFontStruct* , > const XChar2b* , > int >); > >extern int XTranslateCoordinates( > Display* , > Window , > Window , > int , > int , > int* , > int* , > Window* >); > >extern int XUndefineCursor( > Display* , > Window >); > >extern int XUngrabButton( > Display* , > unsigned int , > unsigned int , > Window >); > >extern int XUngrabKey( > Display* , > int , > unsigned int , > Window >); > >extern int XUngrabKeyboard( > Display* , > Time >); > >extern int XUngrabPointer( > Display* , > Time >); > >extern int XUngrabServer( > Display* >); > >extern int XUninstallColormap( > Display* , > Colormap >); > >extern int XUnloadFont( > Display* , > Font >); > >extern int XUnmapSubwindows( > Display* , > Window >); > >extern int XUnmapWindow( > Display* , > Window >); > >extern int XVendorRelease( > Display* >); > >extern int XWarpPointer( > Display* , > Window , > Window , > int , > int , > unsigned int , > unsigned int , > int , > int >); > >extern int XWidthMMOfScreen( > Screen* >); > >extern int XWidthOfScreen( > Screen* >); > >extern int XWindowEvent( > Display* , > Window , > long , > XEvent* >); > >extern int XWriteBitmapFile( > Display* , > const char* , > Pixmap , > unsigned int , > unsigned int , > int , > int >); > >extern int XSupportsLocale (void); > >extern char *XSetLocaleModifiers( > const char* >); > >extern XOM XOpenOM( > Display* , > struct _XrmHashBucketRec* , > const char* , > const char* >); > >extern int XCloseOM( > XOM >); > >extern char *XSetOMValues( > XOM , > ... >) __attribute__ ((__sentinel__(0))); > >extern char *XGetOMValues( > XOM , > ... >) __attribute__ ((__sentinel__(0))); > >extern Display *XDisplayOfOM( > XOM >); > >extern char *XLocaleOfOM( > XOM >); > >extern XOC XCreateOC( > XOM , > ... >) __attribute__ ((__sentinel__(0))); > >extern void XDestroyOC( > XOC >); > >extern XOM XOMOfOC( > XOC >); > >extern char *XSetOCValues( > XOC , > ... >) __attribute__ ((__sentinel__(0))); > >extern char *XGetOCValues( > XOC , > ... >) __attribute__ ((__sentinel__(0))); > >extern XFontSet XCreateFontSet( > Display* , > const char* , > char*** , > int* , > char** >); > >extern void XFreeFontSet( > Display* , > XFontSet >); > >extern int XFontsOfFontSet( > XFontSet , > XFontStruct*** , > char*** >); > >extern char *XBaseFontNameListOfFontSet( > XFontSet >); > >extern char *XLocaleOfFontSet( > XFontSet >); > >extern int XContextDependentDrawing( > XFontSet >); > >extern int XDirectionalDependentDrawing( > XFontSet >); > >extern int XContextualDrawing( > XFontSet >); > >extern XFontSetExtents *XExtentsOfFontSet( > XFontSet >); > >extern int XmbTextEscapement( > XFontSet , > const char* , > int >); > >extern int XwcTextEscapement( > XFontSet , > const wchar_t* , > int >); > >extern int Xutf8TextEscapement( > XFontSet , > const char* , > int >); > >extern int XmbTextExtents( > XFontSet , > const char* , > int , > XRectangle* , > XRectangle* >); > >extern int XwcTextExtents( > XFontSet , > const wchar_t* , > int , > XRectangle* , > XRectangle* >); > >extern int Xutf8TextExtents( > XFontSet , > const char* , > int , > XRectangle* , > XRectangle* >); > >extern int XmbTextPerCharExtents( > XFontSet , > const char* , > int , > XRectangle* , > XRectangle* , > int , > int* , > XRectangle* , > XRectangle* >); > >extern int XwcTextPerCharExtents( > XFontSet , > const wchar_t* , > int , > XRectangle* , > XRectangle* , > int , > int* , > XRectangle* , > XRectangle* >); > >extern int Xutf8TextPerCharExtents( > XFontSet , > const char* , > int , > XRectangle* , > XRectangle* , > int , > int* , > XRectangle* , > XRectangle* >); > >extern void XmbDrawText( > Display* , > Drawable , > GC , > int , > int , > XmbTextItem* , > int >); > >extern void XwcDrawText( > Display* , > Drawable , > GC , > int , > int , > XwcTextItem* , > int >); > >extern void Xutf8DrawText( > Display* , > Drawable , > GC , > int , > int , > XmbTextItem* , > int >); > >extern void XmbDrawString( > Display* , > Drawable , > XFontSet , > GC , > int , > int , > const char* , > int >); > >extern void XwcDrawString( > Display* , > Drawable , > XFontSet , > GC , > int , > int , > const wchar_t* , > int >); > >extern void Xutf8DrawString( > Display* , > Drawable , > XFontSet , > GC , > int , > int , > const char* , > int >); > >extern void XmbDrawImageString( > Display* , > Drawable , > XFontSet , > GC , > int , > int , > const char* , > int >); > >extern void XwcDrawImageString( > Display* , > Drawable , > XFontSet , > GC , > int , > int , > const wchar_t* , > int >); > >extern void Xutf8DrawImageString( > Display* , > Drawable , > XFontSet , > GC , > int , > int , > const char* , > int >); > >extern XIM XOpenIM( > Display* , > struct _XrmHashBucketRec* , > char* , > char* >); > >extern int XCloseIM( > XIM >); > >extern char *XGetIMValues( > XIM , ... >) __attribute__ ((__sentinel__(0))); > >extern char *XSetIMValues( > XIM , ... >) __attribute__ ((__sentinel__(0))); > >extern Display *XDisplayOfIM( > XIM >); > >extern char *XLocaleOfIM( > XIM >); > >extern XIC XCreateIC( > XIM , ... >) __attribute__ ((__sentinel__(0))); > >extern void XDestroyIC( > XIC >); > >extern void XSetICFocus( > XIC >); > >extern void XUnsetICFocus( > XIC >); > >extern wchar_t *XwcResetIC( > XIC >); > >extern char *XmbResetIC( > XIC >); > >extern char *Xutf8ResetIC( > XIC >); > >extern char *XSetICValues( > XIC , ... >) __attribute__ ((__sentinel__(0))); > >extern char *XGetICValues( > XIC , ... >) __attribute__ ((__sentinel__(0))); > >extern XIM XIMOfIC( > XIC >); > >extern int XFilterEvent( > XEvent* , > Window >); > >extern int XmbLookupString( > XIC , > XKeyPressedEvent* , > char* , > int , > KeySym* , > int* >); > >extern int XwcLookupString( > XIC , > XKeyPressedEvent* , > wchar_t* , > int , > KeySym* , > int* >); > >extern int Xutf8LookupString( > XIC , > XKeyPressedEvent* , > char* , > int , > KeySym* , > int* >); > >extern XVaNestedList XVaCreateNestedList( > int , ... >) __attribute__ ((__sentinel__(0))); > > > >extern int XRegisterIMInstantiateCallback( > Display* , > struct _XrmHashBucketRec* , > char* , > char* , > XIDProc , > XPointer >); > >extern int XUnregisterIMInstantiateCallback( > Display* , > struct _XrmHashBucketRec* , > char* , > char* , > XIDProc , > XPointer >); > >typedef void (*XConnectionWatchProc)( > Display* , > XPointer , > int , > int , > XPointer* >); > > >extern int XInternalConnectionNumbers( > Display* , > int** , > int* >); > >extern void XProcessInternalConnection( > Display* , > int >); > >extern int XAddConnectionWatch( > Display* , > XConnectionWatchProc , > XPointer >); > >extern void XRemoveConnectionWatch( > Display* , > XConnectionWatchProc , > XPointer >); > >extern void XSetAuthorization( > char * , > int , > char * , > int >); > >extern int _Xmbtowc( > wchar_t * , > > > > > char * , > int > >); > >extern int _Xwctomb( > char * , > wchar_t >); > >extern int XGetEventData( > Display* , > XGenericEventCookie* >); > >extern void XFreeEventData( > Display* , > XGenericEventCookie* >); > > > > > >} ># 199 "./CImg.h" 2 ># 1 "/usr/include/X11/Xutil.h" 1 3 4 ># 54 "/usr/include/X11/Xutil.h" 3 4 ># 1 "/usr/include/X11/keysym.h" 1 3 4 ># 73 "/usr/include/X11/keysym.h" 3 4 ># 1 "/usr/include/X11/keysymdef.h" 1 3 4 ># 74 "/usr/include/X11/keysym.h" 2 3 4 ># 55 "/usr/include/X11/Xutil.h" 2 3 4 ># 81 "/usr/include/X11/Xutil.h" 3 4 >typedef struct { > long flags; > int x, y; > int width, height; > int min_width, min_height; > int max_width, max_height; > int width_inc, height_inc; > struct { > int x; > int y; > } min_aspect, max_aspect; > int base_width, base_height; > int win_gravity; >} XSizeHints; ># 119 "/usr/include/X11/Xutil.h" 3 4 >typedef struct { > long flags; > int input; > > int initial_state; > Pixmap icon_pixmap; > Window icon_window; > int icon_x, icon_y; > Pixmap icon_mask; > XID window_group; > >} XWMHints; ># 163 "/usr/include/X11/Xutil.h" 3 4 >typedef struct { > unsigned char *value; > Atom encoding; > int format; > unsigned long nitems; >} XTextProperty; > > > > > >typedef enum { > XStringStyle, > XCompoundTextStyle, > XTextStyle, > XStdICCTextStyle, > > XUTF8StringStyle >} XICCEncodingStyle; > >typedef struct { > int min_width, min_height; > int max_width, max_height; > int width_inc, height_inc; >} XIconSize; > >typedef struct { > char *res_name; > char *res_class; >} XClassHint; ># 231 "/usr/include/X11/Xutil.h" 3 4 >typedef struct _XComposeStatus { > XPointer compose_ptr; > int chars_matched; >} XComposeStatus; ># 273 "/usr/include/X11/Xutil.h" 3 4 >typedef struct _XRegion *Region; ># 287 "/usr/include/X11/Xutil.h" 3 4 >typedef struct { > Visual *visual; > VisualID visualid; > int screen; > int depth; > > int c_class; > > > > unsigned long red_mask; > unsigned long green_mask; > unsigned long blue_mask; > int colormap_size; > int bits_per_rgb; >} XVisualInfo; ># 320 "/usr/include/X11/Xutil.h" 3 4 >typedef struct { > Colormap colormap; > unsigned long red_max; > unsigned long red_mult; > unsigned long green_max; > unsigned long green_mult; > unsigned long blue_max; > unsigned long blue_mult; > unsigned long base_pixel; > VisualID visualid; > XID killid; >} XStandardColormap; ># 357 "/usr/include/X11/Xutil.h" 3 4 >typedef int XContext; > > > > >extern "C" { > > > >extern XClassHint *XAllocClassHint ( > void >); > >extern XIconSize *XAllocIconSize ( > void >); > >extern XSizeHints *XAllocSizeHints ( > void >); > >extern XStandardColormap *XAllocStandardColormap ( > void >); > >extern XWMHints *XAllocWMHints ( > void >); > >extern int XClipBox( > Region , > XRectangle* >); > >extern Region XCreateRegion( > void >); > >extern const char *XDefaultString (void); > >extern int XDeleteContext( > Display* , > XID , > XContext >); > >extern int XDestroyRegion( > Region >); > >extern int XEmptyRegion( > Region >); > >extern int XEqualRegion( > Region , > Region >); > >extern int XFindContext( > Display* , > XID , > XContext , > XPointer* >); > >extern int XGetClassHint( > Display* , > Window , > XClassHint* >); > >extern int XGetIconSizes( > Display* , > Window , > XIconSize** , > int* >); > >extern int XGetNormalHints( > Display* , > Window , > XSizeHints* >); > >extern int XGetRGBColormaps( > Display* , > Window , > XStandardColormap** , > int* , > Atom >); > >extern int XGetSizeHints( > Display* , > Window , > XSizeHints* , > Atom >); > >extern int XGetStandardColormap( > Display* , > Window , > XStandardColormap* , > Atom >); > >extern int XGetTextProperty( > Display* , > Window , > XTextProperty* , > Atom >); > >extern XVisualInfo *XGetVisualInfo( > Display* , > long , > XVisualInfo* , > int* >); > >extern int XGetWMClientMachine( > Display* , > Window , > XTextProperty* >); > >extern XWMHints *XGetWMHints( > Display* , > Window >); > >extern int XGetWMIconName( > Display* , > Window , > XTextProperty* >); > >extern int XGetWMName( > Display* , > Window , > XTextProperty* >); > >extern int XGetWMNormalHints( > Display* , > Window , > XSizeHints* , > long* >); > >extern int XGetWMSizeHints( > Display* , > Window , > XSizeHints* , > long* , > Atom >); > >extern int XGetZoomHints( > Display* , > Window , > XSizeHints* >); > >extern int XIntersectRegion( > Region , > Region , > Region >); > >extern void XConvertCase( > KeySym , > KeySym* , > KeySym* >); > >extern int XLookupString( > XKeyEvent* , > char* , > int , > KeySym* , > XComposeStatus* >); > >extern int XMatchVisualInfo( > Display* , > int , > int , > int , > XVisualInfo* >); > >extern int XOffsetRegion( > Region , > int , > int >); > >extern int XPointInRegion( > Region , > int , > int >); > >extern Region XPolygonRegion( > XPoint* , > int , > int >); > >extern int XRectInRegion( > Region , > int , > int , > unsigned int , > unsigned int >); > >extern int XSaveContext( > Display* , > XID , > XContext , > const char* >); > >extern int XSetClassHint( > Display* , > Window , > XClassHint* >); > >extern int XSetIconSizes( > Display* , > Window , > XIconSize* , > int >); > >extern int XSetNormalHints( > Display* , > Window , > XSizeHints* >); > >extern void XSetRGBColormaps( > Display* , > Window , > XStandardColormap* , > int , > Atom >); > >extern int XSetSizeHints( > Display* , > Window , > XSizeHints* , > Atom >); > >extern int XSetStandardProperties( > Display* , > Window , > const char* , > const char* , > Pixmap , > char** , > int , > XSizeHints* >); > >extern void XSetTextProperty( > Display* , > Window , > XTextProperty* , > Atom >); > >extern void XSetWMClientMachine( > Display* , > Window , > XTextProperty* >); > >extern int XSetWMHints( > Display* , > Window , > XWMHints* >); > >extern void XSetWMIconName( > Display* , > Window , > XTextProperty* >); > >extern void XSetWMName( > Display* , > Window , > XTextProperty* >); > >extern void XSetWMNormalHints( > Display* , > Window , > XSizeHints* >); > >extern void XSetWMProperties( > Display* , > Window , > XTextProperty* , > XTextProperty* , > char** , > int , > XSizeHints* , > XWMHints* , > XClassHint* >); > >extern void XmbSetWMProperties( > Display* , > Window , > const char* , > const char* , > char** , > int , > XSizeHints* , > XWMHints* , > XClassHint* >); > >extern void Xutf8SetWMProperties( > Display* , > Window , > const char* , > const char* , > char** , > int , > XSizeHints* , > XWMHints* , > XClassHint* >); > >extern void XSetWMSizeHints( > Display* , > Window , > XSizeHints* , > Atom >); > >extern int XSetRegion( > Display* , > GC , > Region >); > >extern void XSetStandardColormap( > Display* , > Window , > XStandardColormap* , > Atom >); > >extern int XSetZoomHints( > Display* , > Window , > XSizeHints* >); > >extern int XShrinkRegion( > Region , > int , > int >); > >extern int XStringListToTextProperty( > char** , > int , > XTextProperty* >); > >extern int XSubtractRegion( > Region , > Region , > Region >); > >extern int XmbTextListToTextProperty( > Display* display, > char** list, > int count, > XICCEncodingStyle style, > XTextProperty* text_prop_return >); > >extern int XwcTextListToTextProperty( > Display* display, > wchar_t** list, > int count, > XICCEncodingStyle style, > XTextProperty* text_prop_return >); > >extern int Xutf8TextListToTextProperty( > Display* display, > char** list, > int count, > XICCEncodingStyle style, > XTextProperty* text_prop_return >); > >extern void XwcFreeStringList( > wchar_t** list >); > >extern int XTextPropertyToStringList( > XTextProperty* , > char*** , > int* >); > >extern int XmbTextPropertyToTextList( > Display* display, > const XTextProperty* text_prop, > char*** list_return, > int* count_return >); > >extern int XwcTextPropertyToTextList( > Display* display, > const XTextProperty* text_prop, > wchar_t*** list_return, > int* count_return >); > >extern int Xutf8TextPropertyToTextList( > Display* display, > const XTextProperty* text_prop, > char*** list_return, > int* count_return >); > >extern int XUnionRectWithRegion( > XRectangle* , > Region , > Region >); > >extern int XUnionRegion( > Region , > Region , > Region >); > >extern int XWMGeometry( > Display* , > int , > const char* , > const char* , > unsigned int , > XSizeHints* , > int* , > int* , > int* , > int* , > int* >); > >extern int XXorRegion( > Region , > Region , > Region >); > > > > > >} ># 200 "./CImg.h" 2 ># 1 "/usr/include/X11/keysym.h" 1 3 4 ># 73 "/usr/include/X11/keysym.h" 3 4 ># 1 "/usr/include/X11/keysymdef.h" 1 3 4 ># 74 "/usr/include/X11/keysym.h" 2 3 4 ># 201 "./CImg.h" 2 ># 223 "./CImg.h" ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/omp.h" 1 3 4 ># 34 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/omp.h" 3 4 >typedef struct >{ > unsigned char _x[4] > __attribute__((__aligned__(4))); >} omp_lock_t; > >typedef struct >{ > unsigned char _x[8 + sizeof (void *)] > __attribute__((__aligned__(sizeof (void *)))); >} omp_nest_lock_t; > > >typedef enum omp_sched_t >{ > omp_sched_static = 1, > omp_sched_dynamic = 2, > omp_sched_guided = 3, > omp_sched_auto = 4 >} omp_sched_t; > > >extern "C" { > > > > > >extern void omp_set_num_threads (int) throw (); >extern int omp_get_num_threads (void) throw (); >extern int omp_get_max_threads (void) throw (); >extern int omp_get_thread_num (void) throw (); >extern int omp_get_num_procs (void) throw (); > >extern int omp_in_parallel (void) throw (); > >extern void omp_set_dynamic (int) throw (); >extern int omp_get_dynamic (void) throw (); > >extern void omp_set_nested (int) throw (); >extern int omp_get_nested (void) throw (); > >extern void omp_init_lock (omp_lock_t *) throw (); >extern void omp_destroy_lock (omp_lock_t *) throw (); >extern void omp_set_lock (omp_lock_t *) throw (); >extern void omp_unset_lock (omp_lock_t *) throw (); >extern int omp_test_lock (omp_lock_t *) throw (); > >extern void omp_init_nest_lock (omp_nest_lock_t *) throw (); >extern void omp_destroy_nest_lock (omp_nest_lock_t *) throw (); >extern void omp_set_nest_lock (omp_nest_lock_t *) throw (); >extern void omp_unset_nest_lock (omp_nest_lock_t *) throw (); >extern int omp_test_nest_lock (omp_nest_lock_t *) throw (); > >extern double omp_get_wtime (void) throw (); >extern double omp_get_wtick (void) throw (); > >void omp_set_schedule (omp_sched_t, int) throw (); >void omp_get_schedule (omp_sched_t *, int *) throw (); >int omp_get_thread_limit (void) throw (); >void omp_set_max_active_levels (int) throw (); >int omp_get_max_active_levels (void) throw (); >int omp_get_level (void) throw (); >int omp_get_ancestor_thread_num (int) throw (); >int omp_get_team_size (int) throw (); >int omp_get_active_level (void) throw (); > >int omp_in_final (void) throw (); > > >} ># 224 "./CImg.h" 2 ># 255 "./CImg.h" >extern "C" { ># 1 "/usr/include/png.h" 1 3 4 ># 445 "/usr/include/png.h" 3 4 ># 1 "/usr/include/pnglibconf.h" 1 3 4 ># 446 "/usr/include/png.h" 2 3 4 > > > > ># 1 "/usr/include/pngconf.h" 1 3 4 ># 52 "/usr/include/pngconf.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 1 3 4 ># 34 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/syslimits.h" 1 3 4 > > > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 1 3 4 ># 168 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 3 4 ># 1 "/usr/include/limits.h" 1 3 4 ># 143 "/usr/include/limits.h" 3 4 ># 1 "/usr/include/bits/posix1_lim.h" 1 3 4 ># 160 "/usr/include/bits/posix1_lim.h" 3 4 ># 1 "/usr/include/bits/local_lim.h" 1 3 4 ># 38 "/usr/include/bits/local_lim.h" 3 4 ># 1 "/usr/include/linux/limits.h" 1 3 4 ># 39 "/usr/include/bits/local_lim.h" 2 3 4 ># 161 "/usr/include/bits/posix1_lim.h" 2 3 4 ># 144 "/usr/include/limits.h" 2 3 4 > > > ># 1 "/usr/include/bits/posix2_lim.h" 1 3 4 ># 148 "/usr/include/limits.h" 2 3 4 > > > ># 1 "/usr/include/bits/xopen_lim.h" 1 3 4 ># 33 "/usr/include/bits/xopen_lim.h" 3 4 ># 1 "/usr/include/bits/stdio_lim.h" 1 3 4 ># 34 "/usr/include/bits/xopen_lim.h" 2 3 4 ># 152 "/usr/include/limits.h" 2 3 4 ># 169 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 2 3 4 ># 8 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/syslimits.h" 2 3 4 ># 35 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 2 3 4 ># 53 "/usr/include/pngconf.h" 2 3 4 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 54 "/usr/include/pngconf.h" 2 3 4 ># 72 "/usr/include/pngconf.h" 3 4 ># 1 "/usr/include/setjmp.h" 1 3 4 ># 27 "/usr/include/setjmp.h" 3 4 >extern "C" { > > ># 1 "/usr/include/bits/sigset.h" 1 3 4 ># 31 "/usr/include/setjmp.h" 2 3 4 > > > >struct __jmp_buf_tag > { > > > > > __jmp_buf __jmpbuf; > int __mask_was_saved; > __sigset_t __saved_mask; > }; > > > > >typedef struct __jmp_buf_tag jmp_buf[1]; > > > >extern int setjmp (jmp_buf __env) throw (); > > > > > > >extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) throw (); > > > > >extern int _setjmp (struct __jmp_buf_tag __env[1]) throw (); ># 77 "/usr/include/setjmp.h" 3 4 > > > > >extern void longjmp (struct __jmp_buf_tag __env[1], int __val) > throw () __attribute__ ((__noreturn__)); > > > > > > > >extern void _longjmp (struct __jmp_buf_tag __env[1], int __val) > throw () __attribute__ ((__noreturn__)); > > > > > > > >typedef struct __jmp_buf_tag sigjmp_buf[1]; ># 109 "/usr/include/setjmp.h" 3 4 >extern void siglongjmp (sigjmp_buf __env, int __val) > throw () __attribute__ ((__noreturn__)); ># 119 "/usr/include/setjmp.h" 3 4 >} ># 73 "/usr/include/pngconf.h" 2 3 4 ># 476 "/usr/include/pngconf.h" 3 4 > typedef unsigned char png_byte; > > > > > > > > typedef short png_int_16; > > > > > > > > typedef unsigned short png_uint_16; > > > > > > typedef int png_int_32; > > > > > > > > typedef unsigned int png_uint_32; ># 516 "/usr/include/pngconf.h" 3 4 >typedef size_t png_size_t; >typedef ptrdiff_t png_ptrdiff_t; ># 551 "/usr/include/pngconf.h" 3 4 > typedef png_size_t png_alloc_size_t; ># 568 "/usr/include/pngconf.h" 3 4 >typedef png_int_32 png_fixed_point; > > >typedef void * png_voidp; >typedef const void * png_const_voidp; >typedef png_byte * png_bytep; >typedef const png_byte * png_const_bytep; >typedef png_uint_32 * png_uint_32p; >typedef const png_uint_32 * png_const_uint_32p; >typedef png_int_32 * png_int_32p; >typedef const png_int_32 * png_const_int_32p; >typedef png_uint_16 * png_uint_16p; >typedef const png_uint_16 * png_const_uint_16p; >typedef png_int_16 * png_int_16p; >typedef const png_int_16 * png_const_int_16p; >typedef char * png_charp; >typedef const char * png_const_charp; >typedef png_fixed_point * png_fixed_point_p; >typedef const png_fixed_point * png_const_fixed_point_p; >typedef png_size_t * png_size_tp; >typedef const png_size_t * png_const_size_tp; > > >typedef FILE * png_FILE_p; > > > >typedef double * png_doublep; >typedef const double * png_const_doublep; > > > >typedef png_byte * * png_bytepp; >typedef png_uint_32 * * png_uint_32pp; >typedef png_int_32 * * png_int_32pp; >typedef png_uint_16 * * png_uint_16pp; >typedef png_int_16 * * png_int_16pp; >typedef const char * * png_const_charpp; >typedef char * * png_charpp; >typedef png_fixed_point * * png_fixed_point_pp; > >typedef double * * png_doublepp; > > > >typedef char * * * png_charppp; ># 451 "/usr/include/png.h" 2 3 4 ># 483 "/usr/include/png.h" 3 4 >extern "C" { ># 541 "/usr/include/png.h" 3 4 >typedef char* png_libpng_version_1_6_6; > > > > > > > >typedef struct png_struct_def png_struct; >typedef const png_struct * png_const_structp; >typedef png_struct * png_structp; >typedef png_struct * * png_structpp; ># 563 "/usr/include/png.h" 3 4 >typedef struct png_info_def png_info; >typedef png_info * png_infop; >typedef const png_info * png_const_infop; >typedef png_info * * png_infopp; ># 579 "/usr/include/png.h" 3 4 >typedef png_struct * __restrict png_structrp; >typedef const png_struct * __restrict png_const_structrp; >typedef png_info * __restrict png_inforp; >typedef const png_info * __restrict png_const_inforp; > > > > > >typedef struct png_color_struct >{ > png_byte red; > png_byte green; > png_byte blue; >} png_color; >typedef png_color * png_colorp; >typedef const png_color * png_const_colorp; >typedef png_color * * png_colorpp; > >typedef struct png_color_16_struct >{ > png_byte index; > png_uint_16 red; > png_uint_16 green; > png_uint_16 blue; > png_uint_16 gray; >} png_color_16; >typedef png_color_16 * png_color_16p; >typedef const png_color_16 * png_const_color_16p; >typedef png_color_16 * * png_color_16pp; > >typedef struct png_color_8_struct >{ > png_byte red; > png_byte green; > png_byte blue; > png_byte gray; > png_byte alpha; >} png_color_8; >typedef png_color_8 * png_color_8p; >typedef const png_color_8 * png_const_color_8p; >typedef png_color_8 * * png_color_8pp; > > > > > >typedef struct png_sPLT_entry_struct >{ > png_uint_16 red; > png_uint_16 green; > png_uint_16 blue; > png_uint_16 alpha; > png_uint_16 frequency; >} png_sPLT_entry; >typedef png_sPLT_entry * png_sPLT_entryp; >typedef const png_sPLT_entry * png_const_sPLT_entryp; >typedef png_sPLT_entry * * png_sPLT_entrypp; > > > > > > >typedef struct png_sPLT_struct >{ > png_charp name; > png_byte depth; > png_sPLT_entryp entries; > png_int_32 nentries; >} png_sPLT_t; >typedef png_sPLT_t * png_sPLT_tp; >typedef const png_sPLT_t * png_const_sPLT_tp; >typedef png_sPLT_t * * png_sPLT_tpp; ># 672 "/usr/include/png.h" 3 4 >typedef struct png_text_struct >{ > int compression; > > > > > png_charp key; > png_charp text; > > png_size_t text_length; > png_size_t itxt_length; > png_charp lang; > > png_charp lang_key; > >} png_text; >typedef png_text * png_textp; >typedef const png_text * png_const_textp; >typedef png_text * * png_textpp; ># 710 "/usr/include/png.h" 3 4 >typedef struct png_time_struct >{ > png_uint_16 year; > png_byte month; > png_byte day; > png_byte hour; > png_byte minute; > png_byte second; >} png_time; >typedef png_time * png_timep; >typedef const png_time * png_const_timep; >typedef png_time * * png_timepp; ># 731 "/usr/include/png.h" 3 4 >typedef struct png_unknown_chunk_t >{ > png_byte name[5]; > png_byte *data; > png_size_t size; > > > > > > > > png_byte location; >} >png_unknown_chunk; > >typedef png_unknown_chunk * png_unknown_chunkp; >typedef const png_unknown_chunk * png_const_unknown_chunkp; >typedef png_unknown_chunk * * png_unknown_chunkpp; ># 862 "/usr/include/png.h" 3 4 >typedef struct png_row_info_struct >{ > png_uint_32 width; > png_size_t rowbytes; > png_byte color_type; > png_byte bit_depth; > png_byte channels; > png_byte pixel_depth; >} png_row_info; > >typedef png_row_info * png_row_infop; >typedef png_row_info * * png_row_infopp; ># 883 "/usr/include/png.h" 3 4 >typedef void ( *png_error_ptr) (png_structp, png_const_charp); >typedef void ( *png_rw_ptr) (png_structp, png_bytep, png_size_t); >typedef void ( *png_flush_ptr) (png_structp); >typedef void ( *png_read_status_ptr) (png_structp, png_uint_32, int) > ; >typedef void ( *png_write_status_ptr) (png_structp, png_uint_32, int) > ; > > >typedef void ( *png_progressive_info_ptr) (png_structp, png_infop); >typedef void ( *png_progressive_end_ptr) (png_structp, png_infop); ># 905 "/usr/include/png.h" 3 4 >typedef void ( *png_progressive_row_ptr) (png_structp, png_bytep, png_uint_32, int) > ; > > > > >typedef void ( *png_user_transform_ptr) (png_structp, png_row_infop, png_bytep) > ; > > > >typedef int ( *png_user_chunk_ptr) (png_structp, png_unknown_chunkp) > ; ># 936 "/usr/include/png.h" 3 4 >typedef void ( *png_longjmp_ptr) (jmp_buf, int); ># 973 "/usr/include/png.h" 3 4 >typedef png_voidp ( *png_malloc_ptr) (png_structp, png_alloc_size_t) > ; >typedef void ( *png_free_ptr) (png_structp, png_voidp); ># 1007 "/usr/include/png.h" 3 4 >extern png_uint_32 ( png_access_version_number) (void); > > > > >extern void ( png_set_sig_bytes) (png_structrp png_ptr, int num_bytes); > > > > > > >extern int ( png_sig_cmp) (png_const_bytep sig, png_size_t start, png_size_t num_to_check) > ; > > > > > > > >extern __attribute__((__malloc__)) png_structp ( png_create_read_struct) (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn) > > > ; > > >extern __attribute__((__malloc__)) png_structp ( png_create_write_struct) (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn) > > > ; > >extern png_size_t ( png_get_compression_buffer_size) (png_const_structrp png_ptr) > ; > >extern void ( png_set_compression_buffer_size) (png_structrp png_ptr, png_size_t size) > ; ># 1056 "/usr/include/png.h" 3 4 >extern jmp_buf* ( png_set_longjmp_fn) (png_structrp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size) > ; ># 1069 "/usr/include/png.h" 3 4 >extern __attribute__((__noreturn__)) void ( png_longjmp) (png_const_structrp png_ptr, int val) > ; > > > >extern __attribute__((__deprecated__)) int ( png_reset_zstream) (png_structrp png_ptr); > > > > >extern __attribute__((__malloc__)) png_structp ( png_create_read_struct_2) (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn) > > > > ; >extern __attribute__((__malloc__)) png_structp ( png_create_write_struct_2) (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn) > > > > ; > > > >extern void ( png_write_sig) (png_structrp png_ptr); > > >extern void ( png_write_chunk) (png_structrp png_ptr, png_const_bytep chunk_name, png_const_bytep data, png_size_t length) > ; > > >extern void ( png_write_chunk_start) (png_structrp png_ptr, png_const_bytep chunk_name, png_uint_32 length) > ; > > >extern void ( png_write_chunk_data) (png_structrp png_ptr, png_const_bytep data, png_size_t length) > ; > > >extern void ( png_write_chunk_end) (png_structrp png_ptr); > > >extern __attribute__((__malloc__)) png_infop ( png_create_info_struct) (png_const_structrp png_ptr) > ; > > > > > >extern __attribute__((__deprecated__)) void ( png_info_init_3) (png_infopp info_ptr, png_size_t png_info_struct_size) > ; > > >extern void ( png_write_info_before_PLTE) (png_structrp png_ptr, png_const_inforp info_ptr) > ; >extern void ( png_write_info) (png_structrp png_ptr, png_const_inforp info_ptr) > ; > > > >extern void ( png_read_info) (png_structrp png_ptr, png_inforp info_ptr) > ; ># 1139 "/usr/include/png.h" 3 4 >extern __attribute__((__deprecated__)) png_const_charp ( png_convert_to_rfc1123) (png_structrp png_ptr, png_const_timep ptime) > ; > >extern int ( png_convert_to_rfc1123_buffer) (char out[29], png_const_timep ptime) > ; > > > > >extern void ( png_convert_from_struct_tm) (png_timep ptime, const struct tm * ttime) > ; > > >extern void ( png_convert_from_time_t) (png_timep ptime, time_t ttime); > > > > >extern void ( png_set_expand) (png_structrp png_ptr); >extern void ( png_set_expand_gray_1_2_4_to_8) (png_structrp png_ptr); >extern void ( png_set_palette_to_rgb) (png_structrp png_ptr); >extern void ( png_set_tRNS_to_alpha) (png_structrp png_ptr); > > > > > > >extern void ( png_set_expand_16) (png_structrp png_ptr); > > > > >extern void ( png_set_bgr) (png_structrp png_ptr); > > > > >extern void ( png_set_gray_to_rgb) (png_structrp png_ptr); ># 1187 "/usr/include/png.h" 3 4 >extern void ( png_set_rgb_to_gray) (png_structrp png_ptr, int error_action, double red, double green); > >extern void ( png_set_rgb_to_gray_fixed) (png_structrp png_ptr, int error_action, png_fixed_point red, png_fixed_point green); > > >extern png_byte ( png_get_rgb_to_gray_status) (png_const_structrp png_ptr) > ; > > > >extern void ( png_build_grayscale_palette) (int bit_depth, png_colorp palette) > ; ># 1257 "/usr/include/png.h" 3 4 >extern void ( png_set_alpha_mode) (png_structrp png_ptr, int mode, double output_gamma); > >extern void ( png_set_alpha_mode_fixed) (png_structrp png_ptr, int mode, png_fixed_point output_gamma); ># 1411 "/usr/include/png.h" 3 4 >extern void ( png_set_strip_alpha) (png_structrp png_ptr); > > > > >extern void ( png_set_swap_alpha) (png_structrp png_ptr); > > > > >extern void ( png_set_invert_alpha) (png_structrp png_ptr); > > > > >extern void ( png_set_filler) (png_structrp png_ptr, png_uint_32 filler, int flags) > ; > > > > >extern void ( png_set_add_alpha) (png_structrp png_ptr, png_uint_32 filler, int flags) > ; > > > > >extern void ( png_set_swap) (png_structrp png_ptr); > > > > >extern void ( png_set_packing) (png_structrp png_ptr); > > > > > >extern void ( png_set_packswap) (png_structrp png_ptr); > > > > >extern void ( png_set_shift) (png_structrp png_ptr, png_const_color_8p true_bits) > ; ># 1466 "/usr/include/png.h" 3 4 >extern int ( png_set_interlace_handling) (png_structrp png_ptr); > > > > >extern void ( png_set_invert_mono) (png_structrp png_ptr); ># 1480 "/usr/include/png.h" 3 4 >extern void ( png_set_background) (png_structrp png_ptr, png_const_color_16p background_color, int background_gamma_code, int need_expand, double background_gamma); > > >extern void ( png_set_background_fixed) (png_structrp png_ptr, png_const_color_16p background_color, int background_gamma_code, int need_expand, png_fixed_point background_gamma); ># 1496 "/usr/include/png.h" 3 4 >extern void ( png_set_scale_16) (png_structrp png_ptr); > > > > > >extern void ( png_set_strip_16) (png_structrp png_ptr); > > > > > > >extern void ( png_set_quantize) (png_structrp png_ptr, png_colorp palette, int num_palette, int maximum_colors, png_const_uint_16p histogram, int full_quantize) > > ; ># 1531 "/usr/include/png.h" 3 4 >extern void ( png_set_gamma) (png_structrp png_ptr, double screen_gamma, double override_file_gamma); > >extern void ( png_set_gamma_fixed) (png_structrp png_ptr, png_fixed_point screen_gamma, png_fixed_point override_file_gamma); > > > > > >extern void ( png_set_flush) (png_structrp png_ptr, int nrows); > >extern void ( png_write_flush) (png_structrp png_ptr); > > > >extern void ( png_start_read_image) (png_structrp png_ptr); > > >extern void ( png_read_update_info) (png_structrp png_ptr, png_inforp info_ptr) > ; > > > >extern void ( png_read_rows) (png_structrp png_ptr, png_bytepp row, png_bytepp display_row, png_uint_32 num_rows) > ; > > > > >extern void ( png_read_row) (png_structrp png_ptr, png_bytep row, png_bytep display_row) > ; > > > > >extern void ( png_read_image) (png_structrp png_ptr, png_bytepp image); > > > >extern void ( png_write_row) (png_structrp png_ptr, png_const_bytep row) > ; > > > > > > >extern void ( png_write_rows) (png_structrp png_ptr, png_bytepp row, png_uint_32 num_rows) > ; > > >extern void ( png_write_image) (png_structrp png_ptr, png_bytepp image); > > >extern void ( png_write_end) (png_structrp png_ptr, png_inforp info_ptr) > ; > > > >extern void ( png_read_end) (png_structrp png_ptr, png_inforp info_ptr); > > > >extern void ( png_destroy_info_struct) (png_const_structrp png_ptr, png_infopp info_ptr_ptr) > ; > > >extern void ( png_destroy_read_struct) (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr) > ; > > >extern void ( png_destroy_write_struct) (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr) > ; > > >extern void ( png_set_crc_action) (png_structrp png_ptr, int crit_action, int ancil_action) > ; ># 1635 "/usr/include/png.h" 3 4 >extern void ( png_set_filter) (png_structrp png_ptr, int method, int filters) > ; ># 1691 "/usr/include/png.h" 3 4 >extern void ( png_set_filter_heuristics) (png_structrp png_ptr, int heuristic_method, int num_weights, png_const_doublep filter_weights, png_const_doublep filter_costs); > > >extern void ( png_set_filter_heuristics_fixed) (png_structrp png_ptr, int heuristic_method, int num_weights, png_const_fixed_point_p filter_weights, png_const_fixed_point_p filter_costs); ># 1716 "/usr/include/png.h" 3 4 >extern void ( png_set_compression_level) (png_structrp png_ptr, int level) > ; > >extern void ( png_set_compression_mem_level) (png_structrp png_ptr, int mem_level) > ; > >extern void ( png_set_compression_strategy) (png_structrp png_ptr, int strategy) > ; > > > > >extern void ( png_set_compression_window_bits) (png_structrp png_ptr, int window_bits) > ; > >extern void ( png_set_compression_method) (png_structrp png_ptr, int method) > ; > > > > >extern void ( png_set_text_compression_level) (png_structrp png_ptr, int level) > ; > >extern void ( png_set_text_compression_mem_level) (png_structrp png_ptr, int mem_level) > ; > >extern void ( png_set_text_compression_strategy) (png_structrp png_ptr, int strategy) > ; > > > > >extern void ( png_set_text_compression_window_bits) (png_structrp png_ptr, int window_bits) > ; > >extern void ( png_set_text_compression_method) (png_structrp png_ptr, int method) > ; ># 1767 "/usr/include/png.h" 3 4 >extern void ( png_init_io) (png_structrp png_ptr, png_FILE_p fp); ># 1778 "/usr/include/png.h" 3 4 >extern void ( png_set_error_fn) (png_structrp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn) > ; > > >extern png_voidp ( png_get_error_ptr) (png_const_structrp png_ptr); ># 1794 "/usr/include/png.h" 3 4 >extern void ( png_set_write_fn) (png_structrp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) > ; > > >extern void ( png_set_read_fn) (png_structrp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn) > ; > > >extern png_voidp ( png_get_io_ptr) (png_const_structrp png_ptr); > >extern void ( png_set_read_status_fn) (png_structrp png_ptr, png_read_status_ptr read_row_fn) > ; > >extern void ( png_set_write_status_fn) (png_structrp png_ptr, png_write_status_ptr write_row_fn) > ; > > > >extern void ( png_set_mem_fn) (png_structrp png_ptr, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn) > ; > >extern png_voidp ( png_get_mem_ptr) (png_const_structrp png_ptr); > > > >extern void ( png_set_read_user_transform_fn) (png_structrp png_ptr, png_user_transform_ptr read_user_transform_fn) > ; > > > >extern void ( png_set_write_user_transform_fn) (png_structrp png_ptr, png_user_transform_ptr write_user_transform_fn) > ; > > > >extern void ( png_set_user_transform_info) (png_structrp png_ptr, png_voidp user_transform_ptr, int user_transform_depth, int user_transform_channels) > > ; > >extern png_voidp ( png_get_user_transform_ptr) (png_const_structrp png_ptr) > ; ># 1849 "/usr/include/png.h" 3 4 >extern png_uint_32 ( png_get_current_row_number) (png_const_structrp); >extern png_byte ( png_get_current_pass_number) (png_const_structrp); ># 1873 "/usr/include/png.h" 3 4 >extern void ( png_set_read_user_chunk_fn) (png_structrp png_ptr, png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn) > ; > > > >extern png_voidp ( png_get_user_chunk_ptr) (png_const_structrp png_ptr); > > > > > > >extern void ( png_set_progressive_read_fn) (png_structrp png_ptr, png_voidp progressive_ptr, png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn) > > ; > > >extern png_voidp ( png_get_progressive_ptr) (png_const_structrp png_ptr) > ; > > >extern void ( png_process_data) (png_structrp png_ptr, png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size) > ; ># 1904 "/usr/include/png.h" 3 4 >extern png_size_t ( png_process_data_pause) (png_structrp, int save); > > > > > > > >extern png_uint_32 ( png_process_data_skip) (png_structrp); > > > > > > > >extern void ( png_progressive_combine_row) (png_const_structrp png_ptr, png_bytep old_row, png_const_bytep new_row) > ; > > > >extern __attribute__((__malloc__)) png_voidp ( png_malloc) (png_const_structrp png_ptr, png_alloc_size_t size) > ; > >extern __attribute__((__malloc__)) png_voidp ( png_calloc) (png_const_structrp png_ptr, png_alloc_size_t size) > ; > > >extern __attribute__((__malloc__)) png_voidp ( png_malloc_warn) (png_const_structrp png_ptr, png_alloc_size_t size) > ; > > >extern void ( png_free) (png_const_structrp png_ptr, png_voidp ptr); > > >extern void ( png_free_data) (png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 free_me, int num) > ; ># 1949 "/usr/include/png.h" 3 4 >extern __attribute__((__deprecated__)) void ( png_data_freer) (png_const_structrp png_ptr, png_inforp info_ptr, int freer, png_uint_32 mask) > ; ># 1974 "/usr/include/png.h" 3 4 >extern __attribute__((__malloc__)) __attribute__((__deprecated__)) png_voidp ( png_malloc_default) (png_const_structrp png_ptr, png_alloc_size_t size) > ; >extern __attribute__((__deprecated__)) void ( png_free_default) (png_const_structrp png_ptr, png_voidp ptr) > ; > > > > >extern __attribute__((__noreturn__)) void ( png_error) (png_const_structrp png_ptr, png_const_charp error_message) > ; > > >extern __attribute__((__noreturn__)) void ( png_chunk_error) (png_const_structrp png_ptr, png_const_charp error_message) > ; ># 1996 "/usr/include/png.h" 3 4 >extern void ( png_warning) (png_const_structrp png_ptr, png_const_charp warning_message) > ; > > >extern void ( png_chunk_warning) (png_const_structrp png_ptr, png_const_charp warning_message) > ; > > > > > >extern void ( png_benign_error) (png_const_structrp png_ptr, png_const_charp warning_message) > ; > > > >extern void ( png_chunk_benign_error) (png_const_structrp png_ptr, png_const_charp warning_message) > ; > > >extern void ( png_set_benign_errors) (png_structrp png_ptr, int allowed) > ; ># 2041 "/usr/include/png.h" 3 4 >extern png_uint_32 ( png_get_valid) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_uint_32 flag) > ; > > >extern png_size_t ( png_get_rowbytes) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > > > > >extern png_bytepp ( png_get_rows) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > > > >extern void ( png_set_rows) (png_const_structrp png_ptr, png_inforp info_ptr, png_bytepp row_pointers) > ; > > > >extern png_byte ( png_get_channels) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > > >extern png_uint_32 ( png_get_image_width) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_uint_32 ( png_get_image_height) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_byte ( png_get_bit_depth) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_byte ( png_get_color_type) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_byte ( png_get_filter_type) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_byte ( png_get_interlace_type) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_byte ( png_get_compression_type) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern png_uint_32 ( png_get_pixels_per_meter) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; >extern png_uint_32 ( png_get_x_pixels_per_meter) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; >extern png_uint_32 ( png_get_y_pixels_per_meter) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > >extern float ( png_get_pixel_aspect_ratio) (png_const_structrp png_ptr, png_const_inforp info_ptr); > >extern png_fixed_point ( png_get_pixel_aspect_ratio_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr); > > > >extern png_int_32 ( png_get_x_offset_pixels) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; >extern png_int_32 ( png_get_y_offset_pixels) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; >extern png_int_32 ( png_get_x_offset_microns) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; >extern png_int_32 ( png_get_y_offset_microns) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > > > > >extern png_const_bytep ( png_get_signature) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > > > >extern png_uint_32 ( png_get_bKGD) (png_const_structrp png_ptr, png_inforp info_ptr, png_color_16p *background) > ; > > > >extern void ( png_set_bKGD) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_color_16p background) > ; > > > >extern png_uint_32 ( png_get_cHRM) (png_const_structrp png_ptr, png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x, double *red_y, double *green_x, double *green_y, double *blue_x, double *blue_y); > > > >extern png_uint_32 ( png_get_cHRM_XYZ) (png_const_structrp png_ptr, png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z, double *green_X, double *green_Y, double *green_Z, double *blue_X, double *blue_Y, double *blue_Z); > > > >extern png_uint_32 ( png_get_cHRM_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_fixed_point *int_white_x, png_fixed_point *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point *int_blue_x, png_fixed_point *int_blue_y); > > > > > >extern png_uint_32 ( png_get_cHRM_XYZ_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_fixed_point *int_red_X, png_fixed_point *int_red_Y, png_fixed_point *int_red_Z, png_fixed_point *int_green_X, png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, png_fixed_point *int_blue_Z); ># 2162 "/usr/include/png.h" 3 4 >extern void ( png_set_cHRM) (png_const_structrp png_ptr, png_inforp info_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, double green_y, double blue_x, double blue_y); > > > >extern void ( png_set_cHRM_XYZ) (png_const_structrp png_ptr, png_inforp info_ptr, double red_X, double red_Y, double red_Z, double green_X, double green_Y, double green_Z, double blue_X, double blue_Y, double blue_Z); > > > >extern void ( png_set_cHRM_fixed) (png_const_structrp png_ptr, png_inforp info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, png_fixed_point int_blue_y); > > > > > >extern void ( png_set_cHRM_XYZ_fixed) (png_const_structrp png_ptr, png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, png_fixed_point int_red_Z, png_fixed_point int_green_X, png_fixed_point int_green_Y, png_fixed_point int_green_Z, png_fixed_point int_blue_X, png_fixed_point int_blue_Y, png_fixed_point int_blue_Z); ># 2185 "/usr/include/png.h" 3 4 >extern png_uint_32 ( png_get_gAMA) (png_const_structrp png_ptr, png_const_inforp info_ptr, double *file_gamma); > >extern png_uint_32 ( png_get_gAMA_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_fixed_point *int_file_gamma); > > > > > >extern void ( png_set_gAMA) (png_const_structrp png_ptr, png_inforp info_ptr, double file_gamma); > >extern void ( png_set_gAMA_fixed) (png_const_structrp png_ptr, png_inforp info_ptr, png_fixed_point int_file_gamma); > > > > >extern png_uint_32 ( png_get_hIST) (png_const_structrp png_ptr, png_inforp info_ptr, png_uint_16p *hist) > ; > > > >extern void ( png_set_hIST) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_uint_16p hist) > ; > > >extern png_uint_32 ( png_get_IHDR) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type, int *interlace_method, int *compression_method, int *filter_method) > > > ; > >extern void ( png_set_IHDR) (png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_method, int compression_method, int filter_method) > > > ; > > >extern png_uint_32 ( png_get_oFFs) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) > > ; > > > >extern void ( png_set_oFFs) (png_const_structrp png_ptr, png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y, int unit_type) > > ; > > > >extern png_uint_32 ( png_get_pCAL) (png_const_structrp png_ptr, png_inforp info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, png_charp *units, png_charpp *params) > > > ; > > > >extern void ( png_set_pCAL) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, png_const_charp units, png_charpp params) > > ; > > > >extern png_uint_32 ( png_get_pHYs) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) > > ; > > > >extern void ( png_set_pHYs) (png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type) > ; > > >extern png_uint_32 ( png_get_PLTE) (png_const_structrp png_ptr, png_inforp info_ptr, png_colorp *palette, int *num_palette) > ; > >extern void ( png_set_PLTE) (png_structrp png_ptr, png_inforp info_ptr, png_const_colorp palette, int num_palette) > ; > > >extern png_uint_32 ( png_get_sBIT) (png_const_structrp png_ptr, png_inforp info_ptr, png_color_8p *sig_bit) > ; > > > >extern void ( png_set_sBIT) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_color_8p sig_bit) > ; > > > >extern png_uint_32 ( png_get_sRGB) (png_const_structrp png_ptr, png_const_inforp info_ptr, int *file_srgb_intent) > ; > > > >extern void ( png_set_sRGB) (png_const_structrp png_ptr, png_inforp info_ptr, int srgb_intent) > ; >extern void ( png_set_sRGB_gAMA_and_cHRM) (png_const_structrp png_ptr, png_inforp info_ptr, int srgb_intent) > ; > > > >extern png_uint_32 ( png_get_iCCP) (png_const_structrp png_ptr, png_inforp info_ptr, png_charpp name, int *compression_type, png_bytepp profile, png_uint_32 *proflen) > > ; > > > >extern void ( png_set_iCCP) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_charp name, int compression_type, png_const_bytep profile, png_uint_32 proflen) > > ; > > > >extern int ( png_get_sPLT) (png_const_structrp png_ptr, png_inforp info_ptr, png_sPLT_tpp entries) > ; > > > >extern void ( png_set_sPLT) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_sPLT_tp entries, int nentries) > ; > > > > >extern int ( png_get_text) (png_const_structrp png_ptr, png_inforp info_ptr, png_textp *text_ptr, int *num_text) > ; ># 2319 "/usr/include/png.h" 3 4 >extern void ( png_set_text) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_textp text_ptr, int num_text) > ; > > > >extern png_uint_32 ( png_get_tIME) (png_const_structrp png_ptr, png_inforp info_ptr, png_timep *mod_time) > ; > > > >extern void ( png_set_tIME) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_timep mod_time) > ; > > > >extern png_uint_32 ( png_get_tRNS) (png_const_structrp png_ptr, png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color) > > ; > > > >extern void ( png_set_tRNS) (png_structrp png_ptr, png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans, png_const_color_16p trans_color) > > ; > > > >extern png_uint_32 ( png_get_sCAL) (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, double *width, double *height); ># 2355 "/usr/include/png.h" 3 4 >extern png_uint_32 ( png_get_sCAL_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, png_fixed_point *width, png_fixed_point *height); > > > >extern png_uint_32 ( png_get_sCAL_s) (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, png_charpp swidth, png_charpp sheight) > > ; > >extern void ( png_set_sCAL) (png_const_structrp png_ptr, png_inforp info_ptr, int unit, double width, double height); > >extern void ( png_set_sCAL_fixed) (png_const_structrp png_ptr, png_inforp info_ptr, int unit, png_fixed_point width, png_fixed_point height); > > >extern void ( png_set_sCAL_s) (png_const_structrp png_ptr, png_inforp info_ptr, int unit, png_const_charp swidth, png_const_charp sheight) > > ; ># 2472 "/usr/include/png.h" 3 4 >extern void ( png_set_keep_unknown_chunks) (png_structrp png_ptr, int keep, png_const_bytep chunk_list, int num_chunks) > ; > > > > > >extern int ( png_handle_as_unknown) (png_const_structrp png_ptr, png_const_bytep chunk_name) > ; > > > >extern void ( png_set_unknown_chunks) (png_const_structrp png_ptr, png_inforp info_ptr, png_const_unknown_chunkp unknowns, int num_unknowns) > > ; ># 2496 "/usr/include/png.h" 3 4 >extern void ( png_set_unknown_chunk_location) (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location) > ; > >extern int ( png_get_unknown_chunks) (png_const_structrp png_ptr, png_inforp info_ptr, png_unknown_chunkpp entries) > ; > > > > > > >extern void ( png_set_invalid) (png_const_structrp png_ptr, png_inforp info_ptr, int mask) > ; > > > >extern void ( png_read_png) (png_structrp png_ptr, png_inforp info_ptr, int transforms, png_voidp params) > ; >extern void ( png_write_png) (png_structrp png_ptr, png_inforp info_ptr, int transforms, png_voidp params) > ; > > >extern png_const_charp ( png_get_copyright) (png_const_structrp png_ptr) > ; >extern png_const_charp ( png_get_header_ver) (png_const_structrp png_ptr) > ; >extern png_const_charp ( png_get_header_version) (png_const_structrp png_ptr) > ; >extern png_const_charp ( png_get_libpng_ver) (png_const_structrp png_ptr) > ; > > >extern png_uint_32 ( png_permit_mng_features) (png_structrp png_ptr, png_uint_32 mng_features_permitted) > ; ># 2549 "/usr/include/png.h" 3 4 >extern void ( png_set_user_limits) (png_structrp png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max) > ; >extern png_uint_32 ( png_get_user_width_max) (png_const_structrp png_ptr) > ; >extern png_uint_32 ( png_get_user_height_max) (png_const_structrp png_ptr) > ; > >extern void ( png_set_chunk_cache_max) (png_structrp png_ptr, png_uint_32 user_chunk_cache_max) > ; >extern png_uint_32 ( png_get_chunk_cache_max) (png_const_structrp png_ptr) > ; > >extern void ( png_set_chunk_malloc_max) (png_structrp png_ptr, png_alloc_size_t user_chunk_cache_max) > ; >extern png_alloc_size_t ( png_get_chunk_malloc_max) (png_const_structrp png_ptr) > ; > > > >extern png_uint_32 ( png_get_pixels_per_inch) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > >extern png_uint_32 ( png_get_x_pixels_per_inch) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > >extern png_uint_32 ( png_get_y_pixels_per_inch) (png_const_structrp png_ptr, png_const_inforp info_ptr) > ; > >extern float ( png_get_x_offset_inches) (png_const_structrp png_ptr, png_const_inforp info_ptr); > > >extern png_fixed_point ( png_get_x_offset_inches_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr); > > > >extern float ( png_get_y_offset_inches) (png_const_structrp png_ptr, png_const_inforp info_ptr); > > >extern png_fixed_point ( png_get_y_offset_inches_fixed) (png_const_structrp png_ptr, png_const_inforp info_ptr); > > > > >extern png_uint_32 ( png_get_pHYs_dpi) (png_const_structrp png_ptr, png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) > > ; > > > > > >extern png_uint_32 ( png_get_io_state) (png_const_structrp png_ptr); > > > > > >extern png_uint_32 ( png_get_io_chunk_type) (png_const_structrp png_ptr) > ; ># 2726 "/usr/include/png.h" 3 4 >extern png_uint_32 ( png_get_uint_32) (png_const_bytep buf); >extern png_uint_16 ( png_get_uint_16) (png_const_bytep buf); >extern png_int_32 ( png_get_int_32) (png_const_bytep buf); > > >extern png_uint_32 ( png_get_uint_31) (png_const_structrp png_ptr, png_const_bytep buf) > ; > > > > >extern void ( png_save_uint_32) (png_bytep buf, png_uint_32 i); > > >extern void ( png_save_int_32) (png_bytep buf, png_int_32 i); > > > > > > > >extern void ( png_save_uint_16) (png_bytep buf, unsigned int i); ># 2840 "/usr/include/png.h" 3 4 >typedef struct png_control *png_controlp; >typedef struct >{ > png_controlp opaque; > png_uint_32 version; > png_uint_32 width; > png_uint_32 height; > png_uint_32 format; > png_uint_32 flags; > png_uint_32 colormap_entries; ># 2874 "/usr/include/png.h" 3 4 > png_uint_32 warning_or_error; > > char message[64]; >} png_image, *png_imagep; ># 3140 "/usr/include/png.h" 3 4 >extern int ( png_image_begin_read_from_file) (png_imagep image, const char *file_name) > ; > > > > >extern int ( png_image_begin_read_from_stdio) (png_imagep image, FILE* file) > ; > > > >extern int ( png_image_begin_read_from_memory) (png_imagep image, png_const_voidp memory, png_size_t size) > ; > > >extern int ( png_image_finish_read) (png_imagep image, png_const_colorp background, void *buffer, png_int_32 row_stride, void *colormap) > > ; ># 3190 "/usr/include/png.h" 3 4 >extern void ( png_image_free) (png_imagep image); ># 3214 "/usr/include/png.h" 3 4 >extern int ( png_image_write_to_file) (png_imagep image, const char *file, int convert_to_8bit, const void *buffer, png_int_32 row_stride, const void *colormap) > > ; > > >extern int ( png_image_write_to_stdio) (png_imagep image, FILE *file, int convert_to_8_bit, const void *buffer, png_int_32 row_stride, const void *colormap) > > ; ># 3247 "/usr/include/png.h" 3 4 >extern void ( png_set_check_for_invalid_index) (png_structrp png_ptr, int allowed) > ; > >extern int ( png_get_palette_max) (png_const_structp png_ptr, png_const_infop info_ptr) > ; ># 3289 "/usr/include/png.h" 3 4 >extern int ( png_set_option) (png_structrp png_ptr, int option, int onoff) > ; ># 3310 "/usr/include/png.h" 3 4 >} ># 257 "./CImg.h" 2 >} ># 268 "./CImg.h" >extern "C" { ># 1 "/usr/include/jpeglib.h" 1 3 4 ># 27 "/usr/include/jpeglib.h" 3 4 ># 1 "/usr/include/jconfig.h" 1 3 4 ># 28 "/usr/include/jpeglib.h" 2 3 4 > ># 1 "/usr/include/jmorecfg.h" 1 3 4 ># 61 "/usr/include/jmorecfg.h" 3 4 >typedef unsigned char JSAMPLE; ># 101 "/usr/include/jmorecfg.h" 3 4 >typedef short JCOEF; ># 112 "/usr/include/jmorecfg.h" 3 4 >typedef unsigned char JOCTET; ># 137 "/usr/include/jmorecfg.h" 3 4 >typedef unsigned char UINT8; ># 149 "/usr/include/jmorecfg.h" 3 4 >typedef unsigned short UINT16; > > > > > > > >typedef short INT16; > > > > > >typedef long INT32; ># 173 "/usr/include/jmorecfg.h" 3 4 >typedef unsigned int JDIMENSION; ># 232 "/usr/include/jmorecfg.h" 3 4 >typedef int boolean; ># 30 "/usr/include/jpeglib.h" 2 3 4 > > > > >extern "C" { ># 69 "/usr/include/jpeglib.h" 3 4 >typedef JSAMPLE *JSAMPROW; >typedef JSAMPROW *JSAMPARRAY; >typedef JSAMPARRAY *JSAMPIMAGE; > >typedef JCOEF JBLOCK[64]; >typedef JBLOCK *JBLOCKROW; >typedef JBLOCKROW *JBLOCKARRAY; >typedef JBLOCKARRAY *JBLOCKIMAGE; > >typedef JCOEF *JCOEFPTR; > > > > > > > >typedef struct { > > > > > UINT16 quantval[64]; > > > > > > boolean sent_table; >} JQUANT_TBL; > > > > >typedef struct { > > UINT8 bits[17]; > > UINT8 huffval[256]; > > > > > > boolean sent_table; >} JHUFF_TBL; > > > > >typedef struct { > > > > int component_id; > int component_index; > int h_samp_factor; > int v_samp_factor; > int quant_tbl_no; > > > > > int dc_tbl_no; > int ac_tbl_no; ># 142 "/usr/include/jpeglib.h" 3 4 > JDIMENSION width_in_blocks; > JDIMENSION height_in_blocks; ># 154 "/usr/include/jpeglib.h" 3 4 > int DCT_scaled_size; > > > > > > > > JDIMENSION downsampled_width; > JDIMENSION downsampled_height; > > > > > boolean component_needed; > > > > int MCU_width; > int MCU_height; > int MCU_blocks; > int MCU_sample_width; > int last_col_width; > int last_row_height; > > > > > > JQUANT_TBL * quant_table; > > > void * dct_table; >} jpeg_component_info; > > > > >typedef struct { > int comps_in_scan; > int component_index[4]; > int Ss, Se; > int Ah, Al; >} jpeg_scan_info; > > > >typedef struct jpeg_marker_struct * jpeg_saved_marker_ptr; > >struct jpeg_marker_struct { > jpeg_saved_marker_ptr next; > UINT8 marker; > unsigned int original_length; > unsigned int data_length; > JOCTET * data; > >}; > > > > > > >typedef enum { > JCS_UNKNOWN, > JCS_GRAYSCALE, > JCS_RGB, > > JCS_YCbCr, > JCS_CMYK, > JCS_YCCK, > JCS_EXT_RGB, > JCS_EXT_RGBX, > JCS_EXT_BGR, > JCS_EXT_BGRX, > JCS_EXT_XBGR, > JCS_EXT_XRGB, > > > > > > > > JCS_EXT_RGBA, > JCS_EXT_BGRA, > JCS_EXT_ABGR, > JCS_EXT_ARGB >} J_COLOR_SPACE; > > > >typedef enum { > JDCT_ISLOW, > JDCT_IFAST, > JDCT_FLOAT >} J_DCT_METHOD; ># 261 "/usr/include/jpeglib.h" 3 4 >typedef enum { > JDITHER_NONE, > JDITHER_ORDERED, > JDITHER_FS >} J_DITHER_MODE; ># 282 "/usr/include/jpeglib.h" 3 4 >struct jpeg_common_struct { > struct jpeg_error_mgr * err; struct jpeg_memory_mgr * mem; struct jpeg_progress_mgr * progress; void * client_data; boolean is_decompressor; int global_state; > > > > >}; > >typedef struct jpeg_common_struct * j_common_ptr; >typedef struct jpeg_compress_struct * j_compress_ptr; >typedef struct jpeg_decompress_struct * j_decompress_ptr; > > > > >struct jpeg_compress_struct { > struct jpeg_error_mgr * err; struct jpeg_memory_mgr * mem; struct jpeg_progress_mgr * progress; void * client_data; boolean is_decompressor; int global_state; > > > struct jpeg_destination_mgr * dest; > > > > > > > JDIMENSION image_width; > JDIMENSION image_height; > int input_components; > J_COLOR_SPACE in_color_space; > > double input_gamma; ># 336 "/usr/include/jpeglib.h" 3 4 > int data_precision; > > int num_components; > J_COLOR_SPACE jpeg_color_space; > > jpeg_component_info * comp_info; > > > JQUANT_TBL * quant_tbl_ptrs[4]; > > > > > > > > JHUFF_TBL * dc_huff_tbl_ptrs[4]; > JHUFF_TBL * ac_huff_tbl_ptrs[4]; > > > UINT8 arith_dc_L[16]; > UINT8 arith_dc_U[16]; > UINT8 arith_ac_K[16]; > > int num_scans; > const jpeg_scan_info * scan_info; > > > > > > boolean raw_data_in; > boolean arith_code; > boolean optimize_coding; > boolean CCIR601_sampling; > > > > int smoothing_factor; > J_DCT_METHOD dct_method; > > > > > > > unsigned int restart_interval; > int restart_in_rows; > > > > boolean write_JFIF_header; > UINT8 JFIF_major_version; > UINT8 JFIF_minor_version; > > > > > UINT8 density_unit; > UINT16 X_density; > UINT16 Y_density; > boolean write_Adobe_marker; > > > > > > > JDIMENSION next_scanline; ># 413 "/usr/include/jpeglib.h" 3 4 > boolean progressive_mode; > int max_h_samp_factor; > int max_v_samp_factor; > > > > > > > JDIMENSION total_iMCU_rows; ># 433 "/usr/include/jpeglib.h" 3 4 > int comps_in_scan; > jpeg_component_info * cur_comp_info[4]; > > > JDIMENSION MCUs_per_row; > JDIMENSION MCU_rows_in_scan; > > int blocks_in_MCU; > int MCU_membership[10]; > > > > int Ss, Se, Ah, Al; ># 456 "/usr/include/jpeglib.h" 3 4 > struct jpeg_comp_master * master; > struct jpeg_c_main_controller * main; > struct jpeg_c_prep_controller * prep; > struct jpeg_c_coef_controller * coef; > struct jpeg_marker_writer * marker; > struct jpeg_color_converter * cconvert; > struct jpeg_downsampler * downsample; > struct jpeg_forward_dct * fdct; > struct jpeg_entropy_encoder * entropy; > jpeg_scan_info * script_space; > int script_space_size; >}; > > > > >struct jpeg_decompress_struct { > struct jpeg_error_mgr * err; struct jpeg_memory_mgr * mem; struct jpeg_progress_mgr * progress; void * client_data; boolean is_decompressor; int global_state; > > > struct jpeg_source_mgr * src; > > > > > JDIMENSION image_width; > JDIMENSION image_height; > int num_components; > J_COLOR_SPACE jpeg_color_space; > > > > > > > J_COLOR_SPACE out_color_space; > > unsigned int scale_num, scale_denom; > > double output_gamma; > > boolean buffered_image; > boolean raw_data_out; > > J_DCT_METHOD dct_method; > boolean do_fancy_upsampling; > boolean do_block_smoothing; > > boolean quantize_colors; > > J_DITHER_MODE dither_mode; > boolean two_pass_quantize; > int desired_number_of_colors; > > boolean enable_1pass_quant; > boolean enable_external_quant; > boolean enable_2pass_quant; > > > > > > > > JDIMENSION output_width; > JDIMENSION output_height; > int out_color_components; > int output_components; > > > > int rec_outbuf_height; ># 539 "/usr/include/jpeglib.h" 3 4 > int actual_number_of_colors; > JSAMPARRAY colormap; ># 550 "/usr/include/jpeglib.h" 3 4 > JDIMENSION output_scanline; > > > > > int input_scan_number; > JDIMENSION input_iMCU_row; > > > > > > int output_scan_number; > JDIMENSION output_iMCU_row; ># 572 "/usr/include/jpeglib.h" 3 4 > int (*coef_bits)[64]; ># 583 "/usr/include/jpeglib.h" 3 4 > JQUANT_TBL * quant_tbl_ptrs[4]; > > > JHUFF_TBL * dc_huff_tbl_ptrs[4]; > JHUFF_TBL * ac_huff_tbl_ptrs[4]; > > > > > > > int data_precision; > > jpeg_component_info * comp_info; > > > > > > boolean progressive_mode; > boolean arith_code; > > UINT8 arith_dc_L[16]; > UINT8 arith_dc_U[16]; > UINT8 arith_ac_K[16]; > > unsigned int restart_interval; > > > > > boolean saw_JFIF_marker; > > UINT8 JFIF_major_version; > UINT8 JFIF_minor_version; > UINT8 density_unit; > UINT16 X_density; > UINT16 Y_density; > boolean saw_Adobe_marker; > UINT8 Adobe_transform; > > boolean CCIR601_sampling; > > > > > > jpeg_saved_marker_ptr marker_list; ># 639 "/usr/include/jpeglib.h" 3 4 > int max_h_samp_factor; > int max_v_samp_factor; > > > > > > int min_DCT_scaled_size; > > > JDIMENSION total_iMCU_rows; ># 658 "/usr/include/jpeglib.h" 3 4 > JSAMPLE * sample_range_limit; > > > > > > > int comps_in_scan; > jpeg_component_info * cur_comp_info[4]; > > > JDIMENSION MCUs_per_row; > JDIMENSION MCU_rows_in_scan; > > int blocks_in_MCU; > int MCU_membership[10]; > > > > int Ss, Se, Ah, Al; ># 691 "/usr/include/jpeglib.h" 3 4 > int unread_marker; > > > > > struct jpeg_decomp_master * master; > struct jpeg_d_main_controller * main; > struct jpeg_d_coef_controller * coef; > struct jpeg_d_post_controller * post; > struct jpeg_input_controller * inputctl; > struct jpeg_marker_reader * marker; > struct jpeg_entropy_decoder * entropy; > struct jpeg_inverse_dct * idct; > struct jpeg_upsampler * upsample; > struct jpeg_color_deconverter * cconvert; > struct jpeg_color_quantizer * cquantize; >}; ># 720 "/usr/include/jpeglib.h" 3 4 >struct jpeg_error_mgr { > > void (*error_exit) (j_common_ptr cinfo); > > void (*emit_message) (j_common_ptr cinfo, int msg_level); > > void (*output_message) (j_common_ptr cinfo); > > void (*format_message) (j_common_ptr cinfo, char * buffer); > > > void (*reset_error_mgr) (j_common_ptr cinfo); > > > > > int msg_code; > > union { > int i[8]; > char s[80]; > } msg_parm; > > > > int trace_level; > > > > > > > > long num_warnings; ># 765 "/usr/include/jpeglib.h" 3 4 > const char * const * jpeg_message_table; > int last_jpeg_message; > > > > const char * const * addon_message_table; > int first_addon_message; > int last_addon_message; >}; > > > > >struct jpeg_progress_mgr { > void (*progress_monitor) (j_common_ptr cinfo); > > long pass_counter; > long pass_limit; > int completed_passes; > int total_passes; >}; > > > > >struct jpeg_destination_mgr { > JOCTET * next_output_byte; > size_t free_in_buffer; > > void (*init_destination) (j_compress_ptr cinfo); > boolean (*empty_output_buffer) (j_compress_ptr cinfo); > void (*term_destination) (j_compress_ptr cinfo); >}; > > > > >struct jpeg_source_mgr { > const JOCTET * next_input_byte; > size_t bytes_in_buffer; > > void (*init_source) (j_decompress_ptr cinfo); > boolean (*fill_input_buffer) (j_decompress_ptr cinfo); > void (*skip_input_data) (j_decompress_ptr cinfo, long num_bytes); > boolean (*resync_to_restart) (j_decompress_ptr cinfo, int desired); > void (*term_source) (j_decompress_ptr cinfo); >}; ># 829 "/usr/include/jpeglib.h" 3 4 >typedef struct jvirt_sarray_control * jvirt_sarray_ptr; >typedef struct jvirt_barray_control * jvirt_barray_ptr; > > >struct jpeg_memory_mgr { > > void * (*alloc_small) (j_common_ptr cinfo, int pool_id, size_t sizeofobject) > ; > void * (*alloc_large) (j_common_ptr cinfo, int pool_id, size_t sizeofobject) > ; > JSAMPARRAY (*alloc_sarray) (j_common_ptr cinfo, int pool_id, JDIMENSION samplesperrow, JDIMENSION numrows) > > ; > JBLOCKARRAY (*alloc_barray) (j_common_ptr cinfo, int pool_id, JDIMENSION blocksperrow, JDIMENSION numrows) > > ; > jvirt_sarray_ptr (*request_virt_sarray) (j_common_ptr cinfo, int pool_id, boolean pre_zero, JDIMENSION samplesperrow, JDIMENSION numrows, JDIMENSION maxaccess) > > > > > ; > jvirt_barray_ptr (*request_virt_barray) (j_common_ptr cinfo, int pool_id, boolean pre_zero, JDIMENSION blocksperrow, JDIMENSION numrows, JDIMENSION maxaccess) > > > > > ; > void (*realize_virt_arrays) (j_common_ptr cinfo); > JSAMPARRAY (*access_virt_sarray) (j_common_ptr cinfo, jvirt_sarray_ptr ptr, JDIMENSION start_row, JDIMENSION num_rows, boolean writable) > > > > ; > JBLOCKARRAY (*access_virt_barray) (j_common_ptr cinfo, jvirt_barray_ptr ptr, JDIMENSION start_row, JDIMENSION num_rows, boolean writable) > > > > ; > void (*free_pool) (j_common_ptr cinfo, int pool_id); > void (*self_destruct) (j_common_ptr cinfo); > > > > > > > long max_memory_to_use; > > > long max_alloc_chunk; >}; > > > > > >typedef boolean (*jpeg_marker_parser_method) (j_decompress_ptr cinfo); ># 974 "/usr/include/jpeglib.h" 3 4 >extern struct jpeg_error_mgr * jpeg_std_error > (struct jpeg_error_mgr * err); ># 990 "/usr/include/jpeglib.h" 3 4 >extern void jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize) > ; >extern void jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) > ; > >extern void jpeg_destroy_compress (j_compress_ptr cinfo); >extern void jpeg_destroy_decompress (j_decompress_ptr cinfo); > > > >extern void jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile); >extern void jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile); > > > >extern void jpeg_mem_dest (j_compress_ptr cinfo, unsigned char ** outbuffer, unsigned long * outsize) > > ; >extern void jpeg_mem_src (j_decompress_ptr cinfo, unsigned char * inbuffer, unsigned long insize) > > ; > > > >extern void jpeg_set_defaults (j_compress_ptr cinfo); > >extern void jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) > ; >extern void jpeg_default_colorspace (j_compress_ptr cinfo); >extern void jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) > ; >extern void jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, boolean force_baseline) > > ; > > > > >extern void jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline) > > > ; >extern int jpeg_quality_scaling (int quality); >extern void jpeg_simple_progression (j_compress_ptr cinfo); >extern void jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress) > ; >extern JQUANT_TBL * jpeg_alloc_quant_table (j_common_ptr cinfo); >extern JHUFF_TBL * jpeg_alloc_huff_table (j_common_ptr cinfo); > > >extern void jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables) > ; >extern JDIMENSION jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION num_lines) > > ; >extern void jpeg_finish_compress (j_compress_ptr cinfo); > > > > > > > >extern JDIMENSION jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, JDIMENSION num_lines) > > ; > > >extern void jpeg_write_marker > (j_compress_ptr cinfo, int marker, const JOCTET * dataptr, unsigned int datalen) > ; > >extern void jpeg_write_m_header > (j_compress_ptr cinfo, int marker, unsigned int datalen); >extern void jpeg_write_m_byte > (j_compress_ptr cinfo, int val); > > >extern void jpeg_write_tables (j_compress_ptr cinfo); > > >extern int jpeg_read_header (j_decompress_ptr cinfo, boolean require_image) > ; ># 1084 "/usr/include/jpeglib.h" 3 4 >extern boolean jpeg_start_decompress (j_decompress_ptr cinfo); >extern JDIMENSION jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines) > > ; >extern boolean jpeg_finish_decompress (j_decompress_ptr cinfo); > > >extern JDIMENSION jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, JDIMENSION max_lines) > > ; > > >extern boolean jpeg_has_multiple_scans (j_decompress_ptr cinfo); >extern boolean jpeg_start_output (j_decompress_ptr cinfo, int scan_number) > ; >extern boolean jpeg_finish_output (j_decompress_ptr cinfo); >extern boolean jpeg_input_complete (j_decompress_ptr cinfo); >extern void jpeg_new_colormap (j_decompress_ptr cinfo); >extern int jpeg_consume_input (j_decompress_ptr cinfo); ># 1114 "/usr/include/jpeglib.h" 3 4 >extern void jpeg_calc_output_dimensions (j_decompress_ptr cinfo); > > >extern void jpeg_save_markers > (j_decompress_ptr cinfo, int marker_code, unsigned int length_limit) > ; > > >extern void jpeg_set_marker_processor > (j_decompress_ptr cinfo, int marker_code, jpeg_marker_parser_method routine) > ; > > >extern jvirt_barray_ptr * jpeg_read_coefficients (j_decompress_ptr cinfo); >extern void jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) > ; >extern void jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, j_compress_ptr dstinfo) > ; > > > > > > > >extern void jpeg_abort_compress (j_compress_ptr cinfo); >extern void jpeg_abort_decompress (j_decompress_ptr cinfo); > > > > >extern void jpeg_abort (j_common_ptr cinfo); >extern void jpeg_destroy (j_common_ptr cinfo); > > >extern boolean jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired) > ; ># 1210 "/usr/include/jpeglib.h" 3 4 >} ># 270 "./CImg.h" 2 > >} ># 282 "./CImg.h" >extern "C" { > > ># 1 "/usr/include/tiffio.h" 1 3 4 ># 33 "/usr/include/tiffio.h" 3 4 ># 1 "/usr/include/tiff.h" 1 3 4 ># 30 "/usr/include/tiff.h" 3 4 ># 1 "/usr/include/tiffconf.h" 1 3 4 > > > ># 1 "/usr/include/bits/wordsize.h" 1 3 4 ># 5 "/usr/include/tiffconf.h" 2 3 4 > > > > ># 1 "/usr/include/tiffconf-64.h" 1 3 4 ># 10 "/usr/include/tiffconf.h" 2 3 4 ># 31 "/usr/include/tiff.h" 2 3 4 ># 68 "/usr/include/tiff.h" 3 4 >typedef signed char int8; >typedef unsigned char uint8; > >typedef signed short int16; >typedef unsigned short uint16; > >typedef signed int int32; >typedef unsigned int uint32; > >typedef signed long int64_hack_; >typedef unsigned long uint64_hack_; ># 88 "/usr/include/tiff.h" 3 4 >typedef int uint16_vap; > > > > >typedef struct { > uint16 tiff_magic; > uint16 tiff_version; >} TIFFHeaderCommon; >typedef struct { > uint16 tiff_magic; > uint16 tiff_version; > uint32 tiff_diroff; >} TIFFHeaderClassic; >typedef struct { > uint16 tiff_magic; > uint16 tiff_version; > uint16 tiff_offsetsize; > uint16 tiff_unused; > uint64_hack_ tiff_diroff; >} TIFFHeaderBig; ># 125 "/usr/include/tiff.h" 3 4 >typedef enum { > TIFF_NOTYPE = 0, > TIFF_BYTE = 1, > TIFF_ASCII = 2, > TIFF_SHORT = 3, > TIFF_LONG = 4, > TIFF_RATIONAL = 5, > TIFF_SBYTE = 6, > TIFF_UNDEFINED = 7, > TIFF_SSHORT = 8, > TIFF_SLONG = 9, > TIFF_SRATIONAL = 10, > TIFF_FLOAT = 11, > TIFF_DOUBLE = 12, > TIFF_IFD = 13, > TIFF_LONG8 = 16, > TIFF_SLONG8 = 17, > TIFF_IFD8 = 18 >} TIFFDataType; ># 34 "/usr/include/tiffio.h" 2 3 4 ># 1 "/usr/include/tiffvers.h" 1 3 4 ># 35 "/usr/include/tiffio.h" 2 3 4 > > > > > >typedef struct tiff TIFF; ># 67 "/usr/include/tiffio.h" 3 4 >typedef signed long tmsize_t; >typedef uint64_hack_ toff_t; > > >typedef uint32 ttag_t; >typedef uint16 tdir_t; >typedef uint16 tsample_t; >typedef uint32 tstrile_t; >typedef tstrile_t tstrip_t; >typedef tstrile_t ttile_t; >typedef tmsize_t tsize_t; >typedef void* tdata_t; ># 106 "/usr/include/tiffio.h" 3 4 >typedef void* thandle_t; ># 138 "/usr/include/tiffio.h" 3 4 >typedef unsigned char TIFFRGBValue; > >typedef struct { > float d_mat[3][3]; > float d_YCR; > float d_YCG; > float d_YCB; > uint32 d_Vrwr; > uint32 d_Vrwg; > uint32 d_Vrwb; > float d_Y0R; > float d_Y0G; > float d_Y0B; > float d_gammaR; > float d_gammaG; > float d_gammaB; >} TIFFDisplay; > >typedef struct { > TIFFRGBValue* clamptab; > int* Cr_r_tab; > int* Cb_b_tab; > int32* Cr_g_tab; > int32* Cb_g_tab; > int32* Y_tab; >} TIFFYCbCrToRGB; > >typedef struct { > int range; > > float rstep, gstep, bstep; > float X0, Y0, Z0; > TIFFDisplay display; > float Yr2r[1500 + 1]; > float Yg2g[1500 + 1]; > float Yb2b[1500 + 1]; >} TIFFCIELabToRGB; > > > > >typedef struct _TIFFRGBAImage TIFFRGBAImage; ># 190 "/usr/include/tiffio.h" 3 4 >typedef void (*tileContigRoutine) > (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, > unsigned char*); >typedef void (*tileSeparateRoutine) > (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32, > unsigned char*, unsigned char*, unsigned char*, unsigned char*); > > > >struct _TIFFRGBAImage { > TIFF* tif; > int stoponerr; > int isContig; > int alpha; > uint32 width; > uint32 height; > uint16 bitspersample; > uint16 samplesperpixel; > uint16 orientation; > uint16 req_orientation; > uint16 photometric; > uint16* redcmap; > uint16* greencmap; > uint16* bluecmap; > > int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32); > > union { > void (*any)(TIFFRGBAImage*); > tileContigRoutine contig; > tileSeparateRoutine separate; > } put; > TIFFRGBValue* Map; > uint32** BWmap; > uint32** PALmap; > TIFFYCbCrToRGB* ycbcr; > TIFFCIELabToRGB* cielab; > > uint8* UaToAa; > uint8* Bitdepth16To8; > > int row_offset; > int col_offset; >}; ># 251 "/usr/include/tiffio.h" 3 4 >typedef int (*TIFFInitMethod)(TIFF*, int); >typedef struct { > char* name; > uint16 scheme; > TIFFInitMethod init; >} TIFFCodec; ># 271 "/usr/include/tiffio.h" 3 4 >extern "C" { > >typedef void (*TIFFErrorHandler)(const char*, const char*, va_list); >typedef void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list); >typedef tmsize_t (*TIFFReadWriteProc)(thandle_t, void*, tmsize_t); >typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int); >typedef int (*TIFFCloseProc)(thandle_t); >typedef toff_t (*TIFFSizeProc)(thandle_t); >typedef int (*TIFFMapFileProc)(thandle_t, void** base, toff_t* size); >typedef void (*TIFFUnmapFileProc)(thandle_t, void* base, toff_t size); >typedef void (*TIFFExtendProc)(TIFF*); > >extern const char* TIFFGetVersion(void); > >extern const TIFFCodec* TIFFFindCODEC(uint16); >extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod); >extern void TIFFUnRegisterCODEC(TIFFCodec*); >extern int TIFFIsCODECConfigured(uint16); >extern TIFFCodec* TIFFGetConfiguredCODECs(void); > > > > > >extern void* _TIFFmalloc(tmsize_t s); >extern void* _TIFFrealloc(void* p, tmsize_t s); >extern void _TIFFmemset(void* p, int v, tmsize_t c); >extern void _TIFFmemcpy(void* d, const void* s, tmsize_t c); >extern int _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c); >extern void _TIFFfree(void* p); > > > > >extern int TIFFGetTagListCount( TIFF * ); >extern uint32 TIFFGetTagListEntry( TIFF *, int tag_index ); ># 315 "/usr/include/tiffio.h" 3 4 >typedef struct _TIFFField TIFFField; >typedef struct _TIFFFieldArray TIFFFieldArray; > >extern const TIFFField* TIFFFindField(TIFF *, uint32, TIFFDataType); >extern const TIFFField* TIFFFieldWithTag(TIFF*, uint32); >extern const TIFFField* TIFFFieldWithName(TIFF*, const char *); > >extern uint32 TIFFFieldTag(const TIFFField*); >extern const char* TIFFFieldName(const TIFFField*); >extern TIFFDataType TIFFFieldDataType(const TIFFField*); >extern int TIFFFieldPassCount(const TIFFField*); >extern int TIFFFieldReadCount(const TIFFField*); >extern int TIFFFieldWriteCount(const TIFFField*); > >typedef int (*TIFFVSetMethod)(TIFF*, uint32, va_list); >typedef int (*TIFFVGetMethod)(TIFF*, uint32, va_list); >typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long); > >typedef struct { > TIFFVSetMethod vsetfield; > TIFFVGetMethod vgetfield; > TIFFPrintMethod printdir; >} TIFFTagMethods; > >extern TIFFTagMethods *TIFFAccessTagMethods(TIFF *); >extern void *TIFFGetClientInfo(TIFF *, const char *); >extern void TIFFSetClientInfo(TIFF *, void *, const char *); > >extern void TIFFCleanup(TIFF* tif); >extern void TIFFClose(TIFF* tif); >extern int TIFFFlush(TIFF* tif); >extern int TIFFFlushData(TIFF* tif); >extern int TIFFGetField(TIFF* tif, uint32 tag, ...); >extern int TIFFVGetField(TIFF* tif, uint32 tag, va_list ap); >extern int TIFFGetFieldDefaulted(TIFF* tif, uint32 tag, ...); >extern int TIFFVGetFieldDefaulted(TIFF* tif, uint32 tag, va_list ap); >extern int TIFFReadDirectory(TIFF* tif); >extern int TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, const TIFFFieldArray* infoarray); >extern int TIFFReadEXIFDirectory(TIFF* tif, toff_t diroff); >extern uint64_hack_ TIFFScanlineSize64(TIFF* tif); >extern tmsize_t TIFFScanlineSize(TIFF* tif); >extern uint64_hack_ TIFFRasterScanlineSize64(TIFF* tif); >extern tmsize_t TIFFRasterScanlineSize(TIFF* tif); >extern uint64_hack_ TIFFStripSize64(TIFF* tif); >extern tmsize_t TIFFStripSize(TIFF* tif); >extern uint64_hack_ TIFFRawStripSize64(TIFF* tif, uint32 strip); >extern tmsize_t TIFFRawStripSize(TIFF* tif, uint32 strip); >extern uint64_hack_ TIFFVStripSize64(TIFF* tif, uint32 nrows); >extern tmsize_t TIFFVStripSize(TIFF* tif, uint32 nrows); >extern uint64_hack_ TIFFTileRowSize64(TIFF* tif); >extern tmsize_t TIFFTileRowSize(TIFF* tif); >extern uint64_hack_ TIFFTileSize64(TIFF* tif); >extern tmsize_t TIFFTileSize(TIFF* tif); >extern uint64_hack_ TIFFVTileSize64(TIFF* tif, uint32 nrows); >extern tmsize_t TIFFVTileSize(TIFF* tif, uint32 nrows); >extern uint32 TIFFDefaultStripSize(TIFF* tif, uint32 request); >extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*); >extern int TIFFFileno(TIFF*); >extern int TIFFSetFileno(TIFF*, int); >extern thandle_t TIFFClientdata(TIFF*); >extern thandle_t TIFFSetClientdata(TIFF*, thandle_t); >extern int TIFFGetMode(TIFF*); >extern int TIFFSetMode(TIFF*, int); >extern int TIFFIsTiled(TIFF*); >extern int TIFFIsByteSwapped(TIFF*); >extern int TIFFIsUpSampled(TIFF*); >extern int TIFFIsMSB2LSB(TIFF*); >extern int TIFFIsBigEndian(TIFF*); >extern TIFFReadWriteProc TIFFGetReadProc(TIFF*); >extern TIFFReadWriteProc TIFFGetWriteProc(TIFF*); >extern TIFFSeekProc TIFFGetSeekProc(TIFF*); >extern TIFFCloseProc TIFFGetCloseProc(TIFF*); >extern TIFFSizeProc TIFFGetSizeProc(TIFF*); >extern TIFFMapFileProc TIFFGetMapFileProc(TIFF*); >extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*); >extern uint32 TIFFCurrentRow(TIFF*); >extern uint16 TIFFCurrentDirectory(TIFF*); >extern uint16 TIFFNumberOfDirectories(TIFF*); >extern uint64_hack_ TIFFCurrentDirOffset(TIFF*); >extern uint32 TIFFCurrentStrip(TIFF*); >extern uint32 TIFFCurrentTile(TIFF* tif); >extern int TIFFReadBufferSetup(TIFF* tif, void* bp, tmsize_t size); >extern int TIFFWriteBufferSetup(TIFF* tif, void* bp, tmsize_t size); >extern int TIFFSetupStrips(TIFF *); >extern int TIFFWriteCheck(TIFF*, int, const char *); >extern void TIFFFreeDirectory(TIFF*); >extern int TIFFCreateDirectory(TIFF*); >extern int TIFFCreateCustomDirectory(TIFF*,const TIFFFieldArray*); >extern int TIFFCreateEXIFDirectory(TIFF*); >extern int TIFFLastDirectory(TIFF*); >extern int TIFFSetDirectory(TIFF*, uint16); >extern int TIFFSetSubDirectory(TIFF*, uint64_hack_); >extern int TIFFUnlinkDirectory(TIFF*, uint16); >extern int TIFFSetField(TIFF*, uint32, ...); >extern int TIFFVSetField(TIFF*, uint32, va_list); >extern int TIFFUnsetField(TIFF*, uint32); >extern int TIFFWriteDirectory(TIFF *); >extern int TIFFWriteCustomDirectory(TIFF *, uint64_hack_ *); >extern int TIFFCheckpointDirectory(TIFF *); >extern int TIFFRewriteDirectory(TIFF *); > > >extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); >extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0); >extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0); >extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0); >extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, > int = 4, int = 0); ># 431 "/usr/include/tiffio.h" 3 4 >extern int TIFFReadRGBAStrip(TIFF*, uint32, uint32 * ); >extern int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * ); >extern int TIFFRGBAImageOK(TIFF*, char [1024]); >extern int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]); >extern int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32); >extern void TIFFRGBAImageEnd(TIFFRGBAImage*); >extern TIFF* TIFFOpen(const char*, const char*); > > > >extern TIFF* TIFFFdOpen(int, const char*, const char*); >extern TIFF* TIFFClientOpen(const char*, const char*, > thandle_t, > TIFFReadWriteProc, TIFFReadWriteProc, > TIFFSeekProc, TIFFCloseProc, > TIFFSizeProc, > TIFFMapFileProc, TIFFUnmapFileProc); >extern const char* TIFFFileName(TIFF*); >extern const char* TIFFSetFileName(TIFF*, const char *); >extern void TIFFError(const char*, const char*, ...) __attribute__((__format__ (__printf__,2,3))); >extern void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((__format__ (__printf__,3,4))); >extern void TIFFWarning(const char*, const char*, ...) __attribute__((__format__ (__printf__,2,3))); >extern void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((__format__ (__printf__,3,4))); >extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler); >extern TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt); >extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler); >extern TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt); >extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc); >extern uint32 TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s); >extern int TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s); >extern uint32 TIFFNumberOfTiles(TIFF*); >extern tmsize_t TIFFReadTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s); >extern tmsize_t TIFFWriteTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s); >extern uint32 TIFFComputeStrip(TIFF*, uint32, uint16); >extern uint32 TIFFNumberOfStrips(TIFF*); >extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); >extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); >extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); >extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); >extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); >extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); >extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); >extern tmsize_t TIFFWriteRawTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); >extern int TIFFDataWidth(TIFFDataType); >extern void TIFFSetWriteOffset(TIFF* tif, toff_t off); >extern void TIFFSwabShort(uint16*); >extern void TIFFSwabLong(uint32*); >extern void TIFFSwabLong8(uint64_hack_*); >extern void TIFFSwabFloat(float*); >extern void TIFFSwabDouble(double*); >extern void TIFFSwabArrayOfShort(uint16* wp, tmsize_t n); >extern void TIFFSwabArrayOfTriples(uint8* tp, tmsize_t n); >extern void TIFFSwabArrayOfLong(uint32* lp, tmsize_t n); >extern void TIFFSwabArrayOfLong8(uint64_hack_* lp, tmsize_t n); >extern void TIFFSwabArrayOfFloat(float* fp, tmsize_t n); >extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n); >extern void TIFFReverseBits(uint8* cp, tmsize_t n); >extern const unsigned char* TIFFGetBitRevTable(int); > > > > > >extern double LogL16toY(int); >extern double LogL10toY(int); >extern void XYZtoRGB24(float*, uint8*); >extern int uv_decode(double*, double*, int); >extern void LogLuv24toXYZ(uint32, float*); >extern void LogLuv32toXYZ(uint32, float*); > >extern int LogL16fromY(double, int = 0); >extern int LogL10fromY(double, int = 0); >extern int uv_encode(double, double, int = 0); >extern uint32 LogLuv24fromXYZ(float*, int = 0); >extern uint32 LogLuv32fromXYZ(float*, int = 0); ># 515 "/usr/include/tiffio.h" 3 4 >extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, const TIFFDisplay *, float*); >extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32, > float *, float *, float *); >extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float, > uint32 *, uint32 *, uint32 *); > >extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*); >extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32, > uint32 *, uint32 *, uint32 *); > > > > > > > >typedef struct { > ttag_t field_tag; > short field_readcount; > short field_writecount; > TIFFDataType field_type; > unsigned short field_bit; > unsigned char field_oktochange; > unsigned char field_passcount; > char *field_name; >} TIFFFieldInfo; > >extern int TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], uint32); > > >} ># 286 "./CImg.h" 2 > > >} ># 334 "./CImg.h" >extern "C" { ># 1 "/usr/include/zlib.h" 1 3 4 ># 34 "/usr/include/zlib.h" 3 4 ># 1 "/usr/include/zconf.h" 1 3 4 ># 368 "/usr/include/zconf.h" 3 4 >typedef unsigned char Byte; > >typedef unsigned int uInt; >typedef unsigned long uLong; > > > > > > typedef Byte Bytef; > >typedef char charf; >typedef int intf; >typedef uInt uIntf; >typedef uLong uLongf; > > > typedef void const *voidpc; > typedef void *voidpf; > typedef void *voidp; > > > > > > > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 1 3 4 ># 396 "/usr/include/zconf.h" 2 3 4 ># 406 "/usr/include/zconf.h" 3 4 > typedef unsigned z_crc_t; ># 35 "/usr/include/zlib.h" 2 3 4 > > >extern "C" { ># 80 "/usr/include/zlib.h" 3 4 >typedef voidpf (*alloc_func) (voidpf opaque, uInt items, uInt size); >typedef void (*free_func) (voidpf opaque, voidpf address); > >struct internal_state; > >typedef struct z_stream_s { > Bytef *next_in; > uInt avail_in; > uLong total_in; > > Bytef *next_out; > uInt avail_out; > uLong total_out; > > char *msg; > struct internal_state *state; > > alloc_func zalloc; > free_func zfree; > voidpf opaque; > > int data_type; > uLong adler; > uLong reserved; >} z_stream; > >typedef z_stream *z_streamp; > > > > > >typedef struct gz_header_s { > int text; > uLong time; > int xflags; > int os; > Bytef *extra; > uInt extra_len; > uInt extra_max; > Bytef *name; > uInt name_max; > Bytef *comment; > uInt comm_max; > int hcrc; > int done; > >} gz_header; > >typedef gz_header *gz_headerp; ># 216 "/usr/include/zlib.h" 3 4 >extern const char * zlibVersion (void); ># 246 "/usr/include/zlib.h" 3 4 >extern int deflate (z_streamp strm, int flush); ># 353 "/usr/include/zlib.h" 3 4 >extern int deflateEnd (z_streamp strm); ># 392 "/usr/include/zlib.h" 3 4 >extern int inflate (z_streamp strm, int flush); ># 508 "/usr/include/zlib.h" 3 4 >extern int inflateEnd (z_streamp strm); ># 587 "/usr/include/zlib.h" 3 4 >extern int deflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength) > > ; ># 631 "/usr/include/zlib.h" 3 4 >extern int deflateCopy (z_streamp dest, z_streamp source) > ; ># 649 "/usr/include/zlib.h" 3 4 >extern int deflateReset (z_streamp strm); ># 660 "/usr/include/zlib.h" 3 4 >extern int deflateParams (z_streamp strm, int level, int strategy) > > ; ># 681 "/usr/include/zlib.h" 3 4 >extern int deflateTune (z_streamp strm, int good_length, int max_lazy, int nice_length, int max_chain) > > > > ; ># 698 "/usr/include/zlib.h" 3 4 >extern uLong deflateBound (z_streamp strm, uLong sourceLen) > ; ># 713 "/usr/include/zlib.h" 3 4 >extern int deflatePending (z_streamp strm, unsigned *pending, int *bits) > > ; ># 728 "/usr/include/zlib.h" 3 4 >extern int deflatePrime (z_streamp strm, int bits, int value) > > ; ># 745 "/usr/include/zlib.h" 3 4 >extern int deflateSetHeader (z_streamp strm, gz_headerp head) > ; ># 819 "/usr/include/zlib.h" 3 4 >extern int inflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength) > > ; ># 842 "/usr/include/zlib.h" 3 4 >extern int inflateGetDictionary (z_streamp strm, Bytef *dictionary, uInt *dictLength) > > ; ># 857 "/usr/include/zlib.h" 3 4 >extern int inflateSync (z_streamp strm); ># 876 "/usr/include/zlib.h" 3 4 >extern int inflateCopy (z_streamp dest, z_streamp source) > ; ># 892 "/usr/include/zlib.h" 3 4 >extern int inflateReset (z_streamp strm); ># 902 "/usr/include/zlib.h" 3 4 >extern int inflateReset2 (z_streamp strm, int windowBits) > ; ># 914 "/usr/include/zlib.h" 3 4 >extern int inflatePrime (z_streamp strm, int bits, int value) > > ; ># 935 "/usr/include/zlib.h" 3 4 >extern long inflateMark (z_streamp strm); ># 963 "/usr/include/zlib.h" 3 4 >extern int inflateGetHeader (z_streamp strm, gz_headerp head) > ; ># 1025 "/usr/include/zlib.h" 3 4 >typedef unsigned (*in_func) (void *, unsigned char * *) > ; >typedef int (*out_func) (void *, unsigned char *, unsigned); > >extern int inflateBack (z_streamp strm, in_func in, void *in_desc, out_func out, void *out_desc) > > ; ># 1099 "/usr/include/zlib.h" 3 4 >extern int inflateBackEnd (z_streamp strm); > > > > > > > >extern uLong zlibCompileFlags (void); ># 1160 "/usr/include/zlib.h" 3 4 >extern int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) > ; ># 1174 "/usr/include/zlib.h" 3 4 >extern int compress2 (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level) > > ; ># 1190 "/usr/include/zlib.h" 3 4 >extern uLong compressBound (uLong sourceLen); > > > > > > >extern int uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen) > ; ># 1224 "/usr/include/zlib.h" 3 4 >typedef struct gzFile_s *gzFile; ># 1264 "/usr/include/zlib.h" 3 4 >extern gzFile gzdopen (int fd, const char *mode); ># 1287 "/usr/include/zlib.h" 3 4 >extern int gzbuffer (gzFile file, unsigned size); ># 1304 "/usr/include/zlib.h" 3 4 >extern int gzsetparams (gzFile file, int level, int strategy); ># 1313 "/usr/include/zlib.h" 3 4 >extern int gzread (gzFile file, voidp buf, unsigned len); ># 1341 "/usr/include/zlib.h" 3 4 >extern int gzwrite (gzFile file, voidpc buf, unsigned len) > ; > > > > > > >extern int gzprintf (gzFile file, const char *format, ...); ># 1364 "/usr/include/zlib.h" 3 4 >extern int gzputs (gzFile file, const char *s); > > > > > > > >extern char * gzgets (gzFile file, char *buf, int len); ># 1385 "/usr/include/zlib.h" 3 4 >extern int gzputc (gzFile file, int c); > > > > > >extern int gzgetc (gzFile file); ># 1400 "/usr/include/zlib.h" 3 4 >extern int gzungetc (int c, gzFile file); ># 1412 "/usr/include/zlib.h" 3 4 >extern int gzflush (gzFile file, int flush); ># 1447 "/usr/include/zlib.h" 3 4 >extern int gzrewind (gzFile file); ># 1475 "/usr/include/zlib.h" 3 4 >extern int gzeof (gzFile file); ># 1490 "/usr/include/zlib.h" 3 4 >extern int gzdirect (gzFile file); ># 1511 "/usr/include/zlib.h" 3 4 >extern int gzclose (gzFile file); ># 1524 "/usr/include/zlib.h" 3 4 >extern int gzclose_r (gzFile file); >extern int gzclose_w (gzFile file); ># 1536 "/usr/include/zlib.h" 3 4 >extern const char * gzerror (gzFile file, int *errnum); ># 1552 "/usr/include/zlib.h" 3 4 >extern void gzclearerr (gzFile file); ># 1569 "/usr/include/zlib.h" 3 4 >extern uLong adler32 (uLong adler, const Bytef *buf, uInt len); ># 1600 "/usr/include/zlib.h" 3 4 >extern uLong crc32 (uLong crc, const Bytef *buf, uInt len); ># 1633 "/usr/include/zlib.h" 3 4 >extern int deflateInit_ (z_streamp strm, int level, const char *version, int stream_size) > ; >extern int inflateInit_ (z_streamp strm, const char *version, int stream_size) > ; >extern int deflateInit2_ (z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size) > > > ; >extern int inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size) > ; >extern int inflateBackInit_ (z_streamp strm, int windowBits, unsigned char *window, const char *version, int stream_size) > > > ; ># 1670 "/usr/include/zlib.h" 3 4 >struct gzFile_s { > unsigned have; > unsigned char *next; > off64_t pos; >}; >extern int gzgetc_ (gzFile file); ># 1692 "/usr/include/zlib.h" 3 4 > extern gzFile gzopen64 (const char *, const char *); > extern off64_t gzseek64 (gzFile, off64_t, int); > extern off64_t gztell64 (gzFile); > extern off64_t gzoffset64 (gzFile); > extern uLong adler32_combine64 (uLong, uLong, off64_t); > extern uLong crc32_combine64 (uLong, uLong, off64_t); ># 1725 "/usr/include/zlib.h" 3 4 > extern gzFile gzopen (const char *, const char *); > extern off_t gzseek (gzFile, off_t, int); > extern off_t gztell (gzFile); > extern off_t gzoffset (gzFile); > extern uLong adler32_combine (uLong, uLong, off_t); > extern uLong crc32_combine (uLong, uLong, off_t); ># 1742 "/usr/include/zlib.h" 3 4 > struct internal_state {int dummy;}; > > > >extern const char * zError (int); >extern int inflateSyncPoint (z_streamp); >extern const z_crc_t * get_crc_table (void); >extern int inflateUndermine (z_streamp, int); >extern int inflateResetKeep (z_streamp); >extern int deflateResetKeep (z_streamp); > > > > > > >extern int gzvprintf (gzFile file, const char *format, va_list va) > > ; > > > > >} ># 336 "./CImg.h" 2 >} ># 359 "./CImg.h" >extern "C" { ># 1 "/usr/include/fftw3.h" 1 3 4 ># 53 "/usr/include/fftw3.h" 3 4 >extern "C" >{ ># 89 "/usr/include/fftw3.h" 3 4 >enum fftw_r2r_kind_do_not_use_me { > FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2, > FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6, > FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10 >}; > >struct fftw_iodim_do_not_use_me { > int n; > int is; > int os; >}; > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h" 1 3 4 ># 102 "/usr/include/fftw3.h" 2 3 4 >struct fftw_iodim64_do_not_use_me { > ptrdiff_t n; > ptrdiff_t is; > ptrdiff_t os; >}; > >typedef void (*fftw_write_char_func_do_not_use_me)(char c, void *); >typedef int (*fftw_read_char_func_do_not_use_me)(void *); ># 355 "/usr/include/fftw3.h" 3 4 >typedef double fftw_complex[2]; typedef struct fftw_plan_s *fftw_plan; typedef struct fftw_iodim_do_not_use_me fftw_iodim; typedef struct fftw_iodim64_do_not_use_me fftw_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftw_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftw_write_char_func; typedef fftw_read_char_func_do_not_use_me fftw_read_char_func; extern void fftw_execute(const fftw_plan p); extern fftw_plan fftw_plan_dft(int rank, const int *n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_dft_1d(int n, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_dft_2d(int n0, int n1, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_dft_3d(int n0, int n1, int n2, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_many_dft(int rank, const int *n, int howmany, fftw_complex *in, const int *inembed, int istride, int idist, fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftw_plan fftw_plan_guru_dft(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_guru_split_dft(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *ri, double *ii, double *ro, double *io, unsigned flags); extern fftw_plan fftw_plan_guru64_dft(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, fftw_complex *in, fftw_complex *out, int sign, unsigned flags); extern fftw_plan fftw_plan_guru64_split_dft(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *ri, double *ii, double *ro, double *io, unsigned flags); extern void fftw_execute_dft(const fftw_plan p, fftw_complex *in, fftw_complex *out); extern void fftw_execute_split_dft(const fftw_plan p, double *ri, double *ii, double *ro, double *io); extern fftw_plan fftw_plan_many_dft_r2c(int rank, const int *n, int howmany, double *in, const int *inembed, int istride, int idist, fftw_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftw_plan fftw_plan_dft_r2c(int rank, const int *n, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_dft_r2c_1d(int n,double *in,fftw_complex *out,unsigned flags); extern fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_dft_r2c_3d(int n0, int n1, int n2, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_many_dft_c2r(int rank, const int *n, int howmany, fftw_complex *in, const int *inembed, int istride, int idist, double *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftw_plan fftw_plan_dft_c2r(int rank, const int *n, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_dft_c2r_1d(int n,fftw_complex *in,double *out,unsigned flags); extern fftw_plan fftw_plan_dft_c2r_2d(int n0, int n1, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_dft_c2r_3d(int n0, int n1, int n2, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_guru_dft_r2c(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_guru_dft_c2r(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_guru_split_dft_r2c( int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *in, double *ro, double *io, unsigned flags); extern fftw_plan fftw_plan_guru_split_dft_c2r( int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *ri, double *ii, double *out, unsigned flags); extern fftw_plan fftw_plan_guru64_dft_r2c(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *in, fftw_complex *out, unsigned flags); extern fftw_plan fftw_plan_guru64_dft_c2r(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, fftw_complex *in, double *out, unsigned flags); extern fftw_plan fftw_plan_guru64_split_dft_r2c( int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *in, double *ro, double *io, unsigned flags); extern fftw_plan fftw_plan_guru64_split_dft_c2r( int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *ri, double *ii, double *out, unsigned flags); extern void fftw_execute_dft_r2c(const fftw_plan p, double *in, fftw_complex *out); extern void fftw_execute_dft_c2r(const fftw_plan p, fftw_complex *in, double *out); extern void fftw_execute_split_dft_r2c(const fftw_plan p, double *in, double *ro, double *io); extern void fftw_execute_split_dft_c2r(const fftw_plan p, double *ri, double *ii, double *out); extern fftw_plan fftw_plan_many_r2r(int rank, const int *n, int howmany, double *in, const int *inembed, int istride, int idist, double *out, const int *onembed, int ostride, int odist, const fftw_r2r_kind *kind, unsigned flags); extern fftw_plan fftw_plan_r2r(int rank, const int *n, double *in, double *out, const fftw_r2r_kind *kind, unsigned flags); extern fftw_plan fftw_plan_r2r_1d(int n, double *in, double *out, fftw_r2r_kind kind, unsigned flags); extern fftw_plan fftw_plan_r2r_2d(int n0, int n1, double *in, double *out, fftw_r2r_kind kind0, fftw_r2r_kind kind1, unsigned flags); extern fftw_plan fftw_plan_r2r_3d(int n0, int n1, int n2, double *in, double *out, fftw_r2r_kind kind0, fftw_r2r_kind kind1, fftw_r2r_kind kind2, unsigned flags); extern fftw_plan fftw_plan_guru_r2r(int rank, const fftw_iodim *dims, int howmany_rank, const fftw_iodim *howmany_dims, double *in, double *out, const fftw_r2r_kind *kind, unsigned flags); extern fftw_plan fftw_plan_guru64_r2r(int rank, const fftw_iodim64 *dims, int howmany_rank, const fftw_iodim64 *howmany_dims, double *in, double *out, const fftw_r2r_kind *kind, unsigned flags); extern void fftw_execute_r2r(const fftw_plan p, double *in, double *out); extern void fftw_destroy_plan(fftw_plan p); extern void fftw_forget_wisdom(void); extern void fftw_cleanup(void); extern void fftw_set_timelimit(double t); extern void fftw_plan_with_nthreads(int nthreads); extern int fftw_init_threads(void); extern void fftw_cleanup_threads(void); extern int fftw_export_wisdom_to_filename(const char *filename); extern void fftw_export_wisdom_to_file(FILE *output_file); extern char *fftw_export_wisdom_to_string(void); extern void fftw_export_wisdom(fftw_write_char_func write_char, void *data); extern int fftw_import_system_wisdom(void); extern int fftw_import_wisdom_from_filename(const char *filename); extern int fftw_import_wisdom_from_file(FILE *input_file); extern int fftw_import_wisdom_from_string(const char *input_string); extern int fftw_import_wisdom(fftw_read_char_func read_char, void *data); extern void fftw_fprint_plan(const fftw_plan p, FILE *output_file); extern void fftw_print_plan(const fftw_plan p); extern char *fftw_sprint_plan(const fftw_plan p); extern void *fftw_malloc(size_t n); extern double *fftw_alloc_real(size_t n); extern fftw_complex *fftw_alloc_complex(size_t n); extern void fftw_free(void *p); extern void fftw_flops(const fftw_plan p, double *add, double *mul, double *fmas); extern double fftw_estimate_cost(const fftw_plan p); extern double fftw_cost(const fftw_plan p); extern int fftw_alignment_of(double *p); extern const char fftw_version[]; extern const char fftw_cc[]; extern const char fftw_codelet_optim[]; >typedef float fftwf_complex[2]; typedef struct fftwf_plan_s *fftwf_plan; typedef struct fftw_iodim_do_not_use_me fftwf_iodim; typedef struct fftw_iodim64_do_not_use_me fftwf_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftwf_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftwf_write_char_func; typedef fftw_read_char_func_do_not_use_me fftwf_read_char_func; extern void fftwf_execute(const fftwf_plan p); extern fftwf_plan fftwf_plan_dft(int rank, const int *n, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_dft_1d(int n, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_dft_2d(int n0, int n1, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_dft_3d(int n0, int n1, int n2, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_many_dft(int rank, const int *n, int howmany, fftwf_complex *in, const int *inembed, int istride, int idist, fftwf_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftwf_plan fftwf_plan_guru_dft(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_guru_split_dft(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *ri, float *ii, float *ro, float *io, unsigned flags); extern fftwf_plan fftwf_plan_guru64_dft(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, fftwf_complex *in, fftwf_complex *out, int sign, unsigned flags); extern fftwf_plan fftwf_plan_guru64_split_dft(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *ri, float *ii, float *ro, float *io, unsigned flags); extern void fftwf_execute_dft(const fftwf_plan p, fftwf_complex *in, fftwf_complex *out); extern void fftwf_execute_split_dft(const fftwf_plan p, float *ri, float *ii, float *ro, float *io); extern fftwf_plan fftwf_plan_many_dft_r2c(int rank, const int *n, int howmany, float *in, const int *inembed, int istride, int idist, fftwf_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c(int rank, const int *n, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c_1d(int n,float *in,fftwf_complex *out,unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c_2d(int n0, int n1, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_r2c_3d(int n0, int n1, int n2, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_many_dft_c2r(int rank, const int *n, int howmany, fftwf_complex *in, const int *inembed, int istride, int idist, float *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r(int rank, const int *n, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r_1d(int n,fftwf_complex *in,float *out,unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r_2d(int n0, int n1, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_dft_c2r_3d(int n0, int n1, int n2, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru_dft_r2c(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_guru_dft_c2r(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru_split_dft_r2c( int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *in, float *ro, float *io, unsigned flags); extern fftwf_plan fftwf_plan_guru_split_dft_c2r( int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *ri, float *ii, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru64_dft_r2c(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *in, fftwf_complex *out, unsigned flags); extern fftwf_plan fftwf_plan_guru64_dft_c2r(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, fftwf_complex *in, float *out, unsigned flags); extern fftwf_plan fftwf_plan_guru64_split_dft_r2c( int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *in, float *ro, float *io, unsigned flags); extern fftwf_plan fftwf_plan_guru64_split_dft_c2r( int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *ri, float *ii, float *out, unsigned flags); extern void fftwf_execute_dft_r2c(const fftwf_plan p, float *in, fftwf_complex *out); extern void fftwf_execute_dft_c2r(const fftwf_plan p, fftwf_complex *in, float *out); extern void fftwf_execute_split_dft_r2c(const fftwf_plan p, float *in, float *ro, float *io); extern void fftwf_execute_split_dft_c2r(const fftwf_plan p, float *ri, float *ii, float *out); extern fftwf_plan fftwf_plan_many_r2r(int rank, const int *n, int howmany, float *in, const int *inembed, int istride, int idist, float *out, const int *onembed, int ostride, int odist, const fftwf_r2r_kind *kind, unsigned flags); extern fftwf_plan fftwf_plan_r2r(int rank, const int *n, float *in, float *out, const fftwf_r2r_kind *kind, unsigned flags); extern fftwf_plan fftwf_plan_r2r_1d(int n, float *in, float *out, fftwf_r2r_kind kind, unsigned flags); extern fftwf_plan fftwf_plan_r2r_2d(int n0, int n1, float *in, float *out, fftwf_r2r_kind kind0, fftwf_r2r_kind kind1, unsigned flags); extern fftwf_plan fftwf_plan_r2r_3d(int n0, int n1, int n2, float *in, float *out, fftwf_r2r_kind kind0, fftwf_r2r_kind kind1, fftwf_r2r_kind kind2, unsigned flags); extern fftwf_plan fftwf_plan_guru_r2r(int rank, const fftwf_iodim *dims, int howmany_rank, const fftwf_iodim *howmany_dims, float *in, float *out, const fftwf_r2r_kind *kind, unsigned flags); extern fftwf_plan fftwf_plan_guru64_r2r(int rank, const fftwf_iodim64 *dims, int howmany_rank, const fftwf_iodim64 *howmany_dims, float *in, float *out, const fftwf_r2r_kind *kind, unsigned flags); extern void fftwf_execute_r2r(const fftwf_plan p, float *in, float *out); extern void fftwf_destroy_plan(fftwf_plan p); extern void fftwf_forget_wisdom(void); extern void fftwf_cleanup(void); extern void fftwf_set_timelimit(double t); extern void fftwf_plan_with_nthreads(int nthreads); extern int fftwf_init_threads(void); extern void fftwf_cleanup_threads(void); extern int fftwf_export_wisdom_to_filename(const char *filename); extern void fftwf_export_wisdom_to_file(FILE *output_file); extern char *fftwf_export_wisdom_to_string(void); extern void fftwf_export_wisdom(fftwf_write_char_func write_char, void *data); extern int fftwf_import_system_wisdom(void); extern int fftwf_import_wisdom_from_filename(const char *filename); extern int fftwf_import_wisdom_from_file(FILE *input_file); extern int fftwf_import_wisdom_from_string(const char *input_string); extern int fftwf_import_wisdom(fftwf_read_char_func read_char, void *data); extern void fftwf_fprint_plan(const fftwf_plan p, FILE *output_file); extern void fftwf_print_plan(const fftwf_plan p); extern char *fftwf_sprint_plan(const fftwf_plan p); extern void *fftwf_malloc(size_t n); extern float *fftwf_alloc_real(size_t n); extern fftwf_complex *fftwf_alloc_complex(size_t n); extern void fftwf_free(void *p); extern void fftwf_flops(const fftwf_plan p, double *add, double *mul, double *fmas); extern double fftwf_estimate_cost(const fftwf_plan p); extern double fftwf_cost(const fftwf_plan p); extern int fftwf_alignment_of(float *p); extern const char fftwf_version[]; extern const char fftwf_cc[]; extern const char fftwf_codelet_optim[]; >typedef long double fftwl_complex[2]; typedef struct fftwl_plan_s *fftwl_plan; typedef struct fftw_iodim_do_not_use_me fftwl_iodim; typedef struct fftw_iodim64_do_not_use_me fftwl_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftwl_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftwl_write_char_func; typedef fftw_read_char_func_do_not_use_me fftwl_read_char_func; extern void fftwl_execute(const fftwl_plan p); extern fftwl_plan fftwl_plan_dft(int rank, const int *n, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_dft_1d(int n, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_dft_2d(int n0, int n1, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_dft_3d(int n0, int n1, int n2, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_many_dft(int rank, const int *n, int howmany, fftwl_complex *in, const int *inembed, int istride, int idist, fftwl_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftwl_plan fftwl_plan_guru_dft(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_guru_split_dft(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *ri, long double *ii, long double *ro, long double *io, unsigned flags); extern fftwl_plan fftwl_plan_guru64_dft(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, fftwl_complex *in, fftwl_complex *out, int sign, unsigned flags); extern fftwl_plan fftwl_plan_guru64_split_dft(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *ri, long double *ii, long double *ro, long double *io, unsigned flags); extern void fftwl_execute_dft(const fftwl_plan p, fftwl_complex *in, fftwl_complex *out); extern void fftwl_execute_split_dft(const fftwl_plan p, long double *ri, long double *ii, long double *ro, long double *io); extern fftwl_plan fftwl_plan_many_dft_r2c(int rank, const int *n, int howmany, long double *in, const int *inembed, int istride, int idist, fftwl_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c(int rank, const int *n, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c_1d(int n,long double *in,fftwl_complex *out,unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c_2d(int n0, int n1, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_r2c_3d(int n0, int n1, int n2, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_many_dft_c2r(int rank, const int *n, int howmany, fftwl_complex *in, const int *inembed, int istride, int idist, long double *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r(int rank, const int *n, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r_1d(int n,fftwl_complex *in,long double *out,unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r_2d(int n0, int n1, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_dft_c2r_3d(int n0, int n1, int n2, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru_dft_r2c(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_guru_dft_c2r(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru_split_dft_r2c( int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *in, long double *ro, long double *io, unsigned flags); extern fftwl_plan fftwl_plan_guru_split_dft_c2r( int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *ri, long double *ii, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru64_dft_r2c(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *in, fftwl_complex *out, unsigned flags); extern fftwl_plan fftwl_plan_guru64_dft_c2r(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, fftwl_complex *in, long double *out, unsigned flags); extern fftwl_plan fftwl_plan_guru64_split_dft_r2c( int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *in, long double *ro, long double *io, unsigned flags); extern fftwl_plan fftwl_plan_guru64_split_dft_c2r( int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *ri, long double *ii, long double *out, unsigned flags); extern void fftwl_execute_dft_r2c(const fftwl_plan p, long double *in, fftwl_complex *out); extern void fftwl_execute_dft_c2r(const fftwl_plan p, fftwl_complex *in, long double *out); extern void fftwl_execute_split_dft_r2c(const fftwl_plan p, long double *in, long double *ro, long double *io); extern void fftwl_execute_split_dft_c2r(const fftwl_plan p, long double *ri, long double *ii, long double *out); extern fftwl_plan fftwl_plan_many_r2r(int rank, const int *n, int howmany, long double *in, const int *inembed, int istride, int idist, long double *out, const int *onembed, int ostride, int odist, const fftwl_r2r_kind *kind, unsigned flags); extern fftwl_plan fftwl_plan_r2r(int rank, const int *n, long double *in, long double *out, const fftwl_r2r_kind *kind, unsigned flags); extern fftwl_plan fftwl_plan_r2r_1d(int n, long double *in, long double *out, fftwl_r2r_kind kind, unsigned flags); extern fftwl_plan fftwl_plan_r2r_2d(int n0, int n1, long double *in, long double *out, fftwl_r2r_kind kind0, fftwl_r2r_kind kind1, unsigned flags); extern fftwl_plan fftwl_plan_r2r_3d(int n0, int n1, int n2, long double *in, long double *out, fftwl_r2r_kind kind0, fftwl_r2r_kind kind1, fftwl_r2r_kind kind2, unsigned flags); extern fftwl_plan fftwl_plan_guru_r2r(int rank, const fftwl_iodim *dims, int howmany_rank, const fftwl_iodim *howmany_dims, long double *in, long double *out, const fftwl_r2r_kind *kind, unsigned flags); extern fftwl_plan fftwl_plan_guru64_r2r(int rank, const fftwl_iodim64 *dims, int howmany_rank, const fftwl_iodim64 *howmany_dims, long double *in, long double *out, const fftwl_r2r_kind *kind, unsigned flags); extern void fftwl_execute_r2r(const fftwl_plan p, long double *in, long double *out); extern void fftwl_destroy_plan(fftwl_plan p); extern void fftwl_forget_wisdom(void); extern void fftwl_cleanup(void); extern void fftwl_set_timelimit(double t); extern void fftwl_plan_with_nthreads(int nthreads); extern int fftwl_init_threads(void); extern void fftwl_cleanup_threads(void); extern int fftwl_export_wisdom_to_filename(const char *filename); extern void fftwl_export_wisdom_to_file(FILE *output_file); extern char *fftwl_export_wisdom_to_string(void); extern void fftwl_export_wisdom(fftwl_write_char_func write_char, void *data); extern int fftwl_import_system_wisdom(void); extern int fftwl_import_wisdom_from_filename(const char *filename); extern int fftwl_import_wisdom_from_file(FILE *input_file); extern int fftwl_import_wisdom_from_string(const char *input_string); extern int fftwl_import_wisdom(fftwl_read_char_func read_char, void *data); extern void fftwl_fprint_plan(const fftwl_plan p, FILE *output_file); extern void fftwl_print_plan(const fftwl_plan p); extern char *fftwl_sprint_plan(const fftwl_plan p); extern void *fftwl_malloc(size_t n); extern long double *fftwl_alloc_real(size_t n); extern fftwl_complex *fftwl_alloc_complex(size_t n); extern void fftwl_free(void *p); extern void fftwl_flops(const fftwl_plan p, double *add, double *mul, double *fmas); extern double fftwl_estimate_cost(const fftwl_plan p); extern double fftwl_cost(const fftwl_plan p); extern int fftwl_alignment_of(long double *p); extern const char fftwl_version[]; extern const char fftwl_cc[]; extern const char fftwl_codelet_optim[]; ># 373 "/usr/include/fftw3.h" 3 4 >typedef __float128 fftwq_complex[2]; typedef struct fftwq_plan_s *fftwq_plan; typedef struct fftw_iodim_do_not_use_me fftwq_iodim; typedef struct fftw_iodim64_do_not_use_me fftwq_iodim64; typedef enum fftw_r2r_kind_do_not_use_me fftwq_r2r_kind; typedef fftw_write_char_func_do_not_use_me fftwq_write_char_func; typedef fftw_read_char_func_do_not_use_me fftwq_read_char_func; extern void fftwq_execute(const fftwq_plan p); extern fftwq_plan fftwq_plan_dft(int rank, const int *n, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_dft_1d(int n, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_dft_2d(int n0, int n1, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_dft_3d(int n0, int n1, int n2, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_many_dft(int rank, const int *n, int howmany, fftwq_complex *in, const int *inembed, int istride, int idist, fftwq_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); extern fftwq_plan fftwq_plan_guru_dft(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_guru_split_dft(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *ri, __float128 *ii, __float128 *ro, __float128 *io, unsigned flags); extern fftwq_plan fftwq_plan_guru64_dft(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, fftwq_complex *in, fftwq_complex *out, int sign, unsigned flags); extern fftwq_plan fftwq_plan_guru64_split_dft(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *ri, __float128 *ii, __float128 *ro, __float128 *io, unsigned flags); extern void fftwq_execute_dft(const fftwq_plan p, fftwq_complex *in, fftwq_complex *out); extern void fftwq_execute_split_dft(const fftwq_plan p, __float128 *ri, __float128 *ii, __float128 *ro, __float128 *io); extern fftwq_plan fftwq_plan_many_dft_r2c(int rank, const int *n, int howmany, __float128 *in, const int *inembed, int istride, int idist, fftwq_complex *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c(int rank, const int *n, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c_1d(int n,__float128 *in,fftwq_complex *out,unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c_2d(int n0, int n1, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_r2c_3d(int n0, int n1, int n2, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_many_dft_c2r(int rank, const int *n, int howmany, fftwq_complex *in, const int *inembed, int istride, int idist, __float128 *out, const int *onembed, int ostride, int odist, unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r(int rank, const int *n, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r_1d(int n,fftwq_complex *in,__float128 *out,unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r_2d(int n0, int n1, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_dft_c2r_3d(int n0, int n1, int n2, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru_dft_r2c(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_guru_dft_c2r(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru_split_dft_r2c( int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *in, __float128 *ro, __float128 *io, unsigned flags); extern fftwq_plan fftwq_plan_guru_split_dft_c2r( int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *ri, __float128 *ii, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru64_dft_r2c(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *in, fftwq_complex *out, unsigned flags); extern fftwq_plan fftwq_plan_guru64_dft_c2r(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, fftwq_complex *in, __float128 *out, unsigned flags); extern fftwq_plan fftwq_plan_guru64_split_dft_r2c( int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *in, __float128 *ro, __float128 *io, unsigned flags); extern fftwq_plan fftwq_plan_guru64_split_dft_c2r( int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *ri, __float128 *ii, __float128 *out, unsigned flags); extern void fftwq_execute_dft_r2c(const fftwq_plan p, __float128 *in, fftwq_complex *out); extern void fftwq_execute_dft_c2r(const fftwq_plan p, fftwq_complex *in, __float128 *out); extern void fftwq_execute_split_dft_r2c(const fftwq_plan p, __float128 *in, __float128 *ro, __float128 *io); extern void fftwq_execute_split_dft_c2r(const fftwq_plan p, __float128 *ri, __float128 *ii, __float128 *out); extern fftwq_plan fftwq_plan_many_r2r(int rank, const int *n, int howmany, __float128 *in, const int *inembed, int istride, int idist, __float128 *out, const int *onembed, int ostride, int odist, const fftwq_r2r_kind *kind, unsigned flags); extern fftwq_plan fftwq_plan_r2r(int rank, const int *n, __float128 *in, __float128 *out, const fftwq_r2r_kind *kind, unsigned flags); extern fftwq_plan fftwq_plan_r2r_1d(int n, __float128 *in, __float128 *out, fftwq_r2r_kind kind, unsigned flags); extern fftwq_plan fftwq_plan_r2r_2d(int n0, int n1, __float128 *in, __float128 *out, fftwq_r2r_kind kind0, fftwq_r2r_kind kind1, unsigned flags); extern fftwq_plan fftwq_plan_r2r_3d(int n0, int n1, int n2, __float128 *in, __float128 *out, fftwq_r2r_kind kind0, fftwq_r2r_kind kind1, fftwq_r2r_kind kind2, unsigned flags); extern fftwq_plan fftwq_plan_guru_r2r(int rank, const fftwq_iodim *dims, int howmany_rank, const fftwq_iodim *howmany_dims, __float128 *in, __float128 *out, const fftwq_r2r_kind *kind, unsigned flags); extern fftwq_plan fftwq_plan_guru64_r2r(int rank, const fftwq_iodim64 *dims, int howmany_rank, const fftwq_iodim64 *howmany_dims, __float128 *in, __float128 *out, const fftwq_r2r_kind *kind, unsigned flags); extern void fftwq_execute_r2r(const fftwq_plan p, __float128 *in, __float128 *out); extern void fftwq_destroy_plan(fftwq_plan p); extern void fftwq_forget_wisdom(void); extern void fftwq_cleanup(void); extern void fftwq_set_timelimit(double t); extern void fftwq_plan_with_nthreads(int nthreads); extern int fftwq_init_threads(void); extern void fftwq_cleanup_threads(void); extern int fftwq_export_wisdom_to_filename(const char *filename); extern void fftwq_export_wisdom_to_file(FILE *output_file); extern char *fftwq_export_wisdom_to_string(void); extern void fftwq_export_wisdom(fftwq_write_char_func write_char, void *data); extern int fftwq_import_system_wisdom(void); extern int fftwq_import_wisdom_from_filename(const char *filename); extern int fftwq_import_wisdom_from_file(FILE *input_file); extern int fftwq_import_wisdom_from_string(const char *input_string); extern int fftwq_import_wisdom(fftwq_read_char_func read_char, void *data); extern void fftwq_fprint_plan(const fftwq_plan p, FILE *output_file); extern void fftwq_print_plan(const fftwq_plan p); extern char *fftwq_sprint_plan(const fftwq_plan p); extern void *fftwq_malloc(size_t n); extern __float128 *fftwq_alloc_real(size_t n); extern fftwq_complex *fftwq_alloc_complex(size_t n); extern void fftwq_free(void *p); extern void fftwq_flops(const fftwq_plan p, double *add, double *mul, double *fmas); extern double fftwq_estimate_cost(const fftwq_plan p); extern double fftwq_cost(const fftwq_plan p); extern int fftwq_alignment_of(__float128 *p); extern const char fftwq_version[]; extern const char fftwq_cc[]; extern const char fftwq_codelet_optim[]; ># 409 "/usr/include/fftw3.h" 3 4 >} ># 361 "./CImg.h" 2 >} ># 388 "./CImg.h" ># 1 "/usr/include/OpenEXR/ImfRgbaFile.h" 1 ># 50 "/usr/include/OpenEXR/ImfRgbaFile.h" ># 1 "/usr/include/OpenEXR/ImfHeader.h" 1 ># 46 "/usr/include/OpenEXR/ImfHeader.h" ># 1 "/usr/include/OpenEXR/ImfLineOrder.h" 1 ># 46 "/usr/include/OpenEXR/ImfLineOrder.h" >namespace Imf { > > >enum LineOrder >{ > INCREASING_Y = 0, > > DECREASING_Y = 1, > > RANDOM_Y = 2, > > > NUM_LINEORDERS >}; > > >} ># 47 "/usr/include/OpenEXR/ImfHeader.h" 2 ># 1 "/usr/include/OpenEXR/ImfCompression.h" 1 ># 46 "/usr/include/OpenEXR/ImfCompression.h" >namespace Imf { > > >enum Compression >{ > NO_COMPRESSION = 0, > > RLE_COMPRESSION = 1, > > ZIPS_COMPRESSION = 2, > > ZIP_COMPRESSION = 3, > > PIZ_COMPRESSION = 4, > > PXR24_COMPRESSION = 5, > > B44_COMPRESSION = 6, > > > B44A_COMPRESSION = 7, > > > NUM_COMPRESSION_METHODS >}; > > >} ># 48 "/usr/include/OpenEXR/ImfHeader.h" 2 ># 1 "/usr/include/OpenEXR/ImfName.h" 1 ># 49 "/usr/include/OpenEXR/ImfName.h" >namespace Imf { > > >class Name >{ > public: > > > > > > Name (); > Name (const char text[]); > > > > > > > Name & operator = (const char text[]); > > > > > > > const char * text () const {return _text;} > const char * operator * () const {return _text;} > > > > > > static const int SIZE = 256; > static const int MAX_LENGTH = SIZE - 1; > > private: > > char _text[SIZE]; >}; > > >bool operator == (const Name &x, const Name &y); >bool operator != (const Name &x, const Name &y); >bool operator < (const Name &x, const Name &y); > > > > > > >inline Name & >Name::operator = (const char text[]) >{ > strncpy (_text, text, MAX_LENGTH); > return *this; >} > > >inline >Name::Name () >{ > _text[0] = 0; >} > > >inline >Name::Name (const char text[]) >{ > *this = text; > _text [MAX_LENGTH] = 0; >} > > >inline bool >operator == (const Name &x, const Name &y) >{ > return strcmp (*x, *y) == 0; >} > > >inline bool >operator != (const Name &x, const Name &y) >{ > return !(x == y); >} > > >inline bool >operator < (const Name &x, const Name &y) >{ > return strcmp (*x, *y) < 0; >} > > >} ># 49 "/usr/include/OpenEXR/ImfHeader.h" 2 ># 1 "/usr/include/OpenEXR/ImfTileDescription.h" 1 ># 45 "/usr/include/OpenEXR/ImfTileDescription.h" >namespace Imf { > > >enum LevelMode >{ > ONE_LEVEL = 0, > MIPMAP_LEVELS = 1, > RIPMAP_LEVELS = 2, > > NUM_LEVELMODES >}; > > >enum LevelRoundingMode >{ > ROUND_DOWN = 0, > ROUND_UP = 1, > > NUM_ROUNDINGMODES >}; > > >class TileDescription >{ > public: > > unsigned int xSize; > unsigned int ySize; > LevelMode mode; > LevelRoundingMode roundingMode; > > TileDescription (unsigned int xs = 32, > unsigned int ys = 32, > LevelMode m = ONE_LEVEL, > LevelRoundingMode r = ROUND_DOWN) > : > xSize (xs), > ySize (ys), > mode (m), > roundingMode (r) > { > > } > > bool > operator == (const TileDescription &other) const > { > return xSize == other.xSize && > ySize == other.ySize && > mode == other.mode && > roundingMode == other.roundingMode; > } >}; > > >} ># 50 "/usr/include/OpenEXR/ImfHeader.h" 2 ># 1 "/usr/include/OpenEXR/ImfInt64.h" 1 ># 44 "/usr/include/OpenEXR/ImfInt64.h" ># 1 "/usr/include/OpenEXR/ImathInt64.h" 1 ># 45 "/usr/include/OpenEXR/ImathInt64.h" ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 1 3 4 ># 46 "/usr/include/OpenEXR/ImathInt64.h" 2 > >namespace Imath { > > > > > > typedef long unsigned int Int64; > > > > > >} ># 45 "/usr/include/OpenEXR/ImfInt64.h" 2 > >namespace Imf { > >using Imath::Int64; > >} ># 51 "/usr/include/OpenEXR/ImfHeader.h" 2 ># 1 "/usr/include/OpenEXR/ImathVec.h" 1 ># 46 "/usr/include/OpenEXR/ImathVec.h" ># 1 "/usr/include/OpenEXR/ImathExc.h" 1 ># 47 "/usr/include/OpenEXR/ImathExc.h" ># 1 "/usr/include/OpenEXR/IexBaseExc.h" 1 ># 50 "/usr/include/OpenEXR/IexBaseExc.h" ># 1 "/usr/include/c++/4.8.2/sstream" 1 3 ># 36 "/usr/include/c++/4.8.2/sstream" 3 > ># 37 "/usr/include/c++/4.8.2/sstream" 3 > ># 1 "/usr/include/c++/4.8.2/istream" 1 3 ># 36 "/usr/include/c++/4.8.2/istream" 3 > ># 37 "/usr/include/c++/4.8.2/istream" 3 > ># 1 "/usr/include/c++/4.8.2/ios" 1 3 ># 36 "/usr/include/c++/4.8.2/ios" 3 > ># 37 "/usr/include/c++/4.8.2/ios" 3 > > > > > > > ># 1 "/usr/include/c++/4.8.2/bits/basic_ios.h" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > ># 34 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _Facet> > inline const _Facet& > __check_facet(const _Facet* __f) > { > if (!__f) > __throw_bad_cast(); > return *__f; > } ># 65 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > template<typename _CharT, typename _Traits> > class basic_ios : public ios_base > { > public: > > > > > > > typedef _CharT char_type; > typedef typename _Traits::int_type int_type; > typedef typename _Traits::pos_type pos_type; > typedef typename _Traits::off_type off_type; > typedef _Traits traits_type; > > > > > > > typedef ctype<_CharT> __ctype_type; > typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > > __num_put_type; > typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > > __num_get_type; > > > > protected: > basic_ostream<_CharT, _Traits>* _M_tie; > mutable char_type _M_fill; > mutable bool _M_fill_init; > basic_streambuf<_CharT, _Traits>* _M_streambuf; > > > const __ctype_type* _M_ctype; > > const __num_put_type* _M_num_put; > > const __num_get_type* _M_num_get; > > public: > > > > > > > > operator void*() const > { return this->fail() ? 0 : const_cast<basic_ios*>(this); } > > bool > operator!() const > { return this->fail(); } ># 130 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > iostate > rdstate() const > { return _M_streambuf_state; } ># 141 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > void > clear(iostate __state = goodbit); > > > > > > > > void > setstate(iostate __state) > { this->clear(this->rdstate() | __state); } > > > > > void > _M_setstate(iostate __state) > { > > > _M_streambuf_state |= __state; > if (this->exceptions() & __state) > throw; > } > > > > > > > > bool > good() const > { return this->rdstate() == 0; } > > > > > > > > bool > eof() const > { return (this->rdstate() & eofbit) != 0; } ># 194 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > bool > fail() const > { return (this->rdstate() & (badbit | failbit)) != 0; } > > > > > > > > bool > bad() const > { return (this->rdstate() & badbit) != 0; } ># 215 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > iostate > exceptions() const > { return _M_exception; } ># 250 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > void > exceptions(iostate __except) > { > _M_exception = __except; > this->clear(_M_streambuf_state); > } > > > > > > > > explicit > basic_ios(basic_streambuf<_CharT, _Traits>* __sb) > : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0), > _M_ctype(0), _M_num_put(0), _M_num_get(0) > { this->init(__sb); } > > > > > > > > virtual > ~basic_ios() { } ># 288 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > basic_ostream<_CharT, _Traits>* > tie() const > { return _M_tie; } ># 300 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > basic_ostream<_CharT, _Traits>* > tie(basic_ostream<_CharT, _Traits>* __tiestr) > { > basic_ostream<_CharT, _Traits>* __old = _M_tie; > _M_tie = __tiestr; > return __old; > } > > > > > > > > basic_streambuf<_CharT, _Traits>* > rdbuf() const > { return _M_streambuf; } ># 340 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > basic_streambuf<_CharT, _Traits>* > rdbuf(basic_streambuf<_CharT, _Traits>* __sb); ># 354 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > basic_ios& > copyfmt(const basic_ios& __rhs); > > > > > > > > char_type > fill() const > { > if (!_M_fill_init) > { > _M_fill = this->widen(' '); > _M_fill_init = true; > } > return _M_fill; > } ># 383 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > char_type > fill(char_type __ch) > { > char_type __old = this->fill(); > _M_fill = __ch; > return __old; > } ># 403 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > locale > imbue(const locale& __loc); ># 423 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > char > narrow(char_type __c, char __dfault) const > { return __check_facet(_M_ctype).narrow(__c, __dfault); } ># 442 "/usr/include/c++/4.8.2/bits/basic_ios.h" 3 > char_type > widen(char __c) const > { return __check_facet(_M_ctype).widen(__c); } > > protected: > > > > > > > > basic_ios() > : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false), > _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0) > { } > > > > > > > > void > init(basic_streambuf<_CharT, _Traits>* __sb); > > void > _M_cache_locale(const locale& __loc); > }; > > >} > ># 1 "/usr/include/c++/4.8.2/bits/basic_ios.tcc" 1 3 ># 33 "/usr/include/c++/4.8.2/bits/basic_ios.tcc" 3 > ># 34 "/usr/include/c++/4.8.2/bits/basic_ios.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > void > basic_ios<_CharT, _Traits>::clear(iostate __state) > { > if (this->rdbuf()) > _M_streambuf_state = __state; > else > _M_streambuf_state = __state | badbit; > if (this->exceptions() & this->rdstate()) > __throw_ios_failure(("basic_ios::clear")); > } > > template<typename _CharT, typename _Traits> > basic_streambuf<_CharT, _Traits>* > basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb) > { > basic_streambuf<_CharT, _Traits>* __old = _M_streambuf; > _M_streambuf = __sb; > this->clear(); > return __old; > } > > template<typename _CharT, typename _Traits> > basic_ios<_CharT, _Traits>& > basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) > { > > > if (this != &__rhs) > { > > > > > _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ? > _M_local_word : new _Words[__rhs._M_word_size]; > > > _Callback_list* __cb = __rhs._M_callbacks; > if (__cb) > __cb->_M_add_reference(); > _M_call_callbacks(erase_event); > if (_M_word != _M_local_word) > { > delete [] _M_word; > _M_word = 0; > } > _M_dispose_callbacks(); > > > _M_callbacks = __cb; > for (int __i = 0; __i < __rhs._M_word_size; ++__i) > __words[__i] = __rhs._M_word[__i]; > _M_word = __words; > _M_word_size = __rhs._M_word_size; > > this->flags(__rhs.flags()); > this->width(__rhs.width()); > this->precision(__rhs.precision()); > this->tie(__rhs.tie()); > this->fill(__rhs.fill()); > _M_ios_locale = __rhs.getloc(); > _M_cache_locale(_M_ios_locale); > > _M_call_callbacks(copyfmt_event); > > > this->exceptions(__rhs.exceptions()); > } > return *this; > } > > > template<typename _CharT, typename _Traits> > locale > basic_ios<_CharT, _Traits>::imbue(const locale& __loc) > { > locale __old(this->getloc()); > ios_base::imbue(__loc); > _M_cache_locale(__loc); > if (this->rdbuf() != 0) > this->rdbuf()->pubimbue(__loc); > return __old; > } > > template<typename _CharT, typename _Traits> > void > basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb) > { > > ios_base::_M_init(); > > > _M_cache_locale(_M_ios_locale); ># 146 "/usr/include/c++/4.8.2/bits/basic_ios.tcc" 3 > _M_fill = _CharT(); > _M_fill_init = false; > > _M_tie = 0; > _M_exception = goodbit; > _M_streambuf = __sb; > _M_streambuf_state = __sb ? goodbit : badbit; > } > > template<typename _CharT, typename _Traits> > void > basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc) > { > if (__builtin_expect(has_facet<__ctype_type>(__loc), true)) > _M_ctype = &use_facet<__ctype_type>(__loc); > else > _M_ctype = 0; > > if (__builtin_expect(has_facet<__num_put_type>(__loc), true)) > _M_num_put = &use_facet<__num_put_type>(__loc); > else > _M_num_put = 0; > > if (__builtin_expect(has_facet<__num_get_type>(__loc), true)) > _M_num_get = &use_facet<__num_get_type>(__loc); > else > _M_num_get = 0; > } > > > > > extern template class basic_ios<char>; > > > extern template class basic_ios<wchar_t>; > > > > >} ># 476 "/usr/include/c++/4.8.2/bits/basic_ios.h" 2 3 ># 45 "/usr/include/c++/4.8.2/ios" 2 3 ># 39 "/usr/include/c++/4.8.2/istream" 2 3 ># 1 "/usr/include/c++/4.8.2/ostream" 1 3 ># 36 "/usr/include/c++/4.8.2/ostream" 3 > ># 37 "/usr/include/c++/4.8.2/ostream" 3 > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 57 "/usr/include/c++/4.8.2/ostream" 3 > template<typename _CharT, typename _Traits> > class basic_ostream : virtual public basic_ios<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef typename _Traits::int_type int_type; > typedef typename _Traits::pos_type pos_type; > typedef typename _Traits::off_type off_type; > typedef _Traits traits_type; > > > typedef basic_streambuf<_CharT, _Traits> __streambuf_type; > typedef basic_ios<_CharT, _Traits> __ios_type; > typedef basic_ostream<_CharT, _Traits> __ostream_type; > typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > > __num_put_type; > typedef ctype<_CharT> __ctype_type; ># 83 "/usr/include/c++/4.8.2/ostream" 3 > explicit > basic_ostream(__streambuf_type* __sb) > { this->init(__sb); } > > > > > > > virtual > ~basic_ostream() { } > > > class sentry; > friend class sentry; ># 107 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > operator<<(__ostream_type& (*__pf)(__ostream_type&)) > { > > > > return __pf(*this); > } > > __ostream_type& > operator<<(__ios_type& (*__pf)(__ios_type&)) > { > > > > __pf(*this); > return *this; > } > > __ostream_type& > operator<<(ios_base& (*__pf) (ios_base&)) > { > > > > __pf(*this); > return *this; > } ># 165 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > operator<<(long __n) > { return _M_insert(__n); } > > __ostream_type& > operator<<(unsigned long __n) > { return _M_insert(__n); } > > __ostream_type& > operator<<(bool __n) > { return _M_insert(__n); } > > __ostream_type& > operator<<(short __n); > > __ostream_type& > operator<<(unsigned short __n) > { > > > return _M_insert(static_cast<unsigned long>(__n)); > } > > __ostream_type& > operator<<(int __n); > > __ostream_type& > operator<<(unsigned int __n) > { > > > return _M_insert(static_cast<unsigned long>(__n)); > } > > > __ostream_type& > operator<<(long long __n) > { return _M_insert(__n); } > > __ostream_type& > operator<<(unsigned long long __n) > { return _M_insert(__n); } ># 219 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > operator<<(double __f) > { return _M_insert(__f); } > > __ostream_type& > operator<<(float __f) > { > > > return _M_insert(static_cast<double>(__f)); > } > > __ostream_type& > operator<<(long double __f) > { return _M_insert(__f); } ># 244 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > operator<<(const void* __p) > { return _M_insert(__p); } ># 269 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > operator<<(__streambuf_type* __sb); ># 302 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > put(char_type __c); > > > > > > > void > _M_write(const char_type* __s, streamsize __n) > { > const streamsize __put = this->rdbuf()->sputn(__s, __n); > if (__put != __n) > this->setstate(ios_base::badbit); > } ># 334 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > write(const char_type* __s, streamsize __n); ># 347 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > flush(); ># 357 "/usr/include/c++/4.8.2/ostream" 3 > pos_type > tellp(); ># 368 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > seekp(pos_type); ># 380 "/usr/include/c++/4.8.2/ostream" 3 > __ostream_type& > seekp(off_type, ios_base::seekdir); > > protected: > basic_ostream() > { this->init(0); } > > template<typename _ValueT> > __ostream_type& > _M_insert(_ValueT __v); > }; ># 399 "/usr/include/c++/4.8.2/ostream" 3 > template <typename _CharT, typename _Traits> > class basic_ostream<_CharT, _Traits>::sentry > { > > bool _M_ok; > basic_ostream<_CharT, _Traits>& _M_os; > > public: ># 418 "/usr/include/c++/4.8.2/ostream" 3 > explicit > sentry(basic_ostream<_CharT, _Traits>& __os); ># 428 "/usr/include/c++/4.8.2/ostream" 3 > ~sentry() > { > > if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception()) > { > > if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1) > _M_os.setstate(ios_base::badbit); > } > } ># 449 "/usr/include/c++/4.8.2/ostream" 3 > operator bool() const > { return _M_ok; } > }; ># 469 "/usr/include/c++/4.8.2/ostream" 3 > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c) > { return __ostream_insert(__out, &__c, 1); } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __out, char __c) > { return (__out << __out.widen(__c)); } > > > template <class _Traits> > inline basic_ostream<char, _Traits>& > operator<<(basic_ostream<char, _Traits>& __out, char __c) > { return __ostream_insert(__out, &__c, 1); } > > > template<class _Traits> > inline basic_ostream<char, _Traits>& > operator<<(basic_ostream<char, _Traits>& __out, signed char __c) > { return (__out << static_cast<char>(__c)); } > > template<class _Traits> > inline basic_ostream<char, _Traits>& > operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c) > { return (__out << static_cast<char>(__c)); } ># 511 "/usr/include/c++/4.8.2/ostream" 3 > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s) > { > if (!__s) > __out.setstate(ios_base::badbit); > else > __ostream_insert(__out, __s, > static_cast<streamsize>(_Traits::length(__s))); > return __out; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits> & > operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s); > > > template<class _Traits> > inline basic_ostream<char, _Traits>& > operator<<(basic_ostream<char, _Traits>& __out, const char* __s) > { > if (!__s) > __out.setstate(ios_base::badbit); > else > __ostream_insert(__out, __s, > static_cast<streamsize>(_Traits::length(__s))); > return __out; > } > > > template<class _Traits> > inline basic_ostream<char, _Traits>& > operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s) > { return (__out << reinterpret_cast<const char*>(__s)); } > > template<class _Traits> > inline basic_ostream<char, _Traits> & > operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s) > { return (__out << reinterpret_cast<const char*>(__s)); } ># 562 "/usr/include/c++/4.8.2/ostream" 3 > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > endl(basic_ostream<_CharT, _Traits>& __os) > { return flush(__os.put(__os.widen('\n'))); } ># 574 "/usr/include/c++/4.8.2/ostream" 3 > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > ends(basic_ostream<_CharT, _Traits>& __os) > { return __os.put(_CharT()); } > > > > > > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > flush(basic_ostream<_CharT, _Traits>& __os) > { return __os.flush(); } ># 606 "/usr/include/c++/4.8.2/ostream" 3 > >} > ># 1 "/usr/include/c++/4.8.2/bits/ostream.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/ostream.tcc" 3 > ># 38 "/usr/include/c++/4.8.2/bits/ostream.tcc" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>::sentry:: > sentry(basic_ostream<_CharT, _Traits>& __os) > : _M_ok(false), _M_os(__os) > { > > if (__os.tie() && __os.good()) > __os.tie()->flush(); > > if (__os.good()) > _M_ok = true; > else > __os.setstate(ios_base::failbit); > } > > template<typename _CharT, typename _Traits> > template<typename _ValueT> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > _M_insert(_ValueT __v) > { > sentry __cerb(*this); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const __num_put_type& __np = __check_facet(this->_M_num_put); > if (__np.put(*this, *this, this->fill(), __v).failed()) > __err |= ios_base::badbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > operator<<(short __n) > { > > > const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; > if (__fmt == ios_base::oct || __fmt == ios_base::hex) > return _M_insert(static_cast<long>(static_cast<unsigned short>(__n))); > else > return _M_insert(static_cast<long>(__n)); > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > operator<<(int __n) > { > > > const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; > if (__fmt == ios_base::oct || __fmt == ios_base::hex) > return _M_insert(static_cast<long>(static_cast<unsigned int>(__n))); > else > return _M_insert(static_cast<long>(__n)); > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > operator<<(__streambuf_type* __sbin) > { > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this); > if (__cerb && __sbin) > { > try > { > if (!__copy_streambufs(__sbin, this->rdbuf())) > __err |= ios_base::failbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::failbit); } > } > else if (!__sbin) > __err |= ios_base::badbit; > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > put(char_type __c) > { > > > > > > > sentry __cerb(*this); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const int_type __put = this->rdbuf()->sputc(__c); > if (traits_type::eq_int_type(__put, traits_type::eof())) > __err |= ios_base::badbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > write(const _CharT* __s, streamsize __n) > { > > > > > > > > sentry __cerb(*this); > if (__cerb) > { > try > { _M_write(__s, __n); } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > flush() > { > > > > ios_base::iostate __err = ios_base::goodbit; > try > { > if (this->rdbuf() && this->rdbuf()->pubsync() == -1) > __err |= ios_base::badbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > typename basic_ostream<_CharT, _Traits>::pos_type > basic_ostream<_CharT, _Traits>:: > tellp() > { > pos_type __ret = pos_type(-1); > try > { > if (!this->fail()) > __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > return __ret; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > seekp(pos_type __pos) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > if (!this->fail()) > { > > > const pos_type __p = this->rdbuf()->pubseekpos(__pos, > ios_base::out); > > > if (__p == pos_type(off_type(-1))) > __err |= ios_base::failbit; > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > basic_ostream<_CharT, _Traits>:: > seekp(off_type __off, ios_base::seekdir __dir) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > if (!this->fail()) > { > > > const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, > ios_base::out); > > > if (__p == pos_type(off_type(-1))) > __err |= ios_base::failbit; > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s) > { > if (!__s) > __out.setstate(ios_base::badbit); > else > { > > > const size_t __clen = char_traits<char>::length(__s); > try > { > struct __ptr_guard > { > _CharT *__p; > __ptr_guard (_CharT *__ip): __p(__ip) { } > ~__ptr_guard() { delete[] __p; } > _CharT* __get() { return __p; } > } __pg (new _CharT[__clen]); > > _CharT *__ws = __pg.__get(); > for (size_t __i = 0; __i < __clen; ++__i) > __ws[__i] = __out.widen(__s[__i]); > __ostream_insert(__out, __ws, __clen); > } > catch(__cxxabiv1::__forced_unwind&) > { > __out._M_setstate(ios_base::badbit); > throw; > } > catch(...) > { __out._M_setstate(ios_base::badbit); } > } > return __out; > } > > > > > extern template class basic_ostream<char>; > extern template ostream& endl(ostream&); > extern template ostream& ends(ostream&); > extern template ostream& flush(ostream&); > extern template ostream& operator<<(ostream&, char); > extern template ostream& operator<<(ostream&, unsigned char); > extern template ostream& operator<<(ostream&, signed char); > extern template ostream& operator<<(ostream&, const char*); > extern template ostream& operator<<(ostream&, const unsigned char*); > extern template ostream& operator<<(ostream&, const signed char*); > > extern template ostream& ostream::_M_insert(long); > extern template ostream& ostream::_M_insert(unsigned long); > extern template ostream& ostream::_M_insert(bool); > > extern template ostream& ostream::_M_insert(long long); > extern template ostream& ostream::_M_insert(unsigned long long); > > extern template ostream& ostream::_M_insert(double); > extern template ostream& ostream::_M_insert(long double); > extern template ostream& ostream::_M_insert(const void*); > > > extern template class basic_ostream<wchar_t>; > extern template wostream& endl(wostream&); > extern template wostream& ends(wostream&); > extern template wostream& flush(wostream&); > extern template wostream& operator<<(wostream&, wchar_t); > extern template wostream& operator<<(wostream&, char); > extern template wostream& operator<<(wostream&, const wchar_t*); > extern template wostream& operator<<(wostream&, const char*); > > extern template wostream& wostream::_M_insert(long); > extern template wostream& wostream::_M_insert(unsigned long); > extern template wostream& wostream::_M_insert(bool); > > extern template wostream& wostream::_M_insert(long long); > extern template wostream& wostream::_M_insert(unsigned long long); > > extern template wostream& wostream::_M_insert(double); > extern template wostream& wostream::_M_insert(long double); > extern template wostream& wostream::_M_insert(const void*); > > > > >} ># 610 "/usr/include/c++/4.8.2/ostream" 2 3 ># 40 "/usr/include/c++/4.8.2/istream" 2 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 57 "/usr/include/c++/4.8.2/istream" 3 > template<typename _CharT, typename _Traits> > class basic_istream : virtual public basic_ios<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef typename _Traits::int_type int_type; > typedef typename _Traits::pos_type pos_type; > typedef typename _Traits::off_type off_type; > typedef _Traits traits_type; > > > typedef basic_streambuf<_CharT, _Traits> __streambuf_type; > typedef basic_ios<_CharT, _Traits> __ios_type; > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > > __num_get_type; > typedef ctype<_CharT> __ctype_type; > > protected: > > > > > > streamsize _M_gcount; > > public: > > > > > > > > explicit > basic_istream(__streambuf_type* __sb) > : _M_gcount(streamsize(0)) > { this->init(__sb); } > > > > > > > virtual > ~basic_istream() > { _M_gcount = streamsize(0); } > > > class sentry; > friend class sentry; ># 119 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > operator>>(__istream_type& (*__pf)(__istream_type&)) > { return __pf(*this); } > > __istream_type& > operator>>(__ios_type& (*__pf)(__ios_type&)) > { > __pf(*this); > return *this; > } > > __istream_type& > operator>>(ios_base& (*__pf)(ios_base&)) > { > __pf(*this); > return *this; > } ># 167 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > operator>>(bool& __n) > { return _M_extract(__n); } > > __istream_type& > operator>>(short& __n); > > __istream_type& > operator>>(unsigned short& __n) > { return _M_extract(__n); } > > __istream_type& > operator>>(int& __n); > > __istream_type& > operator>>(unsigned int& __n) > { return _M_extract(__n); } > > __istream_type& > operator>>(long& __n) > { return _M_extract(__n); } > > __istream_type& > operator>>(unsigned long& __n) > { return _M_extract(__n); } > > > __istream_type& > operator>>(long long& __n) > { return _M_extract(__n); } > > __istream_type& > operator>>(unsigned long long& __n) > { return _M_extract(__n); } ># 213 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > operator>>(float& __f) > { return _M_extract(__f); } > > __istream_type& > operator>>(double& __f) > { return _M_extract(__f); } > > __istream_type& > operator>>(long double& __f) > { return _M_extract(__f); } ># 234 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > operator>>(void*& __p) > { return _M_extract(__p); } ># 258 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > operator>>(__streambuf_type* __sb); ># 268 "/usr/include/c++/4.8.2/istream" 3 > streamsize > gcount() const > { return _M_gcount; } ># 301 "/usr/include/c++/4.8.2/istream" 3 > int_type > get(); ># 315 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > get(char_type& __c); ># 342 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > get(char_type* __s, streamsize __n, char_type __delim); ># 353 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > get(char_type* __s, streamsize __n) > { return this->get(__s, __n, this->widen('\n')); } ># 376 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > get(__streambuf_type& __sb, char_type __delim); ># 386 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > get(__streambuf_type& __sb) > { return this->get(__sb, this->widen('\n')); } ># 415 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > getline(char_type* __s, streamsize __n, char_type __delim); ># 426 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > getline(char_type* __s, streamsize __n) > { return this->getline(__s, __n, this->widen('\n')); } ># 450 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > ignore(streamsize __n, int_type __delim); > > __istream_type& > ignore(streamsize __n); > > __istream_type& > ignore(); ># 467 "/usr/include/c++/4.8.2/istream" 3 > int_type > peek(); ># 485 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > read(char_type* __s, streamsize __n); ># 504 "/usr/include/c++/4.8.2/istream" 3 > streamsize > readsome(char_type* __s, streamsize __n); ># 521 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > putback(char_type __c); ># 537 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > unget(); ># 555 "/usr/include/c++/4.8.2/istream" 3 > int > sync(); ># 570 "/usr/include/c++/4.8.2/istream" 3 > pos_type > tellg(); ># 585 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > seekg(pos_type); ># 601 "/usr/include/c++/4.8.2/istream" 3 > __istream_type& > seekg(off_type, ios_base::seekdir); > > > protected: > basic_istream() > : _M_gcount(streamsize(0)) > { this->init(0); } > > template<typename _ValueT> > __istream_type& > _M_extract(_ValueT& __v); > }; > > > template<> > basic_istream<char>& > basic_istream<char>:: > getline(char_type* __s, streamsize __n, char_type __delim); > > template<> > basic_istream<char>& > basic_istream<char>:: > ignore(streamsize __n); > > template<> > basic_istream<char>& > basic_istream<char>:: > ignore(streamsize __n, int_type __delim); > > > template<> > basic_istream<wchar_t>& > basic_istream<wchar_t>:: > getline(char_type* __s, streamsize __n, char_type __delim); > > template<> > basic_istream<wchar_t>& > basic_istream<wchar_t>:: > ignore(streamsize __n); > > template<> > basic_istream<wchar_t>& > basic_istream<wchar_t>:: > ignore(streamsize __n, int_type __delim); ># 656 "/usr/include/c++/4.8.2/istream" 3 > template<typename _CharT, typename _Traits> > class basic_istream<_CharT, _Traits>::sentry > { > > bool _M_ok; > > public: > > typedef _Traits traits_type; > typedef basic_streambuf<_CharT, _Traits> __streambuf_type; > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef typename __istream_type::__ctype_type __ctype_type; > typedef typename _Traits::int_type __int_type; ># 692 "/usr/include/c++/4.8.2/istream" 3 > explicit > sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false); ># 705 "/usr/include/c++/4.8.2/istream" 3 > operator bool() const > { return _M_ok; } > }; ># 721 "/usr/include/c++/4.8.2/istream" 3 > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c); > > template<class _Traits> > inline basic_istream<char, _Traits>& > operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c) > { return (__in >> reinterpret_cast<char&>(__c)); } > > template<class _Traits> > inline basic_istream<char, _Traits>& > operator>>(basic_istream<char, _Traits>& __in, signed char& __c) > { return (__in >> reinterpret_cast<char&>(__c)); } ># 763 "/usr/include/c++/4.8.2/istream" 3 > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s); > > > template<> > basic_istream<char>& > operator>>(basic_istream<char>& __in, char* __s); > > template<class _Traits> > inline basic_istream<char, _Traits>& > operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s) > { return (__in >> reinterpret_cast<char*>(__s)); } > > template<class _Traits> > inline basic_istream<char, _Traits>& > operator>>(basic_istream<char, _Traits>& __in, signed char* __s) > { return (__in >> reinterpret_cast<char*>(__s)); } ># 794 "/usr/include/c++/4.8.2/istream" 3 > template<typename _CharT, typename _Traits> > class basic_iostream > : public basic_istream<_CharT, _Traits>, > public basic_ostream<_CharT, _Traits> > { > public: > > > > typedef _CharT char_type; > typedef typename _Traits::int_type int_type; > typedef typename _Traits::pos_type pos_type; > typedef typename _Traits::off_type off_type; > typedef _Traits traits_type; > > > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_ostream<_CharT, _Traits> __ostream_type; > > > > > > > > explicit > basic_iostream(basic_streambuf<_CharT, _Traits>* __sb) > : __istream_type(__sb), __ostream_type(__sb) { } > > > > > virtual > ~basic_iostream() { } > > protected: > basic_iostream() > : __istream_type(), __ostream_type() { } > }; ># 854 "/usr/include/c++/4.8.2/istream" 3 > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > ws(basic_istream<_CharT, _Traits>& __is); ># 876 "/usr/include/c++/4.8.2/istream" 3 > >} > ># 1 "/usr/include/c++/4.8.2/bits/istream.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/istream.tcc" 3 > ># 38 "/usr/include/c++/4.8.2/bits/istream.tcc" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>::sentry:: > sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false) > { > ios_base::iostate __err = ios_base::goodbit; > if (__in.good()) > { > if (__in.tie()) > __in.tie()->flush(); > if (!__noskip && bool(__in.flags() & ios_base::skipws)) > { > const __int_type __eof = traits_type::eof(); > __streambuf_type* __sb = __in.rdbuf(); > __int_type __c = __sb->sgetc(); > > const __ctype_type& __ct = __check_facet(__in._M_ctype); > while (!traits_type::eq_int_type(__c, __eof) > && __ct.is(ctype_base::space, > traits_type::to_char_type(__c))) > __c = __sb->snextc(); > > > > > if (traits_type::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > } > } > > if (__in.good() && __err == ios_base::goodbit) > _M_ok = true; > else > { > __err |= ios_base::failbit; > __in.setstate(__err); > } > } > > template<typename _CharT, typename _Traits> > template<typename _ValueT> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > _M_extract(_ValueT& __v) > { > sentry __cerb(*this, false); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const __num_get_type& __ng = __check_facet(this->_M_num_get); > __ng.get(*this, 0, *this, __err, __v); > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > operator>>(short& __n) > { > > > sentry __cerb(*this, false); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > long __l; > const __num_get_type& __ng = __check_facet(this->_M_num_get); > __ng.get(*this, 0, *this, __err, __l); > > > > if (__l < __gnu_cxx::__numeric_traits<short>::__min) > { > __err |= ios_base::failbit; > __n = __gnu_cxx::__numeric_traits<short>::__min; > } > else if (__l > __gnu_cxx::__numeric_traits<short>::__max) > { > __err |= ios_base::failbit; > __n = __gnu_cxx::__numeric_traits<short>::__max; > } > else > __n = short(__l); > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > operator>>(int& __n) > { > > > sentry __cerb(*this, false); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > long __l; > const __num_get_type& __ng = __check_facet(this->_M_num_get); > __ng.get(*this, 0, *this, __err, __l); > > > > if (__l < __gnu_cxx::__numeric_traits<int>::__min) > { > __err |= ios_base::failbit; > __n = __gnu_cxx::__numeric_traits<int>::__min; > } > else if (__l > __gnu_cxx::__numeric_traits<int>::__max) > { > __err |= ios_base::failbit; > __n = __gnu_cxx::__numeric_traits<int>::__max; > } > else > __n = int(__l); > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > operator>>(__streambuf_type* __sbout) > { > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this, false); > if (__cerb && __sbout) > { > try > { > bool __ineof; > if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof)) > __err |= ios_base::failbit; > if (__ineof) > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::failbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::failbit); } > } > else if (!__sbout) > __err |= ios_base::failbit; > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > typename basic_istream<_CharT, _Traits>::int_type > basic_istream<_CharT, _Traits>:: > get(void) > { > const int_type __eof = traits_type::eof(); > int_type __c = __eof; > _M_gcount = 0; > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this, true); > if (__cerb) > { > try > { > __c = this->rdbuf()->sbumpc(); > > if (!traits_type::eq_int_type(__c, __eof)) > _M_gcount = 1; > else > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > if (!_M_gcount) > __err |= ios_base::failbit; > if (__err) > this->setstate(__err); > return __c; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > get(char_type& __c) > { > _M_gcount = 0; > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this, true); > if (__cerb) > { > try > { > const int_type __cb = this->rdbuf()->sbumpc(); > > if (!traits_type::eq_int_type(__cb, traits_type::eof())) > { > _M_gcount = 1; > __c = traits_type::to_char_type(__cb); > } > else > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > if (!_M_gcount) > __err |= ios_base::failbit; > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > get(char_type* __s, streamsize __n, char_type __delim) > { > _M_gcount = 0; > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this, true); > if (__cerb) > { > try > { > const int_type __idelim = traits_type::to_int_type(__delim); > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > int_type __c = __sb->sgetc(); > > while (_M_gcount + 1 < __n > && !traits_type::eq_int_type(__c, __eof) > && !traits_type::eq_int_type(__c, __idelim)) > { > *__s++ = traits_type::to_char_type(__c); > ++_M_gcount; > __c = __sb->snextc(); > } > if (traits_type::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > > > if (__n > 0) > *__s = char_type(); > if (!_M_gcount) > __err |= ios_base::failbit; > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > get(__streambuf_type& __sb, char_type __delim) > { > _M_gcount = 0; > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this, true); > if (__cerb) > { > try > { > const int_type __idelim = traits_type::to_int_type(__delim); > const int_type __eof = traits_type::eof(); > __streambuf_type* __this_sb = this->rdbuf(); > int_type __c = __this_sb->sgetc(); > char_type __c2 = traits_type::to_char_type(__c); > > while (!traits_type::eq_int_type(__c, __eof) > && !traits_type::eq_int_type(__c, __idelim) > && !traits_type::eq_int_type(__sb.sputc(__c2), __eof)) > { > ++_M_gcount; > __c = __this_sb->snextc(); > __c2 = traits_type::to_char_type(__c); > } > if (traits_type::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > if (!_M_gcount) > __err |= ios_base::failbit; > if (__err) > this->setstate(__err); > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > getline(char_type* __s, streamsize __n, char_type __delim) > { > _M_gcount = 0; > ios_base::iostate __err = ios_base::goodbit; > sentry __cerb(*this, true); > if (__cerb) > { > try > { > const int_type __idelim = traits_type::to_int_type(__delim); > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > int_type __c = __sb->sgetc(); > > while (_M_gcount + 1 < __n > && !traits_type::eq_int_type(__c, __eof) > && !traits_type::eq_int_type(__c, __idelim)) > { > *__s++ = traits_type::to_char_type(__c); > __c = __sb->snextc(); > ++_M_gcount; > } > if (traits_type::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > else > { > if (traits_type::eq_int_type(__c, __idelim)) > { > __sb->sbumpc(); > ++_M_gcount; > } > else > __err |= ios_base::failbit; > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > > > if (__n > 0) > *__s = char_type(); > if (!_M_gcount) > __err |= ios_base::failbit; > if (__err) > this->setstate(__err); > return *this; > } > > > > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > ignore(void) > { > _M_gcount = 0; > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > > if (traits_type::eq_int_type(__sb->sbumpc(), __eof)) > __err |= ios_base::eofbit; > else > _M_gcount = 1; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > ignore(streamsize __n) > { > _M_gcount = 0; > sentry __cerb(*this, true); > if (__cerb && __n > 0) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > int_type __c = __sb->sgetc(); ># 513 "/usr/include/c++/4.8.2/bits/istream.tcc" 3 > bool __large_ignore = false; > while (true) > { > while (_M_gcount < __n > && !traits_type::eq_int_type(__c, __eof)) > { > ++_M_gcount; > __c = __sb->snextc(); > } > if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max > && !traits_type::eq_int_type(__c, __eof)) > { > _M_gcount = > __gnu_cxx::__numeric_traits<streamsize>::__min; > __large_ignore = true; > } > else > break; > } > > if (__large_ignore) > _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; > > if (traits_type::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > ignore(streamsize __n, int_type __delim) > { > _M_gcount = 0; > sentry __cerb(*this, true); > if (__cerb && __n > 0) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > int_type __c = __sb->sgetc(); > > > bool __large_ignore = false; > while (true) > { > while (_M_gcount < __n > && !traits_type::eq_int_type(__c, __eof) > && !traits_type::eq_int_type(__c, __delim)) > { > ++_M_gcount; > __c = __sb->snextc(); > } > if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max > && !traits_type::eq_int_type(__c, __eof) > && !traits_type::eq_int_type(__c, __delim)) > { > _M_gcount = > __gnu_cxx::__numeric_traits<streamsize>::__min; > __large_ignore = true; > } > else > break; > } > > if (__large_ignore) > _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; > > if (traits_type::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > else if (traits_type::eq_int_type(__c, __delim)) > { > if (_M_gcount > < __gnu_cxx::__numeric_traits<streamsize>::__max) > ++_M_gcount; > __sb->sbumpc(); > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > typename basic_istream<_CharT, _Traits>::int_type > basic_istream<_CharT, _Traits>:: > peek(void) > { > int_type __c = traits_type::eof(); > _M_gcount = 0; > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > __c = this->rdbuf()->sgetc(); > if (traits_type::eq_int_type(__c, traits_type::eof())) > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return __c; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > read(char_type* __s, streamsize __n) > { > _M_gcount = 0; > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > _M_gcount = this->rdbuf()->sgetn(__s, __n); > if (_M_gcount != __n) > __err |= (ios_base::eofbit | ios_base::failbit); > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > streamsize > basic_istream<_CharT, _Traits>:: > readsome(char_type* __s, streamsize __n) > { > _M_gcount = 0; > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > > const streamsize __num = this->rdbuf()->in_avail(); > if (__num > 0) > _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n)); > else if (__num == -1) > __err |= ios_base::eofbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return _M_gcount; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > putback(char_type __c) > { > > > _M_gcount = 0; > > this->clear(this->rdstate() & ~ios_base::eofbit); > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > if (!__sb > || traits_type::eq_int_type(__sb->sputbackc(__c), __eof)) > __err |= ios_base::badbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > unget(void) > { > > > _M_gcount = 0; > > this->clear(this->rdstate() & ~ios_base::eofbit); > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const int_type __eof = traits_type::eof(); > __streambuf_type* __sb = this->rdbuf(); > if (!__sb > || traits_type::eq_int_type(__sb->sungetc(), __eof)) > __err |= ios_base::badbit; > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > int > basic_istream<_CharT, _Traits>:: > sync(void) > { > > > int __ret = -1; > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > __streambuf_type* __sb = this->rdbuf(); > if (__sb) > { > if (__sb->pubsync() == -1) > __err |= ios_base::badbit; > else > __ret = 0; > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_istream<_CharT, _Traits>::pos_type > basic_istream<_CharT, _Traits>:: > tellg(void) > { > > > pos_type __ret = pos_type(-1); > sentry __cerb(*this, true); > if (__cerb) > { > try > { > if (!this->fail()) > __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, > ios_base::in); > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > } > return __ret; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > seekg(pos_type __pos) > { > > > > this->clear(this->rdstate() & ~ios_base::eofbit); > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > if (!this->fail()) > { > > const pos_type __p = this->rdbuf()->pubseekpos(__pos, > ios_base::in); > > > if (__p == pos_type(off_type(-1))) > __err |= ios_base::failbit; > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > basic_istream<_CharT, _Traits>:: > seekg(off_type __off, ios_base::seekdir __dir) > { > > > > this->clear(this->rdstate() & ~ios_base::eofbit); > sentry __cerb(*this, true); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > if (!this->fail()) > { > > const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, > ios_base::in); > > > if (__p == pos_type(off_type(-1))) > __err |= ios_base::failbit; > } > } > catch(__cxxabiv1::__forced_unwind&) > { > this->_M_setstate(ios_base::badbit); > throw; > } > catch(...) > { this->_M_setstate(ios_base::badbit); } > if (__err) > this->setstate(__err); > } > return *this; > } > > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef typename __istream_type::int_type __int_type; > > typename __istream_type::sentry __cerb(__in, false); > if (__cerb) > { > ios_base::iostate __err = ios_base::goodbit; > try > { > const __int_type __cb = __in.rdbuf()->sbumpc(); > if (!_Traits::eq_int_type(__cb, _Traits::eof())) > __c = _Traits::to_char_type(__cb); > else > __err |= (ios_base::eofbit | ios_base::failbit); > } > catch(__cxxabiv1::__forced_unwind&) > { > __in._M_setstate(ios_base::badbit); > throw; > } > catch(...) > { __in._M_setstate(ios_base::badbit); } > if (__err) > __in.setstate(__err); > } > return __in; > } > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_streambuf<_CharT, _Traits> __streambuf_type; > typedef typename _Traits::int_type int_type; > typedef _CharT char_type; > typedef ctype<_CharT> __ctype_type; > > streamsize __extracted = 0; > ios_base::iostate __err = ios_base::goodbit; > typename __istream_type::sentry __cerb(__in, false); > if (__cerb) > { > try > { > > streamsize __num = __in.width(); > if (__num <= 0) > __num = __gnu_cxx::__numeric_traits<streamsize>::__max; > > const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); > > const int_type __eof = _Traits::eof(); > __streambuf_type* __sb = __in.rdbuf(); > int_type __c = __sb->sgetc(); > > while (__extracted < __num - 1 > && !_Traits::eq_int_type(__c, __eof) > && !__ct.is(ctype_base::space, > _Traits::to_char_type(__c))) > { > *__s++ = _Traits::to_char_type(__c); > ++__extracted; > __c = __sb->snextc(); > } > if (_Traits::eq_int_type(__c, __eof)) > __err |= ios_base::eofbit; > > > > *__s = char_type(); > __in.width(0); > } > catch(__cxxabiv1::__forced_unwind&) > { > __in._M_setstate(ios_base::badbit); > throw; > } > catch(...) > { __in._M_setstate(ios_base::badbit); } > } > if (!__extracted) > __err |= ios_base::failbit; > if (__err) > __in.setstate(__err); > return __in; > } > > > template<typename _CharT, typename _Traits> > basic_istream<_CharT, _Traits>& > ws(basic_istream<_CharT, _Traits>& __in) > { > typedef basic_istream<_CharT, _Traits> __istream_type; > typedef basic_streambuf<_CharT, _Traits> __streambuf_type; > typedef typename __istream_type::int_type __int_type; > typedef ctype<_CharT> __ctype_type; > > const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); > const __int_type __eof = _Traits::eof(); > __streambuf_type* __sb = __in.rdbuf(); > __int_type __c = __sb->sgetc(); > > while (!_Traits::eq_int_type(__c, __eof) > && __ct.is(ctype_base::space, _Traits::to_char_type(__c))) > __c = __sb->snextc(); > > if (_Traits::eq_int_type(__c, __eof)) > __in.setstate(ios_base::eofbit); > return __in; > } > > > > > extern template class basic_istream<char>; > extern template istream& ws(istream&); > extern template istream& operator>>(istream&, char&); > extern template istream& operator>>(istream&, char*); > extern template istream& operator>>(istream&, unsigned char&); > extern template istream& operator>>(istream&, signed char&); > extern template istream& operator>>(istream&, unsigned char*); > extern template istream& operator>>(istream&, signed char*); > > extern template istream& istream::_M_extract(unsigned short&); > extern template istream& istream::_M_extract(unsigned int&); > extern template istream& istream::_M_extract(long&); > extern template istream& istream::_M_extract(unsigned long&); > extern template istream& istream::_M_extract(bool&); > > extern template istream& istream::_M_extract(long long&); > extern template istream& istream::_M_extract(unsigned long long&); > > extern template istream& istream::_M_extract(float&); > extern template istream& istream::_M_extract(double&); > extern template istream& istream::_M_extract(long double&); > extern template istream& istream::_M_extract(void*&); > > extern template class basic_iostream<char>; > > > extern template class basic_istream<wchar_t>; > extern template wistream& ws(wistream&); > extern template wistream& operator>>(wistream&, wchar_t&); > extern template wistream& operator>>(wistream&, wchar_t*); > > extern template wistream& wistream::_M_extract(unsigned short&); > extern template wistream& wistream::_M_extract(unsigned int&); > extern template wistream& wistream::_M_extract(long&); > extern template wistream& wistream::_M_extract(unsigned long&); > extern template wistream& wistream::_M_extract(bool&); > > extern template wistream& wistream::_M_extract(long long&); > extern template wistream& wistream::_M_extract(unsigned long long&); > > extern template wistream& wistream::_M_extract(float&); > extern template wistream& wistream::_M_extract(double&); > extern template wistream& wistream::_M_extract(long double&); > extern template wistream& wistream::_M_extract(void*&); > > extern template class basic_iostream<wchar_t>; > > > > >} ># 880 "/usr/include/c++/4.8.2/istream" 2 3 ># 39 "/usr/include/c++/4.8.2/sstream" 2 3 > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 63 "/usr/include/c++/4.8.2/sstream" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > class basic_stringbuf : public basic_streambuf<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > > > typedef _Alloc allocator_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > typedef basic_streambuf<char_type, traits_type> __streambuf_type; > typedef basic_string<char_type, _Traits, _Alloc> __string_type; > typedef typename __string_type::size_type __size_type; > > protected: > > ios_base::openmode _M_mode; > > > __string_type _M_string; > > public: ># 97 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out) > : __streambuf_type(), _M_mode(__mode), _M_string() > { } ># 110 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_stringbuf(const __string_type& __str, > ios_base::openmode __mode = ios_base::in | ios_base::out) > : __streambuf_type(), _M_mode(), _M_string(__str.data(), __str.size()) > { _M_stringbuf_init(__mode); } ># 125 "/usr/include/c++/4.8.2/sstream" 3 > __string_type > str() const > { > __string_type __ret; > if (this->pptr()) > { > > if (this->pptr() > this->egptr()) > __ret = __string_type(this->pbase(), this->pptr()); > else > __ret = __string_type(this->pbase(), this->egptr()); > } > else > __ret = _M_string; > return __ret; > } ># 149 "/usr/include/c++/4.8.2/sstream" 3 > void > str(const __string_type& __s) > { > > _M_string.assign(__s.data(), __s.size()); > _M_stringbuf_init(_M_mode); > } > > protected: > > void > _M_stringbuf_init(ios_base::openmode __mode) > { > _M_mode = __mode; > __size_type __len = 0; > if (_M_mode & (ios_base::ate | ios_base::app)) > __len = _M_string.size(); > _M_sync(const_cast<char_type*>(_M_string.data()), 0, __len); > } > > virtual streamsize > showmanyc() > { > streamsize __ret = -1; > if (_M_mode & ios_base::in) > { > _M_update_egptr(); > __ret = this->egptr() - this->gptr(); > } > return __ret; > } > > virtual int_type > underflow(); > > virtual int_type > pbackfail(int_type __c = traits_type::eof()); > > virtual int_type > overflow(int_type __c = traits_type::eof()); ># 201 "/usr/include/c++/4.8.2/sstream" 3 > virtual __streambuf_type* > setbuf(char_type* __s, streamsize __n) > { > if (__s && __n >= 0) > { > > > > > > > _M_string.clear(); > > > _M_sync(__s, __n, 0); > } > return this; > } > > virtual pos_type > seekoff(off_type __off, ios_base::seekdir __way, > ios_base::openmode __mode = ios_base::in | ios_base::out); > > virtual pos_type > seekpos(pos_type __sp, > ios_base::openmode __mode = ios_base::in | ios_base::out); > > > > > void > _M_sync(char_type* __base, __size_type __i, __size_type __o); > > > > void > _M_update_egptr() > { > const bool __testin = _M_mode & ios_base::in; > if (this->pptr() && this->pptr() > this->egptr()) > { > if (__testin) > this->setg(this->eback(), this->gptr(), this->pptr()); > else > this->setg(this->pptr(), this->pptr(), this->pptr()); > } > } > > > > void > _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off); > }; ># 271 "/usr/include/c++/4.8.2/sstream" 3 > template<typename _CharT, typename _Traits, typename _Alloc> > class basic_istringstream : public basic_istream<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > > > typedef _Alloc allocator_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; > typedef basic_istream<char_type, traits_type> __istream_type; > > private: > __stringbuf_type _M_stringbuf; > > public: ># 307 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_istringstream(ios_base::openmode __mode = ios_base::in) > : __istream_type(), _M_stringbuf(__mode | ios_base::in) > { this->init(&_M_stringbuf); } ># 325 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_istringstream(const __string_type& __str, > ios_base::openmode __mode = ios_base::in) > : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in) > { this->init(&_M_stringbuf); } > > > > > > > > ~basic_istringstream() > { } ># 347 "/usr/include/c++/4.8.2/sstream" 3 > __stringbuf_type* > rdbuf() const > { return const_cast<__stringbuf_type*>(&_M_stringbuf); } > > > > > > __string_type > str() const > { return _M_stringbuf.str(); } > > > > > > > > void > str(const __string_type& __s) > { _M_stringbuf.str(__s); } > }; ># 386 "/usr/include/c++/4.8.2/sstream" 3 > template <typename _CharT, typename _Traits, typename _Alloc> > class basic_ostringstream : public basic_ostream<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > > > typedef _Alloc allocator_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; > typedef basic_ostream<char_type, traits_type> __ostream_type; > > private: > __stringbuf_type _M_stringbuf; > > public: ># 422 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_ostringstream(ios_base::openmode __mode = ios_base::out) > : __ostream_type(), _M_stringbuf(__mode | ios_base::out) > { this->init(&_M_stringbuf); } ># 440 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_ostringstream(const __string_type& __str, > ios_base::openmode __mode = ios_base::out) > : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out) > { this->init(&_M_stringbuf); } > > > > > > > > ~basic_ostringstream() > { } ># 462 "/usr/include/c++/4.8.2/sstream" 3 > __stringbuf_type* > rdbuf() const > { return const_cast<__stringbuf_type*>(&_M_stringbuf); } > > > > > > __string_type > str() const > { return _M_stringbuf.str(); } > > > > > > > > void > str(const __string_type& __s) > { _M_stringbuf.str(__s); } > }; ># 501 "/usr/include/c++/4.8.2/sstream" 3 > template <typename _CharT, typename _Traits, typename _Alloc> > class basic_stringstream : public basic_iostream<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > > > typedef _Alloc allocator_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > typedef basic_string<_CharT, _Traits, _Alloc> __string_type; > typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; > typedef basic_iostream<char_type, traits_type> __iostream_type; > > private: > __stringbuf_type _M_stringbuf; > > public: ># 536 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in) > : __iostream_type(), _M_stringbuf(__m) > { this->init(&_M_stringbuf); } ># 552 "/usr/include/c++/4.8.2/sstream" 3 > explicit > basic_stringstream(const __string_type& __str, > ios_base::openmode __m = ios_base::out | ios_base::in) > : __iostream_type(), _M_stringbuf(__str, __m) > { this->init(&_M_stringbuf); } > > > > > > > > ~basic_stringstream() > { } ># 574 "/usr/include/c++/4.8.2/sstream" 3 > __stringbuf_type* > rdbuf() const > { return const_cast<__stringbuf_type*>(&_M_stringbuf); } > > > > > > __string_type > str() const > { return _M_stringbuf.str(); } > > > > > > > > void > str(const __string_type& __s) > { _M_stringbuf.str(__s); } > }; > > >} > ># 1 "/usr/include/c++/4.8.2/bits/sstream.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/sstream.tcc" 3 > ># 38 "/usr/include/c++/4.8.2/bits/sstream.tcc" 3 > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template <class _CharT, class _Traits, class _Alloc> > typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type > basic_stringbuf<_CharT, _Traits, _Alloc>:: > pbackfail(int_type __c) > { > int_type __ret = traits_type::eof(); > if (this->eback() < this->gptr()) > { > > > const bool __testeof = traits_type::eq_int_type(__c, __ret); > if (!__testeof) > { > const bool __testeq = traits_type::eq(traits_type:: > to_char_type(__c), > this->gptr()[-1]); > const bool __testout = this->_M_mode & ios_base::out; > if (__testeq || __testout) > { > this->gbump(-1); > if (!__testeq) > *this->gptr() = traits_type::to_char_type(__c); > __ret = __c; > } > } > else > { > this->gbump(-1); > __ret = traits_type::not_eof(__c); > } > } > return __ret; > } > > template <class _CharT, class _Traits, class _Alloc> > typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type > basic_stringbuf<_CharT, _Traits, _Alloc>:: > overflow(int_type __c) > { > const bool __testout = this->_M_mode & ios_base::out; > if (__builtin_expect(!__testout, false)) > return traits_type::eof(); > > const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof()); > if (__builtin_expect(__testeof, false)) > return traits_type::not_eof(__c); > > const __size_type __capacity = _M_string.capacity(); > const __size_type __max_size = _M_string.max_size(); > const bool __testput = this->pptr() < this->epptr(); > if (__builtin_expect(!__testput && __capacity == __max_size, false)) > return traits_type::eof(); > > > > const char_type __conv = traits_type::to_char_type(__c); > if (!__testput) > { ># 110 "/usr/include/c++/4.8.2/bits/sstream.tcc" 3 > const __size_type __opt_len = std::max(__size_type(2 * __capacity), > __size_type(512)); > const __size_type __len = std::min(__opt_len, __max_size); > __string_type __tmp; > __tmp.reserve(__len); > if (this->pbase()) > __tmp.assign(this->pbase(), this->epptr() - this->pbase()); > __tmp.push_back(__conv); > _M_string.swap(__tmp); > _M_sync(const_cast<char_type*>(_M_string.data()), > this->gptr() - this->eback(), this->pptr() - this->pbase()); > } > else > *this->pptr() = __conv; > this->pbump(1); > return __c; > } > > template <class _CharT, class _Traits, class _Alloc> > typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type > basic_stringbuf<_CharT, _Traits, _Alloc>:: > underflow() > { > int_type __ret = traits_type::eof(); > const bool __testin = this->_M_mode & ios_base::in; > if (__testin) > { > > _M_update_egptr(); > > if (this->gptr() < this->egptr()) > __ret = traits_type::to_int_type(*this->gptr()); > } > return __ret; > } > > template <class _CharT, class _Traits, class _Alloc> > typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type > basic_stringbuf<_CharT, _Traits, _Alloc>:: > seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) > { > pos_type __ret = pos_type(off_type(-1)); > bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; > bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; > const bool __testboth = __testin && __testout && __way != ios_base::cur; > __testin &= !(__mode & ios_base::out); > __testout &= !(__mode & ios_base::in); > > > > const char_type* __beg = __testin ? this->eback() : this->pbase(); > if ((__beg || !__off) && (__testin || __testout || __testboth)) > { > _M_update_egptr(); > > off_type __newoffi = __off; > off_type __newoffo = __newoffi; > if (__way == ios_base::cur) > { > __newoffi += this->gptr() - __beg; > __newoffo += this->pptr() - __beg; > } > else if (__way == ios_base::end) > __newoffo = __newoffi += this->egptr() - __beg; > > if ((__testin || __testboth) > && __newoffi >= 0 > && this->egptr() - __beg >= __newoffi) > { > this->setg(this->eback(), this->eback() + __newoffi, > this->egptr()); > __ret = pos_type(__newoffi); > } > if ((__testout || __testboth) > && __newoffo >= 0 > && this->egptr() - __beg >= __newoffo) > { > _M_pbump(this->pbase(), this->epptr(), __newoffo); > __ret = pos_type(__newoffo); > } > } > return __ret; > } > > template <class _CharT, class _Traits, class _Alloc> > typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type > basic_stringbuf<_CharT, _Traits, _Alloc>:: > seekpos(pos_type __sp, ios_base::openmode __mode) > { > pos_type __ret = pos_type(off_type(-1)); > const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; > const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; > > const char_type* __beg = __testin ? this->eback() : this->pbase(); > if ((__beg || !off_type(__sp)) && (__testin || __testout)) > { > _M_update_egptr(); > > const off_type __pos(__sp); > const bool __testpos = (0 <= __pos > && __pos <= this->egptr() - __beg); > if (__testpos) > { > if (__testin) > this->setg(this->eback(), this->eback() + __pos, > this->egptr()); > if (__testout) > _M_pbump(this->pbase(), this->epptr(), __pos); > __ret = __sp; > } > } > return __ret; > } > > template <class _CharT, class _Traits, class _Alloc> > void > basic_stringbuf<_CharT, _Traits, _Alloc>:: > _M_sync(char_type* __base, __size_type __i, __size_type __o) > { > const bool __testin = _M_mode & ios_base::in; > const bool __testout = _M_mode & ios_base::out; > char_type* __endg = __base + _M_string.size(); > char_type* __endp = __base + _M_string.capacity(); > > if (__base != _M_string.data()) > { > > __endg += __i; > __i = 0; > __endp = __endg; > } > > if (__testin) > this->setg(__base, __base + __i, __endg); > if (__testout) > { > _M_pbump(__base, __endp, __o); > > > > if (!__testin) > this->setg(__endg, __endg, __endg); > } > } > > template <class _CharT, class _Traits, class _Alloc> > void > basic_stringbuf<_CharT, _Traits, _Alloc>:: > _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off) > { > this->setp(__pbeg, __pend); > while (__off > __gnu_cxx::__numeric_traits<int>::__max) > { > this->pbump(__gnu_cxx::__numeric_traits<int>::__max); > __off -= __gnu_cxx::__numeric_traits<int>::__max; > } > this->pbump(__off); > } > > > > > extern template class basic_stringbuf<char>; > extern template class basic_istringstream<char>; > extern template class basic_ostringstream<char>; > extern template class basic_stringstream<char>; > > > extern template class basic_stringbuf<wchar_t>; > extern template class basic_istringstream<wchar_t>; > extern template class basic_ostringstream<wchar_t>; > extern template class basic_stringstream<wchar_t>; > > > > >} ># 601 "/usr/include/c++/4.8.2/sstream" 2 3 ># 51 "/usr/include/OpenEXR/IexBaseExc.h" 2 > >namespace Iex { ># 63 "/usr/include/OpenEXR/IexBaseExc.h" >class BaseExc: public std::string, public std::exception >{ > public: > > > > > > BaseExc (const char *s = 0) throw(); > BaseExc (const std::string &s) throw(); > BaseExc (std::stringstream &s) throw(); > > BaseExc (const BaseExc &be) throw(); > virtual ~BaseExc () throw (); > > > > > > virtual const char * what () const throw (); > > > > > > > BaseExc & assign (std::stringstream &s); > BaseExc & operator = (std::stringstream &s); > > BaseExc & append (std::stringstream &s); > BaseExc & operator += (std::stringstream &s); > > > > > > > > BaseExc & assign (const char *s); > BaseExc & operator = (const char *s); > > BaseExc & append (const char *s); > BaseExc & operator += (const char *s); ># 115 "/usr/include/OpenEXR/IexBaseExc.h" > const std::string & stackTrace () const; > > private: > > std::string _stackTrace; >}; ># 142 "/usr/include/OpenEXR/IexBaseExc.h" >class ArgExc: public BaseExc { public: ArgExc (const char* text=0) throw(): BaseExc (text) {} ArgExc (const std::string &text) throw(): BaseExc (text) {} ArgExc (std::stringstream &text) throw(): BaseExc (text) {} }; > >class LogicExc: public BaseExc { public: LogicExc (const char* text=0) throw(): BaseExc (text) {} LogicExc (const std::string &text) throw(): BaseExc (text) {} LogicExc (std::stringstream &text) throw(): BaseExc (text) {} }; > > > > >class InputExc: public BaseExc { public: InputExc (const char* text=0) throw(): BaseExc (text) {} InputExc (const std::string &text) throw(): BaseExc (text) {} InputExc (std::stringstream &text) throw(): BaseExc (text) {} }; > >class IoExc: public BaseExc { public: IoExc (const char* text=0) throw(): BaseExc (text) {} IoExc (const std::string &text) throw(): BaseExc (text) {} IoExc (std::stringstream &text) throw(): BaseExc (text) {} }; > >class MathExc: public BaseExc { public: MathExc (const char* text=0) throw(): BaseExc (text) {} MathExc (const std::string &text) throw(): BaseExc (text) {} MathExc (std::stringstream &text) throw(): BaseExc (text) {} }; > > > >class ErrnoExc: public BaseExc { public: ErrnoExc (const char* text=0) throw(): BaseExc (text) {} ErrnoExc (const std::string &text) throw(): BaseExc (text) {} ErrnoExc (std::stringstream &text) throw(): BaseExc (text) {} }; > > > > >class NoImplExc: public BaseExc { public: NoImplExc (const char* text=0) throw(): BaseExc (text) {} NoImplExc (const std::string &text) throw(): BaseExc (text) {} NoImplExc (std::stringstream &text) throw(): BaseExc (text) {} }; > > > > > >class NullExc: public BaseExc { public: NullExc (const char* text=0) throw(): BaseExc (text) {} NullExc (const std::string &text) throw(): BaseExc (text) {} NullExc (std::stringstream &text) throw(): BaseExc (text) {} }; > >class TypeExc: public BaseExc { public: TypeExc (const char* text=0) throw(): BaseExc (text) {} TypeExc (const std::string &text) throw(): BaseExc (text) {} TypeExc (std::stringstream &text) throw(): BaseExc (text) {} }; ># 200 "/usr/include/OpenEXR/IexBaseExc.h" >typedef std::string (* StackTracer) (); > >void setStackTracer (StackTracer stackTracer); >StackTracer stackTracer (); > > > > > > >inline BaseExc & >BaseExc::operator = (std::stringstream &s) >{ > return assign (s); >} > > >inline BaseExc & >BaseExc::operator += (std::stringstream &s) >{ > return append (s); >} > > >inline BaseExc & >BaseExc::assign (const char *s) >{ > std::string::assign(s); > return *this; >} > > >inline BaseExc & >BaseExc::operator = (const char *s) >{ > return assign(s); >} > > >inline BaseExc & >BaseExc::append (const char *s) >{ > std::string::append(s); > return *this; >} > > >inline BaseExc & >BaseExc::operator += (const char *s) >{ > return append(s); >} > > >inline const std::string & >BaseExc::stackTrace () const >{ > return _stackTrace; >} > > > > > >} ># 48 "/usr/include/OpenEXR/ImathExc.h" 2 > >namespace Imath { > > >class NullVecExc: public ::Iex::MathExc { public: NullVecExc (const char* text=0) throw(): ::Iex::MathExc (text) {} NullVecExc (const std::string &text) throw(): ::Iex::MathExc (text) {} NullVecExc (std::stringstream &text) throw(): ::Iex::MathExc (text) {} }; > > >class InfPointExc: public ::Iex::MathExc { public: InfPointExc (const char* text=0) throw(): ::Iex::MathExc (text) {} InfPointExc (const std::string &text) throw(): ::Iex::MathExc (text) {} InfPointExc (std::stringstream &text) throw(): ::Iex::MathExc (text) {} }; > > >class NullQuatExc: public ::Iex::MathExc { public: NullQuatExc (const char* text=0) throw(): ::Iex::MathExc (text) {} NullQuatExc (const std::string &text) throw(): ::Iex::MathExc (text) {} NullQuatExc (std::stringstream &text) throw(): ::Iex::MathExc (text) {} }; > > >class SingMatrixExc: public ::Iex::MathExc { public: SingMatrixExc (const char* text=0) throw(): ::Iex::MathExc (text) {} SingMatrixExc (const std::string &text) throw(): ::Iex::MathExc (text) {} SingMatrixExc (std::stringstream &text) throw(): ::Iex::MathExc (text) {} }; > > >class ZeroScaleExc: public ::Iex::MathExc { public: ZeroScaleExc (const char* text=0) throw(): ::Iex::MathExc (text) {} ZeroScaleExc (const std::string &text) throw(): ::Iex::MathExc (text) {} ZeroScaleExc (std::stringstream &text) throw(): ::Iex::MathExc (text) {} }; > > >class IntVecNormalizeExc: public ::Iex::MathExc { public: IntVecNormalizeExc (const char* text=0) throw(): ::Iex::MathExc (text) {} IntVecNormalizeExc (const std::string &text) throw(): ::Iex::MathExc (text) {} IntVecNormalizeExc (std::stringstream &text) throw(): ::Iex::MathExc (text) {} }; > > > >} ># 47 "/usr/include/OpenEXR/ImathVec.h" 2 ># 1 "/usr/include/OpenEXR/ImathLimits.h" 1 ># 46 "/usr/include/OpenEXR/ImathLimits.h" ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/float.h" 1 3 4 ># 47 "/usr/include/OpenEXR/ImathLimits.h" 2 ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 1 3 4 ># 48 "/usr/include/OpenEXR/ImathLimits.h" 2 ># 62 "/usr/include/OpenEXR/ImathLimits.h" >namespace Imath { ># 117 "/usr/include/OpenEXR/ImathLimits.h" >template <class T> struct limits >{ > static T min(); > static T max(); > static T smallest(); > static T epsilon(); > static bool isIntegral(); > static bool isSigned(); >}; > > > > > > >template <> >struct limits <char> >{ > static char min() {return (-127 - 1);} > static char max() {return 127;} > static char smallest() {return 1;} > static char epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return (char) ~0 < 0;} >}; > >template <> >struct limits <signed char> >{ > static signed char min() {return (-127 - 1);} > static signed char max() {return 127;} > static signed char smallest() {return 1;} > static signed char epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return true;} >}; > >template <> >struct limits <unsigned char> >{ > static unsigned char min() {return 0;} > static unsigned char max() {return (127 * 2 + 1);} > static unsigned char smallest() {return 1;} > static unsigned char epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return false;} >}; > >template <> >struct limits <short> >{ > static short min() {return (-32767 - 1);} > static short max() {return 32767;} > static short smallest() {return 1;} > static short epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return true;} >}; > >template <> >struct limits <unsigned short> >{ > static unsigned short min() {return 0;} > static unsigned short max() {return (32767 * 2 + 1);} > static unsigned short smallest() {return 1;} > static unsigned short epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return false;} >}; > >template <> >struct limits <int> >{ > static int min() {return (-2147483647 - 1);} > static int max() {return 2147483647;} > static int smallest() {return 1;} > static int epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return true;} >}; > >template <> >struct limits <unsigned int> >{ > static unsigned int min() {return 0;} > static unsigned int max() {return (2147483647 * 2U + 1U);} > static unsigned int smallest() {return 1;} > static unsigned int epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return false;} >}; > >template <> >struct limits <long> >{ > static long min() {return (-9223372036854775807L - 1L);} > static long max() {return 9223372036854775807L;} > static long smallest() {return 1;} > static long epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return true;} >}; > >template <> >struct limits <unsigned long> >{ > static unsigned long min() {return 0;} > static unsigned long max() {return (9223372036854775807L * 2UL + 1UL);} > static unsigned long smallest() {return 1;} > static unsigned long epsilon() {return 1;} > static bool isIntegral() {return true;} > static bool isSigned() {return false;} >}; > >template <> >struct limits <float> >{ > static float min() {return -3.40282346638528859812e+38F;} > static float max() {return 3.40282346638528859812e+38F;} > static float smallest() {return 1.17549435082228750797e-38F;} > static float epsilon() {return 1.19209289550781250000e-7F;} > static bool isIntegral() {return false;} > static bool isSigned() {return true;} >}; > >template <> >struct limits <double> >{ > static double min() {return -double(1.79769313486231570815e+308L);} > static double max() {return double(1.79769313486231570815e+308L);} > static double smallest() {return double(2.22507385850720138309e-308L);} > static double epsilon() {return double(2.22044604925031308085e-16L);} > static bool isIntegral() {return false;} > static bool isSigned() {return true;} >}; > >template <> >struct limits <long double> >{ > static long double min() {return -1.18973149535723176502e+4932L;} > static long double max() {return 1.18973149535723176502e+4932L;} > static long double smallest() {return 3.36210314311209350626e-4932L;} > static long double epsilon() {return 1.08420217248550443401e-19L;} > static bool isIntegral() {return false;} > static bool isSigned() {return true;} >}; > > >} ># 48 "/usr/include/OpenEXR/ImathVec.h" 2 ># 1 "/usr/include/OpenEXR/ImathMath.h" 1 ># 83 "/usr/include/OpenEXR/ImathMath.h" ># 1 "/usr/include/OpenEXR/ImathPlatform.h" 1 ># 84 "/usr/include/OpenEXR/ImathMath.h" 2 > > > >namespace Imath { > > >template <class T> >struct Math >{ > static T acos (T x) {return ::acos (double(x));} > static T asin (T x) {return ::asin (double(x));} > static T atan (T x) {return ::atan (double(x));} > static T atan2 (T x, T y) {return ::atan2 (double(x), double(y));} > static T cos (T x) {return ::cos (double(x));} > static T sin (T x) {return ::sin (double(x));} > static T tan (T x) {return ::tan (double(x));} > static T cosh (T x) {return ::cosh (double(x));} > static T sinh (T x) {return ::sinh (double(x));} > static T tanh (T x) {return ::tanh (double(x));} > static T exp (T x) {return ::exp (double(x));} > static T log (T x) {return ::log (double(x));} > static T log10 (T x) {return ::log10 (double(x));} > static T modf (T x, T *iptr) > { > double ival; > T rval( ::modf (double(x),&ival)); > *iptr = ival; > return rval; > } > static T pow (T x, T y) {return ::pow (double(x), double(y));} > static T sqrt (T x) {return ::sqrt (double(x));} > static T ceil (T x) {return ::ceil (double(x));} > static T fabs (T x) {return ::fabs (double(x));} > static T floor (T x) {return ::floor (double(x));} > static T fmod (T x, T y) {return ::fmod (double(x), double(y));} > static T hypot (T x, T y) {return ::hypot (double(x), double(y));} >}; > > >template <> >struct Math<float> >{ > static float acos (float x) {return ::acosf (x);} > static float asin (float x) {return ::asinf (x);} > static float atan (float x) {return ::atanf (x);} > static float atan2 (float x, float y) {return ::atan2f (x, y);} > static float cos (float x) {return ::cosf (x);} > static float sin (float x) {return ::sinf (x);} > static float tan (float x) {return ::tanf (x);} > static float cosh (float x) {return ::coshf (x);} > static float sinh (float x) {return ::sinhf (x);} > static float tanh (float x) {return ::tanhf (x);} > static float exp (float x) {return ::expf (x);} > static float log (float x) {return ::logf (x);} > static float log10 (float x) {return ::log10f (x);} > static float modf (float x, float *y) {return ::modff (x, y);} > static float pow (float x, float y) {return ::powf (x, y);} > static float sqrt (float x) {return ::sqrtf (x);} > static float ceil (float x) {return ::ceilf (x);} > static float fabs (float x) {return ::fabsf (x);} > static float floor (float x) {return ::floorf (x);} > static float fmod (float x, float y) {return ::fmodf (x, y);} > > static float hypot (float x, float y) {return ::hypotf (x, y);} > > > >}; > > > > > > > >template <class T> >inline T >sinx_over_x (T x) >{ > if (x * x < limits<T>::epsilon()) > return T (1); > else > return Math<T>::sin (x) / x; >} ># 189 "/usr/include/OpenEXR/ImathMath.h" >template <class T> >inline bool >equalWithAbsError (T x1, T x2, T e) >{ > return ((x1 > x2)? x1 - x2: x2 - x1) <= e; >} > > >template <class T> >inline bool >equalWithRelError (T x1, T x2, T e) >{ > return ((x1 > x2)? x1 - x2: x2 - x1) <= e * ((x1 > 0)? x1: -x1); >} > > > >} ># 49 "/usr/include/OpenEXR/ImathVec.h" 2 > ># 1 "/usr/include/c++/4.8.2/iostream" 1 3 ># 36 "/usr/include/c++/4.8.2/iostream" 3 > ># 37 "/usr/include/c++/4.8.2/iostream" 3 > > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 60 "/usr/include/c++/4.8.2/iostream" 3 > extern istream cin; > extern ostream cout; > extern ostream cerr; > extern ostream clog; > > > extern wistream wcin; > extern wostream wcout; > extern wostream wcerr; > extern wostream wclog; > > > > > static ios_base::Init __ioinit; > > >} ># 51 "/usr/include/OpenEXR/ImathVec.h" 2 ># 59 "/usr/include/OpenEXR/ImathVec.h" >namespace Imath { > >template <class T> class Vec2; >template <class T> class Vec3; >template <class T> class Vec4; > >enum InfException {INF_EXCEPTION}; > > >template <class T> class Vec2 >{ > public: > > > > > > T x, y; > > T & operator [] (int i); > const T & operator [] (int i) const; > > > > > > > Vec2 (); > explicit Vec2 (T a); > Vec2 (T a, T b); > > > > > > > Vec2 (const Vec2 &v); > template <class S> Vec2 (const Vec2<S> &v); > > const Vec2 & operator = (const Vec2 &v); > > > > > > > template <class S> > void setValue (S a, S b); > > template <class S> > void setValue (const Vec2<S> &v); > > template <class S> > void getValue (S &a, S &b) const; > > template <class S> > void getValue (Vec2<S> &v) const; > > T * getValue (); > const T * getValue () const; > > > > > > > template <class S> > bool operator == (const Vec2<S> &v) const; > > template <class S> > bool operator != (const Vec2<S> &v) const; ># 150 "/usr/include/OpenEXR/ImathVec.h" > bool equalWithAbsError (const Vec2<T> &v, T e) const; > bool equalWithRelError (const Vec2<T> &v, T e) const; > > > > > > T dot (const Vec2 &v) const; > T operator ^ (const Vec2 &v) const; > > > > > > > > T cross (const Vec2 &v) const; > T operator % (const Vec2 &v) const; > > > > > > > const Vec2 & operator += (const Vec2 &v); > Vec2 operator + (const Vec2 &v) const; > > > > > > > const Vec2 & operator -= (const Vec2 &v); > Vec2 operator - (const Vec2 &v) const; > > > > > > > Vec2 operator - () const; > const Vec2 & negate (); > > > > > > > const Vec2 & operator *= (const Vec2 &v); > const Vec2 & operator *= (T a); > Vec2 operator * (const Vec2 &v) const; > Vec2 operator * (T a) const; > > > > > > > const Vec2 & operator /= (const Vec2 &v); > const Vec2 & operator /= (T a); > Vec2 operator / (const Vec2 &v) const; > Vec2 operator / (T a) const; ># 223 "/usr/include/OpenEXR/ImathVec.h" > T length () const; > T length2 () const; > > const Vec2 & normalize (); > const Vec2 & normalizeExc () throw (Iex::MathExc); > const Vec2 & normalizeNonNull (); > > Vec2<T> normalized () const; > Vec2<T> normalizedExc () const throw (Iex::MathExc); > Vec2<T> normalizedNonNull () const; > > > > > > > static unsigned int dimensions() {return 2;} > > > > > > > static T baseTypeMin() {return limits<T>::min();} > static T baseTypeMax() {return limits<T>::max();} > static T baseTypeSmallest() {return limits<T>::smallest();} > static T baseTypeEpsilon() {return limits<T>::epsilon();} ># 258 "/usr/include/OpenEXR/ImathVec.h" > typedef T BaseType; > > private: > > T lengthTiny () const; >}; > > >template <class T> class Vec3 >{ > public: > > > > > > T x, y, z; > > T & operator [] (int i); > const T & operator [] (int i) const; > > > > > > > Vec3 (); > explicit Vec3 (T a); > Vec3 (T a, T b, T c); > > > > > > > Vec3 (const Vec3 &v); > template <class S> Vec3 (const Vec3<S> &v); > > const Vec3 & operator = (const Vec3 &v); ># 310 "/usr/include/OpenEXR/ImathVec.h" > template <class S> explicit Vec3 (const Vec4<S> &v); > template <class S> explicit Vec3 (const Vec4<S> &v, InfException); > > > > > > > template <class S> > void setValue (S a, S b, S c); > > template <class S> > void setValue (const Vec3<S> &v); > > template <class S> > void getValue (S &a, S &b, S &c) const; > > template <class S> > void getValue (Vec3<S> &v) const; > > T * getValue(); > const T * getValue() const; > > > > > > > template <class S> > bool operator == (const Vec3<S> &v) const; > > template <class S> > bool operator != (const Vec3<S> &v) const; ># 362 "/usr/include/OpenEXR/ImathVec.h" > bool equalWithAbsError (const Vec3<T> &v, T e) const; > bool equalWithRelError (const Vec3<T> &v, T e) const; > > > > > > T dot (const Vec3 &v) const; > T operator ^ (const Vec3 &v) const; > > > > > > > Vec3 cross (const Vec3 &v) const; > const Vec3 & operator %= (const Vec3 &v); > Vec3 operator % (const Vec3 &v) const; > > > > > > > const Vec3 & operator += (const Vec3 &v); > Vec3 operator + (const Vec3 &v) const; > > > > > > > const Vec3 & operator -= (const Vec3 &v); > Vec3 operator - (const Vec3 &v) const; > > > > > > > Vec3 operator - () const; > const Vec3 & negate (); > > > > > > > const Vec3 & operator *= (const Vec3 &v); > const Vec3 & operator *= (T a); > Vec3 operator * (const Vec3 &v) const; > Vec3 operator * (T a) const; > > > > > > > const Vec3 & operator /= (const Vec3 &v); > const Vec3 & operator /= (T a); > Vec3 operator / (const Vec3 &v) const; > Vec3 operator / (T a) const; ># 435 "/usr/include/OpenEXR/ImathVec.h" > T length () const; > T length2 () const; > > const Vec3 & normalize (); > const Vec3 & normalizeExc () throw (Iex::MathExc); > const Vec3 & normalizeNonNull (); > > Vec3<T> normalized () const; > Vec3<T> normalizedExc () const throw (Iex::MathExc); > Vec3<T> normalizedNonNull () const; > > > > > > > static unsigned int dimensions() {return 3;} > > > > > > > static T baseTypeMin() {return limits<T>::min();} > static T baseTypeMax() {return limits<T>::max();} > static T baseTypeSmallest() {return limits<T>::smallest();} > static T baseTypeEpsilon() {return limits<T>::epsilon();} ># 470 "/usr/include/OpenEXR/ImathVec.h" > typedef T BaseType; > > private: > > T lengthTiny () const; >}; > > > >template <class T> class Vec4 >{ > public: > > > > > > T x, y, z, w; > > T & operator [] (int i); > const T & operator [] (int i) const; > > > > > > > Vec4 (); > explicit Vec4 (T a); > Vec4 (T a, T b, T c, T d); > > > > > > > Vec4 (const Vec4 &v); > template <class S> Vec4 (const Vec4<S> &v); > > const Vec4 & operator = (const Vec4 &v); > > > > > > > template <class S> explicit Vec4 (const Vec3<S> &v); > > > > > > > template <class S> > bool operator == (const Vec4<S> &v) const; > > template <class S> > bool operator != (const Vec4<S> &v) const; ># 548 "/usr/include/OpenEXR/ImathVec.h" > bool equalWithAbsError (const Vec4<T> &v, T e) const; > bool equalWithRelError (const Vec4<T> &v, T e) const; > > > > > > > T dot (const Vec4 &v) const; > T operator ^ (const Vec4 &v) const; ># 568 "/usr/include/OpenEXR/ImathVec.h" > const Vec4 & operator += (const Vec4 &v); > Vec4 operator + (const Vec4 &v) const; > > > > > > > const Vec4 & operator -= (const Vec4 &v); > Vec4 operator - (const Vec4 &v) const; > > > > > > > Vec4 operator - () const; > const Vec4 & negate (); > > > > > > > const Vec4 & operator *= (const Vec4 &v); > const Vec4 & operator *= (T a); > Vec4 operator * (const Vec4 &v) const; > Vec4 operator * (T a) const; > > > > > > > const Vec4 & operator /= (const Vec4 &v); > const Vec4 & operator /= (T a); > Vec4 operator / (const Vec4 &v) const; > Vec4 operator / (T a) const; ># 617 "/usr/include/OpenEXR/ImathVec.h" > T length () const; > T length2 () const; > > const Vec4 & normalize (); > const Vec4 & normalizeExc () throw (Iex::MathExc); > const Vec4 & normalizeNonNull (); > > Vec4<T> normalized () const; > Vec4<T> normalizedExc () const throw (Iex::MathExc); > Vec4<T> normalizedNonNull () const; > > > > > > > static unsigned int dimensions() {return 4;} > > > > > > > static T baseTypeMin() {return limits<T>::min();} > static T baseTypeMax() {return limits<T>::max();} > static T baseTypeSmallest() {return limits<T>::smallest();} > static T baseTypeEpsilon() {return limits<T>::epsilon();} ># 652 "/usr/include/OpenEXR/ImathVec.h" > typedef T BaseType; > > private: > > T lengthTiny () const; >}; > > > > > > >template <class T> >std::ostream & operator << (std::ostream &s, const Vec2<T> &v); > >template <class T> >std::ostream & operator << (std::ostream &s, const Vec3<T> &v); > >template <class T> >std::ostream & operator << (std::ostream &s, const Vec4<T> &v); > > > > > >template <class T> Vec2<T> operator * (T a, const Vec2<T> &v); >template <class T> Vec3<T> operator * (T a, const Vec3<T> &v); >template <class T> Vec4<T> operator * (T a, const Vec4<T> &v); > > > > > > >typedef Vec2 <short> V2s; >typedef Vec2 <int> V2i; >typedef Vec2 <float> V2f; >typedef Vec2 <double> V2d; >typedef Vec3 <short> V3s; >typedef Vec3 <int> V3i; >typedef Vec3 <float> V3f; >typedef Vec3 <double> V3d; >typedef Vec4 <short> V4s; >typedef Vec4 <int> V4i; >typedef Vec4 <float> V4f; >typedef Vec4 <double> V4d; ># 706 "/usr/include/OpenEXR/ImathVec.h" >template <> short >Vec2<short>::length () const; > >template <> const Vec2<short> & >Vec2<short>::normalize (); > >template <> const Vec2<short> & >Vec2<short>::normalizeExc () throw (Iex::MathExc); > >template <> const Vec2<short> & >Vec2<short>::normalizeNonNull (); > >template <> Vec2<short> >Vec2<short>::normalized () const; > >template <> Vec2<short> >Vec2<short>::normalizedExc () const throw (Iex::MathExc); > >template <> Vec2<short> >Vec2<short>::normalizedNonNull () const; > > > > >template <> int >Vec2<int>::length () const; > >template <> const Vec2<int> & >Vec2<int>::normalize (); > >template <> const Vec2<int> & >Vec2<int>::normalizeExc () throw (Iex::MathExc); > >template <> const Vec2<int> & >Vec2<int>::normalizeNonNull (); > >template <> Vec2<int> >Vec2<int>::normalized () const; > >template <> Vec2<int> >Vec2<int>::normalizedExc () const throw (Iex::MathExc); > >template <> Vec2<int> >Vec2<int>::normalizedNonNull () const; > > > > >template <> short >Vec3<short>::length () const; > >template <> const Vec3<short> & >Vec3<short>::normalize (); > >template <> const Vec3<short> & >Vec3<short>::normalizeExc () throw (Iex::MathExc); > >template <> const Vec3<short> & >Vec3<short>::normalizeNonNull (); > >template <> Vec3<short> >Vec3<short>::normalized () const; > >template <> Vec3<short> >Vec3<short>::normalizedExc () const throw (Iex::MathExc); > >template <> Vec3<short> >Vec3<short>::normalizedNonNull () const; > > > > >template <> int >Vec3<int>::length () const; > >template <> const Vec3<int> & >Vec3<int>::normalize (); > >template <> const Vec3<int> & >Vec3<int>::normalizeExc () throw (Iex::MathExc); > >template <> const Vec3<int> & >Vec3<int>::normalizeNonNull (); > >template <> Vec3<int> >Vec3<int>::normalized () const; > >template <> Vec3<int> >Vec3<int>::normalizedExc () const throw (Iex::MathExc); > >template <> Vec3<int> >Vec3<int>::normalizedNonNull () const; > > > >template <> short >Vec4<short>::length () const; > >template <> const Vec4<short> & >Vec4<short>::normalize (); > >template <> const Vec4<short> & >Vec4<short>::normalizeExc () throw (Iex::MathExc); > >template <> const Vec4<short> & >Vec4<short>::normalizeNonNull (); > >template <> Vec4<short> >Vec4<short>::normalized () const; > >template <> Vec4<short> >Vec4<short>::normalizedExc () const throw (Iex::MathExc); > >template <> Vec4<short> >Vec4<short>::normalizedNonNull () const; > > > > >template <> int >Vec4<int>::length () const; > >template <> const Vec4<int> & >Vec4<int>::normalize (); > >template <> const Vec4<int> & >Vec4<int>::normalizeExc () throw (Iex::MathExc); > >template <> const Vec4<int> & >Vec4<int>::normalizeNonNull (); > >template <> Vec4<int> >Vec4<int>::normalized () const; > >template <> Vec4<int> >Vec4<int>::normalizedExc () const throw (Iex::MathExc); > >template <> Vec4<int> >Vec4<int>::normalizedNonNull () const; > > > > > > >template <class T> >inline T & >Vec2<T>::operator [] (int i) >{ > return (&x)[i]; >} > >template <class T> >inline const T & >Vec2<T>::operator [] (int i) const >{ > return (&x)[i]; >} > >template <class T> >inline >Vec2<T>::Vec2 () >{ > >} > >template <class T> >inline >Vec2<T>::Vec2 (T a) >{ > x = y = a; >} > >template <class T> >inline >Vec2<T>::Vec2 (T a, T b) >{ > x = a; > y = b; >} > >template <class T> >inline >Vec2<T>::Vec2 (const Vec2 &v) >{ > x = v.x; > y = v.y; >} > >template <class T> >template <class S> >inline >Vec2<T>::Vec2 (const Vec2<S> &v) >{ > x = T (v.x); > y = T (v.y); >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator = (const Vec2 &v) >{ > x = v.x; > y = v.y; > return *this; >} > >template <class T> >template <class S> >inline void >Vec2<T>::setValue (S a, S b) >{ > x = T (a); > y = T (b); >} > >template <class T> >template <class S> >inline void >Vec2<T>::setValue (const Vec2<S> &v) >{ > x = T (v.x); > y = T (v.y); >} > >template <class T> >template <class S> >inline void >Vec2<T>::getValue (S &a, S &b) const >{ > a = S (x); > b = S (y); >} > >template <class T> >template <class S> >inline void >Vec2<T>::getValue (Vec2<S> &v) const >{ > v.x = S (x); > v.y = S (y); >} > >template <class T> >inline T * >Vec2<T>::getValue() >{ > return (T *) &x; >} > >template <class T> >inline const T * >Vec2<T>::getValue() const >{ > return (const T *) &x; >} > >template <class T> >template <class S> >inline bool >Vec2<T>::operator == (const Vec2<S> &v) const >{ > return x == v.x && y == v.y; >} > >template <class T> >template <class S> >inline bool >Vec2<T>::operator != (const Vec2<S> &v) const >{ > return x != v.x || y != v.y; >} > >template <class T> >bool >Vec2<T>::equalWithAbsError (const Vec2<T> &v, T e) const >{ > for (int i = 0; i < 2; i++) > if (!Imath::equalWithAbsError ((*this)[i], v[i], e)) > return false; > > return true; >} > >template <class T> >bool >Vec2<T>::equalWithRelError (const Vec2<T> &v, T e) const >{ > for (int i = 0; i < 2; i++) > if (!Imath::equalWithRelError ((*this)[i], v[i], e)) > return false; > > return true; >} > >template <class T> >inline T >Vec2<T>::dot (const Vec2 &v) const >{ > return x * v.x + y * v.y; >} > >template <class T> >inline T >Vec2<T>::operator ^ (const Vec2 &v) const >{ > return dot (v); >} > >template <class T> >inline T >Vec2<T>::cross (const Vec2 &v) const >{ > return x * v.y - y * v.x; > >} > >template <class T> >inline T >Vec2<T>::operator % (const Vec2 &v) const >{ > return x * v.y - y * v.x; >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator += (const Vec2 &v) >{ > x += v.x; > y += v.y; > return *this; >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator + (const Vec2 &v) const >{ > return Vec2 (x + v.x, y + v.y); >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator -= (const Vec2 &v) >{ > x -= v.x; > y -= v.y; > return *this; >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator - (const Vec2 &v) const >{ > return Vec2 (x - v.x, y - v.y); >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator - () const >{ > return Vec2 (-x, -y); >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::negate () >{ > x = -x; > y = -y; > return *this; >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator *= (const Vec2 &v) >{ > x *= v.x; > y *= v.y; > return *this; >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator *= (T a) >{ > x *= a; > y *= a; > return *this; >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator * (const Vec2 &v) const >{ > return Vec2 (x * v.x, y * v.y); >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator * (T a) const >{ > return Vec2 (x * a, y * a); >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator /= (const Vec2 &v) >{ > x /= v.x; > y /= v.y; > return *this; >} > >template <class T> >inline const Vec2<T> & >Vec2<T>::operator /= (T a) >{ > x /= a; > y /= a; > return *this; >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator / (const Vec2 &v) const >{ > return Vec2 (x / v.x, y / v.y); >} > >template <class T> >inline Vec2<T> >Vec2<T>::operator / (T a) const >{ > return Vec2 (x / a, y / a); >} > >template <class T> >T >Vec2<T>::lengthTiny () const >{ > T absX = (x >= T (0))? x: -x; > T absY = (y >= T (0))? y: -y; > > T max = absX; > > if (max < absY) > max = absY; > > if (max == T (0)) > return T (0); > > > > > > > > absX /= max; > absY /= max; > > return max * Math<T>::sqrt (absX * absX + absY * absY); >} > >template <class T> >inline T >Vec2<T>::length () const >{ > T length2 = dot (*this); > > if (length2 < T (2) * limits<T>::smallest()) > return lengthTiny(); > > return Math<T>::sqrt (length2); >} > >template <class T> >inline T >Vec2<T>::length2 () const >{ > return dot (*this); >} > >template <class T> >const Vec2<T> & >Vec2<T>::normalize () >{ > T l = length(); > > if (l != T (0)) > { > > > > > > > x /= l; > y /= l; > } > > return *this; >} > >template <class T> >const Vec2<T> & >Vec2<T>::normalizeExc () throw (Iex::MathExc) >{ > T l = length(); > > if (l == T (0)) > throw NullVecExc ("Cannot normalize null vector."); > > x /= l; > y /= l; > return *this; >} > >template <class T> >inline >const Vec2<T> & >Vec2<T>::normalizeNonNull () >{ > T l = length(); > x /= l; > y /= l; > return *this; >} > >template <class T> >Vec2<T> >Vec2<T>::normalized () const >{ > T l = length(); > > if (l == T (0)) > return Vec2 (T (0)); > > return Vec2 (x / l, y / l); >} > >template <class T> >Vec2<T> >Vec2<T>::normalizedExc () const throw (Iex::MathExc) >{ > T l = length(); > > if (l == T (0)) > throw NullVecExc ("Cannot normalize null vector."); > > return Vec2 (x / l, y / l); >} > >template <class T> >inline >Vec2<T> >Vec2<T>::normalizedNonNull () const >{ > T l = length(); > return Vec2 (x / l, y / l); >} > > > > > > >template <class T> >inline T & >Vec3<T>::operator [] (int i) >{ > return (&x)[i]; >} > >template <class T> >inline const T & >Vec3<T>::operator [] (int i) const >{ > return (&x)[i]; >} > >template <class T> >inline >Vec3<T>::Vec3 () >{ > >} > >template <class T> >inline >Vec3<T>::Vec3 (T a) >{ > x = y = z = a; >} > >template <class T> >inline >Vec3<T>::Vec3 (T a, T b, T c) >{ > x = a; > y = b; > z = c; >} > >template <class T> >inline >Vec3<T>::Vec3 (const Vec3 &v) >{ > x = v.x; > y = v.y; > z = v.z; >} > >template <class T> >template <class S> >inline >Vec3<T>::Vec3 (const Vec3<S> &v) >{ > x = T (v.x); > y = T (v.y); > z = T (v.z); >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator = (const Vec3 &v) >{ > x = v.x; > y = v.y; > z = v.z; > return *this; >} > >template <class T> >template <class S> >inline >Vec3<T>::Vec3 (const Vec4<S> &v) >{ > x = T (v.x / v.w); > y = T (v.y / v.w); > z = T (v.z / v.w); >} > >template <class T> >template <class S> >Vec3<T>::Vec3 (const Vec4<S> &v, InfException) >{ > T vx = T (v.x); > T vy = T (v.y); > T vz = T (v.z); > T vw = T (v.w); > > T absW = (vw >= T (0))? vw: -vw; > > if (absW < 1) > { > T m = baseTypeMax() * absW; > > if (vx <= -m || vx >= m || vy <= -m || vy >= m || vz <= -m || vz >= m) > throw InfPointExc ("Cannot normalize point at infinity."); > } > > x = vx / vw; > y = vy / vw; > z = vz / vw; >} > >template <class T> >template <class S> >inline void >Vec3<T>::setValue (S a, S b, S c) >{ > x = T (a); > y = T (b); > z = T (c); >} > >template <class T> >template <class S> >inline void >Vec3<T>::setValue (const Vec3<S> &v) >{ > x = T (v.x); > y = T (v.y); > z = T (v.z); >} > >template <class T> >template <class S> >inline void >Vec3<T>::getValue (S &a, S &b, S &c) const >{ > a = S (x); > b = S (y); > c = S (z); >} > >template <class T> >template <class S> >inline void >Vec3<T>::getValue (Vec3<S> &v) const >{ > v.x = S (x); > v.y = S (y); > v.z = S (z); >} > >template <class T> >inline T * >Vec3<T>::getValue() >{ > return (T *) &x; >} > >template <class T> >inline const T * >Vec3<T>::getValue() const >{ > return (const T *) &x; >} > >template <class T> >template <class S> >inline bool >Vec3<T>::operator == (const Vec3<S> &v) const >{ > return x == v.x && y == v.y && z == v.z; >} > >template <class T> >template <class S> >inline bool >Vec3<T>::operator != (const Vec3<S> &v) const >{ > return x != v.x || y != v.y || z != v.z; >} > >template <class T> >bool >Vec3<T>::equalWithAbsError (const Vec3<T> &v, T e) const >{ > for (int i = 0; i < 3; i++) > if (!Imath::equalWithAbsError ((*this)[i], v[i], e)) > return false; > > return true; >} > >template <class T> >bool >Vec3<T>::equalWithRelError (const Vec3<T> &v, T e) const >{ > for (int i = 0; i < 3; i++) > if (!Imath::equalWithRelError ((*this)[i], v[i], e)) > return false; > > return true; >} > >template <class T> >inline T >Vec3<T>::dot (const Vec3 &v) const >{ > return x * v.x + y * v.y + z * v.z; >} > >template <class T> >inline T >Vec3<T>::operator ^ (const Vec3 &v) const >{ > return dot (v); >} > >template <class T> >inline Vec3<T> >Vec3<T>::cross (const Vec3 &v) const >{ > return Vec3 (y * v.z - z * v.y, > z * v.x - x * v.z, > x * v.y - y * v.x); >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator %= (const Vec3 &v) >{ > T a = y * v.z - z * v.y; > T b = z * v.x - x * v.z; > T c = x * v.y - y * v.x; > x = a; > y = b; > z = c; > return *this; >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator % (const Vec3 &v) const >{ > return Vec3 (y * v.z - z * v.y, > z * v.x - x * v.z, > x * v.y - y * v.x); >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator += (const Vec3 &v) >{ > x += v.x; > y += v.y; > z += v.z; > return *this; >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator + (const Vec3 &v) const >{ > return Vec3 (x + v.x, y + v.y, z + v.z); >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator -= (const Vec3 &v) >{ > x -= v.x; > y -= v.y; > z -= v.z; > return *this; >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator - (const Vec3 &v) const >{ > return Vec3 (x - v.x, y - v.y, z - v.z); >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator - () const >{ > return Vec3 (-x, -y, -z); >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::negate () >{ > x = -x; > y = -y; > z = -z; > return *this; >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator *= (const Vec3 &v) >{ > x *= v.x; > y *= v.y; > z *= v.z; > return *this; >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator *= (T a) >{ > x *= a; > y *= a; > z *= a; > return *this; >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator * (const Vec3 &v) const >{ > return Vec3 (x * v.x, y * v.y, z * v.z); >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator * (T a) const >{ > return Vec3 (x * a, y * a, z * a); >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator /= (const Vec3 &v) >{ > x /= v.x; > y /= v.y; > z /= v.z; > return *this; >} > >template <class T> >inline const Vec3<T> & >Vec3<T>::operator /= (T a) >{ > x /= a; > y /= a; > z /= a; > return *this; >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator / (const Vec3 &v) const >{ > return Vec3 (x / v.x, y / v.y, z / v.z); >} > >template <class T> >inline Vec3<T> >Vec3<T>::operator / (T a) const >{ > return Vec3 (x / a, y / a, z / a); >} > >template <class T> >T >Vec3<T>::lengthTiny () const >{ > T absX = (x >= T (0))? x: -x; > T absY = (y >= T (0))? y: -y; > T absZ = (z >= T (0))? z: -z; > > T max = absX; > > if (max < absY) > max = absY; > > if (max < absZ) > max = absZ; > > if (max == T (0)) > return T (0); > > > > > > > > absX /= max; > absY /= max; > absZ /= max; > > return max * Math<T>::sqrt (absX * absX + absY * absY + absZ * absZ); >} > >template <class T> >inline T >Vec3<T>::length () const >{ > T length2 = dot (*this); > > if (length2 < T (2) * limits<T>::smallest()) > return lengthTiny(); > > return Math<T>::sqrt (length2); >} > >template <class T> >inline T >Vec3<T>::length2 () const >{ > return dot (*this); >} > >template <class T> >const Vec3<T> & >Vec3<T>::normalize () >{ > T l = length(); > > if (l != T (0)) > { > > > > > > > x /= l; > y /= l; > z /= l; > } > > return *this; >} > >template <class T> >const Vec3<T> & >Vec3<T>::normalizeExc () throw (Iex::MathExc) >{ > T l = length(); > > if (l == T (0)) > throw NullVecExc ("Cannot normalize null vector."); > > x /= l; > y /= l; > z /= l; > return *this; >} > >template <class T> >inline >const Vec3<T> & >Vec3<T>::normalizeNonNull () >{ > T l = length(); > x /= l; > y /= l; > z /= l; > return *this; >} > >template <class T> >Vec3<T> >Vec3<T>::normalized () const >{ > T l = length(); > > if (l == T (0)) > return Vec3 (T (0)); > > return Vec3 (x / l, y / l, z / l); >} > >template <class T> >Vec3<T> >Vec3<T>::normalizedExc () const throw (Iex::MathExc) >{ > T l = length(); > > if (l == T (0)) > throw NullVecExc ("Cannot normalize null vector."); > > return Vec3 (x / l, y / l, z / l); >} > >template <class T> >inline >Vec3<T> >Vec3<T>::normalizedNonNull () const >{ > T l = length(); > return Vec3 (x / l, y / l, z / l); >} > > > > > > >template <class T> >inline T & >Vec4<T>::operator [] (int i) >{ > return (&x)[i]; >} > >template <class T> >inline const T & >Vec4<T>::operator [] (int i) const >{ > return (&x)[i]; >} > >template <class T> >inline >Vec4<T>::Vec4 () >{ > >} > >template <class T> >inline >Vec4<T>::Vec4 (T a) >{ > x = y = z = w = a; >} > >template <class T> >inline >Vec4<T>::Vec4 (T a, T b, T c, T d) >{ > x = a; > y = b; > z = c; > w = d; >} > >template <class T> >inline >Vec4<T>::Vec4 (const Vec4 &v) >{ > x = v.x; > y = v.y; > z = v.z; > w = v.w; >} > >template <class T> >template <class S> >inline >Vec4<T>::Vec4 (const Vec4<S> &v) >{ > x = T (v.x); > y = T (v.y); > z = T (v.z); > w = T (v.w); >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator = (const Vec4 &v) >{ > x = v.x; > y = v.y; > z = v.z; > w = v.w; > return *this; >} > >template <class T> >template <class S> >inline >Vec4<T>::Vec4 (const Vec3<S> &v) >{ > x = T (v.x); > y = T (v.y); > z = T (v.z); > w = T (1); >} > >template <class T> >template <class S> >inline bool >Vec4<T>::operator == (const Vec4<S> &v) const >{ > return x == v.x && y == v.y && z == v.z && w == v.w; >} > >template <class T> >template <class S> >inline bool >Vec4<T>::operator != (const Vec4<S> &v) const >{ > return x != v.x || y != v.y || z != v.z || w != v.w; >} > >template <class T> >bool >Vec4<T>::equalWithAbsError (const Vec4<T> &v, T e) const >{ > for (int i = 0; i < 4; i++) > if (!Imath::equalWithAbsError ((*this)[i], v[i], e)) > return false; > > return true; >} > >template <class T> >bool >Vec4<T>::equalWithRelError (const Vec4<T> &v, T e) const >{ > for (int i = 0; i < 4; i++) > if (!Imath::equalWithRelError ((*this)[i], v[i], e)) > return false; > > return true; >} > >template <class T> >inline T >Vec4<T>::dot (const Vec4 &v) const >{ > return x * v.x + y * v.y + z * v.z + w * v.w; >} > >template <class T> >inline T >Vec4<T>::operator ^ (const Vec4 &v) const >{ > return dot (v); >} > > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator += (const Vec4 &v) >{ > x += v.x; > y += v.y; > z += v.z; > w += v.w; > return *this; >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator + (const Vec4 &v) const >{ > return Vec4 (x + v.x, y + v.y, z + v.z, w + v.w); >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator -= (const Vec4 &v) >{ > x -= v.x; > y -= v.y; > z -= v.z; > w -= v.w; > return *this; >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator - (const Vec4 &v) const >{ > return Vec4 (x - v.x, y - v.y, z - v.z, w - v.w); >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator - () const >{ > return Vec4 (-x, -y, -z, -w); >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::negate () >{ > x = -x; > y = -y; > z = -z; > w = -w; > return *this; >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator *= (const Vec4 &v) >{ > x *= v.x; > y *= v.y; > z *= v.z; > w *= v.w; > return *this; >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator *= (T a) >{ > x *= a; > y *= a; > z *= a; > w *= a; > return *this; >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator * (const Vec4 &v) const >{ > return Vec4 (x * v.x, y * v.y, z * v.z, w * v.w); >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator * (T a) const >{ > return Vec4 (x * a, y * a, z * a, w * a); >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator /= (const Vec4 &v) >{ > x /= v.x; > y /= v.y; > z /= v.z; > w /= v.w; > return *this; >} > >template <class T> >inline const Vec4<T> & >Vec4<T>::operator /= (T a) >{ > x /= a; > y /= a; > z /= a; > w /= a; > return *this; >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator / (const Vec4 &v) const >{ > return Vec4 (x / v.x, y / v.y, z / v.z, w / v.w); >} > >template <class T> >inline Vec4<T> >Vec4<T>::operator / (T a) const >{ > return Vec4 (x / a, y / a, z / a, w / a); >} > >template <class T> >T >Vec4<T>::lengthTiny () const >{ > T absX = (x >= T (0))? x: -x; > T absY = (y >= T (0))? y: -y; > T absZ = (z >= T (0))? z: -z; > T absW = (w >= T (0))? w: -w; > > T max = absX; > > if (max < absY) > max = absY; > > if (max < absZ) > max = absZ; > > if (max < absW) > max = absW; > > if (max == T (0)) > return T (0); > > > > > > > > absX /= max; > absY /= max; > absZ /= max; > absW /= max; > > return max * > Math<T>::sqrt (absX * absX + absY * absY + absZ * absZ + absW * absW); >} > >template <class T> >inline T >Vec4<T>::length () const >{ > T length2 = dot (*this); > > if (length2 < T (2) * limits<T>::smallest()) > return lengthTiny(); > > return Math<T>::sqrt (length2); >} > >template <class T> >inline T >Vec4<T>::length2 () const >{ > return dot (*this); >} > >template <class T> >const Vec4<T> & >Vec4<T>::normalize () >{ > T l = length(); > > if (l != T (0)) > { > > > > > > > x /= l; > y /= l; > z /= l; > w /= l; > } > > return *this; >} > >template <class T> >const Vec4<T> & >Vec4<T>::normalizeExc () throw (Iex::MathExc) >{ > T l = length(); > > if (l == T (0)) > throw NullVecExc ("Cannot normalize null vector."); > > x /= l; > y /= l; > z /= l; > w /= l; > return *this; >} > >template <class T> >inline >const Vec4<T> & >Vec4<T>::normalizeNonNull () >{ > T l = length(); > x /= l; > y /= l; > z /= l; > w /= l; > return *this; >} > >template <class T> >Vec4<T> >Vec4<T>::normalized () const >{ > T l = length(); > > if (l == T (0)) > return Vec4 (T (0)); > > return Vec4 (x / l, y / l, z / l, w / l); >} > >template <class T> >Vec4<T> >Vec4<T>::normalizedExc () const throw (Iex::MathExc) >{ > T l = length(); > > if (l == T (0)) > throw NullVecExc ("Cannot normalize null vector."); > > return Vec4 (x / l, y / l, z / l, w / l); >} > >template <class T> >inline >Vec4<T> >Vec4<T>::normalizedNonNull () const >{ > T l = length(); > return Vec4 (x / l, y / l, z / l, w / l); >} > > > > > >template <class T> >std::ostream & >operator << (std::ostream &s, const Vec2<T> &v) >{ > return s << '(' << v.x << ' ' << v.y << ')'; >} > >template <class T> >std::ostream & >operator << (std::ostream &s, const Vec3<T> &v) >{ > return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ')'; >} > >template <class T> >std::ostream & >operator << (std::ostream &s, const Vec4<T> &v) >{ > return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ' ' << v.w << ')'; >} > > > > > > >template <class T> >inline Vec2<T> >operator * (T a, const Vec2<T> &v) >{ > return Vec2<T> (a * v.x, a * v.y); >} > >template <class T> >inline Vec3<T> >operator * (T a, const Vec3<T> &v) >{ > return Vec3<T> (a * v.x, a * v.y, a * v.z); >} > >template <class T> >inline Vec4<T> >operator * (T a, const Vec4<T> &v) >{ > return Vec4<T> (a * v.x, a * v.y, a * v.z, a * v.w); >} > > > > > > >} ># 52 "/usr/include/OpenEXR/ImfHeader.h" 2 ># 1 "/usr/include/OpenEXR/ImathBox.h" 1 ># 67 "/usr/include/OpenEXR/ImathBox.h" >namespace Imath { > > >template <class T> >class Box >{ > public: > > > > > > T min; > T max; > > > > > > Box (); > Box (const T &point); > Box (const T &minT, const T &maxT); > > > > > > bool operator == (const Box<T> &src) const; > bool operator != (const Box<T> &src) const; > > > > > > void makeEmpty (); > void extendBy (const T &point); > void extendBy (const Box<T> &box); > void makeInfinite (); > > > > > > T size () const; > T center () const; > bool intersects (const T &point) const; > bool intersects (const Box<T> &box) const; > > unsigned int majorAxis () const; > > > > > > bool isEmpty () const; > bool hasVolume () const; > bool isInfinite () const; >}; > > > > > > >typedef Box <V2s> Box2s; >typedef Box <V2i> Box2i; >typedef Box <V2f> Box2f; >typedef Box <V2d> Box2d; >typedef Box <V3s> Box3s; >typedef Box <V3i> Box3i; >typedef Box <V3f> Box3f; >typedef Box <V3d> Box3d; > > > > > > >template <class T> >inline Box<T>::Box() >{ > makeEmpty(); >} > > >template <class T> >inline Box<T>::Box (const T &point) >{ > min = point; > max = point; >} > > >template <class T> >inline Box<T>::Box (const T &minT, const T &maxT) >{ > min = minT; > max = maxT; >} > > >template <class T> >inline bool >Box<T>::operator == (const Box<T> &src) const >{ > return (min == src.min && max == src.max); >} > > >template <class T> >inline bool >Box<T>::operator != (const Box<T> &src) const >{ > return (min != src.min || max != src.max); >} > > >template <class T> >inline void Box<T>::makeEmpty() >{ > min = T(T::baseTypeMax()); > max = T(T::baseTypeMin()); >} > >template <class T> >inline void Box<T>::makeInfinite() >{ > min = T(T::baseTypeMin()); > max = T(T::baseTypeMax()); >} > > >template <class T> >inline void >Box<T>::extendBy(const T &point) >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (point[i] < min[i]) > min[i] = point[i]; > > if (point[i] > max[i]) > max[i] = point[i]; > } >} > > >template <class T> >inline void >Box<T>::extendBy(const Box<T> &box) >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (box.min[i] < min[i]) > min[i] = box.min[i]; > > if (box.max[i] > max[i]) > max[i] = box.max[i]; > } >} > > >template <class T> >inline bool >Box<T>::intersects(const T &point) const >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (point[i] < min[i] || point[i] > max[i]) > return false; > } > > return true; >} > > >template <class T> >inline bool >Box<T>::intersects(const Box<T> &box) const >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (box.max[i] < min[i] || box.min[i] > max[i]) > return false; > } > > return true; >} > > >template <class T> >inline T >Box<T>::size() const >{ > if (isEmpty()) > return T (0); > > return max - min; >} > > >template <class T> >inline T >Box<T>::center() const >{ > return (max + min) / 2; >} > > >template <class T> >inline bool >Box<T>::isEmpty() const >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (max[i] < min[i]) > return true; > } > > return false; >} > >template <class T> >inline bool >Box<T>::isInfinite() const >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (min[i] != T::baseTypeMin() || max[i] != T::baseTypeMax()) > return false; > } > > return true; >} > > >template <class T> >inline bool >Box<T>::hasVolume() const >{ > for (unsigned int i = 0; i < min.dimensions(); i++) > { > if (max[i] <= min[i]) > return false; > } > > return true; >} > > >template<class T> >inline unsigned int >Box<T>::majorAxis() const >{ > unsigned int major = 0; > T s = size(); > > for (unsigned int i = 1; i < min.dimensions(); i++) > { > if (s[i] > s[major]) > major = i; > } > > return major; >} > > > > > > > >template <typename T> class Box; > >template <class T> >class Box<Vec2<T> > >{ > public: > > > > > > Vec2<T> min; > Vec2<T> max; > > > > > > Box(); > Box (const Vec2<T> &point); > Box (const Vec2<T> &minT, const Vec2<T> &maxT); > > > > > > bool operator == (const Box<Vec2<T> > &src) const; > bool operator != (const Box<Vec2<T> > &src) const; > > > > > > void makeEmpty(); > void extendBy (const Vec2<T> &point); > void extendBy (const Box<Vec2<T> > &box); > void makeInfinite(); > > > > > > Vec2<T> size() const; > Vec2<T> center() const; > bool intersects (const Vec2<T> &point) const; > bool intersects (const Box<Vec2<T> > &box) const; > > unsigned int majorAxis() const; > > > > > > bool isEmpty() const; > bool hasVolume() const; > bool isInfinite() const; >}; > > > > > >template <class T> >inline Box<Vec2<T> >::Box() >{ > makeEmpty(); >} > > >template <class T> >inline Box<Vec2<T> >::Box (const Vec2<T> &point) >{ > min = point; > max = point; >} > > >template <class T> >inline Box<Vec2<T> >::Box (const Vec2<T> &minT, const Vec2<T> &maxT) >{ > min = minT; > max = maxT; >} > > >template <class T> >inline bool >Box<Vec2<T> >::operator == (const Box<Vec2<T> > &src) const >{ > return (min == src.min && max == src.max); >} > > >template <class T> >inline bool >Box<Vec2<T> >::operator != (const Box<Vec2<T> > &src) const >{ > return (min != src.min || max != src.max); >} > > >template <class T> >inline void Box<Vec2<T> >::makeEmpty() >{ > min = Vec2<T>(Vec2<T>::baseTypeMax()); > max = Vec2<T>(Vec2<T>::baseTypeMin()); >} > >template <class T> >inline void Box<Vec2<T> >::makeInfinite() >{ > min = Vec2<T>(Vec2<T>::baseTypeMin()); > max = Vec2<T>(Vec2<T>::baseTypeMax()); >} > > >template <class T> >inline void >Box<Vec2<T> >::extendBy (const Vec2<T> &point) >{ > if (point[0] < min[0]) > min[0] = point[0]; > > if (point[0] > max[0]) > max[0] = point[0]; > > if (point[1] < min[1]) > min[1] = point[1]; > > if (point[1] > max[1]) > max[1] = point[1]; >} > > >template <class T> >inline void >Box<Vec2<T> >::extendBy (const Box<Vec2<T> > &box) >{ > if (box.min[0] < min[0]) > min[0] = box.min[0]; > > if (box.max[0] > max[0]) > max[0] = box.max[0]; > > if (box.min[1] < min[1]) > min[1] = box.min[1]; > > if (box.max[1] > max[1]) > max[1] = box.max[1]; >} > > >template <class T> >inline bool >Box<Vec2<T> >::intersects (const Vec2<T> &point) const >{ > if (point[0] < min[0] || point[0] > max[0] || > point[1] < min[1] || point[1] > max[1]) > return false; > > return true; >} > > >template <class T> >inline bool >Box<Vec2<T> >::intersects (const Box<Vec2<T> > &box) const >{ > if (box.max[0] < min[0] || box.min[0] > max[0] || > box.max[1] < min[1] || box.min[1] > max[1]) > return false; > > return true; >} > > >template <class T> >inline Vec2<T> >Box<Vec2<T> >::size() const >{ > if (isEmpty()) > return Vec2<T> (0); > > return max - min; >} > > >template <class T> >inline Vec2<T> >Box<Vec2<T> >::center() const >{ > return (max + min) / 2; >} > > >template <class T> >inline bool >Box<Vec2<T> >::isEmpty() const >{ > if (max[0] < min[0] || > max[1] < min[1]) > return true; > > return false; >} > >template <class T> >inline bool >Box<Vec2<T> > ::isInfinite() const >{ > if (min[0] != limits<T>::min() || max[0] != limits<T>::max() || > min[1] != limits<T>::min() || max[1] != limits<T>::max()) > return false; > > return true; >} > > >template <class T> >inline bool >Box<Vec2<T> >::hasVolume() const >{ > if (max[0] <= min[0] || > max[1] <= min[1]) > return false; > > return true; >} > > >template <class T> >inline unsigned int >Box<Vec2<T> >::majorAxis() const >{ > unsigned int major = 0; > Vec2<T> s = size(); > > if (s[1] > s[major]) > major = 1; > > return major; >} > > >template <class T> >class Box<Vec3<T> > >{ > public: > > > > > > Vec3<T> min; > Vec3<T> max; > > > > > > Box(); > Box (const Vec3<T> &point); > Box (const Vec3<T> &minT, const Vec3<T> &maxT); > > > > > > bool operator == (const Box<Vec3<T> > &src) const; > bool operator != (const Box<Vec3<T> > &src) const; > > > > > > void makeEmpty(); > void extendBy (const Vec3<T> &point); > void extendBy (const Box<Vec3<T> > &box); > void makeInfinite (); > > > > > > Vec3<T> size() const; > Vec3<T> center() const; > bool intersects (const Vec3<T> &point) const; > bool intersects (const Box<Vec3<T> > &box) const; > > unsigned int majorAxis() const; > > > > > > bool isEmpty() const; > bool hasVolume() const; > bool isInfinite() const; >}; > > > > > > >template <class T> >inline Box<Vec3<T> >::Box() >{ > makeEmpty(); >} > > >template <class T> >inline Box<Vec3<T> >::Box (const Vec3<T> &point) >{ > min = point; > max = point; >} > > >template <class T> >inline Box<Vec3<T> >::Box (const Vec3<T> &minT, const Vec3<T> &maxT) >{ > min = minT; > max = maxT; >} > > >template <class T> >inline bool >Box<Vec3<T> >::operator == (const Box<Vec3<T> > &src) const >{ > return (min == src.min && max == src.max); >} > > >template <class T> >inline bool >Box<Vec3<T> >::operator != (const Box<Vec3<T> > &src) const >{ > return (min != src.min || max != src.max); >} > > >template <class T> >inline void Box<Vec3<T> >::makeEmpty() >{ > min = Vec3<T>(Vec3<T>::baseTypeMax()); > max = Vec3<T>(Vec3<T>::baseTypeMin()); >} > >template <class T> >inline void Box<Vec3<T> >::makeInfinite() >{ > min = Vec3<T>(Vec3<T>::baseTypeMin()); > max = Vec3<T>(Vec3<T>::baseTypeMax()); >} > > >template <class T> >inline void >Box<Vec3<T> >::extendBy (const Vec3<T> &point) >{ > if (point[0] < min[0]) > min[0] = point[0]; > > if (point[0] > max[0]) > max[0] = point[0]; > > if (point[1] < min[1]) > min[1] = point[1]; > > if (point[1] > max[1]) > max[1] = point[1]; > > if (point[2] < min[2]) > min[2] = point[2]; > > if (point[2] > max[2]) > max[2] = point[2]; >} > > >template <class T> >inline void >Box<Vec3<T> >::extendBy (const Box<Vec3<T> > &box) >{ > if (box.min[0] < min[0]) > min[0] = box.min[0]; > > if (box.max[0] > max[0]) > max[0] = box.max[0]; > > if (box.min[1] < min[1]) > min[1] = box.min[1]; > > if (box.max[1] > max[1]) > max[1] = box.max[1]; > > if (box.min[2] < min[2]) > min[2] = box.min[2]; > > if (box.max[2] > max[2]) > max[2] = box.max[2]; >} > > >template <class T> >inline bool >Box<Vec3<T> >::intersects (const Vec3<T> &point) const >{ > if (point[0] < min[0] || point[0] > max[0] || > point[1] < min[1] || point[1] > max[1] || > point[2] < min[2] || point[2] > max[2]) > return false; > > return true; >} > > >template <class T> >inline bool >Box<Vec3<T> >::intersects (const Box<Vec3<T> > &box) const >{ > if (box.max[0] < min[0] || box.min[0] > max[0] || > box.max[1] < min[1] || box.min[1] > max[1] || > box.max[2] < min[2] || box.min[2] > max[2]) > return false; > > return true; >} > > >template <class T> >inline Vec3<T> >Box<Vec3<T> >::size() const >{ > if (isEmpty()) > return Vec3<T> (0); > > return max - min; >} > > >template <class T> >inline Vec3<T> >Box<Vec3<T> >::center() const >{ > return (max + min) / 2; >} > > >template <class T> >inline bool >Box<Vec3<T> >::isEmpty() const >{ > if (max[0] < min[0] || > max[1] < min[1] || > max[2] < min[2]) > return true; > > return false; >} > >template <class T> >inline bool >Box<Vec3<T> >::isInfinite() const >{ > if (min[0] != limits<T>::min() || max[0] != limits<T>::max() || > min[1] != limits<T>::min() || max[1] != limits<T>::max() || > min[2] != limits<T>::min() || max[2] != limits<T>::max()) > return false; > > return true; >} > > >template <class T> >inline bool >Box<Vec3<T> >::hasVolume() const >{ > if (max[0] <= min[0] || > max[1] <= min[1] || > max[2] <= min[2]) > return false; > > return true; >} > > >template <class T> >inline unsigned int >Box<Vec3<T> >::majorAxis() const >{ > unsigned int major = 0; > Vec3<T> s = size(); > > if (s[1] > s[major]) > major = 1; > > if (s[2] > s[major]) > major = 2; > > return major; >} > > > > >} ># 53 "/usr/include/OpenEXR/ImfHeader.h" 2 > ># 1 "/usr/include/c++/4.8.2/map" 1 3 ># 58 "/usr/include/c++/4.8.2/map" 3 > ># 59 "/usr/include/c++/4.8.2/map" 3 > ># 1 "/usr/include/c++/4.8.2/bits/stl_tree.h" 1 3 ># 69 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 89 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > enum _Rb_tree_color { _S_red = false, _S_black = true }; > > struct _Rb_tree_node_base > { > typedef _Rb_tree_node_base* _Base_ptr; > typedef const _Rb_tree_node_base* _Const_Base_ptr; > > _Rb_tree_color _M_color; > _Base_ptr _M_parent; > _Base_ptr _M_left; > _Base_ptr _M_right; > > static _Base_ptr > _S_minimum(_Base_ptr __x) > { > while (__x->_M_left != 0) __x = __x->_M_left; > return __x; > } > > static _Const_Base_ptr > _S_minimum(_Const_Base_ptr __x) > { > while (__x->_M_left != 0) __x = __x->_M_left; > return __x; > } > > static _Base_ptr > _S_maximum(_Base_ptr __x) > { > while (__x->_M_right != 0) __x = __x->_M_right; > return __x; > } > > static _Const_Base_ptr > _S_maximum(_Const_Base_ptr __x) > { > while (__x->_M_right != 0) __x = __x->_M_right; > return __x; > } > }; > > template<typename _Val> > struct _Rb_tree_node : public _Rb_tree_node_base > { > typedef _Rb_tree_node<_Val>* _Link_type; > _Val _M_value_field; > > > > > > > > }; > > __attribute__ ((__pure__)) _Rb_tree_node_base* > _Rb_tree_increment(_Rb_tree_node_base* __x) throw (); > > __attribute__ ((__pure__)) const _Rb_tree_node_base* > _Rb_tree_increment(const _Rb_tree_node_base* __x) throw (); > > __attribute__ ((__pure__)) _Rb_tree_node_base* > _Rb_tree_decrement(_Rb_tree_node_base* __x) throw (); > > __attribute__ ((__pure__)) const _Rb_tree_node_base* > _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw (); > > template<typename _Tp> > struct _Rb_tree_iterator > { > typedef _Tp value_type; > typedef _Tp& reference; > typedef _Tp* pointer; > > typedef bidirectional_iterator_tag iterator_category; > typedef ptrdiff_t difference_type; > > typedef _Rb_tree_iterator<_Tp> _Self; > typedef _Rb_tree_node_base::_Base_ptr _Base_ptr; > typedef _Rb_tree_node<_Tp>* _Link_type; > > _Rb_tree_iterator() > : _M_node() { } > > explicit > _Rb_tree_iterator(_Link_type __x) > : _M_node(__x) { } > > reference > operator*() const > { return static_cast<_Link_type>(_M_node)->_M_value_field; } > > pointer > operator->() const > { return std::__addressof(static_cast<_Link_type> > (_M_node)->_M_value_field); } > > _Self& > operator++() > { > _M_node = _Rb_tree_increment(_M_node); > return *this; > } > > _Self > operator++(int) > { > _Self __tmp = *this; > _M_node = _Rb_tree_increment(_M_node); > return __tmp; > } > > _Self& > operator--() > { > _M_node = _Rb_tree_decrement(_M_node); > return *this; > } > > _Self > operator--(int) > { > _Self __tmp = *this; > _M_node = _Rb_tree_decrement(_M_node); > return __tmp; > } > > bool > operator==(const _Self& __x) const > { return _M_node == __x._M_node; } > > bool > operator!=(const _Self& __x) const > { return _M_node != __x._M_node; } > > _Base_ptr _M_node; > }; > > template<typename _Tp> > struct _Rb_tree_const_iterator > { > typedef _Tp value_type; > typedef const _Tp& reference; > typedef const _Tp* pointer; > > typedef _Rb_tree_iterator<_Tp> iterator; > > typedef bidirectional_iterator_tag iterator_category; > typedef ptrdiff_t difference_type; > > typedef _Rb_tree_const_iterator<_Tp> _Self; > typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr; > typedef const _Rb_tree_node<_Tp>* _Link_type; > > _Rb_tree_const_iterator() > : _M_node() { } > > explicit > _Rb_tree_const_iterator(_Link_type __x) > : _M_node(__x) { } > > _Rb_tree_const_iterator(const iterator& __it) > : _M_node(__it._M_node) { } > > iterator > _M_const_cast() const > { return iterator(static_cast<typename iterator::_Link_type> > (const_cast<typename iterator::_Base_ptr>(_M_node))); } > > reference > operator*() const > { return static_cast<_Link_type>(_M_node)->_M_value_field; } > > pointer > operator->() const > { return std::__addressof(static_cast<_Link_type> > (_M_node)->_M_value_field); } > > _Self& > operator++() > { > _M_node = _Rb_tree_increment(_M_node); > return *this; > } > > _Self > operator++(int) > { > _Self __tmp = *this; > _M_node = _Rb_tree_increment(_M_node); > return __tmp; > } > > _Self& > operator--() > { > _M_node = _Rb_tree_decrement(_M_node); > return *this; > } > > _Self > operator--(int) > { > _Self __tmp = *this; > _M_node = _Rb_tree_decrement(_M_node); > return __tmp; > } > > bool > operator==(const _Self& __x) const > { return _M_node == __x._M_node; } > > bool > operator!=(const _Self& __x) const > { return _M_node != __x._M_node; } > > _Base_ptr _M_node; > }; > > template<typename _Val> > inline bool > operator==(const _Rb_tree_iterator<_Val>& __x, > const _Rb_tree_const_iterator<_Val>& __y) > { return __x._M_node == __y._M_node; } > > template<typename _Val> > inline bool > operator!=(const _Rb_tree_iterator<_Val>& __x, > const _Rb_tree_const_iterator<_Val>& __y) > { return __x._M_node != __y._M_node; } > > void > _Rb_tree_insert_and_rebalance(const bool __insert_left, > _Rb_tree_node_base* __x, > _Rb_tree_node_base* __p, > _Rb_tree_node_base& __header) throw (); > > _Rb_tree_node_base* > _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z, > _Rb_tree_node_base& __header) throw (); > > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc = allocator<_Val> > > class _Rb_tree > { > typedef typename _Alloc::template rebind<_Rb_tree_node<_Val> >::other > _Node_allocator; > > protected: > typedef _Rb_tree_node_base* _Base_ptr; > typedef const _Rb_tree_node_base* _Const_Base_ptr; > > public: > typedef _Key key_type; > typedef _Val value_type; > typedef value_type* pointer; > typedef const value_type* const_pointer; > typedef value_type& reference; > typedef const value_type& const_reference; > typedef _Rb_tree_node<_Val>* _Link_type; > typedef const _Rb_tree_node<_Val>* _Const_Link_type; > typedef size_t size_type; > typedef ptrdiff_t difference_type; > typedef _Alloc allocator_type; > > _Node_allocator& > _M_get_Node_allocator() > { return *static_cast<_Node_allocator*>(&this->_M_impl); } > > const _Node_allocator& > _M_get_Node_allocator() const > { return *static_cast<const _Node_allocator*>(&this->_M_impl); } > > allocator_type > get_allocator() const > { return allocator_type(_M_get_Node_allocator()); } > > protected: > _Link_type > _M_get_node() > { return _M_impl._Node_allocator::allocate(1); } > > void > _M_put_node(_Link_type __p) > { _M_impl._Node_allocator::deallocate(__p, 1); } > > > _Link_type > _M_create_node(const value_type& __x) > { > _Link_type __tmp = _M_get_node(); > try > { get_allocator().construct > (std::__addressof(__tmp->_M_value_field), __x); } > catch(...) > { > _M_put_node(__tmp); > throw; > } > return __tmp; > } > > void > _M_destroy_node(_Link_type __p) > { > get_allocator().destroy(std::__addressof(__p->_M_value_field)); > _M_put_node(__p); > } ># 426 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > _Link_type > _M_clone_node(_Const_Link_type __x) > { > _Link_type __tmp = _M_create_node(__x->_M_value_field); > __tmp->_M_color = __x->_M_color; > __tmp->_M_left = 0; > __tmp->_M_right = 0; > return __tmp; > } > > protected: > template<typename _Key_compare, > bool _Is_pod_comparator = __is_pod(_Key_compare)> > struct _Rb_tree_impl : public _Node_allocator > { > _Key_compare _M_key_compare; > _Rb_tree_node_base _M_header; > size_type _M_node_count; > > _Rb_tree_impl() > : _Node_allocator(), _M_key_compare(), _M_header(), > _M_node_count(0) > { _M_initialize(); } > > _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a) > : _Node_allocator(__a), _M_key_compare(__comp), _M_header(), > _M_node_count(0) > { _M_initialize(); } ># 462 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > private: > void > _M_initialize() > { > this->_M_header._M_color = _S_red; > this->_M_header._M_parent = 0; > this->_M_header._M_left = &this->_M_header; > this->_M_header._M_right = &this->_M_header; > } > }; > > _Rb_tree_impl<_Compare> _M_impl; > > protected: > _Base_ptr& > _M_root() > { return this->_M_impl._M_header._M_parent; } > > _Const_Base_ptr > _M_root() const > { return this->_M_impl._M_header._M_parent; } > > _Base_ptr& > _M_leftmost() > { return this->_M_impl._M_header._M_left; } > > _Const_Base_ptr > _M_leftmost() const > { return this->_M_impl._M_header._M_left; } > > _Base_ptr& > _M_rightmost() > { return this->_M_impl._M_header._M_right; } > > _Const_Base_ptr > _M_rightmost() const > { return this->_M_impl._M_header._M_right; } > > _Link_type > _M_begin() > { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); } > > _Const_Link_type > _M_begin() const > { > return static_cast<_Const_Link_type> > (this->_M_impl._M_header._M_parent); > } > > _Link_type > _M_end() > { return static_cast<_Link_type>(&this->_M_impl._M_header); } > > _Const_Link_type > _M_end() const > { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); } > > static const_reference > _S_value(_Const_Link_type __x) > { return __x->_M_value_field; } > > static const _Key& > _S_key(_Const_Link_type __x) > { return _KeyOfValue()(_S_value(__x)); } > > static _Link_type > _S_left(_Base_ptr __x) > { return static_cast<_Link_type>(__x->_M_left); } > > static _Const_Link_type > _S_left(_Const_Base_ptr __x) > { return static_cast<_Const_Link_type>(__x->_M_left); } > > static _Link_type > _S_right(_Base_ptr __x) > { return static_cast<_Link_type>(__x->_M_right); } > > static _Const_Link_type > _S_right(_Const_Base_ptr __x) > { return static_cast<_Const_Link_type>(__x->_M_right); } > > static const_reference > _S_value(_Const_Base_ptr __x) > { return static_cast<_Const_Link_type>(__x)->_M_value_field; } > > static const _Key& > _S_key(_Const_Base_ptr __x) > { return _KeyOfValue()(_S_value(__x)); } > > static _Base_ptr > _S_minimum(_Base_ptr __x) > { return _Rb_tree_node_base::_S_minimum(__x); } > > static _Const_Base_ptr > _S_minimum(_Const_Base_ptr __x) > { return _Rb_tree_node_base::_S_minimum(__x); } > > static _Base_ptr > _S_maximum(_Base_ptr __x) > { return _Rb_tree_node_base::_S_maximum(__x); } > > static _Const_Base_ptr > _S_maximum(_Const_Base_ptr __x) > { return _Rb_tree_node_base::_S_maximum(__x); } > > public: > typedef _Rb_tree_iterator<value_type> iterator; > typedef _Rb_tree_const_iterator<value_type> const_iterator; > > typedef std::reverse_iterator<iterator> reverse_iterator; > typedef std::reverse_iterator<const_iterator> const_reverse_iterator; > > private: > pair<_Base_ptr, _Base_ptr> > _M_get_insert_unique_pos(const key_type& __k); > > pair<_Base_ptr, _Base_ptr> > _M_get_insert_equal_pos(const key_type& __k); > > pair<_Base_ptr, _Base_ptr> > _M_get_insert_hint_unique_pos(const_iterator __pos, > const key_type& __k); > > pair<_Base_ptr, _Base_ptr> > _M_get_insert_hint_equal_pos(const_iterator __pos, > const key_type& __k); ># 611 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > iterator > _M_insert_(_Base_ptr __x, _Base_ptr __y, > const value_type& __v); > > > > iterator > _M_insert_lower(_Base_ptr __y, const value_type& __v); > > iterator > _M_insert_equal_lower(const value_type& __x); > > > _Link_type > _M_copy(_Const_Link_type __x, _Link_type __p); > > void > _M_erase(_Link_type __x); > > iterator > _M_lower_bound(_Link_type __x, _Link_type __y, > const _Key& __k); > > const_iterator > _M_lower_bound(_Const_Link_type __x, _Const_Link_type __y, > const _Key& __k) const; > > iterator > _M_upper_bound(_Link_type __x, _Link_type __y, > const _Key& __k); > > const_iterator > _M_upper_bound(_Const_Link_type __x, _Const_Link_type __y, > const _Key& __k) const; > > public: > > _Rb_tree() { } > > _Rb_tree(const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_impl(__comp, _Node_allocator(__a)) { } > > _Rb_tree(const _Rb_tree& __x) > : _M_impl(__x._M_impl._M_key_compare, __x._M_get_Node_allocator()) > { > if (__x._M_root() != 0) > { > _M_root() = _M_copy(__x._M_begin(), _M_end()); > _M_leftmost() = _S_minimum(_M_root()); > _M_rightmost() = _S_maximum(_M_root()); > _M_impl._M_node_count = __x._M_impl._M_node_count; > } > } > > > > > > ~_Rb_tree() > { _M_erase(_M_begin()); } > > _Rb_tree& > operator=(const _Rb_tree& __x); > > > _Compare > key_comp() const > { return _M_impl._M_key_compare; } > > iterator > begin() > { > return iterator(static_cast<_Link_type> > (this->_M_impl._M_header._M_left)); > } > > const_iterator > begin() const > { > return const_iterator(static_cast<_Const_Link_type> > (this->_M_impl._M_header._M_left)); > } > > iterator > end() > { return iterator(static_cast<_Link_type>(&this->_M_impl._M_header)); } > > const_iterator > end() const > { > return const_iterator(static_cast<_Const_Link_type> > (&this->_M_impl._M_header)); > } > > reverse_iterator > rbegin() > { return reverse_iterator(end()); } > > const_reverse_iterator > rbegin() const > { return const_reverse_iterator(end()); } > > reverse_iterator > rend() > { return reverse_iterator(begin()); } > > const_reverse_iterator > rend() const > { return const_reverse_iterator(begin()); } > > bool > empty() const > { return _M_impl._M_node_count == 0; } > > size_type > size() const > { return _M_impl._M_node_count; } > > size_type > max_size() const > { return _M_get_Node_allocator().max_size(); } > > void > swap(_Rb_tree& __t); ># 771 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > pair<iterator, bool> > _M_insert_unique(const value_type& __x); > > iterator > _M_insert_equal(const value_type& __x); > > iterator > _M_insert_unique_(const_iterator __position, const value_type& __x); > > iterator > _M_insert_equal_(const_iterator __position, const value_type& __x); > > > template<typename _InputIterator> > void > _M_insert_unique(_InputIterator __first, _InputIterator __last); > > template<typename _InputIterator> > void > _M_insert_equal(_InputIterator __first, _InputIterator __last); > > private: > void > _M_erase_aux(const_iterator __position); > > void > _M_erase_aux(const_iterator __first, const_iterator __last); > > public: ># 824 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > void > erase(iterator __position) > { _M_erase_aux(__position); } > > void > erase(const_iterator __position) > { _M_erase_aux(__position); } > > size_type > erase(const key_type& __x); ># 846 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > void > erase(iterator __first, iterator __last) > { _M_erase_aux(__first, __last); } > > void > erase(const_iterator __first, const_iterator __last) > { _M_erase_aux(__first, __last); } > > void > erase(const key_type* __first, const key_type* __last); > > void > clear() > { > _M_erase(_M_begin()); > _M_leftmost() = _M_end(); > _M_root() = 0; > _M_rightmost() = _M_end(); > _M_impl._M_node_count = 0; > } > > > iterator > find(const key_type& __k); > > const_iterator > find(const key_type& __k) const; > > size_type > count(const key_type& __k) const; > > iterator > lower_bound(const key_type& __k) > { return _M_lower_bound(_M_begin(), _M_end(), __k); } > > const_iterator > lower_bound(const key_type& __k) const > { return _M_lower_bound(_M_begin(), _M_end(), __k); } > > iterator > upper_bound(const key_type& __k) > { return _M_upper_bound(_M_begin(), _M_end(), __k); } > > const_iterator > upper_bound(const key_type& __k) const > { return _M_upper_bound(_M_begin(), _M_end(), __k); } > > pair<iterator, iterator> > equal_range(const key_type& __k); > > pair<const_iterator, const_iterator> > equal_range(const key_type& __k) const; > > > bool > __rb_verify() const; > }; > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline bool > operator==(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { > return __x.size() == __y.size() > && std::equal(__x.begin(), __x.end(), __y.begin()); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline bool > operator<(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { > return std::lexicographical_compare(__x.begin(), __x.end(), > __y.begin(), __y.end()); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline bool > operator!=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { return !(__x == __y); } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline bool > operator>(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { return __y < __x; } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline bool > operator<=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { return !(__y < __x); } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline bool > operator>=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { return !(__x < __y); } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > inline void > swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) > { __x.swap(__y); } ># 984 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > operator=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x) > { > if (this != &__x) > { > > clear(); > _M_impl._M_key_compare = __x._M_impl._M_key_compare; > if (__x._M_root() != 0) > { > _M_root() = _M_copy(__x._M_begin(), _M_end()); > _M_leftmost() = _S_minimum(_M_root()); > _M_rightmost() = _S_maximum(_M_root()); > _M_impl._M_node_count = __x._M_impl._M_node_count; > } > } > return *this; > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_(_Base_ptr __x, _Base_ptr __p, const _Val& __v) > > { > bool __insert_left = (__x != 0 || __p == _M_end() > || _M_impl._M_key_compare(_KeyOfValue()(__v), > _S_key(__p))); > > _Link_type __z = _M_create_node((__v)); > > _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, > this->_M_impl._M_header); > ++_M_impl._M_node_count; > return iterator(__z); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_lower(_Base_ptr __p, const _Val& __v) > > { > bool __insert_left = (__p == _M_end() > || !_M_impl._M_key_compare(_S_key(__p), > _KeyOfValue()(__v))); > > _Link_type __z = _M_create_node((__v)); > > _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, > this->_M_impl._M_header); > ++_M_impl._M_node_count; > return iterator(__z); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_equal_lower(const _Val& __v) > > { > _Link_type __x = _M_begin(); > _Link_type __y = _M_end(); > while (__x != 0) > { > __y = __x; > __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ? > _S_left(__x) : _S_right(__x); > } > return _M_insert_lower(__y, (__v)); > } > > template<typename _Key, typename _Val, typename _KoV, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type > _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>:: > _M_copy(_Const_Link_type __x, _Link_type __p) > { > > _Link_type __top = _M_clone_node(__x); > __top->_M_parent = __p; > > try > { > if (__x->_M_right) > __top->_M_right = _M_copy(_S_right(__x), __top); > __p = __top; > __x = _S_left(__x); > > while (__x != 0) > { > _Link_type __y = _M_clone_node(__x); > __p->_M_left = __y; > __y->_M_parent = __p; > if (__x->_M_right) > __y->_M_right = _M_copy(_S_right(__x), __y); > __p = __y; > __x = _S_left(__x); > } > } > catch(...) > { > _M_erase(__top); > throw; > } > return __top; > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > void > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_erase(_Link_type __x) > { > > while (__x != 0) > { > _M_erase(_S_right(__x)); > _Link_type __y = _S_left(__x); > _M_destroy_node(__x); > __x = __y; > } > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_lower_bound(_Link_type __x, _Link_type __y, > const _Key& __k) > { > while (__x != 0) > if (!_M_impl._M_key_compare(_S_key(__x), __k)) > __y = __x, __x = _S_left(__x); > else > __x = _S_right(__x); > return iterator(__y); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::const_iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_lower_bound(_Const_Link_type __x, _Const_Link_type __y, > const _Key& __k) const > { > while (__x != 0) > if (!_M_impl._M_key_compare(_S_key(__x), __k)) > __y = __x, __x = _S_left(__x); > else > __x = _S_right(__x); > return const_iterator(__y); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_upper_bound(_Link_type __x, _Link_type __y, > const _Key& __k) > { > while (__x != 0) > if (_M_impl._M_key_compare(__k, _S_key(__x))) > __y = __x, __x = _S_left(__x); > else > __x = _S_right(__x); > return iterator(__y); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::const_iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_upper_bound(_Const_Link_type __x, _Const_Link_type __y, > const _Key& __k) const > { > while (__x != 0) > if (_M_impl._M_key_compare(__k, _S_key(__x))) > __y = __x, __x = _S_left(__x); > else > __x = _S_right(__x); > return const_iterator(__y); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::iterator, > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::iterator> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > equal_range(const _Key& __k) > { > _Link_type __x = _M_begin(); > _Link_type __y = _M_end(); > while (__x != 0) > { > if (_M_impl._M_key_compare(_S_key(__x), __k)) > __x = _S_right(__x); > else if (_M_impl._M_key_compare(__k, _S_key(__x))) > __y = __x, __x = _S_left(__x); > else > { > _Link_type __xu(__x), __yu(__y); > __y = __x, __x = _S_left(__x); > __xu = _S_right(__xu); > return pair<iterator, > iterator>(_M_lower_bound(__x, __y, __k), > _M_upper_bound(__xu, __yu, __k)); > } > } > return pair<iterator, iterator>(iterator(__y), > iterator(__y)); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::const_iterator, > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::const_iterator> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > equal_range(const _Key& __k) const > { > _Const_Link_type __x = _M_begin(); > _Const_Link_type __y = _M_end(); > while (__x != 0) > { > if (_M_impl._M_key_compare(_S_key(__x), __k)) > __x = _S_right(__x); > else if (_M_impl._M_key_compare(__k, _S_key(__x))) > __y = __x, __x = _S_left(__x); > else > { > _Const_Link_type __xu(__x), __yu(__y); > __y = __x, __x = _S_left(__x); > __xu = _S_right(__xu); > return pair<const_iterator, > const_iterator>(_M_lower_bound(__x, __y, __k), > _M_upper_bound(__xu, __yu, __k)); > } > } > return pair<const_iterator, const_iterator>(const_iterator(__y), > const_iterator(__y)); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > void > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __t) > { > if (_M_root() == 0) > { > if (__t._M_root() != 0) > { > _M_root() = __t._M_root(); > _M_leftmost() = __t._M_leftmost(); > _M_rightmost() = __t._M_rightmost(); > _M_root()->_M_parent = _M_end(); > > __t._M_root() = 0; > __t._M_leftmost() = __t._M_end(); > __t._M_rightmost() = __t._M_end(); > } > } > else if (__t._M_root() == 0) > { > __t._M_root() = _M_root(); > __t._M_leftmost() = _M_leftmost(); > __t._M_rightmost() = _M_rightmost(); > __t._M_root()->_M_parent = __t._M_end(); > > _M_root() = 0; > _M_leftmost() = _M_end(); > _M_rightmost() = _M_end(); > } > else > { > std::swap(_M_root(),__t._M_root()); > std::swap(_M_leftmost(),__t._M_leftmost()); > std::swap(_M_rightmost(),__t._M_rightmost()); > > _M_root()->_M_parent = _M_end(); > __t._M_root()->_M_parent = __t._M_end(); > } > > std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count); > std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare); > > > > std::__alloc_swap<_Node_allocator>:: > _S_do_it(_M_get_Node_allocator(), __t._M_get_Node_allocator()); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr, > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_get_insert_unique_pos(const key_type& __k) > { > typedef pair<_Base_ptr, _Base_ptr> _Res; > _Link_type __x = _M_begin(); > _Link_type __y = _M_end(); > bool __comp = true; > while (__x != 0) > { > __y = __x; > __comp = _M_impl._M_key_compare(__k, _S_key(__x)); > __x = __comp ? _S_left(__x) : _S_right(__x); > } > iterator __j = iterator(__y); > if (__comp) > { > if (__j == begin()) > return _Res(__x, __y); > else > --__j; > } > if (_M_impl._M_key_compare(_S_key(__j._M_node), __k)) > return _Res(__x, __y); > return _Res(__j._M_node, 0); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr, > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_get_insert_equal_pos(const key_type& __k) > { > typedef pair<_Base_ptr, _Base_ptr> _Res; > _Link_type __x = _M_begin(); > _Link_type __y = _M_end(); > while (__x != 0) > { > __y = __x; > __x = _M_impl._M_key_compare(__k, _S_key(__x)) ? > _S_left(__x) : _S_right(__x); > } > return _Res(__x, __y); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::iterator, bool> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_unique(const _Val& __v) > > { > typedef pair<iterator, bool> _Res; > pair<_Base_ptr, _Base_ptr> __res > = _M_get_insert_unique_pos(_KeyOfValue()(__v)); > > if (__res.second) > return _Res(_M_insert_(__res.first, __res.second, > (__v)), > true); > > return _Res(iterator(static_cast<_Link_type>(__res.first)), false); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_equal(const _Val& __v) > > { > pair<_Base_ptr, _Base_ptr> __res > = _M_get_insert_equal_pos(_KeyOfValue()(__v)); > return _M_insert_(__res.first, __res.second, (__v)); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr, > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_get_insert_hint_unique_pos(const_iterator __position, > const key_type& __k) > { > iterator __pos = __position._M_const_cast(); > typedef pair<_Base_ptr, _Base_ptr> _Res; > > > if (__pos._M_node == _M_end()) > { > if (size() > 0 > && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k)) > return _Res(0, _M_rightmost()); > else > return _M_get_insert_unique_pos(__k); > } > else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node))) > { > > iterator __before = __pos; > if (__pos._M_node == _M_leftmost()) > return _Res(_M_leftmost(), _M_leftmost()); > else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k)) > { > if (_S_right(__before._M_node) == 0) > return _Res(0, __before._M_node); > else > return _Res(__pos._M_node, __pos._M_node); > } > else > return _M_get_insert_unique_pos(__k); > } > else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) > { > > iterator __after = __pos; > if (__pos._M_node == _M_rightmost()) > return _Res(0, _M_rightmost()); > else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node))) > { > if (_S_right(__pos._M_node) == 0) > return _Res(0, __pos._M_node); > else > return _Res(__after._M_node, __after._M_node); > } > else > return _M_get_insert_unique_pos(__k); > } > else > > return _Res(__pos._M_node, 0); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_unique_(const_iterator __position, const _Val& __v) > > { > pair<_Base_ptr, _Base_ptr> __res > = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v)); > > if (__res.second) > return _M_insert_(__res.first, __res.second, > (__v)); > return iterator(static_cast<_Link_type>(__res.first)); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr, > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::_Base_ptr> > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k) > { > iterator __pos = __position._M_const_cast(); > typedef pair<_Base_ptr, _Base_ptr> _Res; > > > if (__pos._M_node == _M_end()) > { > if (size() > 0 > && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost()))) > return _Res(0, _M_rightmost()); > else > return _M_get_insert_equal_pos(__k); > } > else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) > { > > iterator __before = __pos; > if (__pos._M_node == _M_leftmost()) > return _Res(_M_leftmost(), _M_leftmost()); > else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node))) > { > if (_S_right(__before._M_node) == 0) > return _Res(0, __before._M_node); > else > return _Res(__pos._M_node, __pos._M_node); > } > else > return _M_get_insert_equal_pos(__k); > } > else > { > > iterator __after = __pos; > if (__pos._M_node == _M_rightmost()) > return _Res(0, _M_rightmost()); > else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k)) > { > if (_S_right(__pos._M_node) == 0) > return _Res(0, __pos._M_node); > else > return _Res(__after._M_node, __after._M_node); > } > else > return _Res(0, 0); > } > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > > > > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > > > > _M_insert_equal_(const_iterator __position, const _Val& __v) > > { > pair<_Base_ptr, _Base_ptr> __res > = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v)); > > if (__res.second) > return _M_insert_(__res.first, __res.second, > (__v)); > > return _M_insert_equal_lower((__v)); > } ># 1714 "/usr/include/c++/4.8.2/bits/stl_tree.h" 3 > template<typename _Key, typename _Val, typename _KoV, > typename _Cmp, typename _Alloc> > template<class _II> > void > _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>:: > _M_insert_unique(_II __first, _II __last) > { > for (; __first != __last; ++__first) > _M_insert_unique_(end(), *__first); > } > > template<typename _Key, typename _Val, typename _KoV, > typename _Cmp, typename _Alloc> > template<class _II> > void > _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>:: > _M_insert_equal(_II __first, _II __last) > { > for (; __first != __last; ++__first) > _M_insert_equal_(end(), *__first); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > void > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_erase_aux(const_iterator __position) > { > _Link_type __y = > static_cast<_Link_type>(_Rb_tree_rebalance_for_erase > (const_cast<_Base_ptr>(__position._M_node), > this->_M_impl._M_header)); > _M_destroy_node(__y); > --_M_impl._M_node_count; > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > void > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > _M_erase_aux(const_iterator __first, const_iterator __last) > { > if (__first == begin() && __last == end()) > clear(); > else > while (__first != __last) > erase(__first++); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > erase(const _Key& __x) > { > pair<iterator, iterator> __p = equal_range(__x); > const size_type __old_size = size(); > erase(__p.first, __p.second); > return __old_size - size(); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > void > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > erase(const _Key* __first, const _Key* __last) > { > while (__first != __last) > erase(*__first++); > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > find(const _Key& __k) > { > iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); > return (__j == end() > || _M_impl._M_key_compare(__k, > _S_key(__j._M_node))) ? end() : __j; > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, > _Compare, _Alloc>::const_iterator > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > find(const _Key& __k) const > { > const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); > return (__j == end() > || _M_impl._M_key_compare(__k, > _S_key(__j._M_node))) ? end() : __j; > } > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type > _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: > count(const _Key& __k) const > { > pair<const_iterator, const_iterator> __p = equal_range(__k); > const size_type __n = std::distance(__p.first, __p.second); > return __n; > } > > __attribute__ ((__pure__)) unsigned int > _Rb_tree_black_count(const _Rb_tree_node_base* __node, > const _Rb_tree_node_base* __root) throw (); > > template<typename _Key, typename _Val, typename _KeyOfValue, > typename _Compare, typename _Alloc> > bool > _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const > { > if (_M_impl._M_node_count == 0 || begin() == end()) > return _M_impl._M_node_count == 0 && begin() == end() > && this->_M_impl._M_header._M_left == _M_end() > && this->_M_impl._M_header._M_right == _M_end(); > > unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root()); > for (const_iterator __it = begin(); __it != end(); ++__it) > { > _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node); > _Const_Link_type __L = _S_left(__x); > _Const_Link_type __R = _S_right(__x); > > if (__x->_M_color == _S_red) > if ((__L && __L->_M_color == _S_red) > || (__R && __R->_M_color == _S_red)) > return false; > > if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L))) > return false; > if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x))) > return false; > > if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len) > return false; > } > > if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root())) > return false; > if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root())) > return false; > return true; > } > > >} ># 61 "/usr/include/c++/4.8.2/map" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_map.h" 1 3 ># 66 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 94 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>, > typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > > class map > { > public: > typedef _Key key_type; > typedef _Tp mapped_type; > typedef std::pair<const _Key, _Tp> value_type; > typedef _Compare key_compare; > typedef _Alloc allocator_type; > > private: > > typedef typename _Alloc::value_type _Alloc_value_type; > > > > > > public: > class value_compare > : public std::binary_function<value_type, value_type, bool> > { > friend class map<_Key, _Tp, _Compare, _Alloc>; > protected: > _Compare comp; > > value_compare(_Compare __c) > : comp(__c) { } > > public: > bool operator()(const value_type& __x, const value_type& __y) const > { return comp(__x.first, __y.first); } > }; > > private: > > typedef typename _Alloc::template rebind<value_type>::other > _Pair_alloc_type; > > typedef _Rb_tree<key_type, value_type, _Select1st<value_type>, > key_compare, _Pair_alloc_type> _Rep_type; > > > _Rep_type _M_t; > > public: > > > typedef typename _Pair_alloc_type::pointer pointer; > typedef typename _Pair_alloc_type::const_pointer const_pointer; > typedef typename _Pair_alloc_type::reference reference; > typedef typename _Pair_alloc_type::const_reference const_reference; > typedef typename _Rep_type::iterator iterator; > typedef typename _Rep_type::const_iterator const_iterator; > typedef typename _Rep_type::size_type size_type; > typedef typename _Rep_type::difference_type difference_type; > typedef typename _Rep_type::reverse_iterator reverse_iterator; > typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; > > > > > > > > map() > : _M_t() { } > > > > > > > explicit > map(const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Pair_alloc_type(__a)) { } ># 180 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > map(const map& __x) > : _M_t(__x._M_t) { } ># 223 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > template<typename _InputIterator> > map(_InputIterator __first, _InputIterator __last) > : _M_t() > { _M_t._M_insert_unique(__first, __last); } ># 240 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > template<typename _InputIterator> > map(_InputIterator __first, _InputIterator __last, > const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Pair_alloc_type(__a)) > { _M_t._M_insert_unique(__first, __last); } ># 263 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > map& > operator=(const map& __x) > { > _M_t = __x._M_t; > return *this; > } ># 309 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > allocator_type > get_allocator() const > { return allocator_type(_M_t.get_allocator()); } > > > > > > > > iterator > begin() > { return _M_t.begin(); } > > > > > > > const_iterator > begin() const > { return _M_t.begin(); } > > > > > > > iterator > end() > { return _M_t.end(); } > > > > > > > const_iterator > end() const > { return _M_t.end(); } > > > > > > > reverse_iterator > rbegin() > { return _M_t.rbegin(); } > > > > > > > const_reverse_iterator > rbegin() const > { return _M_t.rbegin(); } > > > > > > > reverse_iterator > rend() > { return _M_t.rend(); } > > > > > > > const_reverse_iterator > rend() const > { return _M_t.rend(); } ># 428 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > bool > empty() const > { return _M_t.empty(); } > > > size_type > size() const > { return _M_t.size(); } > > > size_type > max_size() const > { return _M_t.max_size(); } ># 455 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > mapped_type& > operator[](const key_type& __k) > { > > > > iterator __i = lower_bound(__k); > > if (__i == end() || key_comp()(__k, (*__i).first)) > > > > > > __i = insert(__i, value_type(__k, mapped_type())); > > return (*__i).second; > } ># 500 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > mapped_type& > at(const key_type& __k) > { > iterator __i = lower_bound(__k); > if (__i == end() || key_comp()(__k, (*__i).first)) > __throw_out_of_range(("map::at")); > return (*__i).second; > } > > const mapped_type& > at(const key_type& __k) const > { > const_iterator __i = lower_bound(__k); > if (__i == end() || key_comp()(__k, (*__i).first)) > __throw_out_of_range(("map::at")); > return (*__i).second; > } ># 593 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > std::pair<iterator, bool> > insert(const value_type& __x) > { return _M_t._M_insert_unique(__x); } ># 642 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > iterator > > > > insert(iterator __position, const value_type& __x) > > { return _M_t._M_insert_unique_(__position, __x); } ># 668 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > template<typename _InputIterator> > void > insert(_InputIterator __first, _InputIterator __last) > { _M_t._M_insert_unique(__first, __last); } ># 709 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > void > erase(iterator __position) > { _M_t.erase(__position); } ># 725 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > size_type > erase(const key_type& __x) > { return _M_t.erase(__x); } ># 761 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > void > erase(iterator __first, iterator __last) > { _M_t.erase(__first, __last); } ># 777 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > void > swap(map& __x) > { _M_t.swap(__x._M_t); } > > > > > > > > void > clear() > { _M_t.clear(); } > > > > > > > key_compare > key_comp() const > { return _M_t.key_comp(); } > > > > > > value_compare > value_comp() const > { return value_compare(_M_t.key_comp()); } ># 820 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > iterator > find(const key_type& __x) > { return _M_t.find(__x); } ># 835 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > const_iterator > find(const key_type& __x) const > { return _M_t.find(__x); } ># 847 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > size_type > count(const key_type& __x) const > { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } ># 862 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > iterator > lower_bound(const key_type& __x) > { return _M_t.lower_bound(__x); } ># 877 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > const_iterator > lower_bound(const key_type& __x) const > { return _M_t.lower_bound(__x); } > > > > > > > > iterator > upper_bound(const key_type& __x) > { return _M_t.upper_bound(__x); } > > > > > > > > const_iterator > upper_bound(const key_type& __x) const > { return _M_t.upper_bound(__x); } ># 916 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > std::pair<iterator, iterator> > equal_range(const key_type& __x) > { return _M_t.equal_range(__x); } ># 935 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > std::pair<const_iterator, const_iterator> > equal_range(const key_type& __x) const > { return _M_t.equal_range(__x); } > > template<typename _K1, typename _T1, typename _C1, typename _A1> > friend bool > operator==(const map<_K1, _T1, _C1, _A1>&, > const map<_K1, _T1, _C1, _A1>&); > > template<typename _K1, typename _T1, typename _C1, typename _A1> > friend bool > operator<(const map<_K1, _T1, _C1, _A1>&, > const map<_K1, _T1, _C1, _A1>&); > }; ># 960 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x, > const map<_Key, _Tp, _Compare, _Alloc>& __y) > { return __x._M_t == __y._M_t; } ># 977 "/usr/include/c++/4.8.2/bits/stl_map.h" 3 > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x, > const map<_Key, _Tp, _Compare, _Alloc>& __y) > { return __x._M_t < __y._M_t; } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x, > const map<_Key, _Tp, _Compare, _Alloc>& __y) > { return !(__x == __y); } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x, > const map<_Key, _Tp, _Compare, _Alloc>& __y) > { return __y < __x; } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x, > const map<_Key, _Tp, _Compare, _Alloc>& __y) > { return !(__y < __x); } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x, > const map<_Key, _Tp, _Compare, _Alloc>& __y) > { return !(__x < __y); } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline void > swap(map<_Key, _Tp, _Compare, _Alloc>& __x, > map<_Key, _Tp, _Compare, _Alloc>& __y) > { __x.swap(__y); } > > >} ># 62 "/usr/include/c++/4.8.2/map" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 1 3 ># 64 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 92 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > template <typename _Key, typename _Tp, > typename _Compare = std::less<_Key>, > typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > > class multimap > { > public: > typedef _Key key_type; > typedef _Tp mapped_type; > typedef std::pair<const _Key, _Tp> value_type; > typedef _Compare key_compare; > typedef _Alloc allocator_type; > > private: > > typedef typename _Alloc::value_type _Alloc_value_type; > > > > > > public: > class value_compare > : public std::binary_function<value_type, value_type, bool> > { > friend class multimap<_Key, _Tp, _Compare, _Alloc>; > protected: > _Compare comp; > > value_compare(_Compare __c) > : comp(__c) { } > > public: > bool operator()(const value_type& __x, const value_type& __y) const > { return comp(__x.first, __y.first); } > }; > > private: > > typedef typename _Alloc::template rebind<value_type>::other > _Pair_alloc_type; > > typedef _Rb_tree<key_type, value_type, _Select1st<value_type>, > key_compare, _Pair_alloc_type> _Rep_type; > > _Rep_type _M_t; > > public: > > > typedef typename _Pair_alloc_type::pointer pointer; > typedef typename _Pair_alloc_type::const_pointer const_pointer; > typedef typename _Pair_alloc_type::reference reference; > typedef typename _Pair_alloc_type::const_reference const_reference; > typedef typename _Rep_type::iterator iterator; > typedef typename _Rep_type::const_iterator const_iterator; > typedef typename _Rep_type::size_type size_type; > typedef typename _Rep_type::difference_type difference_type; > typedef typename _Rep_type::reverse_iterator reverse_iterator; > typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; > > > > > > > multimap() > : _M_t() { } > > > > > > > explicit > multimap(const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Pair_alloc_type(__a)) { } ># 177 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > multimap(const multimap& __x) > : _M_t(__x._M_t) { } ># 218 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > template<typename _InputIterator> > multimap(_InputIterator __first, _InputIterator __last) > : _M_t() > { _M_t._M_insert_equal(__first, __last); } ># 234 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > template<typename _InputIterator> > multimap(_InputIterator __first, _InputIterator __last, > const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Pair_alloc_type(__a)) > { _M_t._M_insert_equal(__first, __last); } ># 257 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > multimap& > operator=(const multimap& __x) > { > _M_t = __x._M_t; > return *this; > } ># 303 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > allocator_type > get_allocator() const > { return allocator_type(_M_t.get_allocator()); } > > > > > > > > iterator > begin() > { return _M_t.begin(); } > > > > > > > const_iterator > begin() const > { return _M_t.begin(); } > > > > > > > iterator > end() > { return _M_t.end(); } > > > > > > > const_iterator > end() const > { return _M_t.end(); } > > > > > > > reverse_iterator > rbegin() > { return _M_t.rbegin(); } > > > > > > > const_reverse_iterator > rbegin() const > { return _M_t.rbegin(); } > > > > > > > reverse_iterator > rend() > { return _M_t.rend(); } > > > > > > > const_reverse_iterator > rend() const > { return _M_t.rend(); } ># 420 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > bool > empty() const > { return _M_t.empty(); } > > > size_type > size() const > { return _M_t.size(); } > > > size_type > max_size() const > { return _M_t.max_size(); } ># 500 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > iterator > insert(const value_type& __x) > { return _M_t._M_insert_equal(__x); } ># 533 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > iterator > > > > insert(iterator __position, const value_type& __x) > > { return _M_t._M_insert_equal_(__position, __x); } ># 560 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > template<typename _InputIterator> > void > insert(_InputIterator __first, _InputIterator __last) > { _M_t._M_insert_equal(__first, __last); } ># 614 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > void > erase(iterator __position) > { _M_t.erase(__position); } ># 630 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > size_type > erase(const key_type& __x) > { return _M_t.erase(__x); } ># 670 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > void > erase(iterator __first, iterator __last) > { _M_t.erase(__first, __last); } ># 686 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > void > swap(multimap& __x) > { _M_t.swap(__x._M_t); } > > > > > > > > void > clear() > { _M_t.clear(); } > > > > > > > key_compare > key_comp() const > { return _M_t.key_comp(); } > > > > > > value_compare > value_comp() const > { return value_compare(_M_t.key_comp()); } ># 729 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > iterator > find(const key_type& __x) > { return _M_t.find(__x); } ># 744 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > const_iterator > find(const key_type& __x) const > { return _M_t.find(__x); } > > > > > > > size_type > count(const key_type& __x) const > { return _M_t.count(__x); } ># 768 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > iterator > lower_bound(const key_type& __x) > { return _M_t.lower_bound(__x); } ># 783 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > const_iterator > lower_bound(const key_type& __x) const > { return _M_t.lower_bound(__x); } > > > > > > > > iterator > upper_bound(const key_type& __x) > { return _M_t.upper_bound(__x); } > > > > > > > > const_iterator > upper_bound(const key_type& __x) const > { return _M_t.upper_bound(__x); } ># 820 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > std::pair<iterator, iterator> > equal_range(const key_type& __x) > { return _M_t.equal_range(__x); } ># 837 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > std::pair<const_iterator, const_iterator> > equal_range(const key_type& __x) const > { return _M_t.equal_range(__x); } > > template<typename _K1, typename _T1, typename _C1, typename _A1> > friend bool > operator==(const multimap<_K1, _T1, _C1, _A1>&, > const multimap<_K1, _T1, _C1, _A1>&); > > template<typename _K1, typename _T1, typename _C1, typename _A1> > friend bool > operator<(const multimap<_K1, _T1, _C1, _A1>&, > const multimap<_K1, _T1, _C1, _A1>&); > }; ># 862 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, > const multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { return __x._M_t == __y._M_t; } ># 879 "/usr/include/c++/4.8.2/bits/stl_multimap.h" 3 > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, > const multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { return __x._M_t < __y._M_t; } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, > const multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { return !(__x == __y); } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, > const multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { return __y < __x; } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, > const multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { return !(__y < __x); } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline bool > operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, > const multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { return !(__x < __y); } > > > template<typename _Key, typename _Tp, typename _Compare, typename _Alloc> > inline void > swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x, > multimap<_Key, _Tp, _Compare, _Alloc>& __y) > { __x.swap(__y); } > > >} ># 63 "/usr/include/c++/4.8.2/map" 2 3 ># 55 "/usr/include/OpenEXR/ImfHeader.h" 2 > > > >namespace Imf { > > >class Attribute; >class ChannelList; >class IStream; >class OStream; >class PreviewImage; > > >class Header >{ > public: > > > > > > > Header (int width = 64, > int height = 64, > float pixelAspectRatio = 1, > const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0), > float screenWindowWidth = 1, > LineOrder lineOrder = INCREASING_Y, > Compression = ZIP_COMPRESSION); > > > > > > > > Header (int width, > int height, > const Imath::Box2i &dataWindow, > float pixelAspectRatio = 1, > const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0), > float screenWindowWidth = 1, > LineOrder lineOrder = INCREASING_Y, > Compression = ZIP_COMPRESSION); > > > > > > > > Header (const Imath::Box2i &displayWindow, > const Imath::Box2i &dataWindow, > float pixelAspectRatio = 1, > const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0), > float screenWindowWidth = 1, > LineOrder lineOrder = INCREASING_Y, > Compression = ZIP_COMPRESSION); > > > > > > > Header (const Header &other); > > > > > > > ~Header (); > > > > > > > Header & operator = (const Header &other); ># 154 "/usr/include/OpenEXR/ImfHeader.h" > void insert (const char name[], > const Attribute &attribute); > > void insert (const std::string &name, > const Attribute &attribute); ># 180 "/usr/include/OpenEXR/ImfHeader.h" > Attribute & operator [] (const char name[]); > const Attribute & operator [] (const char name[]) const; > > Attribute & operator [] (const std::string &name); > const Attribute & operator [] (const std::string &name) const; > > template <class T> T& typedAttribute (const char name[]); > template <class T> const T& typedAttribute (const char name[]) const; > > template <class T> T& typedAttribute (const std::string &name); > template <class T> const T& typedAttribute (const std::string &name) const; > > template <class T> T* findTypedAttribute (const char name[]); > template <class T> const T* findTypedAttribute (const char name[]) const; > > template <class T> T* findTypedAttribute (const std::string &name); > template <class T> const T* findTypedAttribute (const std::string &name) > const; > > > > > > typedef std::map <Name, Attribute *> AttributeMap; > > class Iterator; > class ConstIterator; > > Iterator begin (); > ConstIterator begin () const; > > Iterator end (); > ConstIterator end () const; > > Iterator find (const char name[]); > ConstIterator find (const char name[]) const; > > Iterator find (const std::string &name); > ConstIterator find (const std::string &name) const; > > > > > > > Imath::Box2i & displayWindow (); > const Imath::Box2i & displayWindow () const; > > Imath::Box2i & dataWindow (); > const Imath::Box2i & dataWindow () const; > > float & pixelAspectRatio (); > const float & pixelAspectRatio () const; > > Imath::V2f & screenWindowCenter (); > const Imath::V2f & screenWindowCenter () const; > > float & screenWindowWidth (); > const float & screenWindowWidth () const; > > ChannelList & channels (); > const ChannelList & channels () const; > > LineOrder & lineOrder (); > const LineOrder & lineOrder () const; > > Compression & compression (); > const Compression & compression () const; ># 271 "/usr/include/OpenEXR/ImfHeader.h" > void setTileDescription (const TileDescription & td); > > TileDescription & tileDescription (); > const TileDescription & tileDescription () const; > > bool hasTileDescription() const; ># 300 "/usr/include/OpenEXR/ImfHeader.h" > void setPreviewImage (const PreviewImage &p); > > PreviewImage & previewImage (); > const PreviewImage & previewImage () const; > > bool hasPreviewImage () const; ># 317 "/usr/include/OpenEXR/ImfHeader.h" > void sanityCheck (bool isTiled = false) const; ># 336 "/usr/include/OpenEXR/ImfHeader.h" > static void setMaxImageSize (int maxWidth, int maxHeight); > static void setMaxTileSize (int maxWidth, int maxHeight); ># 351 "/usr/include/OpenEXR/ImfHeader.h" > Int64 writeTo (OStream &os, > bool isTiled = false) const; > > void readFrom (IStream &is, int &version); > > private: > > AttributeMap _map; >}; > > > > > > >class Header::Iterator >{ > public: > > Iterator (); > Iterator (const Header::AttributeMap::iterator &i); > > Iterator & operator ++ (); > Iterator operator ++ (int); > > const char * name () const; > Attribute & attribute () const; > > private: > > friend class Header::ConstIterator; > > Header::AttributeMap::iterator _i; >}; > > >class Header::ConstIterator >{ > public: > > ConstIterator (); > ConstIterator (const Header::AttributeMap::const_iterator &i); > ConstIterator (const Header::Iterator &other); > > ConstIterator & operator ++ (); > ConstIterator operator ++ (int); > > const char * name () const; > const Attribute & attribute () const; > > private: > > friend bool operator == (const ConstIterator &, const ConstIterator &); > friend bool operator != (const ConstIterator &, const ConstIterator &); > > Header::AttributeMap::const_iterator _i; >}; ># 424 "/usr/include/OpenEXR/ImfHeader.h" >void staticInitialize (); > > > > > > > >inline >Header::Iterator::Iterator (): _i() >{ > >} > > >inline >Header::Iterator::Iterator (const Header::AttributeMap::iterator &i): _i (i) >{ > >} > > >inline Header::Iterator & >Header::Iterator::operator ++ () >{ > ++_i; > return *this; >} > > >inline Header::Iterator >Header::Iterator::operator ++ (int) >{ > Iterator tmp = *this; > ++_i; > return tmp; >} > > >inline const char * >Header::Iterator::name () const >{ > return *_i->first; >} > > >inline Attribute & >Header::Iterator::attribute () const >{ > return *_i->second; >} > > >inline >Header::ConstIterator::ConstIterator (): _i() >{ > >} > >inline >Header::ConstIterator::ConstIterator > (const Header::AttributeMap::const_iterator &i): _i (i) >{ > >} > > >inline >Header::ConstIterator::ConstIterator (const Header::Iterator &other): > _i (other._i) >{ > >} > >inline Header::ConstIterator & >Header::ConstIterator::operator ++ () >{ > ++_i; > return *this; >} > > >inline Header::ConstIterator >Header::ConstIterator::operator ++ (int) >{ > ConstIterator tmp = *this; > ++_i; > return tmp; >} > > >inline const char * >Header::ConstIterator::name () const >{ > return *_i->first; >} > > >inline const Attribute & >Header::ConstIterator::attribute () const >{ > return *_i->second; >} > > >inline bool >operator == (const Header::ConstIterator &x, const Header::ConstIterator &y) >{ > return x._i == y._i; >} > > >inline bool >operator != (const Header::ConstIterator &x, const Header::ConstIterator &y) >{ > return !(x == y); >} > > > > > > >template <class T> >T & >Header::typedAttribute (const char name[]) >{ > Attribute *attr = &(*this)[name]; > T *tattr = dynamic_cast <T*> (attr); > > if (tattr == 0) > throw Iex::TypeExc ("Unexpected attribute type."); > > return *tattr; >} > > >template <class T> >const T & >Header::typedAttribute (const char name[]) const >{ > const Attribute *attr = &(*this)[name]; > const T *tattr = dynamic_cast <const T*> (attr); > > if (tattr == 0) > throw Iex::TypeExc ("Unexpected attribute type."); > > return *tattr; >} > > >template <class T> >T & >Header::typedAttribute (const std::string &name) >{ > return typedAttribute<T> (name.c_str()); >} > > >template <class T> >const T & >Header::typedAttribute (const std::string &name) const >{ > return typedAttribute<T> (name.c_str()); >} > > >template <class T> >T * >Header::findTypedAttribute (const char name[]) >{ > AttributeMap::iterator i = _map.find (name); > return (i == _map.end())? 0: dynamic_cast <T*> (i->second); >} > > >template <class T> >const T * >Header::findTypedAttribute (const char name[]) const >{ > AttributeMap::const_iterator i = _map.find (name); > return (i == _map.end())? 0: dynamic_cast <const T*> (i->second); >} > > >template <class T> >T * >Header::findTypedAttribute (const std::string &name) >{ > return findTypedAttribute<T> (name.c_str()); >} > > >template <class T> >const T * >Header::findTypedAttribute (const std::string &name) const >{ > return findTypedAttribute<T> (name.c_str()); >} > > >} ># 51 "/usr/include/OpenEXR/ImfRgbaFile.h" 2 ># 1 "/usr/include/OpenEXR/ImfFrameBuffer.h" 1 ># 48 "/usr/include/OpenEXR/ImfFrameBuffer.h" ># 1 "/usr/include/OpenEXR/ImfPixelType.h" 1 ># 46 "/usr/include/OpenEXR/ImfPixelType.h" >namespace Imf { > > >enum PixelType >{ > UINT = 0, > HALF = 1, > FLOAT = 2, > > NUM_PIXELTYPES >}; > > >} ># 49 "/usr/include/OpenEXR/ImfFrameBuffer.h" 2 > > > > >namespace Imf { ># 65 "/usr/include/OpenEXR/ImfFrameBuffer.h" >struct Slice >{ > > > > > PixelType type; ># 93 "/usr/include/OpenEXR/ImfFrameBuffer.h" > char * base; > size_t xStride; > size_t yStride; ># 106 "/usr/include/OpenEXR/ImfFrameBuffer.h" > int xSampling; > int ySampling; > > > > > > > > double fillValue; ># 130 "/usr/include/OpenEXR/ImfFrameBuffer.h" > bool xTileCoords; > bool yTileCoords; > > > > > > > Slice (PixelType type = HALF, > char * base = 0, > size_t xStride = 0, > size_t yStride = 0, > int xSampling = 1, > int ySampling = 1, > double fillValue = 0.0, > bool xTileCoords = false, > bool yTileCoords = false); >}; > > >class FrameBuffer >{ > public: > > > > > > void insert (const char name[], > const Slice &slice); > > void insert (const std::string &name, > const Slice &slice); ># 176 "/usr/include/OpenEXR/ImfFrameBuffer.h" > Slice & operator [] (const char name[]); > const Slice & operator [] (const char name[]) const; > > Slice & operator [] (const std::string &name); > const Slice & operator [] (const std::string &name) const; > > Slice * findSlice (const char name[]); > const Slice * findSlice (const char name[]) const; > > Slice * findSlice (const std::string &name); > const Slice * findSlice (const std::string &name) const; > > > > > > > typedef std::map <Name, Slice> SliceMap; > > class Iterator; > class ConstIterator; > > Iterator begin (); > ConstIterator begin () const; > > Iterator end (); > ConstIterator end () const; > > Iterator find (const char name[]); > ConstIterator find (const char name[]) const; > > Iterator find (const std::string &name); > ConstIterator find (const std::string &name) const; > > private: > > SliceMap _map; >}; > > > > > > >class FrameBuffer::Iterator >{ > public: > > Iterator (); > Iterator (const FrameBuffer::SliceMap::iterator &i); > > Iterator & operator ++ (); > Iterator operator ++ (int); > > const char * name () const; > Slice & slice () const; > > private: > > friend class FrameBuffer::ConstIterator; > > FrameBuffer::SliceMap::iterator _i; >}; > > >class FrameBuffer::ConstIterator >{ > public: > > ConstIterator (); > ConstIterator (const FrameBuffer::SliceMap::const_iterator &i); > ConstIterator (const FrameBuffer::Iterator &other); > > ConstIterator & operator ++ (); > ConstIterator operator ++ (int); > > const char * name () const; > const Slice & slice () const; > > private: > > friend bool operator == (const ConstIterator &, const ConstIterator &); > friend bool operator != (const ConstIterator &, const ConstIterator &); > > FrameBuffer::SliceMap::const_iterator _i; >}; > > > > > > >inline >FrameBuffer::Iterator::Iterator (): _i() >{ > >} > > >inline >FrameBuffer::Iterator::Iterator (const FrameBuffer::SliceMap::iterator &i): > _i (i) >{ > >} > > >inline FrameBuffer::Iterator & >FrameBuffer::Iterator::operator ++ () >{ > ++_i; > return *this; >} > > >inline FrameBuffer::Iterator >FrameBuffer::Iterator::operator ++ (int) >{ > Iterator tmp = *this; > ++_i; > return tmp; >} > > >inline const char * >FrameBuffer::Iterator::name () const >{ > return *_i->first; >} > > >inline Slice & >FrameBuffer::Iterator::slice () const >{ > return _i->second; >} > > >inline >FrameBuffer::ConstIterator::ConstIterator (): _i() >{ > >} > >inline >FrameBuffer::ConstIterator::ConstIterator > (const FrameBuffer::SliceMap::const_iterator &i): _i (i) >{ > >} > > >inline >FrameBuffer::ConstIterator::ConstIterator (const FrameBuffer::Iterator &other): > _i (other._i) >{ > >} > >inline FrameBuffer::ConstIterator & >FrameBuffer::ConstIterator::operator ++ () >{ > ++_i; > return *this; >} > > >inline FrameBuffer::ConstIterator >FrameBuffer::ConstIterator::operator ++ (int) >{ > ConstIterator tmp = *this; > ++_i; > return tmp; >} > > >inline const char * >FrameBuffer::ConstIterator::name () const >{ > return *_i->first; >} > >inline const Slice & >FrameBuffer::ConstIterator::slice () const >{ > return _i->second; >} > > >inline bool >operator == (const FrameBuffer::ConstIterator &x, > const FrameBuffer::ConstIterator &y) >{ > return x._i == y._i; >} > > >inline bool >operator != (const FrameBuffer::ConstIterator &x, > const FrameBuffer::ConstIterator &y) >{ > return !(x == y); >} > > >} ># 52 "/usr/include/OpenEXR/ImfRgbaFile.h" 2 ># 1 "/usr/include/OpenEXR/ImfRgba.h" 1 ># 45 "/usr/include/OpenEXR/ImfRgba.h" ># 1 "/usr/include/OpenEXR/half.h" 1 ># 102 "/usr/include/OpenEXR/half.h" >class half >{ > public: > > > > > > half (); > half (float f); > > > > > > > operator float () const; > > > > > > > half operator - () const; > > > > > > > half & operator = (half h); > half & operator = (float f); > > half & operator += (half h); > half & operator += (float f); > > half & operator -= (half h); > half & operator -= (float f); > > half & operator *= (half h); > half & operator *= (float f); > > half & operator /= (half h); > half & operator /= (float f); ># 154 "/usr/include/OpenEXR/half.h" > half round (unsigned int n) const; ># 178 "/usr/include/OpenEXR/half.h" > bool isFinite () const; > bool isNormalized () const; > bool isDenormalized () const; > bool isZero () const; > bool isNan () const; > bool isInfinity () const; > bool isNegative () const; ># 201 "/usr/include/OpenEXR/half.h" > static half posInf (); > static half negInf (); > static half qNan (); > static half sNan (); > > > > > > > unsigned short bits () const; > void setBits (unsigned short bits); > > > public: > > union uif > { > unsigned int i; > float f; > }; > > private: > > static short convert (int i); > static float overflow (); > > unsigned short _h; > > static const uif _toFloat[1 << 16]; > static const unsigned short _eLut[1 << 9]; >}; > > > > > > std::ostream & operator << (std::ostream &os, half h); > std::istream & operator >> (std::istream &is, half &h); > > > > > > > void printBits (std::ostream &os, half h); > void printBits (std::ostream &os, float f); > void printBits (char c[19], half h); > void printBits (char c[35], float f); ># 426 "/usr/include/OpenEXR/half.h" >inline >half::half () >{ > >} > > > > > > >inline >half::half (float f) >{ > uif x; > > x.f = f; > > if (f == 0) > { > > > > > > _h = (x.i >> 16); > } > else > { ># 471 "/usr/include/OpenEXR/half.h" > register int e = (x.i >> 23) & 0x000001ff; > > e = _eLut[e]; > > if (e) > { > > > > > > register int m = x.i & 0x007fffff; > _h = e + ((m + 0x00000fff + ((m >> 13) & 1)) >> 13); > } > else > { > > > > > _h = convert (x.i); > } > } >} > > > > > > >inline >half::operator float () const >{ > return _toFloat[_h].f; >} > > > > > > >inline half >half::round (unsigned int n) const >{ > > > > > if (n >= 10) > return *this; > > > > > > > unsigned short s = _h & 0x8000; > unsigned short e = _h & 0x7fff; ># 537 "/usr/include/OpenEXR/half.h" > e >>= 9 - n; > e += e & 1; > e <<= 9 - n; > > > > > > if (e >= 0x7c00) > { > > > > > e = _h; > e >>= 10 - n; > e <<= 10 - n; > } > > > > > > half h; > h._h = s | e; > > return h; >} > > > > > > >inline half >half::operator - () const >{ > half h; > h._h = _h ^ 0x8000; > return h; >} > > >inline half & >half::operator = (half h) >{ > _h = h._h; > return *this; >} > > >inline half & >half::operator = (float f) >{ > *this = half (f); > return *this; >} > > >inline half & >half::operator += (half h) >{ > *this = half (float (*this) + float (h)); > return *this; >} > > >inline half & >half::operator += (float f) >{ > *this = half (float (*this) + f); > return *this; >} > > >inline half & >half::operator -= (half h) >{ > *this = half (float (*this) - float (h)); > return *this; >} > > >inline half & >half::operator -= (float f) >{ > *this = half (float (*this) - f); > return *this; >} > > >inline half & >half::operator *= (half h) >{ > *this = half (float (*this) * float (h)); > return *this; >} > > >inline half & >half::operator *= (float f) >{ > *this = half (float (*this) * f); > return *this; >} > > >inline half & >half::operator /= (half h) >{ > *this = half (float (*this) / float (h)); > return *this; >} > > >inline half & >half::operator /= (float f) >{ > *this = half (float (*this) / f); > return *this; >} > > >inline bool >half::isFinite () const >{ > unsigned short e = (_h >> 10) & 0x001f; > return e < 31; >} > > >inline bool >half::isNormalized () const >{ > unsigned short e = (_h >> 10) & 0x001f; > return e > 0 && e < 31; >} > > >inline bool >half::isDenormalized () const >{ > unsigned short e = (_h >> 10) & 0x001f; > unsigned short m = _h & 0x3ff; > return e == 0 && m != 0; >} > > >inline bool >half::isZero () const >{ > return (_h & 0x7fff) == 0; >} > > >inline bool >half::isNan () const >{ > unsigned short e = (_h >> 10) & 0x001f; > unsigned short m = _h & 0x3ff; > return e == 31 && m != 0; >} > > >inline bool >half::isInfinity () const >{ > unsigned short e = (_h >> 10) & 0x001f; > unsigned short m = _h & 0x3ff; > return e == 31 && m == 0; >} > > >inline bool >half::isNegative () const >{ > return (_h & 0x8000) != 0; >} > > >inline half >half::posInf () >{ > half h; > h._h = 0x7c00; > return h; >} > > >inline half >half::negInf () >{ > half h; > h._h = 0xfc00; > return h; >} > > >inline half >half::qNan () >{ > half h; > h._h = 0x7fff; > return h; >} > > >inline half >half::sNan () >{ > half h; > h._h = 0x7dff; > return h; >} > > >inline unsigned short >half::bits () const >{ > return _h; >} > > >inline void >half::setBits (unsigned short bits) >{ > _h = bits; >} ># 46 "/usr/include/OpenEXR/ImfRgba.h" 2 > >namespace Imf { > > > > > > >struct Rgba >{ > half r; > half g; > half b; > half a; > > Rgba () {} > Rgba (half r, half g, half b, half a = 1.f): r (r), g (g), b (b), a (a) {} > > Rgba & operator = (const Rgba &other) > { > r = other.r; > g = other.g; > b = other.b; > a = other.a; > > return *this; > } >}; > > > > > > >enum RgbaChannels >{ > WRITE_R = 0x01, > WRITE_G = 0x02, > WRITE_B = 0x04, > WRITE_A = 0x08, > > WRITE_Y = 0x10, > > > WRITE_C = 0x20, > > > WRITE_RGB = 0x07, > WRITE_RGBA = 0x0f, > > WRITE_YC = 0x30, > WRITE_YA = 0x18, > WRITE_YCA = 0x38 >}; > > >} ># 53 "/usr/include/OpenEXR/ImfRgbaFile.h" 2 > > > ># 1 "/usr/include/OpenEXR/ImfThreading.h" 1 ># 72 "/usr/include/OpenEXR/ImfThreading.h" >namespace Imf { > > > > > > > >int globalThreadCount (); > > > > > > >void setGlobalThreadCount (int count); > > >} ># 57 "/usr/include/OpenEXR/ImfRgbaFile.h" 2 > > >namespace Imf { > > >class OutputFile; >class InputFile; >struct PreviewRgba; > > > > > >class RgbaOutputFile >{ > public: > > > > > > RgbaOutputFile (const char name[], > const Header &header, > RgbaChannels rgbaChannels = WRITE_RGBA, > int numThreads = globalThreadCount()); ># 90 "/usr/include/OpenEXR/ImfRgbaFile.h" > RgbaOutputFile (OStream &os, > const Header &header, > RgbaChannels rgbaChannels = WRITE_RGBA, > int numThreads = globalThreadCount()); > > > > > > > > RgbaOutputFile (const char name[], > const Imath::Box2i &displayWindow, > const Imath::Box2i &dataWindow = Imath::Box2i(), > RgbaChannels rgbaChannels = WRITE_RGBA, > float pixelAspectRatio = 1, > const Imath::V2f screenWindowCenter = Imath::V2f (0, 0), > float screenWindowWidth = 1, > LineOrder lineOrder = INCREASING_Y, > Compression compression = PIZ_COMPRESSION, > int numThreads = globalThreadCount()); ># 119 "/usr/include/OpenEXR/ImfRgbaFile.h" > RgbaOutputFile (const char name[], > int width, > int height, > RgbaChannels rgbaChannels = WRITE_RGBA, > float pixelAspectRatio = 1, > const Imath::V2f screenWindowCenter = Imath::V2f (0, 0), > float screenWindowWidth = 1, > LineOrder lineOrder = INCREASING_Y, > Compression compression = PIZ_COMPRESSION, > int numThreads = globalThreadCount()); > > > > > > > virtual ~RgbaOutputFile (); ># 146 "/usr/include/OpenEXR/ImfRgbaFile.h" > void setFrameBuffer (const Rgba *base, > size_t xStride, > size_t yStride); > > > > > > > void writePixels (int numScanLines = 1); > int currentScanLine () const; > > > > > > > const Header & header () const; > const FrameBuffer & frameBuffer () const; > const Imath::Box2i & displayWindow () const; > const Imath::Box2i & dataWindow () const; > float pixelAspectRatio () const; > const Imath::V2f screenWindowCenter () const; > float screenWindowWidth () const; > LineOrder lineOrder () const; > Compression compression () const; > RgbaChannels channels () const; > > > > > > > void updatePreviewImage (const PreviewRgba[]); ># 196 "/usr/include/OpenEXR/ImfRgbaFile.h" > void setYCRounding (unsigned int roundY, > unsigned int roundC); ># 210 "/usr/include/OpenEXR/ImfRgbaFile.h" > void breakScanLine (int y, > int offset, > int length, > char c); > private: > > RgbaOutputFile (const RgbaOutputFile &); > RgbaOutputFile & operator = (const RgbaOutputFile &); > > class ToYca; > > OutputFile * _outputFile; > ToYca * _toYca; >}; > > > > > > >class RgbaInputFile >{ > public: > > > > > > > RgbaInputFile (const char name[], int numThreads = globalThreadCount()); ># 249 "/usr/include/OpenEXR/ImfRgbaFile.h" > RgbaInputFile (IStream &is, int numThreads = globalThreadCount()); ># 258 "/usr/include/OpenEXR/ImfRgbaFile.h" > RgbaInputFile (const char name[], > const std::string &layerName, > int numThreads = globalThreadCount()); > > RgbaInputFile (IStream &is, > const std::string &layerName, > int numThreads = globalThreadCount()); > > > > > > > virtual ~RgbaInputFile (); ># 282 "/usr/include/OpenEXR/ImfRgbaFile.h" > void setFrameBuffer (Rgba *base, > size_t xStride, > size_t yStride); ># 294 "/usr/include/OpenEXR/ImfRgbaFile.h" > void setLayerName (const std::string &layerName); > > > > > > > void readPixels (int scanLine1, int scanLine2); > void readPixels (int scanLine); > > > > > > > const Header & header () const; > const FrameBuffer & frameBuffer () const; > const Imath::Box2i & displayWindow () const; > const Imath::Box2i & dataWindow () const; > float pixelAspectRatio () const; > const Imath::V2f screenWindowCenter () const; > float screenWindowWidth () const; > LineOrder lineOrder () const; > Compression compression () const; > RgbaChannels channels () const; > const char * fileName () const; > bool isComplete () const; > > > > > > > int version () const; > > private: > > RgbaInputFile (const RgbaInputFile &); > RgbaInputFile & operator = (const RgbaInputFile &); > > class FromYca; > > InputFile * _inputFile; > FromYca * _fromYca; > std::string _channelNamePrefix; >}; > > >} ># 389 "./CImg.h" 2 ># 1 "/usr/include/OpenEXR/ImfInputFile.h" 1 ># 48 "/usr/include/OpenEXR/ImfInputFile.h" ># 1 "/usr/include/OpenEXR/ImfTiledOutputFile.h" 1 ># 51 "/usr/include/OpenEXR/ImfTiledOutputFile.h" >namespace Imf { > >class TiledInputFile; >class InputFile; >struct PreviewRgba; > > >class TiledOutputFile >{ > public: ># 84 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > TiledOutputFile (const char fileName[], > const Header &header, > int numThreads = globalThreadCount ()); ># 96 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > TiledOutputFile (OStream &os, > const Header &header, > int numThreads = globalThreadCount ()); ># 108 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > virtual ~TiledOutputFile (); > > > > > > > const char * fileName () const; > > > > > > > const Header & header () const; ># 136 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > void setFrameBuffer (const FrameBuffer &frameBuffer); > > > > > > > const FrameBuffer & frameBuffer () const; ># 156 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > unsigned int tileXSize () const; > unsigned int tileYSize () const; > LevelMode levelMode () const; > LevelRoundingMode levelRoundingMode () const; ># 205 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > int numLevels () const; > int numXLevels () const; > int numYLevels () const; > bool isValidLevel (int lx, int ly) const; ># 229 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > int levelWidth (int lx) const; > int levelHeight (int ly) const; ># 253 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > int numXTiles (int lx = 0) const; > int numYTiles (int ly = 0) const; ># 277 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > Imath::Box2i dataWindowForLevel (int l = 0) const; > Imath::Box2i dataWindowForLevel (int lx, int ly) const; ># 302 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > Imath::Box2i dataWindowForTile (int dx, int dy, > int l = 0) const; > > Imath::Box2i dataWindowForTile (int dx, int dy, > int lx, int ly) const; ># 380 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > void writeTile (int dx, int dy, int l = 0); > void writeTile (int dx, int dy, int lx, int ly); > > void writeTiles (int dx1, int dx2, int dy1, int dy2, > int lx, int ly); > > void writeTiles (int dx1, int dx2, int dy1, int dy2, > int l = 0); ># 398 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > void copyPixels (TiledInputFile &in); ># 411 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > void copyPixels (InputFile &in); ># 432 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > void updatePreviewImage (const PreviewRgba newPixels[]); ># 449 "/usr/include/OpenEXR/ImfTiledOutputFile.h" > void breakTile (int dx, int dy, > int lx, int ly, > int offset, > int length, > char c); > struct Data; > > private: > > TiledOutputFile (const TiledOutputFile &); > TiledOutputFile & operator = (const TiledOutputFile &); > > void initialize (const Header &header); > > bool isValidTile (int dx, int dy, > int lx, int ly) const; > > size_t bytesPerLineForTile (int dx, int dy, > int lx, int ly) const; > > Data * _data; >}; > > >} ># 49 "/usr/include/OpenEXR/ImfInputFile.h" 2 > ># 1 "/usr/include/c++/4.8.2/fstream" 1 3 ># 36 "/usr/include/c++/4.8.2/fstream" 3 > ># 37 "/usr/include/c++/4.8.2/fstream" 3 > > > > ># 1 "/usr/include/c++/4.8.2/cstdio" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdio" 3 > ># 40 "/usr/include/c++/4.8.2/cstdio" 3 ># 42 "/usr/include/c++/4.8.2/fstream" 2 3 ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/basic_file.h" 1 3 ># 37 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/basic_file.h" 3 > ># 38 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/basic_file.h" 3 > > ># 1 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++io.h" 1 3 ># 35 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++io.h" 3 ># 1 "/usr/include/c++/4.8.2/cstdio" 1 3 ># 39 "/usr/include/c++/4.8.2/cstdio" 3 > ># 40 "/usr/include/c++/4.8.2/cstdio" 3 ># 36 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++io.h" 2 3 > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > typedef __gthread_mutex_t __c_lock; > > > typedef FILE __c_file; > > >} ># 41 "/usr/include/c++/4.8.2/x86_64-redhat-linux/bits/basic_file.h" 2 3 > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > template<typename _CharT> > class __basic_file; > > > template<> > class __basic_file<char> > { > > __c_file* _M_cfile; > > > bool _M_cfile_created; > > public: > __basic_file(__c_lock* __lock = 0) throw (); > > __basic_file* > open(const char* __name, ios_base::openmode __mode, int __prot = 0664); > > __basic_file* > sys_open(__c_file* __file, ios_base::openmode); > > __basic_file* > sys_open(int __fd, ios_base::openmode __mode) throw (); > > __basic_file* > close(); > > __attribute__ ((__pure__)) bool > is_open() const throw (); > > __attribute__ ((__pure__)) int > fd() throw (); > > __attribute__ ((__pure__)) __c_file* > file() throw (); > > ~__basic_file(); > > streamsize > xsputn(const char* __s, streamsize __n); > > streamsize > xsputn_2(const char* __s1, streamsize __n1, > const char* __s2, streamsize __n2); > > streamsize > xsgetn(char* __s, streamsize __n); > > streamoff > seekoff(streamoff __off, ios_base::seekdir __way) throw (); > > int > sync(); > > streamsize > showmanyc(); > }; > > >} ># 43 "/usr/include/c++/4.8.2/fstream" 2 3 > > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 71 "/usr/include/c++/4.8.2/fstream" 3 > template<typename _CharT, typename _Traits> > class basic_filebuf : public basic_streambuf<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > typedef basic_streambuf<char_type, traits_type> __streambuf_type; > typedef basic_filebuf<char_type, traits_type> __filebuf_type; > typedef __basic_file<char> __file_type; > typedef typename traits_type::state_type __state_type; > typedef codecvt<char_type, char, __state_type> __codecvt_type; > > friend class ios_base; > > protected: > > > __c_lock _M_lock; > > > __file_type _M_file; > > > ios_base::openmode _M_mode; > > > __state_type _M_state_beg; > > > > > __state_type _M_state_cur; > > > > __state_type _M_state_last; > > > char_type* _M_buf; > > > > > > > size_t _M_buf_size; > > > bool _M_buf_allocated; ># 133 "/usr/include/c++/4.8.2/fstream" 3 > bool _M_reading; > bool _M_writing; > > > > > > > > char_type _M_pback; > char_type* _M_pback_cur_save; > char_type* _M_pback_end_save; > bool _M_pback_init; > > > > const __codecvt_type* _M_codecvt; > > > > > > > char* _M_ext_buf; > > > > > streamsize _M_ext_buf_size; > > > > > > > const char* _M_ext_next; > char* _M_ext_end; > > > > > > > void > _M_create_pback() > { > if (!_M_pback_init) > { > _M_pback_cur_save = this->gptr(); > _M_pback_end_save = this->egptr(); > this->setg(&_M_pback, &_M_pback, &_M_pback + 1); > _M_pback_init = true; > } > } > > > > > > > void > _M_destroy_pback() throw() > { > if (_M_pback_init) > { > > _M_pback_cur_save += this->gptr() != this->eback(); > this->setg(_M_buf, _M_pback_cur_save, _M_pback_end_save); > _M_pback_init = false; > } > } > > public: > > > > > > > > basic_filebuf(); > > > > > virtual > ~basic_filebuf() > { this->close(); } > > > > > > bool > is_open() const throw() > { return _M_file.is_open(); } ># 269 "/usr/include/c++/4.8.2/fstream" 3 > __filebuf_type* > open(const char* __s, ios_base::openmode __mode); ># 296 "/usr/include/c++/4.8.2/fstream" 3 > __filebuf_type* > close(); > > protected: > void > _M_allocate_internal_buffer(); > > void > _M_destroy_internal_buffer() throw(); > > > virtual streamsize > showmanyc(); > > > > > > > virtual int_type > underflow(); > > virtual int_type > pbackfail(int_type __c = _Traits::eof()); ># 328 "/usr/include/c++/4.8.2/fstream" 3 > virtual int_type > overflow(int_type __c = _Traits::eof()); > > > > bool > _M_convert_to_external(char_type*, streamsize); ># 348 "/usr/include/c++/4.8.2/fstream" 3 > virtual __streambuf_type* > setbuf(char_type* __s, streamsize __n); > > virtual pos_type > seekoff(off_type __off, ios_base::seekdir __way, > ios_base::openmode __mode = ios_base::in | ios_base::out); > > virtual pos_type > seekpos(pos_type __pos, > ios_base::openmode __mode = ios_base::in | ios_base::out); > > > pos_type > _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state); > > int > _M_get_ext_pos(__state_type &__state); > > virtual int > sync(); > > virtual void > imbue(const locale& __loc); > > virtual streamsize > xsgetn(char_type* __s, streamsize __n); > > virtual streamsize > xsputn(const char_type* __s, streamsize __n); > > > bool > _M_terminate_output(); ># 394 "/usr/include/c++/4.8.2/fstream" 3 > void > _M_set_buffer(streamsize __off) > { > const bool __testin = _M_mode & ios_base::in; > const bool __testout = _M_mode & ios_base::out; > > if (__testin && __off > 0) > this->setg(_M_buf, _M_buf, _M_buf + __off); > else > this->setg(_M_buf, _M_buf, _M_buf); > > if (__testout && __off == 0 && _M_buf_size > 1 ) > this->setp(_M_buf, _M_buf + _M_buf_size - 1); > else > this->setp(0, 0); > } > }; ># 426 "/usr/include/c++/4.8.2/fstream" 3 > template<typename _CharT, typename _Traits> > class basic_ifstream : public basic_istream<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > typedef basic_filebuf<char_type, traits_type> __filebuf_type; > typedef basic_istream<char_type, traits_type> __istream_type; > > private: > __filebuf_type _M_filebuf; > > public: ># 453 "/usr/include/c++/4.8.2/fstream" 3 > basic_ifstream() : __istream_type(), _M_filebuf() > { this->init(&_M_filebuf); } ># 466 "/usr/include/c++/4.8.2/fstream" 3 > explicit > basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in) > : __istream_type(), _M_filebuf() > { > this->init(&_M_filebuf); > this->open(__s, __mode); > } ># 498 "/usr/include/c++/4.8.2/fstream" 3 > ~basic_ifstream() > { } ># 508 "/usr/include/c++/4.8.2/fstream" 3 > __filebuf_type* > rdbuf() const > { return const_cast<__filebuf_type*>(&_M_filebuf); } > > > > > > bool > is_open() > { return _M_filebuf.is_open(); } > > > > bool > is_open() const > { return _M_filebuf.is_open(); } ># 537 "/usr/include/c++/4.8.2/fstream" 3 > void > open(const char* __s, ios_base::openmode __mode = ios_base::in) > { > if (!_M_filebuf.open(__s, __mode | ios_base::in)) > this->setstate(ios_base::failbit); > else > > > this->clear(); > } ># 575 "/usr/include/c++/4.8.2/fstream" 3 > void > close() > { > if (!_M_filebuf.close()) > this->setstate(ios_base::failbit); > } > }; ># 598 "/usr/include/c++/4.8.2/fstream" 3 > template<typename _CharT, typename _Traits> > class basic_ofstream : public basic_ostream<_CharT,_Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > typedef basic_filebuf<char_type, traits_type> __filebuf_type; > typedef basic_ostream<char_type, traits_type> __ostream_type; > > private: > __filebuf_type _M_filebuf; > > public: ># 625 "/usr/include/c++/4.8.2/fstream" 3 > basic_ofstream(): __ostream_type(), _M_filebuf() > { this->init(&_M_filebuf); } ># 639 "/usr/include/c++/4.8.2/fstream" 3 > explicit > basic_ofstream(const char* __s, > ios_base::openmode __mode = ios_base::out|ios_base::trunc) > : __ostream_type(), _M_filebuf() > { > this->init(&_M_filebuf); > this->open(__s, __mode); > } ># 673 "/usr/include/c++/4.8.2/fstream" 3 > ~basic_ofstream() > { } ># 683 "/usr/include/c++/4.8.2/fstream" 3 > __filebuf_type* > rdbuf() const > { return const_cast<__filebuf_type*>(&_M_filebuf); } > > > > > > bool > is_open() > { return _M_filebuf.is_open(); } > > > > bool > is_open() const > { return _M_filebuf.is_open(); } ># 712 "/usr/include/c++/4.8.2/fstream" 3 > void > open(const char* __s, > ios_base::openmode __mode = ios_base::out | ios_base::trunc) > { > if (!_M_filebuf.open(__s, __mode | ios_base::out)) > this->setstate(ios_base::failbit); > else > > > this->clear(); > } ># 752 "/usr/include/c++/4.8.2/fstream" 3 > void > close() > { > if (!_M_filebuf.close()) > this->setstate(ios_base::failbit); > } > }; ># 775 "/usr/include/c++/4.8.2/fstream" 3 > template<typename _CharT, typename _Traits> > class basic_fstream : public basic_iostream<_CharT, _Traits> > { > public: > > typedef _CharT char_type; > typedef _Traits traits_type; > typedef typename traits_type::int_type int_type; > typedef typename traits_type::pos_type pos_type; > typedef typename traits_type::off_type off_type; > > > typedef basic_filebuf<char_type, traits_type> __filebuf_type; > typedef basic_ios<char_type, traits_type> __ios_type; > typedef basic_iostream<char_type, traits_type> __iostream_type; > > private: > __filebuf_type _M_filebuf; > > public: ># 803 "/usr/include/c++/4.8.2/fstream" 3 > basic_fstream() > : __iostream_type(), _M_filebuf() > { this->init(&_M_filebuf); } ># 815 "/usr/include/c++/4.8.2/fstream" 3 > explicit > basic_fstream(const char* __s, > ios_base::openmode __mode = ios_base::in | ios_base::out) > : __iostream_type(0), _M_filebuf() > { > this->init(&_M_filebuf); > this->open(__s, __mode); > } ># 846 "/usr/include/c++/4.8.2/fstream" 3 > ~basic_fstream() > { } ># 856 "/usr/include/c++/4.8.2/fstream" 3 > __filebuf_type* > rdbuf() const > { return const_cast<__filebuf_type*>(&_M_filebuf); } > > > > > > bool > is_open() > { return _M_filebuf.is_open(); } > > > > bool > is_open() const > { return _M_filebuf.is_open(); } ># 885 "/usr/include/c++/4.8.2/fstream" 3 > void > open(const char* __s, > ios_base::openmode __mode = ios_base::in | ios_base::out) > { > if (!_M_filebuf.open(__s, __mode)) > this->setstate(ios_base::failbit); > else > > > this->clear(); > } ># 925 "/usr/include/c++/4.8.2/fstream" 3 > void > close() > { > if (!_M_filebuf.close()) > this->setstate(ios_base::failbit); > } > }; > > >} > ># 1 "/usr/include/c++/4.8.2/bits/fstream.tcc" 1 3 ># 37 "/usr/include/c++/4.8.2/bits/fstream.tcc" 3 > ># 38 "/usr/include/c++/4.8.2/bits/fstream.tcc" 3 > > > >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > template<typename _CharT, typename _Traits> > void > basic_filebuf<_CharT, _Traits>:: > _M_allocate_internal_buffer() > { > > > if (!_M_buf_allocated && !_M_buf) > { > _M_buf = new char_type[_M_buf_size]; > _M_buf_allocated = true; > } > } > > template<typename _CharT, typename _Traits> > void > basic_filebuf<_CharT, _Traits>:: > _M_destroy_internal_buffer() throw() > { > if (_M_buf_allocated) > { > delete [] _M_buf; > _M_buf = 0; > _M_buf_allocated = false; > } > delete [] _M_ext_buf; > _M_ext_buf = 0; > _M_ext_buf_size = 0; > _M_ext_next = 0; > _M_ext_end = 0; > } > > template<typename _CharT, typename _Traits> > basic_filebuf<_CharT, _Traits>:: > basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock), > _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(), > _M_state_last(), _M_buf(0), _M_buf_size(8192), > _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), > _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false), > _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), > _M_ext_end(0) > { > if (has_facet<__codecvt_type>(this->_M_buf_locale)) > _M_codecvt = &use_facet<__codecvt_type>(this->_M_buf_locale); > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::__filebuf_type* > basic_filebuf<_CharT, _Traits>:: > open(const char* __s, ios_base::openmode __mode) > { > __filebuf_type *__ret = 0; > if (!this->is_open()) > { > _M_file.open(__s, __mode); > if (this->is_open()) > { > _M_allocate_internal_buffer(); > _M_mode = __mode; > > > _M_reading = false; > _M_writing = false; > _M_set_buffer(-1); > > > _M_state_last = _M_state_cur = _M_state_beg; > > > if ((__mode & ios_base::ate) > && this->seekoff(0, ios_base::end, __mode) > == pos_type(off_type(-1))) > this->close(); > else > __ret = this; > } > } > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::__filebuf_type* > basic_filebuf<_CharT, _Traits>:: > close() > { > if (!this->is_open()) > return 0; > > bool __testfail = false; > { > > struct __close_sentry > { > basic_filebuf *__fb; > __close_sentry (basic_filebuf *__fbi): __fb(__fbi) { } > ~__close_sentry () > { > __fb->_M_mode = ios_base::openmode(0); > __fb->_M_pback_init = false; > __fb->_M_destroy_internal_buffer(); > __fb->_M_reading = false; > __fb->_M_writing = false; > __fb->_M_set_buffer(-1); > __fb->_M_state_last = __fb->_M_state_cur = __fb->_M_state_beg; > } > } __cs (this); > > try > { > if (!_M_terminate_output()) > __testfail = true; > } > catch(__cxxabiv1::__forced_unwind&) > { > _M_file.close(); > throw; > } > catch(...) > { __testfail = true; } > } > > if (!_M_file.close()) > __testfail = true; > > if (__testfail) > return 0; > else > return this; > } > > template<typename _CharT, typename _Traits> > streamsize > basic_filebuf<_CharT, _Traits>:: > showmanyc() > { > streamsize __ret = -1; > const bool __testin = _M_mode & ios_base::in; > if (__testin && this->is_open()) > { > > > __ret = this->egptr() - this->gptr(); > > > > > > > > if (__check_facet(_M_codecvt).encoding() >= 0) > > __ret += _M_file.showmanyc() / _M_codecvt->max_length(); > } > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::int_type > basic_filebuf<_CharT, _Traits>:: > underflow() > { > int_type __ret = traits_type::eof(); > const bool __testin = _M_mode & ios_base::in; > if (__testin) > { > if (_M_writing) > { > if (overflow() == traits_type::eof()) > return __ret; > _M_set_buffer(-1); > _M_writing = false; > } > > > > _M_destroy_pback(); > > if (this->gptr() < this->egptr()) > return traits_type::to_int_type(*this->gptr()); > > > const size_t __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; > > > bool __got_eof = false; > > streamsize __ilen = 0; > codecvt_base::result __r = codecvt_base::ok; > if (__check_facet(_M_codecvt).always_noconv()) > { > __ilen = _M_file.xsgetn(reinterpret_cast<char*>(this->eback()), > __buflen); > if (__ilen == 0) > __got_eof = true; > } > else > { > > > const int __enc = _M_codecvt->encoding(); > streamsize __blen; > streamsize __rlen; > if (__enc > 0) > __blen = __rlen = __buflen * __enc; > else > { > __blen = __buflen + _M_codecvt->max_length() - 1; > __rlen = __buflen; > } > const streamsize __remainder = _M_ext_end - _M_ext_next; > __rlen = __rlen > __remainder ? __rlen - __remainder : 0; > > > > if (_M_reading && this->egptr() == this->eback() && __remainder) > __rlen = 0; > > > > if (_M_ext_buf_size < __blen) > { > char* __buf = new char[__blen]; > if (__remainder) > __builtin_memcpy(__buf, _M_ext_next, __remainder); > > delete [] _M_ext_buf; > _M_ext_buf = __buf; > _M_ext_buf_size = __blen; > } > else if (__remainder) > __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); > > _M_ext_next = _M_ext_buf; > _M_ext_end = _M_ext_buf + __remainder; > _M_state_last = _M_state_cur; > > do > { > if (__rlen > 0) > { > > > > if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size) > { > __throw_ios_failure(("basic_filebuf::underflow " "codecvt::max_length() " "is not valid") > > ); > } > streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen); > if (__elen == 0) > __got_eof = true; > else if (__elen == -1) > break; > _M_ext_end += __elen; > } > > char_type* __iend = this->eback(); > if (_M_ext_next < _M_ext_end) > __r = _M_codecvt->in(_M_state_cur, _M_ext_next, > _M_ext_end, _M_ext_next, > this->eback(), > this->eback() + __buflen, __iend); > if (__r == codecvt_base::noconv) > { > size_t __avail = _M_ext_end - _M_ext_buf; > __ilen = std::min(__avail, __buflen); > traits_type::copy(this->eback(), > reinterpret_cast<char_type*> > (_M_ext_buf), __ilen); > _M_ext_next = _M_ext_buf + __ilen; > } > else > __ilen = __iend - this->eback(); > > > > > if (__r == codecvt_base::error) > break; > > __rlen = 1; > } > while (__ilen == 0 && !__got_eof); > } > > if (__ilen > 0) > { > _M_set_buffer(__ilen); > _M_reading = true; > __ret = traits_type::to_int_type(*this->gptr()); > } > else if (__got_eof) > { > > > > _M_set_buffer(-1); > _M_reading = false; > > > if (__r == codecvt_base::partial) > __throw_ios_failure(("basic_filebuf::underflow " "incomplete character in file") > ); > } > else if (__r == codecvt_base::error) > __throw_ios_failure(("basic_filebuf::underflow " "invalid byte sequence in file") > ); > else > __throw_ios_failure(("basic_filebuf::underflow " "error reading the file") > ); > } > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::int_type > basic_filebuf<_CharT, _Traits>:: > pbackfail(int_type __i) > { > int_type __ret = traits_type::eof(); > const bool __testin = _M_mode & ios_base::in; > if (__testin) > { > if (_M_writing) > { > if (overflow() == traits_type::eof()) > return __ret; > _M_set_buffer(-1); > _M_writing = false; > } > > > const bool __testpb = _M_pback_init; > const bool __testeof = traits_type::eq_int_type(__i, __ret); > int_type __tmp; > if (this->eback() < this->gptr()) > { > this->gbump(-1); > __tmp = traits_type::to_int_type(*this->gptr()); > } > else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1))) > { > __tmp = this->underflow(); > if (traits_type::eq_int_type(__tmp, __ret)) > return __ret; > } > else > { > > > > > > return __ret; > } > > > > if (!__testeof && traits_type::eq_int_type(__i, __tmp)) > __ret = __i; > else if (__testeof) > __ret = traits_type::not_eof(__i); > else if (!__testpb) > { > _M_create_pback(); > _M_reading = true; > *this->gptr() = traits_type::to_char_type(__i); > __ret = __i; > } > } > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::int_type > basic_filebuf<_CharT, _Traits>:: > overflow(int_type __c) > { > int_type __ret = traits_type::eof(); > const bool __testeof = traits_type::eq_int_type(__c, __ret); > const bool __testout = _M_mode & ios_base::out; > if (__testout) > { > if (_M_reading) > { > _M_destroy_pback(); > const int __gptr_off = _M_get_ext_pos(_M_state_last); > if (_M_seek(__gptr_off, ios_base::cur, _M_state_last) > == pos_type(off_type(-1))) > return __ret; > } > if (this->pbase() < this->pptr()) > { > > if (!__testeof) > { > *this->pptr() = traits_type::to_char_type(__c); > this->pbump(1); > } > > > > if (_M_convert_to_external(this->pbase(), > this->pptr() - this->pbase())) > { > _M_set_buffer(0); > __ret = traits_type::not_eof(__c); > } > } > else if (_M_buf_size > 1) > { > > > > _M_set_buffer(0); > _M_writing = true; > if (!__testeof) > { > *this->pptr() = traits_type::to_char_type(__c); > this->pbump(1); > } > __ret = traits_type::not_eof(__c); > } > else > { > > char_type __conv = traits_type::to_char_type(__c); > if (__testeof || _M_convert_to_external(&__conv, 1)) > { > _M_writing = true; > __ret = traits_type::not_eof(__c); > } > } > } > return __ret; > } > > template<typename _CharT, typename _Traits> > bool > basic_filebuf<_CharT, _Traits>:: > _M_convert_to_external(_CharT* __ibuf, streamsize __ilen) > { > > streamsize __elen; > streamsize __plen; > if (__check_facet(_M_codecvt).always_noconv()) > { > __elen = _M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen); > __plen = __ilen; > } > else > { > > > streamsize __blen = __ilen * _M_codecvt->max_length(); > char* __buf = static_cast<char*>(__builtin_alloca(__blen)); > > char* __bend; > const char_type* __iend; > codecvt_base::result __r; > __r = _M_codecvt->out(_M_state_cur, __ibuf, __ibuf + __ilen, > __iend, __buf, __buf + __blen, __bend); > > if (__r == codecvt_base::ok || __r == codecvt_base::partial) > __blen = __bend - __buf; > else if (__r == codecvt_base::noconv) > { > > __buf = reinterpret_cast<char*>(__ibuf); > __blen = __ilen; > } > else > __throw_ios_failure(("basic_filebuf::_M_convert_to_external " "conversion error") > ); > > __elen = _M_file.xsputn(__buf, __blen); > __plen = __blen; > > > if (__r == codecvt_base::partial && __elen == __plen) > { > const char_type* __iresume = __iend; > streamsize __rlen = this->pptr() - __iend; > __r = _M_codecvt->out(_M_state_cur, __iresume, > __iresume + __rlen, __iend, __buf, > __buf + __blen, __bend); > if (__r != codecvt_base::error) > { > __rlen = __bend - __buf; > __elen = _M_file.xsputn(__buf, __rlen); > __plen = __rlen; > } > else > __throw_ios_failure(("basic_filebuf::_M_convert_to_external " "conversion error") > ); > } > } > return __elen == __plen; > } > > template<typename _CharT, typename _Traits> > streamsize > basic_filebuf<_CharT, _Traits>:: > xsgetn(_CharT* __s, streamsize __n) > { > > streamsize __ret = 0; > if (_M_pback_init) > { > if (__n > 0 && this->gptr() == this->eback()) > { > *__s++ = *this->gptr(); > this->gbump(1); > __ret = 1; > --__n; > } > _M_destroy_pback(); > } > else if (_M_writing) > { > if (overflow() == traits_type::eof()) > return __ret; > _M_set_buffer(-1); > _M_writing = false; > } > > > > > const bool __testin = _M_mode & ios_base::in; > const streamsize __buflen = _M_buf_size > 1 ? _M_buf_size - 1 : 1; > > if (__n > __buflen && __check_facet(_M_codecvt).always_noconv() > && __testin) > { > > const streamsize __avail = this->egptr() - this->gptr(); > if (__avail != 0) > { > traits_type::copy(__s, this->gptr(), __avail); > __s += __avail; > this->setg(this->eback(), this->gptr() + __avail, > this->egptr()); > __ret += __avail; > __n -= __avail; > } > > > > streamsize __len; > for (;;) > { > __len = _M_file.xsgetn(reinterpret_cast<char*>(__s), > __n); > if (__len == -1) > __throw_ios_failure(("basic_filebuf::xsgetn " "error reading the file") > ); > if (__len == 0) > break; > > __n -= __len; > __ret += __len; > if (__n == 0) > break; > > __s += __len; > } > > if (__n == 0) > { > _M_set_buffer(0); > _M_reading = true; > } > else if (__len == 0) > { > > > > _M_set_buffer(-1); > _M_reading = false; > } > } > else > __ret += __streambuf_type::xsgetn(__s, __n); > > return __ret; > } > > template<typename _CharT, typename _Traits> > streamsize > basic_filebuf<_CharT, _Traits>:: > xsputn(const _CharT* __s, streamsize __n) > { > streamsize __ret = 0; > > > > const bool __testout = _M_mode & ios_base::out; > if (__check_facet(_M_codecvt).always_noconv() > && __testout && !_M_reading) > { > > const streamsize __chunk = 1ul << 10; > streamsize __bufavail = this->epptr() - this->pptr(); > > > if (!_M_writing && _M_buf_size > 1) > __bufavail = _M_buf_size - 1; > > const streamsize __limit = std::min(__chunk, __bufavail); > if (__n >= __limit) > { > const streamsize __buffill = this->pptr() - this->pbase(); > const char* __buf = reinterpret_cast<const char*>(this->pbase()); > __ret = _M_file.xsputn_2(__buf, __buffill, > reinterpret_cast<const char*>(__s), > __n); > if (__ret == __buffill + __n) > { > _M_set_buffer(0); > _M_writing = true; > } > if (__ret > __buffill) > __ret -= __buffill; > else > __ret = 0; > } > else > __ret = __streambuf_type::xsputn(__s, __n); > } > else > __ret = __streambuf_type::xsputn(__s, __n); > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::__streambuf_type* > basic_filebuf<_CharT, _Traits>:: > setbuf(char_type* __s, streamsize __n) > { > if (!this->is_open()) > { > if (__s == 0 && __n == 0) > _M_buf_size = 1; > else if (__s && __n > 0) > { ># 700 "/usr/include/c++/4.8.2/bits/fstream.tcc" 3 > _M_buf = __s; > _M_buf_size = __n; > } > } > return this; > } > > > > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::pos_type > basic_filebuf<_CharT, _Traits>:: > seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode) > { > int __width = 0; > if (_M_codecvt) > __width = _M_codecvt->encoding(); > if (__width < 0) > __width = 0; > > pos_type __ret = pos_type(off_type(-1)); > const bool __testfail = __off != 0 && __width <= 0; > if (this->is_open() && !__testfail) > { > > > > > bool __no_movement = __way == ios_base::cur && __off == 0 > && (!_M_writing || _M_codecvt->always_noconv()); > > > if (!__no_movement) > _M_destroy_pback(); > > > > > > > __state_type __state = _M_state_beg; > off_type __computed_off = __off * __width; > if (_M_reading && __way == ios_base::cur) > { > __state = _M_state_last; > __computed_off += _M_get_ext_pos(__state); > } > if (!__no_movement) > __ret = _M_seek(__computed_off, __way, __state); > else > { > if (_M_writing) > __computed_off = this->pptr() - this->pbase(); > > off_type __file_off = _M_file.seekoff(0, ios_base::cur); > if (__file_off != off_type(-1)) > { > __ret = __file_off + __computed_off; > __ret.state(__state); > } > } > } > return __ret; > } > > > > > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::pos_type > basic_filebuf<_CharT, _Traits>:: > seekpos(pos_type __pos, ios_base::openmode) > { > pos_type __ret = pos_type(off_type(-1)); > if (this->is_open()) > { > > _M_destroy_pback(); > __ret = _M_seek(off_type(__pos), ios_base::beg, __pos.state()); > } > return __ret; > } > > template<typename _CharT, typename _Traits> > typename basic_filebuf<_CharT, _Traits>::pos_type > basic_filebuf<_CharT, _Traits>:: > _M_seek(off_type __off, ios_base::seekdir __way, __state_type __state) > { > pos_type __ret = pos_type(off_type(-1)); > if (_M_terminate_output()) > { > off_type __file_off = _M_file.seekoff(__off, __way); > if (__file_off != off_type(-1)) > { > _M_reading = false; > _M_writing = false; > _M_ext_next = _M_ext_end = _M_ext_buf; > _M_set_buffer(-1); > _M_state_cur = __state; > __ret = __file_off; > __ret.state(_M_state_cur); > } > } > return __ret; > } > > > > > template<typename _CharT, typename _Traits> > int basic_filebuf<_CharT, _Traits>:: > _M_get_ext_pos(__state_type& __state) > { > if (_M_codecvt->always_noconv()) > return this->gptr() - this->egptr(); > else > { > > > > const int __gptr_off = > _M_codecvt->length(__state, _M_ext_buf, _M_ext_next, > this->gptr() - this->eback()); > return _M_ext_buf + __gptr_off - _M_ext_end; > } > } > > template<typename _CharT, typename _Traits> > bool > basic_filebuf<_CharT, _Traits>:: > _M_terminate_output() > { > > bool __testvalid = true; > if (this->pbase() < this->pptr()) > { > const int_type __tmp = this->overflow(); > if (traits_type::eq_int_type(__tmp, traits_type::eof())) > __testvalid = false; > } > > > if (_M_writing && !__check_facet(_M_codecvt).always_noconv() > && __testvalid) > { > > > > const size_t __blen = 128; > char __buf[__blen]; > codecvt_base::result __r; > streamsize __ilen = 0; > > do > { > char* __next; > __r = _M_codecvt->unshift(_M_state_cur, __buf, > __buf + __blen, __next); > if (__r == codecvt_base::error) > __testvalid = false; > else if (__r == codecvt_base::ok || > __r == codecvt_base::partial) > { > __ilen = __next - __buf; > if (__ilen > 0) > { > const streamsize __elen = _M_file.xsputn(__buf, __ilen); > if (__elen != __ilen) > __testvalid = false; > } > } > } > while (__r == codecvt_base::partial && __ilen > 0 && __testvalid); > > if (__testvalid) > { > > > > > const int_type __tmp = this->overflow(); > if (traits_type::eq_int_type(__tmp, traits_type::eof())) > __testvalid = false; > } > } > return __testvalid; > } > > template<typename _CharT, typename _Traits> > int > basic_filebuf<_CharT, _Traits>:: > sync() > { > > > int __ret = 0; > if (this->pbase() < this->pptr()) > { > const int_type __tmp = this->overflow(); > if (traits_type::eq_int_type(__tmp, traits_type::eof())) > __ret = -1; > } > return __ret; > } > > template<typename _CharT, typename _Traits> > void > basic_filebuf<_CharT, _Traits>:: > imbue(const locale& __loc) > { > bool __testvalid = true; > > const __codecvt_type* _M_codecvt_tmp = 0; > if (__builtin_expect(has_facet<__codecvt_type>(__loc), true)) > _M_codecvt_tmp = &use_facet<__codecvt_type>(__loc); > > if (this->is_open()) > { > > if ((_M_reading || _M_writing) > && __check_facet(_M_codecvt).encoding() == -1) > __testvalid = false; > else > { > if (_M_reading) > { > if (__check_facet(_M_codecvt).always_noconv()) > { > if (_M_codecvt_tmp > && !__check_facet(_M_codecvt_tmp).always_noconv()) > __testvalid = this->seekoff(0, ios_base::cur, _M_mode) > != pos_type(off_type(-1)); > } > else > { > > _M_ext_next = _M_ext_buf > + _M_codecvt->length(_M_state_last, _M_ext_buf, > _M_ext_next, > this->gptr() - this->eback()); > const streamsize __remainder = _M_ext_end - _M_ext_next; > if (__remainder) > __builtin_memmove(_M_ext_buf, _M_ext_next, __remainder); > > _M_ext_next = _M_ext_buf; > _M_ext_end = _M_ext_buf + __remainder; > _M_set_buffer(-1); > _M_state_last = _M_state_cur = _M_state_beg; > } > } > else if (_M_writing && (__testvalid = _M_terminate_output())) > _M_set_buffer(-1); > } > } > > if (__testvalid) > _M_codecvt = _M_codecvt_tmp; > else > _M_codecvt = 0; > } > > > > > extern template class basic_filebuf<char>; > extern template class basic_ifstream<char>; > extern template class basic_ofstream<char>; > extern template class basic_fstream<char>; > > > extern template class basic_filebuf<wchar_t>; > extern template class basic_ifstream<wchar_t>; > extern template class basic_ofstream<wchar_t>; > extern template class basic_fstream<wchar_t>; > > > > >} ># 937 "/usr/include/c++/4.8.2/fstream" 2 3 ># 51 "/usr/include/OpenEXR/ImfInputFile.h" 2 > > >namespace Imf { > >class TiledInputFile; >class ScanLineInputFile; > > >class InputFile >{ > public: ># 71 "/usr/include/OpenEXR/ImfInputFile.h" > InputFile (const char fileName[], int numThreads = globalThreadCount()); ># 83 "/usr/include/OpenEXR/ImfInputFile.h" > InputFile (IStream &is, int numThreads = globalThreadCount()); > > > > > > > virtual ~InputFile (); > > > > > > > const char * fileName () const; > > > > > > > const Header & header () const; > > > > > > > int version () const; ># 125 "/usr/include/OpenEXR/ImfInputFile.h" > void setFrameBuffer (const FrameBuffer &frameBuffer); > > > > > > > const FrameBuffer & frameBuffer () const; ># 144 "/usr/include/OpenEXR/ImfInputFile.h" > bool isComplete () const; ># 166 "/usr/include/OpenEXR/ImfInputFile.h" > void readPixels (int scanLine1, int scanLine2); > void readPixels (int scanLine); ># 176 "/usr/include/OpenEXR/ImfInputFile.h" > void rawPixelData (int firstScanLine, > const char *&pixelData, > int &pixelDataSize); > > > > > > > > void rawTileData (int &dx, int &dy, > int &lx, int &ly, > const char *&pixelData, > int &pixelDataSize); > > struct Data; > > private: > > InputFile (const InputFile &); > InputFile & operator = (const InputFile &); > > void initialize (); > TiledInputFile * tFile (); > > friend void TiledOutputFile::copyPixels (InputFile &); > > Data * _data; >}; > > >} ># 390 "./CImg.h" 2 ># 1 "/usr/include/OpenEXR/ImfChannelList.h" 1 ># 50 "/usr/include/OpenEXR/ImfChannelList.h" ># 1 "/usr/include/c++/4.8.2/set" 1 3 ># 58 "/usr/include/c++/4.8.2/set" 3 > ># 59 "/usr/include/c++/4.8.2/set" 3 > > ># 1 "/usr/include/c++/4.8.2/bits/stl_set.h" 1 3 ># 64 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 88 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > template<typename _Key, typename _Compare = std::less<_Key>, > typename _Alloc = std::allocator<_Key> > > class set > { > > typedef typename _Alloc::value_type _Alloc_value_type; > > > > > > public: > > > > typedef _Key key_type; > typedef _Key value_type; > typedef _Compare key_compare; > typedef _Compare value_compare; > typedef _Alloc allocator_type; > > > private: > typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type; > > typedef _Rb_tree<key_type, value_type, _Identity<value_type>, > key_compare, _Key_alloc_type> _Rep_type; > _Rep_type _M_t; > > public: > > > typedef typename _Key_alloc_type::pointer pointer; > typedef typename _Key_alloc_type::const_pointer const_pointer; > typedef typename _Key_alloc_type::reference reference; > typedef typename _Key_alloc_type::const_reference const_reference; > > > > typedef typename _Rep_type::const_iterator iterator; > typedef typename _Rep_type::const_iterator const_iterator; > typedef typename _Rep_type::const_reverse_iterator reverse_iterator; > typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; > typedef typename _Rep_type::size_type size_type; > typedef typename _Rep_type::difference_type difference_type; > > > > > > > set() > : _M_t() { } > > > > > > > explicit > set(const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Key_alloc_type(__a)) { } ># 162 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > template<typename _InputIterator> > set(_InputIterator __first, _InputIterator __last) > : _M_t() > { _M_t._M_insert_unique(__first, __last); } ># 179 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > template<typename _InputIterator> > set(_InputIterator __first, _InputIterator __last, > const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Key_alloc_type(__a)) > { _M_t._M_insert_unique(__first, __last); } ># 193 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > set(const set& __x) > : _M_t(__x._M_t) { } ># 232 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > set& > operator=(const set& __x) > { > _M_t = __x._M_t; > return *this; > } ># 280 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > key_compare > key_comp() const > { return _M_t.key_comp(); } > > value_compare > value_comp() const > { return _M_t.key_comp(); } > > allocator_type > get_allocator() const > { return allocator_type(_M_t.get_allocator()); } > > > > > > > iterator > begin() const > { return _M_t.begin(); } > > > > > > > iterator > end() const > { return _M_t.end(); } > > > > > > > reverse_iterator > rbegin() const > { return _M_t.rbegin(); } > > > > > > > reverse_iterator > rend() const > { return _M_t.rend(); } ># 367 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > bool > empty() const > { return _M_t.empty(); } > > > size_type > size() const > { return _M_t.size(); } > > > size_type > max_size() const > { return _M_t.max_size(); } ># 392 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > void > swap(set& __x) > { _M_t.swap(__x._M_t); } ># 459 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > std::pair<iterator, bool> > insert(const value_type& __x) > { > std::pair<typename _Rep_type::iterator, bool> __p = > _M_t._M_insert_unique(__x); > return std::pair<iterator, bool>(__p.first, __p.second); > } ># 496 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > iterator > insert(const_iterator __position, const value_type& __x) > { return _M_t._M_insert_unique_(__position, __x); } ># 515 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > template<typename _InputIterator> > void > insert(_InputIterator __first, _InputIterator __last) > { _M_t._M_insert_unique(__first, __last); } ># 564 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > void > erase(iterator __position) > { _M_t.erase(__position); } ># 580 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > size_type > erase(const key_type& __x) > { return _M_t.erase(__x); } ># 618 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > void > erase(iterator __first, iterator __last) > { _M_t.erase(__first, __last); } ># 629 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > void > clear() > { _M_t.clear(); } ># 643 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > size_type > count(const key_type& __x) const > { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } ># 661 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > iterator > find(const key_type& __x) > { return _M_t.find(__x); } > > const_iterator > find(const key_type& __x) const > { return _M_t.find(__x); } ># 682 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > iterator > lower_bound(const key_type& __x) > { return _M_t.lower_bound(__x); } > > const_iterator > lower_bound(const key_type& __x) const > { return _M_t.lower_bound(__x); } ># 698 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > iterator > upper_bound(const key_type& __x) > { return _M_t.upper_bound(__x); } > > const_iterator > upper_bound(const key_type& __x) const > { return _M_t.upper_bound(__x); } ># 723 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > std::pair<iterator, iterator> > equal_range(const key_type& __x) > { return _M_t.equal_range(__x); } > > std::pair<const_iterator, const_iterator> > equal_range(const key_type& __x) const > { return _M_t.equal_range(__x); } > > > template<typename _K1, typename _C1, typename _A1> > friend bool > operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); > > template<typename _K1, typename _C1, typename _A1> > friend bool > operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); > }; ># 752 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator==(const set<_Key, _Compare, _Alloc>& __x, > const set<_Key, _Compare, _Alloc>& __y) > { return __x._M_t == __y._M_t; } ># 769 "/usr/include/c++/4.8.2/bits/stl_set.h" 3 > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator<(const set<_Key, _Compare, _Alloc>& __x, > const set<_Key, _Compare, _Alloc>& __y) > { return __x._M_t < __y._M_t; } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator!=(const set<_Key, _Compare, _Alloc>& __x, > const set<_Key, _Compare, _Alloc>& __y) > { return !(__x == __y); } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator>(const set<_Key, _Compare, _Alloc>& __x, > const set<_Key, _Compare, _Alloc>& __y) > { return __y < __x; } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator<=(const set<_Key, _Compare, _Alloc>& __x, > const set<_Key, _Compare, _Alloc>& __y) > { return !(__y < __x); } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator>=(const set<_Key, _Compare, _Alloc>& __x, > const set<_Key, _Compare, _Alloc>& __y) > { return !(__x < __y); } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline void > swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y) > { __x.swap(__y); } > > >} ># 62 "/usr/include/c++/4.8.2/set" 2 3 ># 1 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 1 3 ># 64 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > ># 90 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > template <typename _Key, typename _Compare = std::less<_Key>, > typename _Alloc = std::allocator<_Key> > > class multiset > { > > typedef typename _Alloc::value_type _Alloc_value_type; > > > > > > public: > > typedef _Key key_type; > typedef _Key value_type; > typedef _Compare key_compare; > typedef _Compare value_compare; > typedef _Alloc allocator_type; > > private: > > typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type; > > typedef _Rb_tree<key_type, value_type, _Identity<value_type>, > key_compare, _Key_alloc_type> _Rep_type; > > _Rep_type _M_t; > > public: > typedef typename _Key_alloc_type::pointer pointer; > typedef typename _Key_alloc_type::const_pointer const_pointer; > typedef typename _Key_alloc_type::reference reference; > typedef typename _Key_alloc_type::const_reference const_reference; > > > > typedef typename _Rep_type::const_iterator iterator; > typedef typename _Rep_type::const_iterator const_iterator; > typedef typename _Rep_type::const_reverse_iterator reverse_iterator; > typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; > typedef typename _Rep_type::size_type size_type; > typedef typename _Rep_type::difference_type difference_type; > > > > > > multiset() > : _M_t() { } > > > > > > > explicit > multiset(const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Key_alloc_type(__a)) { } ># 159 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > template<typename _InputIterator> > multiset(_InputIterator __first, _InputIterator __last) > : _M_t() > { _M_t._M_insert_equal(__first, __last); } ># 175 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > template<typename _InputIterator> > multiset(_InputIterator __first, _InputIterator __last, > const _Compare& __comp, > const allocator_type& __a = allocator_type()) > : _M_t(__comp, _Key_alloc_type(__a)) > { _M_t._M_insert_equal(__first, __last); } ># 189 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > multiset(const multiset& __x) > : _M_t(__x._M_t) { } ># 228 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > multiset& > operator=(const multiset& __x) > { > _M_t = __x._M_t; > return *this; > } ># 277 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > key_compare > key_comp() const > { return _M_t.key_comp(); } > > value_compare > value_comp() const > { return _M_t.key_comp(); } > > allocator_type > get_allocator() const > { return allocator_type(_M_t.get_allocator()); } > > > > > > > iterator > begin() const > { return _M_t.begin(); } > > > > > > > iterator > end() const > { return _M_t.end(); } > > > > > > > reverse_iterator > rbegin() const > { return _M_t.rbegin(); } > > > > > > > reverse_iterator > rend() const > { return _M_t.rend(); } ># 364 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > bool > empty() const > { return _M_t.empty(); } > > > size_type > size() const > { return _M_t.size(); } > > > size_type > max_size() const > { return _M_t.max_size(); } ># 389 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > void > swap(multiset& __x) > { _M_t.swap(__x._M_t); } ># 453 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > iterator > insert(const value_type& __x) > { return _M_t._M_insert_equal(__x); } ># 483 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > iterator > insert(const_iterator __position, const value_type& __x) > { return _M_t._M_insert_equal_(__position, __x); } ># 501 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > template<typename _InputIterator> > void > insert(_InputIterator __first, _InputIterator __last) > { _M_t._M_insert_equal(__first, __last); } ># 550 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > void > erase(iterator __position) > { _M_t.erase(__position); } ># 566 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > size_type > erase(const key_type& __x) > { return _M_t.erase(__x); } ># 604 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > void > erase(iterator __first, iterator __last) > { _M_t.erase(__first, __last); } ># 615 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > void > clear() > { _M_t.clear(); } ># 626 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > size_type > count(const key_type& __x) const > { return _M_t.count(__x); } ># 644 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > iterator > find(const key_type& __x) > { return _M_t.find(__x); } > > const_iterator > find(const key_type& __x) const > { return _M_t.find(__x); } ># 665 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > iterator > lower_bound(const key_type& __x) > { return _M_t.lower_bound(__x); } > > const_iterator > lower_bound(const key_type& __x) const > { return _M_t.lower_bound(__x); } ># 681 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > iterator > upper_bound(const key_type& __x) > { return _M_t.upper_bound(__x); } > > const_iterator > upper_bound(const key_type& __x) const > { return _M_t.upper_bound(__x); } ># 706 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > std::pair<iterator, iterator> > equal_range(const key_type& __x) > { return _M_t.equal_range(__x); } > > std::pair<const_iterator, const_iterator> > equal_range(const key_type& __x) const > { return _M_t.equal_range(__x); } > > > template<typename _K1, typename _C1, typename _A1> > friend bool > operator==(const multiset<_K1, _C1, _A1>&, > const multiset<_K1, _C1, _A1>&); > > template<typename _K1, typename _C1, typename _A1> > friend bool > operator< (const multiset<_K1, _C1, _A1>&, > const multiset<_K1, _C1, _A1>&); > }; ># 737 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator==(const multiset<_Key, _Compare, _Alloc>& __x, > const multiset<_Key, _Compare, _Alloc>& __y) > { return __x._M_t == __y._M_t; } ># 754 "/usr/include/c++/4.8.2/bits/stl_multiset.h" 3 > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator<(const multiset<_Key, _Compare, _Alloc>& __x, > const multiset<_Key, _Compare, _Alloc>& __y) > { return __x._M_t < __y._M_t; } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator!=(const multiset<_Key, _Compare, _Alloc>& __x, > const multiset<_Key, _Compare, _Alloc>& __y) > { return !(__x == __y); } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator>(const multiset<_Key,_Compare,_Alloc>& __x, > const multiset<_Key,_Compare,_Alloc>& __y) > { return __y < __x; } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator<=(const multiset<_Key, _Compare, _Alloc>& __x, > const multiset<_Key, _Compare, _Alloc>& __y) > { return !(__y < __x); } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline bool > operator>=(const multiset<_Key, _Compare, _Alloc>& __x, > const multiset<_Key, _Compare, _Alloc>& __y) > { return !(__x < __y); } > > > template<typename _Key, typename _Compare, typename _Alloc> > inline void > swap(multiset<_Key, _Compare, _Alloc>& __x, > multiset<_Key, _Compare, _Alloc>& __y) > { __x.swap(__y); } > > >} ># 63 "/usr/include/c++/4.8.2/set" 2 3 ># 51 "/usr/include/OpenEXR/ImfChannelList.h" 2 > > > >namespace Imf { > > >struct Channel >{ > > > > > PixelType type; ># 74 "/usr/include/OpenEXR/ImfChannelList.h" > int xSampling; > int ySampling; ># 93 "/usr/include/OpenEXR/ImfChannelList.h" > bool pLinear; > > > > > > > Channel (PixelType type = HALF, > int xSampling = 1, > int ySampling = 1, > bool pLinear = false); > > > > > > > bool operator == (const Channel &other) const; >}; > > >class ChannelList >{ > public: > > > > > > void insert (const char name[], > const Channel &channel); > > void insert (const std::string &name, > const Channel &channel); ># 140 "/usr/include/OpenEXR/ImfChannelList.h" > Channel & operator [] (const char name[]); > const Channel & operator [] (const char name[]) const; > > Channel & operator [] (const std::string &name); > const Channel & operator [] (const std::string &name) const; > > Channel * findChannel (const char name[]); > const Channel * findChannel (const char name[]) const; > > Channel * findChannel (const std::string &name); > const Channel * findChannel (const std::string &name) const; > > > > > > > typedef std::map <Name, Channel> ChannelMap; > > class Iterator; > class ConstIterator; > > Iterator begin (); > ConstIterator begin () const; > > Iterator end (); > ConstIterator end () const; > > Iterator find (const char name[]); > ConstIterator find (const char name[]) const; > > Iterator find (const std::string &name); > ConstIterator find (const std::string &name) const; ># 215 "/usr/include/OpenEXR/ImfChannelList.h" > void layers (std::set <std::string> &layerNames) const; > > void channelsInLayer (const std::string &layerName, > Iterator &first, > Iterator &last); > > void channelsInLayer (const std::string &layerName, > ConstIterator &first, > ConstIterator &last) const; ># 238 "/usr/include/OpenEXR/ImfChannelList.h" > void channelsWithPrefix (const char prefix[], > Iterator &first, > Iterator &last); > > void channelsWithPrefix (const char prefix[], > ConstIterator &first, > ConstIterator &last) const; > > void channelsWithPrefix (const std::string &prefix, > Iterator &first, > Iterator &last); > > void channelsWithPrefix (const std::string &prefix, > ConstIterator &first, > ConstIterator &last) const; > > > > > > bool operator == (const ChannelList &other) const; > > private: > > ChannelMap _map; >}; > > > > > > >class ChannelList::Iterator >{ > public: > > Iterator (); > Iterator (const ChannelList::ChannelMap::iterator &i); > > Iterator & operator ++ (); > Iterator operator ++ (int); > > const char * name () const; > Channel & channel () const; > > private: > > friend class ChannelList::ConstIterator; > > ChannelList::ChannelMap::iterator _i; >}; > > >class ChannelList::ConstIterator >{ > public: > > ConstIterator (); > ConstIterator (const ChannelList::ChannelMap::const_iterator &i); > ConstIterator (const ChannelList::Iterator &other); > > ConstIterator & operator ++ (); > ConstIterator operator ++ (int); > > const char * name () const; > const Channel & channel () const; > > private: > > friend bool operator == (const ConstIterator &, const ConstIterator &); > friend bool operator != (const ConstIterator &, const ConstIterator &); > > ChannelList::ChannelMap::const_iterator _i; >}; > > > > > > >inline >ChannelList::Iterator::Iterator (): _i() >{ > >} > > >inline >ChannelList::Iterator::Iterator (const ChannelList::ChannelMap::iterator &i): > _i (i) >{ > >} > > >inline ChannelList::Iterator & >ChannelList::Iterator::operator ++ () >{ > ++_i; > return *this; >} > > >inline ChannelList::Iterator >ChannelList::Iterator::operator ++ (int) >{ > Iterator tmp = *this; > ++_i; > return tmp; >} > > >inline const char * >ChannelList::Iterator::name () const >{ > return *_i->first; >} > > >inline Channel & >ChannelList::Iterator::channel () const >{ > return _i->second; >} > > >inline >ChannelList::ConstIterator::ConstIterator (): _i() >{ > >} > >inline >ChannelList::ConstIterator::ConstIterator > (const ChannelList::ChannelMap::const_iterator &i): _i (i) >{ > >} > > >inline >ChannelList::ConstIterator::ConstIterator (const ChannelList::Iterator &other): > _i (other._i) >{ > >} > >inline ChannelList::ConstIterator & >ChannelList::ConstIterator::operator ++ () >{ > ++_i; > return *this; >} > > >inline ChannelList::ConstIterator >ChannelList::ConstIterator::operator ++ (int) >{ > ConstIterator tmp = *this; > ++_i; > return tmp; >} > > >inline const char * >ChannelList::ConstIterator::name () const >{ > return *_i->first; >} > >inline const Channel & >ChannelList::ConstIterator::channel () const >{ > return _i->second; >} > > >inline bool >operator == (const ChannelList::ConstIterator &x, > const ChannelList::ConstIterator &y) >{ > return x._i == y._i; >} > > >inline bool >operator != (const ChannelList::ConstIterator &x, > const ChannelList::ConstIterator &y) >{ > return !(x == y); >} > > >} ># 391 "./CImg.h" 2 ># 1 "/usr/include/OpenEXR/ImfMatrixAttribute.h" 1 ># 49 "/usr/include/OpenEXR/ImfMatrixAttribute.h" ># 1 "/usr/include/OpenEXR/ImfAttribute.h" 1 ># 47 "/usr/include/OpenEXR/ImfAttribute.h" ># 1 "/usr/include/OpenEXR/ImfIO.h" 1 ># 48 "/usr/include/OpenEXR/ImfIO.h" >namespace Imf { > > > > > >class IStream >{ > public: > > > > > > virtual ~IStream (); ># 74 "/usr/include/OpenEXR/ImfIO.h" > virtual bool isMemoryMapped () const; ># 87 "/usr/include/OpenEXR/ImfIO.h" > virtual bool read (char c[ ], int n) = 0; ># 101 "/usr/include/OpenEXR/ImfIO.h" > virtual char * readMemoryMapped (int n); ># 110 "/usr/include/OpenEXR/ImfIO.h" > virtual Int64 tellg () = 0; > > > > > > > > virtual void seekg (Int64 pos) = 0; > > > > > > > virtual void clear (); > > > > > > > const char * fileName () const; > > protected: > > IStream (const char fileName[]); > > private: > > IStream (const IStream &); > IStream & operator = (const IStream &); > > std::string _fileName; >}; > > > > > > >class OStream >{ > public: > > > > > > virtual ~OStream (); ># 170 "/usr/include/OpenEXR/ImfIO.h" > virtual void write (const char c[ ], int n) = 0; ># 180 "/usr/include/OpenEXR/ImfIO.h" > virtual Int64 tellp () = 0; > > > > > > > > virtual void seekp (Int64 pos) = 0; > > > > > > > const char * fileName () const; > > protected: > > OStream (const char fileName[]); > > private: > > OStream (const OStream &); > OStream & operator = (const OStream &); > > std::string _fileName; >}; > > > > > > >struct StreamIO >{ > static void > writeChars (OStream &os, const char c[ ], int n) > { > os.write (c, n); > } > > static bool > readChars (IStream &is, char c[ ], int n) > { > return is.read (c, n); > } >}; > > >struct CharPtrIO >{ > static void > writeChars (char *&op, const char c[ ], int n) > { > while (n--) > *op++ = *c++; > } > > static bool > readChars (const char *&ip, char c[ ], int n) > { > while (n--) > *c++ = *ip++; > > return true; > } >}; > > >} ># 48 "/usr/include/OpenEXR/ImfAttribute.h" 2 ># 1 "/usr/include/OpenEXR/ImfXdr.h" 1 ># 106 "/usr/include/OpenEXR/ImfXdr.h" ># 1 "/usr/include/OpenEXR/IexMathExc.h" 1 ># 42 "/usr/include/OpenEXR/IexMathExc.h" >namespace Iex { > > > > > > >class OverflowExc: public MathExc { public: OverflowExc (const char* text=0) throw(): MathExc (text) {} OverflowExc (const std::string &text) throw(): MathExc (text) {} OverflowExc (std::stringstream &text) throw(): MathExc (text) {} }; >class UnderflowExc: public MathExc { public: UnderflowExc (const char* text=0) throw(): MathExc (text) {} UnderflowExc (const std::string &text) throw(): MathExc (text) {} UnderflowExc (std::stringstream &text) throw(): MathExc (text) {} }; >class DivzeroExc: public MathExc { public: DivzeroExc (const char* text=0) throw(): MathExc (text) {} DivzeroExc (const std::string &text) throw(): MathExc (text) {} DivzeroExc (std::stringstream &text) throw(): MathExc (text) {} }; >class InexactExc: public MathExc { public: InexactExc (const char* text=0) throw(): MathExc (text) {} InexactExc (const std::string &text) throw(): MathExc (text) {} InexactExc (std::stringstream &text) throw(): MathExc (text) {} }; >class InvalidFpOpExc: public MathExc { public: InvalidFpOpExc (const char* text=0) throw(): MathExc (text) {} InvalidFpOpExc (const std::string &text) throw(): MathExc (text) {} InvalidFpOpExc (std::stringstream &text) throw(): MathExc (text) {} }; > > >} ># 107 "/usr/include/OpenEXR/ImfXdr.h" 2 > ># 1 "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/limits.h" 1 3 4 ># 109 "/usr/include/OpenEXR/ImfXdr.h" 2 > >namespace Imf { >namespace Xdr { > > > > > > >template <class S, class T> >void >write (T &out, bool v); > >template <class S, class T> >void >write (T &out, char v); > >template <class S, class T> >void >write (T &out, signed char v); > >template <class S, class T> >void >write (T &out, unsigned char v); > >template <class S, class T> >void >write (T &out, signed short v); > >template <class S, class T> >void >write (T &out, unsigned short v); > >template <class S, class T> >void >write (T &out, signed int v); > >template <class S, class T> >void >write (T &out, unsigned int v); > >template <class S, class T> >void >write (T &out, signed long v); > >template <class S, class T> >void >write (T &out, unsigned long v); ># 166 "/usr/include/OpenEXR/ImfXdr.h" >template <class S, class T> >void >write (T &out, float v); > >template <class S, class T> >void >write (T &out, double v); > >template <class S, class T> >void >write (T &out, half v); > >template <class S, class T> >void >write (T &out, const char v[ ], int n); > >template <class S, class T> >void >write (T &out, const char v[]); > > > > > > >template <class S, class T> >void >pad (T &out, int n); > > > > > > > >template <class S, class T> >void >read (T &in, bool &v); > >template <class S, class T> >void >read (T &in, char &v); > >template <class S, class T> >void >read (T &in, signed char &v); > >template <class S, class T> >void >read (T &in, unsigned char &v); > >template <class S, class T> >void >read (T &in, signed short &v); > >template <class S, class T> >void >read (T &in, unsigned short &v); > >template <class S, class T> >void >read (T &in, signed int &v); > >template <class S, class T> >void >read (T &in, unsigned int &v); > >template <class S, class T> >void >read (T &in, signed long &v); > >template <class S, class T> >void >read (T &in, unsigned long &v); ># 249 "/usr/include/OpenEXR/ImfXdr.h" >template <class S, class T> >void >read (T &in, float &v); > >template <class S, class T> >void >read (T &in, double &v); > >template <class S, class T> >void >read (T &in, half &v); > >template <class S, class T> >void >read (T &in, char v[ ], int n); > >template <class S, class T> >void >read (T &in, int n, char v[ ]); > > > > > > >template <class S, class T> >void >skip (T &in, int n); ># 285 "/usr/include/OpenEXR/ImfXdr.h" >template <class S> >int >size (); > > > > > > >template <class S, class T> >inline void >writeSignedChars (T &out, const signed char c[], int n) >{ > S::writeChars (out, (const char *) c, n); >} > > >template <class S, class T> >inline void >writeUnsignedChars (T &out, const unsigned char c[], int n) >{ > S::writeChars (out, (const char *) c, n); >} > > >template <class S, class T> >inline void >readSignedChars (T &in, signed char c[], int n) >{ > S::readChars (in, (char *) c, n); >} > > >template <class S, class T> >inline void >readUnsignedChars (T &in, unsigned char c[], int n) >{ > S::readChars (in, (char *) c, n); >} > > >template <class S, class T> >inline void >write (T &out, bool v) >{ > char c = !!v; > S::writeChars (out, &c, 1); >} > > >template <class S, class T> >inline void >write (T &out, char v) >{ > S::writeChars (out, &v, 1); >} > > >template <class S, class T> >inline void >write (T &out, signed char v) >{ > writeSignedChars<S> (out, &v, 1); >} > > >template <class S, class T> >inline void >write (T &out, unsigned char v) >{ > writeUnsignedChars<S> (out, &v, 1); >} > > >template <class S, class T> >void >write (T &out, signed short v) >{ > signed char b[2]; > > b[0] = (signed char) (v); > b[1] = (signed char) (v >> 8); > > writeSignedChars<S> (out, b, 2); >} > > >template <class S, class T> >void >write (T &out, unsigned short v) >{ > unsigned char b[2]; > > b[0] = (unsigned char) (v); > b[1] = (unsigned char) (v >> 8); > > writeUnsignedChars<S> (out, b, 2); >} > > >template <class S, class T> >void >write (T &out, signed int v) >{ > signed char b[4]; > > b[0] = (signed char) (v); > b[1] = (signed char) (v >> 8); > b[2] = (signed char) (v >> 16); > b[3] = (signed char) (v >> 24); > > writeSignedChars<S> (out, b, 4); >} > > >template <class S, class T> >void >write (T &out, unsigned int v) >{ > unsigned char b[4]; > > b[0] = (unsigned char) (v); > b[1] = (unsigned char) (v >> 8); > b[2] = (unsigned char) (v >> 16); > b[3] = (unsigned char) (v >> 24); > > writeUnsignedChars<S> (out, b, 4); >} > > >template <class S, class T> >void >write (T &out, signed long v) >{ > signed char b[8]; > > b[0] = (signed char) (v); > b[1] = (signed char) (v >> 8); > b[2] = (signed char) (v >> 16); > b[3] = (signed char) (v >> 24); ># 445 "/usr/include/OpenEXR/ImfXdr.h" > b[4] = (signed char) (v >> 32); > b[5] = (signed char) (v >> 40); > b[6] = (signed char) (v >> 48); > b[7] = (signed char) (v >> 56); > > > > > > > > writeSignedChars<S> (out, b, 8); >} > > >template <class S, class T> >void >write (T &out, unsigned long v) >{ > unsigned char b[8]; > > b[0] = (unsigned char) (v); > b[1] = (unsigned char) (v >> 8); > b[2] = (unsigned char) (v >> 16); > b[3] = (unsigned char) (v >> 24); ># 480 "/usr/include/OpenEXR/ImfXdr.h" > b[4] = (unsigned char) (v >> 32); > b[5] = (unsigned char) (v >> 40); > b[6] = (unsigned char) (v >> 48); > b[7] = (unsigned char) (v >> 56); > > > > > > > > writeUnsignedChars<S> (out, b, 8); >} ># 518 "/usr/include/OpenEXR/ImfXdr.h" >template <class S, class T> >void >write (T &out, float v) >{ > union {unsigned int i; float f;} u; > u.f = v; > > unsigned char b[4]; > > b[0] = (unsigned char) (u.i); > b[1] = (unsigned char) (u.i >> 8); > b[2] = (unsigned char) (u.i >> 16); > b[3] = (unsigned char) (u.i >> 24); > > writeUnsignedChars<S> (out, b, 4); >} > > >template <class S, class T> >void >write (T &out, double v) >{ > union {Int64 i; double d;} u; > u.d = v; > > unsigned char b[8]; > > b[0] = (unsigned char) (u.i); > b[1] = (unsigned char) (u.i >> 8); > b[2] = (unsigned char) (u.i >> 16); > b[3] = (unsigned char) (u.i >> 24); > b[4] = (unsigned char) (u.i >> 32); > b[5] = (unsigned char) (u.i >> 40); > b[6] = (unsigned char) (u.i >> 48); > b[7] = (unsigned char) (u.i >> 56); > > writeUnsignedChars<S> (out, b, 8); >} > > >template <class S, class T> >inline void >write (T &out, half v) >{ > unsigned char b[2]; > > b[0] = (unsigned char) (v.bits()); > b[1] = (unsigned char) (v.bits() >> 8); > > writeUnsignedChars<S> (out, b, 2); >} > > >template <class S, class T> >inline void >write (T &out, const char v[], int n) >{ > S::writeChars (out, v, n); >} > > >template <class S, class T> >void >write (T &out, const char v[]) >{ > while (*v) > { > S::writeChars (out, v, 1); > ++v; > } > > S::writeChars (out, v, 1); >} > > >template <class S, class T> >void >pad (T &out, int n) >{ > for (int i = 0; i < n; i++) > { > const char c = 0; > S::writeChars (out, &c, 1); > } >} > > >template <class S, class T> >inline void >read (T &in, bool &v) >{ > char c; > > S::readChars (in, &c, 1); > v = !!c; >} > > >template <class S, class T> >inline void >read (T &in, char &v) >{ > S::readChars (in, &v, 1); >} > > >template <class S, class T> >inline void >read (T &in, signed char &v) >{ > readSignedChars<S> (in, &v, 1); >} > > >template <class S, class T> >inline void >read (T &in, unsigned char &v) >{ > readUnsignedChars<S> (in, &v, 1); >} > > >template <class S, class T> >void >read (T &in, signed short &v) >{ > signed char b[2]; > > readSignedChars<S> (in, b, 2); > > v = (b[0] & 0x00ff) | > (b[1] << 8); >} > > >template <class S, class T> >void >read (T &in, unsigned short &v) >{ > unsigned char b[2]; > > readUnsignedChars<S> (in, b, 2); > > v = (b[0] & 0x00ff) | > (b[1] << 8); >} > > >template <class S, class T> >void >read (T &in, signed int &v) >{ > signed char b[4]; > > readSignedChars<S> (in, b, 4); > > v = (b[0] & 0x000000ff) | > ((b[1] << 8) & 0x0000ff00) | > ((b[2] << 16) & 0x00ff0000) | > (b[3] << 24); >} > > >template <class S, class T> >void >read (T &in, unsigned int &v) >{ > unsigned char b[4]; > > readUnsignedChars<S> (in, b, 4); > > v = (b[0] & 0x000000ff) | > ((b[1] << 8) & 0x0000ff00) | > ((b[2] << 16) & 0x00ff0000) | > (b[3] << 24); >} > > >template <class S, class T> >void >read (T &in, signed long &v) >{ > signed char b[8]; > > readSignedChars<S> (in, b, 8); ># 720 "/usr/include/OpenEXR/ImfXdr.h" > v = ((long) b[0] & 0x00000000000000ff) | > (((long) b[1] << 8) & 0x000000000000ff00) | > (((long) b[2] << 16) & 0x0000000000ff0000) | > (((long) b[3] << 24) & 0x00000000ff000000) | > (((long) b[4] << 32) & 0x000000ff00000000) | > (((long) b[5] << 40) & 0x0000ff0000000000) | > (((long) b[6] << 48) & 0x00ff000000000000) | > ((long) b[7] << 56); > > > > > > >} > > >template <class S, class T> >void >read (T &in, unsigned long &v) >{ > unsigned char b[8]; > > readUnsignedChars<S> (in, b, 8); ># 760 "/usr/include/OpenEXR/ImfXdr.h" > v = ((unsigned long) b[0] & 0x00000000000000ff) | > (((unsigned long) b[1] << 8) & 0x000000000000ff00) | > (((unsigned long) b[2] << 16) & 0x0000000000ff0000) | > (((unsigned long) b[3] << 24) & 0x00000000ff000000) | > (((unsigned long) b[4] << 32) & 0x000000ff00000000) | > (((unsigned long) b[5] << 40) & 0x0000ff0000000000) | > (((unsigned long) b[6] << 48) & 0x00ff000000000000) | > ((unsigned long) b[7] << 56); > > > > > > >} ># 800 "/usr/include/OpenEXR/ImfXdr.h" >template <class S, class T> >void >read (T &in, float &v) >{ > unsigned char b[4]; > > readUnsignedChars<S> (in, b, 4); > > union {unsigned int i; float f;} u; > > u.i = (b[0] & 0x000000ff) | > ((b[1] << 8) & 0x0000ff00) | > ((b[2] << 16) & 0x00ff0000) | > (b[3] << 24); > > v = u.f; >} > > >template <class S, class T> >void >read (T &in, double &v) >{ > unsigned char b[8]; > > readUnsignedChars<S> (in, b, 8); > > union {Int64 i; double d;} u; > > u.i = ((Int64) b[0] & 0x00000000000000ffULL) | > (((Int64) b[1] << 8) & 0x000000000000ff00ULL) | > (((Int64) b[2] << 16) & 0x0000000000ff0000ULL) | > (((Int64) b[3] << 24) & 0x00000000ff000000ULL) | > (((Int64) b[4] << 32) & 0x000000ff00000000ULL) | > (((Int64) b[5] << 40) & 0x0000ff0000000000ULL) | > (((Int64) b[6] << 48) & 0x00ff000000000000ULL) | > ((Int64) b[7] << 56); > > v = u.d; >} > > >template <class S, class T> >inline void >read (T &in, half &v) >{ > unsigned char b[2]; > > readUnsignedChars<S> (in, b, 2); > > v.setBits ((b[0] & 0x00ff) | (b[1] << 8)); >} > > >template <class S, class T> >inline void >read (T &in, char v[], int n) >{ > S::readChars (in, v, n); >} > > >template <class S, class T> >void >read (T &in, int n, char v[]) >{ > while (n >= 0) > { > S::readChars (in, v, 1); > > if (*v == 0) > break; > > --n; > ++v; > } >} > > >template <class S, class T> >void >skip (T &in, int n) >{ > char c[1024]; > > while (n >= (int) sizeof (c)) > { > if (!S::readChars (in, c, sizeof (c))) > return; > > n -= sizeof (c); > } > > if (n >= 1) > S::readChars (in, c, n); >} > > >template <> inline int size <bool> () {return 1;} >template <> inline int size <char> () {return 1;} >template <> inline int size <signed char> () {return 1;} >template <> inline int size <unsigned char> () {return 1;} >template <> inline int size <signed short> () {return 2;} >template <> inline int size <unsigned short> () {return 2;} >template <> inline int size <signed int> () {return 4;} >template <> inline int size <unsigned int> () {return 4;} >template <> inline int size <signed long> () {return 8;} >template <> inline int size <unsigned long> () {return 8;} >template <> inline int size <float> () {return 4;} >template <> inline int size <double> () {return 8;} >template <> inline int size <half> () {return 2;} > > >} >} ># 49 "/usr/include/OpenEXR/ImfAttribute.h" 2 > > >namespace Imf { > > >class Attribute >{ > public: > > > > > > Attribute (); > virtual ~Attribute (); > > > > > > > virtual const char * typeName () const = 0; > > > > > > > virtual Attribute * copy () const = 0; > > > > > > > virtual void writeValueTo (OStream &os, > int version) const = 0; > > virtual void readValueFrom (IStream &is, > int size, > int version) = 0; > > virtual void copyValueFrom (const Attribute &other) = 0; > > > > > > > static Attribute * newAttribute (const char typeName[]); > > > > > > > static bool knownType (const char typeName[]); > > > protected: > > > > > > > static void registerAttributeType (const char typeName[], > Attribute *(*newAttribute)()); > > > > > > > > static void unRegisterAttributeType (const char typeName[]); >}; > > > > > > >template <class T> >class TypedAttribute: public Attribute >{ > public: > > > > > > TypedAttribute (); > TypedAttribute (const T &value); > TypedAttribute (const TypedAttribute<T> &other); > virtual ~TypedAttribute (); > > > > > > > T & value (); > const T & value () const; > > > > > > > virtual const char * typeName () const; > > > > > > > > static const char * staticTypeName (); > > > > > > > static Attribute * makeNewAttribute (); > > > > > > > virtual Attribute * copy () const; > > > > > > > > virtual void writeValueTo (OStream &os, > int version) const; > > virtual void readValueFrom (IStream &is, > int size, > int version); > > virtual void copyValueFrom (const Attribute &other); > > > > > > > static TypedAttribute * cast (Attribute *attribute); > static const TypedAttribute * cast (const Attribute *attribute); > static TypedAttribute & cast (Attribute &attribute); > static const TypedAttribute & cast (const Attribute &attribute); ># 221 "/usr/include/OpenEXR/ImfAttribute.h" > static void registerAttributeType (); > > > > > > > static void unRegisterAttributeType (); > > > private: > > T _value; >}; > > > > > > >template <class T> >TypedAttribute<T>::TypedAttribute (): > Attribute (), > _value (T()) >{ > >} > > >template <class T> >TypedAttribute<T>::TypedAttribute (const T &value): > Attribute (), > _value (value) >{ > >} > > >template <class T> >TypedAttribute<T>::TypedAttribute (const TypedAttribute<T> &other): > Attribute (other), > _value () >{ > copyValueFrom (other); >} > > >template <class T> >TypedAttribute<T>::~TypedAttribute () >{ > >} > > >template <class T> >inline T & >TypedAttribute<T>::value () >{ > return _value; >} > > >template <class T> >inline const T & >TypedAttribute<T>::value () const >{ > return _value; >} > > >template <class T> >const char * >TypedAttribute<T>::typeName () const >{ > return staticTypeName(); >} > > >template <class T> >Attribute * >TypedAttribute<T>::makeNewAttribute () >{ > return new TypedAttribute<T>(); >} > > >template <class T> >Attribute * >TypedAttribute<T>::copy () const >{ > Attribute * attribute = new TypedAttribute<T>(); > attribute->copyValueFrom (*this); > return attribute; >} > > >template <class T> >void >TypedAttribute<T>::writeValueTo (OStream &os, int version) const >{ > Xdr::write <StreamIO> (os, _value); >} > > >template <class T> >void >TypedAttribute<T>::readValueFrom (IStream &is, int size, int version) >{ > Xdr::read <StreamIO> (is, _value); >} > > >template <class T> >void >TypedAttribute<T>::copyValueFrom (const Attribute &other) >{ > _value = cast(other)._value; >} > > >template <class T> >TypedAttribute<T> * >TypedAttribute<T>::cast (Attribute *attribute) >{ > TypedAttribute<T> *t = > dynamic_cast <TypedAttribute<T> *> (attribute); > > if (t == 0) > throw Iex::TypeExc ("Unexpected attribute type."); > > return t; >} > > >template <class T> >const TypedAttribute<T> * >TypedAttribute<T>::cast (const Attribute *attribute) >{ > const TypedAttribute<T> *t = > dynamic_cast <const TypedAttribute<T> *> (attribute); > > if (t == 0) > throw Iex::TypeExc ("Unexpected attribute type."); > > return t; >} > > >template <class T> >inline TypedAttribute<T> & >TypedAttribute<T>::cast (Attribute &attribute) >{ > return *cast (&attribute); >} > > >template <class T> >inline const TypedAttribute<T> & >TypedAttribute<T>::cast (const Attribute &attribute) >{ > return *cast (&attribute); >} > > >template <class T> >inline void >TypedAttribute<T>::registerAttributeType () >{ > Attribute::registerAttributeType (staticTypeName(), makeNewAttribute); >} > > >template <class T> >inline void >TypedAttribute<T>::unRegisterAttributeType () >{ > Attribute::unRegisterAttributeType (staticTypeName()); >} > > >} ># 50 "/usr/include/OpenEXR/ImfMatrixAttribute.h" 2 ># 1 "/usr/include/OpenEXR/ImathMatrix.h" 1 ># 47 "/usr/include/OpenEXR/ImathMatrix.h" ># 1 "/usr/include/OpenEXR/ImathFun.h" 1 ># 49 "/usr/include/OpenEXR/ImathFun.h" >namespace Imath { > >template <class T> >inline T >abs (T a) >{ > return (a > T(0)) ? a : -a; >} > > >template <class T> >inline int >sign (T a) >{ > return (a > T(0))? 1 : ((a < T(0)) ? -1 : 0); >} > > >template <class T, class Q> >inline T >lerp (T a, T b, Q t) >{ > return (T) (a * (1 - t) + b * t); >} > > >template <class T, class Q> >inline T >ulerp (T a, T b, Q t) >{ > return (T) ((a > b)? (a - (a - b) * t): (a + (b - a) * t)); >} > > >template <class T> >inline T >lerpfactor(T m, T a, T b) >{ ># 97 "/usr/include/OpenEXR/ImathFun.h" > T d = b - a; > T n = m - a; > > if (abs(d) > T(1) || abs(n) < limits<T>::max() * abs(d)) > return n / d; > > return T(0); >} > > >template <class T> >inline T >clamp (T a, T l, T h) >{ > return (a < l)? l : ((a > h)? h : a); >} > > >template <class T> >inline int >cmp (T a, T b) >{ > return Imath::sign (a - b); >} > > >template <class T> >inline int >cmpt (T a, T b, T t) >{ > return (Imath::abs (a - b) <= t)? 0 : cmp (a, b); >} > > >template <class T> >inline bool >iszero (T a, T t) >{ > return (Imath::abs (a) <= t) ? 1 : 0; >} > > >template <class T1, class T2, class T3> >inline bool >equal (T1 a, T2 b, T3 t) >{ > return Imath::abs (a - b) <= t; >} > >template <class T> >inline int >floor (T x) >{ > return (x >= 0)? int (x): -(int (-x) + (-x > int (-x))); >} > > >template <class T> >inline int >ceil (T x) >{ > return -floor (-x); >} > >template <class T> >inline int >trunc (T x) >{ > return (x >= 0) ? int(x) : -int(-x); >} ># 177 "/usr/include/OpenEXR/ImathFun.h" >inline int >divs (int x, int y) >{ > return (x >= 0)? ((y >= 0)? ( x / y): -( x / -y)): > ((y >= 0)? -(-x / y): (-x / -y)); >} > > >inline int >mods (int x, int y) >{ > return (x >= 0)? ((y >= 0)? ( x % y): ( x % -y)): > ((y >= 0)? -(-x % y): -(-x % -y)); >} ># 201 "/usr/include/OpenEXR/ImathFun.h" >inline int >divp (int x, int y) >{ > return (x >= 0)? ((y >= 0)? ( x / y): -( x / -y)): > ((y >= 0)? -((y-1-x) / y): ((-y-1-x) / -y)); >} > > >inline int >modp (int x, int y) >{ > return x - y * divp (x, y); >} ># 236 "/usr/include/OpenEXR/ImathFun.h" >float succf (float f); >float predf (float f); > >double succd (double d); >double predd (double d); > > > > > >inline bool >finitef (float f) >{ > union {float f; int i;} u; > u.f = f; > > return (u.i & 0x7f800000) != 0x7f800000; >} > >inline bool >finited (double d) >{ > union {double d; Int64 i;} u; > u.d = d; > > return (u.i & 0x7ff0000000000000LL) != 0x7ff0000000000000LL; >} > > >} ># 48 "/usr/include/OpenEXR/ImathMatrix.h" 2 > > ># 1 "/usr/include/OpenEXR/ImathShear.h" 1 ># 54 "/usr/include/OpenEXR/ImathShear.h" >namespace Imath { > > > > >template <class T> class Shear6 >{ > public: > > > > > > T xy, xz, yz, yx, zx, zy; > > T & operator [] (int i); > const T & operator [] (int i) const; > > > > > > > Shear6 (); > Shear6 (T XY, T XZ, T YZ); > Shear6 (const Vec3<T> &v); > template <class S> > Shear6 (const Vec3<S> &v); > Shear6 (T XY, T XZ, T YZ, > T YX, T ZX, T ZY); > > > > > > > Shear6 (const Shear6 &h); > template <class S> Shear6 (const Shear6<S> &h); > > const Shear6 & operator = (const Shear6 &h); > template <class S> > const Shear6 & operator = (const Vec3<S> &v); > > > > > > > template <class S> > void setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY); > > template <class S> > void setValue (const Shear6<S> &h); > > template <class S> > void getValue (S &XY, S &XZ, S &YZ, > S &YX, S &ZX, S &ZY) const; > > template <class S> > void getValue (Shear6<S> &h) const; > > T * getValue(); > const T * getValue() const; > > > > > > > template <class S> > bool operator == (const Shear6<S> &h) const; > > template <class S> > bool operator != (const Shear6<S> &h) const; ># 147 "/usr/include/OpenEXR/ImathShear.h" > bool equalWithAbsError (const Shear6<T> &h, T e) const; > bool equalWithRelError (const Shear6<T> &h, T e) const; > > > > > > > const Shear6 & operator += (const Shear6 &h); > Shear6 operator + (const Shear6 &h) const; > > > > > > > const Shear6 & operator -= (const Shear6 &h); > Shear6 operator - (const Shear6 &h) const; > > > > > > > Shear6 operator - () const; > const Shear6 & negate (); > > > > > > > const Shear6 & operator *= (const Shear6 &h); > const Shear6 & operator *= (T a); > Shear6 operator * (const Shear6 &h) const; > Shear6 operator * (T a) const; > > > > > > > const Shear6 & operator /= (const Shear6 &h); > const Shear6 & operator /= (T a); > Shear6 operator / (const Shear6 &h) const; > Shear6 operator / (T a) const; > > > > > > > static unsigned int dimensions() {return 6;} > > > > > > > static T baseTypeMin() {return limits<T>::min();} > static T baseTypeMax() {return limits<T>::max();} > static T baseTypeSmallest() {return limits<T>::smallest();} > static T baseTypeEpsilon() {return limits<T>::epsilon();} ># 218 "/usr/include/OpenEXR/ImathShear.h" > typedef T BaseType; >}; > > > > > > >template <class T> >std::ostream & operator << (std::ostream &s, const Shear6<T> &h); > > > > > > >template <class S, class T> Shear6<T> operator * (S a, const Shear6<T> &h); > > > > > > >typedef Vec3 <float> Shear3f; >typedef Vec3 <double> Shear3d; >typedef Shear6 <float> Shear6f; >typedef Shear6 <double> Shear6d; ># 253 "/usr/include/OpenEXR/ImathShear.h" >template <class T> >inline T & >Shear6<T>::operator [] (int i) >{ > return (&xy)[i]; >} > >template <class T> >inline const T & >Shear6<T>::operator [] (int i) const >{ > return (&xy)[i]; >} > >template <class T> >inline >Shear6<T>::Shear6 () >{ > xy = xz = yz = yx = zx = zy = 0; >} > >template <class T> >inline >Shear6<T>::Shear6 (T XY, T XZ, T YZ) >{ > xy = XY; > xz = XZ; > yz = YZ; > yx = 0; > zx = 0; > zy = 0; >} > >template <class T> >inline >Shear6<T>::Shear6 (const Vec3<T> &v) >{ > xy = v.x; > xz = v.y; > yz = v.z; > yx = 0; > zx = 0; > zy = 0; >} > >template <class T> >template <class S> >inline >Shear6<T>::Shear6 (const Vec3<S> &v) >{ > xy = T (v.x); > xz = T (v.y); > yz = T (v.z); > yx = 0; > zx = 0; > zy = 0; >} > >template <class T> >inline >Shear6<T>::Shear6 (T XY, T XZ, T YZ, T YX, T ZX, T ZY) >{ > xy = XY; > xz = XZ; > yz = YZ; > yx = YX; > zx = ZX; > zy = ZY; >} > >template <class T> >inline >Shear6<T>::Shear6 (const Shear6 &h) >{ > xy = h.xy; > xz = h.xz; > yz = h.yz; > yx = h.yx; > zx = h.zx; > zy = h.zy; >} > >template <class T> >template <class S> >inline >Shear6<T>::Shear6 (const Shear6<S> &h) >{ > xy = T (h.xy); > xz = T (h.xz); > yz = T (h.yz); > yx = T (h.yx); > zx = T (h.zx); > zy = T (h.zy); >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator = (const Shear6 &h) >{ > xy = h.xy; > xz = h.xz; > yz = h.yz; > yx = h.yx; > zx = h.zx; > zy = h.zy; > return *this; >} > >template <class T> >template <class S> >inline const Shear6<T> & >Shear6<T>::operator = (const Vec3<S> &v) >{ > xy = T (v.x); > xz = T (v.y); > yz = T (v.z); > yx = 0; > zx = 0; > zy = 0; > return *this; >} > >template <class T> >template <class S> >inline void >Shear6<T>::setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY) >{ > xy = T (XY); > xz = T (XZ); > yz = T (YZ); > yx = T (YX); > zx = T (ZX); > zy = T (ZY); >} > >template <class T> >template <class S> >inline void >Shear6<T>::setValue (const Shear6<S> &h) >{ > xy = T (h.xy); > xz = T (h.xz); > yz = T (h.yz); > yx = T (h.yx); > zx = T (h.zx); > zy = T (h.zy); >} > >template <class T> >template <class S> >inline void >Shear6<T>::getValue (S &XY, S &XZ, S &YZ, S &YX, S &ZX, S &ZY) const >{ > XY = S (xy); > XZ = S (xz); > YZ = S (yz); > YX = S (yx); > ZX = S (zx); > ZY = S (zy); >} > >template <class T> >template <class S> >inline void >Shear6<T>::getValue (Shear6<S> &h) const >{ > h.xy = S (xy); > h.xz = S (xz); > h.yz = S (yz); > h.yx = S (yx); > h.zx = S (zx); > h.zy = S (zy); >} > >template <class T> >inline T * >Shear6<T>::getValue() >{ > return (T *) &xy; >} > >template <class T> >inline const T * >Shear6<T>::getValue() const >{ > return (const T *) &xy; >} > >template <class T> >template <class S> >inline bool >Shear6<T>::operator == (const Shear6<S> &h) const >{ > return xy == h.xy && xz == h.xz && yz == h.yz && > yx == h.yx && zx == h.zx && zy == h.zy; >} > >template <class T> >template <class S> >inline bool >Shear6<T>::operator != (const Shear6<S> &h) const >{ > return xy != h.xy || xz != h.xz || yz != h.yz || > yx != h.yx || zx != h.zx || zy != h.zy; >} > >template <class T> >bool >Shear6<T>::equalWithAbsError (const Shear6<T> &h, T e) const >{ > for (int i = 0; i < 6; i++) > if (!Imath::equalWithAbsError ((*this)[i], h[i], e)) > return false; > > return true; >} > >template <class T> >bool >Shear6<T>::equalWithRelError (const Shear6<T> &h, T e) const >{ > for (int i = 0; i < 6; i++) > if (!Imath::equalWithRelError ((*this)[i], h[i], e)) > return false; > > return true; >} > > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator += (const Shear6 &h) >{ > xy += h.xy; > xz += h.xz; > yz += h.yz; > yx += h.yx; > zx += h.zx; > zy += h.zy; > return *this; >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator + (const Shear6 &h) const >{ > return Shear6 (xy + h.xy, xz + h.xz, yz + h.yz, > yx + h.yx, zx + h.zx, zy + h.zy); >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator -= (const Shear6 &h) >{ > xy -= h.xy; > xz -= h.xz; > yz -= h.yz; > yx -= h.yx; > zx -= h.zx; > zy -= h.zy; > return *this; >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator - (const Shear6 &h) const >{ > return Shear6 (xy - h.xy, xz - h.xz, yz - h.yz, > yx - h.yx, zx - h.zx, zy - h.zy); >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator - () const >{ > return Shear6 (-xy, -xz, -yz, -yx, -zx, -zy); >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::negate () >{ > xy = -xy; > xz = -xz; > yz = -yz; > yx = -yx; > zx = -zx; > zy = -zy; > return *this; >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator *= (const Shear6 &h) >{ > xy *= h.xy; > xz *= h.xz; > yz *= h.yz; > yx *= h.yx; > zx *= h.zx; > zy *= h.zy; > return *this; >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator *= (T a) >{ > xy *= a; > xz *= a; > yz *= a; > yx *= a; > zx *= a; > zy *= a; > return *this; >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator * (const Shear6 &h) const >{ > return Shear6 (xy * h.xy, xz * h.xz, yz * h.yz, > yx * h.yx, zx * h.zx, zy * h.zy); >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator * (T a) const >{ > return Shear6 (xy * a, xz * a, yz * a, > yx * a, zx * a, zy * a); >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator /= (const Shear6 &h) >{ > xy /= h.xy; > xz /= h.xz; > yz /= h.yz; > yx /= h.yx; > zx /= h.zx; > zy /= h.zy; > return *this; >} > >template <class T> >inline const Shear6<T> & >Shear6<T>::operator /= (T a) >{ > xy /= a; > xz /= a; > yz /= a; > yx /= a; > zx /= a; > zy /= a; > return *this; >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator / (const Shear6 &h) const >{ > return Shear6 (xy / h.xy, xz / h.xz, yz / h.yz, > yx / h.yx, zx / h.zx, zy / h.zy); >} > >template <class T> >inline Shear6<T> >Shear6<T>::operator / (T a) const >{ > return Shear6 (xy / a, xz / a, yz / a, > yx / a, zx / a, zy / a); >} > > > > > > >template <class T> >std::ostream & >operator << (std::ostream &s, const Shear6<T> &h) >{ > return s << '(' > << h.xy << ' ' << h.xz << ' ' << h.yz > << h.yx << ' ' << h.zx << ' ' << h.zy > << ')'; >} > > > > > > >template <class S, class T> >inline Shear6<T> >operator * (S a, const Shear6<T> &h) >{ > return Shear6<T> (a * h.xy, a * h.xz, a * h.yz, > a * h.yx, a * h.zx, a * h.zy); >} > > >} ># 51 "/usr/include/OpenEXR/ImathMatrix.h" 2 > ># 1 "/usr/include/c++/4.8.2/cstring" 1 3 ># 39 "/usr/include/c++/4.8.2/cstring" 3 > ># 40 "/usr/include/c++/4.8.2/cstring" 3 ># 53 "/usr/include/OpenEXR/ImathMatrix.h" 2 > ># 1 "/usr/include/c++/4.8.2/iomanip" 1 3 ># 36 "/usr/include/c++/4.8.2/iomanip" 3 > ># 37 "/usr/include/c++/4.8.2/iomanip" 3 ># 46 "/usr/include/c++/4.8.2/iomanip" 3 >namespace std __attribute__ ((__visibility__ ("default"))) >{ > > > > > > struct _Resetiosflags { ios_base::fmtflags _M_mask; }; ># 62 "/usr/include/c++/4.8.2/iomanip" 3 > inline _Resetiosflags > resetiosflags(ios_base::fmtflags __mask) > { return { __mask }; } > > template<typename _CharT, typename _Traits> > inline basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f) > { > __is.setf(ios_base::fmtflags(0), __f._M_mask); > return __is; > } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f) > { > __os.setf(ios_base::fmtflags(0), __f._M_mask); > return __os; > } > > > struct _Setiosflags { ios_base::fmtflags _M_mask; }; ># 92 "/usr/include/c++/4.8.2/iomanip" 3 > inline _Setiosflags > setiosflags(ios_base::fmtflags __mask) > { return { __mask }; } > > template<typename _CharT, typename _Traits> > inline basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f) > { > __is.setf(__f._M_mask); > return __is; > } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f) > { > __os.setf(__f._M_mask); > return __os; > } > > > struct _Setbase { int _M_base; }; ># 123 "/usr/include/c++/4.8.2/iomanip" 3 > inline _Setbase > setbase(int __base) > { return { __base }; } > > template<typename _CharT, typename _Traits> > inline basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f) > { > __is.setf(__f._M_base == 8 ? ios_base::oct : > __f._M_base == 10 ? ios_base::dec : > __f._M_base == 16 ? ios_base::hex : > ios_base::fmtflags(0), ios_base::basefield); > return __is; > } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f) > { > __os.setf(__f._M_base == 8 ? ios_base::oct : > __f._M_base == 10 ? ios_base::dec : > __f._M_base == 16 ? ios_base::hex : > ios_base::fmtflags(0), ios_base::basefield); > return __os; > } > > > template<typename _CharT> > struct _Setfill { _CharT _M_c; }; ># 160 "/usr/include/c++/4.8.2/iomanip" 3 > template<typename _CharT> > inline _Setfill<_CharT> > setfill(_CharT __c) > { return { __c }; } > > template<typename _CharT, typename _Traits> > inline basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f) > { > __is.fill(__f._M_c); > return __is; > } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f) > { > __os.fill(__f._M_c); > return __os; > } > > > struct _Setprecision { int _M_n; }; ># 191 "/usr/include/c++/4.8.2/iomanip" 3 > inline _Setprecision > setprecision(int __n) > { return { __n }; } > > template<typename _CharT, typename _Traits> > inline basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f) > { > __is.precision(__f._M_n); > return __is; > } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f) > { > __os.precision(__f._M_n); > return __os; > } > > > struct _Setw { int _M_n; }; ># 221 "/usr/include/c++/4.8.2/iomanip" 3 > inline _Setw > setw(int __n) > { return { __n }; } > > template<typename _CharT, typename _Traits> > inline basic_istream<_CharT, _Traits>& > operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f) > { > __is.width(__f._M_n); > return __is; > } > > template<typename _CharT, typename _Traits> > inline basic_ostream<_CharT, _Traits>& > operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f) > { > __os.width(__f._M_n); > return __os; > } ># 343 "/usr/include/c++/4.8.2/iomanip" 3 > extern template ostream& operator<<(ostream&, _Setfill<char>); > extern template ostream& operator<<(ostream&, _Setiosflags); > extern template ostream& operator<<(ostream&, _Resetiosflags); > extern template ostream& operator<<(ostream&, _Setbase); > extern template ostream& operator<<(ostream&, _Setprecision); > extern template ostream& operator<<(ostream&, _Setw); > extern template istream& operator>>(istream&, _Setfill<char>); > extern template istream& operator>>(istream&, _Setiosflags); > extern template istream& operator>>(istream&, _Resetiosflags); > extern template istream& operator>>(istream&, _Setbase); > extern template istream& operator>>(istream&, _Setprecision); > extern template istream& operator>>(istream&, _Setw); > > > extern template wostream& operator<<(wostream&, _Setfill<wchar_t>); > extern template wostream& operator<<(wostream&, _Setiosflags); > extern template wostream& operator<<(wostream&, _Resetiosflags); > extern template wostream& operator<<(wostream&, _Setbase); > extern template wostream& operator<<(wostream&, _Setprecision); > extern template wostream& operator<<(wostream&, _Setw); > extern template wistream& operator>>(wistream&, _Setfill<wchar_t>); > extern template wistream& operator>>(wistream&, _Setiosflags); > extern template wistream& operator>>(wistream&, _Resetiosflags); > extern template wistream& operator>>(wistream&, _Setbase); > extern template wistream& operator>>(wistream&, _Setprecision); > extern template wistream& operator>>(wistream&, _Setw); > > > > >} ># 55 "/usr/include/OpenEXR/ImathMatrix.h" 2 ># 63 "/usr/include/OpenEXR/ImathMatrix.h" >namespace Imath { > >enum Uninitialized {UNINITIALIZED}; > > >template <class T> class Matrix33 >{ > public: > > > > > > T x[3][3]; > > T * operator [] (int i); > const T * operator [] (int i) const; > > > > > > > Matrix33 (Uninitialized) {} > > Matrix33 (); > > > > > Matrix33 (T a); > > > > > Matrix33 (const T a[3][3]); > > > > > Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i); ># 114 "/usr/include/OpenEXR/ImathMatrix.h" > Matrix33 (const Matrix33 &v); > template <class S> explicit Matrix33 (const Matrix33<S> &v); > > const Matrix33 & operator = (const Matrix33 &v); > const Matrix33 & operator = (T a); > > > > > > > T * getValue (); > const T * getValue () const; > > template <class S> > void getValue (Matrix33<S> &v) const; > template <class S> > Matrix33 & setValue (const Matrix33<S> &v); > > template <class S> > Matrix33 & setTheMatrix (const Matrix33<S> &v); > > > > > > > void makeIdentity(); > > > > > > > bool operator == (const Matrix33 &v) const; > bool operator != (const Matrix33 &v) const; ># 169 "/usr/include/OpenEXR/ImathMatrix.h" > bool equalWithAbsError (const Matrix33<T> &v, T e) const; > bool equalWithRelError (const Matrix33<T> &v, T e) const; > > > > > > > const Matrix33 & operator += (const Matrix33 &v); > const Matrix33 & operator += (T a); > Matrix33 operator + (const Matrix33 &v) const; > > > > > > > const Matrix33 & operator -= (const Matrix33 &v); > const Matrix33 & operator -= (T a); > Matrix33 operator - (const Matrix33 &v) const; > > > > > > > Matrix33 operator - () const; > const Matrix33 & negate (); > > > > > > > const Matrix33 & operator *= (T a); > Matrix33 operator * (T a) const; > > > > > > > const Matrix33 & operator *= (const Matrix33 &v); > Matrix33 operator * (const Matrix33 &v) const; ># 227 "/usr/include/OpenEXR/ImathMatrix.h" > template <class S> > void multVecMatrix(const Vec2<S> &src, Vec2<S> &dst) const; > > template <class S> > void multDirMatrix(const Vec2<S> &src, Vec2<S> &dst) const; > > > > > > > const Matrix33 & operator /= (T a); > Matrix33 operator / (T a) const; > > > > > > > const Matrix33 & transpose (); > Matrix33 transposed () const; ># 264 "/usr/include/OpenEXR/ImathMatrix.h" > const Matrix33 & invert (bool singExc = false) > throw (Iex::MathExc); > > Matrix33<T> inverse (bool singExc = false) const > throw (Iex::MathExc); > > const Matrix33 & gjInvert (bool singExc = false) > throw (Iex::MathExc); > > Matrix33<T> gjInverse (bool singExc = false) const > throw (Iex::MathExc); > > > > > > > T minorOf (const int r, const int c) const; > > > > > > T fastMinor (const int r0, const int r1, > const int c0, const int c1) const; > > > > > > T determinant() const; > > > > > > template <class S> > const Matrix33 & setRotation (S r); > > > > > > > template <class S> > const Matrix33 & rotate (S r); > > > > > > > const Matrix33 & setScale (T s); > > > > > > > template <class S> > const Matrix33 & setScale (const Vec2<S> &s); > > > > > > > template <class S> > const Matrix33 & scale (const Vec2<S> &s); > > > > > > > template <class S> > const Matrix33 & setTranslation (const Vec2<S> &t); > > > > > > > Vec2<T> translation () const; > > > > > > > template <class S> > const Matrix33 & translate (const Vec2<S> &t); > > > > > > > template <class S> > const Matrix33 & setShear (const S &h); > > > > > > > > template <class S> > const Matrix33 & setShear (const Vec2<S> &h); > > > > > > > template <class S> > const Matrix33 & shear (const S &xy); > > > > > > > > template <class S> > const Matrix33 & shear (const Vec2<S> &h); > > > > > > > > static unsigned int dimensions() {return 3;} > > > > > > > static T baseTypeMin() {return limits<T>::min();} > static T baseTypeMax() {return limits<T>::max();} > static T baseTypeSmallest() {return limits<T>::smallest();} > static T baseTypeEpsilon() {return limits<T>::epsilon();} > > typedef T BaseType; > typedef Vec3<T> BaseVecType; > > private: > > template <typename R, typename S> > struct isSameType > { > enum {value = 0}; > }; > > template <typename R> > struct isSameType<R, R> > { > enum {value = 1}; > }; >}; > > >template <class T> class Matrix44 >{ > public: > > > > > > T x[4][4]; > > T * operator [] (int i); > const T * operator [] (int i) const; > > > > > > > Matrix44 (Uninitialized) {} > > Matrix44 (); > > > > > > Matrix44 (T a); > > > > > > Matrix44 (const T a[4][4]) ; > > > > > > Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h, > T i, T j, T k, T l, T m, T n, T o, T p); > > > > > > > Matrix44 (Matrix33<T> r, Vec3<T> t); ># 485 "/usr/include/OpenEXR/ImathMatrix.h" > Matrix44 (const Matrix44 &v); > template <class S> explicit Matrix44 (const Matrix44<S> &v); > > const Matrix44 & operator = (const Matrix44 &v); > const Matrix44 & operator = (T a); > > > > > > > T * getValue (); > const T * getValue () const; > > template <class S> > void getValue (Matrix44<S> &v) const; > template <class S> > Matrix44 & setValue (const Matrix44<S> &v); > > template <class S> > Matrix44 & setTheMatrix (const Matrix44<S> &v); > > > > > > void makeIdentity(); > > > > > > > bool operator == (const Matrix44 &v) const; > bool operator != (const Matrix44 &v) const; ># 539 "/usr/include/OpenEXR/ImathMatrix.h" > bool equalWithAbsError (const Matrix44<T> &v, T e) const; > bool equalWithRelError (const Matrix44<T> &v, T e) const; > > > > > > > const Matrix44 & operator += (const Matrix44 &v); > const Matrix44 & operator += (T a); > Matrix44 operator + (const Matrix44 &v) const; > > > > > > > const Matrix44 & operator -= (const Matrix44 &v); > const Matrix44 & operator -= (T a); > Matrix44 operator - (const Matrix44 &v) const; > > > > > > > Matrix44 operator - () const; > const Matrix44 & negate (); > > > > > > > const Matrix44 & operator *= (T a); > Matrix44 operator * (T a) const; > > > > > > > const Matrix44 & operator *= (const Matrix44 &v); > Matrix44 operator * (const Matrix44 &v) const; > > static void multiply (const Matrix44 &a, > const Matrix44 &b, > Matrix44 &c); ># 601 "/usr/include/OpenEXR/ImathMatrix.h" > template <class S> > void multVecMatrix(const Vec3<S> &src, Vec3<S> &dst) const; > > template <class S> > void multDirMatrix(const Vec3<S> &src, Vec3<S> &dst) const; > > > > > > > const Matrix44 & operator /= (T a); > Matrix44 operator / (T a) const; > > > > > > > const Matrix44 & transpose (); > Matrix44 transposed () const; ># 638 "/usr/include/OpenEXR/ImathMatrix.h" > const Matrix44 & invert (bool singExc = false) > throw (Iex::MathExc); > > Matrix44<T> inverse (bool singExc = false) const > throw (Iex::MathExc); > > const Matrix44 & gjInvert (bool singExc = false) > throw (Iex::MathExc); > > Matrix44<T> gjInverse (bool singExc = false) const > throw (Iex::MathExc); > > > > > > > T minorOf (const int r, const int c) const; > > > > > > T fastMinor (const int r0, const int r1, const int r2, > const int c0, const int c1, const int c2) const; > > > > > > T determinant() const; > > > > > > template <class S> > const Matrix44 & setEulerAngles (const Vec3<S>& r); > > > > > > > template <class S> > const Matrix44 & setAxisAngle (const Vec3<S>& ax, S ang); > > > > > > > template <class S> > const Matrix44 & rotate (const Vec3<S> &r); > > > > > > > const Matrix44 & setScale (T s); > > > > > > > template <class S> > const Matrix44 & setScale (const Vec3<S> &s); > > > > > > > template <class S> > const Matrix44 & scale (const Vec3<S> &s); > > > > > > > template <class S> > const Matrix44 & setTranslation (const Vec3<S> &t); > > > > > > > const Vec3<T> translation () const; > > > > > > > template <class S> > const Matrix44 & translate (const Vec3<S> &t); ># 747 "/usr/include/OpenEXR/ImathMatrix.h" > template <class S> > const Matrix44 & setShear (const Vec3<S> &h); ># 761 "/usr/include/OpenEXR/ImathMatrix.h" > template <class S> > const Matrix44 & setShear (const Shear6<S> &h); ># 773 "/usr/include/OpenEXR/ImathMatrix.h" > template <class S> > const Matrix44 & shear (const Vec3<S> &h); > > > > > > > static unsigned int dimensions() {return 4;} ># 795 "/usr/include/OpenEXR/ImathMatrix.h" > template <class S> > const Matrix44 & shear (const Shear6<S> &h); > > > > > > > static T baseTypeMin() {return limits<T>::min();} > static T baseTypeMax() {return limits<T>::max();} > static T baseTypeSmallest() {return limits<T>::smallest();} > static T baseTypeEpsilon() {return limits<T>::epsilon();} > > typedef T BaseType; > typedef Vec4<T> BaseVecType; > > private: > > template <typename R, typename S> > struct isSameType > { > enum {value = 0}; > }; > > template <typename R> > struct isSameType<R, R> > { > enum {value = 1}; > }; >}; > > > > > > >template <class T> >std::ostream & operator << (std::ostream & s, const Matrix33<T> &m); > >template <class T> >std::ostream & operator << (std::ostream & s, const Matrix44<T> &m); > > > > > > >template <class S, class T> >const Vec2<S> & operator *= (Vec2<S> &v, const Matrix33<T> &m); > >template <class S, class T> >Vec2<S> operator * (const Vec2<S> &v, const Matrix33<T> &m); > >template <class S, class T> >const Vec3<S> & operator *= (Vec3<S> &v, const Matrix33<T> &m); > >template <class S, class T> >Vec3<S> operator * (const Vec3<S> &v, const Matrix33<T> &m); > >template <class S, class T> >const Vec3<S> & operator *= (Vec3<S> &v, const Matrix44<T> &m); > >template <class S, class T> >Vec3<S> operator * (const Vec3<S> &v, const Matrix44<T> &m); > >template <class S, class T> >const Vec4<S> & operator *= (Vec4<S> &v, const Matrix44<T> &m); > >template <class S, class T> >Vec4<S> operator * (const Vec4<S> &v, const Matrix44<T> &m); > > > > > >typedef Matrix33 <float> M33f; >typedef Matrix33 <double> M33d; >typedef Matrix44 <float> M44f; >typedef Matrix44 <double> M44d; > > > > > > >template <class T> >inline T * >Matrix33<T>::operator [] (int i) >{ > return x[i]; >} > >template <class T> >inline const T * >Matrix33<T>::operator [] (int i) const >{ > return x[i]; >} > >template <class T> >inline >Matrix33<T>::Matrix33 () >{ > memset (x, 0, sizeof (x)); > x[0][0] = 1; > x[1][1] = 1; > x[2][2] = 1; >} > >template <class T> >inline >Matrix33<T>::Matrix33 (T a) >{ > x[0][0] = a; > x[0][1] = a; > x[0][2] = a; > x[1][0] = a; > x[1][1] = a; > x[1][2] = a; > x[2][0] = a; > x[2][1] = a; > x[2][2] = a; >} > >template <class T> >inline >Matrix33<T>::Matrix33 (const T a[3][3]) >{ > memcpy (x, a, sizeof (x)); >} > >template <class T> >inline >Matrix33<T>::Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i) >{ > x[0][0] = a; > x[0][1] = b; > x[0][2] = c; > x[1][0] = d; > x[1][1] = e; > x[1][2] = f; > x[2][0] = g; > x[2][1] = h; > x[2][2] = i; >} > >template <class T> >inline >Matrix33<T>::Matrix33 (const Matrix33 &v) >{ > memcpy (x, v.x, sizeof (x)); >} > >template <class T> >template <class S> >inline >Matrix33<T>::Matrix33 (const Matrix33<S> &v) >{ > x[0][0] = T (v.x[0][0]); > x[0][1] = T (v.x[0][1]); > x[0][2] = T (v.x[0][2]); > x[1][0] = T (v.x[1][0]); > x[1][1] = T (v.x[1][1]); > x[1][2] = T (v.x[1][2]); > x[2][0] = T (v.x[2][0]); > x[2][1] = T (v.x[2][1]); > x[2][2] = T (v.x[2][2]); >} > >template <class T> >inline const Matrix33<T> & >Matrix33<T>::operator = (const Matrix33 &v) >{ > memcpy (x, v.x, sizeof (x)); > return *this; >} > >template <class T> >inline const Matrix33<T> & >Matrix33<T>::operator = (T a) >{ > x[0][0] = a; > x[0][1] = a; > x[0][2] = a; > x[1][0] = a; > x[1][1] = a; > x[1][2] = a; > x[2][0] = a; > x[2][1] = a; > x[2][2] = a; > return *this; >} > >template <class T> >inline T * >Matrix33<T>::getValue () >{ > return (T *) &x[0][0]; >} > >template <class T> >inline const T * >Matrix33<T>::getValue () const >{ > return (const T *) &x[0][0]; >} > >template <class T> >template <class S> >inline void >Matrix33<T>::getValue (Matrix33<S> &v) const >{ > if (isSameType<S,T>::value) > { > memcpy (v.x, x, sizeof (x)); > } > else > { > v.x[0][0] = x[0][0]; > v.x[0][1] = x[0][1]; > v.x[0][2] = x[0][2]; > v.x[1][0] = x[1][0]; > v.x[1][1] = x[1][1]; > v.x[1][2] = x[1][2]; > v.x[2][0] = x[2][0]; > v.x[2][1] = x[2][1]; > v.x[2][2] = x[2][2]; > } >} > >template <class T> >template <class S> >inline Matrix33<T> & >Matrix33<T>::setValue (const Matrix33<S> &v) >{ > if (isSameType<S,T>::value) > { > memcpy (x, v.x, sizeof (x)); > } > else > { > x[0][0] = v.x[0][0]; > x[0][1] = v.x[0][1]; > x[0][2] = v.x[0][2]; > x[1][0] = v.x[1][0]; > x[1][1] = v.x[1][1]; > x[1][2] = v.x[1][2]; > x[2][0] = v.x[2][0]; > x[2][1] = v.x[2][1]; > x[2][2] = v.x[2][2]; > } > > return *this; >} > >template <class T> >template <class S> >inline Matrix33<T> & >Matrix33<T>::setTheMatrix (const Matrix33<S> &v) >{ > if (isSameType<S,T>::value) > { > memcpy (x, v.x, sizeof (x)); > } > else > { > x[0][0] = v.x[0][0]; > x[0][1] = v.x[0][1]; > x[0][2] = v.x[0][2]; > x[1][0] = v.x[1][0]; > x[1][1] = v.x[1][1]; > x[1][2] = v.x[1][2]; > x[2][0] = v.x[2][0]; > x[2][1] = v.x[2][1]; > x[2][2] = v.x[2][2]; > } > > return *this; >} > >template <class T> >inline void >Matrix33<T>::makeIdentity() >{ > memset (x, 0, sizeof (x)); > x[0][0] = 1; > x[1][1] = 1; > x[2][2] = 1; >} > >template <class T> >bool >Matrix33<T>::operator == (const Matrix33 &v) const >{ > return x[0][0] == v.x[0][0] && > x[0][1] == v.x[0][1] && > x[0][2] == v.x[0][2] && > x[1][0] == v.x[1][0] && > x[1][1] == v.x[1][1] && > x[1][2] == v.x[1][2] && > x[2][0] == v.x[2][0] && > x[2][1] == v.x[2][1] && > x[2][2] == v.x[2][2]; >} > >template <class T> >bool >Matrix33<T>::operator != (const Matrix33 &v) const >{ > return x[0][0] != v.x[0][0] || > x[0][1] != v.x[0][1] || > x[0][2] != v.x[0][2] || > x[1][0] != v.x[1][0] || > x[1][1] != v.x[1][1] || > x[1][2] != v.x[1][2] || > x[2][0] != v.x[2][0] || > x[2][1] != v.x[2][1] || > x[2][2] != v.x[2][2]; >} > >template <class T> >bool >Matrix33<T>::equalWithAbsError (const Matrix33<T> &m, T e) const >{ > for (int i = 0; i < 3; i++) > for (int j = 0; j < 3; j++) > if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e)) > return false; > > return true; >} > >template <class T> >bool >Matrix33<T>::equalWithRelError (const Matrix33<T> &m, T e) const >{ > for (int i = 0; i < 3; i++) > for (int j = 0; j < 3; j++) > if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e)) > return false; > > return true; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator += (const Matrix33<T> &v) >{ > x[0][0] += v.x[0][0]; > x[0][1] += v.x[0][1]; > x[0][2] += v.x[0][2]; > x[1][0] += v.x[1][0]; > x[1][1] += v.x[1][1]; > x[1][2] += v.x[1][2]; > x[2][0] += v.x[2][0]; > x[2][1] += v.x[2][1]; > x[2][2] += v.x[2][2]; > > return *this; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator += (T a) >{ > x[0][0] += a; > x[0][1] += a; > x[0][2] += a; > x[1][0] += a; > x[1][1] += a; > x[1][2] += a; > x[2][0] += a; > x[2][1] += a; > x[2][2] += a; > > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::operator + (const Matrix33<T> &v) const >{ > return Matrix33 (x[0][0] + v.x[0][0], > x[0][1] + v.x[0][1], > x[0][2] + v.x[0][2], > x[1][0] + v.x[1][0], > x[1][1] + v.x[1][1], > x[1][2] + v.x[1][2], > x[2][0] + v.x[2][0], > x[2][1] + v.x[2][1], > x[2][2] + v.x[2][2]); >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator -= (const Matrix33<T> &v) >{ > x[0][0] -= v.x[0][0]; > x[0][1] -= v.x[0][1]; > x[0][2] -= v.x[0][2]; > x[1][0] -= v.x[1][0]; > x[1][1] -= v.x[1][1]; > x[1][2] -= v.x[1][2]; > x[2][0] -= v.x[2][0]; > x[2][1] -= v.x[2][1]; > x[2][2] -= v.x[2][2]; > > return *this; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator -= (T a) >{ > x[0][0] -= a; > x[0][1] -= a; > x[0][2] -= a; > x[1][0] -= a; > x[1][1] -= a; > x[1][2] -= a; > x[2][0] -= a; > x[2][1] -= a; > x[2][2] -= a; > > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::operator - (const Matrix33<T> &v) const >{ > return Matrix33 (x[0][0] - v.x[0][0], > x[0][1] - v.x[0][1], > x[0][2] - v.x[0][2], > x[1][0] - v.x[1][0], > x[1][1] - v.x[1][1], > x[1][2] - v.x[1][2], > x[2][0] - v.x[2][0], > x[2][1] - v.x[2][1], > x[2][2] - v.x[2][2]); >} > >template <class T> >Matrix33<T> >Matrix33<T>::operator - () const >{ > return Matrix33 (-x[0][0], > -x[0][1], > -x[0][2], > -x[1][0], > -x[1][1], > -x[1][2], > -x[2][0], > -x[2][1], > -x[2][2]); >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::negate () >{ > x[0][0] = -x[0][0]; > x[0][1] = -x[0][1]; > x[0][2] = -x[0][2]; > x[1][0] = -x[1][0]; > x[1][1] = -x[1][1]; > x[1][2] = -x[1][2]; > x[2][0] = -x[2][0]; > x[2][1] = -x[2][1]; > x[2][2] = -x[2][2]; > > return *this; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator *= (T a) >{ > x[0][0] *= a; > x[0][1] *= a; > x[0][2] *= a; > x[1][0] *= a; > x[1][1] *= a; > x[1][2] *= a; > x[2][0] *= a; > x[2][1] *= a; > x[2][2] *= a; > > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::operator * (T a) const >{ > return Matrix33 (x[0][0] * a, > x[0][1] * a, > x[0][2] * a, > x[1][0] * a, > x[1][1] * a, > x[1][2] * a, > x[2][0] * a, > x[2][1] * a, > x[2][2] * a); >} > >template <class T> >inline Matrix33<T> >operator * (T a, const Matrix33<T> &v) >{ > return v * a; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator *= (const Matrix33<T> &v) >{ > Matrix33 tmp (T (0)); > > for (int i = 0; i < 3; i++) > for (int j = 0; j < 3; j++) > for (int k = 0; k < 3; k++) > tmp.x[i][j] += x[i][k] * v.x[k][j]; > > *this = tmp; > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::operator * (const Matrix33<T> &v) const >{ > Matrix33 tmp (T (0)); > > for (int i = 0; i < 3; i++) > for (int j = 0; j < 3; j++) > for (int k = 0; k < 3; k++) > tmp.x[i][j] += x[i][k] * v.x[k][j]; > > return tmp; >} > >template <class T> >template <class S> >void >Matrix33<T>::multVecMatrix(const Vec2<S> &src, Vec2<S> &dst) const >{ > S a, b, w; > > a = src[0] * x[0][0] + src[1] * x[1][0] + x[2][0]; > b = src[0] * x[0][1] + src[1] * x[1][1] + x[2][1]; > w = src[0] * x[0][2] + src[1] * x[1][2] + x[2][2]; > > dst.x = a / w; > dst.y = b / w; >} > >template <class T> >template <class S> >void >Matrix33<T>::multDirMatrix(const Vec2<S> &src, Vec2<S> &dst) const >{ > S a, b; > > a = src[0] * x[0][0] + src[1] * x[1][0]; > b = src[0] * x[0][1] + src[1] * x[1][1]; > > dst.x = a; > dst.y = b; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::operator /= (T a) >{ > x[0][0] /= a; > x[0][1] /= a; > x[0][2] /= a; > x[1][0] /= a; > x[1][1] /= a; > x[1][2] /= a; > x[2][0] /= a; > x[2][1] /= a; > x[2][2] /= a; > > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::operator / (T a) const >{ > return Matrix33 (x[0][0] / a, > x[0][1] / a, > x[0][2] / a, > x[1][0] / a, > x[1][1] / a, > x[1][2] / a, > x[2][0] / a, > x[2][1] / a, > x[2][2] / a); >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::transpose () >{ > Matrix33 tmp (x[0][0], > x[1][0], > x[2][0], > x[0][1], > x[1][1], > x[2][1], > x[0][2], > x[1][2], > x[2][2]); > *this = tmp; > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::transposed () const >{ > return Matrix33 (x[0][0], > x[1][0], > x[2][0], > x[0][1], > x[1][1], > x[2][1], > x[0][2], > x[1][2], > x[2][2]); >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::gjInvert (bool singExc) throw (Iex::MathExc) >{ > *this = gjInverse (singExc); > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::gjInverse (bool singExc) const throw (Iex::MathExc) >{ > int i, j, k; > Matrix33 s; > Matrix33 t (*this); > > > > for (i = 0; i < 2 ; i++) > { > int pivot = i; > > T pivotsize = t[i][i]; > > if (pivotsize < 0) > pivotsize = -pivotsize; > > for (j = i + 1; j < 3; j++) > { > T tmp = t[j][i]; > > if (tmp < 0) > tmp = -tmp; > > if (tmp > pivotsize) > { > pivot = j; > pivotsize = tmp; > } > } > > if (pivotsize == 0) > { > if (singExc) > throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); > > return Matrix33(); > } > > if (pivot != i) > { > for (j = 0; j < 3; j++) > { > T tmp; > > tmp = t[i][j]; > t[i][j] = t[pivot][j]; > t[pivot][j] = tmp; > > tmp = s[i][j]; > s[i][j] = s[pivot][j]; > s[pivot][j] = tmp; > } > } > > for (j = i + 1; j < 3; j++) > { > T f = t[j][i] / t[i][i]; > > for (k = 0; k < 3; k++) > { > t[j][k] -= f * t[i][k]; > s[j][k] -= f * s[i][k]; > } > } > } > > > > for (i = 2; i >= 0; --i) > { > T f; > > if ((f = t[i][i]) == 0) > { > if (singExc) > throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); > > return Matrix33(); > } > > for (j = 0; j < 3; j++) > { > t[i][j] /= f; > s[i][j] /= f; > } > > for (j = 0; j < i; j++) > { > f = t[j][i]; > > for (k = 0; k < 3; k++) > { > t[j][k] -= f * t[i][k]; > s[j][k] -= f * s[i][k]; > } > } > } > > return s; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::invert (bool singExc) throw (Iex::MathExc) >{ > *this = inverse (singExc); > return *this; >} > >template <class T> >Matrix33<T> >Matrix33<T>::inverse (bool singExc) const throw (Iex::MathExc) >{ > if (x[0][2] != 0 || x[1][2] != 0 || x[2][2] != 1) > { > Matrix33 s (x[1][1] * x[2][2] - x[2][1] * x[1][2], > x[2][1] * x[0][2] - x[0][1] * x[2][2], > x[0][1] * x[1][2] - x[1][1] * x[0][2], > > x[2][0] * x[1][2] - x[1][0] * x[2][2], > x[0][0] * x[2][2] - x[2][0] * x[0][2], > x[1][0] * x[0][2] - x[0][0] * x[1][2], > > x[1][0] * x[2][1] - x[2][0] * x[1][1], > x[2][0] * x[0][1] - x[0][0] * x[2][1], > x[0][0] * x[1][1] - x[1][0] * x[0][1]); > > T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; > > if (Imath::abs (r) >= 1) > { > for (int i = 0; i < 3; ++i) > { > for (int j = 0; j < 3; ++j) > { > s[i][j] /= r; > } > } > } > else > { > T mr = Imath::abs (r) / limits<T>::smallest(); > > for (int i = 0; i < 3; ++i) > { > for (int j = 0; j < 3; ++j) > { > if (mr > Imath::abs (s[i][j])) > { > s[i][j] /= r; > } > else > { > if (singExc) > throw SingMatrixExc ("Cannot invert " > "singular matrix."); > return Matrix33(); > } > } > } > } > > return s; > } > else > { > Matrix33 s ( x[1][1], > -x[0][1], > 0, > > -x[1][0], > x[0][0], > 0, > > 0, > 0, > 1); > > T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; > > if (Imath::abs (r) >= 1) > { > for (int i = 0; i < 2; ++i) > { > for (int j = 0; j < 2; ++j) > { > s[i][j] /= r; > } > } > } > else > { > T mr = Imath::abs (r) / limits<T>::smallest(); > > for (int i = 0; i < 2; ++i) > { > for (int j = 0; j < 2; ++j) > { > if (mr > Imath::abs (s[i][j])) > { > s[i][j] /= r; > } > else > { > if (singExc) > throw SingMatrixExc ("Cannot invert " > "singular matrix."); > return Matrix33(); > } > } > } > } > > s[2][0] = -x[2][0] * s[0][0] - x[2][1] * s[1][0]; > s[2][1] = -x[2][0] * s[0][1] - x[2][1] * s[1][1]; > > return s; > } >} > >template <class T> >inline T >Matrix33<T>::minorOf (const int r, const int c) const >{ > int r0 = 0 + (r < 1 ? 1 : 0); > int r1 = 1 + (r < 2 ? 1 : 0); > int c0 = 0 + (c < 1 ? 1 : 0); > int c1 = 1 + (c < 2 ? 1 : 0); > > return x[r0][c0]*x[r1][c1] - x[r1][c0]*x[r0][c1]; >} > >template <class T> >inline T >Matrix33<T>::fastMinor( const int r0, const int r1, > const int c0, const int c1) const >{ > return x[r0][c0]*x[r1][c1] - x[r0][c1]*x[r1][c0]; >} > >template <class T> >inline T >Matrix33<T>::determinant () const >{ > return x[0][0]*(x[1][1]*x[2][2] - x[1][2]*x[2][1]) + > x[0][1]*(x[1][2]*x[2][0] - x[1][0]*x[2][2]) + > x[0][2]*(x[1][0]*x[2][1] - x[1][1]*x[2][0]); >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::setRotation (S r) >{ > S cos_r, sin_r; > > cos_r = Math<T>::cos (r); > sin_r = Math<T>::sin (r); > > x[0][0] = cos_r; > x[0][1] = sin_r; > x[0][2] = 0; > > x[1][0] = -sin_r; > x[1][1] = cos_r; > x[1][2] = 0; > > x[2][0] = 0; > x[2][1] = 0; > x[2][2] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::rotate (S r) >{ > *this *= Matrix33<T>().setRotation (r); > return *this; >} > >template <class T> >const Matrix33<T> & >Matrix33<T>::setScale (T s) >{ > memset (x, 0, sizeof (x)); > x[0][0] = s; > x[1][1] = s; > x[2][2] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::setScale (const Vec2<S> &s) >{ > memset (x, 0, sizeof (x)); > x[0][0] = s[0]; > x[1][1] = s[1]; > x[2][2] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::scale (const Vec2<S> &s) >{ > x[0][0] *= s[0]; > x[0][1] *= s[0]; > x[0][2] *= s[0]; > > x[1][0] *= s[1]; > x[1][1] *= s[1]; > x[1][2] *= s[1]; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::setTranslation (const Vec2<S> &t) >{ > x[0][0] = 1; > x[0][1] = 0; > x[0][2] = 0; > > x[1][0] = 0; > x[1][1] = 1; > x[1][2] = 0; > > x[2][0] = t[0]; > x[2][1] = t[1]; > x[2][2] = 1; > > return *this; >} > >template <class T> >inline Vec2<T> >Matrix33<T>::translation () const >{ > return Vec2<T> (x[2][0], x[2][1]); >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::translate (const Vec2<S> &t) >{ > x[2][0] += t[0] * x[0][0] + t[1] * x[1][0]; > x[2][1] += t[0] * x[0][1] + t[1] * x[1][1]; > x[2][2] += t[0] * x[0][2] + t[1] * x[1][2]; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::setShear (const S &xy) >{ > x[0][0] = 1; > x[0][1] = 0; > x[0][2] = 0; > > x[1][0] = xy; > x[1][1] = 1; > x[1][2] = 0; > > x[2][0] = 0; > x[2][1] = 0; > x[2][2] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::setShear (const Vec2<S> &h) >{ > x[0][0] = 1; > x[0][1] = h[1]; > x[0][2] = 0; > > x[1][0] = h[0]; > x[1][1] = 1; > x[1][2] = 0; > > x[2][0] = 0; > x[2][1] = 0; > x[2][2] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::shear (const S &xy) >{ > > > > > > > x[1][0] += xy * x[0][0]; > x[1][1] += xy * x[0][1]; > x[1][2] += xy * x[0][2]; > > return *this; >} > >template <class T> >template <class S> >const Matrix33<T> & >Matrix33<T>::shear (const Vec2<S> &h) >{ > Matrix33<T> P (*this); > > x[0][0] = P[0][0] + h[1] * P[1][0]; > x[0][1] = P[0][1] + h[1] * P[1][1]; > x[0][2] = P[0][2] + h[1] * P[1][2]; > > x[1][0] = P[1][0] + h[0] * P[0][0]; > x[1][1] = P[1][1] + h[0] * P[0][1]; > x[1][2] = P[1][2] + h[0] * P[0][2]; > > return *this; >} > > > > > > >template <class T> >inline T * >Matrix44<T>::operator [] (int i) >{ > return x[i]; >} > >template <class T> >inline const T * >Matrix44<T>::operator [] (int i) const >{ > return x[i]; >} > >template <class T> >inline >Matrix44<T>::Matrix44 () >{ > memset (x, 0, sizeof (x)); > x[0][0] = 1; > x[1][1] = 1; > x[2][2] = 1; > x[3][3] = 1; >} > >template <class T> >inline >Matrix44<T>::Matrix44 (T a) >{ > x[0][0] = a; > x[0][1] = a; > x[0][2] = a; > x[0][3] = a; > x[1][0] = a; > x[1][1] = a; > x[1][2] = a; > x[1][3] = a; > x[2][0] = a; > x[2][1] = a; > x[2][2] = a; > x[2][3] = a; > x[3][0] = a; > x[3][1] = a; > x[3][2] = a; > x[3][3] = a; >} > >template <class T> >inline >Matrix44<T>::Matrix44 (const T a[4][4]) >{ > memcpy (x, a, sizeof (x)); >} > >template <class T> >inline >Matrix44<T>::Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h, > T i, T j, T k, T l, T m, T n, T o, T p) >{ > x[0][0] = a; > x[0][1] = b; > x[0][2] = c; > x[0][3] = d; > x[1][0] = e; > x[1][1] = f; > x[1][2] = g; > x[1][3] = h; > x[2][0] = i; > x[2][1] = j; > x[2][2] = k; > x[2][3] = l; > x[3][0] = m; > x[3][1] = n; > x[3][2] = o; > x[3][3] = p; >} > > >template <class T> >inline >Matrix44<T>::Matrix44 (Matrix33<T> r, Vec3<T> t) >{ > x[0][0] = r[0][0]; > x[0][1] = r[0][1]; > x[0][2] = r[0][2]; > x[0][3] = 0; > x[1][0] = r[1][0]; > x[1][1] = r[1][1]; > x[1][2] = r[1][2]; > x[1][3] = 0; > x[2][0] = r[2][0]; > x[2][1] = r[2][1]; > x[2][2] = r[2][2]; > x[2][3] = 0; > x[3][0] = t[0]; > x[3][1] = t[1]; > x[3][2] = t[2]; > x[3][3] = 1; >} > >template <class T> >inline >Matrix44<T>::Matrix44 (const Matrix44 &v) >{ > x[0][0] = v.x[0][0]; > x[0][1] = v.x[0][1]; > x[0][2] = v.x[0][2]; > x[0][3] = v.x[0][3]; > x[1][0] = v.x[1][0]; > x[1][1] = v.x[1][1]; > x[1][2] = v.x[1][2]; > x[1][3] = v.x[1][3]; > x[2][0] = v.x[2][0]; > x[2][1] = v.x[2][1]; > x[2][2] = v.x[2][2]; > x[2][3] = v.x[2][3]; > x[3][0] = v.x[3][0]; > x[3][1] = v.x[3][1]; > x[3][2] = v.x[3][2]; > x[3][3] = v.x[3][3]; >} > >template <class T> >template <class S> >inline >Matrix44<T>::Matrix44 (const Matrix44<S> &v) >{ > x[0][0] = T (v.x[0][0]); > x[0][1] = T (v.x[0][1]); > x[0][2] = T (v.x[0][2]); > x[0][3] = T (v.x[0][3]); > x[1][0] = T (v.x[1][0]); > x[1][1] = T (v.x[1][1]); > x[1][2] = T (v.x[1][2]); > x[1][3] = T (v.x[1][3]); > x[2][0] = T (v.x[2][0]); > x[2][1] = T (v.x[2][1]); > x[2][2] = T (v.x[2][2]); > x[2][3] = T (v.x[2][3]); > x[3][0] = T (v.x[3][0]); > x[3][1] = T (v.x[3][1]); > x[3][2] = T (v.x[3][2]); > x[3][3] = T (v.x[3][3]); >} > >template <class T> >inline const Matrix44<T> & >Matrix44<T>::operator = (const Matrix44 &v) >{ > x[0][0] = v.x[0][0]; > x[0][1] = v.x[0][1]; > x[0][2] = v.x[0][2]; > x[0][3] = v.x[0][3]; > x[1][0] = v.x[1][0]; > x[1][1] = v.x[1][1]; > x[1][2] = v.x[1][2]; > x[1][3] = v.x[1][3]; > x[2][0] = v.x[2][0]; > x[2][1] = v.x[2][1]; > x[2][2] = v.x[2][2]; > x[2][3] = v.x[2][3]; > x[3][0] = v.x[3][0]; > x[3][1] = v.x[3][1]; > x[3][2] = v.x[3][2]; > x[3][3] = v.x[3][3]; > return *this; >} > >template <class T> >inline const Matrix44<T> & >Matrix44<T>::operator = (T a) >{ > x[0][0] = a; > x[0][1] = a; > x[0][2] = a; > x[0][3] = a; > x[1][0] = a; > x[1][1] = a; > x[1][2] = a; > x[1][3] = a; > x[2][0] = a; > x[2][1] = a; > x[2][2] = a; > x[2][3] = a; > x[3][0] = a; > x[3][1] = a; > x[3][2] = a; > x[3][3] = a; > return *this; >} > >template <class T> >inline T * >Matrix44<T>::getValue () >{ > return (T *) &x[0][0]; >} > >template <class T> >inline const T * >Matrix44<T>::getValue () const >{ > return (const T *) &x[0][0]; >} > >template <class T> >template <class S> >inline void >Matrix44<T>::getValue (Matrix44<S> &v) const >{ > if (isSameType<S,T>::value) > { > memcpy (v.x, x, sizeof (x)); > } > else > { > v.x[0][0] = x[0][0]; > v.x[0][1] = x[0][1]; > v.x[0][2] = x[0][2]; > v.x[0][3] = x[0][3]; > v.x[1][0] = x[1][0]; > v.x[1][1] = x[1][1]; > v.x[1][2] = x[1][2]; > v.x[1][3] = x[1][3]; > v.x[2][0] = x[2][0]; > v.x[2][1] = x[2][1]; > v.x[2][2] = x[2][2]; > v.x[2][3] = x[2][3]; > v.x[3][0] = x[3][0]; > v.x[3][1] = x[3][1]; > v.x[3][2] = x[3][2]; > v.x[3][3] = x[3][3]; > } >} > >template <class T> >template <class S> >inline Matrix44<T> & >Matrix44<T>::setValue (const Matrix44<S> &v) >{ > if (isSameType<S,T>::value) > { > memcpy (x, v.x, sizeof (x)); > } > else > { > x[0][0] = v.x[0][0]; > x[0][1] = v.x[0][1]; > x[0][2] = v.x[0][2]; > x[0][3] = v.x[0][3]; > x[1][0] = v.x[1][0]; > x[1][1] = v.x[1][1]; > x[1][2] = v.x[1][2]; > x[1][3] = v.x[1][3]; > x[2][0] = v.x[2][0]; > x[2][1] = v.x[2][1]; > x[2][2] = v.x[2][2]; > x[2][3] = v.x[2][3]; > x[3][0] = v.x[3][0]; > x[3][1] = v.x[3][1]; > x[3][2] = v.x[3][2]; > x[3][3] = v.x[3][3]; > } > > return *this; >} > >template <class T> >template <class S> >inline Matrix44<T> & >Matrix44<T>::setTheMatrix (const Matrix44<S> &v) >{ > if (isSameType<S,T>::value) > { > memcpy (x, v.x, sizeof (x)); > } > else > { > x[0][0] = v.x[0][0]; > x[0][1] = v.x[0][1]; > x[0][2] = v.x[0][2]; > x[0][3] = v.x[0][3]; > x[1][0] = v.x[1][0]; > x[1][1] = v.x[1][1]; > x[1][2] = v.x[1][2]; > x[1][3] = v.x[1][3]; > x[2][0] = v.x[2][0]; > x[2][1] = v.x[2][1]; > x[2][2] = v.x[2][2]; > x[2][3] = v.x[2][3]; > x[3][0] = v.x[3][0]; > x[3][1] = v.x[3][1]; > x[3][2] = v.x[3][2]; > x[3][3] = v.x[3][3]; > } > > return *this; >} > >template <class T> >inline void >Matrix44<T>::makeIdentity() >{ > memset (x, 0, sizeof (x)); > x[0][0] = 1; > x[1][1] = 1; > x[2][2] = 1; > x[3][3] = 1; >} > >template <class T> >bool >Matrix44<T>::operator == (const Matrix44 &v) const >{ > return x[0][0] == v.x[0][0] && > x[0][1] == v.x[0][1] && > x[0][2] == v.x[0][2] && > x[0][3] == v.x[0][3] && > x[1][0] == v.x[1][0] && > x[1][1] == v.x[1][1] && > x[1][2] == v.x[1][2] && > x[1][3] == v.x[1][3] && > x[2][0] == v.x[2][0] && > x[2][1] == v.x[2][1] && > x[2][2] == v.x[2][2] && > x[2][3] == v.x[2][3] && > x[3][0] == v.x[3][0] && > x[3][1] == v.x[3][1] && > x[3][2] == v.x[3][2] && > x[3][3] == v.x[3][3]; >} > >template <class T> >bool >Matrix44<T>::operator != (const Matrix44 &v) const >{ > return x[0][0] != v.x[0][0] || > x[0][1] != v.x[0][1] || > x[0][2] != v.x[0][2] || > x[0][3] != v.x[0][3] || > x[1][0] != v.x[1][0] || > x[1][1] != v.x[1][1] || > x[1][2] != v.x[1][2] || > x[1][3] != v.x[1][3] || > x[2][0] != v.x[2][0] || > x[2][1] != v.x[2][1] || > x[2][2] != v.x[2][2] || > x[2][3] != v.x[2][3] || > x[3][0] != v.x[3][0] || > x[3][1] != v.x[3][1] || > x[3][2] != v.x[3][2] || > x[3][3] != v.x[3][3]; >} > >template <class T> >bool >Matrix44<T>::equalWithAbsError (const Matrix44<T> &m, T e) const >{ > for (int i = 0; i < 4; i++) > for (int j = 0; j < 4; j++) > if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e)) > return false; > > return true; >} > >template <class T> >bool >Matrix44<T>::equalWithRelError (const Matrix44<T> &m, T e) const >{ > for (int i = 0; i < 4; i++) > for (int j = 0; j < 4; j++) > if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e)) > return false; > > return true; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::operator += (const Matrix44<T> &v) >{ > x[0][0] += v.x[0][0]; > x[0][1] += v.x[0][1]; > x[0][2] += v.x[0][2]; > x[0][3] += v.x[0][3]; > x[1][0] += v.x[1][0]; > x[1][1] += v.x[1][1]; > x[1][2] += v.x[1][2]; > x[1][3] += v.x[1][3]; > x[2][0] += v.x[2][0]; > x[2][1] += v.x[2][1]; > x[2][2] += v.x[2][2]; > x[2][3] += v.x[2][3]; > x[3][0] += v.x[3][0]; > x[3][1] += v.x[3][1]; > x[3][2] += v.x[3][2]; > x[3][3] += v.x[3][3]; > > return *this; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::operator += (T a) >{ > x[0][0] += a; > x[0][1] += a; > x[0][2] += a; > x[0][3] += a; > x[1][0] += a; > x[1][1] += a; > x[1][2] += a; > x[1][3] += a; > x[2][0] += a; > x[2][1] += a; > x[2][2] += a; > x[2][3] += a; > x[3][0] += a; > x[3][1] += a; > x[3][2] += a; > x[3][3] += a; > > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::operator + (const Matrix44<T> &v) const >{ > return Matrix44 (x[0][0] + v.x[0][0], > x[0][1] + v.x[0][1], > x[0][2] + v.x[0][2], > x[0][3] + v.x[0][3], > x[1][0] + v.x[1][0], > x[1][1] + v.x[1][1], > x[1][2] + v.x[1][2], > x[1][3] + v.x[1][3], > x[2][0] + v.x[2][0], > x[2][1] + v.x[2][1], > x[2][2] + v.x[2][2], > x[2][3] + v.x[2][3], > x[3][0] + v.x[3][0], > x[3][1] + v.x[3][1], > x[3][2] + v.x[3][2], > x[3][3] + v.x[3][3]); >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::operator -= (const Matrix44<T> &v) >{ > x[0][0] -= v.x[0][0]; > x[0][1] -= v.x[0][1]; > x[0][2] -= v.x[0][2]; > x[0][3] -= v.x[0][3]; > x[1][0] -= v.x[1][0]; > x[1][1] -= v.x[1][1]; > x[1][2] -= v.x[1][2]; > x[1][3] -= v.x[1][3]; > x[2][0] -= v.x[2][0]; > x[2][1] -= v.x[2][1]; > x[2][2] -= v.x[2][2]; > x[2][3] -= v.x[2][3]; > x[3][0] -= v.x[3][0]; > x[3][1] -= v.x[3][1]; > x[3][2] -= v.x[3][2]; > x[3][3] -= v.x[3][3]; > > return *this; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::operator -= (T a) >{ > x[0][0] -= a; > x[0][1] -= a; > x[0][2] -= a; > x[0][3] -= a; > x[1][0] -= a; > x[1][1] -= a; > x[1][2] -= a; > x[1][3] -= a; > x[2][0] -= a; > x[2][1] -= a; > x[2][2] -= a; > x[2][3] -= a; > x[3][0] -= a; > x[3][1] -= a; > x[3][2] -= a; > x[3][3] -= a; > > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::operator - (const Matrix44<T> &v) const >{ > return Matrix44 (x[0][0] - v.x[0][0], > x[0][1] - v.x[0][1], > x[0][2] - v.x[0][2], > x[0][3] - v.x[0][3], > x[1][0] - v.x[1][0], > x[1][1] - v.x[1][1], > x[1][2] - v.x[1][2], > x[1][3] - v.x[1][3], > x[2][0] - v.x[2][0], > x[2][1] - v.x[2][1], > x[2][2] - v.x[2][2], > x[2][3] - v.x[2][3], > x[3][0] - v.x[3][0], > x[3][1] - v.x[3][1], > x[3][2] - v.x[3][2], > x[3][3] - v.x[3][3]); >} > >template <class T> >Matrix44<T> >Matrix44<T>::operator - () const >{ > return Matrix44 (-x[0][0], > -x[0][1], > -x[0][2], > -x[0][3], > -x[1][0], > -x[1][1], > -x[1][2], > -x[1][3], > -x[2][0], > -x[2][1], > -x[2][2], > -x[2][3], > -x[3][0], > -x[3][1], > -x[3][2], > -x[3][3]); >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::negate () >{ > x[0][0] = -x[0][0]; > x[0][1] = -x[0][1]; > x[0][2] = -x[0][2]; > x[0][3] = -x[0][3]; > x[1][0] = -x[1][0]; > x[1][1] = -x[1][1]; > x[1][2] = -x[1][2]; > x[1][3] = -x[1][3]; > x[2][0] = -x[2][0]; > x[2][1] = -x[2][1]; > x[2][2] = -x[2][2]; > x[2][3] = -x[2][3]; > x[3][0] = -x[3][0]; > x[3][1] = -x[3][1]; > x[3][2] = -x[3][2]; > x[3][3] = -x[3][3]; > > return *this; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::operator *= (T a) >{ > x[0][0] *= a; > x[0][1] *= a; > x[0][2] *= a; > x[0][3] *= a; > x[1][0] *= a; > x[1][1] *= a; > x[1][2] *= a; > x[1][3] *= a; > x[2][0] *= a; > x[2][1] *= a; > x[2][2] *= a; > x[2][3] *= a; > x[3][0] *= a; > x[3][1] *= a; > x[3][2] *= a; > x[3][3] *= a; > > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::operator * (T a) const >{ > return Matrix44 (x[0][0] * a, > x[0][1] * a, > x[0][2] * a, > x[0][3] * a, > x[1][0] * a, > x[1][1] * a, > x[1][2] * a, > x[1][3] * a, > x[2][0] * a, > x[2][1] * a, > x[2][2] * a, > x[2][3] * a, > x[3][0] * a, > x[3][1] * a, > x[3][2] * a, > x[3][3] * a); >} > >template <class T> >inline Matrix44<T> >operator * (T a, const Matrix44<T> &v) >{ > return v * a; >} > >template <class T> >inline const Matrix44<T> & >Matrix44<T>::operator *= (const Matrix44<T> &v) >{ > Matrix44 tmp (T (0)); > > multiply (*this, v, tmp); > *this = tmp; > return *this; >} > >template <class T> >inline Matrix44<T> >Matrix44<T>::operator * (const Matrix44<T> &v) const >{ > Matrix44 tmp (T (0)); > > multiply (*this, v, tmp); > return tmp; >} > >template <class T> >void >Matrix44<T>::multiply (const Matrix44<T> &a, > const Matrix44<T> &b, > Matrix44<T> &c) >{ > register const T * __restrict ap = &a.x[0][0]; > register const T * __restrict bp = &b.x[0][0]; > register T * __restrict cp = &c.x[0][0]; > > register T a0, a1, a2, a3; > > a0 = ap[0]; > a1 = ap[1]; > a2 = ap[2]; > a3 = ap[3]; > > cp[0] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; > cp[1] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; > cp[2] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; > cp[3] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; > > a0 = ap[4]; > a1 = ap[5]; > a2 = ap[6]; > a3 = ap[7]; > > cp[4] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; > cp[5] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; > cp[6] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; > cp[7] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; > > a0 = ap[8]; > a1 = ap[9]; > a2 = ap[10]; > a3 = ap[11]; > > cp[8] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; > cp[9] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; > cp[10] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; > cp[11] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; > > a0 = ap[12]; > a1 = ap[13]; > a2 = ap[14]; > a3 = ap[15]; > > cp[12] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; > cp[13] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; > cp[14] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; > cp[15] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; >} > >template <class T> template <class S> >void >Matrix44<T>::multVecMatrix(const Vec3<S> &src, Vec3<S> &dst) const >{ > S a, b, c, w; > > a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0] + x[3][0]; > b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1] + x[3][1]; > c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2] + x[3][2]; > w = src[0] * x[0][3] + src[1] * x[1][3] + src[2] * x[2][3] + x[3][3]; > > dst.x = a / w; > dst.y = b / w; > dst.z = c / w; >} > >template <class T> template <class S> >void >Matrix44<T>::multDirMatrix(const Vec3<S> &src, Vec3<S> &dst) const >{ > S a, b, c; > > a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0]; > b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1]; > c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2]; > > dst.x = a; > dst.y = b; > dst.z = c; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::operator /= (T a) >{ > x[0][0] /= a; > x[0][1] /= a; > x[0][2] /= a; > x[0][3] /= a; > x[1][0] /= a; > x[1][1] /= a; > x[1][2] /= a; > x[1][3] /= a; > x[2][0] /= a; > x[2][1] /= a; > x[2][2] /= a; > x[2][3] /= a; > x[3][0] /= a; > x[3][1] /= a; > x[3][2] /= a; > x[3][3] /= a; > > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::operator / (T a) const >{ > return Matrix44 (x[0][0] / a, > x[0][1] / a, > x[0][2] / a, > x[0][3] / a, > x[1][0] / a, > x[1][1] / a, > x[1][2] / a, > x[1][3] / a, > x[2][0] / a, > x[2][1] / a, > x[2][2] / a, > x[2][3] / a, > x[3][0] / a, > x[3][1] / a, > x[3][2] / a, > x[3][3] / a); >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::transpose () >{ > Matrix44 tmp (x[0][0], > x[1][0], > x[2][0], > x[3][0], > x[0][1], > x[1][1], > x[2][1], > x[3][1], > x[0][2], > x[1][2], > x[2][2], > x[3][2], > x[0][3], > x[1][3], > x[2][3], > x[3][3]); > *this = tmp; > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::transposed () const >{ > return Matrix44 (x[0][0], > x[1][0], > x[2][0], > x[3][0], > x[0][1], > x[1][1], > x[2][1], > x[3][1], > x[0][2], > x[1][2], > x[2][2], > x[3][2], > x[0][3], > x[1][3], > x[2][3], > x[3][3]); >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::gjInvert (bool singExc) throw (Iex::MathExc) >{ > *this = gjInverse (singExc); > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::gjInverse (bool singExc) const throw (Iex::MathExc) >{ > int i, j, k; > Matrix44 s; > Matrix44 t (*this); > > > > for (i = 0; i < 3 ; i++) > { > int pivot = i; > > T pivotsize = t[i][i]; > > if (pivotsize < 0) > pivotsize = -pivotsize; > > for (j = i + 1; j < 4; j++) > { > T tmp = t[j][i]; > > if (tmp < 0) > tmp = -tmp; > > if (tmp > pivotsize) > { > pivot = j; > pivotsize = tmp; > } > } > > if (pivotsize == 0) > { > if (singExc) > throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); > > return Matrix44(); > } > > if (pivot != i) > { > for (j = 0; j < 4; j++) > { > T tmp; > > tmp = t[i][j]; > t[i][j] = t[pivot][j]; > t[pivot][j] = tmp; > > tmp = s[i][j]; > s[i][j] = s[pivot][j]; > s[pivot][j] = tmp; > } > } > > for (j = i + 1; j < 4; j++) > { > T f = t[j][i] / t[i][i]; > > for (k = 0; k < 4; k++) > { > t[j][k] -= f * t[i][k]; > s[j][k] -= f * s[i][k]; > } > } > } > > > > for (i = 3; i >= 0; --i) > { > T f; > > if ((f = t[i][i]) == 0) > { > if (singExc) > throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); > > return Matrix44(); > } > > for (j = 0; j < 4; j++) > { > t[i][j] /= f; > s[i][j] /= f; > } > > for (j = 0; j < i; j++) > { > f = t[j][i]; > > for (k = 0; k < 4; k++) > { > t[j][k] -= f * t[i][k]; > s[j][k] -= f * s[i][k]; > } > } > } > > return s; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::invert (bool singExc) throw (Iex::MathExc) >{ > *this = inverse (singExc); > return *this; >} > >template <class T> >Matrix44<T> >Matrix44<T>::inverse (bool singExc) const throw (Iex::MathExc) >{ > if (x[0][3] != 0 || x[1][3] != 0 || x[2][3] != 0 || x[3][3] != 1) > return gjInverse(singExc); > > Matrix44 s (x[1][1] * x[2][2] - x[2][1] * x[1][2], > x[2][1] * x[0][2] - x[0][1] * x[2][2], > x[0][1] * x[1][2] - x[1][1] * x[0][2], > 0, > > x[2][0] * x[1][2] - x[1][0] * x[2][2], > x[0][0] * x[2][2] - x[2][0] * x[0][2], > x[1][0] * x[0][2] - x[0][0] * x[1][2], > 0, > > x[1][0] * x[2][1] - x[2][0] * x[1][1], > x[2][0] * x[0][1] - x[0][0] * x[2][1], > x[0][0] * x[1][1] - x[1][0] * x[0][1], > 0, > > 0, > 0, > 0, > 1); > > T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; > > if (Imath::abs (r) >= 1) > { > for (int i = 0; i < 3; ++i) > { > for (int j = 0; j < 3; ++j) > { > s[i][j] /= r; > } > } > } > else > { > T mr = Imath::abs (r) / limits<T>::smallest(); > > for (int i = 0; i < 3; ++i) > { > for (int j = 0; j < 3; ++j) > { > if (mr > Imath::abs (s[i][j])) > { > s[i][j] /= r; > } > else > { > if (singExc) > throw SingMatrixExc ("Cannot invert singular matrix."); > > return Matrix44(); > } > } > } > } > > s[3][0] = -x[3][0] * s[0][0] - x[3][1] * s[1][0] - x[3][2] * s[2][0]; > s[3][1] = -x[3][0] * s[0][1] - x[3][1] * s[1][1] - x[3][2] * s[2][1]; > s[3][2] = -x[3][0] * s[0][2] - x[3][1] * s[1][2] - x[3][2] * s[2][2]; > > return s; >} > >template <class T> >inline T >Matrix44<T>::fastMinor( const int r0, const int r1, const int r2, > const int c0, const int c1, const int c2) const >{ > return x[r0][c0] * (x[r1][c1]*x[r2][c2] - x[r1][c2]*x[r2][c1]) > + x[r0][c1] * (x[r1][c2]*x[r2][c0] - x[r1][c0]*x[r2][c2]) > + x[r0][c2] * (x[r1][c0]*x[r2][c1] - x[r1][c1]*x[r2][c0]); >} > >template <class T> >inline T >Matrix44<T>::minorOf (const int r, const int c) const >{ > int r0 = 0 + (r < 1 ? 1 : 0); > int r1 = 1 + (r < 2 ? 1 : 0); > int r2 = 2 + (r < 3 ? 1 : 0); > int c0 = 0 + (c < 1 ? 1 : 0); > int c1 = 1 + (c < 2 ? 1 : 0); > int c2 = 2 + (c < 3 ? 1 : 0); > > Matrix33<T> working (x[r0][c0],x[r1][c0],x[r2][c0], > x[r0][c1],x[r1][c1],x[r2][c1], > x[r0][c2],x[r1][c2],x[r2][c2]); > > return working.determinant(); >} > >template <class T> >inline T >Matrix44<T>::determinant () const >{ > T sum = (T)0; > > if (x[0][3] != 0.) sum -= x[0][3] * fastMinor(1,2,3,0,1,2); > if (x[1][3] != 0.) sum += x[1][3] * fastMinor(0,2,3,0,1,2); > if (x[2][3] != 0.) sum -= x[2][3] * fastMinor(0,1,3,0,1,2); > if (x[3][3] != 0.) sum += x[3][3] * fastMinor(0,1,2,0,1,2); > > return sum; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::setEulerAngles (const Vec3<S>& r) >{ > S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; > > cos_rz = Math<T>::cos (r[2]); > cos_ry = Math<T>::cos (r[1]); > cos_rx = Math<T>::cos (r[0]); > > sin_rz = Math<T>::sin (r[2]); > sin_ry = Math<T>::sin (r[1]); > sin_rx = Math<T>::sin (r[0]); > > x[0][0] = cos_rz * cos_ry; > x[0][1] = sin_rz * cos_ry; > x[0][2] = -sin_ry; > x[0][3] = 0; > > x[1][0] = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; > x[1][1] = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; > x[1][2] = cos_ry * sin_rx; > x[1][3] = 0; > > x[2][0] = sin_rz * sin_rx + cos_rz * sin_ry * cos_rx; > x[2][1] = -cos_rz * sin_rx + sin_rz * sin_ry * cos_rx; > x[2][2] = cos_ry * cos_rx; > x[2][3] = 0; > > x[3][0] = 0; > x[3][1] = 0; > x[3][2] = 0; > x[3][3] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::setAxisAngle (const Vec3<S>& axis, S angle) >{ > Vec3<S> unit (axis.normalized()); > S sine = Math<T>::sin (angle); > S cosine = Math<T>::cos (angle); > > x[0][0] = unit[0] * unit[0] * (1 - cosine) + cosine; > x[0][1] = unit[0] * unit[1] * (1 - cosine) + unit[2] * sine; > x[0][2] = unit[0] * unit[2] * (1 - cosine) - unit[1] * sine; > x[0][3] = 0; > > x[1][0] = unit[0] * unit[1] * (1 - cosine) - unit[2] * sine; > x[1][1] = unit[1] * unit[1] * (1 - cosine) + cosine; > x[1][2] = unit[1] * unit[2] * (1 - cosine) + unit[0] * sine; > x[1][3] = 0; > > x[2][0] = unit[0] * unit[2] * (1 - cosine) + unit[1] * sine; > x[2][1] = unit[1] * unit[2] * (1 - cosine) - unit[0] * sine; > x[2][2] = unit[2] * unit[2] * (1 - cosine) + cosine; > x[2][3] = 0; > > x[3][0] = 0; > x[3][1] = 0; > x[3][2] = 0; > x[3][3] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::rotate (const Vec3<S> &r) >{ > S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; > S m00, m01, m02; > S m10, m11, m12; > S m20, m21, m22; > > cos_rz = Math<S>::cos (r[2]); > cos_ry = Math<S>::cos (r[1]); > cos_rx = Math<S>::cos (r[0]); > > sin_rz = Math<S>::sin (r[2]); > sin_ry = Math<S>::sin (r[1]); > sin_rx = Math<S>::sin (r[0]); > > m00 = cos_rz * cos_ry; > m01 = sin_rz * cos_ry; > m02 = -sin_ry; > m10 = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; > m11 = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; > m12 = cos_ry * sin_rx; > m20 = -sin_rz * -sin_rx + cos_rz * sin_ry * cos_rx; > m21 = cos_rz * -sin_rx + sin_rz * sin_ry * cos_rx; > m22 = cos_ry * cos_rx; > > Matrix44<T> P (*this); > > x[0][0] = P[0][0] * m00 + P[1][0] * m01 + P[2][0] * m02; > x[0][1] = P[0][1] * m00 + P[1][1] * m01 + P[2][1] * m02; > x[0][2] = P[0][2] * m00 + P[1][2] * m01 + P[2][2] * m02; > x[0][3] = P[0][3] * m00 + P[1][3] * m01 + P[2][3] * m02; > > x[1][0] = P[0][0] * m10 + P[1][0] * m11 + P[2][0] * m12; > x[1][1] = P[0][1] * m10 + P[1][1] * m11 + P[2][1] * m12; > x[1][2] = P[0][2] * m10 + P[1][2] * m11 + P[2][2] * m12; > x[1][3] = P[0][3] * m10 + P[1][3] * m11 + P[2][3] * m12; > > x[2][0] = P[0][0] * m20 + P[1][0] * m21 + P[2][0] * m22; > x[2][1] = P[0][1] * m20 + P[1][1] * m21 + P[2][1] * m22; > x[2][2] = P[0][2] * m20 + P[1][2] * m21 + P[2][2] * m22; > x[2][3] = P[0][3] * m20 + P[1][3] * m21 + P[2][3] * m22; > > return *this; >} > >template <class T> >const Matrix44<T> & >Matrix44<T>::setScale (T s) >{ > memset (x, 0, sizeof (x)); > x[0][0] = s; > x[1][1] = s; > x[2][2] = s; > x[3][3] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::setScale (const Vec3<S> &s) >{ > memset (x, 0, sizeof (x)); > x[0][0] = s[0]; > x[1][1] = s[1]; > x[2][2] = s[2]; > x[3][3] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::scale (const Vec3<S> &s) >{ > x[0][0] *= s[0]; > x[0][1] *= s[0]; > x[0][2] *= s[0]; > x[0][3] *= s[0]; > > x[1][0] *= s[1]; > x[1][1] *= s[1]; > x[1][2] *= s[1]; > x[1][3] *= s[1]; > > x[2][0] *= s[2]; > x[2][1] *= s[2]; > x[2][2] *= s[2]; > x[2][3] *= s[2]; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::setTranslation (const Vec3<S> &t) >{ > x[0][0] = 1; > x[0][1] = 0; > x[0][2] = 0; > x[0][3] = 0; > > x[1][0] = 0; > x[1][1] = 1; > x[1][2] = 0; > x[1][3] = 0; > > x[2][0] = 0; > x[2][1] = 0; > x[2][2] = 1; > x[2][3] = 0; > > x[3][0] = t[0]; > x[3][1] = t[1]; > x[3][2] = t[2]; > x[3][3] = 1; > > return *this; >} > >template <class T> >inline const Vec3<T> >Matrix44<T>::translation () const >{ > return Vec3<T> (x[3][0], x[3][1], x[3][2]); >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::translate (const Vec3<S> &t) >{ > x[3][0] += t[0] * x[0][0] + t[1] * x[1][0] + t[2] * x[2][0]; > x[3][1] += t[0] * x[0][1] + t[1] * x[1][1] + t[2] * x[2][1]; > x[3][2] += t[0] * x[0][2] + t[1] * x[1][2] + t[2] * x[2][2]; > x[3][3] += t[0] * x[0][3] + t[1] * x[1][3] + t[2] * x[2][3]; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::setShear (const Vec3<S> &h) >{ > x[0][0] = 1; > x[0][1] = 0; > x[0][2] = 0; > x[0][3] = 0; > > x[1][0] = h[0]; > x[1][1] = 1; > x[1][2] = 0; > x[1][3] = 0; > > x[2][0] = h[1]; > x[2][1] = h[2]; > x[2][2] = 1; > x[2][3] = 0; > > x[3][0] = 0; > x[3][1] = 0; > x[3][2] = 0; > x[3][3] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::setShear (const Shear6<S> &h) >{ > x[0][0] = 1; > x[0][1] = h.yx; > x[0][2] = h.zx; > x[0][3] = 0; > > x[1][0] = h.xy; > x[1][1] = 1; > x[1][2] = h.zy; > x[1][3] = 0; > > x[2][0] = h.xz; > x[2][1] = h.yz; > x[2][2] = 1; > x[2][3] = 0; > > x[3][0] = 0; > x[3][1] = 0; > x[3][2] = 0; > x[3][3] = 1; > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::shear (const Vec3<S> &h) >{ > > > > > > > for (int i=0; i < 4; i++) > { > x[2][i] += h[1] * x[0][i] + h[2] * x[1][i]; > x[1][i] += h[0] * x[0][i]; > } > > return *this; >} > >template <class T> >template <class S> >const Matrix44<T> & >Matrix44<T>::shear (const Shear6<S> &h) >{ > Matrix44<T> P (*this); > > for (int i=0; i < 4; i++) > { > x[0][i] = P[0][i] + h.yx * P[1][i] + h.zx * P[2][i]; > x[1][i] = h.xy * P[0][i] + P[1][i] + h.zy * P[2][i]; > x[2][i] = h.xz * P[0][i] + h.yz * P[1][i] + P[2][i]; > } > > return *this; >} > > > > > > >template <class T> >std::ostream & >operator << (std::ostream &s, const Matrix33<T> &m) >{ > std::ios_base::fmtflags oldFlags = s.flags(); > int width; > > if (s.flags() & std::ios_base::fixed) > { > s.setf (std::ios_base::showpoint); > width = s.precision() + 5; > } > else > { > s.setf (std::ios_base::scientific); > s.setf (std::ios_base::showpoint); > width = s.precision() + 8; > } > > s << "(" << std::setw (width) << m[0][0] << > " " << std::setw (width) << m[0][1] << > " " << std::setw (width) << m[0][2] << "\n" << > > " " << std::setw (width) << m[1][0] << > " " << std::setw (width) << m[1][1] << > " " << std::setw (width) << m[1][2] << "\n" << > > " " << std::setw (width) << m[2][0] << > " " << std::setw (width) << m[2][1] << > " " << std::setw (width) << m[2][2] << ")\n"; > > s.flags (oldFlags); > return s; >} > >template <class T> >std::ostream & >operator << (std::ostream &s, const Matrix44<T> &m) >{ > std::ios_base::fmtflags oldFlags = s.flags(); > int width; > > if (s.flags() & std::ios_base::fixed) > { > s.setf (std::ios_base::showpoint); > width = s.precision() + 5; > } > else > { > s.setf (std::ios_base::scientific); > s.setf (std::ios_base::showpoint); > width = s.precision() + 8; > } > > s << "(" << std::setw (width) << m[0][0] << > " " << std::setw (width) << m[0][1] << > " " << std::setw (width) << m[0][2] << > " " << std::setw (width) << m[0][3] << "\n" << > > " " << std::setw (width) << m[1][0] << > " " << std::setw (width) << m[1][1] << > " " << std::setw (width) << m[1][2] << > " " << std::setw (width) << m[1][3] << "\n" << > > " " << std::setw (width) << m[2][0] << > " " << std::setw (width) << m[2][1] << > " " << std::setw (width) << m[2][2] << > " " << std::setw (width) << m[2][3] << "\n" << > > " " << std::setw (width) << m[3][0] << > " " << std::setw (width) << m[3][1] << > " " << std::setw (width) << m[3][2] << > " " << std::setw (width) << m[3][3] << ")\n"; > > s.flags (oldFlags); > return s; >} > > > > > > >template <class S, class T> >inline const Vec2<S> & >operator *= (Vec2<S> &v, const Matrix33<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]); > S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]); > > v.x = x / w; > v.y = y / w; > > return v; >} > >template <class S, class T> >inline Vec2<S> >operator * (const Vec2<S> &v, const Matrix33<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]); > S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]); > > return Vec2<S> (x / w, y / w); >} > > >template <class S, class T> >inline const Vec3<S> & >operator *= (Vec3<S> &v, const Matrix33<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]); > S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]); > > v.x = x; > v.y = y; > v.z = z; > > return v; >} > >template <class S, class T> >inline Vec3<S> >operator * (const Vec3<S> &v, const Matrix33<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]); > S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]); > > return Vec3<S> (x, y, z); >} > > >template <class S, class T> >inline const Vec3<S> & >operator *= (Vec3<S> &v, const Matrix44<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]); > S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); > S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]); > > v.x = x / w; > v.y = y / w; > v.z = z / w; > > return v; >} > >template <class S, class T> >inline Vec3<S> >operator * (const Vec3<S> &v, const Matrix44<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]); > S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); > S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]); > > return Vec3<S> (x / w, y / w, z / w); >} > > >template <class S, class T> >inline const Vec4<S> & >operator *= (Vec4<S> &v, const Matrix44<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + v.w * m[3][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + v.w * m[3][1]); > S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + v.w * m[3][2]); > S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + v.w * m[3][3]); > > v.x = x; > v.y = y; > v.z = z; > v.w = w; > > return v; >} > >template <class S, class T> >inline Vec4<S> >operator * (const Vec4<S> &v, const Matrix44<T> &m) >{ > S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + v.w * m[3][0]); > S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + v.w * m[3][1]); > S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + v.w * m[3][2]); > S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + v.w * m[3][3]); > > return Vec4<S> (x, y, z, w); >} > >} ># 51 "/usr/include/OpenEXR/ImfMatrixAttribute.h" 2 > > >namespace Imf { > > >typedef TypedAttribute<Imath::M33f> M33fAttribute; >template <> const char *M33fAttribute::staticTypeName (); >template <> void M33fAttribute::writeValueTo (OStream &, int) const; >template <> void M33fAttribute::readValueFrom (IStream &, int, int); > > >typedef TypedAttribute<Imath::M33d> M33dAttribute; >template <> const char *M33dAttribute::staticTypeName (); >template <> void M33dAttribute::writeValueTo (OStream &, int) const; >template <> void M33dAttribute::readValueFrom (IStream &, int, int); > > >typedef TypedAttribute<Imath::M44f> M44fAttribute; >template <> const char *M44fAttribute::staticTypeName (); >template <> void M44fAttribute::writeValueTo (OStream &, int) const; >template <> void M44fAttribute::readValueFrom (IStream &, int, int); > > >typedef TypedAttribute<Imath::M44d> M44dAttribute; >template <> const char *M44dAttribute::staticTypeName (); >template <> void M44dAttribute::writeValueTo (OStream &, int) const; >template <> void M44dAttribute::readValueFrom (IStream &, int, int); > > >} ># 392 "./CImg.h" 2 ># 1 "/usr/include/OpenEXR/ImfArray.h" 1 ># 72 "/usr/include/OpenEXR/ImfArray.h" >namespace Imf { > > >template <class T> >class Array >{ > public: > > > > > > Array () {_data = 0;} > Array (long size) {_data = new T[size];} > ~Array () {delete [] _data;} > > > > > > > operator T * () {return _data;} > operator const T * () const {return _data;} ># 109 "/usr/include/OpenEXR/ImfArray.h" > void resizeErase (long size); > void resizeEraseUnsafe (long size); > > > private: > > Array (const Array &); > Array & operator = (const Array &); > > T * _data; >}; > > >template <class T> >class Array2D >{ > public: > > > > > > Array2D (); > Array2D (long sizeX, long sizeY); > ~Array2D (); > > > > > > > T * operator [] (long x); > const T * operator [] (long x) const; ># 156 "/usr/include/OpenEXR/ImfArray.h" > void resizeErase (long sizeX, long sizeY); > void resizeEraseUnsafe (long sizeX, long sizeY); > > > private: > > Array2D (const Array2D &); > Array2D & operator = (const Array2D &); > > long _sizeY; > T * _data; >}; > > > > > > >template <class T> >inline void >Array<T>::resizeErase (long size) >{ > T *tmp = new T[size]; > delete [] _data; > _data = tmp; >} > > >template <class T> >inline void >Array<T>::resizeEraseUnsafe (long size) >{ > delete [] _data; > _data = 0; > _data = new T[size]; >} > > >template <class T> >inline >Array2D<T>::Array2D (): > _sizeY (0), _data (0) >{ > >} > > >template <class T> >inline >Array2D<T>::Array2D (long sizeX, long sizeY): > _sizeY (sizeY), _data (new T[sizeX * sizeY]) >{ > >} > > >template <class T> >inline >Array2D<T>::~Array2D () >{ > delete [] _data; >} > > >template <class T> >inline T * >Array2D<T>::operator [] (long x) >{ > return _data + x * _sizeY; >} > > >template <class T> >inline const T * >Array2D<T>::operator [] (long x) const >{ > return _data + x * _sizeY; >} > > >template <class T> >inline void >Array2D<T>::resizeErase (long sizeX, long sizeY) >{ > T *tmp = new T[sizeX * sizeY]; > delete [] _data; > _sizeY = sizeY; > _data = tmp; >} > > >template <class T> >inline void >Array2D<T>::resizeEraseUnsafe (long sizeX, long sizeY) >{ > delete [] _data; > _data = 0; > _sizeY = 0; > _data = new T[sizeX * sizeY]; > _sizeY = sizeY; >} > > >} ># 393 "./CImg.h" 2 ># 1989 "./CImg.h" >namespace cimg_library { > > > template<typename T=float> struct CImg; > template<typename T=float> struct CImgList; > struct CImgDisplay; > struct CImgException; > > > > > > namespace cimg { > > > > const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 }; > const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 }; > const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 }; > const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 }; > const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 }; > const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 }; > const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 }; > const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 }; > const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 }; > const char t_bold[] = { 0x1b, '[', '1', 'm', 0 }; > const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 }; ># 2030 "./CImg.h" > inline std::FILE* output(std::FILE *file=0); > inline void info(); > > > template<typename T> > inline void unused(const T&, ...) {} > > > > > inline int mutex(const unsigned int n, const int lock_mode=1); > > inline unsigned int& _exception_mode(const unsigned int value, const bool is_set) { > static unsigned int mode = 1; > cimg::mutex(0); > if (is_set) mode = value; > cimg::mutex(0,0); > return mode; > } ># 2060 "./CImg.h" > inline unsigned int& exception_mode(const unsigned int mode) { > return _exception_mode(mode,true); > } > > > > > > inline unsigned int& exception_mode() { > return _exception_mode(0,false); > } > > inline int dialog(const char *const title, const char *const msg, const char *const button1_label="OK", > const char *const button2_label=0, const char *const button3_label=0, > const char *const button4_label=0, const char *const button5_label=0, > const char *const button6_label=0, const bool centering=false); > > inline double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0); > } ># 2144 "./CImg.h" > struct CImgException : public std::exception { ># 2153 "./CImg.h" > char _message[16384]; > CImgException() { *_message = 0; } > CImgException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgException",cimg::t_normal,_message); if (1 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > > const char *what() const throw() { return _message; } > }; > > > > struct CImgInstanceException : public CImgException { > CImgInstanceException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgInstanceException",cimg::t_normal,_message); if (1 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgInstanceException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgArgumentException : public CImgException { > CImgArgumentException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgArgumentException",cimg::t_normal,_message); if (1 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgArgumentException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgIOException : public CImgException { > CImgIOException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgIOException",cimg::t_normal,_message); if (1 && true && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgIOException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgDisplayException : public CImgException { > CImgDisplayException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgDisplayException",cimg::t_normal,_message); if (1 && false && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgDisplayException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; > > > > struct CImgWarningException : public CImgException { > CImgWarningException(const char *const format, ...) { std::va_list ap; __builtin_va_start(ap,format); vsnprintf(_message,sizeof(_message),format,ap); __builtin_va_end(ap); if (cimg::exception_mode()) { std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,"CImgWarningException",cimg::t_normal,_message); if (1 && false && !(cimg::exception_mode()%2)) try { cimg::dialog("CImgWarningException",_message,"Abort"); } catch (CImgException&) {} if (cimg::exception_mode()>=3) cimg_library::cimg::info(); }; } > }; ># 2202 "./CImg.h" > namespace cimg { > > > > template<typename T> struct type { > static const char* string() { > static const char* s[] = { "unknown", "unknown8", "unknown16", "unknown24", > "unknown32", "unknown40", "unknown48", "unknown56", > "unknown64", "unknown72", "unknown80", "unknown88", > "unknown96", "unknown104", "unknown112", "unknown120", > "unknown128" }; > return s[(sizeof(T)<17)?sizeof(T):0]; > } > static bool is_float() { return false; } > static bool is_inf(const T) { return false; } > static bool is_nan(const T) { return false; } > static T min() { return (T)-1>0?(T)0:(T)-1<<(8*sizeof(T)-1); } > static T max() { return (T)-1>0?(T)-1:~((T)-1<<(8*sizeof(T)-1)); } > static T inf() { return max(); } > static T cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(T)val; } > static const char* format() { return "%s"; } > static const char* format(const T val) { static const char *const s = "unknown"; cimg::unused(val); return s; } > }; > > template<> struct type<bool> { > static const char* string() { static const char *const s = "bool"; return s; } > static bool is_float() { return false; } > static bool is_inf(const bool) { return false; } > static bool is_nan(const bool) { return false; } > static bool min() { return false; } > static bool max() { return true; } > static bool inf() { return max(); } > static bool is_inf() { return false; } > static bool cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(bool)val; } > static const char* format() { return "%s"; } > static const char* format(const bool val) { static const char* s[] = { "false", "true" }; return s[val?1:0]; } > }; > > template<> struct type<unsigned char> { > static const char* string() { static const char *const s = "unsigned char"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned char) { return false; } > static bool is_nan(const unsigned char) { return false; } > static unsigned char min() { return 0; } > static unsigned char max() { return (unsigned char)~0U; } > static unsigned char inf() { return max(); } > static unsigned char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; } > static const char* format() { return "%u"; } > static unsigned int format(const unsigned char val) { return (unsigned int)val; } > }; > > template<> struct type<char> { > static const char* string() { static const char *const s = "char"; return s; } > static bool is_float() { return false; } > static bool is_inf(const char) { return false; } > static bool is_nan(const char) { return false; } > static char min() { return (char)(-1L<<(8*sizeof(char)-1)); } > static char max() { return (char)~((char)(-1L<<(8*sizeof(char)-1))); } > static char inf() { return max(); } > static char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(char)val; } > static const char* format() { return "%d"; } > static int format(const char val) { return (int)val; } > }; > > template<> struct type<signed char> { > static const char* string() { static const char *const s = "signed char"; return s; } > static bool is_float() { return false; } > static bool is_inf(const signed char) { return false; } > static bool is_nan(const signed char) { return false; } > static signed char min() { return (signed char)(-1L<<(8*sizeof(signed char)-1)); } > static signed char max() { return ~((signed char)(-1L<<(8*sizeof(signed char)-1))); } > static signed char inf() { return max(); } > static signed char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(signed char)val; } > static const char* format() { return "%d"; } > static unsigned int format(const signed char val) { return (int)val; } > }; > > template<> struct type<unsigned short> { > static const char* string() { static const char *const s = "unsigned short"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned short) { return false; } > static bool is_nan(const unsigned short) { return false; } > static unsigned short min() { return 0; } > static unsigned short max() { return (unsigned short)~0U; } > static unsigned short inf() { return max(); } > static unsigned short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned short)val; } > static const char* format() { return "%u"; } > static unsigned int format(const unsigned short val) { return (unsigned int)val; } > }; > > template<> struct type<short> { > static const char* string() { static const char *const s = "short"; return s; } > static bool is_float() { return false; } > static bool is_inf(const short) { return false; } > static bool is_nan(const short) { return false; } > static short min() { return (short)(-1L<<(8*sizeof(short)-1)); } > static short max() { return ~((short)(-1L<<(8*sizeof(short)-1))); } > static short inf() { return max(); } > static short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(short)val; } > static const char* format() { return "%d"; } > static int format(const short val) { return (int)val; } > }; > > template<> struct type<unsigned int> { > static const char* string() { static const char *const s = "unsigned int"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned int) { return false; } > static bool is_nan(const unsigned int) { return false; } > static unsigned int min() { return 0; } > static unsigned int max() { return (unsigned int)~0U; } > static unsigned int inf() { return max(); } > static unsigned int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned int)val; } > static const char* format() { return "%u"; } > static unsigned int format(const unsigned int val) { return val; } > }; > > template<> struct type<int> { > static const char* string() { static const char *const s = "int"; return s; } > static bool is_float() { return false; } > static bool is_inf(const int) { return false; } > static bool is_nan(const int) { return false; } > static int min() { return (int)(-1L<<(8*sizeof(int)-1)); } > static int max() { return ~((int)(-1L<<(8*sizeof(int)-1))); } > static int inf() { return max(); } > static int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(int)val; } > static const char* format() { return "%d"; } > static int format(const int val) { return val; } > }; > > template<> struct type<unsigned long> { > static const char* string() { static const char *const s = "unsigned long"; return s; } > static bool is_float() { return false; } > static bool is_inf(const unsigned long) { return false; } > static bool is_nan(const unsigned long) { return false; } > static unsigned long min() { return 0; } > static unsigned long max() { return (unsigned long)~0UL; } > static unsigned long inf() { return max(); } > static unsigned long cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(unsigned long)val; } > static const char* format() { return "%lu"; } > static unsigned long format(const unsigned long val) { return val; } > }; > > template<> struct type<long> { > static const char* string() { static const char *const s = "long"; return s; } > static bool is_float() { return false; } > static bool is_inf(const long) { return false; } > static bool is_nan(const long) { return false; } > static long min() { return (long)(-1L<<(8*sizeof(long)-1)); } > static long max() { return ~((long)(-1L<<(8*sizeof(long)-1))); } > static long inf() { return max(); } > static long cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(long)val; } > static const char* format() { return "%ld"; } > static long format(const long val) { return val; } > }; > > template<> struct type<double> { > static const char* string() { static const char *const s = "double"; return s; } > static bool is_float() { return true; } > static bool is_inf(const double val) { > > > > return !is_nan(val) && (val<cimg::type<double>::min() || val>cimg::type<double>::max()); > > } > static bool is_nan(const double val) { > > > > return !(val==val); > > } > static double min() { return -1.7E308; } > static double max() { return 1.7E308; } > static double inf() { return max()*max(); } > static double nan() { static const double val_nan = -std::sqrt(-1.0); return val_nan; } > static double cut(const double val) { return val<min()?min():val>max()?max():val; } > static const char* format() { return "%.16g"; } > static double format(const double val) { return val; } > }; > > template<> struct type<float> { > static const char* string() { static const char *const s = "float"; return s; } > static bool is_float() { return true; } > static bool is_inf(const float val) { > > > > return !is_nan(val) && (val<cimg::type<float>::min() || val>cimg::type<float>::max()); > > } > static bool is_nan(const float val) { > > > > return !(val==val); > > } > static float min() { return -3.4E38f; } > static float max() { return 3.4E38f; } > static float inf() { return (float)cimg::type<double>::inf(); } > static float nan() { return (float)cimg::type<double>::nan(); } > static float cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(float)val; } > static const char* format() { return "%.16g"; } > static double format(const float val) { return (double)val; } > }; > > template<typename T, typename t> struct superset { typedef T type; }; > template<> struct superset<bool,unsigned char> { typedef unsigned char type; }; > template<> struct superset<bool,char> { typedef char type; }; > template<> struct superset<bool,signed char> { typedef signed char type; }; > template<> struct superset<bool,unsigned short> { typedef unsigned short type; }; > template<> struct superset<bool,short> { typedef short type; }; > template<> struct superset<bool,unsigned int> { typedef unsigned int type; }; > template<> struct superset<bool,int> { typedef int type; }; > template<> struct superset<bool,unsigned long> { typedef unsigned long type; }; > template<> struct superset<bool,long> { typedef long type; }; > template<> struct superset<bool,float> { typedef float type; }; > template<> struct superset<bool,double> { typedef double type; }; > template<> struct superset<unsigned char,char> { typedef short type; }; > template<> struct superset<unsigned char,signed char> { typedef short type; }; > template<> struct superset<unsigned char,unsigned short> { typedef unsigned short type; }; > template<> struct superset<unsigned char,short> { typedef short type; }; > template<> struct superset<unsigned char,unsigned int> { typedef unsigned int type; }; > template<> struct superset<unsigned char,int> { typedef int type; }; > template<> struct superset<unsigned char,unsigned long> { typedef unsigned long type; }; > template<> struct superset<unsigned char,long> { typedef long type; }; > template<> struct superset<unsigned char,float> { typedef float type; }; > template<> struct superset<unsigned char,double> { typedef double type; }; > template<> struct superset<signed char,unsigned char> { typedef short type; }; > template<> struct superset<signed char,char> { typedef short type; }; > template<> struct superset<signed char,unsigned short> { typedef int type; }; > template<> struct superset<signed char,short> { typedef short type; }; > template<> struct superset<signed char,unsigned int> { typedef long type; }; > template<> struct superset<signed char,int> { typedef int type; }; > template<> struct superset<signed char,unsigned long> { typedef long type; }; > template<> struct superset<signed char,long> { typedef long type; }; > template<> struct superset<signed char,float> { typedef float type; }; > template<> struct superset<signed char,double> { typedef double type; }; > template<> struct superset<char,unsigned char> { typedef short type; }; > template<> struct superset<char,signed char> { typedef short type; }; > template<> struct superset<char,unsigned short> { typedef int type; }; > template<> struct superset<char,short> { typedef short type; }; > template<> struct superset<char,unsigned int> { typedef long type; }; > template<> struct superset<char,int> { typedef int type; }; > template<> struct superset<char,unsigned long> { typedef long type; }; > template<> struct superset<char,long> { typedef long type; }; > template<> struct superset<char,float> { typedef float type; }; > template<> struct superset<char,double> { typedef double type; }; > template<> struct superset<unsigned short,char> { typedef int type; }; > template<> struct superset<unsigned short,signed char> { typedef int type; }; > template<> struct superset<unsigned short,short> { typedef int type; }; > template<> struct superset<unsigned short,unsigned int> { typedef unsigned int type; }; > template<> struct superset<unsigned short,int> { typedef int type; }; > template<> struct superset<unsigned short,unsigned long> { typedef unsigned long type; }; > template<> struct superset<unsigned short,long> { typedef long type; }; > template<> struct superset<unsigned short,float> { typedef float type; }; > template<> struct superset<unsigned short,double> { typedef double type; }; > template<> struct superset<short,unsigned short> { typedef int type; }; > template<> struct superset<short,unsigned int> { typedef long type; }; > template<> struct superset<short,int> { typedef int type; }; > template<> struct superset<short,unsigned long> { typedef long type; }; > template<> struct superset<short,long> { typedef long type; }; > template<> struct superset<short,float> { typedef float type; }; > template<> struct superset<short,double> { typedef double type; }; > template<> struct superset<unsigned int,char> { typedef long type; }; > template<> struct superset<unsigned int,signed char> { typedef long type; }; > template<> struct superset<unsigned int,short> { typedef long type; }; > template<> struct superset<unsigned int,int> { typedef long type; }; > template<> struct superset<unsigned int,unsigned long> { typedef unsigned long type; }; > template<> struct superset<unsigned int,long> { typedef long type; }; > template<> struct superset<unsigned int,float> { typedef float type; }; > template<> struct superset<unsigned int,double> { typedef double type; }; > template<> struct superset<int,unsigned int> { typedef long type; }; > template<> struct superset<int,unsigned long> { typedef long type; }; > template<> struct superset<int,long> { typedef long type; }; > template<> struct superset<int,float> { typedef float type; }; > template<> struct superset<int,double> { typedef double type; }; > template<> struct superset<unsigned long,char> { typedef long type; }; > template<> struct superset<unsigned long,signed char> { typedef long type; }; > template<> struct superset<unsigned long,short> { typedef long type; }; > template<> struct superset<unsigned long,int> { typedef long type; }; > template<> struct superset<unsigned long,long> { typedef long type; }; > template<> struct superset<unsigned long,float> { typedef double type; }; > template<> struct superset<unsigned long,double> { typedef double type; }; > template<> struct superset<long,float> { typedef double type; }; > template<> struct superset<long,double> { typedef double type; }; > template<> struct superset<float,double> { typedef double type; }; > > template<typename t1, typename t2, typename t3> struct superset2 { > typedef typename superset<t1, typename superset<t2,t3>::type>::type type; > }; > > template<typename t1, typename t2, typename t3, typename t4> struct superset3 { > typedef typename superset<t1, typename superset2<t2,t3,t4>::type>::type type; > }; > > template<typename t1, typename t2> struct last { typedef t2 type; }; ># 2508 "./CImg.h" > struct X11_info { > volatile unsigned int nb_wins; > pthread_t* events_thread; > pthread_cond_t wait_event; > pthread_mutex_t wait_event_mutex; > CImgDisplay* wins[1024]; > Display* display; > unsigned int nb_bits; > bool is_blue_first; > bool is_shm_enabled; > bool byte_order; > > > > > > > X11_info():nb_wins(0),events_thread(0),display(0), > nb_bits(0),is_blue_first(false),is_shm_enabled(false),byte_order(false) { > XInitThreads(); > pthread_mutex_init(&wait_event_mutex,0); > pthread_cond_init(&wait_event,0); > > > > > > } > > ~X11_info() { > if (events_thread) { > pthread_cancel(*events_thread); > delete events_thread; > } > if (display) {} > pthread_cond_destroy(&wait_event); > pthread_mutex_unlock(&wait_event_mutex); > pthread_mutex_destroy(&wait_event_mutex); > } > }; > > > > > > inline X11_info& X11_attr() { static X11_info val; return val; } ># 2570 "./CImg.h" > struct Mutex_info { > > > > > > > > pthread_mutex_t mutex[32]; > Mutex_info() { for (unsigned int i = 0; i<32; ++i) pthread_mutex_init(&mutex[i],0); } > void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); } > void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); } > int trylock(const unsigned int n) { return pthread_mutex_trylock(&mutex[n]); } > > > > > > > }; > > > > > > inline Mutex_info& Mutex_attr() { static Mutex_info val; return val; } ># 2608 "./CImg.h" > const unsigned int keyESC = 0xff1b; > const unsigned int keyF1 = 0xffbe; > const unsigned int keyF2 = 0xffbf; > const unsigned int keyF3 = 0xffc0; > const unsigned int keyF4 = 0xffc1; > const unsigned int keyF5 = 0xffc2; > const unsigned int keyF6 = 0xffc3; > const unsigned int keyF7 = 0xffc4; > const unsigned int keyF8 = 0xffc5; > const unsigned int keyF9 = 0xffc6; > const unsigned int keyF10 = 0xffc7; > const unsigned int keyF11 = 0xffc8; > const unsigned int keyF12 = 0xffc9; > const unsigned int keyPAUSE = 0xff13; > const unsigned int key1 = 0x0031; > const unsigned int key2 = 0x0032; > const unsigned int key3 = 0x0033; > const unsigned int key4 = 0x0034; > const unsigned int key5 = 0x0035; > const unsigned int key6 = 0x0036; > const unsigned int key7 = 0x0037; > const unsigned int key8 = 0x0038; > const unsigned int key9 = 0x0039; > const unsigned int key0 = 0x0030; > const unsigned int keyBACKSPACE = 0xff08; > const unsigned int keyINSERT = 0xff63; > const unsigned int keyHOME = 0xff50; > const unsigned int keyPAGEUP = 0xff55; > const unsigned int keyTAB = 0xff09; > const unsigned int keyQ = 0x0071; > const unsigned int keyW = 0x0077; > const unsigned int keyE = 0x0065; > const unsigned int keyR = 0x0072; > const unsigned int keyT = 0x0074; > const unsigned int keyY = 0x0079; > const unsigned int keyU = 0x0075; > const unsigned int keyI = 0x0069; > const unsigned int keyO = 0x006f; > const unsigned int keyP = 0x0070; > const unsigned int keyDELETE = 0xffff; > const unsigned int keyEND = 0xff57; > const unsigned int keyPAGEDOWN = 0xff56; > const unsigned int keyCAPSLOCK = 0xffe5; > const unsigned int keyA = 0x0061; > const unsigned int keyS = 0x0073; > const unsigned int keyD = 0x0064; > const unsigned int keyF = 0x0066; > const unsigned int keyG = 0x0067; > const unsigned int keyH = 0x0068; > const unsigned int keyJ = 0x006a; > const unsigned int keyK = 0x006b; > const unsigned int keyL = 0x006c; > const unsigned int keyENTER = 0xff0d; > const unsigned int keySHIFTLEFT = 0xffe1; > const unsigned int keyZ = 0x007a; > const unsigned int keyX = 0x0078; > const unsigned int keyC = 0x0063; > const unsigned int keyV = 0x0076; > const unsigned int keyB = 0x0062; > const unsigned int keyN = 0x006e; > const unsigned int keyM = 0x006d; > const unsigned int keySHIFTRIGHT = 0xffe2; > const unsigned int keyARROWUP = 0xff52; > const unsigned int keyCTRLLEFT = 0xffe3; > const unsigned int keyAPPLEFT = 0xffeb; > const unsigned int keyALT = 0xffe9; > const unsigned int keySPACE = 0x0020; > const unsigned int keyALTGR = 0xffea; > const unsigned int keyAPPRIGHT = 0xffec; > const unsigned int keyMENU = 0xff67; > const unsigned int keyCTRLRIGHT = 0xffe4; > const unsigned int keyARROWLEFT = 0xff51; > const unsigned int keyARROWDOWN = 0xff54; > const unsigned int keyARROWRIGHT = 0xff53; > const unsigned int keyPAD0 = 0xffb0; > const unsigned int keyPAD1 = 0xffb1; > const unsigned int keyPAD2 = 0xffb2; > const unsigned int keyPAD3 = 0xffb3; > const unsigned int keyPAD4 = 0xffb4; > const unsigned int keyPAD5 = 0xffb5; > const unsigned int keyPAD6 = 0xffb6; > const unsigned int keyPAD7 = 0xffb7; > const unsigned int keyPAD8 = 0xffb8; > const unsigned int keyPAD9 = 0xffb9; > const unsigned int keyPADADD = 0xffab; > const unsigned int keyPADSUB = 0xffad; > const unsigned int keyPADMUL = 0xffaa; > const unsigned int keyPADDIV = 0xffaf; ># 2881 "./CImg.h" > const double PI = 3.14159265358979323846; > > > const char *const data_font12x13 = >" .wjwlwmyuw>wjwkwbwjwkwRxuwmwjwkwmyuwJwjwlx`w Fw mwlwlwuwnwuynwuwmyTwlwkwuwmwuwnwlwkwuwmwuw_wuxl" >"wlwkwuwnwuynwuwTwlwlwtwnwtwnw my Qw +wlw b{ \\w Wx`xTw_w[wbxawSwkw nynwky<x1w `y ,w Xwuw CxlwiwlwmyuwbwuwUwiwlwbwiwrwqw^wuwmxuwnwiwlwmy" >"uwJwiwlw^wnwEymymymymy1w^wkxnxtxnw<| gybwkwuwjwtwowmxswnxnwkxlxkw:wlymxlymykwn{myo{nymy2ykwqwqwm{myozn{o{mzpwrwpwkwkwswowkwqwqxswnyozlyozmzp}pwrwqwqwq" >"wswswsxsxqwqwp}qwlwiwjybw`w[wcw_wkwkwkwkw mw\"wlwiw=wtw`xIw awuwlwm{o{mylwn|pwtwtwoy`w_w_wbwiwkxcwqwpwkznwuwjzpyGzqymyaxlylw_zWxkxaxrwqxrwqyswowkwkwkwk" >"wkwkwk}qyo{o{o{o{owkwkwkwkznxswnymymymymyayuwqwrwpwrwpwrwpwrwqwqwpwkwtwlwkwlwuwnwuynwuwmyTwkwlwuwmwuwnwkwlwuwmwuwkxlwuxmwkwlwuwnwuynwuwTwkwlwuwmwuwlwm" >"wkwtwUwuwuwowswowswowswowsw;wqwtw_ymzp~py>w bwswcwkwuwjwuwozpwtwuwnwtwowkwjwmwuwuwkwIxmxuxowuwmwswowswmxnwjwhwowswowsw0wmwowswuwnwrwowswpwswowkwjwrwqw" >"rwpwkwkwtwnwkxsxqxswowswpwswnwswpwswowrwnwmwrwqwqwqwswswrwswowswjwpwlxjwkxuxLw[wcw_wSwkw mw\"wlwiw=wtwmxlwFw cwswnwuwnwkwjwswo{pwrwpwtwtwpwswby`w`yUwlw" >"twpwqwpwswowlw\\wrwrxuwHwrwfwuwjwlwlwTyuwVwlwtwawswowswowswcwuwmwuwmwuwmwuwmwuwlwkwuwnwswpwkwkwkwkwkwkwkwkwswoxswowswowswowswowswowswowrwpwswpwrwpwrwpw" >"rwpwrwpwswoznwtw Ww (wGwtwtwqwqwqwuwuwuwqwswuwqwqw=wqxtw`{nzp~q{ozowrwnxmwtwow bzawkwuwl}rwuwnwtwuwnwtwowkwjwlyjwIwlwswmwiwkwnwuwnwkwhwnwswowswowkwew" >"ewixnwsytwswuwnwrwpwkwrwpwkwkwkwrwpwkwkwuwmwkxsxqwuwtwpwqwqwswowqwqwswowiwmwrwpwswowtwtwpwuwmwuwjwowkwjwlxsxXynzmymznyozlzoznwkwkwtwnwkzuyrzmynzmzowux" >"myozmwswpwrwowtwtwrwrwpwrwp{mwlwiwHyuwpwtwkwmxlynzoxswmwmwswnwswowtxq|owtwtwpym{p{owswnwuwmwlwkwqwqxuwuxqwrwpwtwtwqwqwowlwuwuwkwmwlwtwowuwuwdwjznwl{nw" >"uwnwkx_wtxtwswtwlwtwWwuytwgyjwmwjwawswoyuwVwlwtwnwtwmwtwnwtwmwuwmwlwuwmwuwmwuwmwuwmwuwmwuwmxuwowkwkwkwkwkwkwkwkwkwrwpwuwtwpwqwqwqwqwqwqwqwqwqwowtwpwsw" >"uwqwrwpwrwpwrwpwrwowuwnwswowuwlymymymymymymyuyqymymymymynwkwkwkwjynzmymymymymykwmzowswowswowswowswpwrwozowrwW}q}qwtwtwqwtwtwqwtwtwA}rwuw_{p~r~r}pwtwow" >"rwnxmwtwow aw_w]wtwpwuwmxuwmybwjwlyjwIwlwswmwiwnynwtwnznzkwmynwswTyp}pylwmwtwtwtwswuwn{owkwrwp{o{owk|pwkwkxlwkwuwuwuwqwuwtwpwqwqwswowqwqwswoykwmwrwpws" >"wowuwuwuwowkwjwnwkwjwDwowswowkwswowswowkwswowswowkwkwuwmwkwswswswswowswowswowswoxlwswowkwswpwrwowtwtwqwtwowrwlwoxkwhxVxuxpwtypwuwjwnwtwnwkwswowtxnxmws" >"wowqwqwtwuxqwtwnwtwtwqwswowswmwm{nwuwlxnwkwqwqwtwtwqwrwpwtwtwqwuyuwpwiwhwnwmwrwnwbwkwuwlwlwswoxuxowlwtw`wuwrwszmwtwo}dwuwtwuw[}qymx`wswoyuwow_ylxlwtwo" >"yuwoyuwoyuwmwlwuwmwuwmwuwmwuwmwuwmwuwmwt{swk{o{o{o{owkwkwkwlztwpwuwtwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowuwiwkwkwkwkwkwkwswswkwswowswo" >"wswowswowkwkwkwkwswowswowswowswowswowswowswcwtxowswowswowswowswpwrwowswpwrwWwtwtwqwqwqwuwuwuwqwuwswqwqw>wowuw`}q~q|q}qwrwpwrwowtwnwtwo~ izaw]wtwoykwux" >"qwtwswfwjwmwuwuwn}eyaxlwswmwjwjwpwswjwowswmwmwswnzWy]ypwlwtwtwuwswswowrwpwkwrwpwkwkwsyqwrwpwkwkwuwmwkwuwuwuwqwtwuwpwqwqznwqwqzkynwmwrwowuwnwuwuwuwowkw" >"jwnwkxkwGzowswowkwswo{owkwswowswowkwkxlwkwswswswswowswowswowswowjxmwkwswowtwnwuwuwuwpxmwtwlwlwlwiwlytwewtwtwqwswowtxoznwswnxmwswnwuwmwuwnwswowtwtwqwtw" >"twqwtwnwtwtwqwswowswmwmwswowswmwmwkwqwqwtwtwqwrwowuwuwpwuyuwq~own~own~owbwkwuwmznwswmwbwswawuwrwgwtwhwdwuytwXwJwswnxuw=wtwmwswowtxowswqxmwswowswowswow" >"swowswowswnwtwowkwkwkwkwkwkwkwkwkwrwpwtwuwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowtwmznznznznznzn~swk{o{o{o{owkwkwkwkwswowswowswowswowswow" >"swowswo}qwuwuwowswowswowswowswowtwnwswowtwUwuwuwowswowswowswowsw@}qx`}q~pzo{pwrwpwrwowtwnwtwow aw_w_}owuwmwuwtwrwswuwewjwkwiwJwkwswmwkwiwp|kwowswmwmws" >"wkwWym}mypwlwszr{owrwpwkwrwpwkwkwqwqwrwpwkwkwtwnwkwtwtwqwtwuwpwqwqwkwqwqwtwiwnwmwrwowuwnwuwuwuwpwuwlwkwmwjwkwHwswowswowkwswowkwkwswowswowkwkwuwmwkwsws" >"wswswowswowswowswowhwnwkwswowtwnwuwuwuwpxmwtwmwkwlwiwmwtydwtwtwqwswowswowtwnwswowkwswnwuwnwtwnwswowtwtwqwtwtwqwtwnwtwtwqwswowswmwmwswowswnwlwkwqwqxuwu" >"xqwrwnyowqwpwiwhwpwuwuwowrwpwuwuwdwkwuwlwlwswo{owkxuwawtxtwszmwtwiwdwuwtwuwXwJwswmwuwKzmwtwlwtxowrwpwtxrxl{o{o{o{o{o{o{owkwkwkwkwkwkwkwkwkwrwpwtwuwpwq" >"wqwqwqwqwqwqwqwqwowtwpwuwswqwrwpwrwpwrwpwrwnwmznwswowswowswowswowswowswowswowswowkwkwkwkwkwkwkwkwkwswowswowswowswowswowswowswcwuwuwowswowswowswowswowt" >"wnwswowtwTymymymymy=wmw^wuwuwmxlxmyowrwowtwnwtwmxmw bwswIwuwmwuwmwuwtwrxswdwjw]wJwkxuxmwlwlwswlwjwowswmwmwswlwSycyawlwswowrwowswpwswowkwjwrwqwrwpwkwkw" >"swowkwqwqwsxowswpwjwswpwswowrwnwmxtxnwlwswpwswmwlwlwjwkwHwswowswowkwswowswowkwswowswowkwkwtwnwkwswswswswowswowswowswowkwswowkwswnxlwswpwtwmxmwjwlwiwTx" >"uxpwtxowswowtwnwswowkwswnynwtwnwswowtwtwqxuwuxqwtwnwtwtwqwswowswmwlwuwnwswowkwjwswo{pwrwmwmwswnwjwiwnymwtwnycwkwuwlwl{mwmwiw_wrwdwtwVwrw*wswmwuw?wtwlw" >"tzqwrwpwtzswkwswowswowswowswowswowswowswnwswpwkwkwkwkwkwkwkwkwswowsxowswowswowswowswowswowrwpwswpxtxpxtxpxtxpxtxnwmwkwswowswowswowswowswowswowswowtxow" >"kwswowswowswowswowkwkwkwkwswowswowswowswowswowswowswlwnxtwowswowswowswowswnxmwswnx >wlw\\wkx`wnwrwoznwtwmxl| gybw^wtwozmwsxpzuxfxlx]wnw_wlxjyn{o{nykwnz" >"mymwkynymwkwewewjwjwrwswqwp{myozn{owizpwrwpwkwkwrwp{owqwqwsxnyowiyowrwozmwlzmwlwswqxsxnwm}qwjxlwGzozmymznynwjzowswowkwkwswowkwswswswswnynzmzowjymxlznx" >"lwswqwrwnwm{mwlwiwHxuxpzmxlymynwswmwnwrwozmxuxo{pwtxn{pzmykwmyo}p{owkyuynwnwrwmwly`w_w_wbwjzo{pwqwnwmwhw_z>zY}M|nwuw2wqwqwryrwqwqyowqwqwqwqwqwqwqwqwqw" >"qwqwqwr{qyo{o{o{o{owkwkwkwkznwsxnymymymymycwuynznznznzmwmwkwuynznznznznznznyuzrymymymymynwkwkwkwjynwswnymymymymybzmznznznznwlzmw hwHwlwSwTw <w8z ]" >"x tx Zxjwmx RwWw/wgw pw_ynwky=wCwmwaw\\w_wnw 1wIwlz 'wiwuwaw mw Pw swlwjw hw f| pyWx/wgw rxSw/wCwmwaw\\w_wnw 1w AwRx nw Pw txk" >"wlxm"; > > > const char *const data_font20x23 = >" 9q\\q^r_rnp`qnq`plp7q\\q^q_qmqbq\\q^q_qmqHqmp_q\\q^r_rnp`qnq7q\\q^q_qmq_q \"r " >" Mq^q^qnq`pnr`qnq`plp6q^q^pmp`qmqaq^q^pmp`qmqIpmq]q^q^qnq`pnr`qnq6q^q^pmp`qmq`q \"plp 'q 5qmq Vq " >" Xq [plp 3qYq_p^rnpLplp8qYq_qNqYq_q4rmpaqYq_q_rmp%qYq^pGq Irc|!pKp]raqjq`p HtNq_qmq\\plqbp_shpdscq[q^q[p [q]s_r`uau]rbv`tcxbua" >"t LsZucrav_udwcxdw`udqiqeq]q]qjreq]sksgrjqbtcv_tcvaud{eqiqgqfqgqjsjqlrjrhrirfzfs`q[sZqMqJqCqNsLq]q]q]q]q .scq]s \\sKt%r [s^raxdxat_qazgqlqlqctJqIqIq" >"LqHsOqiqOtaqmq\\uft nufu`sLs`t\\qKv<r\\rLrepirepitgpeq]r^r^r^r^r^r^{gudxdxdxdxdq]q]q]q]wcrjqbt`t`t`t`tLtlpgqiqeqiqeqiqeqiqgrireq[s_q[q_pnp_pnr`qnq`plp7q[" >"q_s`qmqcq[q_s`qmq]pkpbpmr`q[q_s`pmraqmq8q[q^pnp_qnq^qaq\\qnq !pnqd{!pJp^tdunucr _y dvOq_qmq\\plpap_pmpipdudq[p\\p_plplp _q^ubtawcw^rbvavdxcwcw Ou]yerawb" >"xeyexdwbxeqiqeq]q]qkrdq]sksgrjqdxewbxewcwe{eqiqfqhqfqjsjqkqjqfqiqezfs`q[s[sMpJqCqOtLq]q]q]q]q q 1tcq]t ^vaq_w&r \\u_raxdxcxcuczgqlqlqexMsJqJsMq[p^uPq" >"iqdq]uaqmq]qkqcq!qkqguaqmqNpkp\\p]pKtmp:p]plpKpfpfpfpcpipdq]r^r^r^r^r^r^{ixexdxdxdxdq]q]q]q]yerjqdxdxdxdxdxPwnpfqiqeqiqeqiqeqiqfqiqdq\\u_p[p^pnpKqnq_r5p" >"[p^pmp`qmqbp[p^pmp`qmq]tKp[p^pmpLqmq7p[p]pnp_qnq^p`q\\qnq5uauauauaucq`qhq4p]pKr_ueunucr `q \\rkpOq_qmq\\plpctbqmqkqerlpdq\\q\\q_qnpnq\\q%q^qkqcqnqapjrdpjr`" >"sbq]rkp^qcrkrerkq Oplr`sirgtbqkrdripeqjsfq]q]ripeqiqeq]q]qlrcq]sksgskqerjrfqkrdrjrfqkrerjp`q`qiqfqhqeqkskqiqlqdqkq\\qeq]qZq\\qmqNqKqCqOqIq5q]q q 1q`qZq" >" _rlqbtaqjp$q ^qkqatbr^q]rjrewdqhqgqlqlqfrjrOuKqKu8p_rlpOqkqcq]qFpgpcp\"pgpTpkp\\q^p\\p^qLump:p^pjpLpgpepgpbpjpPt`t`t`t`t`qnq_qnqcripeq]q]q]q]q]q]q]q]qj" >"sfskqerjrfrjrfrjrfrjrfrjrRrjrfqiqeqiqeqiqeqiqeqkqcvbrlq`q]q_plp Iq]q_qmqNq]q_qmqKtIq]q_qmq ^q]q^plpKq`q mqkqcqkqcqkqcqkqcqkqdq`qhq5q^qLt`ueunudtasbqip" >"`q`pipcq [qIq_qmq`{gvcqmqkpdq_q\\q\\q]rZq%q_rkraqZq]qaqnqbq]qXqcqiqeqiq1pSpXq`qfrhqnqbqjqdq]qhqfq]q]q]qiqeq]q]qmrbq]qnqmqnqgskqeqhqfqjqdqhqfqjqeqYq`qiq" >"frjreqkskqirnrdrmr]qdq]qZq]qkq)qCqOqIq5q]q q 1q`qZq _qkq_qaq mq ^qkqaqnqar_q]qhqfrnqnreqhqgqlqlqfqhqPwLqLw9p_q_phqdqkqcq]qGplslpiu#pmtlpUpkp\\q_q_r8u" >"mp:p^pjpLpgpepgperipcq^qnq`qnq`qnq`qnq`qnq`qnq`qmqcq]q]q]q]q]q]q]q]q]qhqfskqeqhqfqhqfqhqfqhqfqhqdphpfqirfqiqeqiqeqiqeqiqermrcwcqkq [q 3qZp Oq nqmqm" >"qeqiqeqiqeqiqeqiqeq_piq4q^pLvatd|evdvcqipasaqkqdq [qHq_qmq`{hrnpmpcqmqlpcq_q\\pZp]rZq%q_qiqaqZq]qapmqbq^qWqcqiqeqiqdq]qUsSs[qaqdqhqnqbqjqeq\\qgqgq]q^q\\" >"qiqeq]q]qnraq]qnqmqnqgqnqlqfqfqgqjqeqfqgqjqeqYq`qiqeqjqdqlqmqlqhqnqbqmq]rdq]qZq^pgp=taqns`s`snqatdv_snqcqnsbq]q]qkqcq]qnsmshqns`saqnsasnqcqnr`tbvaqjqe" >"qiqdqkqkqjrkreqiqdw`q`qZq#tnreqkq^qatauaqnsdqiq`raqjqdqiqdpmrcxdqmqmqatbxfyeqiqbqnq`r`q^qfqhrmqmrfqhqgqlqlqgqfqep[pnqnp[p`q`pipbpnqnpNq]taq^qnqnqbqmqb" >"q\\qIqmpkpmqkqkp$qmpkpmqVqmq\\q`q[pLqjqeump:p^pjpLphpdphpapkpbq^qnq`qnq`qnq`qnq`qnq`qnq`qmqdq\\q]q]q]q]q]q]q]q]qgqgqnqlqfqfqhqfqhqfqhqfqhqfqfrjrhqiqnqgqi" >"qeqiqeqiqeqiqdqmqbqkrdqmsbt`t`t`t`t`t`tlsfs_t`t`t`tbq]q]q]q[tbqns`s_s_s_s_s\\q`smpdqjqdqjqdqjqdqjqeqiqdqnscqiq;qlqlqgqgqgqnqmqnqgqjqnqgqgqfq_qjq<{fpjpL" >"vatd|fxeqkqdqipasaqkqdp \\yNqGplqeqmp`qmqmqcrLqZq`qnpnq\\q%q_qiqaqZq^rbqmqbubqms^qaqkqdqiqdq]qXuf{fu_q`qlrnqlqjqlqcqkreq\\qgqgq]q^q\\qiqeq]q]t`q]qnqmqnqg" >"qnqlqfqfqgqkreqfqgqkres[q`qiqeqjqdqlqmqlqhs`s]rcq]qZq#vbwcvbwcwev`wcwcq]q]qlqbq]vnthwcwcwcwcubwcvaqjqdqkqcqkqkqiqkqdqiqdw`q`qZq7smsfxdqlr^qavdvawdqkq_" >"raqjqdpgpeqntdxdqmqmqcwdyfyeqiqcqlq`raq^qfqhqlqlqfqhqgqlqlqgqfqfrZqZraqarkraqLq^vbq^wbqmqbq]tKpmpfpkpjp_plp9plpkplpUs[qaqZpLqjqeump:p^pjpaplp_piqdpiqa" >"plqbq_qlqbqlqbqlqbqlqbqlqbqlqbrmqdq\\q]q]q]q]q]q]q]q]qgqgqnqlqfqfqhqfqhqfqhqfqhqfqerlrgqjqmqgqiqeqiqeqiqeqiqcsaqjqdqnq`vbvbvbvbvbvbvnuivbwcwcwcwcq]q]q]" >"q]wcwcwcwcwcwcwOwcqjqdqjqdqjqdqjqeqiqdwdqiq;pkqkpgpepgpmumpgpjrmpgpepfq_qkq;{hrkpLxdxf|fxepipdqipas`pkpcp ZqHqGplpdt_pmplpmshsMqZqaplplp]q&q^qiqaq[qa" >"t`plqbvcx_q`ucrkr:uc{cucq`qlvlqjqlqcwdq\\qgqgxdvcqjtfyeq]q]s_q]qmsmqgqmqmqfqfqgwdqfqgwcv_q`qiqdqlqbqmqmqmqfr`s]qbq\\q[q#pjqcrlrdqkpcrlrcqkrdq^rlrcrlrdq]" >"q]qmqaq]rlrlqirlrdqkqcrlrerlrcr_qjpbq]qjqdqkqcqlslqhqmqbqkq^q_q`qZq_tjpSqmsmpgrlsdqnsaqmqbqkqdq\\rlrdqlq_raqjqeqgqgrnqnrdqlqcqmqmqcqkqerkq`qaycqlq_rbq^" >"qfqhqlqlqfqhqgqlqlqgqnvnqgrYqYrbqbrirbqLq_rnpmpdwaqmqcydq^qlqLpmpfpkpkq`plpa{RpltkpB{gpXpLqjqdtmpcqHp]plp_plp`pipjpipipmsfplpjphr_qlqbqlqbqlqbqlqbqlqb" >"qlqbqlxkq\\xdxdxdxdq]q]q]q_vjqgqmqmqfqfqhqfqhqfqhqfqhqfqdrnrfqkqlqgqiqeqiqeqiqeqiqcsaqjqdqnq`pjqcpjqcpjqcpjqcpjqcpjqcpjrlrjqkpbqkrdqkrdqkrdqkrdq]q]q]q]" >"qkrdrlrdqkqcqkqcqkqcqkqcqkqOqkqcqjqdqjqdqjqdqjqdqkqcrlrdqkq:pnwnpgpnwnpgplslpgpkrlpgpkqkpfq^qlq6qaqlpMzfzfzfzgqipdqipbqmp`qmqc| fqHqHqlpcuasmplpmpiul" >"qSqZq]p^{+q^qiqaq\\q`ubqlqbpkrdrkrarawcx<tEteq`qlqlqlqjqlqcwdq\\qgqgxdvcqjtfyeq]q]t`q]qmsmqgqmqmqfqfqgvcqfqgv_t`q`qiqdqlqbqmqmqmqgs_q]qaq\\q[q\"vcqjqeq]qj" >"qdqiqdq^qjqcqjqdq]q]qnq`q]qkqkqiqjqeqiqdqjqeqjqcq^s^q]qjqdqkqbqmsmqgqmqbqkq_qas_qYsc{Spkqkphqkrcqntcvcqiqeq\\qjqdqmr`tbqjqeqgqgqmqmqdqlqcqmqmqdqiqfqiqa" >"qaycqlq_qaq^qfqhqlqlqfqhqfqmqmqfqnvnqh}cqc}cqc}cqLq_qmpawbqkqasaq^qkqMpmpfpjsnpaplp`{RplpmqkpB{huatKqjqbrmpcqJt^r]plpctlpjqktlpmpkpltlpjqhq^qlqbqlqbql" >"qbqlqbqlqcrlrcqlxkq\\xdxdxdxdq]q]q]q_vjqgqmqmqfqfqhqfqhqfqhqfqhqfqcteqlqkqgqiqeqiqeqiqeqiqbq`qkrdqmravbvbvbvbvbvbvjqkq]qiqeqiqeqiqeqiqdq]q]q]q^qiqdqjqe" >"qiqeqiqeqiqeqiqeqiqd{hqkpnqdqjqdqjqdqjqdqjqdqkqcqjqdqkq:pnwnpgpnwnpgplslpgplrkpgpkqkpfq^qlq6qaqmqMzg|fxdxfqipdqipbqmqaqmqcp \\wLqK{dt]qmqmqkrmrnrSqZqK" >"{TtKq^qiqaq]r\\rdqkq\\qdqiqaqarkrcsmq<tEtfq_qlqlqlqkqjqdqjqeq\\qgqgq]q^qgqfqiqeq]q]qnraq]qmsmqgqlqnqfqfqgq^qfqgqkq]raq`qiqdqlqbqnqkqnqgt`q^raq\\q[q#wcqjqe" >"q]qjqdydq^qjqcqjqdq]q]s_q]qkqkqiqjqeqiqdqjqeqjqcq]uaq]qjqcqmqaqmpmpmqfs`qmq_ras_qYscpjtRpkqkphqkrcqkreqlrcqiqcr_qjqdqmq_qnqbqjqeqlqlqgqmqmqdqlqcqmqmqd" >"qiqfqiqaqaqiqdqjqaq`q^qfqhqlqlqfqhqfrnqnrfqfqh}cqc}cqc}cqLq_qmp_q^qkq`qMrlqMpmpfpWplpUqRplplqlp=q&qjq`pmp _plp]qkpnpdqhpeqkpnpiq^qjqdqjqdqjqdqjqdqjqdq" >"jqdqkqdq\\q]q]q]q]q]q]q]q]qgqgqlqnqfqfqhqfqhqfqhqfqhqfqbrdqmqjqgqiqeqiqeqiqeqiqbq`wcqlrcwcwcwcwcwcwc~kq]yeyeyeydq]q]q]q^qiqdqjqeqiqeqiqeqiqeqiqeqiqd{hq" >"lpmqdqjqdqjqdqjqdqjqcqmqbqjqcqmq9pkqkpgpepgpmumpgpmrjpgpepfq]pmq:{epmpLzg|evbveqipdqipbqmqaqmpbq [qHqK{cpmq^plqmqkqktRqZqFqOtKq^qiqaq^rZqdy^qdqiqaqaq" >"iq]q:uc{cudq_qlqlqmqjxdqiqfq\\qgqgq]q^qgqfqiqeq]q]qmrbq]qlqlqgqlqnqfqfqgq^qfqgqkr]qaq`qiqcqnqaqnqkqnqhrnq`q_r`q\\q[q$qjqcqjqeq]qjqdydq^qjqcqjqdq]q]s_q]q" >"kqkqiqjqeqiqdqjqeqjqcqZsbq]qjqcqmqaqnqmqnqfs`qmq`r^r`qZr9pkqkphqkrcqjqeqkqcqiqet_qjqcqnq`rnqbqjqeqlqlqgqmqmqdqlqcqmqmqdqiqfqiqaqaqiqdqjqbr`q]qhqgrmqmr" >"fqhqeweqfqgrYqYrdpnqnpdrirdpnqnpNq_qmp_q]qmqcyPrmqMqmpkpmqkvaplpVqRqmpkpmq=q&qjq`pmp(v_plp\\pkpmpdphqepkpmpjq]xdxdxdxdxdxdwdq\\q]q]q]q]q]q]q]q]qgqgqlqnq" >"fqfqhqfqhqfqhqfqhqfqcteqnqiqgqiqeqiqeqiqeqiqbq`vbqjqeqjqdqjqdqjqdqjqdqjqdqjqdqjxkq]yeyeyeydq]q]q]q^qiqdqjqeqiqeqiqeqiqeqiqeqiqQqmplqdqjqdqjqdqjqdqjqcq" >"mqbqjqcqmq9qlqlqgqgqgqnqmqnqgqnqjqgqgqfq]qnq:{eqnpLzg|dt`tdqipcpipbpkp`sbq Zq plq`pmq_pkqmqkqjrQqZqFq'q]rkraq_rYqdy^qdqiqbq`qiq^q6uf{fuaq_qlyjzeqiqeq" >"]qhqfq]q]qhqfqiqeq]q]qlrcq]qlqlqgqkseqhqfq]qhqfqjq]qaq`qiqcqnq`skshrmraq_q_q[q\\q$qjqcqjqeq]qjqdq\\q^qjqcqjqdq]q]qnq`q]qkqkqiqjqeqiqdqjqeqjqcqXqbq]qjqcq" >"mqaqnqmqnqgqmq`s_q\\q`qZq7pmpnqmpgqkrcqjqeqkpbqiqeq\\qjqcs_qlqcqjqeqlqlqgqmqmqdqlqcqmqmqdqiqfqiqaq`qkqdrjrdr_q]riqfrnqnreqhqducqhqerZqZrdwdrkrdwOq_qmp_q" >"^w`q`q[sKplslpTplpWqQpmpkqnp<q&qjq`pmp aplp\\pkplpephqepkplpjq^zfzfzfzfzfzfxcq]q]q]q]q]q]q]q]q]qhqfqkseqhqfqhqfqhqfqhqfqhqcrnreriqfqiqeqiqeqiqeqiqbq`q]" >"qjqeqjqdqjqdqjqdqjqdqjqdqjqdqjqdq]q]q]q]q\\q]q]q]q^qiqdqjqeqiqeqiqeqiqeqiqeqiqQqnpkqdqjqdqjqdqjqdqjqbsaqjqbs7qmqmqeqiqeqiqeqiqeqiqeq]qnp7q]rJrnpnresnpn" >"sct_rcqipcqkqcqkqasaq [rkp&plpcplpnr`qkqmqkrltRqZqFq'q\\qkq`q`r_pjr^qcpjrcqkrbq`rkrdpkr3sSsLrlrnrhqhqeqjreripeqjsfq]q]riqfqiqeq]q]qkrdq]qgqgqkserjrfq]" >"rjrfqjrfpiraq_qkqbt`skshqkqaq`q^q[q\\q$qkrcrlrdqkpcrlrcqipdq^rlrcqjqdq]q]qmqaq]qkqkqiqjqdqkqcrlrerlrcq^pjqbq]rlrbs_rkrfqmq`s`r\\q`qZq6qlrfrmscrlrepkqbrk" >"qdqkpaqjqcs`rlqcrlrernsnrgrnqnrdqlqcrnqnrdrkqdqkraq`qkqdqhqer^q\\rkqdwdqhqbqarjrdpYqYpbubpipbuNq_rnpmpbq^qnqnq`q`qZqIpgpRplp7pgp;q&rlr`pmp bplp[pkufpiq" >"dpkukrlpcqhqfqhqfqhqfqhqfqhqfqhqfqjqcripeq]q]q]q]q]q]q]q]qjsfqkserjrfrjrfrjrfrjrfrjrdrlrfrjreqkqcqkqcqkqcqkqaq`q]qnplqeqkrdqkrdqkrdqkrdqkrdqkrdqksjpjq" >"kpbqipdqipdqipdqipdq]q]q]q]qkqcqjqdqkqcqkqcqkqcqkqcqkq^qbqkqcrlrdrlrdrlrdrlrbsarlrbs6qkqcqkqcqkqcqkqcqkqdq\\r7q\\qFp\\p]r^rcqipcvbqkqas`r \\vOqIqlpcw_pip" >"mpivnrRpZpEqbqIq^q[ubwdxdw]qcwbwaq_wcvbq]qRpSp[q^q^qhqexcxeyexdq\\xeqiqeq]q]qjrexdqgqgqjrdxeq\\xeqiqfx`q_war_ririqiqbqazfq[q\\q$xcwcvbwcxdq]wcqjqdq]q]qlq" >"bq]qkqkqiqjqdwcwcwcq^wbu`wbs_rkrgqkq`q`w`q`qZq$yewdqmq`wdvaqjqbr`qkqcyeyewcqlsdwcxdw`sauczexdq^umteucqhqbq`xLqJsKsMq^vdxdpgpaq`qYqIqkq bqkq?{+yapmp Jp" >"fpfpipcpfpiucqhqfqhqfqhqfqhqfqhqfqhqfqjxixexdxdxdxdq]q]q]q]yeqjrdxdxdxdxdxdrjrgpnwdwcwcwcwaq`q]qnuexdxdxdxdxdxdvnwjvbxdxdxdxdq]q]q]q]wcqjqdwcwcwcwcw^q" >"bwbwcwcwcwaq`w`q4uauauauaucq\\r7p[qFp\\p\\p\\pbqipasapip`q^y ctNqIqmqbu_phsgslrSq\\qEqbqIq^qZsawdxcu\\qbt^taq]uataq]q q]qgpiqfqfw`udwcxdqZudqiqeq]q]qirfxdq" >"gqgqjrbtcqZtcqirfv_q]s_r_rirjrircqazfq[q\\q#tnqcqns`s`snqaucq\\snqcqjqdq]q]qkqcq]qkqkqiqjqbsaqnsasnqcq]t_t_snqaq^rkrhrkraq`w`q`qZq#smrevbs^t`s`qjqbq`qiq" >"dqnrmqdrmrcubqkrcubqntat^r`sc|fxdq^umtcqaqhqbq^tJqIqIqLq]tcxLq`qYqHu `u>{+qnrmqapmp Kpepgpiuhpephscqfqhqfqhqfqhqfqhqfqhqfqhqixgudxdxdxdxdq]q]q]q]wcqjr" >"bt`t`t`t`taphpgplt`s_s_s_s_q`q]qmsctnqctnqctnqctnqctnqctnqbsktgs_uauauaucq]q]q]q[saqjqbs_s_s_s_sNpms_snqbsnqbsnqbsnqaq`qns_q !p Zp jp#q\\q6q7q l" >"q [sjq Qq -q OqZq]q Cq;q HqWq $rIq`qZq _q iqbqKqFqIq`q hp$q]u JqYpmpLp .p jp ]p Xr`q[r !p Tp\"p\\p6q6q mq Yx Qr -r Ps\\q_s" >" Ipkq:q HqWq $qHq`qZq _q iqbqKqFqIq`q hp$q]t IqYpmpLq /q kq Fq_q[q #s Tp\"q^q6p 1p Vu Rs YsJsMy &v<s HqWq &sHtcq]t _q i" >"qbqKqFqIq`q hp$q 2q2q /q kq Hs_q]s \"q (r Xy %t;r GqWq &rFscq]s ^q iqbqKqFqIq`q ,q4r 0r lr G" >"r^q *q kr i"; > > > const char *const data_font47x53 = >" " >" 9])]2_2]T\\8^U^3] E])]2`4^U^>])]2_4^U^ 6^T\\5])]1_2]T\\8^U^ K])]2`4^V^3] " >" U]*\\2a4`V\\8^U^5a F]*\\1\\X\\4^U^=]*\\" >"2a5^U^ 7aV\\4]*\\1a4`V\\8^U^ J]*\\1\\X\\4^V^3\\ " >" S],\\1\\W\\5g8^U^6c F],\\1\\V\\5^U^<],\\2]W]6^U^ 8h3],\\0\\W\\5g8^U^ I],\\1\\V\\5^V" >"^4\\ ;] " >" :\\-]2\\U\\6\\V`7^U^7]U] F\\-]2\\T\\6^U^;\\-]3]U]7^U^ 8\\Va1\\-]1\\U\\6\\V`7^U^ H\\-]2\\T\\6^V^5] =a " >" J] " >" N\\/]2\\S\\7\\T]6^U^7\\S\\ E\\/]2\\R\\7^U^:\\/]3]S]8^U^ 8\\T^/\\/]1\\S\\7\\T]6^U^ G\\/]2\\R\\7^V^6] =c L^ " >" *^ U` O^ )\\S\\ " >" !^$^3\\ E]U\\ K^$^4^ G^$^4] J^$^3\\ #^$^3\\ 4^ B[ " >"&^ Xe S^ (\\S\\ )Z Q^&^3^2]S\\ A\\S\\ K^&^3^ F^&^4_ >]S" >"\\9^&^3^2]S\\ W^&^3^ 6^ Q] M[ ?` ![1^H]?` =]4](\\ %` >b4c Bb ?`2a .a Ib Pb Aa <a @b Fb =b F^ :] '] Da A" >"].].].].] <_:]._ Xh ?c W^ @` La Pa Sa Va5^U^ @` \"f4_ >`0`*^ $^.` <^F]F^F]G`G] F\\S\\ ;b %a2a2a2a2a <bR" >"\\ D`4^(^3`4`U\\8^V^6\\S\\ J^(^3`4^U^@^(^3_4^U^/^/`U\\8^(^3`4`U\\8^V^ K^(^3`4^V^1^9]+^V^ ?` O\\ D\\6]M] We D]1]T] 9[3bJ\\@e<])]2])\\ " >" T]0d3_7h9i/_;k5f?n:f7e 3g :_8i3h@h9n?l5iB]H]C].].]J^B].`I`H_J]<g?g1g?g4hAuB]H]G]C]F]K_K]S^J^F^G^CrBb7]*b'_ D] :] '] Fc A].].].].] >a:]" >".a !^T_ Bg ` Dd2_8n?m7g3]:rD]P]P]@g <] 8] 8] B] 3e J^K^ If7^U^+b@d Fb@f5a Ad4e-] :f Ra0d AaF\\HaF\\HeJ\\?]._0_0_0_0_2\\U\\0tHh@n?n?n?n?].].].]" >"-h:_J]<g8g8g8g8g BhV]G]H]C]H]C]H]C]H]G^G^B]*d5](]2\\X\\4aW]8^V^6\\S\\ I](]3]X]5^U^?](]3\\W\\5^U^.^R[9aW]7](]2\\X\\4aW]8^V^ J](]2\\X\\4^V^1]8]+^V^ ?a>w " >"P[ 9[/a:aQa7[ Wl \"h E]1]T]+\\R\\;[4dL]Ag=])]2])\\ U^1f8c8k;j1`;k7h?n;h9g 5i*b:_8k6kBl=n?l7mD]H]C].].]L_A].`I`H`K]>kAj6kAj9kBuB]H]F]E]E^L_L^" >"R^L^D^I^BrBb7^+b(a D] ;] '] Gd A].].].].] ;] (b:].b #^Q] Dj !a Ff3_8n?m8i4]:rD]P]P]Bk ?_ 9] 9_ C]&[0f I]K]=]0g7^U^-fC\\S] IfBf6c B[" >"S]5[S].] <i R\\W\\1]T] B\\W\\G]H\\W\\G]H[S]K]?]._0_0_0_0_2c1uIkBn?n?n?n?].].].]-l>`K]>k<k<k<k<k EoF]H]C]H]C]H]C]H]F^I^A],h6]*]2\\V\\6]Wa7^V^6\\S\\ H]*]2\\V]6^U" >"^>]*]3]W]6^U^._V_;]Wa5]*]2\\V\\6]Wa7^V^ I]*]2\\V\\5^V^2]7]+^V^ @]W\\=v P[ 9\\1c<cSd:] \"o #_S^ F]1]T],]S];[5^V^N]A_T]=]*]0]*\\ U]1^T^;e8`S_<" >"^R_2`;k8^R]?n<_T_;^S^ 6^S_.i>_8m:`R`Cn?n?l9`QaE]H]C].].]M_@].aKaH`K]?`S`Bk8`S`Bk;_R_BuB]H]F]E]D]MaM]P]L]B^K^ArB]1]&])c D] <] '] G] :].].].].] " >";] (^6]*^ #]P^ E^P\\ V^ H^T^4_8n?m:`S`6]:rD]P]P]C`S` Aa :] :a D]&[1^S\\ I^M^=]0^R[7^U^/^R^EZO\\ L^R^ N]U] :],\\0] <j M\\2]R] >\\H]B\\H]=\\M]>" >"]._0_0_0_0_0_/uK`R`Cn?n?n?n?].].].]-n@`K]?`S`>`S`>`S`>`S`>`S` H`ScE]H]C]H]C]H]C]H]E^K^@],^T^5],]1\\V\\6\\U`7^V^6]U\\ F],]2\\T\\6^U^=],]2\\U\\6^U^-e9\\U`4],]1\\" >"V\\6\\U`7^V^ H],]1\\V\\5^V^3]6]+^V^ B`1`1`1`1`6]W]>u P[ 9]2e>eUf;^ %q $^O\\ F]1]T],]S];[5]T]N\\@]P[=]*]0]2ZR\\RZ $]2]P]<_W]8]N]<ZL^4a;]+]MZ/]<^P" >"^=^Q^ 7\\O]1nAa9]N_<_M]C]NaA].]+_L^E]H]C].].]N_?].aKaHaL]@^M^C]P_:^M^C]P_=^M\\6]6]H]F^G^D]MaM]P^N^B^K^-^B]1]&]*e D] =] '] H] 9].].].].] ;] )" >"^5])^ %^O]8^3]LZ U] I^R^6a9_0]+^M^7]:]H]D]P]P]D^M^ Cc ;] ;c E]&[2^PZ H]M]<]1^-^U^1]L];[ N]L] Q]S] :\\,\\1] <dU\\ M\\2\\P\\ >\\H\\A\\H\\<\\M\\=]/a2a2a" >"2a2a1_/]V];_M]C].].].].].].].]-]ObBaL]@^M^@^M^@^M^@^M^@^M^ J^N`D]H]C]H]C]H]C]H]E^K^@]-^Q]5].]1\\T\\7\\S]6^V^5c E].]2]S\\7^U^<].]2\\S\\7^U^,a6\\S]2].]1\\T\\7\\S" >"]6^V^ G].]1\\T\\6^V^4]5]+^V^ De6e6e6e6e9\\U\\>u P[ :_3f@gVf<_ &r $]M[ F]1]T],\\R]>d<^T^P]A^OZ=]+].]4]T\\T] &^3^P^=[S]8[K].]4\\X];],]!]<]N]>^O^ " >" 8ZM^3`P`Ba9]M^=^J\\C]K_B].],^H\\E]H]C].].]O_>].aKaHaL]A^K^D]N^<^K^D]N^>]JZ6]6]H]E]G]C]MaM]O^P^@^M^-^A]1]&]+_W_ D] >] '] H] 9] B].] ;] )]4](]" >" %]N]:c6] G] J^P^7a8_1],^K^;c=]H]D]P]P]E^K^ Ee <] <e F]&[2] =^O^<]1] 0\\H\\<\\ P\\H\\ R\\Q\\+]3\\,\\2] <eU\\ M\\3]P\\ >\\I]A\\I]<\\N]=]/a2a2a2a2a2a1]U]<" >"^J\\C].].].].].].].]-]K_CaL]A^K^B^K^B^K^B^K^B^K^ K]K^D]H]C]H]C]H]C]H]D^M^?]-]P]4]0]1\\R\\ Ha C]0]2]R] E]0]2\\Q\\ 9c 9]0]1\\R\\ !]0]1\\R\\ ?]4] Di:i:i:i:i" >";\\6]G] P\\ :`5g@gWh>a (_ J]KZ F]1]T],\\R\\?h>]R]P\\@]1]+].]3^V\\V^.] T]2]N]5]8ZJ]-]6]X];]-]!^=]L]?]M] *]5_J_Ec:]L^>]H[C]I^C].],]F[E]H]C].].]" >"P_=].]X]M]X]HbM]A]I]D]M]<]I]D]M]?]%]6]H]E]G]C^NaN^N]Q^>^O^-^@]0]'],_U_ &] '] H] 9] B].] ;] )]4](] %]N]:d7] F] K]N]8c8^1],]I]>i@]H" >"]D]P]P]E]I] Fg =] =g G]&[2] <]O];]1] 1\\F\\=\\ Q\\F\\ S\\Q\\+]3\\.] IeU\\ M\\3\\N\\ ?\\I\\@\\I\\=]M\\<]0c4c4c4c4c3a1]U]<]H[C].].].].].].].]-]J_DbM]A]I]B]I]B]I]B]I]" >"B]I] L]J_E]H]C]H]C]H]C]H]C^O^>].]N] .] '`X_ I] FbWa=bWa=bWa=bWa=bWa<\\6^I^ ?Z2[ :a5gAiXh?c *^ H] 7]1]T]-]S]Aj>]R]Q]@]1]," >"],\\1^X\\X^,] T]3]L]6]'].]7]W];]-]!]<]L]?]M^ +]6^F^F]W]:]K]?]FZC]H^D].]-]DZE]H]C].].]Q_<].]X]M]X]H]X]M]B]G]E]M^>]G]E]M^@]%]6]H]E^I^B]O^X]O]M^R^=]O^" >"-^@]0]']-_S_ '] '] H] 9] B].] ;] )]4](] %]N]:e8_ H] L]M]8]W]7^2]-]G]AmB]H]D]P]P]F]G] Hi >] >i J[3] ;^Q^;]1] 2\\RbT\\Ge R\\VdR\\ T\\" >"Q\\+]4\\2a IfU\\ M\\3\\N\\ ?\\J\\?\\J\\AaM\\ G]W]4]W]4]W]4]W]4]W]4c3^U]=]FZC].].].].].].].]-]H]D]X]M]B]G]D]G]D]G]D]G]D]G]A[H[B]J`E]H]C]H]C]H]C]H]B]O^>g8]N] " >" 1]T_ 3[ 9] G_O^?_O^?_O^?_O^?_O^=\\5]I^ @\\3[ ;c6gAy?d7`8]L]7^7]L]>^ H] 6]1]T]-]S]B_W[U]>]R]R]?]1],],]0d*] T]3]L]6]'].]7\\V];]" >".] ]<]L]@]K] 7Z PZ X]7^D^G]W]:]K]?]/]G]D].]-]/]H]C].].]R_;].]X^O^X]H]X^N]B]G]E]L]>]G]E]L]@]%]6]H]D]I]A]O]W]O]L^T^<^Q^-^?]0]'].^O^ Sb7]U`2b4`U]8a8])`" >"7]T_ M].]%_O_@_2`0`3`/_3c9] )]4](] N_6]N]3^7a/c0_ <^ D[U^ Ga N]L]9]W]6^3]-]G]B`W]W`C]H]D]P]P]F]G] I_X]X_ ?] ?_X]X_ Nb7]2ZFZ=]Q]:]0] 3[SfU[I" >"g R[UfS[ T\\Q\\+]5]2a IfU\\ M\\3\\N\\ ?\\K]?\\K]AaN] G]W]4]W]4]W]4]W]4]W]4]W]3]T]=]/].].].].].].].]-]G]E]X^N]B]G]D]G]D]G]D]G]D]G]B]J]C]KbF]H]C]H]C]H]C]H]B" >"^Q^=j;]P_9b3b3b3b3b3b3bN`Bb3a2a2a2a V_2_2`1`1`1`1` ;aU] :]U` S^T]U^A^L^A^L^A^L^A^L^?]5]I] @^5\\ <e7gAy@f;e:]L]8`8^N^?^ G] 6]1]T]-\\R\\A]U[" >"RZ>]R]R\\>]1],],].`(] U^3]L]6]'].]8]V];].]!^<]L]@]K] :] P]#^8^A]I^W^;]K]@].]G^E].].].]H]C].].]S_:].]W]O]W]H]W]N]C]E]F]L]?]E]F]L]@]%]6]H]D]J^A]O]W]O]" >"L^U^:^S^-^>]0^(]/^M^ Wh:]Wd6f8dW]:e>h2dW]?]Vd<].].]O_>].]WdScK]Vd8f;]Wd7dW]?]Wa6h>h6]L]B]I]A]P`P]K^L^B^K^@l4]4](] PdU]A]N]2^8e5g;]Vd?^J^8]6]L] E]V`" >">pA]S]S]:e6kDo>]L]:^W^6^4].]E]D_U]U_D]H]D]P]P]G]E] K_W]W_ @] @_W]W_ Qf9]3\\H\\>^S^:]0_ 6[ThT[K]Q\\ S[T\\R]S[ U]S]+]6],] ?]L]@fU\\ M\\3\\N\\ ?\\K\\>\\K\\;]O\\ G" >"^W^6^W^6^W^6^W^6^W^5]W]4^T]>].].].].].].].].]-]G^F]W]N]C]E]F]E]F]E]F]E]F]E]D_L_E]K]W]F]H]C]H]C]H]C]H]A^S^<k<]Ra<h9h9h9h9h9h9hTeFf7e6e6e6e;].].].]\"^;]V" >"d8f7f7f7f7f/^6eX]@]L]?]L]?]L]?]L]B^K^?]Wd>^K^ O]S]S]B]I]B]I]B]I]B]I]@]5^K^ @]4[ ;f8gAyAg<h<]L]8`7]N]>] F] 6]1]T]-\\R\\B]T[6]R]S]>^2]-]*\\.`(] U" >"]2]L]6]'].]9]U];].]!];]L]@]K] =` P`'^7]?\\I]U];]K]@].]F]E].].].]H]C].].]T_9].]W]O]W]H]W^O]C]E]F]L]?]E]F]L]@]%]6]H]C]K]@^P]W]P^K^V^9]S]-^=]/](]0^K^ Xi" >";]Xf9h9fX]<h?h3fX]?]Xg=].].]P_=].]XfVfL]Xg:h<]Xf9fX]?]Xb7i>h6]L]A]K]@^Q`Q^J^N^@]K]?l4]4](] QfW^A]O^1]6f9h;]Xg@_K]7]6]L]=]G]C^Wc@pA]S]S]<h9mDo>]L]:]U" >"]5^5].]E]E^S]S^E]H]D]P]P]G]E]@Z+]V]V^-Z4]5ZKZ:]V]V^ Sh9]4^J^>]S]9]._ 8[U_Q[T[L]P\\ S[T\\Q]T[ T]U]*]7]*] @]L]@fU\\ M\\3\\N\\ ?\\L]>\\L]:]Q]:]1]U]6]U]6]U]6]" >"U]6]U]6^W^5]S]>].].].].].].].].]-]F]F]W^O]C]E]F]E]F]E]F]E]F]E]C_N_D]L^W]F]H]C]H]C]H]C]H]@]S];]P_=]S^8i:i:i:i:i:i:iVgIh9h9h9h9h<].].].]'d<]Xg:h9h9h9h9h" >"0^8k?]L]?]L]?]L]?]L]A]K]>]Xf>]K] O]R]R]D]G]D]VZOZV]D]KZV]D]G]A]4]K] @]3[ <g7fAyBi>j=]L]8`7]N]?] F^ 6]1]T]5uI]T[6]R]S\\<^3]-]*]1d*] U]3]J]7]']" >".]9\\T];].\\Ua-^;]L]@]K^?].] Uc Pc+_8]>]J]U];]K]@].]F]E].].].]H]C].].]U_8].]W^Q^W]H]V]O]C]E]F]L]?]E]F]L]@^&]6]H]C]K]?]Q^V]Q]I^X^8^U^.^<]/](]1^I^ ]R_<aT" >"_;_R\\:^Tb=_S^@h4_Ub?bT^=].].]Q_<].aT_X]T^LbT^;_T_=aT_;^Tb?aTZ8_R]>h6]L]A]K]?]Q`Q]H^P^?]K]?l4]4](] R^U^W]@]O]0^7g;_S];bT^@`L]8_7]L]>]E]E^W]V]@pA]S]S]" >"=_T_<oDo?]K^;]U]5_6].\\D]E]R]R]E]H]D]P]P]G]E]A\\+[U]U\\,\\6]6\\L\\;[U]U\\ S_W[V\\9]3^V`V^=^U^9]/a :[T]G[M\\O\\1ZQZ M[S\\P\\S[ Ud)]8](\\ @]L]@fU\\ M\\3\\N\\9ZQZ0\\L\\=" >"\\L\\8\\Q\\9]1]U]6]U]6]U]6]U]6]U]6]U]5]S]>].].].].].].].].]-]F]F]V]O]C]E]F]E]F]E]F]E]F]E]B_P_C]L]V^G]H]C]H]C]H]C]H]@^U^;]N^>]T]6]R_;]R_;]R_;]R_;]R_;]R_;]R" >"_X_T^K_R\\:_S^;_S^;_S^;_S^=].].].]*h=bT^;_T_;_T_;_T_;_T_;_T_1^9_T`>]L]?]L]?]L]?]L]A]K]>aT_?]K] P]Q]R]E]F]E]V\\Q\\W]E]K\\W]E]F]A]4^L] A^@ZN\\ =i8e@yCk?^R^" >"=]L]9b8]O^?] Im B]1]T]5uI]T[6]S^T]<^3]-]*]3^X\\X^,] V^3]J]7](^/]9]T];e7]We/]9]N]?]K^?].] Wd Nd._8]O`U\\T\\K]S]<]L^A]-]F^F].]/]-]H]C].].]V_7].]V]Q" >"]V]H]V^P]D]C]G]L]@]C]G]L]?^']6]H]C^M^?]Q]U]Q]Ic6^W^._<]/^)]2^G^ !ZM^=`Q^=^NZ;^Q`>^P^=].^Q`?`Q^>].].]R_;].`R^X\\R^M`Q^=^P^>`Q^=^Q`?`1]MZ;].]L]A^M^?]Q`Q]" >"G^R^>^M^1^4]4](] D]P^A]R^X]@]P^/]9^Vb=^NZ;`Q^AaN^8_7]L]>]E]F^V]U]>]P]>]S]S]>^P^>`T`7]6]J]<]S]5^6]/]C]G]Q]Q]F]H]D]P]P]H]C]C^&]TZ,^7]7^N^6]TZ H]/^U[TZ9" >"]2n;]U]8]0d <[U]F[M\\P]2[R[ M[S\\P\\S[ Tb(]9]'\\ @]L]@fU\\ M\\3]P]9[R[1\\M\\<\\M\\7\\R\\8]2]S]8]S]8]S]8]S]8]S]7]U]6]R]?]-].].].].].].].]-]F]F]V^P]D]C]H]C]H]C]H]" >"C]H]C]B_R_C]L]T]G]H]C]H]C]H]C]H]?^W^:]M]>]U^6ZM^<ZM^<ZM^<ZM^<ZM^<ZM^<ZMbP]M^NZ;^P^=^P^=^P^=^P^>].].].]+i=`Q^=^P^=^P^=^P^=^P^=^P^2^:^P^>]L]?]L]?]L]?]L]" >"A^M^>`Q^@^M^ P]Q]Q]F]E]F]W^S^W]F]L^W]F]E]B]3]M^ B^B^O[ =k8d?xClA^P^>]L]9]X]8^P]>\\ Hl A] 9uI]T[5]T]T]:^ =]*]5^V\\V^.] V]2]J]7](]/^:]S];h:]Xg0]" >"9^P^?]K^?].]!e Je2_7\\PdW\\S\\L]S]<]M^@]-]E]F].]/]-]H]C].].]X_5].]V]Q]V]H]U^Q]D]C]G]L]@]C]G]M^?`)]6]H]B]M]>]Q]U]Q]Hb5c-^;].])] B]=_O]=].]O_>]N^>].]O_?_" >"O]>].].]S_:]._P`P]M_O]=]N]>_O]=]O_?_1]-].]L]@]M]>]RbR]G^R^=]M]1^3]4](] FaSaD^Qa?]R_.]9]R`>]._O]>^N]8`7]L]>]E]G^U]U^?]P]>]S]S]>]N]>^P^7]6]J]<]S]4^7]/]" >"C]G]Q]Q]F]H]D]P]P]H]C]D_&]&_8]8_N_7] B]/]T[3]1l:^W^8]1]W` >\\U\\E\\N\\P]3\\S\\ N\\S\\P\\S\\ S_']:]&\\ @]L]@fU\\ M\\2\\P\\8\\S\\2\\N]<\\N]7\\S]8]2]S]8]S]8]S]8]S]8]S]8]S]" >"7]R]?]-].].].].].].].]-]E]G]U^Q]D]C]H]C]H]C]H]C]H]C]A_T_B]M]S]G]H]C]H]C]H]C]H]>c9]M^?]U]'].].].].].].`O^N].]N^>]N^>]N^>]N^?].].].],_R^>_O]=]N]=]N]=]N]" >"=]N]=]N]2^:]O_?]L]?]L]?]L]?]L]@]M]=_O]?]M] O\\P]Q]F\\D]F\\U^U^V]F\\L^V]F\\D]B]3]M] RuJ`O[ >m9c>wCmA]N]>]L]9]X]7]P]?] Im A] 2\\R\\A]T[5^V^T\\:` ?](\\6]T" >"\\T]/] V]2]J]7])^1_9]S];i;bS^2^8^S_>]K^?].]$e@u@e6_7]QfX\\S\\M^S^=]N^?]-]E]F].]/]-]H]C].].c4].]U]S]U]H]T]Q]D]C]G]M^@]C]G]M]=c-]6]H]B]M]>^R]U]R^G`4c.^:]" >".])] B]=^M]?^/]M^?]L]>]/]M^?^N^?].].]T_9].^O_O^N^N^?]M^?^M]?]M^?^0]-].]L]@]M]>^S]X]S^F^T^<^O^2_3]4](] GcUcE]Pa?]Vb-]:]O_?].^N^>]O^8a8]L]?]C]H]T]T]?" >"]P]>]S]S]?]L]@^N^8]6]J]=^S^4^8]/]C]H^Q]Q^G]H]D]P]P]H]C]E_%]%_9]9_L_8] B]0^T[3]0_T_>cWc=]1]U_ ?[U\\C[N]R^4]T] N[R\\Q]R[ 'uG]&] @]L]?eU\\ M\\2]R]8]T]3\\N\\;" >"\\N\\7]S\\7]3^S^:^S^:^S^:^S^:^S^9]S]8^R]?]-].].].].].].].]-]E]G]T]Q]D]C]H]C]H]C]H]C]H]C]@_V_A]N]R]G]H]C]H]C]H]C]H]>c9]L]?]U]'].].].].].]._M]O^/]L]?]L]?]L" >"]?]L]?].].].]-^O]>^N^?]M^?]M^?]M^?]M^?]M^ I]O`?]L]?]L]?]L]?]L]@^O^=^M]@^O^ P]P]P\\G]C\\G]T^W^T\\G]M^T\\G]C\\B]3^O^ RuJ[X]P[ >o=\\XaX]BwDoC]L\\>]L]:^X^8]P]?" >"] E] 5] 3]S]A^U[4dT];b @](]6ZR\\RZ.] V]2]J]7]*^7d8]R];]R_<aQ^3]5f<^M_?].]'e=u=e:_6\\Q^S`S]N]Q]=l>]-]E]Fm>k=]-rC].].b3].]U]S]U]H]T^R]D]C]G]M]?]C]" >"G]N^<f1]6]H]B^O^=]S^U^S]F_2a.^9].])] A]>^M]?].]M^?]L]>]/]M^?^M]?].].]U_8].^N^N]N^M]?]L]?^M]?]M^?^0]-].]L]@^O^=]S]X]S]D^V^:]O]2_2]4](] H\\U^W]U\\E]Pa?" >"]Vb-];]M^?].^M]>^P]7a8]L]?]C]H]T]T]?]P]>]S]S]?]L]@]L]8]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]F_$]$_:]:_J_9] B]0]S[3]0]P]>o=]2]S_ @[U\\C[M]T_5^U^;u O[R\\R]" >"Q[ 'uH]/ZQ] ?]L]?eU\\ M\\1]T]7^U^4\\O]O]I\\O]T`MZQ]S]O]E]3]Q]:]Q]:]Q]:]Q]:]Q]:^S^9]QmO]-m>m>m>m>].].].]1hL]G]T^R]D]C]H]C]H]C]H]C]H]C]?_X_@]O]Q]G]H]C]H]C]" >"H]C]H]=a8]L]?]U]&].].].].].].^M]O].]L]?]L]?]L]?]L]?].].].].^M]?^M]?]L]?]L]?]L]?]L]?]L] I]Pa?]L]?]L]?]L]?]L]?]O]<^M]?]O] O]P]P\\G]C\\G]ScS\\G]N^S\\G]P]P\\B" >"]2]O] QuF]Q[ >oAqDuDqD]L]?]L]:^X^8^R^?\\ D] 5] 3]S]@`X[3bS\\R^G]W^N] P](].\\&] W]1]J]7]*^7c8]Q];ZM^=`O^4]4d:]M_?].])d:u:d=_5\\R]O^R\\N]Q]=j<]-]E]F" >"m>k=]-rC].].a2].]U^U^U]H]S]R]D]C]G]N^?]C]G]P_:g3]6]H]A]O]<]S]S]S]E^1_.^8]-]*] A]>^M]?]/^M^?]K]?]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M]@^M^?]/]-].]L]?]" >"O]<]S]X]S]C^X^9]O]2^1]4](]0_IZ O[R\\X]S\\G^O_>]Vd9_U];]L]?].]L]=]P]8]X^9]L]?]C]I^T]S]@]P]>]S]S]?]L]@]L^9]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]G_#]#_;];_H" >"_:] B]0]S[3]0\\N\\>o=]2]Q^ A[U\\C[LcX\\6]T]9u O[RfP[ 'uIf7e >]L]>dU\\<] :f5d4]T]:fT\\O^NfT\\UdOeR\\O^F^3]Q]:]Q]:]Q]:]Q]:]Q]:]Q]:^QmO]-m>m>m>m>].].].]1hL]G]S]R" >"]D]C]H]C]H]C]H]C]H]C]>d?]P^Q]G]H]C]H]C]H]C]H]<_7]L]?]U^'].].].].].].^L]P].]K]@]K]@]K]@]K]@].].].].]L]?]L]@^L]@^L]@^L]@^L]@^L] I]Q]X^@]L]?]L]?]L]?]L]?]" >"O]<^M]?]O] O\\WmX]H\\WmX]H\\QaR]H\\N^R]H\\O]P]C]2]O] QuF]R\\ ?qCsDtDrE]L]?]L]:]V]7]R]>x '] 5] 3\\R\\?e3^R\\SbJ^V^O] P](].\\&] W]1]J]7]+^6e:]Q]-^>_M]5^6" >"h<^O` Qe8u8e@^5]R\\M]R\\O^Q^>m?]-]E]Fm>k=]KdFrC].].b3].]T]U]T]H]S^S]D]C]G]P_>]C]Gk6f5]6]H]A^Q^<]S]S]S]F_1_/_8]-]*] A]>]K]A].]K]@]J]?]0]K]?]L]?].].]W_" >"6].]M]M]N]L]@]J]@]K]A]K]?]/^.].]L]?]O]<]T^W]T]C^X^9^Q^3^1]3]']3dN\\ P\\R`Q[G]N_>]Q`;bW];\\K^?]/]L]=]Q^8]W]9]L]?]C]I]S]S]@]P]>]S]S]@]J]B^L^9]6p>^Q^4^9]/]C" >"]H]P]P]G]H]C]Q]Q]G]ViV]H_\"]\"_<]<_F_;] B]1]R[3]1]N]8a6]2]P^ B[U\\C[K`V\\7]T]8u O[RdN[ 'uIf5a <]L]=cU\\<] :f3`1]T];fU\\N^NfU\\T[S]NaQ\\N^G^3^Q^<^Q^<^Q^<^Q^<^Q" >"^;]Q]:]PmO]-m>m>m>m>].].].]1hL]G]S^S]D]C]H]C]H]C]H]C]H]C]=b>]P]P]G]H]C]H]C]H]C]H]<_7]L]?]U_(].].].].].].]K]Q].]J]A]J]A]J]A]J]@].].].].]L]?]L]@]J]A]J]A" >"]J]A]J]A]J] K]P\\V]@]L]?]L]?]L]?]L]?^Q^<]K]@^Q^ O\\WmX]H\\WmX]H\\P_Q]H\\O^Q]H\\O]P]C]2^Q^ D^<]R[ >qDuEsCqD]L]?]L]:]V]7]R]>x '] 5] 3\\R\\=f+]TdL^T^P] P]" >"(].\\2u *]1]J]7],^-_=]P],]>_M]5]7_R^<^Qa Sd .dC^4\\R]M]R\\O]O]>]N_@]-]E]F].]/]KdF]H]C].].]X^4].]T]U]T]H]R]S]D]C]Gk=]C]Gj1c6]6]H]@]Q];^T]S]T^Ga1].^7]-]*" >"] Lh>]K]A].]K]@]J]?]0]K]?]L]?].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]._0].]L]>]Q];^U]V]U^Bb7]Q]3^1^3]'^6iS^ P[P^P[G]N_>]N^=dX]<]J]>^1]L]=^R]8^W]9]L]@]A]J]S" >"]S]@]P]>]S]S]@]J]B]J]9]6]J]>]O]5^8]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]<z=]=z<] B]1]R[7j:\\L\\7_5]2]P^ B[U\\C[ V]T]7u O[R\\U^O[ T] ]L];aU\\<] I]T],]O[X\\>]K]@]" >"O[X\\I`3]O]<]O]<]O]<]O]<]O]<]O];]P]?]-].].].].].].].]-]E]G]R]S]D]C]H]C]H]C]H]C]H]C]<`=]Q]O]G]H]C]H]C]H]C]H];]6]L]?]T_4h9h9h9h9h9h9hK]Q].]J]A]J]A]J]A]J]" >"@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]Q\\U]@]L]?]L]?]L]?]L]>]Q];]K]?]Q] N\\WmX]H\\WmX]H\\P_Q]H\\P^P]H\\O]P]C]1]Q] C]:]S[ ?sEvEqAoC]L]?]L];^V^8^T^>x " >" '] 5] 4]S]<g-\\T^V^M]S_Q\\ O](].\\2u Se =^1]J]7]-^*^?]O],^?^K]7^7]N]<^Sb Sa (aC]3\\R\\K\\R\\P^O^?]L^A]-]E]F].]/]KdF]H]C].].]W^5].]T^W^T]H]R^T]D]C]Gj<]C]Gj-" >"`7]6]H]@]Q]:]U^S^U]Fb2]/^6]-^+] Nj>]K]A].]K]@p?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?].c4].]L]>]Q]:]U]V]U]@`6^S^4^5b2]&b<u P[O]P\\H]N^=]M]>^Ua<]J]=" >"c7]L]<]S^8]V^:]L]@]A]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?^O^7^7]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]<z=]=z<] B]1]R[7j:\\L\\7_ C^P] B[U\\C[ W]T] W] O[R\\T^P[ T] ]L]7" >"]U\\<] H]T]-\\O\\X\\>\\I\\@\\O\\X\\J`3^O^>^O^>^O^>^O^>^O^=]O]<^P]?]-].].].].].].].]-]E]G]R^T]D]C]H]C]H]C]H]C]H]C];^<]R]N]G]H]C]H]C]H]C]H];]6]L]?]S`8j;j;j;j;j" >";j;|Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]R]U]@]L]?]L]?]L]?]L]>^S^;]K]?^S^ N\\WmX]H\\WmX]H\\QaR]H\\Q^O]H\\O]P]C]1^S^ D]9]T\\ ?sFwDo?nC]L]?]L];" >"]T]7]T]=] Hj ?] 4]S]8d/]T]T]N^R_R\\ O](] =u Se =]0]J]7].^(]?]O]+]?^K]7]7]L]<gX] Sa (aC]3\\R\\K\\R\\P]M]?]K]A]-]E]F].]/]D]F]H]C].].]V^6].]S]W]S]H]Q]T" >"]D]C]Gg9]C]G]Q_,^7]6]H]@^S^:]U]Q]U]G^X]2]0^5],]+] Pl>]K]A].]K]@p?]0]K]?]L]?].].a2].]M]M]N]L]@]J]@]K]A]K]?]-f8].]L]>^S^:]U]V]U]?^4]S]4^4`0]$`<^Si O[O" >"\\O\\H]N^=]M^@^S`<]J]=c7]L]<]S]8^U]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]7]6]/^E^H]P]P]G]H]A]S]S]E]C]Iz<]<z=]=z<] B]1]R[7j:\\L\\6] A^Q] B[U\\C[Ni:]T]" >" V] O[R\\S]P[ T] ]L]6\\U\\<] Dh2]T]/]P\\W\\?]I\\A]P\\W\\K`2]M]>]M]>]M]>]M]>]M]>^O^=]O]?]-].].].].].].].]-]E]G]Q]T]D]C]H]C]H]C]H]C]H]C]<`=]S]M]G]H]C]H]C]H]" >"C]H];]6]M^?]R`;l=l=l=l=l=l=~Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]S]T]@]L]?]L]?]L]?]L]=]S]:]K]>]S] M]P]P\\G]C\\G]ScS\\G]S^N\\G]P]P\\B]0]S] D]" >"7\\T[ >sFwCn?mB]L]?]L];]T]7]T]=] Hi >] 4]S]7[Xa1]T^T^O]P_T] O](] =u Se =]0]J]7]/^'^A]N]+]?^K]7]8^L^<eW] Sd .dC]3\\R\\K\\R\\P]M]?]K]A]-]E]F].]/]D]F]H" >"]C].].]U^7].]ScS]H]Q^U]D]C]G]/]C]G]O^,^8]6]H]?]S]9]U]Q]U]H^W^3]1^4],]+] Q`P]>]K]A].]K]@p?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?]+e9].]L]=]S]9]V]T]" >"V]@_4]S]5_4b2]&b<\\Nd M[O]P\\H]N^=]L]@]Q_<]J]?e7]L];]T]8]T]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]8^6].]E]G]P]Q^G]H]A^T]T^E]C]Iz<]<z=]=z<] B]1]R[3]" >"1\\L\\6] A_R] B\\U\\E\\Ni:]T] V] O\\S\\R]R\\ T] ]L]6\\U\\<] Dh2]T]/\\O[V\\?\\H\\A\\O[V\\L`1]M]>]M]>]M]>]M]>]M]>]M]>^O]?]-].].].].].].].]-]E]G]Q^U]D]C]H]C]H]C]H]C]" >"H]C]=b>]T]L]G]H]C]H]C]H]C]H];]6]M]>]Qa>`P]>`P]>`P]>`P]>`P]>`P]>`PoQ].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]T]S]@]L]?]L]?]L]?]L]=]S]:]K]>]S] " >"L\\P]P\\F\\C\\F\\T^W^T\\F\\T^M\\F\\C\\B]0]S] E^7]U[ >sFwBl=kA]L]?]L]<^T^8^V^=] Ij >] <u=[U^1\\S]R]O]O_U\\ N](] 1] Ge =]0]J]7]0_&]A]N]+]?^K]8^8]J]:aU\\ Pe 4" >"eA]3\\R\\K\\R\\Qo@]J]A].]F^F].].]E]F]H]C].].]T^8].]RaR]H]P]U]C]E]F].]E]F]N^,]8]6]H]?]S]9^V]Q]V^H^V^4]2_4],]+] Q]M]>]K]A].]K]@],]0]K]?]L]?].].c4].]M]M]N]" >"L]@]J]@]K]A]K]?](d;].]L]=]S]9^W]T]W^@`5^U^5^/_3]'_8ZJ` K[O]P\\H]N^=]L]@]P];]J]@_0]L];]U^9^T^;]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]@^M^:^5].]E]F]Q]Q]F" >"]H]@^U]U^C]E]G_\"]\"_BZT]TZB_F_;] B]1]R[3]1\\L\\?o I_S] A[U]F[ V]T] W] N[S\\R]R[ S] ]L]6\\U\\ ']T]/\\O\\V\\@\\H\\A\\O\\V\\M_0o@o@o@o@o?m>l>].].].].].].].].]-]F^" >"G]P]U]C]E]F]E]F]E]F]E]F]E]=d?^V]L]F]H]C]H]C]H]C]H];]6]N^>]O`?]M]>]M]>]M]>]M]>]M]>]M]>]M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J] K]U]R]@]L]?]L]?" >"]L]?]L]=^U^:]K]>^U^ L\\P]Q]F\\D]F\\U^U^V]F\\U^M]F\\D]B\\/^U^ OuD]V[ =sFwBk;i@]L]?]L]<]R]7]V];] F^ Nu=[T^3]S]R]O]N_V\\ N](] 1] ].]L]6]1_%]Aq0]>]K]" >"8]7]J]/] Md:u:d>]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]S^9].]RaR]H]P^V]C]E]F].]E]F]M],]8]6]H]>]U^8]W^Q^W]H^U^4]2^3]+],] R^M]>]K]A].]K]@],]0]K]?]L]?" >"].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]$`;].]L]=^U^8]W]T]W]@b5]U]5^,]3]'] J\\Q_Q[G]N^=]L]A]O];]J]@].]L];]U]8]R];]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]5]L]?]K];" >"^4].^G^F]Q]Q]F]H]?_W]W_B]E]F_#]#_B\\U]U\\B_H_A\\U]U[ H]1]R[3]1]N]?o H`V] @[T]G[ U]T] X] N[S\\Q]S[ S] ]L]6\\U\\ (]T]/]P\\U\\A]I]B]P\\U\\M^/o@o@o@o@o@o@m>].]" >".].].].].].].]-]F]F]P^V]C]E]F]E]F]E]F]E]F]E]>_X_?]W^L]F]H]C]H]C]H]C]H];]6]P_=]M^@^M]?^M]?^M]?^M]?^M]?^M]?^M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]" >"A]J] K]U\\Q]@]L]?]L]?]L]?]L]<]U]9]K]=]U] K]Q]Q]F]E]F]W^S^W]F]W^L]F]E]B\\.]U] NuC\\V[ =eXZXdFgXhAi9h@]L]?]L]<]R]7]V];] E] Nu=[S]3\\R]R]O]M_X\\ M](" >"] 1] ].]L]6]2_$]Aq0]>]K]8]7]J]/] Ke=u=e<]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]R^:].]RaR]H]O^W]C]E]F].]E]F]M^-]8]6]H]>]U]7]W]O]W]I^S^5]3^2]+],] R" >"]L]>]K]A].]K]@],]0]K]?]L]?].].]W_6].]M]M]N]L]@]J]@]K]A]K]?]\"_<].]L]<]U]7]W]T]W]Ac5^W^6^+^4](] H[R\\X]S\\G]N^=]L]A]O];]J]A^.]L]:]W^9^R];]L]@]O]O]J]S]S]@" >"]P]>]S]S]@]J]B]J]9]5]L]?]K];^4]-]G]D]R]R]E]H]>kA]E]E_$]$_B^V]V^B_J_A^V]V] I]1]R[3]0\\N\\>o G`X] ?\\U_Q[T\\ T]T] ] N\\T\\Q]T\\ S] ]L]6\\U\\ )]T].\\P\\T\\A\\I]A" >"\\P\\T\\N^.o@o@o@o@o@o@m>].].].].].].].].]-]F]F]O^W]C]E]F]E]F]E]F]E]F]E]?_V_@]W]K]F]H]C]H]C]H]C]H];]6k<]L^A]L]?]L]?]L]?]L]?]L]?]L]?]L]?].].].].]-].].].]/" >"]J]@]L]@]J]A]J]A]J]A]J]A]J] K]V\\P]@]L]?]L]?]L]?]L]<^W^9]K]=^W^ J]R]R]D]G]D]W\\Q\\W]D]W\\L]D]G]A\\.^V] NuC]W[ <cWZXdEfXh@g8g?]L]?]L]=^R^8^X^:] F] " >" G\\R\\5[S]4]R]R]O]Lb M](\\ 0] ].]L]6]3_#]Aq0]>]K]9]6]J]/] He@u@e H\\R]M]T]Q^J]A]J]@]/]G^E].]-]F]F]H]C].].]Q^;].]Q_Q]H]N]W]B]G]E]-]G^F]L]-]8]6]I^>^W^7]" >"W]O]W]I^R^6]4^1]+],] R]M^>^M^@]/^M^?]-]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M^A^M^?] ]<].]L]<]U]7]X]R]X]B^W^5]W]6^)]4](] H\\T]W]U\\F]O_=]L]A]P^;^L^A]-]L" >"]:]W]8]P]<]L]@]O]O]J^T]T]?]P]>]S]S]@^L]A^L]8]5]L]@^J]=^3]-^I^D^S]S^E]H]<g>]G]C_%]%_A_W]W_A_L_@_W]W_ J]0]S[3]0]P]5]4],b =[ThT[ R]T]!] M[T\\P]U[ R] ]L" >"]6\\U\\ *]T].]P[S\\B]J]A]P[S\\N].^J]B^J]B^J]B^J]B^J]B^K^A]M]=]/].].].].].].].]-]G^F]N]W]B]G]D]G]D]G]D]G]D]G]?_T_AbK]E]I^C]I^C]I^C]I^;]6j;]K]A]M^?]M^?]M^" >"?]M^?]M^?]M^?]M_?].].].].].].].].]/]J]@]L]@^L]@^L]@^L]@^L]@^L] J^X]Q]?]L]?]L]?]L]?]L];]W]8^M^<]W] I]R]S]C]H]C]VZOZW]C]VZL]C]H]@\\-]W] MuC]X[ ;cWZWbDe" >"WZXe>e6e>]L]?]L]=]P]8^X^:] F^ H\\R\\5[S]5]Q]R]O^L` K]*] 0] !^.]L]6]4_\"]2],^>^M]8]6]J]0] DeCuCe E]R\\M]T\\P]I]A]J]@]/]G]D].]-]F]F]H]C].].]P^<].]Q" >"_Q]H]N^X]B]G]E]-]G]E]L^.]8]5]J]<]W]6^X]O]X^J^Q^6]5^0]+^-] R]M^>^M]?].]M^?]-]/]M^?]L]?].].]U_8].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^<^W^6aRbB^V^6]W]7^(]4]" >"(] GcUcE]P_=]L]A]P]9]L]@]-]L]:^X]9^P]<]M^@]P^O]I]T]T]?]P]>]S]S]@^L]@]L]8]5]M]?]I]>^2],]I]B_U]U_D]H]:c<]G]B_&]&_?_X]X_?_N_>_X]X_ I]0]S[3]0_T_5]4]+` ;[" >"SfU[ P^U^#] L[U\\P]V[ Q] ]M^6\\U\\ ,^U^-\\P\\S\\B\\J]@\\P\\S\\N].]I]B]I]B]I]B]I]B]I]B]I]B^M]=]/].].].].].].].]-]G]E]N^X]B]G]D]G]D]G]D]G]D]G]@_R_A`J]D]J]A]J" >"]A]J]A]J]:]6g8]K]A]M^?]M^?]M^?]M^?]M^?]M^?]M_?].].].].].].].].].]L]?]L]?]L]?]L]?]L]?]L]?]L]3^;aP]?]M^?]M^?]M^?]M^;]W]8^M];]W] H]S]T^B]J^B]J^B]J^B]J^@" >"\\-]W] G^1_ :aW[V`BcW[Wc<d5c=]L]>]N]<]P]7]X]8] F]KZ X]S]5[S]5\\P]R]N]K_ K]*] 0] !],]N]5]5_\"]1],]<]M]9^6^L^0] Ad Nd A\\R]O^U\\P^I^B]K^?]H[C]H^D]" >".],]G]F]H]C].].]O^=].]P^Q]H]M]X]A]I]D],]I^E]K]AZH^8]5]J]<]W]5bObJ^O^7]6_0]*]-] R]M^>^M]?^/]M^?^.]/]M^?]L]?].].]T_9].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^;" >"]W]5aRaB^U^6c8_(]4](] FaSaD]P_=]M]@]P]9]L]@]-]L]9b9]O^=^N^?\\P_Q]H]T]T]?]P]=]T]T]?^L]@]L]8]4]N]@^I^?]1],^K^A`W]W`C]H]7]8]I]@^&]&^=i=^N^<i H]0^T[3]1l6]" >"4])_ <\\RbT\\ O]T]#] L\\V\\O]X\\ M^N^6\\U\\ ,]T]-\\OhF\\J]@\\OhQ]/^I^D^I^D^I^D^I^D^I^C]I]B]L]<]H[C].].].].].].].]-]H]D]M]X]A]I]B]I]B]I]B]I]B]I]@_P_B_J]C]J" >"]A]J]A]J]A]J]:]6].]K]A]M^?]M^?]M^?]M^?]M^?]M^?]M_?^/^/^/^/^/].].].].]L]?]L]?]L]?]L]?]L]?]L]?]L]3^;`O]?]M^?]M^?]M^?]M^;c8^M];c G^U]U^@^M^@^M^@^M^@^M^?" >"\\-c H^0_ 9^U[U^@aV[Va:b3a<]L]>^P^=^P]7]X]8_ H^M[ F] 6]S]>ZQ[T^6]P]S^N^K^ K]*] 0]:] 8]0],]O^5]6_2ZI]1]-^<^O^9]4]L]0]<].] Uc Pc1]2\\Q^S`W^P]G]B]K]" >">^J\\C]I^C].],^H]F]H]C].].]N^>].]C]H]MbA^K^D],^K^D]K^B[I]7]5^L^<c5aMaJ^N]7]6^/]*]-] R^O_>_O]=].]O_>].].]O_?]L]?].].]S_:].]M]M]N]L]>]N]>_O]=]O_?] ]<]-" >"]O_;]X^5aRaC^S^6a8_']4](] D]P^B^Ra>^N]@]Q]7]N]?^.]L]9a8]N]=^N^?]Q_Q]G]U]U]>]P]=]T]T]?_N]>]N]7]4^P^@]G]@^1]+^M^?mB]H]7]8^K^?\\%]%\\;g;\\L\\:g G]/]T[3]2n7]" >"4]'^ <\\F\\ M\\S\\ J\\F\\ L^N^6\\U\\ ,\\S\\-]OhG]K]@]OhQ]LZ=]G]D]G]D]G]D]G]D]G]D]G]D^L]<^J\\C].].].].].].].]-]J_D]MbA^K^B^K^B^K^B^K^B^K^A_N_B^K]B^L^A^L^A^" >"L^A^L^:]6].]K]A^O_?^O_?^O_?^O_?^O_?^O_?^Oa?].].].].]/].].].]-]N]>]L]>]N]=]N]=]N]=]N]=]N]2^;_O]=]O_>]O_>]O_>]O_:a7_O]9a E^P_>^P_>^P_>^P_>^P_>\\,a H^.]" >" /[5]T[S\\8a1`<]L]=^R^<]O^8b7_ H^O\\ F] 6\\R\\=[R[U^5\\N]T]L^M` L]*] 0]:] 8]1^+]P]4]7_1[L_1]<ZL^:^Q^8]4^N^>ZM];].] R` P`.]2]QfXaN]G]B]L^=^L]C]K_B].]+" >"_J]F]H]C].].]M^?].]C]H]La@^M^C]+^M^C]J]B]L^7]4^N^:a4aMaK^M^8]7^.]*^.] Q]P`>`Q^=^NZ;^Q`>_LZ>].^Q`?]L]?].].]Q^;].]M]M]N]L]>^P^>`Q^=^Q`?]/ZL];]-^Q`:a4`" >"P`D^Q^7a8^&]4](] S]Sb>_P^@]R^7^P^>^MZ<]L]9a9]M]=_P`XZB]Q_Q]G^V]V^>]P]=^U]U^?`P^>^P^6]4]Q^?]G]A^0]*^O^<i@]H]7]7^M^=Z$]%Z8e9ZKZ7e F]/^U[TZ9]3^V`V^8]4]" >"&^ <\\H\\ K[R[ I\\H\\ K_P`XZ9\\U\\ ,[R[,\\E\\D\\K]?\\E\\M]O\\=]G]D]G]D]G]D]G]D]G]D]G]D]K];^L]C].].].].].].].]-]K_C]La@^M^@^M^@^M^@^M^@^M^A_L_C`N^A^N^?^N^?^" >"N^?^N^9]6].]L]?]P`>]P`>]P`>]P`>]P`>]P`>]P]X^LZN^NZ;_LZ>_LZ>_LZ>_LZ?].].].]-^P^>]L]>^P^=^P^=^P^=^P^=^P^2^:^P^=^Q`>^Q`>^Q`>^Q`:a7`Q^9a Dk<k<k<k<k>],a " >"H]-] /[,[._0_;]L]=j<]N]7`5a J_S^ F] 6\\R\\=^U[W_5]N^V^K_Rd L],] /]:] 8]1])^T^3]8_0^Q`0]<]Q_8^S^8^3_R_=]R^:].] O] P]+]1\\PdW`N^G^C]N_;`R`C]NaA].]*`O" >"`F]H]C].].]L^@].]C]H]La?`S`B]*`S`B]J]B`Q_6]3_R_9a4aMaL^K^9]8^-])].] Q_Tb>aS^;_R\\:^Sa=`Q]>]-^Sa?]L]?].].]P^<].]M]M]N]L]=_T_=aS^;^Sa?]/^R_:]-^Sa:a3_P_" >"C^P^7_8^%]4](] S_V^X^?aS^>]T^5_T_=`R]<]L]8_8]M^>`SdA]SaS]E^W]W^=]P^=_W]W_>]X]T_<_T_5^4^T^?^G^C^/])^Q^8c=]H]7]6`S` ?] ;c >c E]._W[V\\9]4^J^9]4]%] ;]L]" >" IZQZ H]L] !u ,`Sd9\\U\\ ,ZQZ,]E\\E]L]?]E\\M_S^>^G^F^G^F^G^F^G^F^G^F^G^F^K]:`R`C].].].].].].].]-]ObB]La?`S`>`S`>`S`>`S`>`S`?]J]CcS`?_R_=_R_=_R_=_R_8]6" >"].]V[R^?_Tb>_Tb>_Tb>_Tb>_Tb>_Tb>_T^V_Q]M_R\\:`Q]=`Q]=`Q]=`Q]?].].].],_T_=]L]=_T_;_T_;_T_;_T_;_T_1^:`T_;^Sa=^Sa=^Sa=^Sa9_6aS^7_ Bi:i:i:i:i=]+` I],] /[" >",[-].]:]L]<h;]N]7`3q \"h E] 7]S]=k5]LdIjW^ M],] /]:] 8]1](f9k?n?l/]<j6g7]1j<h9].] LZ PZ(]1]O`U]K]E]Cm8kBn?n?](nE]H]C].].]K^Am>]C]H]K`>kA])kA]J^Cm5" >"]2j7_2`M`K^J]9]8tC])].] PgX]>]Xf9h9fX]<k>],fX]?]L]?].].]O^=].]M]M]N]L]<h<]Xf9fX]?]/j9d4gX]:a3_P_D^O^7_8m4]4](] RfXaBk=^V^3h;j<]L]8_9^L]>qA^U]W]U^D" >"i<]O`?k=]Xg:h3a7f>uCn?]/eSe;]:]H]7]5k >] :a <a D]-h>n?\\H\\8]4]%] 9^R^ *^R^ Xu ,q9\\U\\ /]D\\F]LfH]D\\Li>]E]F]E]F]E]F]E]F]E]F]E]F]JnIkBn?n?n?n?].].]." >"]-n@]K`>k<k<k<k<k=[H[Co<j;j;j;j7]6].]Vf=gX]=gX]=gX]=gX]=gX]=gX]=gTjLh9k<k<k<k?].].].]+h<]L]<h9h9h9h9h Fk:gX]=gX]=gX]=gX]9_6]Xf6_ @e6e6e6e6e;]+_ G\\+[" >" /].]-[,[9]L];e:^N^8`2p e D] 7]S]<i4\\JbGgT^ M\\,\\ .]:] 8]1]'d8k?n>i-]<i4e6]0h;g8].] I]0]3]E]Cl6h@l=n?]&jC]H]C].].]J^Bm>]C]H]K`<g?]'g?]I]Bj3]1h6" >"_2_K_L^I^:]8tC])].] OdV]>]Wd6f8dW]:i>]+dW]?]L]?].].]N^>].]M]M]N]L];f;]Wd7dW]?]/i7c3dV]9_2_P_E^M^8_8m4]4](] QdV`B]Xe;d1f8h<]L]8_9]K]>]XdW_@eWeBg;]O" >"`=g;]Vd8f1`6d=uCn?]/eSe;]:]H]7]3g <] 9_ :_ C]+f>n>ZFZ7]4]%] 7f &f Vu ,]XdW_9\\U\\ /\\C\\F\\KfH\\C\\Kg=]E]F]E]F]E]F]E]F]E]F]E]F]JnHh@n?n?n?n?].].].]-l>" >"]K`<g8g8g8g8g J]Vh:h9h9h9h6]6].]Ve;dV]<dV]<dV]<dV]<dV]<dV]<eRiJf7i:i:i:i?].].].]*f;]L];f7f7f7f7f F]Xe7dV]<dV]<dV]<dV]9_6]Wd5_ <\\-\\-\\-\\-\\6]+_ FZ*[ /]" >".],Z+Z9]L]8`8]L]7^.m W` A] 7\\R\\7b2]H^BaP_ O].] .]:\\ 7]2^%`6k?n:b*]9c/a5],b6b5].\\ H]/\\4]C]Di0b=h9n?]#c?]H]C].].]I_Dm>]C]H]J_9a<]$d?]I^?c0].b3_2" >"_K_M^G^;]8tC](]/] M`T]>]U`2b4`U]7c;])`U]?]L]?].].]M^?].]M]M]N]L]8`8]U`3`U]?],c2a0_T]9_2^N^F^K^8]7m4]4](] O`R^B]Va8b-`3d:]L]7]9^J]?]V`T]>cUc?c9]N_:" >"a8]T`3`-_4`<wDn?]/eSe;]:]H]7]0a 9] 8] 8] B])b<n @]4]&^ 5b \"b Tu ,]V`T]8\\U\\ 0].].]0b;]C]H]C]H]C]H]C]H]C]H^E^H^JnEb=n?n?n?n?].].].]-h:]J_9a2a2a2a" >"2a G\\Rb4b3b3b3b3]6].]Vc7`T]:`T]:`T]:`T]:`T]:`T]:aMcEb2c4c4c4c<].].].]'`8]L]8`1`1`1`1` D]Ua2_T]9_T]9_T]9_T]8]5]U`2] =] &[ " >"O].] E] E] '] S] R] ^ (](]/] C] S] '] V] F^ 7]4](] %])[ 4]7] @])_Q_:] 9]6] 6[ S]0[R" >"^ H]%\\U\\ A\\ @\\ /Z <\\ ,[ M^5](^ =] &[ N]0] D\\ D] '\\ " >" Q^DZ 1] _ )](]/] D^ S] '] V] F] 6]4](] %] ;]7] @] /] 9]6] 6[ S]0g H]%\\U\\ @\\ " >" @\\ J\\ X]4](] <] &[ N]0] D\\ E^ '\\ P^G] 2] X^ )]" >"(^0] D] R] '] V] G^ 6]4](] %] ;]7] @] /] 9]6] 6[ S]0e F]%\\U\\ ?[ ?[ " >"I[ ^4])^ @ZV] &[ M]2] D] E] '] O_K_ 3] V^ *b,]5b E^ R] '] V] " >" G^ 6^5])^ %] ;]7] @] /] 9]6] 6[ S].a D]%\\U\\ ?\\ @\\ J\\ !^4])^ " >" B\\V] &[ M]2] D\\ G\\ L`P` 2] U^ +b =b RZN^ R^ '] V] H^ 4^6]*^ $] ;]7] @] /]" >" 9]6] 6[ S] J] :\\ @\\ J\\ \"^3]*^ A\\V\\ %[ L" >"]4] Vm 2^ S^ ,b =b R\\Q_ R] &] V] I^ 3b:].b $] ;]7] @] /] 9]6] 6[ S] " >" J] @ZU] FZU] PZU] #^2]+^ @b %[ Si 4b " >" %i Ua &] V] Mb 2a:].a #] ;]7] @] /] 9]6] .] J] @b Fb " >"Pb 'b2] E` Qb 1a $g S` %] V] Ma /_:]._ !] " >" ;]7] @] /] 9]6] .] J] @a Ea Oa &a1] D^ " >" X^ Ip Fc Q^ #] V] M_ A] )] ;]7] @] /] 9]6] T] @` " >" D` N` %_/] BZ Ap " >" 6] " >" p 6] " >" " >" F]']2] +]']2^ D]']3_ E]']1] \"]']2^ 8] H"; > > > const char *const _data_font90x103[] = { > >" " >" " >" HX 4V >X IX *W FW " >" " >" " >" HX W 4Z 3VCT <Z >X W 4Z " >" HX W 4Z 'VCT ;X W 3Y 2UCT KX W 3Y 0W " >" " >" " >" @W !W 4\\ 5YET ?XHX 8] >W !W 4\\ 7XGX KW !W 4\\ 7XHX +YET :W !W 3[ 5ZFT ?XGX EW !W 3[ 7XGX 5W " >" " >" " >" >W \"V 3\\ 7]HU ?XHX 9` ?W \"" >"V 3\\ 7XGX JW \"V 3\\ 7XHX -]HU 9W \"V 3] 7]HT ?XGX DW \"V 3] 8XGX 5V " >" " >" " >" <W $V 3VNV 8_KV ?XHX 9` >W $V 3VNV 8XGX IW $V 3VNV 8XHX -_KV 8W $V 2] 7_KU ?XGX CW $V " >"2] 8XGX 6V " >" " >" :W &W " >"4VLV :j >XHX :VJV >W &W 4VLV 9XGX HW &W 4VLV 9XHX .j 6W &W 3VMV 9i >XGX BW &W 3VMV 9XGX 7W MW " >" " >" " >" CV 'W 4VJV ;j >XHX ;UGV >V 'W 4VJV :XGX GV 'W 4VJV :XHX .j" >" 5V 'W 3VKV :i >XGX AV 'W 3VKV :XGX 8W N[ " >" " >" " >" DV )W 4VHU <VK_ =XHX ;TEU =V )W 4VHU :XGX FV )W 4VHU :XHX /VK_ 3V )W 3VIV <UK_ =XGX @V )W 3VIV ;XGX 9W " >" N] " >" " >" DV *V 3UFU =UH\\ <XHX <UD" >"T <V *V 3UFU ;XGX EV *V 3UFU ;XHX /UH\\ 1V *V 2UGU <TH] =XGX ?V *V 2UGU ;XGX 9V a " >" " >" " >" EV ,V 3UDU >TEY ;XHX <TBT <V ,V 3UDU <XGX DV ,V 3UDU <XHX /TEY /V ,V 2U" >"EU =TFZ <XGX >V ,V 2UEU <XGX :V Na " >" " >" " >" DU -V 3VDV ?TCV :XHX <TBT ;U -V 3VDV =XGX CU -V 3VDV =XHX /TCV -U -V 2UCU >TCU :XGX =U -V 2UCU =XGX ;V NV" >"IV \"W " >" " >" JU /V 3VBV ETBT :U /" >"V 3VBV FU /V 3VBV (U /V 2UAU DU /V 2UAU @V NVGV " >" $X " >" *X " >" JX GTBT MX GX 7V :UEU DX GX 7V " >" JX GX 7W 4X GX 6V GX GX 5V (X &X " >" )X 8V " >" ;X FTBT " >" LX IX 7X <UCU DX IX 7X JX IX 6W 3X IX 6X GX IX 5X *X " >" &Y " >" (X 9V " >" <X ETBT KX KX 6X 1TBT BTAT CX KX 6" >"Y JX KX 6Y (TBT BX KX 5X 1TBT LX KX 4X +X %T #W 9W " >" 3a :a <W 2W >W E\\ AW ,W ,W ,W ,W " >" HY GV +Y 4Z NX @X %W " >" DUDU =Y 7W KW 6Z 4XDT BTAT BW KW 6Z IW KW 6[ ,Y )XDT AW KW 5Z 4XDT " >" KW KW 4Z ,W BW 8V (S <S 9V 7V " >" 3a :a ;W 3W >W H_ AW ,W ,W ,W ,W L] GV +] ;a " >" #[ F^ 8XGX +W BTEU " >" *R 9a :W MW 6\\ 6ZET ?XHX <TAT AW MW 6\\ 7XGX LW MW 5[ 7XGX .Y +ZET @W MW 5\\ 6ZET ?XHX DW MW 4\\ 7XHX 0W AW" >" &XHX MZ +T $Y BS 1W,V MY 8W 7W T 9X 5Z /[ 0Z 8Z /Y GY " >" .\\ <\\ [ 4[ :\\ -a :a :W 4W >W Ja AW ,W ,W ,W ,W N_ GV +_ " >"?e 8] J] Jb 8[ <[ $Y FY 7XGX =Z Di 5W 8Z .Y !W FW *Y 4W)V*W)V-Y(V " >" <UFU 3\\ +[ 0[ 0[ 0[ 0[ 4[=T <e ;W W 5\\ 7\\FT ?XHX <TAT @W W 6^ 8XGX KW W 5] 8XGX .Z@R ?\\FT ?W W 4\\ 7\\" >"FT ?XHX CW W 3\\ 7XHX 1W @W &XHX N\\ ,T :U :U5U ` EX 2VFV .S 4]0W\"b DV V 5V T 7W" >" .` 3[ 7c 8d )Z Dq 8b Hy Bb 7` Na /Z @k .d Kj ?x Mt 7f MX/X'X -X -X2Z&X -]0]0[3X Dc Ii -c Ij 4f N~W$X/X.X&X.X4Y4XDY/Y/Y,Y'~S%a >W $a MY " >" EW 5W >W Kb AW ,W ,W ,W ,W !a GV +a Ch =f ^ Mf 2Z @x Mx <c 3X C~Q)X?X?X Kc 2T " >" .V .T CX $a !W.W N` ;XGX ![ Lb &Z Mi 7[ >a 5a &W 0g #\\ -_ <\\*V.\\*V0a-V\"X )Z /Z /Z /Z /Z 4WJV 1~U+d Kx Mx Mx Mx MX -X -X -X ,j" >" @[3X Dc 8c 8c 8c 8c <cBV.X/X'X/X'X/X'X/X/Y,Y$X &h ;W \"W 5VNV 8]HU ?XHX <TAT ?W \"W 5VNV 8XGX JW \"W 5VMV 9XGX -ZDV @]HU >W \"W 4VNV 8]HU ?XHX " >"BW \"W 3VNV 8XHX 2W ?W &XHX ^ K~\\ >S 3Q +[ @[;[ ;Q ;e HX 2VFV #VBV FS 6`1V#g GV !V 3V !T 7W 0d" >" :` ;j ?k -[ Dq :g Ky Df ;d $f 1Z @o 5j Np Ex Mt :m\"X/X'X -X -X3Z%X -]0]0\\4X Gi Lm 4i Ln ;m#~W$X/X-X(X-X4Y4XCY1Y-Y.Y&~S%a >W $a N[ EV " >"5W >W Lc AW ,W ,W ,W ,W \"b GV +a Dk Aj \"_ h 3Z @x Mx ?i 6X C~Q)X?X?X Ni 6V /V /" >"V DX &f #W0W e >XGX %c#e +b\"i 9_ Be 9d 'V 3k %^ /c @^*V0^*V2d.V\"X )Z /Z /Z /Z /Z 3b 1~U.j Nx Mx Mx Mx MX -X -X -X ,p F\\4X Gi >i " >">i >i >i BiEV.X/X'X/X'X/X'X/X.Y.Y#X 'j ;V \"V 5VLV :_IT >XHX <TAT >V \"V 5VLV 9XGX IV \"V 4VMV 9XGX ,ZHY A_IT <V \"V 4VLV :_IT >XHX AV \"V 3VLV 9" >"XHX 2V >W &XHX !_ K~[ >T 4R -_ D_?_ >S =t Fh IX 2VFV #VBV FS 7c4V#i HV \"W 3V !T 7V 0f @e >o Co 0" >"\\ Dq <j Ly Fj ?h (i \\ ?Z @r :o\"s Hx Mt <q$X/X'X -X -X4Z$X -]0]0\\4X Im Np 9m Np ?q%~W$X/X-X(X,W5[6XAX1X+X.X%~S%a =V $a ] EV 6W >W M" >"d AW ,W ,W ,W ,W HW 1b GV +b Fm Dm #` \"j 4Z @x Mx Am 8X C~Q)X?X?X!m 9X 0V 0X EX 'h" >" $W0W \"h ?XGX 'g%g 0h%i :a Cf :f *V 4m %^ 0e A^+V/^+V1f1V!X )Z /Z /Z /Z /Z 2` 1~V0o\"x Mx Mx Mx MX -X -X -X ,t J\\4X Im Bm Bm Bm Bm F" >"mHV-X/X'X/X'X/X'X/X-X.X\"X (l ;V $V 4UJU :ULXLU >XHX <UCU =V $V 5VJV :XGX HV $V 4VKV :XGX +ZL\\ AULXLU ;V $V 3UJU :ULXLU >XHX @V $V 2UJU 9XHX 3V" >" =W &XHX !` K~Z >T 4S /a FaAa @T @w Hl KX 2VFV $WCV ES 8e5V$j HV \"V 1V \"T 7V 2j Eh ?q Dp 1\\ Dq >" >"l Ly Hn Bj +l %e E\\ At >s$v Kx Mt >u&X/X'X -X -X5Z#X -^2^0]5X Jo q ;o r Br%~W$X/X-X(X,X6[6XAY3Y+Y0Y%~S%W 3V IW !_ FW 7W >W Md AW " >",W ,W ,W ,W HW 2[ ?V #[ Hn En #` #l 6\\ Ax Mx Cp 9X C~Q)X?X?X\"o ;Z 1V 1Z FX KS 0i #W2" >"W LV ,i ?XGX *l'h 3l'i ;c Dg ;g ,W 6o %^ 1g B^,V.^,V0g3V X *\\ 1\\ 1\\ 1\\ 1\\ 2^ 0~V2s$x Mx Mx Mx MX -X -X -X ,v L]5X Jo Do Do Do Do HpKW" >"-X/X'X/X'X/X'X/X-Y0Y\"X )n <W &W 5VJV ;TI_ >XHX ;UEU <W &W 5VIV ;XGX HW &W 5VIV ;XGX *g ?TI_ ;W &W 4VJV ;TI_ >XHX @W &W 3VJV :XHX 4W =W &XHX " >" 1\\ 1\\ 1\\ 1\\ 1\\ =XMV K~Y =S 4U 1c IdCc AU Dz In LX 2VFV $VBV ES 9g7V$k HV #W 1W #T 8W 3l Fh ?r Eq 3] Dq ?m L" >"y Ip Em -n )k H\\ Au Av%x Mx Mt ?x(X/X'X -X -X6Z\"X -^2^0]5X Ls\"s ?s\"s Et%~W$X/X,X*X+X6[6X@Y5Y)Y2Y$~S%W 3W JW \"a FW 8W >W NZ 6W ,W " >",W ,W ,W HW 2X <V X H[G[ Go KZ %[H[ 7\\ Ax Mx Ds ;X C~Q)X?X?X$s >\\ 2V 2\\ GX KS 1j #" >"W2W LV -j ?XGX +ZEZ)VGY 5ZDZ)i <e EUFY <UFX -W 7q %VMU 2YIY CVMU,V.VMU,V0UFX3V X *\\ 1\\ 1\\ 1\\ 1\\ 1\\ 0~W4v%x Mx Mx Mx MX -X -X -X ,x N]5X" >" Ls Hs Hs Hs Hs LsMW,X/X'X/X'X/X'X/X,Y2Y!X *\\G[ <W (W 4UHU <UH] =XHX ;VGV ;W (W 5VHV ;XGX GW (W 4UGU ;XGX )c =UH] 9W (W 3UHU <UH] =XHX ?W (W" >" 2UHU :XHX 5W <W &XHX 5c 8c 8c 8c 8c @WKU J~X >T 5V 2e KfEe CW G| Jp MX 2VFV $VBV ES 9XIX8V$l HV #V /V #T " >" 8V 3n Gh ?s Fr 5^ Dq @n Lx Ir Go .o -q L^ Bv Cx&z x Mt A{)X/X'X -X -X7Z!X -^2^0^6X Mu#t Au#t Gu%~W$X/X,X*X+X6[6X?X5X'X2X#~S%W 2V JW #c FW" >" 9W >W NX 4W ,W ,W ,W ,W HW 2W ;V NW IZCY Hp JY &ZDZ 9^ Bx Mx Eu <X C~Q)X?X?X%u @" >"^ 3V 3^ HX KS 2k \"W4W KV -ZGW ?XGX -X=X+R@W 8X<X .XIX FQ@W <Q@W /W 7dGU %QHU 3XEX DQHU-V-QHU-V/Q@W5V NX +^ 3^ 3^ 3^ 3^ 2\\ 0~W5" >"x&x Mx Mx Mx MX -X -X -X ,z!^6X Mu Ju Ju Ju Ju N}+X/X'X/X'X/X'X/X+X2X X +ZBY ;W *W 4UFU =TF\\ =XHX :VIV 9W *W 5VFV <XGX FW *W 4VGV <XGX (_ :TF\\ 8" >"W *W 3UFU =TF\\ =XHX >W *W 2UFU ;XHX 6W ;W &XHX 7h =h =h =h =h DWJV K~X >T 5W 4g MgFg EY J~ K]FZ MX 2VFV $VBV " >"ES :XGX9V%\\GX HV $W /W 3PATAP GV 3[H[ Gh ?]F] GZE^ 6^ Dq A]FX Lx I\\F\\ G\\G[ /[H] 0u N^ Bw E_D^&{!x Mt B`C_)X/X'X -X -X8Z X -_4_0_7X N^" >"E^$u C^E^$u H^E\\%~W$X/X,Y,Y*W7]8X>Y7Y'Y4Y#~S%W 2V JW $e FV 9W >W NW 3W ,W ,W ,W ,W HW 2W ;V NW IY@X >X " >"4[AV IX &X@X 9^ Bx Mx F^E^ =X C~Q)X?X?X&^E^ B` 4V 4` IX KS 3\\GW \"W4W KV .YBT ?XGX .V7V,P=W :W8W /VEV 3V +V /V " >" 7eGU KU 3WCW ;U-V$U-V LV5V NX +^ 3^ 3^ 3^ 3^ 3^ 1~W6_D^&x Mx Mx Mx MX -X -X -X ,{\"_7X N^E^ L^E^ L^E^ L^E^ L^E^ !^Ed*X/X'X/X'X/X'X/X+Y4Y X +Y?" >"X ;V *V 4UDU >TEZ <XHX 9a 7V *V 4UDV =XGX EV *V 4VEV =XGX )] 7TEZ 6V *V 3UDU >TEZ <XHX =V *V 2UDU <XHX 6V :W &XHX 9k @k @k @k @k EWJV K~W " >" >T 5Y 5g MhHi G[ M~Q L\\AW MX 2VFV $VCV DS :WEW:V%ZAU HV $V -V 3RCTCR HW 4ZDZ H\\LX ?Y?[ HV>\\ 8_ DX )[?T -Y J[B" >"[ I[CZ 0WAZ 2x ^ BX>^ G]=Z&X=b#X -X '];[)X/X'X -X -X:[ NX -_4_0_7X \\?\\%X@^ E\\?\\%X?] J[=X =X <X/X+X,X)X8]8X=Y9Y%Y6Y )Y$W 2W KW %ZMZ FV :W" >" >W X 3W 4W ,W HW 3X ;V NX KY?X Ca 9Y:R HX (X>X :VNV BZ /X '\\?\\ A^ FX0X)X?X?X'\\?\\ " >" Db 5V 5b JX KS 3ZBT !W6W JV .X?R 4V4U HV ;V4V 1VCV 4V *U 0V 7fGU KU 4WAW <U.V#U.V JU6V MX +^ 3^ 3^ 3^ 3^ 3^ 2XIX F]=Z&X -X" >" -X -X -X -X -X -X ,X=b$_7X \\?\\ N\\?\\ N\\?\\ N\\?\\ N\\?\\ #\\?`)X/X'X/X'X/X'X/X*Y6Y NX ,Y=W :V ,V 3UDU >TDX ;a 6V ,V 4UBU GV ,V 3UCU 0` 6TDX 4V ,V" >" 2UDU >TDX >V ,V 1UDU :V 9W (o Do Do Do Do GWIU J~V >T 6Z 6i jIj I\\ N~R M[=U MX 2VFV %VBV H] AWCW;V%Y=R" >" HV %W -V 4UETEU IV 4ZBZ IWGX ?V;[ IS9Z 9VNX DX *Z;R -X JZ>Y JZ?Y 1U>Z 5`C_#` CX;[ H[7W&X9_$X -X (\\6X)X/X'X -X -X;[ MX -_4_0`8X![;[&X" >"=[ F[;[&X<[ LZ8U =X <X/X+X,X)X8]8X<X9X#X6X )Z$W 1V KW &ZKZ FV ;W >W W 2W 4W ,W HW 3W :V MW KX=W Cc " >";X7P HX (W<W ;WNW BY /X ([;[ Gg JX0X)X?X?X([;[ Fd 6V 6d KX KS 4Y>R !X8X JV /X<P 6V1U IV <U0U 2UAU 3U *U 1V " >" 6fGU KU 4V?V <U/V\"U/V IU7V LX ,` 5` 5` 5` 5` 5` 3XIX G[7W&X -X -X -X -X -X -X -X ,X9_%`8XX6X MX ,X;W" >" :V .V 3UBU ?TBT 7] 3V .V 4VAU GV .V 3UAU 4d 7TBT 1V .V 2UBU ?TBT ;V .V 1UBU <V 8W )r Gr Gr Gr Gr IVHR GX+W =S 5[ 7i!k" >"Jk I] !^ )Y:T MX 2VFV %VBV Le EVAV<V$X:P HV %W -W 6WFTFV IV 4X?Y IRBX ?T7Y IP5Z :VNX DX +Z8P .Y JY<Y KY=X 1S;" >"Y 6];\\$WNW CX9Z J[4U&X6]%X -X )[2V)X/X'X -X -X<[ LX -XNV6VNX0`8X\"Z7Z'X;Z HZ7Z'X;Z LY4R =X <X/X*X.X(X8]8X<Y;Y#Y8Y *Z#W 1V KW 'ZIZ FV <W >W W " >" 2W 4W ,W HW 3W :V MW KW<X Dd <W -W )W;X <WNW AY 0X )Z7Z Jl MX0X)X?X?X)Z7Z Hf 7V 7f" >" LX KS 4X;P W8W IV /W \"V.U JV >U.U 4VAV &V 5U *U 2V 6gGU KU 5W?W =U/V\"U/V IU7V LX ,WNW 5WNW 5WNW 5WNW 5WNW 5WNW 4XHX H[4U&X -X -" >"X -X -X -X -X -X ,X6]&`8X\"Z7Z#Z7Z#Z7Z#Z7Z#Z7Z 'Z8['X/X'X/X'X/X'X/X)Y8Y MX ,W:W 9V 0V 3U@U ?[ 1V 0V 3U@V GV 0V 3U?U 8h 1V 0V 2U@U " >" CV 0V 1U@U >V 7W *`L` I`L` I`L` I`L` I`L` JV =X,X >T 6] 9k\"lKl K_ #\\ 'Y8S MX 2VFV %VBV Nk IVAV=V$X 1V %V +V " >"6YHTHY -V EW 5Y>Y :X ?R5Z .Y ;VMX DX +Y DX IY<Y LY;X 2Q8Y 8[5[&WNW CX8Y KZ1T&X4\\&X -X *Z.T)X/X'X -X -X=[ KX -XNV6VNX0a9X#Z5Z(X:Y IZ5Z(" >"X:Z NY1P =X <X/X*X.X'W9WNV:X:Y=Y!Y:Y *Z\"W 1W LW (ZGZ -W >W W 2W 4W ,W HW 3W :V MW KW;W De =W " >" -X *W:W <VLV @Y 1X *Z5Z Mp X0X)X?X?X*Z5Z Jh 8V 8h MX KS 5Y :X:X IV /W #U+T JV ?U+T 5U?U &V 5U +V AgGU KU 5" >"V=V =U0V!U0V IV8V KX ,WNW 5WNW 5WNW 5WNW 5WNW 5WNW 4XHX IZ1T&X -X -X -X -X -X -X -X ,X4\\'a9X#Z5Z%Z5Z%Z5Z%Z5Z%Z5Z )Z5Z(X/X'X/X'X/X'X/X(Y:Y LX -X:W " >" !W 2\\LZ EW +[@[ K[@[ K[@[ K[@[ K[@[ KV <X-X /P 0T 7^ 9k\"lLm La %Z " >" %Z6Q MX 2VFV %VCV n KWAW>V$X 1V &W +W 5XITIX +V EV 4X<X :X ?P2Y -X <WMX DX ,Y CX JY:Y MX9W 2P7Y :Z0Z(WLW DX7X KY.R&X2Z&X -X *Y+R)X" >"/X'X -X -X>[ JX -XNW8WNX0a9X#Y3Y(X9Y JY3Y(X9Y NX LX <X/X*X.X'X:VMV:X9X=X NX:X *Z!W 0V LW )ZEZ .W >W W 2W 4W ,W HW " >" 3W :V MW LX;W Df >W ,W +W8W >WLW @Y 2X +Z3Z!t\"X0X)X?X?X*Y3Y Kj 9V 9j AS 5X 8W:W HV /W #T)T KV " >" @T(T 6U?U &V 5T +V AhGU KU 5V=V =U0V!U0V JV7V WLW 7WLW 7WLW 7WLW 7WLW 7XNX 6XGX IY.R&X -X -X -X -X -X -X -X ,X2Z'a9X#Y3Y%Y3Y%Y3Y%Y3Y%Y3" >"Y )Y3Z)X/X'X/X'X/X'X/X'X:X Ki >W8V *XHZ FW ,Z<Z MZ<Z MZ<Z MZ<Z MZ<Z LV <X.X .R 2S " >"7` :k#nMm Mb &Z $Y4P MX 2VFV &VBV!o KV?V?V#W 0V &V )V 3XKTKX )V EV 5X:X ;X X -Y =VLX DX -Y CY JY:Y NY9X HX ;" >"Z-Y)WLW DX7Y MY,Q&X1Z'X -X +Y)Q)X/X'X -X -X?[ IX -XMV8VMX0XNX:X$Y1Y)X9Y KY1Y)X8X NX LX <X/X)X0X&X:VMV:X9Y?Y NY<Y *Y W 0V LW *ZCZ /W >W W " >" 2W 4W ,W HW 3W :V MW LW:W Dg ?W ,X ,W8W >WLW ?Y 3X +Y1Y\"v#X0X)X?X?X+Y1Y MYNVNY :V :" >"YNVNY BS 5X 8X<X HV /W $T?ZBT*c AT&T 7U?U &V 6U -W @hGU KU 6V;V >U1V U1V KW7V NWLW 7WLW 7WLW 7WLW 7WLW 7WLW 6XGX JY,Q&X -X " >"-X -X -X -X -X -X ,X1Z(XNX:X$Y1Y'Y1Y'Y1Y'Y1Y'Y1Y P)P$Y3[)X/X'X/X'X/X'X/X'Y<Y Km BW8W +UDZ 7P 1W " >" -Y8Y Y8Y Y8Y Y8Y Y8Y MV ;W.X /T 4T 7a ;k#nMn Nc 6P :W4W ?Z ?X6X KY #Y 0X 2VFV &VBV\"p KV?V?V#W 0V 'W )W 2XMTMX 'V FW " >"5X:X ;X Y -X >VKX DX -X BX IX8X NX7W KP 1P =X <Y)X+XLX EX6X NY*P&X0Z(X -X ,Y'P)X/X'X -X -X@Z GX -XMV8VMX0XNX:X%Y/Y*X8X LY/Y*X8Y!X KX <X/X)X0" >"X&X:VMV:X8YAY LY>Y *Z W 0W MW +ZAZ 0W >W W 2W 4W ,W HW 3W :V MW LW:W DSF[ @X -X " >" -X8W ?WJW ?Y 4X ,Y/Y%z%X0X)X?X?X,Y/Y YMVMY ;V ;YMVMY CS 5X 5P*Q JW<W GV /W %TBbET/g BTGb?T 8U?U &V 7U 5_ ?hGU KU 6V;V " >">U2V NU2V$_7V NXLX 9XLX 9XLX 9XLX 9XLX 8WLW 6XGX KY*P&X -X -X -X -X -X -X -X ,X0Z)XNX:X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y\"R+R&Y3]*X/X'X/X'X/X'X/X&Y>Y Jp EW:Y " >" +R@Y 7Q 2W .XEVFY\"X5Y\"X5Y\"X5Y\"X5Y NV ;X/X 0V 5T 8c <k#nNo e >^ AW4W ?Z >W6W KY " >" \"Y 0X 2VFV &VCW#[LSKZ KV?V@V\"W 0V 'W )W 1XNTNX &V FW 6Y:Y <X NX -X ?WKX DX .Y CY IX8X NX7W NS 1S @X =X&X,WJW EX6X NY /X/Y(X -X ," >"Y /X/X'X -X -XAZ FX -XMW:WMX0XMX;X%Y/Y*X8Y MY/Y*X8Y!X KX <X/X)Y1X%W;WMW;W6XAX JX>X *Z NW 0W MW ,Z?Z 1W >W W 2W 4W ,W H" >"W 3W :V MW LW:W DPAY ?Y .W -W6W @WJW >Y 5X ,X-X&_MXM_&X0X)X?X?X,Y/Y !YLVLY <V <YLVLY DS 6Y 6R,R JX>" >"W FV /X 'TCfFT2i CUGfBT 9U?U &V 7U 5] >iGU KU 6V;V >U2V NU2V$]5V NWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX KY /X -X -X -X -X -X -X -X ,X" >"/Y)XMX;X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y#T-T'Y3]*X/X'X/X'X/X'X/X%X>X Ir GW=\\ GY 9S 3W /XDVDX$X2X$X2X$X" >"2X$X2X V ;X0X 0X 7T 8d <k#~`!g Bd DW4W ?[ ?X7W LY !X /X 2VFV &VCV#ZJSGV KV?VAV!W 0V 'V 'V /d $V FV 5X8X <X NX -X ?VJX DX" >" .X BX HX8X Y7X #V 1V CX >X$X-WJW EX6X Y .X.Y)X -X -Y .X/X'X -X -XBZ EX -XLV:VLX0XMX;X&Y-Y+X7X NY-Y+X7X!X KX <X/X(X2X$X<VKV<X6YCY JY@Y +Z MW /" >"V MW -Y;Y \"Z ;WDX 0Z 2XDW >Z <W !X :WDY IW ,W HX8X MY 3Z *X 3X &X 7] <W 3W :V MW ;X :W:W 4Y @[ )\\ (Y 6X 8QEV :[ " >" JW6W @VIW =Y 6X -Y-Y(]JXJ]'X0X)X?X?X-Y-Y #YKVKY =V =YKVKY IZ 9X 6T.T JW>W FV .X (TDgFT3j CTFhDT 9U?U &V 8U 4\\ =iGU KU 6V" >";V >U3V MU3V#\\5V MWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX LY .X -X -X -X -X -X -X -X ,X.Y*XMX;X&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y%V/V)Y3_+X/X'X/X'X/X'X/X%Y@Y Is HW?^ " >"?Z /Z /Z /Z /Z /Z /Z6Y NZ 0Z /Z /Z /Z 8Y 1Y 3Z /Z /Z /Z /Z 3ZCV 5WDX DXCVCW%X0W%X0W%X0W%X0W V :X1X 0X 7T 9f =k#~`\"h Cf " >"EW4W @\\ ?X8X LX !Y /X 2VFV 'VBV#XHSET KV?VAV!W 0V (W 'W .` \"V GW 5X8X <X NX -X @VIX DX .X BX HX8X X5W &Y 1Y FX >W\"W.XJX" >" FX6X X -X.Y)X -X -X -X/X'X -X -XCZ DX -XLV:VLX0XLX<X&X+X+X7X NX+X+X7X!X KX <X/X(X2X$X<VKV<X5YEY HYBY +Z LW /W NW .Y9Y 'b ?WG^ 7b 9^GW A` Gl 2_GW" >" MWG_ DW ,W ,W8Y MW ,WG^>^4WG_ 9` @WG^ 9^GW MWG\\ ;f Gm <W6W#X2X#W;X;W5Y7Y#W1X\"u 6W :V MW >^BV\"W:W 3X ?^ 0e AWG_ KV.X ?X <W6W HTG[ K}!WCWCW Ca" >" 7p&{ NW6W AWHW >Z 7X -X+X)\\HXH\\(X0X)X?X?X-X+X $YJVJY >V >YJVJY Ma =X 7V0V JW@W EV .Y *TEiET5k DTEiDT :VAV &V 9U 3_ ;W6W NiGU " >"KU 6V;V >U3V MU3V#_8V NXJX ;XJX ;XJX ;XJX ;XJX ;XJX :XEX LX -X -X -X -X -X -X -X -X ,X.Y*XLX<X&X+X+X+X+X+X+X+X+X+X&X1X*X3`+X/X'X/X'X/X'X/X$YBY Ht " >"IW@_ Cb 7b 7b 7b 7b 7b 7b>a'b 7` 5` 5` 5` AW ,W ,W ,W DY EWG_ 9` 5` 5` 5` 5` (Z <`GV W6W MW6W MW6W MW6W#W1X NWG^ HW1X NWBVBW&W.W&WJP:PJW&W4PJW&W." >"W!V :X2X 0X 6S 8g >k#~`#j Fj GW4W @\\ >W8W LX X .X 2VFV 'VBV$XGSCR KV?VBV X 1V (W 'W ,\\ V GW 5X8X <X NX -X AWIX DX /X " >"BY HX8X X5W ([ 1[ HX ?W W/WHW FX6X!Y -X-Y*X -X .Y -X/X'X -X -XDZ CX -XLW<WLX0XKW<X'Y+X+X7X Y+X+X7X!X KX <X/X'X4X#X<VKV<X4XFY FXBX *Y KW /W NW " >"/Y7Y +g AWIb ;f =bIW De Il 3bIW MWIc FW ,W ,W9Y LW ,WIbBb6WIc >f CWIb =bIW MWI^ =j Im <W6W\"W2W\"W<Z<W4X7X!W2W!u 6W :V MW @bEW\"W:W 2X @c 8j CW" >"Ic MX0W =W <W6W IW/W\"VI^ L}!WCWCW Ee =t&{ W4W BWHW =Y 7X .X*Y*ZFXFZ(X0X)X?X?X.Y+X #WIVIW =V =WIVIW f ?X 8X2X KW@W EV .Z +SE[GVDS6ZDV " >"DSDVDXDS 9UAU %V :U 2` <W6W NiGU KU 6V;V >U4V LU4V\"`:V GX /WHW ;WHW ;WHW ;WHW ;WHW ;WHW :XEX MY -X -X -X -X -X -X -X -X ,X-Y+XKW<X'Y+X,Y+X,Y+" >"X,Y+X,Y+X'Z3Z,Y4WNY,X/X'X/X'X/X'X/X#XBX Gu JWB\\ Ag <g <g <g <g <g <gBe+f <e :e :e :e CW ,W ,W ,W Mc FWIc >f ;f ;f ;f ;f +Z >eJU NW6W MW6W MW6W MW6W\"W" >"2W MWIb IW2W NWAVAW(W,W(WJR<RJW(W4RJW(W,W\"V 9W2X 1X 6T 9i ?k#~`#k Hl HW4W @] ?X9W LW NX .X 2VFV 'VCW$WFSAP KV?VBV NW 1V (V" >" &W *X MV GV 5X6X =X NX -X AVHX DX /X BX GX8X X5X ,^ 1^ LX ?W MW0WHW FX6X!X ,X-Y*X -X .X ,X/X'X -X -XEZ BX -XKV<VKX0XKX=X'Y+Y,X7X Y+Y,X" >"7X!X KX <X/X'X4X\"W=WKV<W3YGY FYDY +Z KW .V NW 0Y5Y /l CWJe ?j AeJW Eh Kl 5eJW MWJe GW ,W ,W:Y KW ,WJdDd7WJe @h DWJe AeJW MWJ_ ?l Im <W6W\"W2W!W=Z=" >"W2X9X W2W!u 6W :V MW BeFV!W;X 1W ?f =k CWJe NY2X =X =W6W JW-W$WI` N}!WCWCW Gi Av&{ W4W BVGW <Y 8X .X)X+ZEXEZ)X0X)X?X?X.Y+Y #UHVHU <V <UHVH" >"U !j AX 9Z4Z KWBW DV -Z -TFY@RDT8XAV ETDVBWET :VCV %V ;V )X =W6W NiGU KU 6V;V >U5V KU5V GX<V FX /WHW ;WHW ;WHW ;WHW ;WHW ;WHW :WDX" >" MX ,X -X -X -X -X -X -X -X ,X-Y+XKX=X'Y+Y-Y+Y-Y+Y-Y+Y-Y+Y'Z5Z+Y5WMY,X/X'X/X'X/X'X/X#YDY GX@^ KWCZ Al Al Al Al Al Al AlFh.j ?h =h =h =h EW ,W ,W ,W !g" >" GWJe @h =h =h =h =h ,Z @hLV NW6W MW6W MW6W MW6W\"W2W MWJe KW2W W@VAW)W+W)WJT>TKW)W4TKW)W+W\"V 9X3X 2X 5T :k ?i\"~`$m Jn IW4W A^ ?X:X MW " >" NY .X 2VFV 7~X2XFS <V?VCV MX 2V )W %W +X MV GV 5X6X =X NX -X BVGX DX /X BX GX8X X5X LX -X 7a 1a X @W KW2XHX GX6X!X ,X,X*X -X ." >"X ,X/X'X -X -XFZ AX -XKV<VKX0XJW=X'X)X,X7X X)X,X7X!X KX <X/X'X4X\"X>VIV>X2YIY DYFY +Z JW .V NW 1Y3Y 1n DWLh Bm ChLW Gk Ll 6hLW MWKg HW ,W ,W;Y JW " >",WKfGg8WKg Cl FWLh ChLW MWK` @m Im <W6W\"X4X!W=Z=W1X;X NW3X!u 6W :V MW CgGV!W;W 0X ?g Am CWKg [4X >Y =W6W JW-W&YJb }!WCWCW Hk Dx&{ W4W CWFW <Y 9" >"X /Y)X,ZDXDZ*X0X)X?X?X.X)X P #SGVGS %P 7V 9P0P CSGVGS !l BX 8ZGWFZ JWCX DV ,Z .SEW<PCS8V?V .P>P JSCVAVDS :WEV $V <V &W >W6W NiGU KU 6V" >";V BP>P /U5V KU5V EW=V FX 0XHX =XHX =XHX =XHX =XHX =XHX <XDX MX ,X -X -X -X -X -X -X -X ,X,X+XJW=X'X)X-X)X-X)X-X)X-X)X&Z7Z*X5WKX,X/X'X/X'X/X'X/X\"YFY F" >"X=[ KWDY @n Cn Cn Cn Cn Cn CnHj1m Bk @k @k @k FW ,W ,W ,W $j GWKg Cl Al Al Al Al .Z Bs MW6W MW6W MW6W MW6W\"W3X MWLh LW3X V?V@W*V)W*VJV@VKW*V4VKW*V" >")W#V 9X4X 2X 4S :l ?i\"~`%o Lp JW4W A^ >W:X MW NX -X 2VFV 7~X2WES <V?VDV LX 2V )W %W -\\ V HW 5X6X =X NX .X BWGX DX 0X " >"BY FX:X NX5X LX -X :d 1d $Y @V IV2WFW GX6X\"Y ,X,Y+X -X /Y ,X/X'X -X -XH[ @X -XKW>WKX0XJX>X(Y)X,X7X!Y)X,X7X!Y LX <X/X&X6X!X>VIV>X1YKY BXFX +Z IW .W " >" W 2Y1Y 2o EWMj Dn DjMW Hn Nl 7jMW MWLi IW ,W ,W<Y IW ,WLhIi9WLi En GWMj EjMW MWLa An Im <W6W!W4W W=Z=W1Y=Y MW4W u 6W :V MW DiIV W;W /W =g C" >"m CWLi![4W =Y =W6W KW+W(ZKd!}!WCWCW Im Fy&{ W4W CWFW ;Y :X /X'X-YCXCY*X0X)X?X?X/Y)X!R #QFVFQ $R 9V :R1R DQFVFQ \"n BX 7ZJ\\JZ HWDW CV +[ 1TFW.T:W?V" >" /Q?Q KTCVAWET :XIX $V =V #U >W6W NiGU KU 6V;V BQ?Q 0U6V JU6V BU>V EX 0WFW =WFW =WFW =WFW =WFW =WFW <XDX NY ,X -X -X -X -X -X -X -X ,X,Y,XJ" >"X>X(Y)X.Y)X.Y)X.Y)X.Y)X%Z9Z*Y6WJX,X/X'X/X'X/X'X/X!XFX EX;Z LWDX ?o Do Do Do Do Do DoKn4n Cn Cn Cn Cn HW ,W ,W ,W %l HWLi En Cn Cn Cn Cn /Z Cs LW6W MW6" >"W MW6W MW6W!W4W LWMj LW4W W?V?V+W(V+WKXBXKV+W5XKV+W(V$W 8W4X 2X 5T ;n ?g!~_%p LZDZ JW4W A^ >W:W MW MX -X 2VFV 7~X2WES <WAW" >"DV KX 3V )W %W /` \"V HV 4X6X =X Y .X BVFX DX 0X BX EX:X NX5X LX -X <e /e 'Y @V GV4XFX HX7X!X +X+X+X -X /X +X/X'X -X -XI[ ?X -XJV>VJX0XIW>X(X" >"'X-X7X!X'X-X7X!Y LX <X/X&X6X!X>VIV>X1YKY AXHX +Z HW -V W 3Y/Y 3p FWMk Fo EkMW Io Nl 8kMW MWMk JW ,W ,W=Y HW ,WMjJj:WMk Gp HWMk GkMW MWMb Bo Im <W" >"6W!W4W W>\\>W0X=X LW5X u 6W :V MW EkJV W<X /W >j Fn CWMk\"\\6X =Z >W6W KW+W)[Ke\"}!WCWCW Jo Hz&{ W4W DWDW ;Y ;X /X'X.YBXBY+X0X)X?X?X/X'X#T HV IT " >":V ;T3T :V CV +o BX 6ZM`MZ GXFX CV *\\ 3SFW,S:V>V 0R@R KSBV@VDS 9e #V ?W \"V ?W6W NiGU KU 6V;V BR@R 1U6V JU6V BV?V EX 1XFX ?XFX ?XFX ?XFX" >" ?XFX ?XFW =XCX NX +X -X -X -X -X -X -X -X ,X+X,XIW>X(X'X/X'X/X'X/X'X/X'X%Z;Z)X5VHX-X/X'X/X'X/X'X/X XHX DX:Y LWEX >p Ep Ep Ep Ep Ep EpMp6o Do Do Do Do" >" HW ,W ,W ,W 'o IWMk Gp Ep Ep Ep Ep 0Z Ds KW6W MW6W MW6W MW6W!W5X LWMk MW5X V>V?W,V'W,VKZDYKW,V5YKW,V'W%W 8X5W 2X 4T ;o @g ~^%q NY@Y KW4W B`" >" ?X<X MV LX -X 2VFV 7~X2WES ;VAVDV JY 4V )V $W 1d $V HV 4X6X =X X .Y CWFX DXLY =XEX 'Y EY<X MX5X LX -X ?e )e +Y ?V:X6V4WDW " >"HX7X!X +X+X+X -X /X +X/X'X -X -XJ[ >X -XJW@WJX0XIX?X(X'X-X7X!X'X-X8Y Y MX <X/X%W6X W?WIV>W/YMY @YJY +Y GW -V W 4X+X 4YE\\ FWNXG\\ H]EX F\\GXNW J\\F[ " >"GW ,\\GXNW MWNXG[ JW ,W ,W?Z GW ,WNXH[KXH[:WNXG[ H]H] IWNXG\\ I\\GXNW MWNXFQ C\\CW CW ,W6W!X6X NW?\\?W.X?X JW6W 1X 6W :V MW 9X=X\"[IZKW W=Y /W @m H]DV " >"CWNXG[\"\\6W =[ >W6W LW)W*ZJWKY\"}!WCWCW K\\H] J{&{ V3W DWDW :Y <X /X'X.XAXAX+X0X)X?X?X/X'X$V IV JV ;V <V5V ;V CV ,^MSKW BX 5x EWFW BV ,_ 5TFW,S:V?W" >" 1SAS LTBV@VDS 9d \"V @W U ?W6W NiGU KU 5V=V ASAS 2U7V IU7V @U@V DX 1WDW ?WDW ?WDW ?WDW ?WDW ?XFX >XCX NX +X -X -X -X -X -X -X -X ,X+X,XIX?" >"X(X'X/X'X/X'X/X'X/X'X$Z=Z(X6WHX-X/X'X/X'X/X'X/X YJY DX9Y MWEW =YE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE]N\\G[7]EX E\\F[ F\\F[ F\\F[ F\\F[ IW ,W ,W ,W (p IWNXG[ H]H" >"] G]H] G]H] G]H] G]H] 1Z E]H^ JW6W MW6W MW6W MW6W W6W KWNXG\\ MW6W NV>V>V,V&V,VJZFYIV,V6YIV,V&V%W 7W6X 3X LR:T ;q @e N~^&s!Y>Y LW4W B` >W<X N" >"W $x FX 2VFV 7~X2WES ;VAVEW IY 5V *W #W 4XNTNX &V IW 5X5X =X X .X CWEX Di AXH_ +X CX<X MX5X LX -X Be #e /Z @V<^IUDV5WDW HX8Y" >"!X +X+X+X -X /X +X/X'X -X -XK[ =X -XIV@VIX0XHW?X(X'X-X7X!X'X-X8X NZ NX <X/X%X8X NX@VGV@X.c >XJX +Z GW -W !W 5X)X 5U>Z G_CZ I[>T FZC_ KZAZ HW -ZB_ " >"M^BZ KW ,W ,W@Z FW ,^CZMVCZ;^BZ IZBZ I_CZ IZC_ M^ 5Y<S CW ,W6W W6W MW?\\?W.YAY JW6W 2Y 6W :V MW ;\\A\\%YDYLV NW>Y .W AXJa IZ<Q C^BZ MX8X =\\ ?W6W LW)" >"W+YIXJY LW=W JWCWCW LZBZ K]F] ;W >W2W EWDW 9Y =X /X'X/YAXAY,X0X)X?X?X/X'X%X JV KX <V =X7X <V CV -\\JSHT BX 4v DXHX BV -b 7SEV*S;V?W 2TBT LSAV" >"@VCS 9b !V AV MU ?W6W MhGU KU 5V=V ATBT 3U8V HU8V ?UAV CX 1WDW ?WDW ?WDW ?WDW ?WDW ?WDW ?XBX NX +X -X -X -X -X -X -X -X ,X+X,XHW?X(X'X/X'X/X'X" >"/X'X/X'X#Z?Z'X7WGX-X/X'X/X'X/X'X/X NXJX CX9Y MWFW <U>Z FU>Z FU>Z FU>Z FU>Z FU>Z FU>eBZ9[>T FZAZ HZAZ HZAZ HZAZ JW ,W ,W ,W )r J^BZ IZBZ GZBZ GZBZ GZBZ" >" GZBZ 1Z EZB[ JW6W MW6W MW6W MW6W W6W K_CZ MW6W V=V>V-V%V-VHZHYHV-V6YHV-V%V%W 7X7X 4X NU:T <s Ae N~^'u\"X<X LW4W BWNW >W<W MW " >"$w EX 2~X2WES ;WCWEV GY 9W #W 5XMTMX 'V IV 4X4X >X !Y 0Y BVDX Dk CXJc -X BX>X LX5Y MX -X Ee Le 3Z ?U=bKUCU6XDX IX9Y X +X+X+X -X /X +X/X" >"'X -X -XL[ <X -XIV@VIX0XHX@X(X'X-X8Y!X'X-X8X N[ X <X/X%X8X NX@VGV@X.c =XLX +Z FW ,V !W AR9Y H]?Y KZ:R GY?] LY=Y IW -Y?] M]@Y KW ,W ,WAY DW ,]@X" >"NV@X;]@Y JY>Y J]?Y KY?] M] 4X8P CW ,W6W X8X MW?\\?W-XAX IW7X 3Y 5W :V MW =_C_(YBXLV NW?Z -W CXC\\ KY ,]@Y LW8X >] ?W6W LW)W,YHWHY MW=W JWCWCW MY>Y " >"L[B[ ;W >W2W FWBW 9Y >X 0X%X0X@X@X,X0X)X?X?X/X'X&Y JV KY =V >Y7Y =V CV .[HSFR BX 3t BWHW AV .WN\\ 9SFV)S;V?W 3UCU LSAV@VCS 7_ V BV LU ?W" >"6W MhGU KU 5W?W AUCU 4U8V HU8V ?UAV CX 2XDX AXDX AXDX AXDX AXDX AXDX @XBX NX +X -X -X -X -X -X -X -X ,X+X,XHX@X(X'X/X'X/X'X/X'X/X'X\"ZAZ&X8WFX-X/X'" >"X/X'X/X'X/X MXLX BX8X MWFW <R9Y GR9Y GR9Y GR9Y GR9Y GR9Y GR9a>Y;Z:R GY=Y JY=Y JY=Y JY=Y KW ,W ,W ,W *]E[ J]@Y JY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y JW6W MW" >"6W MW6W MW6W W7X K]?Y NW7X V=V=U-V$U-VGZJYFU-V7YFU-V$U%W 7X8X &~X/X:T =t @c L~\\'v\"W:W LW4W CXNX ?X>X MV $x EX 2~X2WES :VDW" >"EV FZ :W #W 7XKTKX )V IV 4X4X >X !X 0Y BWDX Dm FXKf /Y AYBY KX5Y MX -X Gd ~X d 5Y ?V>dLUCU6WBW IX;Z Y +X+Y,X -X 0Y +X/X'X -X -XM[ ;X -XIWBWIX" >"0XGW@X)Y'Y.X8X!Y'Y.X9Y M] #X <X/X$X:X MX@VGV@X-a <YNY ,Z EW ,V !W AP6X H\\=Y LY7P HY=\\ LX;X IW .Y=\\ M[=X KW ,W ,WBY CW ,[=]=W;[=X KY<Y K\\=Y MY=\\ " >"M\\ 4X *W ,W6W NW8X MW@VNV@W,XCX GW8W 3Y 4W :V MW >aEa)X@XNW NWA[ ,W DW?[ LX +[=X KW:X =] ?W6W MW'W-XGWGX MW=W JWCWCW MX<Y NZ>Z <W >W2W FWBW 9Z ?X" >" 0X%X0X@X@X,X0X(X@X@X/Y'Y(Y IV JY >V ?Y5Y >V CV .YFSDP BX 2q @XJX AV /WK[ :SFV)S;V@X 4VDV LSAV@VCS 6\\ MV CV KU ?W6W MhGU KU 4V?V @V" >"DV 5U9V GU9V >UBV BX 2WBW AWBW AWBW AWBW AWBW AXDX @XBX Y +X -X -X -X -X -X -X -X ,X+Y-XGW@X)Y'Y1Y'Y1Y'Y1Y'Y1Y'Y\"ZCZ&Y9WEY.X/X'X/X'X/X'X/X MYNY BX8Y N" >"WFW <P6X GP6X GP6X GP6X GP6X GP6X GP6_<X;Y7P GX;X JX;X JX;X JX;X KW ,W ,W ,W *Z?Y K[=X KY<Y KY<Y KY<Y KY<Y KY<Y 3Z GY<Y KW6W MW6W MW6W MW6W NW8W J\\=Y " >"NW8W NV=V=V.V$V.VFZLYEV.V8YEV.V$V&W 6W8X &~X2\\<T =v Ab K~\\(x$W8W MW4W CXNX ?X>X NW $w DX $VBV#XFS :WFXEV H] ;W #W 9XITIX" >" +V JW 4X4X >X \"Y 3[ BWCX Dn GXLi 1X ?ZFZ JY7Z MX -X Je M~X Me 9Y >U?gMUCV7WBW IX>\\ NX *X*X,X -X 0X *X/X'X -X -XNZ 9X -XHVBVHX0XGXAX)X%X.X9Y!X%" >"X.X:Y La 'X <X/X$X:X LWAWGV@W+_ :XNX ,Z DW ,W \"W &W H[;X MY .X;[ MX9X JW .X;[ M[<X LW ,W ,WCY BW ,Z<\\<X<[<X LX:X K[;X MX;[ M[ 3W )W ,W6W NW8W KW" >"AVNVAW*XEX FW9X 4Y 3W :V MW ?cGc+Y?WNV MWD] +W DV=Z LX +Z;X LW:X >_ @W6W MW'W.YGWFX NW=W JWCWCW NX:X NY<Y <W >W2W FWBW 8Z @X 0X%X0X@X@X,X0X(X@X@X" >"/X%X)Y HV IY ?V @Y3Y ?V CV /YES 6X 1\\H[ JcJc LV 0WI\\ =TFV)S;WAX 5WEW MTAVAWCS 3W 4~W.W KV ?W6W LgGU KU 4WAW @WEW 6U9V GU9V ?VBV BX 2" >"WBW AWBW AWBW AWBW AWBW AWBW AXAX X *X -X -X -X -X -X -X -X ,X*X-XGXAX)X%X1X%X1X%X1X%X1X%X!ZEZ%X9WCX.X/X'X/X'X/X'X/X LXNX AX7X NWFW !W ,W ,W ,W ,W ,W " >",]:X=Y .X9X LX9X LX9X LX9X LW ,W ,W ,W +Z=X K[<X LX:X KX:X KX:X KX:X KX:X 3Z GX<Z KW6W MW6W MW6W MW6W NW9X J[;X NW9X NU<V=V.U#V.UDZNYDV.U8YDV.U#V&" >"V 5X9W %~X3]<T >x A` J~\\(y%W8W MW4W CXMW >W>W MV $x DX $VCV\"XFS 9XIXEV H_ <W #W ;YHTHY -V JV 3X4X >X #Y ?g AVBX Do HXM" >"k 3Y >l HX7Z MX -X Me J~X Je =Y >V?hNUBU8XBX Ju MX *X*X,w Lq IX *~R'X -X -c 8X -XHVBVHX0XFWAX)X%X.X9Y!X%X.X;Z Ke ,X <X/X$X:X LXBVEVBX+_ 9` +Y CW +V \"" >"W %W IZ9X NX .X9Z MW7W JW /X9Z MZ;X LW ,W ,WDY AW ,Z;[;W<Z;X MY:Y LZ9X X9Z MZ 2W )W ,W6W NX:X KWAVNVAW*YGY EW:W 4Z 3W :V MW ?XMYIe,X>WNV MW" >"Ib +W EW;Y MW *Z;X KV:W =_ @W6W NW%W/XFWFX NW=W JWCWCW NW8X!Y:Y =W >| GW@W 8Y @X 0X%X1Y@X@Y-X0X(X@X@X/XImIX*Y GV HY @V AY1Y @V CV /XDS 6X 0YDY JdL" >"d LV 1WF[ >SFV'S<WBY 6XFX MS@VAVAS @~W/W JU >W6W LgGU KU 3WCW ?XFX 7U:V FU:V >UBV AX 3XBX CXBX CXBX CXBX CXBX CXBX BXAw?X *w Lw Lw Lw " >"LX -X -X -X ,X*X-XFWAX)X%X1X%X1X%X1X%X1X%X ZGZ$X:WBX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8W=X -W7W LW7W LW7W LW7W LW ,W ,W ,W ,Y:X LZ;X M" >"Y:Y MY:Y MY:Y MY:Y MY:Y \"Y=\\ LW6W MW6W MW6W MW6W MW:W IZ9X NW:W NV<V=V/V#V/VCcCV/V9YCV/V=X>V&V 4W:X %~X2TNV<S =y KWM^LW$~Z({&W7V MW4W CWLX ?" >"X?W MV KX ,X %VBV!XGS 9gFV Ha >W \"W ;WFTFW -V JV 3X4X >X #Y ?f AWBX Dp IXNm 4X <j GX7Z MX -X !e G~X Ge AY =U?ZH^BU8W@W Jt " >"LX *X*X,w Lq IX *~R'X -X -b 7X -XHWDWHX0XFXBX)X%X.X:Y X%X.X<Z Ih 0X <X/X#X<X KXBVEVBX*] 8` ,Z CW +V \"W %W IZ9X X -X9Z NX7X KW /X9Z MY9W LW ,W ,W" >"EY @W ,Y:Z:W<Y9W MX8X LZ9X X9Z MY 1W )W ,W6W MW:W JWAVNVAW)XGX DW:W 4Y 3X :V MW @VHXKWGV,W<^ MWIa *W FW9Y NW *Y9W KW<X >` @W6W NW%W/WEWEW NW=W JW" >"CWCW X8X!X8X =W >| GW@W 7Y AX 0X%X1X?X?X-X0X(X@X@X/XImIX+Y FV GY AV BY/Y AV DX 1XCS 6X 0W@X KdLd LV 1VCZ ?SFV'S;WE[ 7XFX G~X .S@VBWAS @~W0W " >".P>W >W6W KfGU KU 3XEX >XFX 8U;V:W3U;VCZ9P>WCV:W/Y 3W@W CW@W CW@W CW@W CW@W CXBX CX@w?X *w Lw Lw Lw LX -X -X -X 5p9X-XFXBX)X%X1X%X1X%X1X%X1X%X N" >"ZIZ#X:VAX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8X?X -X7X NX7X NX7X NX7X MW ,W ,W ,W ,X9X LY9W MX8X MX8X MX8X MX8X MX8X \"X=] LW6W MW6W MW6" >"W MW6W MW:W IZ9X NW:W NVLuKU/VLuKU/VBaAU/V:YAU/V=X=U&V 4X;X %~X2RLW>T >{!z'~Z)}(W6W NW4W DXLX ?X@X MV KX ,X %VBV!YHS 8eEV" >" Ic ?W !W ;UETEU ,V KW 3X4X >X $Y >c ?WAX DWD^ JbG] 5X 9d DY9[ MX -X #d D~X Dd DY <U@YD\\BU9X@X Kq IX *X*X,w Lq IX *~R'X -X -a 6X -XGVDVGX0XEWB" >"X)X%X.X;Z X%X.X?\\ Gk 4X <X/X#X<X KXBVEVBX)[ 6^ ,Z BW +W #W %W IY7W X -W7Y NW5W KW 0X7Y MY9W LW ,W ,WFY ?W ,Y:Z:W<Y9W MW6W LY7W W7Y MY 1W )W ,W6W" >" MW:W JWBVLVBW(XIX CW;X 5Y 2X :V MX BUDVKVDU.X<] LWI_ :WEW FV7X NW *Y9W JV<X >a AW6W NW%W0XEWEX W=W JWCWCW W6W!X8X =W >| HX@X 7Y BX 0X%X1X?X?X-X0" >"X(X@X@X/XImIX,Y EV FY BV CY-Y BV DX 1XCS 6X 1W>W KeNe LV 1VB[ ASFV'S;YI] 9YGY F~X .S@VDX@S @~W1V ,TEZ >W6W JeGU IX +U 2YIY <YGY :U;V:W3U" >";VGa<TEZCV:W/X 3X@X EX@X EX@X EX@X EX@X EX@X DX@w?X *w Lw Lw Lw LX -X -X -X 5p9X-XEWBX)X%X1X%X1X%X1X%X1X%X MZKZ\"X;WAX.X/X'X/X'X/X'X/X J^ ?X7X NWFX !W " >",W ,W ,W ,W ,W ,Z6W?X -W5W NW5W NW5W NW5W MW ,W ,W ,W -X7W LY9W MW6W MW6W MW6W MW6W MW6W \"W=^ LW6W MW6W MW6W MW6W MW;X IY7W NW;X NVLuKU/VLuKU/VA_" >"@U/V;Y@U/V=X=U&V 4X<X $~X,W>T ?|\"}(~X)~(W6W NW4W DXKW >W@X MV KX ,X %VBV!ZIS 7cEV IYNZ8W 0W !W :RCTCR +V KW 3X4X >X %Y" >" =b >V@X DS=\\ K`C[ 6Y 8b BX9[ Nd A~X Ad HY <VAX@ZBV:X?W Kq IX *X*X,w Lq IX *~R'X -X -a 6X -XGVDVGX0XEXCX)X%X.X=[ NX%X.u Fl 6X <X/X\"W<W IWCWEVBW([ " >"5\\ ,Z AW +W #W $V IY7X\"X -X7Y NW5W KW 0X7Y MX8X MW ,W ,WHZ >W ,X8X8W=X8X X6X MY7X\"X7Y MX 0W )W ,W6W MX<X IWCVLVCW&XKX AW<W 5Y 1W 9V LW 4P /TB" >"VMVBT.X;\\ LWI` =\\HW GW7X NW *X8X KV=X >XMW AW6W NW%W0XEWDW W=W JWCWCW!X6X#X6X >W >| HW>W 6Y CX 0X%X1X?X?X-X0X'XAXAX.XImIX-Y DV EY CV DY+Y CV DX 2X" >"BS 6X 1V<V KeNe LV 2V?Y ASFV'S:dNV :XFY E~X .S@i?S @~W2i >h =W6W JeGU IX 4g :g :YFX DgEV:X<gEVHe>hCV:X/X 3X?W EX?W EX?W EX?W EX?W EX@X EX?w?" >"X *w Lw Lw Lw LX -X -X -X 5p9X-XEXCX)X%X1X%X1X%X1X%X1X%X LZMZ!X<W@X.X/X'X/X'X/X'X/X I\\ >X7X NWFY !V +V +V +V +V +V +Y6W@X ,W5W NW5W NW5W NW5W MW ,W ,W" >" ,W -X7X MX8X X6X X6X X6X X6X X6X $X=_ MW6W MW6W MW6W MW6W LW<W HY7X NW<W MVLuKU/VLuKU/V@]?U/V<Y?U/V=X=U&V 3W<X $~X+V>S >}%~R)~V(~P)W6W NW4W" >" DWJX ?XAW L~^ $X ,X %VCV N\\LS 6aDVAW0XLZ9W 0W !W :PATAP +V KV 2X4X >X &Z =e BW@X DP8[ L^?Z 7X :h EY;\\ \"d >~X ?e LY ;U@W>Y" >"AU:W>W Ks KX *X*X,w Lq IX6f+~R'X -X -b 7X -XGWFWGX0XDWCX)X%X.X@^ NX%X.s Bl 8X <X/X\"X>X IXDVCVDX)[ 4\\ -Z @W *V #W $W JX5W\"X -W5X W4W KW 0W5X MX7W" >" MW ,W ,WIZ =W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LW<W HWCVLVCW&YMY AW=X 6Y 1X 9V LX 1X.Q /TA]AU/W:\\ LWIb A`JW GV5X NW +X7W KW>X >XMX BW6W W#W1WD" >"WDW W=W JWCWCW!W4W#X6X >W >| HW>W 7Y BX 0X%X1X?X?X-X0X'XAXAX.XImIX.Y CV DY DV EY)Y DV DX 2XBS 6X 2W<W =^ =V 2V>Y BSFV'S9bMV ;XFY D~X .S@h>S " >"@~W2i >g <W6W HcGU IX 4g 9e 8YFX EgEV;Y<gEVHf?gBV;Y0Y 3W>W EW>W EW>W EW>W EW>W EW>W EX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDWCX)X%X1X%X1X%X1X%X1X%X " >"Ke X=W?X.X/X'X/X'X/X'X/X I\\ >X7X NWEY \"W ,W ,W ,W ,W ,W ,X5W@X -W4W W4W W4W W4W MW ,W ,W ,W -W6X MX7W W4W W4W W4W W4W W4W $W=VMW MW6W MW6W MW6W MW6W " >"LW=X HX5W NW=X MVLuKU/VLuKU/V?[>U/V=Y>U/V=X=U&V 3X=W 7X FW@T ?~&~T*~V)~R*W5V NW4W EXJX ?XBX L~^ $X ,X &VBV Mb 4]CVC]4XJZ:W" >" 0W !W +T KV KV 2X4X >X 'Z <g EW?X +Z L]=Z 9Y <l GZ=] %e e!Y :UAW<XAU;X>X Lu MX *X*X,w Lq IX6f+~R'X -X -c 8X -XFVFVFX0XDXDX)X%X.u MX%X.r" >" ?l :X <X/X\"X>X IXDVCVDX)\\ 4Z ,Y ?W *V #W $W JX5W\"W ,W5X W3W LW 0W5X MX7W MW ,W ,WJY ;W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LW<W HWCVKUCW%XMX " >"?W>W 6Y 0X 9V LX 5`3R 0T?[?T/W:[ KWId DbKW HW5X NW +X7W JV>W =WLX BW6W W#W1WDWDW W=W JWCWCW!W4W#W4W >W >| IX>X 9Y AX 0X%X1X?X?X-X0X'XAXAX.XImIX/Y B" >"V CY EV FY'Y EV DX 2WAS ?r CV:V =^ =V 2V=Y CSFV'S8`LV <XFX B~X .S@e;S @~W2i >e :W6W GbGU IX 4g 8c 5XFX FgFV:Y<gFVGg@eAV:Y1Y 3X>X GX>X GX>" >"X GX>X GX>X GX>X FX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDXDX)X%X1X%X1X%X1X%X1X%X Jc NX>W>X.X/X'X/X'X/X'X/X HZ =X7X NWEZ #W ,W ,W ,W ,W ,W ,X4WAW ,W3W!W3" >"W!W3W!W3W NW ,W ,W ,W .X5W MX7W W4W W4W W4W W4W W4W $W>VLW MW6W MW6W MW6W MW6W KW>W GX5W MW>W LVLuKU/VLuKU/V>Z>U/V>Y=U/V=X=U&V 2W>X 8Y FW@T " >" ?~P(~V*~T(~Q)V4V NW4W EXJX >WBX L~^ $X ,X &VBV Ld 4WAVD`6XHZ;W 0W !W +T KV LW 2X4X >X 'Y ;i GV>X *Z M\\;Y 9X =p HZ?^ 'd " >" Id$Y 9UAW<XAU;W<W Lw X *X*X,w Lq IX6f+~R'X -X -d 9X -XFVFVFX0XCWDX)X%X.t LX%X.p ;k ;X <X/X!X@X HXDVCVDX*^ 4X ,Z ?W *W $W $W JX5W\"W ,W5X W3W LW" >" 0W5X MW6W MW ,W ,WKY :W ,W7W7W=W6W W4W MX5W\"W5X MX /Y ,W ,W6W LX>X GWEVJVEW#a >W>W 7Y 1Y 8V KY 9e8T 0T?Z>T0X:[ KWIf GdLW HW4W MW ,W6W JV?X >XKW BW6" >"W W#W2XDWDX!W=W JWCWCW!W4W#W4W >W >| IW<W :Y @X 0X%X1X?X?X-X0X&XBXBX-XImIX0Y AV BY FV GY%Y FV DX 2WAS ?r DW:W =\\ <V 2V;W CSFV'S7]JV =XFX A~X .S" >"@d:S (V Ii <a 8W6W FaGU IX 4g 6_ 2XFX GgGV:Z<gGVFUFY?a@V:Z2Y 2W<W GW<W GW<W GW<W GW<W GX>X GX>w?X *w Lw Lw Lw LX -X -X -X 5p9X-XCWDX)X%X1X%X1X%", > >"X1X%X1X%X Ia MX?W=X.X/X'X/X'X/X'X/X GX <X7X NWDZ $W ,W ,W ,W ,W ,W ,X4WAW ,W3W!W3W!W3W!W3W NW ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W $W?VKW MW6W MW6W" >" MW6W MW6W KW>W GX5W MW>W LVLuKU/VLuKU/V?\\?U/V?Y<U/V=X=U&V 2W>X 8X DWBT ?~Q)~W)~R&~(V4V NW4W EWHW >WBW K~^ $X ,X &VBV Kg \"" >"VEc8WFZ=W /W !W +T 4~W 5V 1X4X >X (Y -] IW>X )Y M[9X 9X >\\F\\ H[C` 'a Ca$Y 9UAV:WAU;W<W LX<\\!X *X*X,X -X 0X6f+X/X'X -X -XN[ :X -XEVHVEX0XCX" >"EX)X%X.s KX%X.o 6h <X <X/X!X@X GWDVCVDW*_ 4X -Z >W )V $W 6i JX5X$X -X5X V2W LW 1W3W MW6W MW ,W ,WLY 9W ,W7W7W=W6W!X4X NX5X$X5X MW .[ .W ,W6W KW>" >"W FWEVJVEW#a >W?X 8Z 4\\ 8V K[ =i<V 0S=Y=S0X:[ KW@^ IfMW HW4W MY .W6W JW@W =XKX CW6W W#W2WCWCW!W=W JWCWCW\"X4X%X4X ?W >W2W IW<W :Y @X 0X%X1X?X?X-X0X&X" >"BXBX-X%X1~` GV H~` GV H~` GV DX 3XAS ?r DV8V =\\ <V 2V;X DSFV'S4W /XFX @~X .S@VIX;S (V Ii 8Z 5W6W D_GU IX 4g 3Y .XFX HgGV;TNU<gGVFQ@W;Z=V;T" >"NU3Y 1W<W GW<W GW<W GW<W GW<W GW<W GX>X X *X -X -X -X -X -X -X -X ,X*X-XCXEX)X%X1X%X1X%X1X%X1X%X H_ LX@W<X.X/X'X/X'X/X'X/X GX <X7X NWD\\ 8i >i >i >i >i" >" >i >i3WBX ,V2W!V2W!V2W!V2W NW ,W ,W ,W .W4W MW6W!X4X\"X4X\"X4X\"X4X\"X4X M~Y2X@VIW NW6W MW6W MW6W MW6W KW?X GX5X NW?X LVLuKU/VLuKU/V@^@U/V@Y;U/V=X=U&" >"V 2X?W 8X CWBT ?~R*~X)~Q%}(V4W W4W FXHX ?XDX K~^ $X ,X 'WCV Ii &VEe:XEZ>W /W !W +T 4~W 5V 1X4X >X )Y )[ KW=X (Y N[9Y ;Y " >"?Z@Z I]Gb '^ =^$X 9U@V:WAU<X<X MX9Z\"X *X*X,X -X 0X6f+X/X'X -X -XM[ ;X -XEVHVEX0XBWEX)X%X.r JX%X.q 4e =X <X/X!X@X GXFVAVFX*` 5X .Z =W )V $W " >" :m JW3W$W ,W3W!W2W LW 1W3W MW6W MW ,W ,WMY 8W ,W7W7W=W6W!W2W NW3W$W3W MW -^ 2W ,W6W KX@X FWEVJVEW\"_ <W@W 7Y :b 7V Jb FmAX 0S<W<S0W8Y JW<[ KYHVMV GV" >"3X MZ 0W6W IVAX >XIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W3X ?W >W2W JW;X <Y ?X 0X&Y1X?X?X-X0X&YCXCY-X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V <Z ;V 2W;W " >"DSFV'S <XFX =V .S@VGW<S (V \"W6W A\\GU IX 2XFX *V;TMU LV2V V;TMU4Z 2X<X IX<X IX<X IX<X IX<X IX<X IX=X X *X -X -X -X -X -X -X -X ,X*X-XB" >"WEX)X%X1X%X1X%X1X%X1X%X G] KX@V;X.X/X'X/X'X/X'X/X GX <X8Y NWC\\ =m Bm Bm Bm Bm Bm Bm3WBW ,W2W\"W2W\"W2W\"W2W NW ,W ,W ,W /X4X NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y" >"2W@VHW NW6W MW6W MW6W MW6W JW@W FW3W MW@W KVLuKU/VLuKU/VA`AU/VAY:U/V=X=U&V 1W@X 9X BWBS >~R+~Z*~P#{'V4W W4W FXHX ?XDX K~^ $X " >" ,X 'VBV Gi (VFg;WCZ?W /W !W +T 4~W 6W 1X4X >X *Y &Z LW=X (Y NZ7X ;X ?Z>Z ImNX '[ 8\\%Y 9UAW:WAU<W:W MX7Y#X *X*X,X -X 0X6f+X/X'X -X -XL[ " >"<X -XEWJWEX0XBXFX)X%X.p HX%X.r 0a >X <X/X XBX FXFVAVFX+b 6X /Z <W )W %W =p JW3W$W ,W3W!| LW 1W3W MW6W MW ,W ,WNY 7W ,W7W7W=W6W!W2W NW3W$W3W MW -" >"b 6W ,W6W JW@W EWFVHVFW!] ;WAX 8Y 9` 5V H` HrG[ 0S<W<S0W8Y JW:Y KXF^ HW2W Kc ;W6W IVAX >XIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W JW:W =Y >X 0Y'" >"X0X?X?X-X0X%XCXCX,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V <Z FW;W DSFV'S =XFX <V .S@VFW=S (V \"W6W <WGU IX 1XFX +V;SLU LV2V V;SL" >"U5Z 1W:W IW:W IW:W IW:W IW:W IX<X IX=X X *X -X -X -X -X -X -X -X ,X*X-XBXFX)X%X1X%X1X%X1X%X1X%X F[ JXAW;X.X/X'X/X'X/X'X/X GX <X8X MWB] Bp Ep Ep Ep Ep " >"Ep E~eBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WAWHW NW6W MW6W MW6W MW6W JWAX FW3W MWAX KV<V=V/V#V/VBbCV/VBY:V/V=X>V&V 1XAW 9" >"X @WDT ?~S+~Z)}!y'W4W W4W FWFW >WDW J~^ *r ?V &VBV Eh *VEXIX<XBZ@W /W !W +T 4~W 5f 8V 0X4X >X +Y $Z NW<X 'X NZ7X ;X ?X:X HkMX " >" '[ 7[%X 8UAV8VAU=X:X NX6X#X *X*X,X -X 0X6f+X/X'X -X -XK[ =X -XDVJVDX0XAWFX)X%X.m EX%X.XA\\ -^ ?X <X/X XBX FXFVAVFX,c 6X /Y ;W (V %W ?r JW3W" >"$W ,W3W!| LW 1W3W MW6W MW ,W ,a 6W ,W7W7W=W6W!W2W NW3W$W3W MW ,e :W ,W6W JW@W DWGVHVGW N[ 9WBW 8Y 8^ 3V F^ I~X 0S;U;T1W8Y JW8X MXC\\ HW2W Ia ;W6W IWB" >"W >XHX DW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W KX:X ?Y =X /X'X0Y@X@Y-X0X%YDXDY,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V ;X DW;V DSFV'S >XFX " >" ;V .S@VFW=S (V \"W6W :UGU IX 0XFX -V;TLU MV0U!V;TLU6Y 0X:X KX:X KX:X KX:X KX:X KX:X JW<X X *X -X -X -X -X -X -X -X ,X*X-XAWFX)X%X1X%X1X" >"%X1X%X1X%X F[ JXBW:X.X/X'X/X'X/X'X/X GX <X9Y MWA] Er Gr Gr Gr Gr Gr G~gBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WBWGW NW6W MW6W MW6W " >"MW6W IWBW EW3W LWBW IU<V=V.U#V.UCdDV.UCY9V.U=X>V&V 1XBX :X ?WDT ?~S,~[({ x&W4W W4W FWFX ?XFX JV \"q >V &VBV Af -VEXGX=W@ZB" >"W .W !W +T 4~W 5f 8V 0X4X >X ,Y \"Y W;X 'X NZ7X <Y @Y:Y HiLX '^ =^%X 8UAV8VAU=X:X NX5X$X *X*X,X -X 0X(X+X/X'X -X -XJ[ >X -XDVJVDX0XAXGX)X%X.i" >" AX%X.X>Z ,\\ ?X <X/X NWBW DWFVAVFW+XMY 7X 0Z ;W (V %W @s JW3W$W ,W3W!| LW 1W3W MW6W MW ,W ,` 5W ,W7W7W=W6W!W2W NW3W$W3W MW +g =W ,W6W JXBX DWGVH" >"VGW N[ 9WBW 9Y 7^ 3V F^ I[Gr /S;U;T1W8X IW7X NWA[ HW2W F^ ;W6W HVCX >XGW DW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W KW9X ?Y =X /X'X/X@X@X,X0X$YEXEY" >"+X%X2~a GV H~a HV I~b HV DX 3W@S 6X 3V8V ;X DX<V DTFV)T >WEW :V .TAVEW?T (V \"W6W :UGU IX /WEW .V;TKU NV/U\"V;TKU7Y /X:X KX:X KX:" >"X KX:X KX:X KX:X KX<X X *X -X -X -X -X -X -X -X ,X*X-XAXGX)X%X1X%X1X%X1X%X1X%X G] KXCW9X.X/X'X/X'X/X'X/X GX <X9Y MW?] Hs Hs Hs Hs Hs Hs H~hBW ,|\"|\"|\"|" >" NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WBVFW NW6W MW6W MW6W MW6W IWBW EW3W LWBW IU<V=V.U#V.UDYMZEV.UDY8V.U#V&V 0WBX ;X >WDS >~T-~\\(y" >" Mw&W4W W4W GXFX ?XFX JV #r >V 'WCV <c .VEWEW=W?ZCW .W !W :~W 5f 9W 0X4X >X -Y Y!W;X 'Y Y5X =X @Y8Y HgKX 'a Ca%X 8UAV8" >"VAU=W8W NX4X%X *X+Y,X -X 0X(X+X/X'X -X -XI[ ?X -XDWLWDX0X@WGX)X&Y.X 0X&Y.X=Y *[ @X <X/X NXDX DXHW@VHX,YMZ 8X 1Z :W (W &W At JW3W$W ,W3W!| LW 1W3" >"W MW6W MW ,W ,` 5W ,W7W7W=W6W!W2W NW3W$W3W MW )g ?W ,W6W IWBW CWGVHVGW MY 8WCX :Y 6` 5V H` IW@m -S;V<T1W8X IW7X W@[ HW2W Ia ;W6W HVCW >XFX EW6W!W<W<" >"W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W KW8W @Y <X /X'X/X@X@X,X0X#YFXFY*X&Y2~a GV H~a HV I~b HV DX 3W@S 6X 3V8V ;X CX=V CSFV)S =WEW :V -SAVDW@S " >" 'V \"W6W :UGU IX /WEW .V<TJU NV/U\"V<TJU8Z /W8W KW8W KW8W KW8W KW8W KX:X KX<X X *X -X -X -X -X -X -X -X ,X+Y-X@WGX)X&Y1X&Y1X&Y1X&Y1X&Y H_ LX" >"DW9Y.X/X'X/X'X/X'X/X GX <X:Y LW>] Jt It It It It It I~iBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WCVEW NW6W MW6W MW6W MW6W IWCX EW3W L" >"WCX IV=V=V.V$V.VFYKZFV.VFY7V.V$V&V 0XCW ;Y =WFT >~T-~\\'w Ku%W4W W4W GXEW >WFW IV #q =V 6~X JSN^ /VEWCW?W=ZDW .W !W :~W" >" 5f 9V /X4X >X .Y MX\"W:X &X Y5X >Y @X6X FcJX &d Id%X 8UAV8VAU>X8X X4X$X +X+X+X -X /X)X+X/X'X -X -XH[ @X -XCVLVCX0X@XHX(X'X-X /X'X-X<Y *Z @X " >"<X/X NXDX DXHV?VHX-YKY 8X 2Z 9W 'V &W B]?W JW3W$W ,W3W!| LW 1W3W MW6W MW ,W ,a 6W ,W7W7W=W6W!W2W NW3W$W3W MW 'g AW ,W6W IWBW CWHVFVHW NZ 7WDW :Z" >" 6a 6V Jb IU;i ,S;V<S0W7W IW6W W?Z HW2W Kc ;W6W HWEX >XFX EW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =V2V KX8X BY ;X /Y)Y/X@X@X,X0X#YFXGZ)X'X0~` GV H~` " >"GV H~` GV DX 3W@S 6X 3V8V M| &Z?V CSFV)S:m AXFX ;V -SAVDW@S 'V \"W6W :UGU *m 5XFX /V;SIU V.T\"V;SIU9Z /X8X MX8X MX8X MX8X MX8X MX8X " >"MX;X NX +X -X -X -X -X -X -X -X ,X+X,X@XHX(X'X/X'X/X'X/X'X/X'X Ha LXFW8X-X/X'X/X'X/X'X/X GX <X;Z LW<\\ L]?W J]?W J]?W J]?W J]?W J]?W J]?{BW ,|\"|\"|\"| NW" >" ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W M~Y2WDVDW NW6W MW6W MW6W MW6W HWDW DW3W KWDW HV=V>V-V%V-VGYIZHV-VGY7V-V%V%V /WDX ;X <WFT >~T-~\\'v Is" >"$W4W W4W GWDX ?XGW HV %r =V 6~X JSJ[ 0VEVAV?W<ZFW -W !W \"V Lf 9V /X5X =X /Z MX\"V9X &X NX5X >X ?X6X D`IX $d Ne#X 8UAV8" >"VBU=x X4X$X +X+X+X -X /X)X+X/X'X -X -XG[ AX -XCVLVCX0X?WHX(X'X-X /X'X-X;Y *Y @X <X/X MXFX CXHV?VHX-XIY 9X 3Z 8W 'V &W CZ;W JW3W$W ,W3W!| LW 1W3W" >" MW6W MW ,W ,b 7W ,W7W7W=W6W!W2W NW3W$W3W MW %f BW ,W6W IXDX BWIVFVIW N\\ 8WEX :Y .[ 7V K\\ BT8e *S<X=S0W7V HW6X\"W=X GW2W Me ;W6W GVEX >WDW EW6W!W<W<W" >"3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W KW6W CY :X .X)X.YAXAY,X0X\"ZHXHZ(X'X/Y AV BY FV GY%Y FV DX 3W@S 6X 2V:V L| %ZAV BSEV*S:m @XFX <V -SAVCWAS " >" 'V \"W6W :UGU *m 6XFX .V<TIU V/U\"V<TIU9Y .x Mx Mx Mx Mx Mx Mu NX +X -X -X -X -X -X -X -X ,X+X,X?WHX(X'X/X'X/X'X/X'X/X'X Ic MXGW7X-X/X'X/X'X/" >"X'X/X GX <X=[ KW:[ NZ;W KZ;W KZ;W KZ;W KZ;W KZ;W KZ;{BW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W &WEVCW NW6W MW6W MW6W MW6W HWEX DW3W KWEX " >" GV>V>V,V&V,VIYGZIV,VIY6V,V&V&W /XEW N~X'VGT =~T-~\\&u Ir#W4W NV4W HXDX ?XHX HV KX ,V 6~X JSHZ 2VDVAV?W;ZGW -W !W \"V " >"Lf :W .X6X =X 0Z LY#~ /X NX5X >X @X5Y AYFX !d >~X >d X 8UAV8VBU>z!X3X%X +X+X+X -X /X)X+X/X'X -X -XF[ BX -XCWNWCX0X?XIX(X'X-X /X'X-X:X )Y AX <X/X" >" MXFX BWHV?VHW-YIY 9X 3Y 7W 'W 'W CX9W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WNZ 8W ,W7W7W=W6W!W2W NW3W$W3W MW !c CW ,W6W HWDW AWIVFVIW N] 8WFW :Y *" >"Y 8V KY ?R3` (S<X=S0W7V HW5W\"W=X GW2W N[ 0W6W GWFW >XDX FW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W LX6X DY :X .X)X-XAXAX+X0X!ZIXIZ'X'X.Y BV CY EV" >" FY'Y EV DX 3W@S 6X 2V:V L| $[CV BTFW,T:m ?XFX =V -TBVBVBT 'V \"W6W :UGU *m 7XFX .V<THU!V/U\"V<THU:Y .z z z z z Nx Nv NX +X -X -X -X" >" -X -X -X -X ,X+X,X?XIX(X'X/X'X/X'X/X'X/X'X Je NXGV6X-X/X'X/X'X/X'X/X GX <X@^ KW9[ X9W KX9W KX9W KX9W KX9W KX9W KX9W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W N" >"W6W!W2W\"W2W\"W2W\"W2W\"W2W &WFVBW NW6W MW6W MW6W MW6W GWFW CW3W JWFW FV>V?W,V'W,VJYEZKW,VJY6W,V'W&W /XFX N~X'WHT =~T-~\\%s Gp\"W4W NV4V GXCW >WH" >"X HW LX ,V 6~X JSGY 3VDWAW@W:ZIW ,W !W \"V Lf :W .X6X =X 1Z JX#~ /X NX5X ?Y @X4X .X Md A~X Ad LX 8UAV8VBU>z!X3X%X +X+X+" >"X -X /X)X+X/X'X -X -XE[ CX -XBVNVBX0X>WIX(X'X-X /X'X-X9X *Y AX <X/X MXFX BXJW?WJX.YGY :X 4Z 7W 'W 'W DX8W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WLY " >"9W ,W7W7W=W6W!W2W NW3W$W3W MW K_ DW ,W6W HXFX AWIVFVIW ^ 8WFW ;Y (Y 9V LY >Q.X $T>Z?T0W8W HW5W\"W<W GW2W Y -W6W GWGX >WCX FW6W!W<W<W3WCWCW!W=W JWCWC" >"W\"W2W%W2W ?W =W4W LX6X EY 9X .Y+Y-YBXBY+X0X ZJXJZ&X'X-Y CV DY DV EY)Y DV DX 3W@S 6X 2W<W L| #\\FW ASFW,S9m >XFX >V ,SBVBWCS &V \"W6W :U" >"GU *m 8XFX .V<TGU\"V.U#V<TGU;Y -z z z z z z v NX +X -X -X -X -X -X -X -X ,X+X,X>WIX(X'X/X'X/X'X/X'X/X'X KZMZ XHW6X-X/X'X/X'X/X'X/X GX <u JW7Y!X8W " >"LX8W LX8W LX8W LX8W LX8W LX8W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W &WGWBW NW6W MW6W MW6W MW6W GWFW CW3W JWFW FW?V?V+W(V+WKXCY" >"KV+WKX5V+W(V%W .WFX N~X'WHT =~T-~\\$q Eo\"W4W NV4V GWBW >XIW GW LX ;~X JSFX 3VDV?V@W9ZJW +V \"W !V V -X6X =X 2Z IX#" >"~ /X NX5X ?X ?X4X .X Jd D~X Dd IX 8UAV8VCV>z!X3X%Y ,X,Y+X -X /Y*X+X/X'X -X -XD[ DX -XBVNVBX0X>XJX(Y)X,X /Y)X,X9Y *X AX <X/X LXHX AXJV=VJX.XEY ;X 5" >"Z 6W &V 'W DW7W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WKY :W ,W7W7W=W6W!W2W NW3W$W3W MW H\\ DW ,W6W GWFW @WJVDVJW!` 9WGX <Y &X 9V LX =P (T?\\@T0W8" >"X IW5W\"W<W GW2W X ,W6W FVGW >XBW FW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W LW4W FY 8X -X+X+YCXCY*X0X N\\MXM\\%Y)X+Y DV EY NQFVFQ Y+Y CV DX 3W@S 6X" >" 1V<V K| ![HW @TFW.T9m =XFX ?V ,TCVAVDT &V \"W6W :UGU *m 9XFX -V<SFU\"V/U\"V<SFU;X ,z z z z z z v NY ,X -X -X -X -X -X -X -X ,X,Y,X>XJX" >"(Y)X.Y)X.Y)X.Y)X.Y)X KZKZ!YJW6X,X/X'X/X'X/X'X/X GX <t IW6Y\"W7W LW7W LW7W LW7W LW7W LW7W LW7W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W " >" &WHWAW NW6W MW6W MW6W MW6W GWGX CW3W JWGX EV?V@W*V)W*VJVAWKW*VJV5W*V)W%W .XGW M~X&WJT <~S,kNn#o Cm!W4W NV4V HXBX ?XJX FW MY" >" <~X JSEX 5VCV?V@W8ZLW *W #W !V V -X6X =X 3Z HX#~ /X NX5X @Y ?X4X /X Ge G~X Ge GX 8UAV9WCU>|\"X3X$X ,X,X*X -X .X*X+X/X'X -X -XC[ EX" >" -XA\\AX0X=WJX'X)X,X .X)X,X8X *X AX <X/X LXHX AXJV=VJX/YEY ;X 6Z 5W &V 'W DW7W JW3W$W ,W3W!W 'W 1W3W MW6W MW ,W ,WJY ;W ,W7W7W=W6W!W2W NW3W$W3W M" >"W EZ EW ,W6W GWFW ?WKVDVKW!b 9WHW <Y $W 9V LW BTAVNUAT/W8X IW5W#W;V FW2W!X +W6W FWIX >XBX GW6W!W<W<W3WCWCW!W=W JWCWCW\"W2W%W2W ?W =W4W MX4X HY 7X" >" -Y-Y+ZDXDZ*X0X Mt#X)X*Y EV FY NSGVGS Y-Y MQFVFQ X 3W@S 6X 1W>W 9X =\\KW >SEW<PCS 6XFX @V +SCVAWES %V \"W6W :UGU &XFX -V<TFU#V" >"/U\"V<TFU<X ,|\"|\"|\"|\"|\"|\"w MX ,X -X -X -X -X -X -X -X ,X,X+X=WJX'X)X-X)X-X)X-X)X-X)X LZIZ!XKW5X,X/X'X/X'X/X'X/X GX <s HW5X\"W7W LW7W LW7W LW7W LW7W LW7W" >" LW7W MW ,W ,W ,W ,W )W ,W ,W ,W /W2W NW6W!W2W\"W2W\"W2W\"W2W\"W2W &WIW@W NW6W MW6W MW6W MW6W FWHW BW3W IWHW DW@VAW)W+W)WJT?UKW)WJT5W)W+W$W -WHX " >"M~X&WJT ;eMQMe+jNQNj!m Bl W4W NW6W HXBX >WJX FW LX <~X JSEX 6WCV?V@W7ZMW *W #W !V !W -X6X =X 4Z GX#~ /X NX5X @X >X4X " >"/X De J~X Je DX 8U@V:WDV>|\"X3X$X ,X-Y*X -X .X*X+X/X'X -X -XB[ FX -XA\\AX0X=XKX'X*Y,X .X*Y,X8Y +X AX <Y1Y KWHW ?WJV=VJW/YCY <X 7Z 4W &W (W EW6" >"W JX5X$X -X5X!X (W 0W5X MW6W MW ,W ,WIY <W ,W7W7W=W6W!X4X NX5X$X5X MW CX EW ,W6W GXHX ?WKVDVKW!XNY :WIX =Y #X :V MX BUCVMVBT/W9Y IW5W#W<W FW3X!W" >" *W6W EVIX ?X@W GW6W!W=Y=W3XDWDX!W=W JWCWCW\"X4X%X4W >W <W6W LX4X HY 7X ,X-X)ZEXEZ)X0X Lr\"X)X)Y FV GY NUHVHU Y/Y MSGVGS !X 3XAS 6X 0W@W 8X ;\\NW " >"=TEX@RDT 5XFY BV +TDV@WGT %V \"W6W :UGU (YFX ,V=TEU#V0U!V=TEU<X ,|\"|\"|\"|\"|\"|\"w MX ,X -X -X -X -X -X -X -X ,X-Y+X=XKX'X*Y-X*Y-X*Y-X*Y-" >"X*Y MZGZ\"XLW5Y,Y1Y'Y1Y'Y1Y'Y1Y GX <r GW4X$W6W MW6W MW6W MW6W MW6W MW6W MW6X NX -X -X -X -X *W ,W ,W ,W /W2W NW6W!X4X\"X4X\"X4X\"X4X\"X4X &WIV@X NW6W MW6W" >" MW6W MW6W FWIX BX5X IWIX CWAVAW(W,W(WJR=SJW(WJR4W(W,W$W -XIX M~X&WJS :dLQLd+iMQNj!l @j NW4W NW6W HW@W >WJW DW MX .VCV" >" :SDW 6VBV?V@W6b )W #W !V !V +X8X <X 5Z FX#~ /X MW5X @X >X4X /X Ad L~X Ld AX 8VAV:WDU=|\"X3X$Y -X-Y*X -X .Y+X+X/X'X -X -XA[ GX -XA\\AX0X<WK" >"X'Y+X+X .Y+Y,X7X +X AX ;X1X JXJX ?XLW=WLX/XAY =X 7Y 3W %V (W EW7X JX5W\"W ,W5X W (W 0W5X MW6W MW ,W ,WHY =W ,W7W7W=W6W W4W MX5W\"W5X MW BX FW ,W6" >"W FWHW >WKVDVKW\"XLX 9WJW =Z #X :V MX AUEVKVDU/X:Y IW5W#W<W EW4W!X *W6W EVJX >X@W GW6W!W=Y=W2WDWDW W=W JWCWCW\"X4W#W4W >W <W6W LW2W IY 6X ,Y/Y(ZFXF" >"Z(X0X Kp!Y+X'Y GV HY NWIVIW Y1Y MUHVHU \"X 2WAS 6X 0YDY 8X :c <TE[FUDS 3XFY CV *SDV@WGS $V \"W6W :UGU )YFX ,V=TDU$V0V\"V=TDU=X +" >"|\"|\"|\"|\"|\"|#x MY -X -X -X -X -X -X -X -X ,X-Y+X<WKX'Y+X,Y+X,Y+X,Y+X,Y+X MZEZ#YNW4X*X1X%X1X%X1X%X1X FX <p EW4X$W7X MW7X MW7X MW7X MW7X MW7X MW7Y MW ,W " >",W ,W ,W *W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W $WKV?W MW6W MW6W MW6W MW6W EWJW AX5W GWJW BXBVBW'X.W'XJP;QJW'XJP4W'X.W#V ,XIW L~X%WLT :d" >"LQLc*iMQMi k ?i NW4W NW6W IX@X ?XLX DW MY 0VBV :SDW 7VAV?V@X6a )W #W !V !V +X8X <X 6Z EX#~ 0Y MW5X AY >X4X 0X =d ~X" >" d LUAW<XEV>X2X#X3X#X -X.Y)X -X -X+X+X/X'X -X -X@[ HX -X@Z@X0X<XLX&X+X+X -X+X+X7Y ,X AX ;X1X JXJX ?XLV;VLX0YAY =X 8Z 3W %V (W EW7X JX5W\"W ,W5X" >" W (W 0W5X MW6W MW ,W ,WGY >W ,W7W7W=W6W W4W MX5W\"W5X MW BX FW ,W7X FWHW >WLVBVLW#YKX :WJW =Y !W :V MW @VHXJWHV-W:Y IW5W#W<W EW4W!W )W6W EWKX ?X" >"?X HW6W!X>Y>W1WDWDW W=W JWCWCW\"X4W#W4W >W <W6W MX2X KY 5X +Y1Y'[GXH\\(X0X Jn NX+X&Y HV IY NYJVJY Y3Y MWIVIW #X 2WAS 6X 0[H[ 8X :V %` :TEiET 2YGY " >" DV *TEV?WIT $V \"W6W :UGU *YGY ,V<SCU%V0V\"V<SCU=X ,X2X$X2X$X2X$X2X$X2X$X2X$X8X LX -X -X -X -X -X -X -X -X ,X.Y*X<XLX&X+X+X+X+X+X+X+X+X" >"+X NZCZ#`3X*X1X%X1X%X1X%X1X FX <m BW3W$W7X MW7X MW7X MW7X MW7X MW7X MW7Y MW ,W ,W ,W ,W *W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W 5Z IWLV>W MW7X MW7X " >"MW7X MW7X EWJW AX5W GWJW AXCVCW%X0W%X0W%X0W%X0W\"V +WJX ?X 2WLT 9bKQKb)gLQMh Mi =g MW4W MV6W IX@X ?XLX CW MX 0VBV :SDW " >"7VAV?V@X5_ (W #W !V \"W +X8X <X 7Z DX 5X 'X LX7X @X =X4X 0X ;e Le JUAW<XFV=X1W#X3X#Y .X.Y)X -X -Y,X+X/X'X -X -X?[ IX -X@Z@X0X;XMX&Y-Y+" >"X -Y-Y+X6X ,X AX ;X1X IXLX >XLV;VLX1Y?Y >X 9Z 2W %W )W EW7X JX5W\"X -W5X X )W 0X7Y MW6W MW ,W ,WFY ?W ,W7W7W=W6W W4W MX5W\"W5X MW AW FW ,W7X FXJX" >" =WMVBVMW#YJY ;WKX >Y W :V MW ?dId,W;Z IW5W#W=W DW4W!W )W6W DVKW >X>W HW6W W>Y>W1WDWDW W=W JWCWDX\"X4W#W4W >W ;V7W LX2X LY 4X *X1X%]JXJ]'X0X Hj L" >"Y-Y%Y IV JY LYKVKY MY5Y MYJVJY $X 2XBS 6X 2q 9X :V #\\ 7TDgFT /XFX EV )TFV>VJT #V \"W6W :UGU +XFX *V=TCU%V1V!V=TCU=X ,X1W$X1W$X1W" >"$X1W$X1W$X2X%X7X LY .X -X -X -X -X -X -X -X ,X.Y*X;XMX&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y ZAZ$_3Y*X1X%X1X%X1X%X1X FX <i >W3W$W7X MW7X MW7X MW7X MW7X MW7X MW7Z NX -X " >"-X -X -X +W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W 5Z IWMV=W MW7X MW7X MW7X MW7X EWKX AX5W GWKX @XDVDX$X2X$X2X$X2X$X2X\"V +XKW ?X 1WMT 7`JQKa" >"'fLQLf Kg <f LW4W MW8W HW>W >WLW BX NY 1VBV :SDW 8V@V?V?W4] &V $W V \"V *Y:Y <X 8Z DY 5X 'X KW7X @X =X5Y 1Y 8e #e " >" GU@W>YGW>X0X$X4Y\"Y /X/Y(X -X ,Y-X+X/X'X -X -X>[ JX -X@Z@X0X;XMX%Y/Y*X ,Y/Y*X6Y -X AX ;Y3Y IXLX =WLV;VLW0X=Y ?X :Z 1W $V )W EW8Y JY7X\"X -X7Y X " >")W 0X7Y MW6W MW ,W ,WEY @W ,W7W7W=W6W X6X MY7X\"X7Y MW AW FW ,X8X EWJW <WMVBVMW#XHX :WLW >Y NW :V MW >bGc,W;[ JW6X#W=W DX6X!W )W6W DVLX >W=X IW7" >"X W>Y>W1XEWEX W=W IWDWDW!Y6X#X6X >W ;W8W MX0X MY 4X *Y3Y$^LXL^&X0X Ff IY/Y#Y JV KY JYLVLY KY7Y KYKVKY #X 2XBS 6X 3t ;X :V ![ 8TCfFT .XFX FV )U" >"GV>WKT MW7X :UGU ,XFX *V=TBU&V2W!V=TBU=X -X0X&X0X&X0X&X0X&X0X&X0W%X7X KY /X -X -X -X -X -X -X -X ,X/Y)X;XMX%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y Z?Z$" >"^4Y)Y3Y%Y3Y%Y3Y%Y3Y FX <X -W3W$W8Y MW8Y MW8Y MW8Y MW8Y MW8Y MW8[ NX -X -X -X -X +W ,W ,W ,W .X6X MW6W X6X X6X X6X X6X X6X 5Z I_=X MX8X MX8X MX8X MX8X " >"DWLW @Y7X FWLW >XEVFY\"X5Y\"X5Y\"X5Y\"X5Y!V *WLX @X /WNT 7`JQJ_&eKQKe Je :d KW4W MW8W HW>X ?XNX AX Y 1VCV 9SDW 9V?V?V?X4\\ " >" &W %W V \"V )X:X ;X 9Z CX 4X (Y KW7X AX <Y6Y 1X 4e )e DVAX@ZHW=X0X$X4Y\"Y*P&X0Z(X -X ,Y-X+X/X'X -X -X=[ KX -X?X?X0X:XNX%Y/Y*X ,Y/Y*X5X " >".Y AX :X3X HXLX =XNW;WNX1Y=Y ?X ;Z 0W $V )W EW8Y JY7W W ,W7Y NX *W /W8Z MW6W MW ,W ,WDY AW ,W7W7W=W6W NW6W LY7W W7Y MW AW FW ,X9Y EWJW <WMVBVMW" >"$XFX ;WMX ?Y MW :V MW =`Ea+X<[ JW6W\"W>W BW6W W )W6W DWMX ?X=X IX8X W?[?W0WEWEW NW=W IWDWDW!Y6W!W6W =W ;W8W MX0X NY 3X )Y5Y\"z%X0X C` FY/Y\"X JV " >"KX HYMVMY IX7X IYLVLY \"X 1XCS 6X 4v <X :V [ 8TBbET ,WEW FV (T$T LX8X :UGU ,WEW )V=m,V3W V=mCX -X0X&X0X&X0X&X0X&X0X&X0X&X7X KY" >"*P&X -X -X -X -X -X -X -X ,X0Z)X:XNX%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y!Z=Z%]3Y(X3X#X3X#X3X#X3X EX <X -W3W$W8Y MW8Y MW8Y MW8Y MW8Y MW8Y MW8[ MW ,X -X -X -X ,W ,W ,W " >",W -W6W LW6W NW6W MW6W MW6W MW6W MW6W 4Z H^=W LX9Y MX9Y MX9Y MX9Y DWMX @Y7W EWMX =Y8Y Y8Y Y8Y Y8Y Y8Y V *WLX AX .WNT 6^IQI]$cKRJc Id 8c KW4W" >" MX:X IX>X ?XNX AY Y4P VBV 9SDW 9V?V?V?Y4Z %W %W V #W )X:X ;X :Z CY 4X (Y KX9Y AX ;X6X 1Y 1e /e @U@XB[JX<X/W$X4" >"X Y,Q&X1Z'X -X +Y.X+X/X'X -X -X<[ LX -X?X?X0X:XNX$Y1Y)X +Y1Y)X5Y /X @X :X4Y GXNX <XNV9VNX2Y;Y @X ;Y /W $W *W EW9Z JZ9X X -X9Z NX *W /X9Z MW6W MW" >" ,W ,WCY BW ,W7W7W=W6W NX8X LZ9X X9Z MW AW FW +W9Y EXLX <WNV@VNW%YEX ;WNW ?Y LW :V MW <^C_)W=\\ JX7W\"W>W BX8X W )W6W CVNX >W;W IX8X X@[@X0XFWEW " >"NW=W IWDWEX!Z8X!X8X =W :W:W LX0X Y 2X (Y7Y Nv#X0X ?X AY1Y V IV JV FYNVNY GV5V GYMVMY !X 1XCS 6X 5x =X :V MZ 8T?ZBT *VDV FV 'T&T KX" >"8X :UGU ,VDV )V<m-V3V NV<mCX -X/W&X/W&X/W&X/W&X/W&X0X'X6X JY,Q&X -X -X -X -X -X -X -X ,X1Z(X:XNX$Y1Y'Y1Y'Y1Y'Y1Y'Y1Y!Z;Z%[3Y'X4Y#X4Y#X4Y#X4Y EX" >" <X -W3W$W9Z MW9Z MW9Z MW9Z MW9Z MW9Z MW9] NX -X -X -X -X ,W ,W ,W ,W -X8X LW6W NX8X MX8X MX8X MX8X MX8X 4Z H]=X KW9Y LW9Y LW9Y LW9Y CWNW ?Z9X DWNW " >" ;Y;Z MY;Z MY;Z MY;Z MY;Z NV *XMW AY -[ 3ZHRH[\"aJRI` Fb 6a JW4W LW:W HX=W >WNX @Y !Z6Q VBV KP>SEW 9V>WAW>X3Z &W %W V " >" #V 'X<X :X ;Z BY 4X )Y IW9X AY ;Y8Y 2Y .d 1d >U?ZH^MZ<X.X%X5Y NY.R&X2Z&X -X *Y/X+X/X'X -X -X;[ MX -X&X0X9a$Z3Y(X *Y3Y(X4X$P-Y @X :Y5Y GXNX" >" <XNV9VNX2X9Y AX <Z /W #V *W EX:Z JZ9X NX .X9Z MX +W .X;[ MW6W MW ,W ,WBY CW ,W7W7W=W6W NX9Y LZ9X X9Z MW AW FW +W:Z DWLW :^@^$XDY <WNW @Z LW :" >"V MW ;\\@['X>\\ JX8X\"W?W AX9Y X *W6W CVNX ?X;X JX9Y NW@[@W/XFWFX NW=W IXEWEX!Z8X!X8W ;W ;W;X MX.X\"Y 1X 'Y9Y Lt\"X0X ?X @Y3Y MT HV IT Dj ET3T EYNVN" >"Y X 0XDS 6X 6ZM`LY >X :V LY 7T)T (UCU ET(T JX9Y :UGU ,UCU )V;m.V3V NV;mCY7P HX.X(X.X(X.X(X.X(X.X(X.X(X6X IY.R&X -X -X -X -" >"X -X -X -X ,X2Z'X9a$Z3Y&Z3Y&Z3Y&Z3Y&Z3Y!Z9Z&Z3Y&Y5Y#Y5Y#Y5Y#Y5Y EX <X -W3W$X:Z MX:Z MX:Z MX:Z MX:Z MX:Z MX:^ NX -X -X -X -X -W ,W ,W ,W -X8X LW6W NX9Y" >" MX9Y MX9Y MX9Y MX9Y 4Z H\\=Y KW:Z LW:Z LW:Z LW:Z CWNW ?Z9X DWNW :[@[ K[@[ K[@[ K[@[ K[@[ MV )WNX AX ,[ 1WGRFW N_IRH^ Da 5_ IW4W LX<X HW<W >`" >" >Y !Y8S MX +VBV KQ?SFX 9V=VAV=Y6] &V &W NV BX 1X 1V 'Y>Y :X <Z BY 3X GP3Z IX;Y AX :Y9Z 2X GX -X 7a 1a .X 6V@iNa;X.X%X6Z N" >"Z1T&X4\\&X -X *Z0X+X/X'X -X -X:[ NX -X&X0X9a#Z5Z(X *Z5Z(X4Y%R/Y @X 9Y7Y EWNW :WNV9VNW2Y9Y AX =Z .W #V *W EX;[ J[;X MY .X;[ MY2P JW .Y=\\ MW6W MW ," >"W ,WAY DW ,W7W7W=W6W MX:X K[;X MX;[ MW /P4X FX ,X<[ DXNX :^@^%XBX <` @Y KW :V MW 8V;W%X?^ KY9X!V@X @X:X NX *W6W C_ >X:W JY;Z NXB]BX.XGWGX MW=W H" >"XFWFX [:X NX:X ;W :W<W LX.X\"Y 1X &Y;Y Ip X0X ?X @Z5Z LR GV HR Bh CR1R Cj NX 0YES 6X 7ZJ\\IY ?X :V KY 8U+U 'TBT DU+T IY;Z :UGU " >" ,TBT (V;m.V4V MV;mCY8Q HX.X(X.X(X.X(X.X(X.X(X.X)X5X IZ1T&X -X -X -X -X -X -X -X ,X4\\'X9a#Z5Z%Z5Z%Z5Z%Z5Z%Z5Z\"Z7Z&Z5Z%Y7Y!Y7Y!Y7Y!Y7Y DX <X -W4X$X" >";[ MX;[ MX;[ MX;[ MX;[ MX;[ MX;`3P=Y .Y2P LY2P LY2P LY2P LW ,W ,W ,W ,X:X KW6W MX:X KX:X KX:X KX:X KX:X 3Z GZ<X JX<[ LX<[ LX<[ LX<[ C` ?[;X C` 9_J" >"_ I_J_ I_J_ I_J_ I_J_ LV )` AX +Z S <[GRFZ A_ 4^ HW4W KX>X HX<X ?` =Z \"Y:T MX +VCV JSASFX :V<VAV<Y8_ 'W 'W NV BX 1X 2W" >" &X>X 9X =Z 1P2Z 3X GQ5Z GX=Y @X 9Y:Y KP8Z GX -X 4^ 1^ +X 5U?gM_9W,W%X7Z L[4U&X6]%X -X )[2X+X/X'X -X -X9[ X -X&X0X8`\"Z7Z'X )Z7Z'X3X%T2Y ?X 9Z9Z E` :" >"_9_3Y7Y BX >Z -W #W +W DX=\\ J\\=Y LY7P HY=\\ LY5R JW -Y?] MW6W MW ,W ,W@Y EW ,W7W7W=W6W MY<Y K\\=Y MY=\\ MW /R6W DW ,Y=[ CWNW 9^@^&X@X <^ @Y JW :V " >" MW HXA` LZ;X V@W ?Y<Y MX +W6W B^ ?X9W JZ<Z NXB]BX.YHWHY MW=W HYGWGY \\<Y NY<X :W :X>X LX.X#Y 0X %Y=Z Gl MX0X ?X ?Z7Z JP FV GP @f AP/P Ah MX " >"/YFSDP BX 8ZFVEY @X :V JX 7V.U %SAS CU.U HZ<Z :UGU ,SAS (V:m/V5W MV:mBY;S HW,W(W,W(W,W(W,W(W,W(X.X)X5X H[4U&X -X -X -X -X -X" >" -X -X ,X6]&X8`\"Z7Z#Z7Z#Z7Z#Z7Z#Z7Z\"Z5Z&[8Z$Z9Z!Z9Z!Z9Z!Z9Z DX <X -W4W\"X=\\ LX=\\ LX=\\ LX=\\ LX=\\ LX=\\ LX=b6R<Y7P GY5R KY5R KY5R KY5R LW ,W ,W ,W ,Y<Y KW" >"6W MY<Y KY<Y KY<Y KY<Y KY<Y 3Z GY<Y JY=[ LY=[ LY=[ LY=[ B^ >\\=Y B^ 7r Gr Gr Gr Gr KV (_ BX )Y S 8RBSCR <] 2\\ GW4W KZBZ HX;W >_ <[ " >" $[=U MX ,VBV JUCSHY :V;WCW<[<b (W 'W NV BX 1X 2W &Y@Y 9X >Z 0R5Z 2X GT9[ GY?Z AY 9[>[ KR;Z FX -X 1[ 1[ (X 5V>dL^9X,X&X9[ J[7W&X9_$X " >"-X (\\6Z+X/X'X -X -X8[!X -X&X0X8`![;[&X ([;[&X3Y&W7[ ?X 8Z;Z D` :^7^3X5Y CX ?Z ,W #W +W DY?] J]?Y KZ:R GY?] LZ8T JW -ZA^ MW6W MW ,W ,W?Y FW ,W7W7" >"W=W6W LY>Y J]?Y KY?] MW /T9X DX ,Y@] CWNW 9]>]'Y@Y =^ AY IW :V MW HYCXNW L\\>Y VAX >Y>Y LY ,W6W B] >X9X K[>[ MXDVMVDX,YIWIY LW=W GYHWHY N]>Y LY" >">Y :X :X@X LX,X%Y /X $ZAZ Ch KX0X ?X >[;[ ?V 6d >f LX /[HSFR BX 9Z3Y AX :V IX 7V1V #R@R BU0U G[>[ :UGU ,R@R 'V(U)V6W" >" LV(U<Z>U IX,X*X,X*X,X*X,X*X,X*X,X*W4X G[7W&X -X -X -X -X -X -X -X ,X9_%X8`![;[![;[![;[![;[![;[\"Z3Z(];[\"Z;Z NZ;Z NZ;Z NZ;Z CX <X -WJP;X\"Y?] LY?] LY?] " >"LY?] LY?] LY?] LY?XNZ9T<Z:R GZ8T KZ8T KZ8T KZ8T LW ,W ,W ,W +Y>Y JW6W LY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y HY@] KY@] KY@] KY@] B^ >]?Y A^ 6o Do Do Do " >"Do IV (_ CX (Y S (S ,[ 0[ GW4W J\\H\\ GW:W >^ :\\ %[@W MX ,VBV JXFSIZ :V:WEW:\\@e (V 'V MV BX 1X 2V $ZDZ 8X ?Z /U;] 2X GV=" >"\\ EZC[ @X 7[@[ JT?[ EX -X /Y 1Y &X 5V=bK\\7X,X&X<^ I]=Z&X=b#X -X ']:\\+X/X'X -X -X7[\"X -X&X0X7_ \\?\\%X '\\?\\%X2X&Z<\\ >X 7[?[ B^ 9^7^4Y5Y CX ?Y +W \"V +W " >" DZB_ J_CZ I[>T G[C_ K[=W JW ,\\GXNW MW6W MW ,W ,W>Y GW ,W7W7W=W6W KZBZ I_CZ J[C_ MW /W>Z DZ .ZB^ C` 8\\>\\&X>Y =\\ AY HW :V MW GZFYNY N]AZ N" >"WCX <ZBZ JZ:Q EW6W B] ?X7W K\\A^ NYFWMWFY,ZJWJY KW=X H[JWJ[ N_BZ JZBZ 8Y <ZDZ LX,X&Y .X #ZCZ >_ FX0X ?X =\\?\\ >V 5b <d KX .\\JSHT BX 8X2X @X :V " >"IX 5V4U Q?Q AV4V F\\A^ ;UGU ,Q?Q 'V'U*V6W LV'U<[AW IX,X*X,X*X,X*X,X*X,X*X,X+X4X F]=Z&X -X -X -X -X -X -X -X ,X=b$X7_ \\?\\ N\\?\\" >" N\\?\\ N\\?\\ N\\?\\ X1X(`?\\ [?[ L[?[ L[?[ L[?[ BX <X -WJS@Z\"ZB_ LZB_ LZB_ LZB_ LZB_ LZB_ LZBYM\\>W;[>T F[=W J[=W J[=W J[=W LW ,W ,W ,W *ZBZ IW6W KZBZ GZBZ " >"GZBZ GZBZ GZBZ 1Z F[BZ GZB^ KZB^ KZB^ KZB^ A\\ =_CZ ?\\ 3l Al Al Al Al HV (^ BX (X NS (S ,Z .Y FW4W In GX:X ?^ 9_ (]FZ MX " >",VBV J[ISL\\ :V9XGX9^Fi )W )W MV BX 1X 3W #[H[ Et Mx MZC_ 1X GZD^ C[G\\ @Y 7^F] IXF] DX -X ,V 1V #X 4V<^IY5X*X'y G_D^&{!y NX &`B`+X/X'X -X -X6[#" >"w LX&X0X7_ N^E^$X &^E^$X2Y'^C^ =X 7^E^ B^ 8]7]4Y3Y DX @~U&W \"W ,W C\\HYNW JWNXG\\ H]EX F\\GXNW J]D[ JW +kMW MW6W MW ,W ,W=Y HW ,W7W7W=W6W K]H] IWNX" >"G\\ I\\GXNW MW /[E\\ Be 9[GXNW B^ 7\\>\\'X<X =\\ AX GW :V MW G\\IYM^$`F\\ MWEX ;]H] J]BV EW6W A\\ ?X7X L_GaKP#ZJYMYJZ*[LWL[ KW=Y H\\LWL\\ MWNXG] J]H\\ 7a " >"C[H[ L~W'x MX 1iEi HX CX0X ?X <^E^ =V 4` :b JX -^MSLX Lz V0V ?X :V HW 4V7V MP>P @W8W 3~W :_GaKP @UGU ,P>P 'V&U+V6V KV&" >"U;]GZ JX*X,X*X,X*X,X*X,X*X,Y,Y,X4y7_D^&y Ny Ny Ny NX -X -X -X ,{\"X7_ N^E^ L^E^ L^E^ L^E^ L^E^ MV/V(dE^ N^E^ L^E^ L^E^ L^E^ BX <X -WJWF[ \\HYNW K\\HYNW K" >"\\HYNW K\\HYNW K\\HYNW K\\HYNW K\\H[K^E[:]EX E]D[ I]D[ I]D[ I]D[ LW ,W ,W ,W )[F[ HW6W K]H] G]H] G]H] G]H] G]H] 1Z F]G] F[GXNW J[GXNW J[GXNW J[GXNW A\\ =WNX" >"G\\ ?\\ 1h =h =h =h =h FV '] AV &W T )T +X -X EW4W Hl FX9W ?^ 8~R Jp MX ,VCV It 9V8XIX7sLZ *W )W MV BX 1X 3W #n Et M" >"x Mu 0X Gs Ao @X 5t In CX -X )S 1S X 4V9XFU1X*X'x Ex&z y NX %|*X/X'X -X -X5[$w LX&X0X6^ Mu#X %u#X1X'y =X 6u A^ 8]7]4X1X DX @~U&W \"W ,W ClMW J" >"WMk Fo EkMW Is JW *jMW MW6W MW ,W ,W<Y IW ,W7W7W=W6W Jp HWMk GkMW MW /q Ae 9kMW B^ 7\\=[(Y;X >\\ Av 6W :V MW FkL]$u LXGX 9p Hp EW6W A[ ?X6X LpN\\#" >"hKh)s JW<] Lu LWNm Hp 6` Bl K~W'x MX 1iEi HX CX0X ?X ;u <V 3^ 8` IX ,o Lz NT.T >X :V HW 3X=X )X<X 2~W :pN\\ @UGU V&" >"U+V7i.V&U:o JX*X,X*X,X*X,X*X,X*X,X*X-X3y6x&y Ny Ny Ny NX -X -X -X ,z!X6^ Mu Ju Ju Ju Ju KT-T(} Lu Ju Ju Ju AX <X -WJk NlMW KlMW KlMW KlMW KlMW KlMW Kn" >"Is9o Ds Hs Hs Hs LW ,W ,W ,W )p HW6W Jp Ep Ep Ep Ep Ls EkMW JkMW JkMW JkMW A\\ =WMk >\\ /c 8c 8c 8c 8c CV '\\ ?T %W U *T *W ,V DW4W Gj EW8W " >">\\ 5~P In LX -VBV Is 9V7g6qJZ *V )V LV BX 1X 3V !l Dt Mx Mt /X Gr ?m ?X 4r Hm BX -X &P 1P LX 3V 3X*X'w Cv%x My NX #x(X/X'X" >" -X -X4[%w LX&X0X5] Ls\"X $s\"X1Y(w ;X 5s ?\\ 7\\5\\5Y1Y EX @~U&W !V ,W BjLW JWMj Dn DjMW Hr JW )hLW MW6W MW ,W ,W;Y JW ,W7W7W=W6W In GWMj EjMW MW /p" >" ?d 8iLW B^ 6Z<[)Y:Y >Z @v 6W :V MW EiK]$t JYLZ 7n Fo EW6W A[ ?X5W LWNfM\\\"gKg'q IW<] Ks KWMk Fn 5` Aj J~W'x MX 1iEi HX CX0X ?X :s ;V 2\\ 6" >"^ HX +n Lz MR,R =X :V HW 1ZEZ %ZDZ 0~W :WNfM\\ @UGU !V%U,V6i/V%U9n JX*X,X*X,X*X,X*X,X*X,X*X-X3y5v%y Ny Ny Ny NX -X -X -X ," >"x NX5] Ls Hs Hs Hs Hs IR+R(WMs Js Hs Hs Hs @X <X -WJk MjLW JjLW JjLW JjLW JjLW JjLW JmHr8n Cr Gr Gr Gr LW ,W ,W ,W (n GW6W In Cn Cn Cn Cn Ls CiLW Ii" >"LW IiLW IiLW @Z <WMj <Z +] 2] 2] 2] 2] @V &[ >R $V NU *U *U *U DW4W Fh DW8X ?\\ 4~ Hl KX -VBV Hp 8V5e4nGZ +W +W LV BX" >" 1X 3V j Ct Mx Mr -X Gq =j >Y 3p Gl AX -X 2X 3W 5X(X(u ?s$v Ky NX \"v'X/X'X -X -X3[&w LX&X0X5] Kq!X #p X0X(v :X 4p =\\ 7\\5\\6Y/Y FX @~U&W !V ,W " >" AhKW JWLh Bm ChLW Gq JW (eJW MW6W MW ,W ,W:Y KW ,W7W7W=W6W Hl FWLh ChLW MW /o >d 7gKW A\\ 5Z<Z(X8X >Z @v 6W :V MW DgI\\$s He 5l Dn EW6W @Y " >">W4X MWMeM\\!eIe%o HW<] Jq JWLi Dk 2_ @h J~Y(x MX 1iEi HX CX0X ?X 9q :V 1Z 4\\ GX *m Lz LP*P <X :V HW 0m \"l .~W :WMeM\\ @UGU " >" !V%U,V6i/V%U8l JX(X.X(X.X(X.X(X.X(X.Y)X/X2y3s$y Ny Ny Ny NX -X -X -X ,v LX5] Kq Fq Fq Fq Fq GP)P'VKp Gp Ep Ep Ep >X <X -WJj KhKW IhKW IhKW IhKW" >" IhKW IhKW IjEq7m Bq Fq Fq Fq LW ,W ,W ,W &j EW6W Hl Al Al Al Al Ls AgKW HgKW HgKW HgKW @Z <WLh ;Z MV &[ =P \"U V +V )S (S CW4W " >"De DX8X ?\\ 2| Fh IX -VBV Ek 6V4c1kEZ +V +V KV BW 0X 4W Mf At Mx Mq ,X Go :h =X 0l Ej ?X -W 1X 2W 6X(X(s ;o\"s Hy NX r%" >"X/X'X -X -X2['w LX&X0X4\\ Im NX !m NX0Y(t 9X 2m ;Z 5[5[5X-X FX @~U&W !W -W @fJW JWJe ?j AeJW En IW 'cIW MW6W MW ,W ,W9Y LW ,W7W7W=W6W Fh DWJe AeJ" >"W MW .m ;b 6eJW A\\ 5Z<Z)X6X >X ?v 6W :V MW CeG[$r Fc 2h Am EW6W @Y ?X3W MWMdL\\ cGc#m GW;\\ Hm HWKg Ah /] ?f I~Y(x MX 1iEi HX CX0X ?X 7m 8V 0" >"X 2Z FX (j Kz AX :V HW -g Lh ,~W :WMdL\\ @UGU \"V$U-V5i0V$U7i HX(X.X(X.X(X.X(X.X(X.X(X/X2y1o\"y Ny Ny Ny NX -X -X -X ,t" >" JX4\\ Im Bm Bm Bm Bm %VHm Dm Bm Bm Bm =X <X -WJh HfJW HfJW HfJW HfJW HfJW HfJW HhBn4j ?n Cn Cn Cn KW ,W ,W ,W %h DW6W Fh =h =h =h =h KVMi >eJW GeJW" >" GeJW GeJW ?X ;WJe 9X MW &Z =U W ,W *R &Q BW4W B` AW6W >[ /y Dd GX -VCV Af 5V2a.gBZ ,W -W KV CX 0X 4V " >" Kd @t Mx Km *X Ek 6d ;X .h Bh >X .X 1X 1W 7X(X(q 7j Np Ey NX Mm\"X/X'X -X -X1[(w LX&X0X4\\ Gi LX Ni LX/X$n 7X 0i 9Z 5[5[6Y-Y GX @~U&W V -W " >" >cIW JWIb <g =bIW Ci FW %_GW MW6W MW ,W ,W8Y MW ,W7W7W=W6W Ef CWIb =bIW MW +h 8a 5cIW @Z 4Y:Y*Y5X ?X ?v 6W :V MW AbDY$WMf Ca 0f >k EW6W @Y ?" >"W2W MWK`I[ NaEa i EW;\\ Fi FWIc >e ,\\ =b G~Y(x MX 1iEi HX CX0X ?X 5i 6V /V 0X EX &f Iz AX :V /P;W *c Gb )~W :WK`I[ @UGU " >" #V#U.V4i1V#U6f FX(X.X(X.X(X.X(X.X(X.X(X/X2y/j Ny Ny Ny Ny NX -X -X -X ,p FX4\\ Gi >i >i >i >i $VEi @i >i >i >i ;X <X -WIf EcIW FcIW FcIW FcIW Fc" >"IW FcIW Fd>i0g ;i >i >i >i HW ,W ,W ,W #d BW6W Ef ;f ;f ;f ;f JUJe ;cIW FcIW FcIW FcIW ?X ;WIb 7X MW %Y =T X -X )P %P AW4W ?Z" >" >W6X ?Z ,w B` EX .VBV <] 1V0]*b?[ -W -W KV CW /X 4V I` >t Mx Hg 'X Bf 2` :X +d =b ;X .W 0X 1X 9X&X)m 0d Kj ?y NX Jg " >"NX/X'X -X -X0[)w LX&X0X3[ Dc IX Kf LX/Y!g 4X .e 7Z 5Z3Z7Y+Y HX @~U&W V -W =`GW JWG^ 7b 9^GW Ad CW \"YDW MW6W MW ,W ,W7Y NW ,W7W7W=W6W B` @WG^ 9" >"^GW MW (c 2] 3_GW @Z 3X:X*Y4Y @X ?v 6W :V MW ?_AW$WKb @^ +` 9g CW6W ?W ?X2X NWJ^GY K]B^ Ke CW:[ Dd CWG_ 9` 'Y ;^ F~[)x MX 1iEi HX CX0X ?X 2c " >"3V .T .V DX $b Gz AX :V /R>X &[ ?Z %~W :WJ^GY ?UGU #V +V +V 1b EX&X0X&X0X&X0X&X0X&X0Y'X1X1y,d Ky Ny Ny Ny NX -X -X " >"-X ,j @X3[ Dc 8c 8c 8c 8c !VBc ;e :e :e :e 9X <X -WFa B`GW E`GW E`GW E`GW E`GW E`GW D`:d*b 7d 9d 9d 9d EW ,W ,W ,W !` @W6W B` 5` 5` 5` 5` HVHa 7_GW" >" D_GW D_GW D_GW ?X ;WG^ 5X MW 7S @r >Y BS .V,W#Z ;V -V 7W ;W EX ;\\ 6] " >"+Z 5\\ 5Z <W 7X %\\ <] \"X ([ 4c E] /[ (W W .W :Y #X 0Z 2X *\\ $W &W .Z =WDX 3XDW I[" >" 0Y 8W -W :V MW <Z ;WH[ 9Y &Z 1] LW ?W >WGXBU FX=X E` \"W >] @WDY 3Z 2X C[ >T :[ KV /TAY " >" EWGXBU =UGU BT 6V +V +V ,Y ?\\ +[ 0[ 0[ 0[ 0[ KT=[ 2[ 0[ 0[ 0[ 7Z ;Y .Y .Y .Y .Y .Y -" >"Y2\\\"Z /\\ 1\\ 1\\ 1\\ CZ 3Z /Z /Z /Z /Z FVCZ 1Y .Y .Y .Y ,W :WDX 2W LW 7R #S" >" >W /W 8W :V \"W 5X )X &Z CW NV .W :W %W" >" @W :W -X -W :V MW LW FW ?W >W NW 0W =W 3S GV /XGZ " >" DW HUGU AT %T 'R JT " >" #T (X :W NX LW 7S =V /V 7W :V \"W" >" 4X'Q &Y %Z DW NV .W :W %W @W :W -W ,W :V MW " >" LW FW ?W >W NW 0W =W 3S GV /j CW HUGU @T " >" %T 'P HT \"Q 'W 9W NW KW " >" 7S =W 1W 7V :W \"V 2X)R &X #Z " >" EW NW /W :W %W @W :W -W ,X ;V NX LW FW ?W >W NW 0W =W " >" 3S GV /j CW HUGU @U &U " >" U \"P 'W 9W NW KV 6S " >" <V 1V 6V :V !V 1Y-U 'X \"Z FW MV /W ;X %W " >" @W :W .X +W ;V NW KW FW ?W >W NW 0W =W 3S GV /h " >" AW HUGU ?T %T NT " >" )X 9W X KV 6S <W 3V 6V 9V \"V " >" /Z1X (X !Z Ga (V 9a ;W $W @W :W .W *W ;V NW KW " >" FW ?W >W NW 0W =W 3S GV .f @W HUGU ?U &" >"U U *W 8W W JV " >" 6S ;V 3V 6V :W \"V .[5[ *Y Z " >" Ha (W :a <X $W @W :W /X *X <V X KW FW ?W >W NW 0W =W " >" 3S GV +a >W HUGU >T %T " >" NT +X 8W !X (VIV 6S :V 5V 5U" >" 9W \"U +\\;] )X MZ Ia (W :a =Y %W ?W :W " >" /W )[ ?V #[ KW FW ?W >W NW 0W =W 3S GV 'Z ;W " >" HUGU >U &U U ,W 7W !" >"W 'VIV 6S :V 6W 6V 4V *_C` " >" )Y LZ Ja :a (P7Y $W ?W :W 0X (b GV +b JW FW ?W >W " >" NW 0W =W 3S GV 7W HUGU >U &U " >" U -X 7W \"X 'VJW " >" 6S 9V 7V 5U 3U 'x (Z KZ Ka :a " >" (R:Z $W ?W :W 0X (b GV +b JW FW ?W >W NW 0W =W 3S " >" GV 7W #U &U U " >" -X 7W \"X &UJW 6S 9W 9W " >" Bu ([ IZ La :a (T>[ $X ?W :W 1X &a GV +a " >" IW FW ?W >W NW 0W =W 3S GV 7W $V " >" 'V !V .X 6W #X %VLW " >" 5S 2p -a " >" 8XE] %Y >W :W 3Z $_ GV +_ GW FW ?W >W NW 0W =W " >" 3S GV 7W /QGW 2QGW ,QG" >"W 0Z 6W %Z %a 5S " >" 0l +a 8p +_ >W :W ;a !] G" >"V +] EW FW ?W >W NW 0W =W 3S GV 7W /` " >" 1` +` 7a 5W -a #` " >" >e '` " >" 7o *^ =W :W ;` KY GV +Y AW FW ?W >W NW 0W =W " >" 3S GV 7W /` 1` +` " >" 7` 4W -` \"_ " >" 8\\ #_ \"} 3n )^ =W :W ;` 9V " >" BW FW ?W >W NW 0W =W 'V 7W /_ " >" 0_ *_ 6` 4W -` !] " >" -] " >" } 3l '] <W :W ;_ 8V BW FW ?W >W NW 0W =W " >" 'V 7W /^ /^ )^ " >" 5_ 3W -_ N[ " >" ,[ M} 2j &\\ ;W :W ;^ 7V BW " >" FW ?W >W NW 0W =W 7W -Y *Y " >" $Y 2^ 2W -^ LX " >" *X J} " >" /d #Z 9W :W ;\\ 5V BW FW ?W >W NW 0W =W " >" 7W " >" /\\ 0W HT " >" I} *[ NW 6W :W ;Z 3V BW FW ?W >W" >" NW 0W =W 7W " >" /Z .W " >" =} " >" " >" D" }; > > > const unsigned char logo40x38[4576] = { > 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200, > 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0, > 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200, > 1,123,123,0,7,255,255,0,1,0,0,0,2,123,123,123,28,200,200,200,1,123,123,0,8,255,255,0,1,189,189,189,1,0,0,0, > 2,123,123,123,27,200,200,200,1,123,123,0,9,255,255,0,1,0,0,0,2,123,123,123,26,200,200,200,1,123,123,0,10,255, > 255,0,1,189,189,189,1,0,0,0,2,123,123,123,25,200,200,200,1,123,123,0,3,255,255,0,1,189,189,189,3,0,0,0,1,189, > 189,189,3,255,255,0,1,0,0,0,2,123,123,123,24,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,3,255,255,0,1,189, > 189,189,1,0,0,0,2,123,123,123,23,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,4,255,255,0,1,0,0,0,2,123,123,123, > 22,200,200,200,1,123,123,0,5,255,255,0,5,0,0,0,4,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,21,200,200,200, > 1,123,123,0,5,255,255,0,5,0,0,0,5,255,255,0,1,0,0,0,2,123,123,123,20,200,200,200,1,123,123,0,6,255,255,0,5,0,0, > 0,5,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,19,200,200,200,1,123,123,0,6,255,255,0,1,123,123,0,3,0,0,0,1, > 123,123,0,6,255,255,0,1,0,0,0,2,123,123,123,18,200,200,200,1,123,123,0,7,255,255,0,1,189,189,189,3,0,0,0,1,189, > 189,189,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,17,200,200,200,1,123,123,0,8,255,255,0,3,0,0,0,8,255,255, > 0,1,0,0,0,2,123,123,123,16,200,200,200,1,123,123,0,9,255,255,0,1,123,123,0,1,0,0,0,1,123,123,0,8,255,255,0,1,189, > 189,189,1,0,0,0,2,123,123,123,15,200,200,200,1,123,123,0,9,255,255,0,1,189,189,189,1,0,0,0,1,189,189,189,9,255,255, > 0,1,0,0,0,2,123,123,123,14,200,200,200,1,123,123,0,11,255,255,0,1,0,0,0,10,255,255,0,1,189,189,189,1,0,0,0,2,123, > 123,123,13,200,200,200,1,123,123,0,23,255,255,0,1,0,0,0,2,123,123,123,12,200,200,200,1,123,123,0,11,255,255,0,1,189, > 189,189,2,0,0,0,1,189,189,189,9,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,11,200,200,200,1,123,123,0,11,255,255, > 0,4,0,0,0,10,255,255,0,1,0,0,0,2,123,123,123,10,200,200,200,1,123,123,0,12,255,255,0,4,0,0,0,10,255,255,0,1,189,189, > 189,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,12,255,255,0,1,189,189,189,2,0,0,0,1,189,189,189,11,255,255,0,1, > 0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,27,255,255,0,1,0,0,0,3,123,123,123,8,200,200,200,1,123,123,0,26,255, > 255,0,1,189,189,189,1,0,0,0,3,123,123,123,9,200,200,200,1,123,123,0,24,255,255,0,1,189,189,189,1,0,0,0,4,123,123, > 123,10,200,200,200,1,123,123,0,24,0,0,0,5,123,123,123,12,200,200,200,27,123,123,123,14,200,200,200,25,123,123,123,86, > 200,200,200,91,49,124,118,124,71,32,124,95,49,56,114,52,82,121,0}; > > > > > > > inline std::FILE* output(std::FILE *file) { > cimg::mutex(1); > static std::FILE *res = stderr; > if (file) res = file; > cimg::mutex(1,0); > return res; > } > > > inline unsigned int nb_cpus() { > unsigned int res = 1; > > > > > > res = (unsigned int)sysconf(_SC_NPROCESSORS_ONLN); > > return res?res:1U; > } > > > inline int mutex(const unsigned int n, const int lock_mode) { > switch (lock_mode) { > case 0 : cimg::Mutex_attr().unlock(n); return 0; > case 1 : cimg::Mutex_attr().lock(n); return 0; > default : return cimg::Mutex_attr().trylock(n); > } > } ># 3800 "./CImg.h" > inline void warn(const char *const format, ...) { > if (cimg::exception_mode()>=1) { > char message[16384] = { 0 }; > std::va_list ap; > __builtin_va_start(ap,format); > vsnprintf(message,sizeof(message),format,ap); > __builtin_va_end(ap); > > > > std::fprintf(cimg::output(),"\n%s[CImg] *** Warning ***%s%s",cimg::t_red,cimg::t_normal,message); > > } > } ># 3824 "./CImg.h" > inline int system(const char *const command, const char *const module_name=0) { ># 3845 "./CImg.h" > return std::system(command); > return module_name?0:1; > > } > > > template<typename T> > inline T& temporary(const T&) { > static T temp; > return temp; > } > > > template<typename T> > inline void swap(T& a, T& b) { T t = a; a = b; b = t; } > > > template<typename T1, typename T2> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2) { > cimg::swap(a1,b1); cimg::swap(a2,b2); > } > > > template<typename T1, typename T2, typename T3> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3) { > cimg::swap(a1,b1,a2,b2); cimg::swap(a3,b3); > } > > > template<typename T1, typename T2, typename T3, typename T4> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4) { > cimg::swap(a1,b1,a2,b2,a3,b3); cimg::swap(a4,b4); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4); cimg::swap(a5,b5); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5); cimg::swap(a6,b6); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, > T7& a7, T7& b7) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6); cimg::swap(a7,b7); > } > > > template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> > inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, > T7& a7, T7& b7, T8& a8, T8& b8) { > cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7); cimg::swap(a8,b8); > } > > > > > > inline bool endianness() { > const int x = 1; > return ((unsigned char*)&x)[0]?false:true; > } > > > > > > > template<typename T> > inline void invert_endianness(T* const buffer, const unsigned long size) { > if (size) switch (sizeof(T)) { > case 1 : break; > case 2 : { for (unsigned short *ptr = (unsigned short*)buffer+size; ptr>(unsigned short*)buffer; ) { > const unsigned short val = *(--ptr); > *ptr = (unsigned short)((val>>8)|((val<<8))); > } > } break; > case 4 : { for (unsigned int *ptr = (unsigned int*)buffer+size; ptr>(unsigned int*)buffer; ) { > const unsigned int val = *(--ptr); > *ptr = (val>>24)|((val>>8)&0xff00)|((val<<8)&0xff0000)|(val<<24); > } > } break; > default : { for (T* ptr = buffer+size; ptr>buffer; ) { > unsigned char *pb = (unsigned char*)(--ptr), *pe = pb + sizeof(T); > for (int i = 0; i<(int)sizeof(T)/2; ++i) swap(*(pb++),*(--pe)); > } > } > } > } > > > > > > > template<typename T> > inline T& invert_endianness(T& a) { > invert_endianness(&a,1); > return a; > } > > > inline unsigned int float2uint(const float f) { > int tmp = 0; > std::memcpy(&tmp,&f,sizeof(float)); > if (tmp>=0) return (unsigned int)f; > unsigned int u; > std::memcpy(&u,&f,sizeof(float)); > return ((u)<<1)>>1; > } > > inline float uint2float(const unsigned int u) { > if (u<(1U<<19)) return (float)u; > float f; > const unsigned int v = u|(1U<<(8*sizeof(unsigned int)-1)); > std::memcpy(&f,&v,sizeof(float)); > return f; > } > > > > > > inline unsigned long time() { > > struct timeval st_time; > gettimeofday(&st_time,0); > return (unsigned long)(st_time.tv_usec/1000 + st_time.tv_sec*1000); > > > > > > > > } > > > inline unsigned long tictoc(const bool is_tic); > > > > > > inline unsigned long tic() { > return cimg::tictoc(true); > } > > > > > > inline unsigned long toc() { > return cimg::tictoc(false); > } > > > > > > > > inline void sleep(const unsigned int milliseconds) { > > struct timespec tv; > tv.tv_sec = milliseconds/1000; > tv.tv_nsec = (milliseconds%1000)*1000000; > nanosleep(&tv,0); > > > > } > > inline unsigned int _wait(const unsigned int milliseconds, unsigned long& timer) { > if (!timer) timer = cimg::time(); > const unsigned long current_time = cimg::time(); > if (current_time>=timer+milliseconds) { timer = current_time; return 0; } > const unsigned long time_diff = timer + milliseconds - current_time; > timer = current_time + time_diff; > cimg::sleep(time_diff); > return (unsigned int)time_diff; > } ># 4041 "./CImg.h" > inline unsigned int wait(const unsigned int milliseconds) { > cimg::mutex(3); > static unsigned long timer = 0; > if (!timer) timer = cimg::time(); > cimg::mutex(3,0); > return _wait(milliseconds,timer); > } ># 4089 "./CImg.h" > inline void srand() { > const unsigned int t = (unsigned int)cimg::time(); > > std::srand(t+(unsigned int)getpid()); > > > > > > } > > inline void srand(const unsigned int seed) { > std::srand(seed); > } > > > > > inline double rand() { > return (double)std::rand()/2147483647; > } > > > > > > inline double crand() { > return 1-2*cimg::rand(); > } > > > > > inline double grand() { > double x1, w; > do { > const double x2 = 2*cimg::rand() - 1.0; > x1 = 2*cimg::rand()-1.0; > w = x1*x1 + x2*x2; > } while (w<=0 || w>=1.0); > return x1*std::sqrt((-2*std::log(w))/w); > } > > > > > inline unsigned int prand(const double z) { > if (z<=1.0e-10) return 0; > if (z>100) return (unsigned int)((std::sqrt(z) * cimg::grand()) + z); > unsigned int k = 0; > const double y = std::exp(-z); > for (double s = 1.0; s>=y; ++k) s*=cimg::rand(); > return k-1; > } > > > template<typename T> > inline T rol(const T a, const unsigned int n=1) { > return n?(T)((a<<n)|(a>>((sizeof(T)<<3)-n))):a; > } > > inline float rol(const float a, const unsigned int n=1) { > return (float)rol((int)a,n); > } > > inline double rol(const double a, const unsigned int n=1) { > return (double)rol((long)a,n); > } > > > template<typename T> > inline T ror(const T a, const unsigned int n=1) { > return n?(T)((a>>n)|(a<<((sizeof(T)<<3)-n))):a; > } > > inline float ror(const float a, const unsigned int n=1) { > return (float)ror((int)a,n); > } > > inline double ror(const double a, const unsigned int n=1) { > return (double)ror((long)a,n); > } > > > template<typename T> > inline T abs(const T a) { > return a>=0?a:-a; > } > inline bool abs(const bool a) { > return a; > } > inline unsigned char abs(const unsigned char a) { > return a; > } > inline unsigned short abs(const unsigned short a) { > return a; > } > inline unsigned int abs(const unsigned int a) { > return a; > } > inline unsigned long abs(const unsigned long a) { > return a; > } > inline double abs(const double a) { > return std::fabs(a); > } > inline float abs(const float a) { > return (float)std::fabs((double)a); > } > inline int abs(const int a) { > return std::abs(a); > } > > > template<typename T> > inline T sqr(const T val) { > return val*val; > } > > > inline int xln(const int x) { > return x>0?(int)(1+std::log10((double)x)):1; > } > > > template<typename t1, typename t2> > inline typename cimg::superset<t1,t2>::type min(const t1& a, const t2& b) { > typedef typename cimg::superset<t1,t2>::type t1t2; > return (t1t2)(a<=b?a:b); > } > > > template<typename t1, typename t2, typename t3> > inline typename cimg::superset2<t1,t2,t3>::type min(const t1& a, const t2& b, const t3& c) { > typedef typename cimg::superset2<t1,t2,t3>::type t1t2t3; > return (t1t2t3)cimg::min(cimg::min(a,b),c); > } > > > template<typename t1, typename t2, typename t3, typename t4> > inline typename cimg::superset3<t1,t2,t3,t4>::type min(const t1& a, const t2& b, const t3& c, const t4& d) { > typedef typename cimg::superset3<t1,t2,t3,t4>::type t1t2t3t4; > return (t1t2t3t4)cimg::min(cimg::min(a,b,c),d); > } > > > template<typename t1, typename t2> > inline typename cimg::superset<t1,t2>::type max(const t1& a, const t2& b) { > typedef typename cimg::superset<t1,t2>::type t1t2; > return (t1t2)(a>=b?a:b); > } > > > template<typename t1, typename t2, typename t3> > inline typename cimg::superset2<t1,t2,t3>::type max(const t1& a, const t2& b, const t3& c) { > typedef typename cimg::superset2<t1,t2,t3>::type t1t2t3; > return (t1t2t3)cimg::max(cimg::max(a,b),c); > } > > > template<typename t1, typename t2, typename t3, typename t4> > inline typename cimg::superset3<t1,t2,t3,t4>::type max(const t1& a, const t2& b, const t3& c, const t4& d) { > typedef typename cimg::superset3<t1,t2,t3,t4>::type t1t2t3t4; > return (t1t2t3t4)cimg::max(cimg::max(a,b,c),d); > } > > > template<typename T> > inline T sign(const T x) { > return (x<0)?(T)(-1):(x==0?(T)0:(T)1); > } > > > template<typename T> > inline unsigned long nearest_pow2(const T x) { > unsigned long i = 1; > while (x>i) i<<=1; > return i; > } > > > inline double sinc(const double x) { > return x?std::sin(x)/x:1; > } > > > > > > > > template<typename T> > inline T mod(const T& x, const T& m) { > const double dx = (double)x, dm = (double)m; > return (T)(dx - dm * std::floor(dx / dm)); > } > inline int mod(const bool x, const bool m) { > return m?(x?1:0):0; > } > inline int mod(const char x, const char m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const short x, const short m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const int x, const int m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const long x, const long m) { > return x>=0?x%m:(x%m?m+x%m:0); > } > inline int mod(const unsigned char x, const unsigned char m) { > return x%m; > } > inline int mod(const unsigned short x, const unsigned short m) { > return x%m; > } > inline int mod(const unsigned int x, const unsigned int m) { > return x%m; > } > inline int mod(const unsigned long x, const unsigned long m) { > return x%m; > } > > > > > > > > template<typename T> > inline T minmod(const T a, const T b) { > return a*b<=0?0:(a>0?(a<b?a:b):(a<b?b:a)); > } > > > inline double log2(const double x) { > static const double base = std::log(2.0); > return std::log(x)/base; > } ># 4337 "./CImg.h" > template<typename T> > inline T round(const T x, const double y=1, const int rounding_type=0) { > if (y<=0) return x; > const double sx = (double)x/y, floor = std::floor(sx), delta = sx - floor; > return (T)(y*(rounding_type<0?floor:rounding_type>0?std::ceil(sx):delta<0.5?floor:std::ceil(sx))); > } > > inline double _pythagore(double a, double b) { > const double absa = cimg::abs(a), absb = cimg::abs(b); > if (absa>absb) { const double tmp = absb/absa; return absa*std::sqrt(1.0+tmp*tmp); } > else { const double tmp = absa/absb; return absb==0?0:absb*std::sqrt(1.0+tmp*tmp); } > } > > inline bool _is_self_expr(const char *expression) { > if (!expression || *expression=='>' || *expression=='<') return false; > for (const char *s = expression; *s; ++s) > if ((*s=='i' || *s=='j') && (s[1]=='(' || s[1]=='[')) return true; > return false; > } > > > inline char uncase(const char x) { > return (char)((x<'A'||x>'Z')?x:x-'A'+'a'); > } > > > inline void uncase(char *const str) { > if (str) for (char *ptr = str; *ptr; ++ptr) *ptr = uncase(*ptr); > } > > > > > > > > inline double atof(const char *const str) { > double x = 0, y = 1; > if (!str) return 0; else { std::sscanf(str,"%lf/%lf",&x,&y); return x/y; } > } ># 4386 "./CImg.h" > inline int strncasecmp(const char *const str1, const char *const str2, const int l) { > if (!l) return 0; > if (!str1) return str2?-1:0; > const char *nstr1 = str1, *nstr2 = str2; > int k, diff = 0; for (k = 0; k<l && !(diff = uncase(*nstr1)-uncase(*nstr2)); ++k) { ++nstr1; ++nstr2; } > return k!=l?diff:0; > } ># 4401 "./CImg.h" > inline int strcasecmp(const char *const str1, const char *const str2) { > if (!str1) return str2?-1:0; > const unsigned int > l1 = (unsigned int)std::strlen(str1), > l2 = (unsigned int)std::strlen(str2); > return cimg::strncasecmp(str1,str2,1+(l1<l2?l1:l2)); > } ># 4417 "./CImg.h" > inline bool strpare(char *const str, const char delimiter=' ', const bool is_symmetric=false, const bool is_iterative=false) { > if (!str) return false; > const int l = (int)std::strlen(str); > int p, q; > if (is_symmetric) for (p = 0, q = l-1; p<q && str[p]==delimiter && str[q]==delimiter; ) { --q; ++p; if (!is_iterative) break; } > else { > for (p = 0; p<l && str[p]==delimiter; ) { ++p; if (!is_iterative) break; } > for (q = l-1; q>p && str[q]==delimiter; ) { --q; if (!is_iterative) break; } > } > const int n = q - p + 1; > if (n!=l) { std::memmove(str,str+p,n); str[n] = 0; return true; } > return false; > } > > > > > > inline void strunescape(char *const str) { > > unsigned int val = 0; > for (char *ns = str, *nd = str; *ns || (bool)(*nd=0); ++nd) if (*ns=='\\') switch (*(++ns)) { > case 'n': *nd = '\n'; ++ns; break;; > case 't': *nd = '\t'; ++ns; break;; > case 'v': *nd = '\v'; ++ns; break;; > case 'b': *nd = '\b'; ++ns; break;; > case 'r': *nd = '\r'; ++ns; break;; > case 'f': *nd = '\f'; ++ns; break;; > case 'a': *nd = '\a'; ++ns; break;; > case '\\': *nd = '\\'; ++ns; break;; > case '\?': *nd = '\?'; ++ns; break;; > case '\'': *nd = '\''; ++ns; break;; > case '\"': *nd = '\"'; ++ns; break;; > case 0 : *nd = 0; break; > case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : > std::sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns; > *nd = val; break; > case 'x': > std::sscanf(++ns,"%x",&val); while ((*ns>='0' && *ns<='7') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns; > *nd = val; break; > default : *nd = *(ns++); > } else *nd = *(ns++); > } > > > inline const char *strbuffersize(const unsigned long size) { > static char res[256] = { 0 }; > cimg::mutex(5); > if (size<1024LU) snprintf(res,sizeof(res),"%lu byte%s",size,size>1?"s":""); > else if (size<1024*1024LU) { const float nsize = size/1024.0f; snprintf(res,sizeof(res),"%.1f Kio",nsize); } > else if (size<1024*1024*1024LU) { const float nsize = size/(1024*1024.0f); snprintf(res,sizeof(res),"%.1f Mio",nsize); } > else { const float nsize = size/(1024*1024*1024.0f); snprintf(res,sizeof(res),"%.1f Gio",nsize); } > cimg::mutex(5,0); > return res; > } > > > inline const char *stros() { > > const char *const str = "Linux"; ># 4495 "./CImg.h" > return str; > } > > > inline const char* basename(const char *const str) { > const char *p = 0; > for (const char *np = str; np>=str && (p=np); np = std::strchr(np,'/')+1) {} > return p; > } > > > inline const char* filenamerand() { > cimg::mutex(6); > static char randomid[9] = { 0 }; > cimg::srand(); > for (unsigned int k = 0; k<8; ++k) { > const int v = (int)std::rand()%3; > randomid[k] = (char)(v==0?('0'+(std::rand()%10)):(v==1?('a'+(std::rand()%26)):('A'+(std::rand()%26)))); > } > cimg::mutex(6,0); > return randomid; > } > > > inline void winformat_string(char *const str) { > if (str && *str) { > > > > > } > } ># 4536 "./CImg.h" > inline std::FILE *fopen(const char *const path, const char *const mode) { > if (!path) > throw CImgArgumentException("cimg::fopen(): Specified file path is (null)."); > if (!mode) > throw CImgArgumentException("cimg::fopen(): File '%s', specified mode is (null).", > path); > std::FILE *res = 0; > if (*path=='-' && (!path[1] || path[1]=='.')) { > res = (*mode=='r')?stdin:stdout; > > > > > > } else res = std::fopen(path,mode); > if (!res) throw CImgIOException("cimg::fopen(): Failed to open file '%s' with mode '%s'.", > path,mode); > return res; > } ># 4563 "./CImg.h" > inline int fclose(std::FILE *file) { > if (!file) warn("cimg::fclose(): Specified file is (null)."); > if (!file || file==stdin || file==stdout) return 0; > const int errn = std::fclose(file); > if (errn!=0) warn("cimg::fclose(): Error code %d returned during file closing.", > errn); > return errn; > } > > > > > > > > inline const char* temporary_path(const char *const user_path=0, const bool reinit_path=false) { > > > > > > > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > char tmp[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > snprintf(filetmp,sizeof(filetmp),"%s.tmp",cimg::filenamerand()); > char *tmpPath = std::getenv("TMP"); > if (!tmpPath) { tmpPath = std::getenv("TEMP"); winformat_string(tmpPath); } > if (tmpPath) if (!path_found) { snprintf(s_path,1024,"%s",tmpPath); snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,'/',filetmp); if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } }; ># 4612 "./CImg.h" > if (!path_found) { snprintf(s_path,1024,"%s","/tmp"); snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,'/',filetmp); if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } }; > if (!path_found) { snprintf(s_path,1024,"%s","/var/tmp"); snprintf(tmp,sizeof(tmp),"%s%c%s",s_path,'/',filetmp); if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } }; > > if (!path_found) { > *s_path = 0; > std::strncpy(tmp,filetmp,sizeof(tmp)-1); > if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } > } > if (!path_found) { > cimg::mutex(7,0); > throw CImgIOException("cimg::temporary_path(): Failed to locate path for writing temporary files.\n"); > } > } > cimg::mutex(7,0); > return s_path; > } ># 4669 "./CImg.h" > inline const char* imagemagick_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; ># 4762 "./CImg.h" > if (!path_found) { > std::strcpy(s_path,"./convert"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"convert"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char* graphicsmagick_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; ># 4873 "./CImg.h" > if (!path_found) { > std::strcpy(s_path,"./gm"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"gm"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char* medcon_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; ># 4920 "./CImg.h" > if (!path_found) { > std::strcpy(s_path,"./medcon"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"medcon"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *ffmpeg_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./ffmpeg"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"ffmpeg"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *gzip_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./gzip"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"gzip"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *gunzip_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./gunzip"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"gunzip"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *dcraw_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./dcraw"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"dcraw"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *wget_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./wget"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"wget"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > > > > > > inline const char *curl_path(const char *const user_path=0, const bool reinit_path=false) { > static char *s_path = 0; > cimg::mutex(7); > if (reinit_path) { delete[] s_path; s_path = 0; } > if (user_path) { > if (!s_path) s_path = new char[1024]; > std::memset(s_path,0,1024); > std::strncpy(s_path,user_path,1023); > } else if (!s_path) { > s_path = new char[1024]; > std::memset(s_path,0,1024); > bool path_found = false; > std::FILE *file = 0; > > > > > > > > if (!path_found) { > std::strcpy(s_path,"./curl"); > if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } > } > if (!path_found) std::strcpy(s_path,"curl"); > > winformat_string(s_path); > } > cimg::mutex(7,0); > return s_path; > } > > > inline const char *split_filename(const char *const filename, char *const body=0) { > if (!filename) { if (body) *body = 0; return 0; } > const char *p = 0; for (const char *np = filename; np>=filename && (p=np); np = std::strchr(np,'.')+1) {} > if (p==filename) { > if (body) std::strcpy(body,filename); > return filename + std::strlen(filename); > } > const unsigned int l = (unsigned int)(p - filename - 1); > if (body) { std::memcpy(body,filename,l); body[l] = 0; } > return p; > } > > > inline char* number_filename(const char *const filename, const int number, const unsigned int digits, char *const str) { > if (!filename) { if (str) *str = 0; return 0; } > char format[1024] = { 0 }, body[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename,body); > if (*ext) snprintf(format,sizeof(format),"%%s_%%.%ud.%%s",digits); > else snprintf(format,sizeof(format),"%%s_%%.%ud",digits); > std::sprintf(str,format,body,number,ext); > return str; > } > > > > > > > > inline const char *file_type(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); > static const char > *const _pnm = "pnm", > *const _pfm = "pfm", > *const _bmp = "bmp", > *const _gif = "gif", > *const _jpg = "jpg", > *const _off = "off", > *const _pan = "pan", > *const _png = "png", > *const _tif = "tif", > *const _inr = "inr", > *const _dcm = "dcm"; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > const char *f_type = 0, *head; > char header[2048] = { 0 }, item[1024] = { 0 }; > const unsigned char *const uheader = (unsigned char*)header; > int err; char cerr; > const unsigned int siz = (unsigned int)std::fread(header,2048,1,nfile); > if (!file) cimg::fclose(nfile); > > if (!std::strncmp(header,"OFF\n",4)) f_type = _off; > else if (!std::strncmp(header,"#INRIMAGE",9)) f_type = _inr; > else if (!std::strncmp(header,"PANDORE",7)) f_type = _pan; > else if (!std::strncmp(header+128,"DICM",4)) f_type = _dcm; > else if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) f_type = _jpg; > else if (header[0]=='B' && header[1]=='M') f_type = _bmp; > else if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' && > (header[4]=='7' || header[4]=='9')) f_type = _gif; > else if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 && > uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) f_type = _png; > else if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) f_type = _tif; > else { > head = header; > while (head<header+siz && (err=std::sscanf(head,"%1023[^\n]",item))!=(-1) && (*item=='#' || !err)) > head+=1+(err?std::strlen(item):0); > if (std::sscanf(item," P%d",&err)==1) f_type = _pnm; > else if (std::sscanf(item," P%c",&cerr)==1 && (cerr=='f' || cerr=='F')) f_type = _pfm; > } > return f_type; > } ># 5242 "./CImg.h" > template<typename T> > inline int fread(T *const ptr, const unsigned long nmemb, std::FILE *stream) { > if (!ptr || nmemb<=0 || !stream) > throw CImgArgumentException("cimg::fread(): Invalid reading request of %u %s%s from file %p to buffer %p.", > nmemb,cimg::type<T>::string(),nmemb>1?"s":"",stream,ptr); > > const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); > unsigned long to_read = nmemb, al_read = 0, l_to_read = 0, l_al_read = 0; > do { > l_to_read = (to_read*sizeof(T))<wlimitT?to_read:wlimit; > l_al_read = (unsigned long)std::fread((void*)(ptr+al_read),sizeof(T),l_to_read,stream); > al_read+=l_al_read; > to_read-=l_al_read; > } while (l_to_read==l_al_read && to_read>0); > if (to_read>0) > warn("cimg::fread(): Only %u/%u elements could be read from file.", > al_read,nmemb); > return al_read; > } ># 5270 "./CImg.h" > template<typename T> > inline int fwrite(const T *ptr, const unsigned long nmemb, std::FILE *stream) { > if (!ptr || !stream) > throw CImgArgumentException("cimg::fwrite(): Invalid writing request of %u %s%s from buffer %p to file %p.", > nmemb,cimg::type<T>::string(),nmemb>1?"s":"",ptr,stream); > if (nmemb<=0) return 0; > const unsigned long wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); > unsigned long to_write = nmemb, al_write = 0, l_to_write = 0, l_al_write = 0; > do { > l_to_write = (to_write*sizeof(T))<wlimitT?to_write:wlimit; > l_al_write = (unsigned long)std::fwrite((void*)(ptr+al_write),sizeof(T),l_to_write,stream); > al_write+=l_al_write; > to_write-=l_al_write; > } while (l_to_write==l_al_write && to_write>0); > if (to_write>0) > warn("cimg::fwrite(): Only %u/%u elements could be written in file.", > al_write,nmemb); > return al_write; > } > > > > > > > inline void fempty(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > if (!file) cimg::fclose(nfile); > } ># 5310 "./CImg.h" > inline char *load_network_external(const char *const filename, char *const filename_local) { > if (!filename) > throw CImgArgumentException("cimg::load_network_external(): Specified filename is (null)."); > if (!filename_local) > throw CImgArgumentException("cimg::load_network_external(): Specified destination string is (null)."); > const char *const _ext = cimg::split_filename(filename), *const ext = (*_ext && _ext>filename)?_ext-1:_ext; > char command[1024] = { 0 }; > std::FILE *file = 0; > *filename_local = 0; > do { > snprintf(filename_local,512,"%s%c%s%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > if ((file=std::fopen(filename_local,"rb"))!=0) cimg::fclose(file); > } while (file); > > > snprintf(command,sizeof(command),"%s -f --silent --compressed -o \"%s\" \"%s\"", > cimg::curl_path(),filename_local,filename); > cimg::system(command); > if (!(file = std::fopen(filename_local,"rb"))) { > > > snprintf(command,sizeof(command),"%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", > cimg::wget_path(),filename_local,filename); > cimg::system(command); > if (!(file = std::fopen(filename_local,"rb"))) > throw CImgIOException("cimg::load_network_external(): Failed to load file '%s' with external tools 'wget' or 'curl'.",filename); > cimg::fclose(file); > > > snprintf(command,sizeof(command),"%s.gz",filename_local); > std::rename(filename_local,command); > snprintf(command,sizeof(command),"%s --quiet \"%s.gz\"", > gunzip_path(),filename_local); > cimg::system(command); > file = std::fopen(filename_local,"rb"); > if (!file) { > snprintf(command,sizeof(command),"%s.gz",filename_local); > std::rename(command,filename_local); > file = std::fopen(filename_local,"rb"); > } > } > std::fseek(file,0,2); > if (std::ftell(file)<=0) > throw CImgIOException("cimg::load_network_external(): Failed to load file '%s' with external commands 'wget' or 'curl'.",filename); > cimg::fclose(file); > return filename_local; > } > > > inline const char* option(const char *const name, const int argc, const char *const *const argv, > const char *const defaut, const char *const usage, const bool reset_static) { > static bool first = true, visu = false; > if (reset_static) { first = true; return 0; } > const char *res = 0; > if (first) { > first = false; > visu = cimg::option("-h",argc,argv,(char*)0,(char*)0,false)!=0; > visu |= cimg::option("-help",argc,argv,(char*)0,(char*)0,false)!=0; > visu |= cimg::option("--help",argc,argv,(char*)0,(char*)0,false)!=0; > } > if (!name && visu) { > if (usage) { > std::fprintf(cimg::output(),"\n %s%s%s",cimg::t_red,cimg::basename(argv[0]),cimg::t_normal); > std::fprintf(cimg::output(),": %s",usage); > std::fprintf(cimg::output()," (%s, %s)\n\n","Jun 20 2014","20:24:29"); > } > if (defaut) std::fprintf(cimg::output(),"%s\n",defaut); > } > if (name) { > if (argc>0) { > int k = 0; > while (k<argc && std::strcmp(argv[k],name)) ++k; > res = (k++==argc?defaut:(k==argc?argv[--k]:argv[k])); > } else res = defaut; > if (visu && usage) std::fprintf(cimg::output()," %s%-16s%s %-24s %s%s%s\n", > cimg::t_bold,name,cimg::t_normal,res?res:"0",cimg::t_green,usage,cimg::t_normal); > } > return res; > } > > inline const char* option(const char *const name, const int argc, const char *const *const argv, > const char *const defaut, const char *const usage=0) { > return option(name,argc,argv,defaut,usage,false); > } > > inline bool option(const char *const name, const int argc, const char *const *const argv, > const bool defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const bool res = s?(cimg::strcasecmp(s,"false") && cimg::strcasecmp(s,"off") && cimg::strcasecmp(s,"0")):defaut; > cimg::option(name,0,0,res?"true":"false",usage); > return res; > } > > inline int option(const char *const name, const int argc, const char *const *const argv, > const int defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const int res = s?std::atoi(s):defaut; > char tmp[256] = { 0 }; > snprintf(tmp,sizeof(tmp),"%d",res); > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline char option(const char *const name, const int argc, const char *const *const argv, > const char defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const char res = s?*s:defaut; > char tmp[8] = { 0 }; > *tmp = res; > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline float option(const char *const name, const int argc, const char *const *const argv, > const float defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const float res = s?(float)cimg::atof(s):defaut; > char tmp[256] = { 0 }; > snprintf(tmp,sizeof(tmp),"%g",res); > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline double option(const char *const name, const int argc, const char *const *const argv, > const double defaut, const char *const usage=0) { > const char *const s = cimg::option(name,argc,argv,(char*)0); > const double res = s?cimg::atof(s):defaut; > char tmp[256] = { 0 }; > snprintf(tmp,sizeof(tmp),"%g",res); > cimg::option(name,0,0,tmp,usage); > return res; > } > > inline const char* argument(const unsigned int nb, const int argc, const char *const *const argv, const unsigned int nb_singles=0, ...) { > for (int k = 1, pos = 0; k<argc;) { > const char *const item = argv[k]; > bool option = (*item=='-'), single_option = false; > if (option) { > va_list ap; > __builtin_va_start(ap,nb_singles); > for (unsigned int i = 0; i<nb_singles; ++i) if (!cimg::strcasecmp(item,__builtin_va_arg(ap,char*))) { single_option = true; break; } > __builtin_va_end(ap); > } > if (option) { ++k; if (!single_option) ++k; } > else { if (pos++==(int)nb) return item; else ++k; } > } > return 0; > } > > > > > > inline void info() { > char tmp[1024] = { 0 }; > std::fprintf(cimg::output(),"\n %s%sCImg Library %u.%u.%u%s, compiled %s ( %s ) with the following flags:\n\n", > cimg::t_red,cimg::t_bold,159/100,(159/10)%10,159%10, > cimg::t_normal,"Jun 20 2014","20:24:29"); > > std::fprintf(cimg::output()," > Operating System: %s%-13s%s %s('cimg_OS'=%d)%s\n", > cimg::t_bold, > 1==1?"Unix":(1==2?"Windows":"Unknow"), > cimg::t_normal,cimg::t_green, > 1, > cimg::t_normal); > > std::fprintf(cimg::output()," > CPU endianness: %s%s Endian%s\n", > cimg::t_bold, > cimg::endianness()?"Big":"Little", > cimg::t_normal); > > std::fprintf(cimg::output()," > Verbosity mode: %s%-13s%s %s('cimg_verbosity'=%d)%s\n", > cimg::t_bold, > 1==0?"Quiet":(1==1?"Console":(1==2?"Dialog":(1==3?"Console+Warnings":"Dialog+Warnings"))), > cimg::t_normal,cimg::t_green, > 1, > cimg::t_normal); > > std::fprintf(cimg::output()," > Stricts warnings: %s%-13s%s %s('cimg_strict_warnings' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using VT100 messages: %s%-13s%s %s('cimg_use_vt100' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > > std::fprintf(cimg::output()," > Display type: %s%-13s%s %s('cimg_display'=%d)%s\n", > cimg::t_bold, > 1==0?"No display":1==1?"X11":1==2?"Windows GDI":"Unknown", > cimg::t_normal,cimg::t_green, > 1, > cimg::t_normal); > > > std::fprintf(cimg::output()," > Using XShm for X11: %s%-13s%s %s('cimg_use_xshm' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using XRand for X11: %s%-13s%s %s('cimg_use_xrandr' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using OpenMP: %s%-13s%s %s('cimg_use_openmp' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > std::fprintf(cimg::output()," > Using PNG library: %s%-13s%s %s('cimg_use_png' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > std::fprintf(cimg::output()," > Using JPEG library: %s%-13s%s %s('cimg_use_jpeg' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using TIFF library: %s%-13s%s %s('cimg_use_tiff' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using Magick++ library: %s%-13s%s %s('cimg_use_magick' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using FFTW3 library: %s%-13s%s %s('cimg_use_fftw3' %s)%s\n", > cimg::t_bold, > > "Yes",cimg::t_normal,cimg::t_green,"defined", > > > > cimg::t_normal); > > std::fprintf(cimg::output()," > Using LAPACK library: %s%-13s%s %s('cimg_use_lapack' %s)%s\n", > cimg::t_bold, > > > > "No",cimg::t_normal,cimg::t_green,"undefined", > > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::imagemagick_path()); > std::fprintf(cimg::output()," > Path of ImageMagick: %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::graphicsmagick_path()); > std::fprintf(cimg::output()," > Path of GraphicsMagick: %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::medcon_path()); > std::fprintf(cimg::output()," > Path of 'medcon': %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > snprintf(tmp,sizeof(tmp),"\"%.1020s\"",cimg::temporary_path()); > std::fprintf(cimg::output()," > Temporary path: %s%-13s%s\n", > cimg::t_bold, > tmp, > cimg::t_normal); > > std::fprintf(cimg::output(),"\n"); > } ># 5685 "./CImg.h" > } ># 5735 "./CImg.h" > template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator+(const bool val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator-(const bool val, const CImg<T>& img) { typedef typename cimg::superset<T,bool>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator*(const bool val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator/(const bool val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator&(const bool val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator|(const bool val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,bool>::type> operator^(const bool val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const bool val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const bool val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator+(const unsigned char val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator-(const unsigned char val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned char>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator*(const unsigned char val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator/(const unsigned char val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator&(const unsigned char val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator|(const unsigned char val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned char>::type> operator^(const unsigned char val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned char val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned char val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator+(const char val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator-(const char val, const CImg<T>& img) { typedef typename cimg::superset<T,char>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator*(const char val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator/(const char val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator&(const char val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator|(const char val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,char>::type> operator^(const char val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const char val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const char val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator+(const signed char val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator-(const signed char val, const CImg<T>& img) { typedef typename cimg::superset<T,signed char>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator*(const signed char val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator/(const signed char val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator&(const signed char val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator|(const signed char val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,signed char>::type> operator^(const signed char val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const signed char val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const signed char val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator+(const unsigned short val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator-(const unsigned short val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned short>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator*(const unsigned short val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator/(const unsigned short val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator&(const unsigned short val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator|(const unsigned short val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned short>::type> operator^(const unsigned short val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned short val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned short val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator+(const short val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator-(const short val, const CImg<T>& img) { typedef typename cimg::superset<T,short>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator*(const short val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator/(const short val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator&(const short val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator|(const short val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,short>::type> operator^(const short val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const short val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const short val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator+(const unsigned int val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator-(const unsigned int val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned int>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator*(const unsigned int val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator/(const unsigned int val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator&(const unsigned int val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator|(const unsigned int val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned int>::type> operator^(const unsigned int val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned int val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned int val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator+(const int val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator-(const int val, const CImg<T>& img) { typedef typename cimg::superset<T,int>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator*(const int val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator/(const int val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator&(const int val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator|(const int val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,int>::type> operator^(const int val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const int val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const int val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator+(const unsigned long val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator-(const unsigned long val, const CImg<T>& img) { typedef typename cimg::superset<T,unsigned long>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator*(const unsigned long val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator/(const unsigned long val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator&(const unsigned long val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator|(const unsigned long val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,unsigned long>::type> operator^(const unsigned long val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const unsigned long val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const unsigned long val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator+(const long val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator-(const long val, const CImg<T>& img) { typedef typename cimg::superset<T,long>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator*(const long val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator/(const long val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator&(const long val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator|(const long val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,long>::type> operator^(const long val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const long val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const long val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator+(const float val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator-(const float val, const CImg<T>& img) { typedef typename cimg::superset<T,float>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator*(const float val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator/(const float val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator&(const float val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator|(const float val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,float>::type> operator^(const float val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const float val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const float val, const CImg<T>& img) { return img != val; } > template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator+(const double val, const CImg<T>& img) { return img + val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator-(const double val, const CImg<T>& img) { typedef typename cimg::superset<T,double>::type Tt; return CImg<Tt>(img._width,img._height,img._depth,img._spectrum,val)-=img; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator*(const double val, const CImg<T>& img) { return img*val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator/(const double val, const CImg<T>& img) { return val*img.get_invert(); } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator&(const double val, const CImg<T>& img) { return img & val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator|(const double val, const CImg<T>& img) { return img | val; } template<typename T> inline CImg<typename cimg::superset<T,double>::type> operator^(const double val, const CImg<T>& img) { return img ^ val; } template<typename T> inline bool operator==(const double val, const CImg<T>& img) { return img == val; } template<typename T> inline bool operator!=(const double val, const CImg<T>& img) { return img != val; } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator+(const char *const expression, const CImg<T>& img) { > return img + expression; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator-(const char *const expression, const CImg<T>& img) { > return CImg<typename cimg::superset<T,float>::type>(img._width,img._height,img._depth,img._spectrum,expression,true)-=img; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator*(const char *const expression, const CImg<T>& img) { > return img*expression; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> operator/(const char *const expression, const CImg<T>& img) { > return expression*img.get_invert(); > } > > template<typename T> > inline CImg<T> operator&(const char *const expression, const CImg<T>& img) { > return img & expression; > } > > template<typename T> > inline CImg<T> operator|(const char *const expression, const CImg<T>& img) { > return img | expression; > } > > template<typename T> > inline CImg<T> operator^(const char *const expression, const CImg<T>& img) { > return img ^ expression; > } > > template<typename T> > inline bool operator==(const char *const expression, const CImg<T>& img) { > return img == expression; > } > > template<typename T> > inline bool operator!=(const char *const expression, const CImg<T>& img) { > return img != expression; > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sqr(const CImg<T>& instance) { > return instance.get_sqr(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sqrt(const CImg<T>& instance) { > return instance.get_sqrt(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> exp(const CImg<T>& instance) { > return instance.get_exp(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> log(const CImg<T>& instance) { > return instance.get_log(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> log2(const CImg<T>& instance) { > return instance.get_log2(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> log10(const CImg<T>& instance) { > return instance.get_log10(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> abs(const CImg<T>& instance) { > return instance.get_abs(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sign(const CImg<T>& instance) { > return instance.get_sign(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> cos(const CImg<T>& instance) { > return instance.get_cos(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sin(const CImg<T>& instance) { > return instance.get_sin(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sinc(const CImg<T>& instance) { > return instance.get_sinc(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> tan(const CImg<T>& instance) { > return instance.get_tan(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> acos(const CImg<T>& instance) { > return instance.get_acos(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> asin(const CImg<T>& instance) { > return instance.get_asin(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> atan(const CImg<T>& instance) { > return instance.get_atan(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> cosh(const CImg<T>& instance) { > return instance.get_cosh(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> sinh(const CImg<T>& instance) { > return instance.get_sinh(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> tanh(const CImg<T>& instance) { > return instance.get_tanh(); > } > > template<typename T> > inline CImg<T> transpose(const CImg<T>& instance) { > return instance.get_transpose(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> invert(const CImg<T>& instance) { > return instance.get_invert(); > } > > template<typename T> > inline CImg<typename cimg::superset<T,float>::type> pseudoinvert(const CImg<T>& instance) { > return instance.get_pseudoinvert(); > } ># 5919 "./CImg.h" > struct CImgDisplay { > unsigned long _timer, _fps_frames, _fps_timer; > unsigned int _width, _height, _normalization; > float _fps_fps, _min, _max; > bool _is_fullscreen; > char *_title; > volatile unsigned int _window_width, _window_height, _button, _keys[128], _released_keys[128]; > volatile int _window_x, _window_y, _mouse_x, _mouse_y, _wheel; > volatile bool _is_closed, _is_resized, _is_moved, _is_event, > _is_keyESC, _is_keyF1, _is_keyF2, _is_keyF3, _is_keyF4, _is_keyF5, _is_keyF6, _is_keyF7, > _is_keyF8, _is_keyF9, _is_keyF10, _is_keyF11, _is_keyF12, _is_keyPAUSE, _is_key1, _is_key2, > _is_key3, _is_key4, _is_key5, _is_key6, _is_key7, _is_key8, _is_key9, _is_key0, > _is_keyBACKSPACE, _is_keyINSERT, _is_keyHOME, _is_keyPAGEUP, _is_keyTAB, _is_keyQ, _is_keyW, _is_keyE, > _is_keyR, _is_keyT, _is_keyY, _is_keyU, _is_keyI, _is_keyO, _is_keyP, _is_keyDELETE, > _is_keyEND, _is_keyPAGEDOWN, _is_keyCAPSLOCK, _is_keyA, _is_keyS, _is_keyD, _is_keyF, _is_keyG, > _is_keyH, _is_keyJ, _is_keyK, _is_keyL, _is_keyENTER, _is_keySHIFTLEFT, _is_keyZ, _is_keyX, > _is_keyC, _is_keyV, _is_keyB, _is_keyN, _is_keyM, _is_keySHIFTRIGHT, _is_keyARROWUP, _is_keyCTRLLEFT, > _is_keyAPPLEFT, _is_keyALT, _is_keySPACE, _is_keyALTGR, _is_keyAPPRIGHT, _is_keyMENU, _is_keyCTRLRIGHT, _is_keyARROWLEFT, > _is_keyARROWDOWN, _is_keyARROWRIGHT, _is_keyPAD0, _is_keyPAD1, _is_keyPAD2, _is_keyPAD3, _is_keyPAD4, _is_keyPAD5, > _is_keyPAD6, _is_keyPAD7, _is_keyPAD8, _is_keyPAD9, _is_keyPADADD, _is_keyPADSUB, _is_keyPADMUL, _is_keyPADDIV; ># 5986 "./CImg.h" > ~CImgDisplay() { > assign(); > } ># 6001 "./CImg.h" > CImgDisplay(): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(); > } ># 6021 "./CImg.h" > CImgDisplay(const unsigned int width, const unsigned int height, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(width,height,title,normalization,is_fullscreen,is_closed); > } ># 6042 "./CImg.h" > template<typename T> > explicit CImgDisplay(const CImg<T>& img, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(img,title,normalization,is_fullscreen,is_closed); > } ># 6064 "./CImg.h" > template<typename T> > explicit CImgDisplay(const CImgList<T>& list, > const char *const title=0, const unsigned int normalization=3, > const bool is_fullscreen=false, const bool is_closed=false): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(list,title,normalization,is_fullscreen,is_closed); > } > > > > > > > CImgDisplay(const CImgDisplay& disp): > _width(0),_height(0),_normalization(0), > _min(0),_max(0), > _is_fullscreen(false), > _title(0), > _window_width(0),_window_height(0),_button(0), > _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), > _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { > assign(disp); > } ># 6160 "./CImg.h" > static CImgDisplay& empty() { > static CImgDisplay _empty; > return _empty.assign(); > } > > > static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz, > const int dmin, const int dmax,const bool return_y) { > const unsigned int _nw = dx + (dz>1?dz:0), _nh = dy + (dz>1?dz:0); > unsigned int nw = _nw?_nw:1, nh = _nh?_nh:1; > const unsigned int > sw = CImgDisplay::screen_width(), sh = CImgDisplay::screen_height(), > mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin, > mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin, > Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax, > Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax; > if (nw<mw) { nh = nh*mw/nw; nh+=(nh==0?1:0); nw = mw; } > if (nh<mh) { nw = nw*mh/nh; nw+=(nw==0?1:0); nh = mh; } > if (nw>Mw) { nh = nh*Mw/nw; nh+=(nh==0?1:0); nw = Mw; } > if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0?1:0); nh = Mh; } > if (nw<mw) nw = mw; > if (nh<mh) nh = mh; > return return_y?nh:nw; > } ># 6196 "./CImg.h" > template<typename t> > CImgDisplay& operator=(const CImg<t>& img) { > return display(img); > } > > > > > > template<typename t> > CImgDisplay& operator=(const CImgList<t>& list) { > return display(list); > } > > > > > > CImgDisplay& operator=(const CImgDisplay& disp) { > return assign(disp); > } > > > > > > operator bool() const { > return !is_empty(); > } ># 6236 "./CImg.h" > bool is_empty() const { > return !(_width && _height); > } > > > > > > > > bool is_closed() const { > return _is_closed; > } > > > > > bool is_resized() const { > return _is_resized; > } > > > > > bool is_moved() const { > return _is_moved; > } > > > > > bool is_event() const { > return _is_event; > } > > > > > bool is_fullscreen() const { > return _is_fullscreen; > } > > > > > > bool is_key() const { > return _is_keyESC || _is_keyF1 || _is_keyF2 || _is_keyF3 || > _is_keyF4 || _is_keyF5 || _is_keyF6 || _is_keyF7 || > _is_keyF8 || _is_keyF9 || _is_keyF10 || _is_keyF11 || > _is_keyF12 || _is_keyPAUSE || _is_key1 || _is_key2 || > _is_key3 || _is_key4 || _is_key5 || _is_key6 || > _is_key7 || _is_key8 || _is_key9 || _is_key0 || > _is_keyBACKSPACE || _is_keyINSERT || _is_keyHOME || > _is_keyPAGEUP || _is_keyTAB || _is_keyQ || _is_keyW || > _is_keyE || _is_keyR || _is_keyT || _is_keyY || > _is_keyU || _is_keyI || _is_keyO || _is_keyP || > _is_keyDELETE || _is_keyEND || _is_keyPAGEDOWN || > _is_keyCAPSLOCK || _is_keyA || _is_keyS || _is_keyD || > _is_keyF || _is_keyG || _is_keyH || _is_keyJ || > _is_keyK || _is_keyL || _is_keyENTER || > _is_keySHIFTLEFT || _is_keyZ || _is_keyX || _is_keyC || > _is_keyV || _is_keyB || _is_keyN || _is_keyM || > _is_keySHIFTRIGHT || _is_keyARROWUP || _is_keyCTRLLEFT || > _is_keyAPPLEFT || _is_keyALT || _is_keySPACE || _is_keyALTGR || > _is_keyAPPRIGHT || _is_keyMENU || _is_keyCTRLRIGHT || > _is_keyARROWLEFT || _is_keyARROWDOWN || _is_keyARROWRIGHT || > _is_keyPAD0 || _is_keyPAD1 || _is_keyPAD2 || > _is_keyPAD3 || _is_keyPAD4 || _is_keyPAD5 || > _is_keyPAD6 || _is_keyPAD7 || _is_keyPAD8 || > _is_keyPAD9 || _is_keyPADADD || _is_keyPADSUB || > _is_keyPADMUL || _is_keyPADDIV; > } ># 6324 "./CImg.h" > bool is_key(const unsigned int keycode) const { > > if (keycode==cimg::keyESC) return _is_keyESC;; if (keycode==cimg::keyF1) return _is_keyF1;; if (keycode==cimg::keyF2) return _is_keyF2;; if (keycode==cimg::keyF3) return _is_keyF3;; > if (keycode==cimg::keyF4) return _is_keyF4;; if (keycode==cimg::keyF5) return _is_keyF5;; if (keycode==cimg::keyF6) return _is_keyF6;; if (keycode==cimg::keyF7) return _is_keyF7;; > if (keycode==cimg::keyF8) return _is_keyF8;; if (keycode==cimg::keyF9) return _is_keyF9;; if (keycode==cimg::keyF10) return _is_keyF10;; if (keycode==cimg::keyF11) return _is_keyF11;; > if (keycode==cimg::keyF12) return _is_keyF12;; if (keycode==cimg::keyPAUSE) return _is_keyPAUSE;; if (keycode==cimg::key1) return _is_key1;; if (keycode==cimg::key2) return _is_key2;; > if (keycode==cimg::key3) return _is_key3;; if (keycode==cimg::key4) return _is_key4;; if (keycode==cimg::key5) return _is_key5;; if (keycode==cimg::key6) return _is_key6;; > if (keycode==cimg::key7) return _is_key7;; if (keycode==cimg::key8) return _is_key8;; if (keycode==cimg::key9) return _is_key9;; if (keycode==cimg::key0) return _is_key0;; > if (keycode==cimg::keyBACKSPACE) return _is_keyBACKSPACE;; if (keycode==cimg::keyINSERT) return _is_keyINSERT;; if (keycode==cimg::keyHOME) return _is_keyHOME;; > if (keycode==cimg::keyPAGEUP) return _is_keyPAGEUP;; if (keycode==cimg::keyTAB) return _is_keyTAB;; if (keycode==cimg::keyQ) return _is_keyQ;; if (keycode==cimg::keyW) return _is_keyW;; > if (keycode==cimg::keyE) return _is_keyE;; if (keycode==cimg::keyR) return _is_keyR;; if (keycode==cimg::keyT) return _is_keyT;; if (keycode==cimg::keyY) return _is_keyY;; > if (keycode==cimg::keyU) return _is_keyU;; if (keycode==cimg::keyI) return _is_keyI;; if (keycode==cimg::keyO) return _is_keyO;; if (keycode==cimg::keyP) return _is_keyP;; > if (keycode==cimg::keyDELETE) return _is_keyDELETE;; if (keycode==cimg::keyEND) return _is_keyEND;; if (keycode==cimg::keyPAGEDOWN) return _is_keyPAGEDOWN;; > if (keycode==cimg::keyCAPSLOCK) return _is_keyCAPSLOCK;; if (keycode==cimg::keyA) return _is_keyA;; if (keycode==cimg::keyS) return _is_keyS;; if (keycode==cimg::keyD) return _is_keyD;; > if (keycode==cimg::keyF) return _is_keyF;; if (keycode==cimg::keyG) return _is_keyG;; if (keycode==cimg::keyH) return _is_keyH;; if (keycode==cimg::keyJ) return _is_keyJ;; > if (keycode==cimg::keyK) return _is_keyK;; if (keycode==cimg::keyL) return _is_keyL;; if (keycode==cimg::keyENTER) return _is_keyENTER;; > if (keycode==cimg::keySHIFTLEFT) return _is_keySHIFTLEFT;; if (keycode==cimg::keyZ) return _is_keyZ;; if (keycode==cimg::keyX) return _is_keyX;; if (keycode==cimg::keyC) return _is_keyC;; > if (keycode==cimg::keyV) return _is_keyV;; if (keycode==cimg::keyB) return _is_keyB;; if (keycode==cimg::keyN) return _is_keyN;; if (keycode==cimg::keyM) return _is_keyM;; > if (keycode==cimg::keySHIFTRIGHT) return _is_keySHIFTRIGHT;; if (keycode==cimg::keyARROWUP) return _is_keyARROWUP;; if (keycode==cimg::keyCTRLLEFT) return _is_keyCTRLLEFT;; > if (keycode==cimg::keyAPPLEFT) return _is_keyAPPLEFT;; if (keycode==cimg::keyALT) return _is_keyALT;; if (keycode==cimg::keySPACE) return _is_keySPACE;; if (keycode==cimg::keyALTGR) return _is_keyALTGR;; > if (keycode==cimg::keyAPPRIGHT) return _is_keyAPPRIGHT;; if (keycode==cimg::keyMENU) return _is_keyMENU;; if (keycode==cimg::keyCTRLRIGHT) return _is_keyCTRLRIGHT;; > if (keycode==cimg::keyARROWLEFT) return _is_keyARROWLEFT;; if (keycode==cimg::keyARROWDOWN) return _is_keyARROWDOWN;; if (keycode==cimg::keyARROWRIGHT) return _is_keyARROWRIGHT;; > if (keycode==cimg::keyPAD0) return _is_keyPAD0;; if (keycode==cimg::keyPAD1) return _is_keyPAD1;; if (keycode==cimg::keyPAD2) return _is_keyPAD2;; > if (keycode==cimg::keyPAD3) return _is_keyPAD3;; if (keycode==cimg::keyPAD4) return _is_keyPAD4;; if (keycode==cimg::keyPAD5) return _is_keyPAD5;; > if (keycode==cimg::keyPAD6) return _is_keyPAD6;; if (keycode==cimg::keyPAD7) return _is_keyPAD7;; if (keycode==cimg::keyPAD8) return _is_keyPAD8;; > if (keycode==cimg::keyPAD9) return _is_keyPAD9;; if (keycode==cimg::keyPADADD) return _is_keyPADADD;; if (keycode==cimg::keyPADSUB) return _is_keyPADSUB;; > if (keycode==cimg::keyPADMUL) return _is_keyPADMUL;; if (keycode==cimg::keyPADDIV) return _is_keyPADDIV;; > return false; > } ># 6368 "./CImg.h" > bool is_key(const char *const keycode) const { > > if (!cimg::strcasecmp(keycode,"ESC")) return _is_keyESC;; if (!cimg::strcasecmp(keycode,"F1")) return _is_keyF1;; if (!cimg::strcasecmp(keycode,"F2")) return _is_keyF2;; if (!cimg::strcasecmp(keycode,"F3")) return _is_keyF3;; > if (!cimg::strcasecmp(keycode,"F4")) return _is_keyF4;; if (!cimg::strcasecmp(keycode,"F5")) return _is_keyF5;; if (!cimg::strcasecmp(keycode,"F6")) return _is_keyF6;; if (!cimg::strcasecmp(keycode,"F7")) return _is_keyF7;; > if (!cimg::strcasecmp(keycode,"F8")) return _is_keyF8;; if (!cimg::strcasecmp(keycode,"F9")) return _is_keyF9;; if (!cimg::strcasecmp(keycode,"F10")) return _is_keyF10;; if (!cimg::strcasecmp(keycode,"F11")) return _is_keyF11;; > if (!cimg::strcasecmp(keycode,"F12")) return _is_keyF12;; if (!cimg::strcasecmp(keycode,"PAUSE")) return _is_keyPAUSE;; if (!cimg::strcasecmp(keycode,"1")) return _is_key1;; if (!cimg::strcasecmp(keycode,"2")) return _is_key2;; > if (!cimg::strcasecmp(keycode,"3")) return _is_key3;; if (!cimg::strcasecmp(keycode,"4")) return _is_key4;; if (!cimg::strcasecmp(keycode,"5")) return _is_key5;; if (!cimg::strcasecmp(keycode,"6")) return _is_key6;; > if (!cimg::strcasecmp(keycode,"7")) return _is_key7;; if (!cimg::strcasecmp(keycode,"8")) return _is_key8;; if (!cimg::strcasecmp(keycode,"9")) return _is_key9;; if (!cimg::strcasecmp(keycode,"0")) return _is_key0;; > if (!cimg::strcasecmp(keycode,"BACKSPACE")) return _is_keyBACKSPACE;; if (!cimg::strcasecmp(keycode,"INSERT")) return _is_keyINSERT;; if (!cimg::strcasecmp(keycode,"HOME")) return _is_keyHOME;; > if (!cimg::strcasecmp(keycode,"PAGEUP")) return _is_keyPAGEUP;; if (!cimg::strcasecmp(keycode,"TAB")) return _is_keyTAB;; if (!cimg::strcasecmp(keycode,"Q")) return _is_keyQ;; if (!cimg::strcasecmp(keycode,"W")) return _is_keyW;; > if (!cimg::strcasecmp(keycode,"E")) return _is_keyE;; if (!cimg::strcasecmp(keycode,"R")) return _is_keyR;; if (!cimg::strcasecmp(keycode,"T")) return _is_keyT;; if (!cimg::strcasecmp(keycode,"Y")) return _is_keyY;; > if (!cimg::strcasecmp(keycode,"U")) return _is_keyU;; if (!cimg::strcasecmp(keycode,"I")) return _is_keyI;; if (!cimg::strcasecmp(keycode,"O")) return _is_keyO;; if (!cimg::strcasecmp(keycode,"P")) return _is_keyP;; > if (!cimg::strcasecmp(keycode,"DELETE")) return _is_keyDELETE;; if (!cimg::strcasecmp(keycode,"END")) return _is_keyEND;; if (!cimg::strcasecmp(keycode,"PAGEDOWN")) return _is_keyPAGEDOWN;; > if (!cimg::strcasecmp(keycode,"CAPSLOCK")) return _is_keyCAPSLOCK;; if (!cimg::strcasecmp(keycode,"A")) return _is_keyA;; if (!cimg::strcasecmp(keycode,"S")) return _is_keyS;; if (!cimg::strcasecmp(keycode,"D")) return _is_keyD;; > if (!cimg::strcasecmp(keycode,"F")) return _is_keyF;; if (!cimg::strcasecmp(keycode,"G")) return _is_keyG;; if (!cimg::strcasecmp(keycode,"H")) return _is_keyH;; if (!cimg::strcasecmp(keycode,"J")) return _is_keyJ;; > if (!cimg::strcasecmp(keycode,"K")) return _is_keyK;; if (!cimg::strcasecmp(keycode,"L")) return _is_keyL;; if (!cimg::strcasecmp(keycode,"ENTER")) return _is_keyENTER;; > if (!cimg::strcasecmp(keycode,"SHIFTLEFT")) return _is_keySHIFTLEFT;; if (!cimg::strcasecmp(keycode,"Z")) return _is_keyZ;; if (!cimg::strcasecmp(keycode,"X")) return _is_keyX;; if (!cimg::strcasecmp(keycode,"C")) return _is_keyC;; > if (!cimg::strcasecmp(keycode,"V")) return _is_keyV;; if (!cimg::strcasecmp(keycode,"B")) return _is_keyB;; if (!cimg::strcasecmp(keycode,"N")) return _is_keyN;; if (!cimg::strcasecmp(keycode,"M")) return _is_keyM;; > if (!cimg::strcasecmp(keycode,"SHIFTRIGHT")) return _is_keySHIFTRIGHT;; if (!cimg::strcasecmp(keycode,"ARROWUP")) return _is_keyARROWUP;; if (!cimg::strcasecmp(keycode,"CTRLLEFT")) return _is_keyCTRLLEFT;; > if (!cimg::strcasecmp(keycode,"APPLEFT")) return _is_keyAPPLEFT;; if (!cimg::strcasecmp(keycode,"ALT")) return _is_keyALT;; if (!cimg::strcasecmp(keycode,"SPACE")) return _is_keySPACE;; if (!cimg::strcasecmp(keycode,"ALTGR")) return _is_keyALTGR;; > if (!cimg::strcasecmp(keycode,"APPRIGHT")) return _is_keyAPPRIGHT;; if (!cimg::strcasecmp(keycode,"MENU")) return _is_keyMENU;; if (!cimg::strcasecmp(keycode,"CTRLRIGHT")) return _is_keyCTRLRIGHT;; > if (!cimg::strcasecmp(keycode,"ARROWLEFT")) return _is_keyARROWLEFT;; if (!cimg::strcasecmp(keycode,"ARROWDOWN")) return _is_keyARROWDOWN;; if (!cimg::strcasecmp(keycode,"ARROWRIGHT")) return _is_keyARROWRIGHT;; > if (!cimg::strcasecmp(keycode,"PAD0")) return _is_keyPAD0;; if (!cimg::strcasecmp(keycode,"PAD1")) return _is_keyPAD1;; if (!cimg::strcasecmp(keycode,"PAD2")) return _is_keyPAD2;; > if (!cimg::strcasecmp(keycode,"PAD3")) return _is_keyPAD3;; if (!cimg::strcasecmp(keycode,"PAD4")) return _is_keyPAD4;; if (!cimg::strcasecmp(keycode,"PAD5")) return _is_keyPAD5;; > if (!cimg::strcasecmp(keycode,"PAD6")) return _is_keyPAD6;; if (!cimg::strcasecmp(keycode,"PAD7")) return _is_keyPAD7;; if (!cimg::strcasecmp(keycode,"PAD8")) return _is_keyPAD8;; > if (!cimg::strcasecmp(keycode,"PAD9")) return _is_keyPAD9;; if (!cimg::strcasecmp(keycode,"PADADD")) return _is_keyPADADD;; if (!cimg::strcasecmp(keycode,"PADSUB")) return _is_keyPADSUB;; > if (!cimg::strcasecmp(keycode,"PADMUL")) return _is_keyPADMUL;; if (!cimg::strcasecmp(keycode,"PADDIV")) return _is_keyPADDIV;; > return false; > } ># 6415 "./CImg.h" > bool is_key_sequence(const unsigned int *const keycodes_sequence, const unsigned int length, const bool remove_sequence=false) { > if (keycodes_sequence && length) { > const unsigned int > *const ps_end = keycodes_sequence + length - 1, > *const pk_end = (unsigned int*)_keys + 1 + sizeof(_keys)/sizeof(unsigned int) - length, > k = *ps_end; > for (unsigned int *pk = (unsigned int*)_keys; pk<pk_end; ) { > if (*(pk++)==k) { > bool res = true; > const unsigned int *ps = ps_end, *pk2 = pk; > for (unsigned int i = 1; i<length; ++i) res = (*(--ps)==*(pk2++)); > if (res) { > if (remove_sequence) std::memset((void*)(pk-1),0,sizeof(unsigned int)*length); > return true; > } > } > } > } > return false; > } ># 6445 "./CImg.h" > bool is_keyESC() const { return _is_keyESC; }; bool is_keyF1() const { return _is_keyF1; }; bool is_keyF2() const { return _is_keyF2; }; bool is_keyF3() const { return _is_keyF3; }; > bool is_keyF4() const { return _is_keyF4; }; bool is_keyF5() const { return _is_keyF5; }; bool is_keyF6() const { return _is_keyF6; }; bool is_keyF7() const { return _is_keyF7; }; > bool is_keyF8() const { return _is_keyF8; }; bool is_keyF9() const { return _is_keyF9; }; bool is_keyF10() const { return _is_keyF10; }; bool is_keyF11() const { return _is_keyF11; }; > bool is_keyF12() const { return _is_keyF12; }; bool is_keyPAUSE() const { return _is_keyPAUSE; }; bool is_key1() const { return _is_key1; }; bool is_key2() const { return _is_key2; }; > bool is_key3() const { return _is_key3; }; bool is_key4() const { return _is_key4; }; bool is_key5() const { return _is_key5; }; bool is_key6() const { return _is_key6; }; > bool is_key7() const { return _is_key7; }; bool is_key8() const { return _is_key8; }; bool is_key9() const { return _is_key9; }; bool is_key0() const { return _is_key0; }; > bool is_keyBACKSPACE() const { return _is_keyBACKSPACE; }; bool is_keyINSERT() const { return _is_keyINSERT; }; bool is_keyHOME() const { return _is_keyHOME; }; > bool is_keyPAGEUP() const { return _is_keyPAGEUP; }; bool is_keyTAB() const { return _is_keyTAB; }; bool is_keyQ() const { return _is_keyQ; }; bool is_keyW() const { return _is_keyW; }; > bool is_keyE() const { return _is_keyE; }; bool is_keyR() const { return _is_keyR; }; bool is_keyT() const { return _is_keyT; }; bool is_keyY() const { return _is_keyY; }; > bool is_keyU() const { return _is_keyU; }; bool is_keyI() const { return _is_keyI; }; bool is_keyO() const { return _is_keyO; }; bool is_keyP() const { return _is_keyP; }; > bool is_keyDELETE() const { return _is_keyDELETE; }; bool is_keyEND() const { return _is_keyEND; }; bool is_keyPAGEDOWN() const { return _is_keyPAGEDOWN; }; > bool is_keyCAPSLOCK() const { return _is_keyCAPSLOCK; }; bool is_keyA() const { return _is_keyA; }; bool is_keyS() const { return _is_keyS; }; bool is_keyD() const { return _is_keyD; }; > bool is_keyF() const { return _is_keyF; }; bool is_keyG() const { return _is_keyG; }; bool is_keyH() const { return _is_keyH; }; bool is_keyJ() const { return _is_keyJ; }; > bool is_keyK() const { return _is_keyK; }; bool is_keyL() const { return _is_keyL; }; bool is_keyENTER() const { return _is_keyENTER; }; > bool is_keySHIFTLEFT() const { return _is_keySHIFTLEFT; }; bool is_keyZ() const { return _is_keyZ; }; bool is_keyX() const { return _is_keyX; }; bool is_keyC() const { return _is_keyC; }; > bool is_keyV() const { return _is_keyV; }; bool is_keyB() const { return _is_keyB; }; bool is_keyN() const { return _is_keyN; }; bool is_keyM() const { return _is_keyM; }; > bool is_keySHIFTRIGHT() const { return _is_keySHIFTRIGHT; }; bool is_keyARROWUP() const { return _is_keyARROWUP; }; bool is_keyCTRLLEFT() const { return _is_keyCTRLLEFT; }; > bool is_keyAPPLEFT() const { return _is_keyAPPLEFT; }; bool is_keyALT() const { return _is_keyALT; }; bool is_keySPACE() const { return _is_keySPACE; }; bool is_keyALTGR() const { return _is_keyALTGR; }; > bool is_keyAPPRIGHT() const { return _is_keyAPPRIGHT; }; bool is_keyMENU() const { return _is_keyMENU; }; bool is_keyCTRLRIGHT() const { return _is_keyCTRLRIGHT; }; > bool is_keyARROWLEFT() const { return _is_keyARROWLEFT; }; bool is_keyARROWDOWN() const { return _is_keyARROWDOWN; }; bool is_keyARROWRIGHT() const { return _is_keyARROWRIGHT; }; > bool is_keyPAD0() const { return _is_keyPAD0; }; bool is_keyPAD1() const { return _is_keyPAD1; }; bool is_keyPAD2() const { return _is_keyPAD2; }; > bool is_keyPAD3() const { return _is_keyPAD3; }; bool is_keyPAD4() const { return _is_keyPAD4; }; bool is_keyPAD5() const { return _is_keyPAD5; }; > bool is_keyPAD6() const { return _is_keyPAD6; }; bool is_keyPAD7() const { return _is_keyPAD7; }; bool is_keyPAD8() const { return _is_keyPAD8; }; > bool is_keyPAD9() const { return _is_keyPAD9; }; bool is_keyPADADD() const { return _is_keyPADADD; }; bool is_keyPADSUB() const { return _is_keyPADSUB; }; > bool is_keyPADMUL() const { return _is_keyPADMUL; }; bool is_keyPADDIV() const { return _is_keyPADDIV; }; ># 6503 "./CImg.h" > int width() const { > return (int)_width; > } > > > > > > > int height() const { > return (int)_height; > } ># 6536 "./CImg.h" > unsigned int normalization() const { > return _normalization; > } > > > > > > const char *title() const { > return _title; > } > > > > > > > int window_width() const { > return (int)_window_width; > } > > > > > > > int window_height() const { > return (int)_window_height; > } > > > > > > int window_x() const { > return _window_x; > } > > > > > > int window_y() const { > return _window_y; > } > > > > > > > > int mouse_x() const { > return _mouse_x; > } > > > > > > > > int mouse_y() const { > return _mouse_y; > } ># 6627 "./CImg.h" > unsigned int button() const { > return _button; > } ># 6654 "./CImg.h" > int wheel() const { > return _wheel; > } ># 6671 "./CImg.h" > unsigned int key(const unsigned int pos=0) const { > return pos<(sizeof(_keys)/sizeof(unsigned int))?_keys[pos]:0; > } ># 6688 "./CImg.h" > unsigned int released_key(const unsigned int pos=0) const { > return pos<(sizeof(_released_keys)/sizeof(unsigned int))?_released_keys[pos]:0; > } ># 6701 "./CImg.h" > static unsigned int keycode(const char *const keycode) { > > if (!cimg::strcasecmp(keycode,"ESC")) return cimg::keyESC;; if (!cimg::strcasecmp(keycode,"F1")) return cimg::keyF1;; if (!cimg::strcasecmp(keycode,"F2")) return cimg::keyF2;; if (!cimg::strcasecmp(keycode,"F3")) return cimg::keyF3;; > if (!cimg::strcasecmp(keycode,"F4")) return cimg::keyF4;; if (!cimg::strcasecmp(keycode,"F5")) return cimg::keyF5;; if (!cimg::strcasecmp(keycode,"F6")) return cimg::keyF6;; if (!cimg::strcasecmp(keycode,"F7")) return cimg::keyF7;; > if (!cimg::strcasecmp(keycode,"F8")) return cimg::keyF8;; if (!cimg::strcasecmp(keycode,"F9")) return cimg::keyF9;; if (!cimg::strcasecmp(keycode,"F10")) return cimg::keyF10;; if (!cimg::strcasecmp(keycode,"F11")) return cimg::keyF11;; > if (!cimg::strcasecmp(keycode,"F12")) return cimg::keyF12;; if (!cimg::strcasecmp(keycode,"PAUSE")) return cimg::keyPAUSE;; if (!cimg::strcasecmp(keycode,"1")) return cimg::key1;; if (!cimg::strcasecmp(keycode,"2")) return cimg::key2;; > if (!cimg::strcasecmp(keycode,"3")) return cimg::key3;; if (!cimg::strcasecmp(keycode,"4")) return cimg::key4;; if (!cimg::strcasecmp(keycode,"5")) return cimg::key5;; if (!cimg::strcasecmp(keycode,"6")) return cimg::key6;; > if (!cimg::strcasecmp(keycode,"7")) return cimg::key7;; if (!cimg::strcasecmp(keycode,"8")) return cimg::key8;; if (!cimg::strcasecmp(keycode,"9")) return cimg::key9;; if (!cimg::strcasecmp(keycode,"0")) return cimg::key0;; > if (!cimg::strcasecmp(keycode,"BACKSPACE")) return cimg::keyBACKSPACE;; if (!cimg::strcasecmp(keycode,"INSERT")) return cimg::keyINSERT;; if (!cimg::strcasecmp(keycode,"HOME")) return cimg::keyHOME;; > if (!cimg::strcasecmp(keycode,"PAGEUP")) return cimg::keyPAGEUP;; if (!cimg::strcasecmp(keycode,"TAB")) return cimg::keyTAB;; if (!cimg::strcasecmp(keycode,"Q")) return cimg::keyQ;; if (!cimg::strcasecmp(keycode,"W")) return cimg::keyW;; > if (!cimg::strcasecmp(keycode,"E")) return cimg::keyE;; if (!cimg::strcasecmp(keycode,"R")) return cimg::keyR;; if (!cimg::strcasecmp(keycode,"T")) return cimg::keyT;; if (!cimg::strcasecmp(keycode,"Y")) return cimg::keyY;; > if (!cimg::strcasecmp(keycode,"U")) return cimg::keyU;; if (!cimg::strcasecmp(keycode,"I")) return cimg::keyI;; if (!cimg::strcasecmp(keycode,"O")) return cimg::keyO;; if (!cimg::strcasecmp(keycode,"P")) return cimg::keyP;; > if (!cimg::strcasecmp(keycode,"DELETE")) return cimg::keyDELETE;; if (!cimg::strcasecmp(keycode,"END")) return cimg::keyEND;; if (!cimg::strcasecmp(keycode,"PAGEDOWN")) return cimg::keyPAGEDOWN;; > if (!cimg::strcasecmp(keycode,"CAPSLOCK")) return cimg::keyCAPSLOCK;; if (!cimg::strcasecmp(keycode,"A")) return cimg::keyA;; if (!cimg::strcasecmp(keycode,"S")) return cimg::keyS;; if (!cimg::strcasecmp(keycode,"D")) return cimg::keyD;; > if (!cimg::strcasecmp(keycode,"F")) return cimg::keyF;; if (!cimg::strcasecmp(keycode,"G")) return cimg::keyG;; if (!cimg::strcasecmp(keycode,"H")) return cimg::keyH;; if (!cimg::strcasecmp(keycode,"J")) return cimg::keyJ;; > if (!cimg::strcasecmp(keycode,"K")) return cimg::keyK;; if (!cimg::strcasecmp(keycode,"L")) return cimg::keyL;; if (!cimg::strcasecmp(keycode,"ENTER")) return cimg::keyENTER;; > if (!cimg::strcasecmp(keycode,"SHIFTLEFT")) return cimg::keySHIFTLEFT;; if (!cimg::strcasecmp(keycode,"Z")) return cimg::keyZ;; if (!cimg::strcasecmp(keycode,"X")) return cimg::keyX;; if (!cimg::strcasecmp(keycode,"C")) return cimg::keyC;; > if (!cimg::strcasecmp(keycode,"V")) return cimg::keyV;; if (!cimg::strcasecmp(keycode,"B")) return cimg::keyB;; if (!cimg::strcasecmp(keycode,"N")) return cimg::keyN;; if (!cimg::strcasecmp(keycode,"M")) return cimg::keyM;; > if (!cimg::strcasecmp(keycode,"SHIFTRIGHT")) return cimg::keySHIFTRIGHT;; if (!cimg::strcasecmp(keycode,"ARROWUP")) return cimg::keyARROWUP;; if (!cimg::strcasecmp(keycode,"CTRLLEFT")) return cimg::keyCTRLLEFT;; > if (!cimg::strcasecmp(keycode,"APPLEFT")) return cimg::keyAPPLEFT;; if (!cimg::strcasecmp(keycode,"ALT")) return cimg::keyALT;; if (!cimg::strcasecmp(keycode,"SPACE")) return cimg::keySPACE;; if (!cimg::strcasecmp(keycode,"ALTGR")) return cimg::keyALTGR;; > if (!cimg::strcasecmp(keycode,"APPRIGHT")) return cimg::keyAPPRIGHT;; if (!cimg::strcasecmp(keycode,"MENU")) return cimg::keyMENU;; if (!cimg::strcasecmp(keycode,"CTRLRIGHT")) return cimg::keyCTRLRIGHT;; > if (!cimg::strcasecmp(keycode,"ARROWLEFT")) return cimg::keyARROWLEFT;; if (!cimg::strcasecmp(keycode,"ARROWDOWN")) return cimg::keyARROWDOWN;; if (!cimg::strcasecmp(keycode,"ARROWRIGHT")) return cimg::keyARROWRIGHT;; > if (!cimg::strcasecmp(keycode,"PAD0")) return cimg::keyPAD0;; if (!cimg::strcasecmp(keycode,"PAD1")) return cimg::keyPAD1;; if (!cimg::strcasecmp(keycode,"PAD2")) return cimg::keyPAD2;; > if (!cimg::strcasecmp(keycode,"PAD3")) return cimg::keyPAD3;; if (!cimg::strcasecmp(keycode,"PAD4")) return cimg::keyPAD4;; if (!cimg::strcasecmp(keycode,"PAD5")) return cimg::keyPAD5;; > if (!cimg::strcasecmp(keycode,"PAD6")) return cimg::keyPAD6;; if (!cimg::strcasecmp(keycode,"PAD7")) return cimg::keyPAD7;; if (!cimg::strcasecmp(keycode,"PAD8")) return cimg::keyPAD8;; > if (!cimg::strcasecmp(keycode,"PAD9")) return cimg::keyPAD9;; if (!cimg::strcasecmp(keycode,"PADADD")) return cimg::keyPADADD;; if (!cimg::strcasecmp(keycode,"PADSUB")) return cimg::keyPADSUB;; > if (!cimg::strcasecmp(keycode,"PADMUL")) return cimg::keyPADMUL;; if (!cimg::strcasecmp(keycode,"PADDIV")) return cimg::keyPADDIV;; > return 0; > } > > > > > > > float frames_per_second() { > if (!_fps_timer) _fps_timer = cimg::time(); > const float delta = (cimg::time()-_fps_timer)/1000.0f; > ++_fps_frames; > if (delta>=1) { > _fps_fps = _fps_frames/delta; > _fps_frames = 0; > _fps_timer = cimg::time(); > } > return _fps_fps; > } ># 6777 "./CImg.h" > template<typename T> > CImgDisplay& display(const CImgList<T>& list, const char axis='x', const float align=0) { > CImgList<typename CImg<T>::ucharT> visu(list._width); > for (int l = 0; l<(int)(list)._width; ++l) { > const CImg<T>& img = list._data[l]; > img.__get_select(*this,_normalization,(img._width-1)/2,(img._height-1)/2,(img._depth-1)/2).move_to(visu[l]); > } > visu.get_append(axis,align).display(*this); > return *this; > } ># 6830 "./CImg.h" > CImgDisplay& resize(const bool force_redraw=true) { > resize(_window_width,_window_height,force_redraw); > return *this; > } ># 6858 "./CImg.h" > template<typename T> > CImgDisplay& resize(const CImg<T>& img, const bool force_redraw=true) { > return resize(img._width,img._height,force_redraw); > } ># 6871 "./CImg.h" > CImgDisplay& resize(const CImgDisplay& disp, const bool force_redraw=true) { > return resize(disp._width,disp._height,force_redraw); > } > > > template<typename t, typename T> > static void _render_resize(const T *ptrs, const unsigned int ws, const unsigned int hs, > t *ptrd, const unsigned int wd, const unsigned int hd) { > unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd+1], *poffx, *poffy; > float s, curr, old; > s = (float)ws/wd; > poffx = offx; curr = 0; for (unsigned int x = 0; x<wd; ++x) { old = curr; curr+=s; *(poffx++) = (unsigned int)curr - (unsigned int)old; } > s = (float)hs/hd; > poffy = offy; curr = 0; for (unsigned int y = 0; y<hd; ++y) { old = curr; curr+=s; *(poffy++) = ws*((unsigned int)curr - (unsigned int)old); } > *poffy = 0; > poffy = offy; > for (unsigned int y = 0; y<hd; ) { > const T *ptr = ptrs; > poffx = offx; > for (unsigned int x = 0; x<wd; ++x) { *(ptrd++) = *ptr; ptr+=*(poffx++); } > ++y; > unsigned int dy = *(poffy++); > for ( ; !dy && y<hd; std::memcpy(ptrd,ptrd - wd,sizeof(t)*wd), ++y, ptrd+=wd, dy = *(poffy++)) {} > ptrs+=dy; > } > delete[] offx; delete[] offy; > } > > > > > > CImgDisplay& set_normalization(const unsigned int normalization) { > _normalization = normalization; > _min = _max = 0; > return *this; > } ># 6941 "./CImg.h" > CImgDisplay& set_fullscreen(const bool is_fullscreen, const bool force_redraw=true) { > if (is_empty() || _is_fullscreen==is_fullscreen) return *this; > return toggle_fullscreen(force_redraw); > } ># 6987 "./CImg.h" > CImgDisplay& set_button() { > _button = 0; > _is_event = true; > > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > > > > return *this; > } > > > > > > > CImgDisplay& set_button(const unsigned int button, const bool is_pressed=true) { > const unsigned int buttoncode = button==1?1:button==2?2:button==3?4:0; > if (is_pressed) _button |= buttoncode; else _button &= ~buttoncode; > _is_event = buttoncode?true:false; > if (buttoncode) { > > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > > > > } > return *this; > } > > > > > > CImgDisplay& set_wheel() { > _wheel = 0; > _is_event = true; > > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > > > > return *this; > } > > > > > > > CImgDisplay& set_wheel(const int amplitude) { > _wheel+=amplitude; > _is_event = amplitude?true:false; > if (amplitude) { > > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > > > > } > return *this; > } > > > > > > CImgDisplay& set_key() { > std::memset((void*)_keys,0,sizeof(_keys)); > std::memset((void*)_released_keys,0,sizeof(_released_keys)); > _is_keyESC = _is_keyF1 = _is_keyF2 = _is_keyF3 = _is_keyF4 = _is_keyF5 = _is_keyF6 = _is_keyF7 = _is_keyF8 = _is_keyF9 = > _is_keyF10 = _is_keyF11 = _is_keyF12 = _is_keyPAUSE = _is_key1 = _is_key2 = _is_key3 = _is_key4 = _is_key5 = _is_key6 = > _is_key7 = _is_key8 = _is_key9 = _is_key0 = _is_keyBACKSPACE = _is_keyINSERT = _is_keyHOME = _is_keyPAGEUP = _is_keyTAB = > _is_keyQ = _is_keyW = _is_keyE = _is_keyR = _is_keyT = _is_keyY = _is_keyU = _is_keyI = _is_keyO = _is_keyP = _is_keyDELETE = > _is_keyEND = _is_keyPAGEDOWN = _is_keyCAPSLOCK = _is_keyA = _is_keyS = _is_keyD = _is_keyF = _is_keyG = _is_keyH = _is_keyJ = > _is_keyK = _is_keyL = _is_keyENTER = _is_keySHIFTLEFT = _is_keyZ = _is_keyX = _is_keyC = _is_keyV = _is_keyB = _is_keyN = > _is_keyM = _is_keySHIFTRIGHT = _is_keyARROWUP = _is_keyCTRLLEFT = _is_keyAPPLEFT = _is_keyALT = _is_keySPACE = _is_keyALTGR = _is_keyAPPRIGHT = > _is_keyMENU = _is_keyCTRLRIGHT = _is_keyARROWLEFT = _is_keyARROWDOWN = _is_keyARROWRIGHT = _is_keyPAD0 = _is_keyPAD1 = _is_keyPAD2 = > _is_keyPAD3 = _is_keyPAD4 = _is_keyPAD5 = _is_keyPAD6 = _is_keyPAD7 = _is_keyPAD8 = _is_keyPAD9 = _is_keyPADADD = _is_keyPADSUB = > _is_keyPADMUL = _is_keyPADDIV = false; > _is_event = true; > > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > > > > return *this; > } ># 7083 "./CImg.h" > CImgDisplay& set_key(const unsigned int keycode, const bool is_pressed=true) { > > if (keycode==cimg::keyESC) _is_keyESC = is_pressed;; if (keycode==cimg::keyF1) _is_keyF1 = is_pressed;; if (keycode==cimg::keyF2) _is_keyF2 = is_pressed;; if (keycode==cimg::keyF3) _is_keyF3 = is_pressed;; > if (keycode==cimg::keyF4) _is_keyF4 = is_pressed;; if (keycode==cimg::keyF5) _is_keyF5 = is_pressed;; if (keycode==cimg::keyF6) _is_keyF6 = is_pressed;; if (keycode==cimg::keyF7) _is_keyF7 = is_pressed;; > if (keycode==cimg::keyF8) _is_keyF8 = is_pressed;; if (keycode==cimg::keyF9) _is_keyF9 = is_pressed;; if (keycode==cimg::keyF10) _is_keyF10 = is_pressed;; if (keycode==cimg::keyF11) _is_keyF11 = is_pressed;; > if (keycode==cimg::keyF12) _is_keyF12 = is_pressed;; if (keycode==cimg::keyPAUSE) _is_keyPAUSE = is_pressed;; if (keycode==cimg::key1) _is_key1 = is_pressed;; if (keycode==cimg::key2) _is_key2 = is_pressed;; > if (keycode==cimg::key3) _is_key3 = is_pressed;; if (keycode==cimg::key4) _is_key4 = is_pressed;; if (keycode==cimg::key5) _is_key5 = is_pressed;; if (keycode==cimg::key6) _is_key6 = is_pressed;; > if (keycode==cimg::key7) _is_key7 = is_pressed;; if (keycode==cimg::key8) _is_key8 = is_pressed;; if (keycode==cimg::key9) _is_key9 = is_pressed;; if (keycode==cimg::key0) _is_key0 = is_pressed;; > if (keycode==cimg::keyBACKSPACE) _is_keyBACKSPACE = is_pressed;; if (keycode==cimg::keyINSERT) _is_keyINSERT = is_pressed;; if (keycode==cimg::keyHOME) _is_keyHOME = is_pressed;; > if (keycode==cimg::keyPAGEUP) _is_keyPAGEUP = is_pressed;; if (keycode==cimg::keyTAB) _is_keyTAB = is_pressed;; if (keycode==cimg::keyQ) _is_keyQ = is_pressed;; if (keycode==cimg::keyW) _is_keyW = is_pressed;; > if (keycode==cimg::keyE) _is_keyE = is_pressed;; if (keycode==cimg::keyR) _is_keyR = is_pressed;; if (keycode==cimg::keyT) _is_keyT = is_pressed;; if (keycode==cimg::keyY) _is_keyY = is_pressed;; > if (keycode==cimg::keyU) _is_keyU = is_pressed;; if (keycode==cimg::keyI) _is_keyI = is_pressed;; if (keycode==cimg::keyO) _is_keyO = is_pressed;; if (keycode==cimg::keyP) _is_keyP = is_pressed;; > if (keycode==cimg::keyDELETE) _is_keyDELETE = is_pressed;; if (keycode==cimg::keyEND) _is_keyEND = is_pressed;; if (keycode==cimg::keyPAGEDOWN) _is_keyPAGEDOWN = is_pressed;; > if (keycode==cimg::keyCAPSLOCK) _is_keyCAPSLOCK = is_pressed;; if (keycode==cimg::keyA) _is_keyA = is_pressed;; if (keycode==cimg::keyS) _is_keyS = is_pressed;; if (keycode==cimg::keyD) _is_keyD = is_pressed;; > if (keycode==cimg::keyF) _is_keyF = is_pressed;; if (keycode==cimg::keyG) _is_keyG = is_pressed;; if (keycode==cimg::keyH) _is_keyH = is_pressed;; if (keycode==cimg::keyJ) _is_keyJ = is_pressed;; > if (keycode==cimg::keyK) _is_keyK = is_pressed;; if (keycode==cimg::keyL) _is_keyL = is_pressed;; if (keycode==cimg::keyENTER) _is_keyENTER = is_pressed;; > if (keycode==cimg::keySHIFTLEFT) _is_keySHIFTLEFT = is_pressed;; if (keycode==cimg::keyZ) _is_keyZ = is_pressed;; if (keycode==cimg::keyX) _is_keyX = is_pressed;; if (keycode==cimg::keyC) _is_keyC = is_pressed;; > if (keycode==cimg::keyV) _is_keyV = is_pressed;; if (keycode==cimg::keyB) _is_keyB = is_pressed;; if (keycode==cimg::keyN) _is_keyN = is_pressed;; if (keycode==cimg::keyM) _is_keyM = is_pressed;; > if (keycode==cimg::keySHIFTRIGHT) _is_keySHIFTRIGHT = is_pressed;; if (keycode==cimg::keyARROWUP) _is_keyARROWUP = is_pressed;; if (keycode==cimg::keyCTRLLEFT) _is_keyCTRLLEFT = is_pressed;; > if (keycode==cimg::keyAPPLEFT) _is_keyAPPLEFT = is_pressed;; if (keycode==cimg::keyALT) _is_keyALT = is_pressed;; if (keycode==cimg::keySPACE) _is_keySPACE = is_pressed;; if (keycode==cimg::keyALTGR) _is_keyALTGR = is_pressed;; > if (keycode==cimg::keyAPPRIGHT) _is_keyAPPRIGHT = is_pressed;; if (keycode==cimg::keyMENU) _is_keyMENU = is_pressed;; if (keycode==cimg::keyCTRLRIGHT) _is_keyCTRLRIGHT = is_pressed;; > if (keycode==cimg::keyARROWLEFT) _is_keyARROWLEFT = is_pressed;; if (keycode==cimg::keyARROWDOWN) _is_keyARROWDOWN = is_pressed;; if (keycode==cimg::keyARROWRIGHT) _is_keyARROWRIGHT = is_pressed;; > if (keycode==cimg::keyPAD0) _is_keyPAD0 = is_pressed;; if (keycode==cimg::keyPAD1) _is_keyPAD1 = is_pressed;; if (keycode==cimg::keyPAD2) _is_keyPAD2 = is_pressed;; > if (keycode==cimg::keyPAD3) _is_keyPAD3 = is_pressed;; if (keycode==cimg::keyPAD4) _is_keyPAD4 = is_pressed;; if (keycode==cimg::keyPAD5) _is_keyPAD5 = is_pressed;; > if (keycode==cimg::keyPAD6) _is_keyPAD6 = is_pressed;; if (keycode==cimg::keyPAD7) _is_keyPAD7 = is_pressed;; if (keycode==cimg::keyPAD8) _is_keyPAD8 = is_pressed;; > if (keycode==cimg::keyPAD9) _is_keyPAD9 = is_pressed;; if (keycode==cimg::keyPADADD) _is_keyPADADD = is_pressed;; if (keycode==cimg::keyPADSUB) _is_keyPADSUB = is_pressed;; > if (keycode==cimg::keyPADMUL) _is_keyPADMUL = is_pressed;; if (keycode==cimg::keyPADDIV) _is_keyPADDIV = is_pressed;; > if (is_pressed) { > if (*_keys) > std::memmove((void*)(_keys+1),(void*)_keys,sizeof(_keys) - sizeof(unsigned int)); > *_keys = keycode; > if (*_released_keys) { > std::memmove((void*)(_released_keys+1),(void*)_released_keys,sizeof(_released_keys) - sizeof(unsigned int)); > *_released_keys = 0; > } > } else { > if (*_keys) { > std::memmove((void*)(_keys+1),(void*)_keys,sizeof(_keys) - sizeof(unsigned int)); > *_keys = 0; > } > if (*_released_keys) > std::memmove((void*)(_released_keys+1),(void*)_released_keys,sizeof(_released_keys) - sizeof(unsigned int)); > *_released_keys = keycode; > } > _is_event = keycode?true:false; > if (keycode) { > > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > > > > } > return *this; > } > > > > > > CImgDisplay& flush() { > set_key().set_button().set_wheel(); > _is_resized = _is_moved = _is_event = false; > _fps_timer = _fps_frames = _timer = 0; > _fps_fps = 0; > return *this; > } > > > CImgDisplay& wait() { > wait(*this); > return *this; > } > > > > > > > CImgDisplay& wait(const unsigned int milliseconds) { > cimg::_wait(milliseconds,_timer); > return *this; > } > > > static void wait(CImgDisplay& disp1) { > disp1._is_event = false; > while (!disp1._is_closed && !disp1._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2) { > disp1._is_event = disp2._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed) && > !disp1._is_event && !disp2._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3) { > disp1._is_event = disp2._is_event = disp3._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = disp8._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed || !disp8._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event && !disp8._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event) wait_all(); > } > > > static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, > CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9, CImgDisplay& disp10) { > disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = > disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = disp10._is_event = false; > while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || > !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed || !disp10._is_closed) && > !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && > !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event && !disp10._is_event) wait_all(); > } ># 7301 "./CImg.h" > Atom _wm_window_atom, _wm_protocol_atom; > Window _window, _background_window; > Colormap _colormap; > XImage *_image; > void *_data; > > > > > static int screen_width() { > Display *const dpy = cimg::X11_attr().display; > int res = 0; > if (!dpy) { > Display *const _dpy = XOpenDisplay(0); > if (!_dpy) > throw CImgDisplayException("CImgDisplay::screen_width(): Failed to open X11 display."); > res = ((&((_XPrivDisplay)_dpy)->screens[(((_XPrivDisplay)_dpy)->default_screen)])->width); > XCloseDisplay(_dpy); > } else { > > > > > > res = ((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->width); > > } > return res; > } > > static int screen_height() { > Display *const dpy = cimg::X11_attr().display; > int res = 0; > if (!dpy) { > Display *const _dpy = XOpenDisplay(0); > if (!_dpy) > throw CImgDisplayException("CImgDisplay::screen_height(): Failed to open X11 display."); > res = ((&((_XPrivDisplay)_dpy)->screens[(((_XPrivDisplay)_dpy)->default_screen)])->height); > XCloseDisplay(_dpy); > } else { > > > > > > res = ((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->height); > > } > return res; > } > > static void wait_all() { > if (!cimg::X11_attr().display) return; > if (cimg::mutex(13,2)) { cimg::sleep(10); return; } > pthread_cond_wait(&cimg::X11_attr().wait_event,&cimg::X11_attr().wait_event_mutex); > cimg::mutex(13,0); > } > > void _handle_events(const XEvent *const pevent) { > Display *const dpy = cimg::X11_attr().display; > XEvent event = *pevent; > switch (event.type) { > case 33 : { > if ((int)event.xclient.message_type==(int)_wm_protocol_atom && > (int)event.xclient.data.l[0]==(int)_wm_window_atom) { > XUnmapWindow(cimg::X11_attr().display,_window); > _is_closed = _is_event = true; > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > } > } break; > case 22 : { > while (XCheckWindowEvent(dpy,_window,(1L<<17),&event)) {} > const unsigned int nw = event.xconfigure.width, nh = event.xconfigure.height; > const int nx = event.xconfigure.x, ny = event.xconfigure.y; > if (nw && nh && (nw!=_window_width || nh!=_window_height)) { > _window_width = nw; _window_height = nh; _mouse_x = _mouse_y = -1; > XResizeWindow(dpy,_window,_window_width,_window_height); > _is_resized = _is_event = true; > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > } > if (nx!=_window_x || ny!=_window_y) { > _window_x = nx; _window_y = ny; _is_moved = _is_event = true; > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > } > } break; > case 12 : { > while (XCheckWindowEvent(dpy,_window,(1L<<15),&event)) {} > _paint(false); > if (_is_fullscreen) { > XWindowAttributes attr; > XGetWindowAttributes(dpy,_window,&attr); > while (attr.map_state!=2) XSync(dpy,0); > XSetInputFocus(dpy,_window,2,0L); > } > } break; > case 4 : { > do { > _mouse_x = event.xmotion.x; _mouse_y = event.xmotion.y; > if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; > switch (event.xbutton.button) { > case 1 : set_button(1); break; > case 3 : set_button(2); break; > case 2 : set_button(3); break; > } > } while (XCheckWindowEvent(dpy,_window,(1L<<2),&event)); > } break; > case 5 : { > do { > _mouse_x = event.xmotion.x; _mouse_y = event.xmotion.y; > if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; > switch (event.xbutton.button) { > case 1 : set_button(1,false); break; > case 3 : set_button(2,false); break; > case 2 : set_button(3,false); break; > case 4 : set_wheel(1); break; > case 5 : set_wheel(-1); break; > } > } while (XCheckWindowEvent(dpy,_window,(1L<<3),&event)); > } break; > case 2 : { > char tmp = 0; KeySym ksym; > XLookupString(&event.xkey,&tmp,1,&ksym,0); > set_key((unsigned int)ksym,true); > } break; > case 3 : { > char keys_return[32]; > XQueryKeymap(dpy,keys_return); > const unsigned int kc = event.xkey.keycode, kc1 = kc/8, kc2 = kc%8; > const bool is_key_pressed = kc1>=32?false:(keys_return[kc1]>>kc2)&1; > if (!is_key_pressed) { > char tmp = 0; KeySym ksym; > XLookupString(&event.xkey,&tmp,1,&ksym,0); > set_key((unsigned int)ksym,false); > } > } break; > case 7: { > while (XCheckWindowEvent(dpy,_window,(1L<<4),&event)) {} > _mouse_x = event.xmotion.x; > _mouse_y = event.xmotion.y; > if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; > } break; > case 8 : { > while (XCheckWindowEvent(dpy,_window,(1L<<5),&event)) {} > _mouse_x = _mouse_y =-1; _is_event = true; > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > } break; > case 6 : { > while (XCheckWindowEvent(dpy,_window,(1L<<6),&event)) {} > _mouse_x = event.xmotion.x; > _mouse_y = event.xmotion.y; > if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; > _is_event = true; > pthread_cond_broadcast(&cimg::X11_attr().wait_event); > } break; > } > } > > static void* _events_thread(void *) { > Display *const dpy = cimg::X11_attr().display; > XEvent event; > pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,0); > pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0); > for (;;) { > XLockDisplay(dpy); > bool event_flag = XCheckTypedEvent(dpy,33,&event); > if (!event_flag) event_flag = XCheckMaskEvent(dpy, > (1L<<15) | (1L<<17) | (1L<<2) | > (1L<<0) | (1L<<6) | (1L<<4) | (1L<<5)| > (1L<<3) | (1L<<1),&event); > if (event_flag) > for (unsigned int i = 0; i<cimg::X11_attr().nb_wins; ++i) > if (!cimg::X11_attr().wins[i]->_is_closed && event.xany.window==cimg::X11_attr().wins[i]->_window) > cimg::X11_attr().wins[i]->_handle_events(&event); > XUnlockDisplay(dpy); > pthread_testcancel(); > cimg::sleep(8); > } > return 0; > } > > void _set_colormap(Colormap& _colormap, const unsigned int dim) { > XColor colormap[256]; > switch (dim) { > case 1 : { > for (unsigned int index = 0; index<256; ++index) { > colormap[index].pixel = index; > colormap[index].red = colormap[index].green = colormap[index].blue = (unsigned short)(index<<8); > colormap[index].flags = (1<<0) | (1<<1) | (1<<2); > } > } break; > case 2 : { > for (unsigned int index = 0, r = 8; r<256; r+=16) > for (unsigned int g = 8; g<256; g+=16) { > colormap[index].pixel = index; > colormap[index].red = colormap[index].blue = (unsigned short)(r<<8); > colormap[index].green = (unsigned short)(g<<8); > colormap[index++].flags = (1<<0) | (1<<1) | (1<<2); > } > } break; > default : { > for (unsigned int index = 0, r = 16; r<256; r+=32) > for (unsigned int g = 16; g<256; g+=32) > for (unsigned int b = 32; b<256; b+=64) { > colormap[index].pixel = index; > colormap[index].red = (unsigned short)(r<<8); > colormap[index].green = (unsigned short)(g<<8); > colormap[index].blue = (unsigned short)(b<<8); > colormap[index++].flags = (1<<0) | (1<<1) | (1<<2); > } > } > } > XStoreColors(cimg::X11_attr().display,_colormap,colormap,256); > } > > void _map_window() { > Display *const dpy = cimg::X11_attr().display; > bool is_exposed = false, is_mapped = false; > XWindowAttributes attr; > XEvent event; > XMapRaised(dpy,_window); > do { > XWindowEvent(dpy,_window,(1L<<17) | (1L<<15),&event); > switch (event.type) { > case 19 : is_mapped = true; break; > case 12 : is_exposed = true; break; > } > } while (!is_exposed || !is_mapped); > do { > XGetWindowAttributes(dpy,_window,&attr); > if (attr.map_state!=2) { XSync(dpy,0); cimg::sleep(10); } > } while (attr.map_state!=2); > _window_x = attr.x; > _window_y = attr.y; > } > > void _paint(const bool wait_expose=true) { > if (_is_closed || !_image) return; > Display *const dpy = cimg::X11_attr().display; > if (wait_expose) { > XEvent event; > event.xexpose.type = 12; > event.xexpose.serial = 0; > event.xexpose.send_event = 1; > event.xexpose.display = dpy; > event.xexpose.window = _window; > event.xexpose.x = 0; > event.xexpose.y = 0; > event.xexpose.width = width(); > event.xexpose.height = height(); > event.xexpose.count = 0; > XSendEvent(dpy,_window,0,0,&event); > } else { > GC gc = ((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->default_gc); > > > > > XPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height); > > } > } > > template<typename T> > void _resize(T pixel_type, const unsigned int ndimx, const unsigned int ndimy, const bool force_redraw) { > Display *const dpy = cimg::X11_attr().display; > cimg::unused(pixel_type); ># 7611 "./CImg.h" > { > T *ndata = (T*)std::malloc(ndimx*ndimy*sizeof(T)); > if (force_redraw) _render_resize((T*)_data,_width,_height,ndata,ndimx,ndimy); > else std::memset(ndata,0,sizeof(T)*ndimx*ndimy); > _data = (void*)ndata; > ((*((_image)->f.destroy_image))((_image))); > _image = XCreateImage(dpy,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root_visual), > cimg::X11_attr().nb_bits,2,0,(char*)_data,ndimx,ndimy,8,0); > } > } > > void _init_fullscreen() { > if (!_is_fullscreen || _is_closed) return; > Display *const dpy = cimg::X11_attr().display; > _background_window = 0; ># 7661 "./CImg.h" > const unsigned int sx = screen_width(), sy = screen_height(); > if (sx==_width && sy==_height) return; > XSetWindowAttributes winattr; > winattr.override_redirect = 1; > _background_window = XCreateWindow(dpy,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root),0,0,sx,sy,0,0, > 1,0L,(1L<<9),&winattr); > const unsigned long buf_size = (unsigned long)sx*sy*(cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); > void *background_data = std::malloc(buf_size); > std::memset(background_data,0,buf_size); > XImage *background_image = XCreateImage(dpy,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root_visual),cimg::X11_attr().nb_bits, > 2,0,(char*)background_data,sx,sy,8,0); > XEvent event; > XSelectInput(dpy,_background_window,(1L<<17)); > XMapRaised(dpy,_background_window); > do XWindowEvent(dpy,_background_window,(1L<<17),&event); > while (event.type!=19); > GC gc = ((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->default_gc); > > > > > XPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy); > > XWindowAttributes attr; > XGetWindowAttributes(dpy,_background_window,&attr); > while (attr.map_state!=2) XSync(dpy,0); > ((*((background_image)->f.destroy_image))((background_image))); > } > > void _desinit_fullscreen() { > if (!_is_fullscreen) return; > Display *const dpy = cimg::X11_attr().display; > XUngrabKeyboard(dpy,0L); ># 7703 "./CImg.h" > if (_background_window) XDestroyWindow(dpy,_background_window); > _background_window = 0; > _is_fullscreen = false; > } > > static int _assign_xshm(Display *dpy, XErrorEvent *error) { > cimg::unused(dpy,error); > cimg::X11_attr().is_shm_enabled = false; > return 0; > } > > void _assign(const unsigned int dimw, const unsigned int dimh, const char *const ptitle=0, > const unsigned int normalization_type=3, > const bool fullscreen_flag=false, const bool closed_flag=false) { > cimg::mutex(14); > > > const char *const nptitle = ptitle?ptitle:""; > const unsigned int s = std::strlen(nptitle) + 1; > char *const tmp_title = s?new char[s]:0; > if (s) std::memcpy(tmp_title,nptitle,s*sizeof(char)); > > > if (!is_empty()) assign(); > > > Display* &dpy = cimg::X11_attr().display; > if (!dpy) { > dpy = XOpenDisplay(0); > if (!dpy) > throw CImgDisplayException("[instance(%u,%u,%u,%c%s%c)] CImgDisplay::" > "assign(): Failed to open X11 display.", > _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']'); > > cimg::X11_attr().nb_bits = ((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root_depth); > if (cimg::X11_attr().nb_bits!=8 && cimg::X11_attr().nb_bits!=16 && cimg::X11_attr().nb_bits!=24 && cimg::X11_attr().nb_bits!=32) > throw CImgDisplayException("[instance(%u,%u,%u,%c%s%c)] CImgDisplay::" > "assign(): Invalid %u bits screen mode detected " > "(only 8, 16, 24 and 32 bits modes are managed).", > _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']', > cimg::X11_attr().nb_bits); > XVisualInfo vtemplate; > vtemplate.visualid = XVisualIDFromVisual(((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root_visual)); > int nb_visuals; > XVisualInfo *vinfo = XGetVisualInfo(dpy,0x1,&vtemplate,&nb_visuals); > if (vinfo && vinfo->red_mask<vinfo->blue_mask) cimg::X11_attr().is_blue_first = true; > cimg::X11_attr().byte_order = (((_XPrivDisplay)dpy)->byte_order); > XFree(vinfo); > > XLockDisplay(dpy); > cimg::X11_attr().events_thread = new pthread_t; > pthread_create(cimg::X11_attr().events_thread,0,_events_thread,0); > } else XLockDisplay(dpy); > > > _width = cimg::min(dimw,(unsigned int)screen_width()); > _height = cimg::min(dimh,(unsigned int)screen_height()); > _normalization = normalization_type<4?normalization_type:3; > _is_fullscreen = fullscreen_flag; > _window_x = _window_y = 0; > _is_closed = closed_flag; > _title = tmp_title; > flush(); > > > if (_is_fullscreen) { > if (!_is_closed) _init_fullscreen(); > const unsigned int sx = screen_width(), sy = screen_height(); > XSetWindowAttributes winattr; > winattr.override_redirect = 1; > _window = XCreateWindow(dpy,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root),(sx-_width)/2,(sy-_height)/2,_width,_height,0,0, > 1,0L,(1L<<9),&winattr); > } else > _window = XCreateSimpleWindow(dpy,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root),0,0,_width,_height,0,0L,0L); > > XSelectInput(dpy,_window, > (1L<<15) | (1L<<17) | (1L<<2) | (1L<<0) | (1L<<6) | > (1L<<4) | (1L<<5) | (1L<<3) | (1L<<1)); > > XStoreName(dpy,_window,_title?_title:" "); > if (cimg::X11_attr().nb_bits==8) { > _colormap = XCreateColormap(dpy,_window,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root_visual),1); > _set_colormap(_colormap,3); > XSetWindowColormap(dpy,_window,_colormap); > } > > static const char *const _window_class = "gmic"; > XClassHint *const window_class = XAllocClassHint(); > window_class->res_name = (char*)_window_class; > window_class->res_class = (char*)_window_class; > XSetClassHint(dpy,_window,window_class); > XFree(window_class); > > _window_width = _width; > _window_height = _height; ># 7828 "./CImg.h" > { > const unsigned long buf_size = (unsigned long)_width*_height*(cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); > _data = std::malloc(buf_size); > _image = XCreateImage(dpy,((&((_XPrivDisplay)dpy)->screens[(((_XPrivDisplay)dpy)->default_screen)])->root_visual),cimg::X11_attr().nb_bits,2,0,(char*)_data,_width,_height,8,0); > } > > _wm_window_atom = XInternAtom(dpy,"WM_DELETE_WINDOW",0); > _wm_protocol_atom = XInternAtom(dpy,"WM_PROTOCOLS",0); > XSetWMProtocols(dpy,_window,&_wm_window_atom,1); > > if (_is_fullscreen) XGrabKeyboard(dpy,_window,1,1,1,0L); > cimg::X11_attr().wins[cimg::X11_attr().nb_wins++]=this; > if (!_is_closed) _map_window(); else { _window_x = _window_y = cimg::type<int>::min(); } > XUnlockDisplay(dpy); > cimg::mutex(14,0); > } > > CImgDisplay& assign() { > if (is_empty()) return flush(); > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > > > unsigned int i; > for (i = 0; i<cimg::X11_attr().nb_wins && cimg::X11_attr().wins[i]!=this; ++i) {} > for (; i<cimg::X11_attr().nb_wins-1; ++i) cimg::X11_attr().wins[i] = cimg::X11_attr().wins[i+1]; > --cimg::X11_attr().nb_wins; > > > if (_is_fullscreen && !_is_closed) _desinit_fullscreen(); > XDestroyWindow(dpy,_window); > _window = 0; ># 7870 "./CImg.h" > ((*((_image)->f.destroy_image))((_image))); > _data = 0; _image = 0; > if (cimg::X11_attr().nb_bits==8) XFreeColormap(dpy,_colormap); > _colormap = 0; > XSync(dpy,0); > > > delete[] _title; > _width = _height = _normalization = _window_width = _window_height = 0; > _window_x = _window_y = 0; > _is_fullscreen = false; > _is_closed = true; > _min = _max = 0; > _title = 0; > flush(); > > XUnlockDisplay(dpy); > return *this; > } > > CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *const title=0, > const unsigned int normalization_type=3, > const bool fullscreen_flag=false, const bool closed_flag=false) { > if (!dimw || !dimh) return assign(); > _assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag); > _min = _max = 0; > std::memset(_data,0,(cimg::X11_attr().nb_bits==8?sizeof(unsigned char): > (cimg::X11_attr().nb_bits==16?sizeof(unsigned short):sizeof(unsigned int)))*(unsigned long)_width*_height); > return paint(); > } > > template<typename T> > CImgDisplay& assign(const CImg<T>& img, const char *const title=0, > const unsigned int normalization_type=3, > const bool fullscreen_flag=false, const bool closed_flag=false) { > if (!img) return assign(); > CImg<T> tmp; > const CImg<T>& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); > _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); > if (_normalization==2) _min = (float)nimg.min_max(_max); > return render(nimg).paint(); > } > > template<typename T> > CImgDisplay& assign(const CImgList<T>& list, const char *const title=0, > const unsigned int normalization_type=3, > const bool fullscreen_flag=false, const bool closed_flag=false) { > if (!list) return assign(); > CImg<T> tmp; > const CImg<T> img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); > _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); > if (_normalization==2) _min = (float)nimg.min_max(_max); > return render(nimg).paint(); > } > > CImgDisplay& assign(const CImgDisplay& disp) { > if (!disp) return assign(); > _assign(disp._width,disp._height,disp._title,disp._normalization,disp._is_fullscreen,disp._is_closed); > std::memcpy(_data,disp._data,(cimg::X11_attr().nb_bits==8?sizeof(unsigned char): > cimg::X11_attr().nb_bits==16?sizeof(unsigned short): > sizeof(unsigned int))*(unsigned long)_width*_height); > return paint(); > } > > CImgDisplay& resize(const int nwidth, const int nheight, const bool force_redraw=true) { > if (!nwidth || !nheight || (is_empty() && (nwidth<0 || nheight<0))) return assign(); > if (is_empty()) return assign(nwidth,nheight); > Display *const dpy = cimg::X11_attr().display; > const unsigned int > tmpdimx = (nwidth>0)?nwidth:(-nwidth*width()/100), > tmpdimy = (nheight>0)?nheight:(-nheight*height()/100), > dimx = tmpdimx?tmpdimx:1, > dimy = tmpdimy?tmpdimy:1; > XLockDisplay(dpy); > if (_window_width!=dimx || _window_height!=dimy) { > XWindowAttributes attr; > for (unsigned int i = 0; i<10; ++i) { > XResizeWindow(dpy,_window,dimx,dimy); > XGetWindowAttributes(dpy,_window,&attr); > if (attr.width==(int)dimx && attr.height==(int)dimy) break; > cimg::wait(5); > } > } > if (_width!=dimx || _height!=dimy) switch (cimg::X11_attr().nb_bits) { > case 8 : { unsigned char pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; > case 16 : { unsigned short pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; > default : { unsigned int pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } > } > _window_width = _width = dimx; _window_height = _height = dimy; > _is_resized = false; > XUnlockDisplay(dpy); > if (_is_fullscreen) move((screen_width()-_width)/2,(screen_height()-_height)/2); > if (force_redraw) return paint(); > return *this; > } > > CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { > if (is_empty()) return *this; > if (force_redraw) { > const unsigned long buf_size = (unsigned long)_width*_height*(cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); > void *image_data = std::malloc(buf_size); > std::memcpy(image_data,_data,buf_size); > assign(_width,_height,_title,_normalization,!_is_fullscreen,false); > std::memcpy(_data,image_data,buf_size); > std::free(image_data); > return paint(); > } > return assign(_width,_height,_title,_normalization,!_is_fullscreen,false); > } > > CImgDisplay& show() { > if (is_empty() || !_is_closed) return *this; > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > if (_is_fullscreen) _init_fullscreen(); > _map_window(); > _is_closed = false; > XUnlockDisplay(dpy); > return paint(); > } > > CImgDisplay& close() { > if (is_empty() || _is_closed) return *this; > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > if (_is_fullscreen) _desinit_fullscreen(); > XUnmapWindow(dpy,_window); > _window_x = _window_y = -1; > _is_closed = true; > XUnlockDisplay(dpy); > return *this; > } > > CImgDisplay& move(const int posx, const int posy) { > if (is_empty()) return *this; > show(); > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > XMoveWindow(dpy,_window,posx,posy); > _window_x = posx; _window_y = posy; > _is_moved = false; > XUnlockDisplay(dpy); > return paint(); > } > > CImgDisplay& show_mouse() { > if (is_empty()) return *this; > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > XUndefineCursor(dpy,_window); > XUnlockDisplay(dpy); > return *this; > } > > CImgDisplay& hide_mouse() { > if (is_empty()) return *this; > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > const char pix_data[8] = { 0 }; > XColor col; > col.red = col.green = col.blue = 0; > Pixmap pix = XCreateBitmapFromData(dpy,_window,pix_data,8,8); > Cursor cur = XCreatePixmapCursor(dpy,pix,pix,&col,&col,0,0); > XFreePixmap(dpy,pix); > XDefineCursor(dpy,_window,cur); > XUnlockDisplay(dpy); > return *this; > } > > CImgDisplay& set_mouse(const int posx, const int posy) { > if (is_empty() || _is_closed) return *this; > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > XWarpPointer(dpy,0L,_window,0,0,0,0,posx,posy); > _mouse_x = posx; _mouse_y = posy; > _is_moved = false; > XSync(dpy,0); > XUnlockDisplay(dpy); > return *this; > } > > CImgDisplay& set_title(const char *const format, ...) { > if (is_empty()) return *this; > char tmp[1024] = { 0 }; > va_list ap; > __builtin_va_start(ap,format); > vsnprintf(tmp,sizeof(tmp),format,ap); > __builtin_va_end(ap); > if (!std::strcmp(_title,tmp)) return *this; > delete[] _title; > const unsigned int s = std::strlen(tmp) + 1; > _title = new char[s]; > std::memcpy(_title,tmp,s*sizeof(char)); > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > XStoreName(dpy,_window,tmp); > XUnlockDisplay(dpy); > return *this; > } > > template<typename T> > CImgDisplay& display(const CImg<T>& img) { > if (!img) > throw CImgArgumentException("[instance(%u,%u,%u,%c%s%c)] CImgDisplay::" > "display(): Empty specified image.", > _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']'); > if (is_empty()) return assign(img); > return render(img).paint(false); > } > > CImgDisplay& paint(const bool wait_expose=true) { > if (is_empty()) return *this; > Display *const dpy = cimg::X11_attr().display; > XLockDisplay(dpy); > _paint(wait_expose); > XUnlockDisplay(dpy); > return *this; > } > > template<typename T> > CImgDisplay& render(const CImg<T>& img, const bool flag8=false) { > if (!img) > throw CImgArgumentException("[instance(%u,%u,%u,%c%s%c)] CImgDisplay::" > "render(): Empty specified image.", > _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']'); > if (is_empty()) return *this; > if (img._depth!=1) return render(img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); > if (cimg::X11_attr().nb_bits==8 && (img._width!=_width || img._height!=_height)) return render(img.get_resize(_width,_height,1,-100,1)); > if (cimg::X11_attr().nb_bits==8 && !flag8 && img._spectrum==3) { > static const CImg<typename CImg<T>::ucharT> default_colormap = CImg<typename CImg<T>::ucharT>::default_LUT256(); > return render(img.get_index(default_colormap,1,false)); > } > > Display *const dpy = cimg::X11_attr().display; > const T > *data1 = img._data, > *data2 = (img._spectrum>1)?img.data(0,0,0,1):data1, > *data3 = (img._spectrum>2)?img.data(0,0,0,2):data1; > > if (cimg::X11_attr().is_blue_first) cimg::swap(data1,data3); > XLockDisplay(dpy); > > if (!_normalization || (_normalization==3 && cimg::type<T>::string()==cimg::type<unsigned char>::string())) { > _min = _max = 0; > switch (cimg::X11_attr().nb_bits) { > case 8 : { > _set_colormap(_colormap,img._spectrum); > unsigned char *const ndata = (img._width==_width && img._height==_height)?(unsigned char*)_data:new unsigned char[(unsigned long)img._width*img._height]; > unsigned char *ptrd = (unsigned char*)ndata; > switch (img._spectrum) { > case 1 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) (*ptrd++) = (unsigned char)*(data1++); > break; > case 2 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char R = (unsigned char)*(data1++), G = (unsigned char)*(data2++); > (*ptrd++) = (R&0xf0) | (G>>4); > } break; > default : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char R = (unsigned char)*(data1++), G = (unsigned char)*(data2++), B = (unsigned char)*(data3++); > (*ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); > } > } > if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned char*)_data,_width,_height); delete[] ndata; } > } break; > case 16 : { > unsigned short *const ndata = (img._width==_width && img._height==_height)?(unsigned short*)_data:new unsigned short[(unsigned long)img._width*img._height]; > unsigned char *ptrd = (unsigned char*)ndata; > const unsigned int M = 248; > switch (img._spectrum) { > case 1 : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)*(data1++), G = val>>2; > *(ptrd++) = (val&M) | (G>>3); > *(ptrd++) = (G<<5) | (G>>1); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)*(data1++), G = val>>2; > *(ptrd++) = (G<<5) | (G>>1); > *(ptrd++) = (val&M) | (G>>3); > } > break; > case 2 : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)*(data2++)>>2; > *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); > *(ptrd++) = (G<<5); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)*(data2++)>>2; > *(ptrd++) = (G<<5); > *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); > } > break; > default : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)*(data2++)>>2; > *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); > *(ptrd++) = (G<<5) | ((unsigned char)*(data3++)>>3); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)*(data2++)>>2; > *(ptrd++) = (G<<5) | ((unsigned char)*(data3++)>>3); > *(ptrd++) = ((unsigned char)*(data1++)&M) | (G>>3); > } > } > if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned short*)_data,_width,_height); delete[] ndata; } > } break; > default : { > unsigned int *const ndata = (img._width==_width && img._height==_height)?(unsigned int*)_data:new unsigned int[(unsigned long)img._width*img._height]; > if (sizeof(int)==4) { > unsigned int *ptrd = ndata; > switch (img._spectrum) { > case 1 : > if (cimg::X11_attr().byte_order==cimg::endianness()) > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)*(data1++); > *(ptrd++) = (val<<16) | (val<<8) | val; > } > else > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)*(data1++); > *(ptrd++) = (val<<16) | (val<<8) | val; > } > break; > case 2 : > if (cimg::X11_attr().byte_order==cimg::endianness()) > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8); > else > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = ((unsigned char)*(data2++)<<16) | ((unsigned char)*(data1++)<<8); > break; > default : > if (cimg::X11_attr().byte_order==cimg::endianness()) > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8) | (unsigned char)*(data3++); > else > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = ((unsigned char)*(data3++)<<24) | ((unsigned char)*(data2++)<<16) | ((unsigned char)*(data1++)<<8); > } > } else { > unsigned char *ptrd = (unsigned char*)ndata; > switch (img._spectrum) { > case 1 : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > *(ptrd++) = 0; > *(ptrd++) = (unsigned char)*(data1++); > *(ptrd++) = 0; > *(ptrd++) = 0; > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > *(ptrd++) = 0; > *(ptrd++) = 0; > *(ptrd++) = (unsigned char)*(data1++); > *(ptrd++) = 0; > } > break; > case 2 : > if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > *(ptrd++) = 0; > *(ptrd++) = (unsigned char)*(data2++); > *(ptrd++) = (unsigned char)*(data1++); > *(ptrd++) = 0; > } > break; > default : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > *(ptrd++) = 0; > *(ptrd++) = (unsigned char)*(data1++); > *(ptrd++) = (unsigned char)*(data2++); > *(ptrd++) = (unsigned char)*(data3++); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > *(ptrd++) = (unsigned char)*(data3++); > *(ptrd++) = (unsigned char)*(data2++); > *(ptrd++) = (unsigned char)*(data1++); > *(ptrd++) = 0; > } > } > } > if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned int*)_data,_width,_height); delete[] ndata; } > } > } > } else { > if (_normalization==3) { > if (cimg::type<T>::is_float()) _min = (float)img.min_max(_max); > else { _min = (float)cimg::type<T>::min(); _max = (float)cimg::type<T>::max(); } > } else if ((_min>_max) || _normalization==1) _min = (float)img.min_max(_max); > const float delta = _max - _min, mm = 255/(delta?delta:1.0f); > switch (cimg::X11_attr().nb_bits) { > case 8 : { > _set_colormap(_colormap,img._spectrum); > unsigned char *const ndata = (img._width==_width && img._height==_height)?(unsigned char*)_data:new unsigned char[(unsigned long)img._width*img._height]; > unsigned char *ptrd = (unsigned char*)ndata; > switch (img._spectrum) { > case 1 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char R = (unsigned char)((*(data1++)-_min)*mm); > *(ptrd++) = R; > } break; > case 2 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char > R = (unsigned char)((*(data1++)-_min)*mm), > G = (unsigned char)((*(data2++)-_min)*mm); > (*ptrd++) = (R&0xf0) | (G>>4); > } break; > default : > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char > R = (unsigned char)((*(data1++)-_min)*mm), > G = (unsigned char)((*(data2++)-_min)*mm), > B = (unsigned char)((*(data3++)-_min)*mm); > *(ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); > } > } > if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned char*)_data,_width,_height); delete[] ndata; } > } break; > case 16 : { > unsigned short *const ndata = (img._width==_width && img._height==_height)?(unsigned short*)_data:new unsigned short[(unsigned long)img._width*img._height]; > unsigned char *ptrd = (unsigned char*)ndata; > const unsigned int M = 248; > switch (img._spectrum) { > case 1 : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)((*(data1++)-_min)*mm), G = val>>2; > *(ptrd++) = (val&M) | (G>>3); > *(ptrd++) = (G<<5) | (val>>3); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)((*(data1++)-_min)*mm), G = val>>2; > *(ptrd++) = (G<<5) | (val>>3); > *(ptrd++) = (val&M) | (G>>3); > } > break; > case 2 : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; > *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); > *(ptrd++) = (G<<5); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; > *(ptrd++) = (G<<5); > *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); > } > break; > default : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; > *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); > *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++)-_min)*mm)>>3); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; > *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++)-_min)*mm)>>3); > *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); > } > } > if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned short*)_data,_width,_height); delete[] ndata; } > } break; > default : { > unsigned int *const ndata = (img._width==_width && img._height==_height)?(unsigned int*)_data:new unsigned int[(unsigned long)img._width*img._height]; > if (sizeof(int)==4) { > unsigned int *ptrd = ndata; > switch (img._spectrum) { > case 1 : > if (cimg::X11_attr().byte_order==cimg::endianness()) > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); > *(ptrd++) = (val<<16) | (val<<8) | val; > } > else > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); > *(ptrd++) = (val<<24) | (val<<16) | (val<<8); > } > break; > case 2 : > if (cimg::X11_attr().byte_order==cimg::endianness()) > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = > ((unsigned char)((*(data1++)-_min)*mm)<<16) | > ((unsigned char)((*(data2++)-_min)*mm)<<8); > else > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = > ((unsigned char)((*(data2++)-_min)*mm)<<16) | > ((unsigned char)((*(data1++)-_min)*mm)<<8); > break; > default : > if (cimg::X11_attr().byte_order==cimg::endianness()) > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = > ((unsigned char)((*(data1++)-_min)*mm)<<16) | > ((unsigned char)((*(data2++)-_min)*mm)<<8) | > (unsigned char)((*(data3++)-_min)*mm); > else > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) > *(ptrd++) = > ((unsigned char)((*(data3++)-_min)*mm)<<24) | > ((unsigned char)((*(data2++)-_min)*mm)<<16) | > ((unsigned char)((*(data1++)-_min)*mm)<<8); > } > } else { > unsigned char *ptrd = (unsigned char*)ndata; > switch (img._spectrum) { > case 1 : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); > (*ptrd++) = 0; > (*ptrd++) = val; > (*ptrd++) = val; > (*ptrd++) = val; > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); > (*ptrd++) = val; > (*ptrd++) = val; > (*ptrd++) = val; > (*ptrd++) = 0; > } > break; > case 2 : > if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > (*ptrd++) = 0; > (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); > (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); > (*ptrd++) = 0; > } > break; > default : > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > (*ptrd++) = 0; > (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); > (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); > (*ptrd++) = (unsigned char)((*(data3++)-_min)*mm); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > (*ptrd++) = (unsigned char)((*(data3++)-_min)*mm); > (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); > (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); > (*ptrd++) = 0; > } > } > } > if (ndata!=_data) { _render_resize(ndata,img._width,img._height,(unsigned int*)_data,_width,_height); delete[] ndata; } > } > } > } > XUnlockDisplay(dpy); > return *this; > } > > template<typename T> > const CImgDisplay& snapshot(CImg<T>& img) const { > if (is_empty()) { img.assign(); return *this; } > const unsigned char *ptrs = (unsigned char*)_data; > img.assign(_width,_height,1,3); > T > *data1 = img.data(0,0,0,0), > *data2 = img.data(0,0,0,1), > *data3 = img.data(0,0,0,2); > if (cimg::X11_attr().is_blue_first) cimg::swap(data1,data3); > switch (cimg::X11_attr().nb_bits) { > case 8 : { > for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val = *(ptrs++); > *(data1++) = (T)(val&0xe0); > *(data2++) = (T)((val&0x1c)<<3); > *(data3++) = (T)(val<<6); > } > } break; > case 16 : { > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned char val0 = *(ptrs++), val1 = *(ptrs++); > *(data1++) = (T)(val0&0xf8); > *(data2++) = (T)((val0<<5) | ((val1&0xe0)>>5)); > *(data3++) = (T)(val1<<3); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > const unsigned short val0 = *(ptrs++), val1 = *(ptrs++); > *(data1++) = (T)(val1&0xf8); > *(data2++) = (T)((val1<<5) | ((val0&0xe0)>>5)); > *(data3++) = (T)(val0<<3); > } > } break; > default : { > if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > ++ptrs; > *(data1++) = (T)*(ptrs++); > *(data2++) = (T)*(ptrs++); > *(data3++) = (T)*(ptrs++); > } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { > *(data3++) = (T)*(ptrs++); > *(data2++) = (T)*(ptrs++); > *(data1++) = (T)*(ptrs++); > ++ptrs; > } > } > } > return *this; > } ># 9039 "./CImg.h" > }; ># 9144 "./CImg.h" > template<typename T> > struct CImg { > > unsigned int _width, _height, _depth, _spectrum; > bool _is_shared; > T *_data; ># 9164 "./CImg.h" > typedef T* iterator; ># 9180 "./CImg.h" > typedef const T* const_iterator; ># 9190 "./CImg.h" > typedef T value_type; > > > typedef typename cimg::superset<T,bool>::type Tbool; > typedef typename cimg::superset<T,unsigned char>::type Tuchar; > typedef typename cimg::superset<T,char>::type Tchar; > typedef typename cimg::superset<T,unsigned short>::type Tushort; > typedef typename cimg::superset<T,short>::type Tshort; > typedef typename cimg::superset<T,unsigned int>::type Tuint; > typedef typename cimg::superset<T,int>::type Tint; > typedef typename cimg::superset<T,unsigned long>::type Tulong; > typedef typename cimg::superset<T,long>::type Tlong; > typedef typename cimg::superset<T,float>::type Tfloat; > typedef typename cimg::superset<T,double>::type Tdouble; > typedef typename cimg::last<T,bool>::type boolT; > typedef typename cimg::last<T,unsigned char>::type ucharT; > typedef typename cimg::last<T,char>::type charT; > typedef typename cimg::last<T,unsigned short>::type ushortT; > typedef typename cimg::last<T,short>::type shortT; > typedef typename cimg::last<T,unsigned int>::type uintT; > typedef typename cimg::last<T,int>::type intT; > typedef typename cimg::last<T,unsigned long>::type ulongT; > typedef typename cimg::last<T,long>::type longT; > typedef typename cimg::last<T,float>::type floatT; > typedef typename cimg::last<T,double>::type doubleT; ># 9223 "./CImg.h" ># 1 "./gmic.cpp" 1 ># 50 "./gmic.cpp" >CImg<T>& gmic_invert_endianness(const char *const stype) { > > > > > > > if (!std::strcmp(stype,"bool")) if (cimg::type<T>::string()==cimg::type<bool>::string()) invert_endianness(); else CImg<bool>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"uchar")) if (cimg::type<T>::string()==cimg::type<unsigned char>::string()) invert_endianness(); else CImg<unsigned char>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned char")) if (cimg::type<T>::string()==cimg::type<unsigned char>::string()) invert_endianness(); else CImg<unsigned char>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"char")) if (cimg::type<T>::string()==cimg::type<char>::string()) invert_endianness(); else CImg<char>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"ushort")) if (cimg::type<T>::string()==cimg::type<unsigned short>::string()) invert_endianness(); else CImg<unsigned short>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned short")) if (cimg::type<T>::string()==cimg::type<unsigned short>::string()) invert_endianness(); else CImg<unsigned short>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"short")) if (cimg::type<T>::string()==cimg::type<short>::string()) invert_endianness(); else CImg<short>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"uint")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned int")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"int")) if (cimg::type<T>::string()==cimg::type<int>::string()) invert_endianness(); else CImg<int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"ulong")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"unsigned long")) if (cimg::type<T>::string()==cimg::type<unsigned int>::string()) invert_endianness(); else CImg<unsigned int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"long")) if (cimg::type<T>::string()==cimg::type<int>::string()) invert_endianness(); else CImg<int>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"float")) if (cimg::type<T>::string()==cimg::type<float>::string()) invert_endianness(); else CImg<float>(*this).invert_endianness().move_to(*this); > else if (!std::strcmp(stype,"double")) if (cimg::type<T>::string()==cimg::type<double>::string()) invert_endianness(); else CImg<double>(*this).invert_endianness().move_to(*this); > else invert_endianness(); > return *this; >} > >CImg<T> get_gmic_invert_endianness(const char *const stype) const { > return (+*this).gmic_invert_endianness(stype); >} > >template<typename t> >CImg<T>& operator_eq(const t val) { > > ># 83 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 83 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd == (T)val); > return *this; >} > >CImg<T>& operator_eq(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_eq"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd == (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd == (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 102 "./gmic.cpp" >#pragma omp parallel ># 102 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 105 "./gmic.cpp" >#pragma omp for collapse(3) ># 105 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd == (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd == (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_eq(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_eq(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_eq(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd == (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd == (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_neq(const t val) { > > ># 143 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 143 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd != (T)val); > return *this; >} > >CImg<T>& operator_neq(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_neq"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd != (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd != (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 162 "./gmic.cpp" >#pragma omp parallel ># 162 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 165 "./gmic.cpp" >#pragma omp for collapse(3) ># 165 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd != (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd != (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_neq(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_neq(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_neq(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd != (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd != (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_gt(const t val) { > > ># 203 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 203 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd > (T)val); > return *this; >} > >CImg<T>& operator_gt(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_gt"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd > (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd > (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 222 "./gmic.cpp" >#pragma omp parallel ># 222 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 225 "./gmic.cpp" >#pragma omp for collapse(3) ># 225 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd > (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd > (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_gt(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_gt(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_gt(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd > (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd > (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_ge(const t val) { > > ># 263 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 263 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd >= (T)val); > return *this; >} > >CImg<T>& operator_ge(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_ge"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd >= (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd >= (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 282 "./gmic.cpp" >#pragma omp parallel ># 282 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 285 "./gmic.cpp" >#pragma omp for collapse(3) ># 285 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd >= (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd >= (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_ge(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_ge(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_ge(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd >= (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd >= (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_lt(const t val) { > > ># 323 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 323 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd < (T)val); > return *this; >} > >CImg<T>& operator_lt(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_lt"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd < (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd < (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 342 "./gmic.cpp" >#pragma omp parallel ># 342 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 345 "./gmic.cpp" >#pragma omp for collapse(3) ># 345 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd < (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd < (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_lt(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_lt(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_lt(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd < (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd < (T)*(ptrs++)); > } > return *this; >} > >template<typename t> >CImg<T>& operator_le(const t val) { > > ># 383 "./gmic.cpp" >#pragma omp parallel for if (size()>=131072) ># 383 "./gmic.cpp" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd <= (T)val); > return *this; >} > >CImg<T>& operator_le(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), > &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator_le"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd <= (T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd <= (T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 402 "./gmic.cpp" >#pragma omp parallel ># 402 "./gmic.cpp" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 405 "./gmic.cpp" >#pragma omp for collapse(3) ># 405 "./gmic.cpp" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd <= (T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd <= (T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > CImg<T> values(_width,_height,_depth,_spectrum); > values = expression; > operator_le(values); > } > cimg::exception_mode() = omode; > return *this; >} > >template<typename t> >CImg<T>& operator_le(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return operator_le(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) > for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) > *ptrd = (T)(*ptrd <= (T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd <= (T)*(ptrs++)); > } > return *this; >} > >CImg<T>& mul(const char *const expression) { > return operator*=(expression); >} > >CImg<T> get_mul(const char *const expression) const { > return (+*this).mul(expression); >} > >CImg<T>& div(const char *const expression) { > return operator/=(expression); >} > >CImg<T> get_div(const char *const expression) const { > return (+*this).div(expression); >} > >template<typename t> >const CImg<T>& gmic_symmetric_eigen(CImg<t>& val, CImg<t>& vec) const { > if (spectrum()!=3 && spectrum()!=6) return symmetric_eigen(val,vec); > val.assign(width(),height(),depth(),spectrum()==3?2:3); > vec.assign(width(),height(),depth(),spectrum()==3?2:6); > CImg<t> _val, _vec; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > get_tensor_at(x,y,z).symmetric_eigen(_val,_vec); > val.set_vector_at(_val,x,y,z); > if (spectrum()==3) { > vec(x,y,z,0) = _vec(0,0); > vec(x,y,z,1) = _vec(0,1); > } else { > vec(x,y,z,0) = _vec(0,0); > vec(x,y,z,1) = _vec(0,1); > vec(x,y,z,2) = _vec(0,2); > > vec(x,y,z,3) = _vec(1,0); > vec(x,y,z,4) = _vec(1,1); > vec(x,y,z,5) = _vec(1,2); > } > } > return *this; >} > > > >template<typename t> >CImg<T>& replace(CImg<t>& img) { > return img.move_to(*this); >} > >template<typename t> >CImg<T> get_replace(const CImg<t>& img) const { > return +img; >} > >CImg<T>& gmic_autocrop(const CImg<T>& color=CImg<T>::empty()) { > if (color.width()==1) autocrop(*color); > else autocrop(color); > return *this; >} > >CImg<T> get_gmic_autocrop(const CImg<T>& color=CImg<T>::empty()) { > return (+*this).gmic_autocrop(color); >} > >CImg<T> get_gmic_set(const double value, > const int x, const int y, const int z, const int v) const { > return (+*this).gmic_set(value,x,y,z,v); >} > >CImg<T>& gmic_set(const double value, > const int x, const int y, const int z, const int v) { > (*this).atXYZC(x,y,z,v,0) = (T)value; > return *this; >} > >CImg<T> get_draw_point(const int x, const int y, const int z, const T *const col, > const float opacity) const { > return (+*this).draw_point(x,y,z,col,opacity); >} > >CImg<T> get_draw_line(const int x0, const int y0, const int x1, const int y1, const T *const col, > const float opacity, const unsigned int pattern) const { > return (+*this).draw_line(x0,y0,x1,y1,col,opacity,pattern); >} > >template<typename t> >CImg<T> get_draw_polygon(const CImg<t>& pts, const T *const col, const float opacity) const { > return (+*this).draw_polygon(pts,col,opacity); >} > >template<typename t> >CImg<T> get_draw_polygon(const CImg<t>& pts, const T *const col, const float opacity, > const unsigned int pattern) const { > return (+*this).draw_polygon(pts,col,opacity,pattern); >} > >CImg<T> get_draw_circle(const int x, const int y, const int r, const T *const col, > const float opacity) const { > return (+*this).draw_circle(x,y,r,col,opacity); >} > >CImg<T> get_draw_circle(const int x, const int y, const int r, const T *const col, > const float opacity, > const unsigned int pattern) const { > return (+*this).draw_circle(x,y,r,col,opacity,pattern); >} > >CImg<T> get_draw_ellipse(const int x, const int y, const float r0, const float r1, > const float angle, const T *const col, const float opacity) const { > return (+*this).draw_ellipse(x,y,r0,r1,angle,col,opacity); >} > >CImg<T> get_draw_ellipse(const int x, const int y, const float r0, const float r1, > const float angle, const T *const col, const float opacity, > const unsigned int pattern) const { > return (+*this).draw_ellipse(x,y,r0,r1,angle,col,opacity,pattern); >} > >CImg<T>& gmic_draw_text(const int x, const int y, > const char *const text, const T *const col, > const int bg, const float opacity, const unsigned int siz, > const unsigned int nb_cols) { > if (is_empty()) { > const T one[] = { 1 }; > assign().draw_text(x,y,"%s",one,0,opacity,siz,text).resize(-100,-100,1,nb_cols); > for (int c = 0; c<(int)((*this)._spectrum); ++c) get_shared_channel(c)*=col[c]; > } else draw_text(x,y,"%s",col,bg,opacity,siz,text); > return *this; >} > >CImg<T> get_gmic_draw_text(const int x, const int y, > const char *const text, const T *const col, > const int bg, const float opacity, const unsigned int siz, > const unsigned int nb_cols) const { > return (+*this).gmic_draw_text(x,y,text,col,bg,opacity,siz,nb_cols); >} > >CImg<T> get_draw_image(const int x, const int y, const int z, const int c, > const CImg<T>& sprite, const CImg<T>& mask, const float opacity, > const float max_opacity_mask) const { > return (+*this).draw_image(x,y,z,c,sprite,mask,opacity,max_opacity_mask); >} > >CImg<T> get_draw_image(const int x, const int y, const int z, const int c, > const CImg<T>& sprite, const float opacity) const { > return (+*this).draw_image(x,y,z,c,sprite,opacity); >} > >CImg<T> get_draw_plasma(const float alpha, const float beta, const unsigned int scale) const { > return (+*this).draw_plasma(alpha,beta,scale); >} > >CImg<T> get_draw_mandelbrot(const CImg<T>& color_palette, const float opacity, > const double z0r, const double z0i, const double z1r, const double z1i, > const unsigned int itermax, const bool normalized_iteration, > const bool julia_set, const double paramr, const double parami) const { > return (+*this).draw_mandelbrot(color_palette,opacity,z0r,z0i,z1r,z1i,itermax, > normalized_iteration,julia_set,paramr,parami); >} > >template<typename t, typename tc> >CImg<T> get_draw_graph(const CImg<t>& data, > const tc *const color, const float opacity=1, > const unsigned int plot_type=1, const int vertex_type=1, > const double ymin=0, const double ymax=0, > const unsigned int pattern=~0U) const { > return (+*this).draw_graph(data,color,opacity,plot_type,vertex_type,ymin,ymax,pattern); >} > >template<typename tc> >CImg<T> get_draw_axes(const float x0, const float x1, const float y0, const float y1, > const tc *const color, const float opacity=1, > const int subdivisionx=-60, const int subdivisiony=-60, > const float precisionx=0, const float precisiony=0, > const unsigned int patternx=~0U, const unsigned int patterny=~0U, > const unsigned int font_height=13) const { > return (+*this).draw_axes(x0,x1,y0,y1,color,opacity,subdivisionx,subdivisiony, > precisionx,precisiony,patternx,patterny,font_height); >} > >template<typename tc> >CImg<T> get_draw_grid(const float sizex, const float sizey, > const float offsetx, const float offsety, > const bool invertx, const bool inverty, > const tc *const color, const float opacity=1, > const unsigned int patternx=~0U, const unsigned int patterny=~0U) { > return (+*this).draw_grid(sizex,sizey,offsetx,offsety,invertx,inverty,color,opacity, > patternx,patterny); >} > >template<typename t1, typename t2> >CImg<T> get_draw_quiver(const CImg<t1>& flow, > const t2 *const color, const float opacity=1, > const unsigned int sampling=25, const float factor=-20, > const bool arrows=true, const unsigned int pattern=~0U) const { > return (+*this).draw_quiver(flow,color,opacity,sampling,factor,arrows,pattern); >} > >CImg<T> get_draw_fill(const int x, const int y, const int z, > const T *const col, const float opacity, > const float tolerance, const bool is_high_connectivity) const { > return (+*this).draw_fill(x,y,z,col,opacity,tolerance,is_high_connectivity); >} > >static bool is_almost(const T x, const T c) { > return x>=c && x<c+1; >} > >template<typename tp, typename tf, typename tc, typename to> >CImg<T> get_draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImgList<to>& opacities, > const unsigned int render_mode, const bool double_sided, > const float focale, > const float light_x, const float light_y,const float light_z, > const float specular_light, const float specular_shine, > CImg<floatT>& zbuffer) const { > return (+*this).draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_mode, > double_sided,focale,light_x,light_y,light_z,specular_light, > specular_shine,zbuffer); >} > > > >CImgList<T> get_split_CImg3d() const { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_split_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > CImgList<T> res; > const T *ptr0 = _data, *ptr = ptr0 + 6; > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > const unsigned int nbv = (unsigned int)*(ptr++), nbp = (unsigned int)*(ptr++); > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; ptr+=3*nbv; > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > for (unsigned int i = 0; i<nbp; ++i) ptr+=(unsigned int)(*ptr) + 1; > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > for (unsigned int i = 0; i<nbp; ++i) { > const T val = *(ptr++); > if (val!=-128) ptr+=2; > else { > const unsigned int > w = (unsigned int)*(ptr++), > h = (unsigned int)*(ptr++), > s = (unsigned int)*(ptr++); > if (w*h*s!=0) ptr+=w*h*s; > } > } > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > ptr0 = ptr; > for (unsigned int i = 0; i<nbp; ++i) { > const T val = *(ptr++); > if (val==-128) { > const unsigned int > w = (unsigned int)*(ptr++), > h = (unsigned int)*(ptr++), > s = (unsigned int)*(ptr++); > if (w*h*s!=0) ptr+=w*h*s; > } > } > CImg<T>(ptr0,1,ptr-ptr0,1,1).move_to(res); > return res; >} > >static CImg<T> append_CImg3d(const CImgList<T>& images) { > if (!images) return CImg<T>(); > if (images.size()==1) return +images[0]; > char error_message[1024] = { 0 }; > unsigned int nbv = 0, nbp = 0; > unsigned long siz = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const CImg<T>& img = images[l]; > if (!img.is_CImg3d(false,error_message)) > throw CImgArgumentException("append_CImg3d(): image [%d] (%u,%u,%u,%u,%p) " > "is not a CImg3d (%s).", > l,img._width,img._height,img._depth,img._spectrum,img._data, > error_message); > siz+=img.size() - 8; > nbv+=cimg::float2uint((float)img[6]); > nbp+=cimg::float2uint((float)img[7]); > } > > CImg<T> res(1,siz + 8); > const T **const ptrs = new const T*[images.size()]; > T *ptrd = res._data; > *(ptrd++) = (T)('C' + 0.5f); *(ptrd++) = (T)('I' + 0.5f); > *(ptrd++) = (T)('m' + 0.5f); *(ptrd++) = (T)('g' + 0.5f); > *(ptrd++) = (T)('3' + 0.5f); *(ptrd++) = (T)('d' + 0.5f); > *(ptrd++) = (T)nbv; > *(ptrd++) = (T)nbp; > for (int l = 0; l<(int)(images)._width; ++l) { > const CImg<T>& img = images[l]; > const unsigned int nbv = cimg::float2uint((float)img[6]); > std::memcpy(ptrd,img._data + 8,3*nbv*sizeof(T)); > ptrd+=3*nbv; > ptrs[l] = img._data + 8 + 3*nbv; > } > unsigned long poff = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const unsigned int > nbv = cimg::float2uint((float)images[l][6]), > nbp = cimg::float2uint((float)images[l][7]); > for (unsigned int p = 0; p<nbp; ++p) { > const unsigned int > nbi = cimg::float2uint((float)*(ptrs[l]++)), > _nbi = nbi<5?nbi:nbi==5?2:nbi/3; > *(ptrd++) = (T)cimg::uint2float(nbi); > for (unsigned int i = 0; i<_nbi; ++i) *(ptrd++) = (T)(*(ptrs[l]++) + poff); > for (unsigned int i = nbi-_nbi; i; --i) *(ptrd++) = *(ptrs[l]++); > } > poff+=nbv; > } > unsigned long voff = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const unsigned int nbc = cimg::float2uint((float)images[l][7]); > for (unsigned int c = 0; c<nbc; ++c) > if (*(ptrs[l])==(T)-128) { > *(ptrd++) = *(ptrs[l]++); > const unsigned int > w = (unsigned int)*(ptrs[l]++), > h = (unsigned int)*(ptrs[l]++), > s = (unsigned int)*(ptrs[l]++); > if (!h && !s) { *(ptrd++) = (T)(w + voff); *(ptrd++) = 0; *(ptrd++) = 0; } > else { > *(ptrd++) = (T)w; *(ptrd++) = (T)h; *(ptrd++) = (T)s; > const unsigned long whs = (unsigned long)w*h*s; > std::memcpy(ptrd,ptrs[l],whs*sizeof(T)); > ptrs[l]+=whs; ptrd+=whs; > } > } else { *(ptrd++) = *(ptrs[l]++); *(ptrd++) = *(ptrs[l]++); *(ptrd++) = *(ptrs[l]++); } > voff+=nbc; > } > voff = 0; > for (int l = 0; l<(int)(images)._width; ++l) { > const unsigned int nbo = cimg::float2uint((float)images[l][7]); > for (unsigned int o = 0; o<nbo; ++o) > if (*(ptrs[l])==(T)-128) { > *(ptrd++) = *(ptrs[l]++); > const unsigned int > w = (unsigned int)*(ptrs[l]++), > h = (unsigned int)*(ptrs[l]++), > s = (unsigned int)*(ptrs[l]++); > if (!h && !s) { *(ptrd++) = (T)(w + voff); *(ptrd++) = 0; *(ptrd++) = 0; } > else { > *(ptrd++) = (T)w; *(ptrd++) = (T)h; *(ptrd++) = (T)s; > const unsigned long whs = (unsigned long)w*h*s; > std::memcpy(ptrd,ptrs[l],whs*sizeof(T)); > ptrs[l]+=whs; ptrd+=whs; > } > } else *(ptrd++) = *(ptrs[l]++); > voff+=nbo; > } > delete[] ptrs; > return res; >} > >template<typename t> >CImg<T>& rotate_CImg3d(const CImg<t>& rot) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const unsigned int nbv = cimg::float2uint((float)(*this)[6]); > const T *ptrs = data() + 8; > const float > a = (float)rot(0,0), b = (float)rot(1,0), c = (float)rot(2,0), > d = (float)rot(0,1), e = (float)rot(1,1), f = (float)rot(2,1), > g = (float)rot(0,2), h = (float)rot(1,2), i = (float)rot(2,2); > T *ptrd = data() + 8; > for (unsigned int j = 0; j<nbv; ++j) { > const float x = (float)*(ptrs++), y = (float)*(ptrs++), z = (float)*(ptrs++); > *(ptrd++) = (T)(a*x + b*y + c*z); > *(ptrd++) = (T)(d*x + e*y + f*z); > *(ptrd++) = (T)(g*x + h*y + i*z); > } > return *this; >} > >template<typename t> >CImg<T> get_rotate_CImg3d(const CImg<t>& rot) const { > return (+*this).rotate_CImg3d(rot); >} > >CImg<T>& shift_CImg3d(const float tx, const float ty, const float tz) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "shift_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const unsigned int nbv = cimg::float2uint((float)(*this)[6]); > T *ptrd = data() + 8; > for (unsigned int j = 0; j<nbv; ++j) { *(ptrd++)+=(T)tx; *(ptrd++)+=(T)ty; *(ptrd++)+=(T)tz; } > return *this; >} > >CImg<T> get_shift_CImg3d(const float tx, const float ty, const float tz) const { > return (+*this).shift_CImg3d(tx,ty,tz); >} > >CImg<T>& scale_CImg3d(const float sx, const float sy, const float sz) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "scale_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const unsigned int nbv = cimg::float2uint((float)(*this)[6]); > T *ptrd = data() + 8; > for (unsigned int j = 0; j<nbv; ++j) { *(ptrd++)*=(T)sx; *(ptrd++)*=(T)sy; *(ptrd++)*=(T)sz; } > return *this; >} > >CImg<T> get_scale_CImg3d(const float sx, const float sy, const float sz) const { > return (+*this).scale_CImg3d(sx,sy,sz); >} > >CImg<T>& reverse_CImg3d() { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "reverse_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > T *p = _data + 6; > const unsigned int nbv = (unsigned int)*(p++), nbp = (unsigned int)*(p++); > p+=3*nbv; > for (unsigned int i = 0; i<nbp; ++i) { > const unsigned int nb = (unsigned int)*(p++); > switch(nb) { > case 2: case 3: cimg::swap(p[0],p[1]); break; > case 6: cimg::swap(p[0],p[1],p[2],p[4],p[3],p[5]); break; > case 9: cimg::swap(p[0],p[1],p[3],p[5],p[4],p[6]); break; > case 4: cimg::swap(p[0],p[1],p[2],p[3]); break; > case 12: cimg::swap(p[0],p[1],p[2],p[3],p[4],p[6],p[5],p[7],p[8],p[10],p[9],p[11]); break; > } > p+=nb; > } > return *this; >} > >CImg<T> get_reverse_CImg3d() const { > return (+*this).reverse_CImg3d(); >} > >CImg<T>& color_CImg3d(const float R, const float G, const float B, const float opacity, > const bool set_RGB, const bool set_opacity) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "color_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > T *ptrd = data() + 6; > const unsigned int > nbv = cimg::float2uint((float)*(ptrd++)), > nbp = cimg::float2uint((float)*(ptrd++)); > ptrd+=3*nbv; > for (unsigned int i = 0; i<nbp; ++i) { const unsigned int N = (unsigned int)*(ptrd++); ptrd+=N; } > for (unsigned int c = 0; c<nbp; ++c) > if (*ptrd==(T)-128) { > ++ptrd; > const unsigned int > w = (unsigned int)*(ptrd++), > h = (unsigned int)*(ptrd++), > s = (unsigned int)*(ptrd++); > ptrd+=w*h*s; > } else if (set_RGB) { *(ptrd++) = (T)R; *(ptrd++) = (T)G; *(ptrd++) = (T)B; } else ptrd+=3; > if (set_opacity) > for (unsigned int o = 0; o<nbp; ++o) { > if (*ptrd==(T)-128) { > ++ptrd; > const unsigned int > w = (unsigned int)*(ptrd++), > h = (unsigned int)*(ptrd++), > s = (unsigned int)*(ptrd++); > ptrd+=w*h*s; > } else *(ptrd++) = (T)opacity; > } > return *this; >} > >CImg<T> get_color_CImg3d(const float R, const float G, const float B, > const float opacity, const bool set_RGB, const bool set_opacity) const { > return (+*this).color_CImg3d(R,G,B,opacity,set_RGB,set_opacity); >} > >CImg<T>& texturize_CImg3d(const CImg<T>& texture, const CImg<T>& coords) { > return get_texturize_CImg3d(texture,coords).move_to(*this); >} > >CImg<T> get_texturize_CImg3d(const CImg<T>& texture, const CImg<T>& coords) const { > CImgList<uintT> primitives; > CImgList<T> colors; > CImgList<floatT> opacities; > const CImg<floatT> points = get_CImg3dtoobject3d(primitives,colors,opacities,false); > points.texturize_object3d(primitives,colors,texture,coords); > return points.get_object3dtoCImg3d(primitives,colors,opacities,false); >} > >CImg<T>& convert_primitives_CImg3d(const unsigned int mode) { > char error_message[1024] = { 0 }; > if (!is_CImg3d(false,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "convert_primitives_CImg3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > CImgList<uintT> primitives; > CImgList<floatT> colors, opacities; > CImg3dtoobject3d(primitives,colors,opacities,false); > const unsigned int psiz = primitives.size(); > CImg<uintT> P; > CImg<floatT> C, O; > for (unsigned int p = 0; p<psiz; ++p) { > primitives[p].move_to(P); > colors[p].move_to(C); > opacities[p].move_to(O); > switch (P.size()) { > case 1 : > P.move_to(primitives); > if (mode==2) { > if (C.size()==3) C.move_to(colors); > else C.get_vector_at(C.width()/2,C.height()/2).move_to(colors); > if (O.size()==1) O.move_to(opacities); > else O.get_vector_at(O.width()/2,O.height()/2).move_to(opacities); > } else { C.move_to(colors); O.move_to(opacities); } > break; > case 2 : > if (mode) { P.move_to(primitives); C.move_to(colors); O.move_to(opacities); } > else { > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } > break; > case 3 : > if (mode==2) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2],P[0]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } > break; > case 4 : > if (mode==2) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2],P[3]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[3],P[0]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > colors.insert(C); opacities.insert(O); > CImg<uintT>::vector(P[3]).move_to(primitives); > C.move_to(colors); O.move_to(opacities); > } > break; > case 5 : > if (mode==2) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1],1,P[3],P[4]).move_to(primitives); > colors.insert(C); opacities.insert(O); > } else { > const float > x0 = (float)(*this)(P[0],0), > y0 = (float)(*this)(P[0],1), > z0 = (float)(*this)(P[0],2), > x1 = (float)(*this)(P[1],0), > y1 = (float)(*this)(P[1],1), > z1 = (float)(*this)(P[1],2); > (*this)(P[0],0) = (T)((x0+x1)/2); > (*this)(P[0],1) = (T)((y0+y1)/2); > (*this)(P[0],2) = (T)((z0+z1)/2); > CImg<uintT>::vector(P[0]).move_to(primitives); > colors.insert(C); opacities.insert(O); > } > break; > case 6 : > if (mode==2) { > CImg<uintT>::vector(P[0],P[1]).move_to(primitives); > C.get_vector_at(P[2],P[3]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[2],P[3])).move_to(opacities); > else O.move_to(opacities); > } else if (mode==1) { > P.move_to(primitives); C.move_to(colors); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > C.get_vector_at(P[2],P[3]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[2],P[3])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.get_vector_at(P[4],P[5]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[4],P[5])).move_to(opacities); > else O.move_to(opacities); > } > break; > case 9 : > if (mode==2) { > CImg<uintT>::vector(P[0],P[1],P[2]).move_to(primitives); > C.get_vector_at(P[3],P[4]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[3],P[4])).move_to(opacities); > else O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1],P[3],P[4],P[5],P[6]). > move_to(primitives); > C.move_to(colors); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2],P[3],P[4],P[7],P[8]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); opacities.insert(O); > CImg<uintT>::vector(P[2],P[0],P[7],P[8],P[1],P[3]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > C.get_vector_at(P[3],P[4]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[3],P[4])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.get_vector_at(P[5],P[6]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[5],P[6])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > C.get_vector_at(P[7],P[8]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[7],P[8])).move_to(opacities); > else O.move_to(opacities); > } > break; > case 12 : > if (mode==2) { > CImg<uintT>::vector(P[0],P[1],P[2],P[3]).move_to(primitives); > C.get_vector_at(P[4],P[5]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[4],P[5])).move_to(opacities); > else O.move_to(opacities); > } else if (mode==1) { > CImg<uintT>::vector(P[0],P[1],P[4],P[5],P[6],P[7]). > move_to(primitives); > C.move_to(colors); opacities.insert(O); > CImg<uintT>::vector(P[1],P[2],P[6],P[7],P[8],P[9]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); opacities.insert(O); > CImg<uintT>::vector(P[2],P[3],P[8],P[9],P[10],P[11]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); opacities.insert(O); > CImg<uintT>::vector(P[3],P[0],P[10],P[11],P[4],P[5]). > move_to(primitives); > colors.insert(colors.back(),~0U,true); O.move_to(opacities); > } else { > CImg<uintT>::vector(P[0]).move_to(primitives); > C.get_vector_at(P[4],P[5]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[4],P[5])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[1]).move_to(primitives); > C.get_vector_at(P[6],P[7]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[6],P[7])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[2]).move_to(primitives); > C.get_vector_at(P[8],P[9]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[8],P[9])).move_to(opacities); > else opacities.insert(O); > CImg<uintT>::vector(P[3]).move_to(primitives); > C.get_vector_at(P[10],P[11]).move_to(colors); > if (O.size()!=1) CImg<floatT>::vector(O(P[10],P[11])).move_to(opacities); > else O.move_to(opacities); > } > break; > default : > P.move_to(primitives); > C.move_to(colors); > O.move_to(opacities); > } > } > if (psiz) { > primitives.remove(0,psiz-1); > colors.remove(0,psiz-1); > opacities.remove(0,psiz-1); > } > object3dtoCImg3d(primitives,colors,opacities,false); > return *this; >} > >CImg<T> get_convert_primitives_CImg3d(const unsigned int mode) const { > return (+*this).convert_primitives_CImg3d(mode); >} > > > >template<typename t> >CImg<T>& inpaint(const CImg<t>& mask, const unsigned int method=1) { > if (!is_sameXYZ(mask)) > throw CImgArgumentException("CImg<%s>::inpaint(): Invalid mask (%u,%u,%u,%u,%p) for " > "instance image (%u,%u,%u,%u,%p).", > pixel_type(),mask._width,mask._height,mask._depth, > mask._spectrum,mask._data, > _width,_height,_depth,_spectrum,_data); > CImg<t> _mask(mask,false), _nmask(mask,false); > bool is_pixel = false; > > do { > is_pixel = false; > > if (depth()==1) { > t M[9]; t& Mpp = M[0]; t& Mcp = M[1]; t& Mnp = M[2]; t& Mpc = M[3]; t& Mcc = M[4]; t& Mnc = M[5]; t& Mpn = M[6]; t& Mcn = M[7]; t& Mnn = M[8]; Mpp = Mcp = Mnp = Mpc = Mcc = Mnc = Mpn = Mcn = Mnn = 0; > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > > switch (method) { > case 0: > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) if (Mcc && (!Mcp || !Mpc || !Mnc || !Mcn)) { > is_pixel = true; > const unsigned int wcp = Mcp?0:1, wpc = Mpc?0:1, wnc = Mnc?0:1, wcn = Mcn?0:1, > sumw = wcp + wpc + wnc + wcn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > (*this)(x,y,k) = (T)((wcp*Icp + wpc*Ipc + wnc*Inc + wcn*Icn)/(float)sumw); > } > _nmask(x,y) = 0; > } > break; > > case 1: > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) if (Mcc && (!Mpp || !Mcp || !Mnp || !Mpc || !Mnc || !Mpn || !Mcn || !Mnn)) { > is_pixel = true; > const unsigned int > wpp = Mpp?0:1, wcp = Mcp?0:2, wnp = Mnp?0:1, > wpc = Mpc?0:2, wnc = Mnc?0:2, > wpn = Mpn?0:1, wcn = Mcn?0:2, wnn = Mnn?0:1, > sumw = wpp + wcp + wnp + wpc + wnc + wpn + wcn + wnn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > (*this)(x,y,k) = (T)((wpp*Ipp + wcp*Icp + wnp*Inp + wpc*Ipc + > wnc*Inc + wpn*Ipn + wcn*Icn + wnn*Inn)/(float)sumw); > } > _nmask(x,y) = 0; > } > break; > > case 2: { > T J[4]; > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) > if (Mcc && (!Mcp || !Mpc || !Mnc || !Mcn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > unsigned int ind = 0; > if (!Mcp) J[ind++] = Icp; > if (!Mpc) J[ind++] = Ipc; > if (!Mnc) J[ind++] = Inc; > if (!Mcn) J[ind++] = Icn; > (*this)(x,y,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y) = 0; > } > } break; > > default: > T J[8]; > for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,0,0)), (M[3] = M[4] = (t)(_mask)(0,y,0,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,0,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,0,0)), (M[5] = (t)(_mask)(_n1x,y,0,0)), (M[8] = (t)(_mask)(_n1x,_n1y,0,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], _p1x = x++, ++_n1x) > if (Mcc && (!Mpp || !Mcp || !Mnp || !Mpc || !Mnc || !Mpn || !Mcn || !Mnn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,0,k), I[1] = (T)(*this)(x,_p1y,0,k), I[2] = (T)(*this)(_n1x,_p1y,0,k), I[3] = (T)(*this)(_p1x,y,0,k), I[4] = (T)(*this)(x,y,0,k), I[5] = (T)(*this)(_n1x,y,0,k), I[6] = (T)(*this)(_p1x,_n1y,0,k), I[7] = (T)(*this)(x,_n1y,0,k), I[8] = (T)(*this)(_n1x,_n1y,0,k); > unsigned int ind = 0; > if (!Mpp) J[ind++] = Ipp; if (!Mcp) J[ind++] = Icp; if (!Mnp) J[ind++] = Inp; > if (!Mpc) J[ind++] = Ipc; if (!Mnc) J[ind++] = Inc; > if (!Mpn) J[ind++] = Ipn; if (!Mcn) J[ind++] = Icn; if (!Mnn) J[ind++] = Inn; > (*this)(x,y,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y) = 0; > } > } > > } else { > t M[27]; t& Mppp = M[0]; t& Mcpp = M[1]; t& Mnpp = M[2]; t& Mpcp = M[3]; t& Mccp = M[4]; t& Mncp = M[5]; t& Mpnp = M[6]; t& Mcnp = M[7]; t& Mnnp = M[8]; t& Mppc = M[9]; t& Mcpc = M[10]; t& Mnpc = M[11]; t& Mpcc = M[12]; t& Mccc = M[13]; t& Mncc = M[14]; t& Mpnc = M[15]; t& Mcnc = M[16]; t& Mnnc = M[17]; t& Mppn = M[18]; t& Mcpn = M[19]; t& Mnpn = M[20]; t& Mpcn = M[21]; t& Mccn = M[22]; t& Mncn = M[23]; t& Mpnn = M[24]; t& Mcnn = M[25]; t& Mnnn = M[26]; Mppp = Mcpp = Mnpp = Mpcp = Mccp = Mncp = Mpnp = Mcnp = Mnnp = Mppc = Mcpc = Mnpc = Mpcc = Mccc = Mncc = Mpnc = Mcnc = Mnnc = Mppn = Mcpn = Mnpn = Mpcn = Mccn = Mncn = Mpnn = Mcnn = Mnnn = 0; > T I[27]; T& Ippp = I[0]; T& Icpp = I[1]; T& Inpp = I[2]; T& Ipcp = I[3]; T& Iccp = I[4]; T& Incp = I[5]; T& Ipnp = I[6]; T& Icnp = I[7]; T& Innp = I[8]; T& Ippc = I[9]; T& Icpc = I[10]; T& Inpc = I[11]; T& Ipcc = I[12]; T& Iccc = I[13]; T& Incc = I[14]; T& Ipnc = I[15]; T& Icnc = I[16]; T& Innc = I[17]; T& Ippn = I[18]; T& Icpn = I[19]; T& Inpn = I[20]; T& Ipcn = I[21]; T& Iccn = I[22]; T& Incn = I[23]; T& Ipnn = I[24]; T& Icnn = I[25]; T& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > > switch (method) { > case 0: > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mccp || !Mcpc || !Mpcc || !Mncc || !Mcnc || !Mccn)) { > is_pixel = true; > const unsigned int > wccp = Mccp?0:1, wcpc = Mcpc?0:1, wpcc = Mpcc?0:1, > wncc = Mncc?0:1, wcnc = Mcnc?0:1, wccn = Mccn?0:1, > sumw = wcpc + wpcc + wccp + wncc + wcnc + wccn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > (*this)(x,y,z,k) = (T)((wccp*Iccp + wcpc*Icpc + wpcc*Ipcc + > wncc*Incc + wcnc*Icnc + wccn*Iccn)/(float)sumw); > } > _nmask(x,y,z) = 0; > } > break; > > case 1: > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mppp || !Mcpp || !Mnpp || !Mpcp || !Mccp || !Mncp || !Mpnp || !Mcnp || > !Mnnp || !Mppc || !Mcpc || !Mnpc || !Mpcc || !Mncc || !Mpnc || !Mcnc || > !Mnnc || !Mppn || !Mcpn || !Mnpn || !Mpcn || !Mccn || !Mncn || !Mpnn || > !Mcnn || !Mnnn)) { > is_pixel = true; > const unsigned int > wppp = Mppp?0:1, wcpp = Mcpp?0:2, wnpp = Mnpp?0:1, > wpcp = Mpcp?0:2, wccp = Mccp?0:4, wncp = Mncp?0:2, > wpnp = Mpnp?0:1, wcnp = Mcnp?0:2, wnnp = Mnnp?0:1, > wppc = Mppc?0:2, wcpc = Mcpc?0:4, wnpc = Mnpc?0:2, > wpcc = Mpcc?0:4, wncc = Mncc?0:4, > wpnc = Mpnc?0:2, wcnc = Mcnc?0:4, wnnc = Mnnc?0:2, > wppn = Mppn?0:1, wcpn = Mcpn?0:2, wnpn = Mnpn?0:1, > wpcn = Mpcn?0:2, wccn = Mccn?0:4, wncn = Mncn?0:2, > wpnn = Mpnn?0:1, wcnn = Mcnn?0:2, wnnn = Mnnn?0:1, > sumw = wppp + wcpp + wnpp + wpcp + wccp + wncp + wpnp + wcnp + wnnp + > wppc + wcpc + wnpc + wpcc + wncc + wpnc + wcnc + wnnc + > wppn + wcpn + wnpn + wpcn + wccn + wncn + wpnn + wcnn + wnnn; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > (*this)(x,y,z,k) = (T)((wppp*Ippp + wcpp*Icpp + wnpp*Inpp + > wpcp*Ipcp + wccp*Iccp + wncp*Incp + > wpnp*Ipnp + wcnp*Icnp + wnnp*Innp + > wppc*Ippc + wcpc*Icpc + wnpc*Inpc + > wpcc*Ipcc + wncc*Incc + > wpnc*Ipnc + wcnc*Icnc + wnnc*Innc + > wppn*Ippn + wcpn*Icpn + wnpn*Inpn + > wpcn*Ipcn + wccn*Iccn + wncn*Incn + > wpnn*Ipnn + wcnn*Icnn + wnnn*Innn)/(float)sumw); > } > _nmask(x,y,z) = 0; > } > break; > > case 2: { > T J[6]; > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mccp || !Mcpc || !Mpcc || !Mncc || !Mcnc || !Mccn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > unsigned int ind = 0; > if (!Mccp) J[ind++] = Iccp; if (!Mcpc) J[ind++] = Icpc; if (!Mpcc) J[ind++] = Ipcc; > if (!Mncc) J[ind++] = Incc; if (!Mcnc) J[ind++] = Icnc; if (!Mccn) J[ind++] = Iccn; > (*this)(x,y,z,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y,z) = 0; > } > } break; > > default: { > T J[26]; > for (int z = 0, _p1z = 0, _n1z = 1>=((_mask)._depth)?(int)((_mask)._depth)-1:1; _n1z<(int)((_mask)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_mask)._height)?(int)((_mask)._height)-1:1; _n1y<(int)((_mask)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (M[0] = M[1] = (t)(_mask)(_p1x,_p1y,_p1z,0)), (M[3] = M[4] = (t)(_mask)(0,y,_p1z,0)), (M[6] = M[7] = (t)(_mask)(0,_n1y,_p1z,0)), (M[9] = M[10] = (t)(_mask)(0,_p1y,z,0)), (M[12] = M[13] = (t)(_mask)(0,y,z,0)), (M[15] = M[16] = (t)(_mask)(0,_n1y,z,0)), (M[18] = M[19] = (t)(_mask)(0,_p1y,_n1z,0)), (M[21] = M[22] = (t)(_mask)(0,y,_n1z,0)), (M[24] = M[25] = (t)(_mask)(0,_n1y,_n1z,0)), 1>=(_mask)._width?(_mask).width()-1:1); (_n1x<(_mask).width() && ( (M[2] = (t)(_mask)(_n1x,_p1y,_p1z,0)), (M[5] = (t)(_mask)(_n1x,y,_p1z,0)), (M[8] = (t)(_mask)(_n1x,_n1y,_p1z,0)), (M[11] = (t)(_mask)(_n1x,_p1y,z,0)), (M[14] = (t)(_mask)(_n1x,y,z,0)), (M[17] = (t)(_mask)(_n1x,_n1y,z,0)), (M[20] = (t)(_mask)(_n1x,_p1y,_n1z,0)), (M[23] = (t)(_mask)(_n1x,y,_n1z,0)), (M[26] = (t)(_mask)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; M[0] = M[1], M[1] = M[2], M[3] = M[4], M[4] = M[5], M[6] = M[7], M[7] = M[8], M[9] = M[10], M[10] = M[11], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[18] = M[19], M[19] = M[20], M[21] = M[22], M[22] = M[23], M[24] = M[25], M[25] = M[26], _p1x = x++, ++_n1x) > if (Mccc && (!Mppp || !Mcpp || !Mnpp || !Mpcp || !Mccp || !Mncp || !Mpnp || !Mcnp || > !Mnnp || !Mppc || !Mcpc || !Mnpc || !Mpcc || !Mncc || !Mpnc || !Mcnc || > !Mnnc || !Mppn || !Mcpn || !Mnpn || !Mpcn || !Mccn || !Mncn || !Mpnn || > !Mcnn || !Mnnn)) { > is_pixel = true; > for (int k = 0; k<(int)((*this)._spectrum); ++k) { > I[0] = (T)(*this)(_p1x,_p1y,_p1z,k), I[1] = (T)(*this)(x,_p1y,_p1z,k), I[2] = (T)(*this)(_n1x,_p1y,_p1z,k), I[3] = (T)(*this)(_p1x,y,_p1z,k), I[4] = (T)(*this)(x,y,_p1z,k), I[5] = (T)(*this)(_n1x,y,_p1z,k), I[6] = (T)(*this)(_p1x,_n1y,_p1z,k), I[7] = (T)(*this)(x,_n1y,_p1z,k), I[8] = (T)(*this)(_n1x,_n1y,_p1z,k), I[9] = (T)(*this)(_p1x,_p1y,z,k), I[10] = (T)(*this)(x,_p1y,z,k), I[11] = (T)(*this)(_n1x,_p1y,z,k), I[12] = (T)(*this)(_p1x,y,z,k), I[13] = (T)(*this)(x,y,z,k), I[14] = (T)(*this)(_n1x,y,z,k), I[15] = (T)(*this)(_p1x,_n1y,z,k), I[16] = (T)(*this)(x,_n1y,z,k), I[17] = (T)(*this)(_n1x,_n1y,z,k), I[18] = (T)(*this)(_p1x,_p1y,_n1z,k), I[19] = (T)(*this)(x,_p1y,_n1z,k), I[20] = (T)(*this)(_n1x,_p1y,_n1z,k), I[21] = (T)(*this)(_p1x,y,_n1z,k), I[22] = (T)(*this)(x,y,_n1z,k), I[23] = (T)(*this)(_n1x,y,_n1z,k), I[24] = (T)(*this)(_p1x,_n1y,_n1z,k), I[25] = (T)(*this)(x,_n1y,_n1z,k), I[26] = (T)(*this)(_n1x,_n1y,_n1z,k); > unsigned int ind = 0; > if (!Mppp) J[ind++] = Ippp; if (!Mcpp) J[ind++] = Icpp; if (!Mnpp) J[ind++] = Inpp; > if (!Mpcp) J[ind++] = Ipcp; if (!Mccp) J[ind++] = Iccp; if (!Mncp) J[ind++] = Incp; > if (!Mpnp) J[ind++] = Ipnp; if (!Mcnp) J[ind++] = Icnp; if (!Mnnp) J[ind++] = Innp; > if (!Mppc) J[ind++] = Ippc; if (!Mcpc) J[ind++] = Icpc; if (!Mnpc) J[ind++] = Inpc; > if (!Mpcc) J[ind++] = Ipcc; if (!Mncc) J[ind++] = Incc; > if (!Mpnc) J[ind++] = Ipnc; if (!Mcnc) J[ind++] = Icnc; if (!Mnnc) J[ind++] = Innc; > if (!Mppn) J[ind++] = Ippn; if (!Mcpn) J[ind++] = Icpn; if (!Mnpn) J[ind++] = Inpn; > if (!Mpcn) J[ind++] = Ipcn; if (!Mccn) J[ind++] = Iccn; if (!Mncn) J[ind++] = Incn; > if (!Mpnn) J[ind++] = Ipnn; if (!Mcnn) J[ind++] = Icnn; if (!Mnnn) J[ind++] = Innn; > (*this)(x,y,z,k) = CImg<T>(J,ind,1,1,1,true).kth_smallest(ind>>1); > } > _nmask(x,y,z) = 0; > } > } break; > } > } > > _mask = _nmask; > } while (is_pixel); > return *this; >} > >template<typename t> >CImg<T> get_inpaint(const CImg<t>& mask, const unsigned int method=1) const { > return (+*this).inpaint(mask,method); >} > >template<typename t> >CImg<T>& inpaint_patch(const CImg<t>& mask, const unsigned int patch_size=11, > const unsigned int lookup_size=22, const float lookup_factor=1, > const int lookup_increment=1, > const unsigned int blend_size=0, const float blend_threshold=0.5f, > const float blend_decay=0.02, const unsigned int blend_scales=10, > const bool is_blend_outer=false) { > if (depth()>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch(): Instance image is volumetric (should be 2d).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXYZ(mask)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Sizes of instance image and specified mask " > "(%u,%u,%u,%u) do not match.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > mask._width,mask._height,mask._depth,mask._spectrum); > if (!patch_size) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified patch size is 0, must be strictly " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!lookup_size) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified lookup size is 0, must be strictly " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (lookup_factor<0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified lookup factor %g is negative, must be " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > lookup_factor); > if (!lookup_increment) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified lookup increment is 0, must be " > "strictly positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (blend_decay<0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "inpaint_patch() : Specified blend decay %g is negative, must be " > "positive.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > blend_decay); > > > unsigned int xm0 = _width, ym0 = _height, xm1 = 0, ym1 = 0; > bool is_mask_found = false; > for (int y = 0; y<(int)((mask)._height); ++y) for (int x = 0; x<(int)((mask)._width); ++x) if (mask(x,y)) { > is_mask_found = true; > if (x<(int)xm0) xm0 = (unsigned int)x; > if (x>(int)xm1) xm1 = (unsigned int)x; > if (y<(int)ym0) ym0 = (unsigned int)y; > if (y>(int)ym1) ym1 = (unsigned int)y; > } > if (!is_mask_found) return *this; > xm0 = xm0>2?xm0-2:0; > ym0 = ym0>2?ym0-2:0; > xm1 = xm1<_width-3?xm1+2:_width-1; > ym1 = ym1<_height-3?ym1+2:_height-1; > int ox = xm0, oy = ym0; > unsigned int dx = xm1 - xm0 + 1U, dy = ym1 - ym0 + 1U; > > > CImg<ucharT> nmask(dx,dy); > unsigned char *ptrM = nmask.data(); > for (int y = (int)(ym0)<0?0:(int)(ym0), _maxy = (int)(ym1)<(int)((mask)._height)?(int)(ym1):(int)((mask)._height)-1; y<=_maxy; ++y) for (int x = (int)(xm0)<0?0:(int)(xm0), _maxx = (int)(xm1)<(int)((mask)._width)?(int)(xm1):(int)((mask)._width)-1; x<=_maxx; ++x) *(ptrM++) = mask(x,y)?0:1; > xm0 = ym0 = 0; xm1 = dx - 1; ym1 = dy - 1; > > > const int p2 = (int)patch_size/2, p1 = (int)patch_size - p2 - 1; > const unsigned int patch_size2 = patch_size*patch_size; > unsigned int _lookup_size = lookup_size, nb_lookups = 0, nb_fails = 0, nb_saved_patches = 0; > bool is_strict_search = true; > const float one = 1; > > CImg<floatT> confidences(nmask), priorities(dx,dy,1,2,-1), pC; > CImg<unsigned int> saved_patches(4,256), is_visited(width(),height(),1,1,0); > CImg<ucharT> pM, pN; > CImg<T> pP, pbest; > CImg<floatT> weights(patch_size,patch_size,1,1,0); > weights.draw_gaussian((float)p1,(float)p1,patch_size/15.0f,&one)/=patch_size2; > unsigned int target_index = 0; > > while (true) { > > > unsigned int nb_border_points = 0; > float target_confidence = -1, target_priority = -1; > int target_x = -1, target_y = -1; > unsigned char M[25]; unsigned char& Mbb = M[0]; unsigned char& Mpb = M[1]; unsigned char& Mcb = M[2]; unsigned char& Mnb = M[3]; unsigned char& Mab = M[4]; unsigned char& Mbp = M[5]; unsigned char& Mpp = M[6]; unsigned char& Mcp = M[7]; unsigned char& Mnp = M[8]; unsigned char& Map = M[9]; unsigned char& Mbc = M[10]; unsigned char& Mpc = M[11]; unsigned char& Mcc = M[12]; unsigned char& Mnc = M[13]; unsigned char& Mac = M[14]; unsigned char& Mbn = M[15]; unsigned char& Mpn = M[16]; unsigned char& Mcn = M[17]; unsigned char& Mnn = M[18]; unsigned char& Man = M[19]; unsigned char& Mba = M[20]; unsigned char& Mpa = M[21]; unsigned char& Mca = M[22]; unsigned char& Mna = M[23]; unsigned char& Maa = M[24]; Mbb = Mpb = Mcb = Mnb = Mab = Mbp = Mpp = Mcp = Mnp = Map = Mbc = Mpc = Mcc = Mnc = Mac = Mbn = Mpn = Mcn = Mnn = Man = Mba = Mpa = Mca = Mna = Maa = 0; > > for (int y = (int)(ym0)<0?0:(int)(ym0), _p2y = y-2<0?0:y-2, _p1y = y-1<0?0:y-1, _n1y = y+1>=(int)((nmask)._height)?(int)((nmask)._height)-1:y+1, _n2y = y+2>=(int)((nmask)._height)?(int)((nmask)._height)-1:y+2; y<=(int)(ym1) && (_n2y<(int)((nmask)._height) || _n1y==--_n2y || y==(_n2y = --_n1y)); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = (int)(xm0)<0?0:(int)(xm0), _p2x = x-2<0?0:x-2, _p1x = x-1<0?0:x-1, _n1x = x+1>=(int)(nmask)._width?(nmask).width()-1:x+1, _n2x = (int)( (M[0] = (unsigned char)(nmask)(_p2x,_p2y,0,0)), (M[5] = (unsigned char)(nmask)(_p2x,_p1y,0,0)), (M[10] = (unsigned char)(nmask)(_p2x,y,0,0)), (M[15] = (unsigned char)(nmask)(_p2x,_n1y,0,0)), (M[20] = (unsigned char)(nmask)(_p2x,_n2y,0,0)), (M[1] = (unsigned char)(nmask)(_p1x,_p2y,0,0)), (M[6] = (unsigned char)(nmask)(_p1x,_p1y,0,0)), (M[11] = (unsigned char)(nmask)(_p1x,y,0,0)), (M[16] = (unsigned char)(nmask)(_p1x,_n1y,0,0)), (M[21] = (unsigned char)(nmask)(_p1x,_n2y,0,0)), (M[2] = (unsigned char)(nmask)(x,_p2y,0,0)), (M[7] = (unsigned char)(nmask)(x,_p1y,0,0)), (M[12] = (unsigned char)(nmask)(x,y,0,0)), (M[17] = (unsigned char)(nmask)(x,_n1y,0,0)), (M[22] = (unsigned char)(nmask)(x,_n2y,0,0)), (M[3] = (unsigned char)(nmask)(_n1x,_p2y,0,0)), (M[8] = (unsigned char)(nmask)(_n1x,_p1y,0,0)), (M[13] = (unsigned char)(nmask)(_n1x,y,0,0)), (M[18] = (unsigned char)(nmask)(_n1x,_n1y,0,0)), (M[23] = (unsigned char)(nmask)(_n1x,_n2y,0,0)), x+2>=(int)(nmask)._width?(nmask).width()-1:x+2); x<=(int)(xm1) && ((_n2x<(nmask).width() && ( (M[4] = (unsigned char)(nmask)(_n2x,_p2y,0,0)), (M[9] = (unsigned char)(nmask)(_n2x,_p1y,0,0)), (M[14] = (unsigned char)(nmask)(_n2x,y,0,0)), (M[19] = (unsigned char)(nmask)(_n2x,_n1y,0,0)), (M[24] = (unsigned char)(nmask)(_n2x,_n2y,0,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x)); M[0] = M[1], M[1] = M[2], M[2] = M[3], M[3] = M[4], M[5] = M[6], M[6] = M[7], M[7] = M[8], M[8] = M[9], M[10] = M[11], M[11] = M[12], M[12] = M[13], M[13] = M[14], M[15] = M[16], M[16] = M[17], M[17] = M[18], M[18] = M[19], M[20] = M[21], M[21] = M[22], M[22] = M[23], M[23] = M[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) > if (!Mcc && (Mcp || Mcn || Mpc || Mnc)) { > > float confidence_term = -1, data_term = -1; > if (priorities(x,y)>=0) { > confidence_term = priorities(x,y,0); > data_term = priorities(x,y,1); > } else { > > > const float > > Npc = (4.0f*Mpc + 2.0f*Mbc + 2.0f*Mcc + 2.0f*Mpp + 2.0f*Mpn + Mbp + Mbn + Mcp + Mcn)/16, > Nnc = (4.0f*Mnc + 2.0f*Mac + 2.0f*Mcc + 2.0f*Mnp + 2.0f*Mnn + Map + Man + Mcp + Mcn)/16, > Ncp = (4.0f*Mcp + 2.0f*Mcb + 2.0f*Mcc + 2.0f*Mpp + 2.0f*Mnp + Mpb + Mnb + Mpc + Mnc)/16, > Ncn = (4.0f*Mcn + 2.0f*Mca + 2.0f*Mcc + 2.0f*Mpn + 2.0f*Mnn + Mpa + Mna + Mpc + Mnc)/16, > _nx = 0.5f*(Nnc - Npc), > _ny = 0.5f*(Ncn - Ncp), > nn = std::sqrt(1e-8f + _nx*_nx + _ny*_ny), > nx = _nx/nn, > ny = _ny/nn; > > > nmask._inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,1).move_to(pM); > confidences._inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,1).move_to(pC); > confidence_term = 0; > const unsigned char *ptrM = pM.data(); > for (float *ptrC = (pC)._data, *_maxptrC = (pC)._data + (pC).size(); ptrC<_maxptrC; ++ptrC) confidence_term+=*ptrC**(ptrM++); > confidence_term/=patch_size2; > priorities(x,y,0) = confidence_term; > > > _inpaint_patch_crop(ox+x-p1,oy+y-p1,ox+x+p2,oy+y+p2,2).move_to(pP); > float mean_ix2 = 0, mean_ixiy = 0, mean_iy2 = 0; > > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > unsigned char _M[9]; unsigned char& _Mpp = _M[0]; unsigned char& _Mcp = _M[1]; unsigned char& _Mnp = _M[2]; unsigned char& _Mpc = _M[3]; unsigned char& _Mcc = _M[4]; unsigned char& _Mnc = _M[5]; unsigned char& _Mpn = _M[6]; unsigned char& _Mcn = _M[7]; unsigned char& _Mnn = _M[8]; _Mpp = _Mcp = _Mnp = _Mpc = _Mcc = _Mnc = _Mpn = _Mcn = _Mnn = 0; > for (int c = 0; c<(int)((pP)._spectrum); ++c) for (int q = 0, _p1q = 0, _n1q = 1>=((pP)._height)?(int)((pP)._height)-1:1; _n1q<(int)((pP)._height) || q==--_n1q; _p1q = q++, ++_n1q) for (int p = 0, _p1p = 0, _n1p = (int)( (I[0] = I[1] = (T)(pP)(_p1p,_p1q,0,c)), (I[3] = I[4] = (T)(pP)(0,q,0,c)), (I[6] = I[7] = (T)(pP)(0,_n1q,0,c)), 1>=(pP)._width?(pP).width()-1:1); (_n1p<(pP).width() && ( (I[2] = (T)(pP)(_n1p,_p1q,0,c)), (I[5] = (T)(pP)(_n1p,q,0,c)), (I[8] = (T)(pP)(_n1p,_n1q,0,c)),1)) || p==--_n1p; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1p = p++, ++_n1p) { > > _M[0] = (unsigned char)(pM)(_p1p,_p1q,0,0), _M[1] = (unsigned char)(pM)(p,_p1q,0,0), _M[2] = (unsigned char)(pM)(_n1p,_p1q,0,0), _M[3] = (unsigned char)(pM)(_p1p,q,0,0), _M[4] = (unsigned char)(pM)(p,q,0,0), _M[5] = (unsigned char)(pM)(_n1p,q,0,0), _M[6] = (unsigned char)(pM)(_p1p,_n1q,0,0), _M[7] = (unsigned char)(pM)(p,_n1q,0,0), _M[8] = (unsigned char)(pM)(_n1p,_n1q,0,0); > const float > ixf = (float)(_Mnc*_Mcc*(Inc-Icc)), > iyf = (float)(_Mcn*_Mcc*(Icn-Icc)), > ixb = (float)(_Mcc*_Mpc*(Icc-Ipc)), > iyb = (float)(_Mcc*_Mcp*(Icc-Icp)), > ix = cimg::abs(ixf)>cimg::abs(ixb)?ixf:ixb, > iy = cimg::abs(iyf)>cimg::abs(iyb)?iyf:iyb, > w = weights(p,q); > mean_ix2 += w*ix*ix; > mean_ixiy += w*ix*iy; > mean_iy2 += w*iy*iy; > } > const float > ux = mean_ix2*(-ny) + mean_ixiy*nx, > uy = mean_ixiy*(-ny) + mean_iy2*nx; > data_term = std::sqrt(ux*ux + uy*uy); > priorities(x,y,1) = data_term; > } > const float priority = confidence_term*data_term; > if (priority>target_priority) { > target_priority = priority; target_confidence = confidence_term; > target_x = ox + x; target_y = oy + y; > } > ++nb_border_points; > } > if (!nb_border_points) break; > > > CImg<unsigned int> lookup_candidates(2,256); > unsigned int nb_lookup_candidates = 0, *ptr_lookup_candidates = lookup_candidates.data(); > const unsigned int *ptr_saved_patches = saved_patches.data(); > const int > x0 = target_x - (int)patch_size, y0 = target_y - (int)patch_size, > x1 = target_x + (int)patch_size, y1 = target_y + (int)patch_size; > for (unsigned int k = 0; k<nb_saved_patches; ++k) { > const unsigned int > src_x = *(ptr_saved_patches++), src_y = *(ptr_saved_patches++), > dest_x = *(ptr_saved_patches++), dest_y = *(ptr_saved_patches++); > if ((int)dest_x>=x0 && (int)dest_y>=y0 && (int)dest_x<=x1 && (int)dest_y<=y1) { > const int off_x = target_x - dest_x, off_y = target_y - dest_y; > *(ptr_lookup_candidates++) = src_x + off_x; > *(ptr_lookup_candidates++) = src_y + off_y; > if (++nb_lookup_candidates>=lookup_candidates._height) > lookup_candidates.resize(2,-200,1,1,0); > } > } > > *(ptr_lookup_candidates++) = target_x; > *(ptr_lookup_candidates++) = target_y; > ++nb_lookup_candidates; > > > unsigned int final_lookup_size = _lookup_size; > if (nb_lookup_candidates>1) { > const unsigned int > _final_lookup_size = (unsigned int)cimg::round(_lookup_size*lookup_factor/ > std::sqrt((float)nb_lookup_candidates),1,1); > final_lookup_size = _final_lookup_size + 1 - (_final_lookup_size%2); > } > const int l2 = (int)final_lookup_size/2, l1 = (int)final_lookup_size - l2 - 1; ># 1557 "./gmic.cpp" > _inpaint_patch_crop(target_x-p1,target_y-p1,target_x+p2,target_y+p2,0).move_to(pP); > nmask._inpaint_patch_crop(target_x-ox-p1,target_y-oy-p1,target_x-ox+p2,target_y-oy+p2,0). > move_to(pM); > ++target_index; > const unsigned int > _lookup_increment = (unsigned int)(lookup_increment>0?lookup_increment: > nb_lookup_candidates>1?1:-lookup_increment); > float best_ssd = cimg::type<float>::max(); > int best_x = -1, best_y = -1; > for (unsigned int C = 0; C<nb_lookup_candidates; ++C) { > const int > xl = (int)lookup_candidates(0,C), > yl = (int)lookup_candidates(1,C), > x0 = cimg::max(p1,xl-l1), y0 = cimg::max(p1,yl-l1), > x1 = cimg::min(width()-1-p2,xl+l2), y1 = cimg::min(height()-1-p2,yl+l2); > for (int y = y0; y<=y1; y+=_lookup_increment) > for (int x = x0; x<=x1; x+=_lookup_increment) if (is_visited(x,y)!=target_index) { > if (is_strict_search) mask._inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,1).move_to(pN); > else nmask._inpaint_patch_crop(x-ox-p1,y-oy-p1,x-ox+p2,y-oy+p2,0).move_to(pN); > if ((is_strict_search && pN.sum()==0) || (!is_strict_search && pN.sum()==patch_size2)) { > _inpaint_patch_crop(x-p1,y-p1,x+p2,y+p2,0).move_to(pC); > float ssd = 0; > const T *_pP = pP._data; > const float *_pC = pC._data; > for (unsigned char *_pM = (pM)._data, *_max_pM = (pM)._data + (pM).size(); _pM<_max_pM; ++_pM) { if (*_pM) { > for (int c = 0; c<(int)((pC)._spectrum); ++c) { > ssd+=cimg::sqr((Tfloat)*_pC-(Tfloat)*_pP); _pC+=patch_size2; _pP+=patch_size2; > } > if (ssd>=best_ssd) break; > _pC-=pC._spectrum*patch_size2; > _pP-=pC._spectrum*patch_size2; > } > ++_pC; ++_pP; > } > if (ssd<best_ssd) { best_ssd = ssd; best_x = x; best_y = y; } > } > is_visited(x,y) = target_index; > } > } > > if (best_x<0) { > priorities(target_x-ox,target_y-oy,0)/=10; > if (++nb_fails>=4) { > nb_fails = 0; > _lookup_size+=_lookup_size/2; > if (++nb_lookups>=3) { > if (is_strict_search) { > is_strict_search = false; > _lookup_size = lookup_size; > nb_lookups = 0; > } > else return *this; > } > } > } else { > _lookup_size = lookup_size; > nb_lookups = nb_fails = 0; > _inpaint_patch_crop(best_x-p1,best_y-p1,best_x+p2,best_y+p2,0).move_to(pbest); > nmask._inpaint_patch_crop(target_x-ox-p1,target_y-oy-p1,target_x-ox+p2,target_y-oy+p2,1). > move_to(pM); > for (unsigned char *ptr = (pM)._data, *_maxptr = (pM)._data + (pM).size(); ptr<_maxptr; ++ptr) *ptr=1-*ptr; > draw_image(target_x-p1,target_y-p1,pbest,pM,1,1); > confidences.draw_image(target_x-ox-p1,target_y-oy-p1,pC.fill(target_confidence),pM,1,1); > nmask.draw_rectangle(target_x-ox-p1,target_y-oy-p1,0,0,target_x-ox+p2,target_y-oy+p2,0,0,1); > priorities.draw_rectangle(target_x-ox-(int)patch_size, > target_y-oy-(int)patch_size,0,0, > target_x-ox+3*p2/2, > target_y-oy+3*p2/2,0,0,-1); > > unsigned int *ptr_saved_patches = saved_patches.data(0,nb_saved_patches); > *(ptr_saved_patches++) = best_x; > *(ptr_saved_patches++) = best_y; > *(ptr_saved_patches++) = target_x; > *ptr_saved_patches = target_y; > if (++nb_saved_patches>=saved_patches._height) saved_patches.resize(4,-200,1,1,0); > } > } > nmask.assign(); > priorities.assign(); > confidences.assign(); > is_visited.assign(); > > > if (blend_size && blend_scales) { > const float _blend_threshold = cimg::max(0.0f,cimg::min(1.0f,blend_threshold)); > saved_patches._height = nb_saved_patches; > > > if (is_blend_outer) { > const int > b2 = (int)blend_size/2, b1 = (int)blend_size - b2 - 1, > xb0 = cimg::max(0,ox-b1), > yb0 = cimg::max(0,oy-b1), > xb1 = cimg::min(_width-1,xb0 + dx + b1 + b2), > yb1 = cimg::min(_height-1,yb0 + dy + b1 + b2); > ox = xb0; oy = yb0; dx = xb1 - xb0 + 1U, dy = yb1 - yb0 + 1U; > } > > > CImg<unsigned int> offsets(dx,dy,1,2); > unsigned int *ptr = saved_patches.end(); > for (int i = 0; i<(int)((saved_patches)._height); ++i) { > const unsigned int yd = *(--ptr), xd = *(--ptr), ys = *(--ptr), xs = *(--ptr); > for (int l=-p1; l<=p2; ++l) > for (int k=-p1; k<=p2; ++k) { > const int xdk = xd+k, ydl = yd+l; > if (xdk>=0 && xdk<=width()-1 && ydl>=0 && ydl<=height()-1 && mask(xd+k,yd+l)) { > offsets(xd-ox+k,yd-oy+l,0) = xs+k; > offsets(xd-ox+k,yd-oy+l,1) = ys+l; > } > } > } > unsigned int *ptrx = offsets.data(0,0,0,0), *ptry = offsets.data(0,0,0,1); > for (int y = 0; y<(int)((offsets)._height); ++y) for (int x = 0; x<(int)((offsets)._width); ++x) { > if (!mask(x+ox,y+oy)) { *ptrx = x+ox; *ptry = y+oy; } > ++ptrx; ++ptry; > } > > > CImg<floatT> blend_map(dx,dy,1,1,0); > float I[9]; float& Ipp = I[0]; float& Icp = I[1]; float& Inp = I[2]; float& Ipc = I[3]; float& Icc = I[4]; float& Inc = I[5]; float& Ipn = I[6]; float& Icn = I[7]; float& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((offsets)._height)?(int)((offsets)._height)-1:1; _n1y<(int)((offsets)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((offsets)._width)?(int)((offsets)._width)-1:1; _n1x<(int)((offsets)._width) || x==--_n1x; _p1x = x++, ++_n1x) if (mask(x+ox,y+oy)) { > const float > iox = cimg::max((float)offsets(_n1x,y,0)-offsets(x,y,0), > (float)offsets(x,y,0)-offsets(_p1x,y,0)), > ioy = cimg::max((float)offsets(x,_n1y,1)-offsets(x,y,1), > (float)offsets(x,y,1)-offsets(x,_p1y,1)), > ion = std::sqrt(iox*iox+ioy*ioy); > float iin = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > I[0] = (float)(*this)(_p1x,_p1y,0,c), I[1] = (float)(*this)(x,_p1y,0,c), I[2] = (float)(*this)(_n1x,_p1y,0,c), I[3] = (float)(*this)(_p1x,y,0,c), I[4] = (float)(*this)(x,y,0,c), I[5] = (float)(*this)(_n1x,y,0,c), I[6] = (float)(*this)(_p1x,_n1y,0,c), I[7] = (float)(*this)(x,_n1y,0,c), I[8] = (float)(*this)(_n1x,_n1y,0,c); > const float > iix = (float)cimg::max(Inc-Icc,Icc-Ipc), > iiy = (float)cimg::max(Icn-Icc,Icc-Icp); > iin+=std::log(1+iix*iix+iiy*iiy); > } > iin/=_spectrum; > blend_map(x,y) = ion*iin; > } > blend_map.threshold(blend_map.max()*_blend_threshold).distance(1); > for (int y = 0; y<(int)((blend_map)._height); ++y) for (int x = 0; x<(int)((blend_map)._width); ++x) blend_map(x,y) = 1/(1+blend_decay*blend_map(x,y)); > blend_map.quantize(blend_scales+1,false); > float bm, bM = blend_map.max_min(bm); > if (bm==bM) blend_map.fill((float)blend_scales); > > > CImg<T> result = _inpaint_patch_crop(ox,oy,ox+dx-1,oy+dy-1,0); > for (unsigned int blend_iter = 1; blend_iter<=blend_scales; ++blend_iter) { > const unsigned int > _blend_width = blend_iter*blend_size/blend_scales, > blend_width = _blend_width?_blend_width+1-(_blend_width%2):0; > if (!blend_width) continue; > const int b2 = (int)blend_width/2, b1 = (int)blend_width - b2 - 1; > CImg<floatT> > blended = _inpaint_patch_crop(ox,oy,ox+dx-1,oy+dy-1,0), > cumul(dx,dy,1,1); > weights.assign(blend_width,blend_width,1,1,0). > draw_gaussian((float)b1,(float)b1,blend_width/4.0f,&one); > for (int y = 0; y<(int)((cumul)._height); ++y) for (int x = 0; x<(int)((cumul)._width); ++x) cumul(x,y) = mask(x+ox,y+oy)?0.0f:1.0f; > blended.mul(cumul); > > for (int l = 0; l<(int)((saved_patches)._height); ++l) { > const unsigned int *ptr = saved_patches.data(0,l); > const int > xs = (int)*(ptr++), > ys = (int)*(ptr++), > xd = (int)*(ptr++), > yd = (int)*(ptr++); > if (xs-b1<0 || ys-b1<0 || xs+b2>=width() || ys+b2>=height()) { > const int > xs0 = cimg::max(0,xs - b1), > ys0 = cimg::max(0,ys - b1), > xs1 = cimg::min(width()-1,xs + b2), > ys1 = cimg::min(height()-1,ys + b2); > _inpaint_patch_crop(xs0,ys0,xs1,ys1,0).move_to(pP); > weights._inpaint_patch_crop(xs0-xs+b1,ys0-ys+b1,xs1-xs+b1,ys1-ys+b1,0).move_to(pC); > blended.draw_image(xd+xs0-xs-ox,yd+ys0-ys-oy,pP,pC,-1); > cumul.draw_image(xd+xs0-xs-ox,yd+ys0-ys-oy,pC,-1); > } else { > _inpaint_patch_crop(xs-b1,ys-b1,xs+b2,ys+b2,0).move_to(pP); > blended.draw_image(xd-b1-ox,yd-b1-oy,pP,weights,-1); > cumul.draw_image(xd-b1-ox,yd-b1-oy,weights,-1); > } > } > > if (is_blend_outer) { > for (int y = 0; y<(int)((blended)._height); ++y) for (int x = 0; x<(int)((blended)._width); ++x) if (blend_map(x,y)==blend_iter) { > const float cum = cumul(x,y); > if (cum>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) result(x,y,c) = (T)(blended(x,y,c)/cum); > } > } else { for (int y = 0; y<(int)((blended)._height); ++y) for (int x = 0; x<(int)((blended)._width); ++x) if (mask(x+ox,y+oy) && blend_map(x,y)==blend_iter) { > const float cum = cumul(x,y); > if (cum>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) result(x,y,c) = (T)(blended(x,y,c)/cum); > } > } > } > if (is_blend_outer) draw_image(ox,oy,result); > else for (int y = 0; y<(int)((result)._height); ++y) for (int x = 0; x<(int)((result)._width); ++x) if (mask(x+ox,y+oy)) > for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x+ox,y+oy,c) = (T)result(x,y,c); > } > return *this; >} > > > >CImg<T> _inpaint_patch_crop(const int x0, const int y0, const int x1, const int y1, > const unsigned int boundary=0) const { > const int > nx0 = x0<x1?x0:x1, nx1 = x0^x1^nx0, > ny0 = y0<y1?y0:y1, ny1 = y0^y1^ny0; > CImg<T> res(1U + nx1 - nx0,1U + ny1 - ny0,1,_spectrum); > if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height()) { > if (boundary>=2) for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) res(x,y,z,c) = _atXY(nx0+x,ny0+y,z,c); > else res.fill((T)boundary).draw_image(-nx0,-ny0,*this); > } else res.draw_image(-nx0,-ny0,*this); > return res; >} > >template<typename t> >CImg<T> get_inpaint_patch(const CImg<t>& mask, const unsigned int patch_size=11, > const unsigned int lookup_size=22, const float lookup_factor=1, > const int lookup_increment=1, > const unsigned int blend_size=0, const float blend_threshold=0.5, > const float blend_decay=0.02f, const unsigned int blend_scales=10, > const bool is_blend_outer=false) const { > return (+*this).inpaint_patch(mask,patch_size,lookup_size,lookup_factor,lookup_increment, > blend_size,blend_threshold,blend_decay,blend_scales,is_blend_outer); >} > > > >CImg<T>& mark() { > unsigned int siz = _width; > if (siz<2) assign(siz=2,1,1,1,0); else if (_data[siz-2]) resize(++siz,1,1,1,0); > T &last = _data[siz-1]; > if (last<cimg::type<T>::max()) ++last; > return *this; >} > >CImg<T> get_mark() const { > return (+*this).mark(); >} > >CImg<T>& copymark() { > return get_copymark().move_to(*this); >} > >CImg<T> get_copymark() const { > if (is_empty()) return CImg<T>::string("~"); > CImg<T> res = get_resize(_width+1,1,1,1,0); > const char *const ext = cimg::split_filename(_data); > if (*ext) { > const int l = (int)(ext - _data - 1); > if (l>0) { > if (_data[l-1]=='~') return +*this; > std::memcpy(res._data,_data,l); > } > res[l] = '~'; res[l+1] = '.'; > std::memcpy(res._data+l+2,ext,_data+_width-ext); > } else { > const unsigned int l = (int)(ext - _data); > if (_data[l-1]=='~' || (l>1 && _data[l-1]==']' && _data[l-2]=='~')) return +*this; > std::memcpy(res._data,_data,l); > res[l] = '~'; > if (ext>_data && *(ext-1)==']') cimg::swap(res[l],res[l-1]); > std::memcpy(res._data+l+1,ext,_data+_width-ext); > } > return res; >} > >const CImg<T>& gmic_print(const char *const title, const bool is_debug, > const bool is_valid) const { > CImg<doubleT> st; > if (is_valid && !is_empty()) st = get_stats(); > const unsigned long siz = size(), msiz = _is_shared?0:siz*sizeof(T), siz1 = siz-1, > mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2), > wh = _width*_height, whd = _width*_height*_depth, > w1 = _width-1, wh1 = _width*_height-1, whd1 = _width*_height*_depth-1; > > std::fprintf(cimg::output(),"%s%s%s%s:\n %ssize%s = (%u,%u,%u,%u) [%lu %s].\n %sdata%s = %s", > cimg::t_magenta,cimg::t_bold,title,cimg::t_normal, > cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, > mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), > mdisp==0?"b":(mdisp==1?"Kio":"Mio"), > cimg::t_bold,cimg::t_normal, > is_debug?"":"("); > if (is_debug) std::fprintf(cimg::output(),"%p = (",_data); > > if (is_valid) { > if (is_empty()) std::fprintf(cimg::output(),") [%s].\n", > pixel_type()); > else { > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { > std::fprintf(cimg::output(),cimg::type<T>::format(),cimg::type<T>::format(_data[off])); > if (off!=siz1) std::fprintf(cimg::output(),"%s", > off%whd==whd1?"^": > off%wh==wh1?"\\": > off%_width==w1?";":","); > if (off==11 && siz>24) { off = siz1-12; std::fprintf(cimg::output(),"... "); } > } > std::fprintf(cimg::output(),") [%s%s].\n %smin%s = %g, %smax%s = %g, %smean%s = %g, " > "%sstd%s = %g, %scoords_min%s = (%u,%u,%u,%u), " > "%scoords_max%s = (%u,%u,%u,%u).\n", > _is_shared?"shared ":"",pixel_type(), > cimg::t_bold,cimg::t_normal,st[0], > cimg::t_bold,cimg::t_normal,st[1], > cimg::t_bold,cimg::t_normal,st[2], > cimg::t_bold,cimg::t_normal,std::sqrt(st[3]), > cimg::t_bold,cimg::t_normal,(int)st[4],(int)st[5],(int)st[6],(int)st[7], > cimg::t_bold,cimg::t_normal,(int)st[8],(int)st[9],(int)st[10],(int)st[11]); > } > } else std::fprintf(cimg::output(),"%s%sinvalid pointer%s) [shared %s].\n", > cimg::t_red,cimg::t_bold,cimg::t_normal, > pixel_type()); > std::fflush(cimg::output()); > return *this; >} ># 9224 "./CImg.h" 2 ># 9266 "./CImg.h" > ~CImg() { > if (!_is_shared) delete[] _data; > } ># 9286 "./CImg.h" > CImg():_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {} ># 9308 "./CImg.h" > explicit CImg(const unsigned int size_x, const unsigned int size_y=1, const unsigned int size_z=1, const unsigned int size_c=1): > _is_shared(false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } ># 9337 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, const T value): > _is_shared(false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > fill(value); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } ># 9380 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const int value0, const int value1, ...):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { ># 9396 "./CImg.h" > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); } }; > } ># 9422 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const double value0, const double value1, ...):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); } }; > } ># 9456 "./CImg.h" > CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const char *const values, const bool repeat_values):_is_shared(false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > fill(values,repeat_values); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } ># 9499 "./CImg.h" > template<typename t> > CImg(const t *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false):_is_shared(false) { > if (is_shared) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Invalid construction request of a (%u,%u,%u,%u) shared instance from a (%s*) buffer " > "(pixel types are different).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > size_x,size_y,size_z,size_c,CImg<t>::pixel_type()); > } > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (values && siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > > } > const t *ptrs = values; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } > > > CImg(const T *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (values && siz) { > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = is_shared; > if (_is_shared) _data = const_cast<T*>(values); > else { > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > std::memcpy(_data,values,siz*sizeof(T)); } > } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } > } ># 9563 "./CImg.h" > explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(filename); > } ># 9582 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img):_is_shared(false) { > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > } > const t *ptrs = img._data; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } > > > CImg(const CImg<T>& img) { > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; _is_shared = img._is_shared; > if (_is_shared) _data = const_cast<T*>(img._data); > else { > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > > } > std::memcpy(_data,img._data,siz*sizeof(T)); > } > } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } > } ># 9635 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img, const bool is_shared):_is_shared(false) { > if (is_shared) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Invalid construction request of a shared instance from a " > "CImg<%s> image (%u,%u,%u,%u,%p) (pixel types are different).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > CImg<t>::pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data); > } > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > } > const t *ptrs = img._data; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > } else { _width = _height = _depth = _spectrum = 0; _data = 0; } > } > > > CImg(const CImg<T>& img, const bool is_shared) { > const unsigned long siz = img.size(); > if (img._data && siz) { > _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; _is_shared = is_shared; > if (_is_shared) _data = const_cast<T*>(img._data); > else { > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), > img._width,img._height,img._depth,img._spectrum); > } > std::memcpy(_data,img._data,siz*sizeof(T)); > } > } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } > } ># 9698 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img, const char *const dimensions):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(img,dimensions); > } ># 9713 "./CImg.h" > template<typename t> > CImg(const CImg<t>& img, const char *const dimensions, const T value): > _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > assign(img,dimensions).fill(value); > } ># 9728 "./CImg.h" > explicit CImg(const CImgDisplay &disp):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { > disp.snapshot(*this); > } > > > > > > CImg<T>& assign() { > if (!_is_shared) delete[] _data; > _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y=1, const unsigned int size_z=1, const unsigned int size_c=1) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!siz) return assign(); > const unsigned long curr_siz = size(); > if (siz!=curr_siz) { > if (_is_shared) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid assignement request of shared instance from specified image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > size_x,size_y,size_z,size_c); > else { > delete[] _data; > try { _data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > } > } > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, const T value) { > return assign(size_x,size_y,size_z,size_c).fill(value); > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const int value0, const int value1, ...) { > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); } }; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const double value0, const double value1, ...) { > assign(size_x,size_y,size_z,size_c); > { unsigned long _siz = (unsigned long)(unsigned long)size_x*size_y*size_z*size_c; if (_siz--) { va_list ap; __builtin_va_start(ap,value1); T *ptrd = (*this)._data; *(ptrd++) = (T)value0; if (_siz--) { *(ptrd++) = (T)value1; for (; _siz; --_siz) *(ptrd++) = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); } }; > return *this; > } > > > > > > CImg<T>& assign(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, > const char *const values, const bool repeat_values) { > return assign(size_x,size_y,size_z,size_c).fill(values,repeat_values); > } > > > > > > template<typename t> > CImg<T>& assign(const t *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!values || !siz) return assign(); > assign(size_x,size_y,size_z,size_c); > const t *ptrs = values; for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)*(ptrs++); > return *this; > } > > > CImg<T>& assign(const T *const values, const unsigned int size_x, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!values || !siz) return assign(); > const unsigned long curr_siz = size(); > if (values==_data && siz==curr_siz) return assign(size_x,size_y,size_z,size_c); > if (_is_shared || values+siz<_data || values>=_data+size()) { > assign(size_x,size_y,size_z,size_c); > if (_is_shared) std::memmove(_data,values,siz*sizeof(T)); > else std::memcpy(_data,values,siz*sizeof(T)); > } else { > T *new_data = 0; > try { new_data = new T[siz]; } catch (...) { > _width = _height = _depth = _spectrum = 0; _data = 0; > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c),size_x,size_y,size_z,size_c); > } > std::memcpy(new_data,values,siz*sizeof(T)); > delete[] _data; _data = new_data; _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; > } > return *this; > } > > > template<typename t> > CImg<T>& assign(const t *const values, const unsigned int size_x, const unsigned int size_y, > const unsigned int size_z, const unsigned int size_c, const bool is_shared) { > if (is_shared) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid assignment request of shared instance from (%s*) buffer" > "(pixel types are different).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > CImg<t>::pixel_type()); > return assign(values,size_x,size_y,size_z,size_c); > } > > > CImg<T>& assign(const T *const values, const unsigned int size_x, const unsigned int size_y, > const unsigned int size_z, const unsigned int size_c, const bool is_shared) { > const unsigned long siz = (unsigned long)size_x*size_y*size_z*size_c; > if (!values || !siz) { > if (is_shared) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid assignment request of shared instance from (null) or empty buffer.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > else return assign(); > } > if (!is_shared) { if (_is_shared) assign(); assign(values,size_x,size_y,size_z,size_c); } > else { > if (!_is_shared) { > if (values+siz<_data || values>=_data+size()) assign(); > else cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Shared image instance has overlapping memory.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > } > _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = true; > _data = const_cast<T*>(values); > } > return *this; > } > > > > > > CImg<T>& assign(const char *const filename) { > return load(filename); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img) { > return assign(img._data,img._width,img._height,img._depth,img._spectrum); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img, const bool is_shared) { > return assign(img._data,img._width,img._height,img._depth,img._spectrum,is_shared); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img, const char *const dimensions) { > if (!dimensions || !*dimensions) return assign(img._width,img._height,img._depth,img._spectrum); > unsigned int siz[4] = { 0,1,1,1 }, k = 0; > for (const char *s = dimensions; *s && k<4; ++k) { > char item[256] = { 0 }; > if (std::sscanf(s,"%255[^0-9%xyzvwhdcXYZVWHDC]",item)>0) s+=std::strlen(item); > if (*s) { > unsigned int val = 0; char sep = 0; > if (std::sscanf(s,"%u%c",&val,&sep)>0) { > if (sep=='%') siz[k] = val*(k==0?_width:k==1?_height:k==2?_depth:_spectrum)/100; > else siz[k] = val; > while (*s>='0' && *s<='9') ++s; if (sep=='%') ++s; > } else switch (cimg::uncase(*s)) { > case 'x' : case 'w' : siz[k] = img._width; ++s; break; > case 'y' : case 'h' : siz[k] = img._height; ++s; break; > case 'z' : case 'd' : siz[k] = img._depth; ++s; break; > case 'c' : case 's' : siz[k] = img._spectrum; ++s; break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "assign(): Invalid character '%c' detected in specified dimension string '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > *s,dimensions); > } > } > } > return assign(siz[0],siz[1],siz[2],siz[3]); > } > > > > > > template<typename t> > CImg<T>& assign(const CImg<t>& img, const char *const dimensions, const T value) { > return assign(img,dimensions).fill(value); > } > > > > > > CImg<T>& assign(const CImgDisplay &disp) { > disp.snapshot(*this); > return *this; > } > > > > > > > > CImg<T>& clear() { > return assign(); > } ># 9991 "./CImg.h" > template<typename t> > CImg<t>& move_to(CImg<t>& img) { > img.assign(*this); > assign(); > return img; > } > > > CImg<T>& move_to(CImg<T>& img) { > if (_is_shared || img._is_shared) img.assign(*this); > else swap(img); > assign(); > return img; > } ># 10024 "./CImg.h" > template<typename t> > CImgList<t>& move_to(CImgList<t>& list, const unsigned int pos=~0U) { > const unsigned int npos = pos>list._width?list._width:pos; > move_to(list.insert(1,npos)[npos]); > return list; > } ># 10044 "./CImg.h" > CImg<T>& swap(CImg<T>& img) { > cimg::swap(_width,img._width); > cimg::swap(_height,img._height); > cimg::swap(_depth,img._depth); > cimg::swap(_spectrum,img._spectrum); > cimg::swap(_data,img._data); > cimg::swap(_is_shared,img._is_shared); > return img; > } ># 10062 "./CImg.h" > static CImg<T>& empty() { > static CImg<T> _empty; > return _empty.assign(); > } ># 10148 "./CImg.h" > T& operator()(const unsigned int x) { > return _data[x]; > } > > const T& operator()(const unsigned int x) const { > return _data[x]; > } > > T& operator()(const unsigned int x, const unsigned int y) { > return _data[x + y*_width]; > } > > const T& operator()(const unsigned int x, const unsigned int y) const { > return _data[x + y*_width]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) const { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) const { > return _data[x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, > const unsigned long wh) { > return _data[x + y*_width + z*wh]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, > const unsigned long wh) const { > return _data[x + y*_width + z*wh]; > } > > T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, > const unsigned long wh, const unsigned long whd) { > return _data[x + y*_width + z*wh + c*whd]; > } > > const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, > const unsigned long wh, const unsigned long whd) const { > return _data[x + y*_width + z*wh + c*whd]; > } ># 10223 "./CImg.h" > operator T*() { > return _data; > } > > > operator const T*() const { > return _data; > } ># 10246 "./CImg.h" > CImg<T>& operator=(const T value) { > return fill(value); > } ># 10270 "./CImg.h" > CImg<T>& operator=(const char *const expression) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > load(expression); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator=(const CImg<t>& img) { > return assign(img); > } > > > CImg<T>& operator=(const CImg<T>& img) { > return assign(img); > } > > > > > > CImg<T>& operator=(const CImgDisplay& disp) { > disp.snapshot(*this); > return *this; > } ># 10331 "./CImg.h" > template<typename t> > CImg<T>& operator+=(const t value) { > if (is_empty()) return *this; > > ># 10335 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10335 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd + value); > return *this; > } ># 10349 "./CImg.h" > CImg<T>& operator+=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator+="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 10362 "./CImg.h" >#pragma omp parallel ># 10362 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 10365 "./CImg.h" >#pragma omp for collapse(3) ># 10365 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this+=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } ># 10403 "./CImg.h" > template<typename t> > CImg<T>& operator+=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this+=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd + *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd + *(ptrs++)); > } > return *this; > } > > > > > > > > CImg<T>& operator++() { > if (is_empty()) return *this; > > ># 10425 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10425 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) ++*ptrd; > return *this; > } ># 10438 "./CImg.h" > CImg<T> operator++(int) { > const CImg<T> copy(*this,false); > ++*this; > return copy; > } ># 10453 "./CImg.h" > CImg<T> operator+() const { > return CImg<T>(*this,false); > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator+(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)+=value; > } > > > > > > > CImg<Tfloat> operator+(const char *const expression) const { > return CImg<Tfloat>(*this,false)+=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator+(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)+=img; > } > > > > > > template<typename t> > CImg<T>& operator-=(const t value) { > if (is_empty()) return *this; > > ># 10494 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10494 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd - value); > return *this; > } > > > > > > CImg<T>& operator-=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator-="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 10517 "./CImg.h" >#pragma omp parallel ># 10517 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 10520 "./CImg.h" >#pragma omp for collapse(3) ># 10520 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd - lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this-=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator-=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this-=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd - *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd - *(ptrs++)); > } > return *this; > } > > > > > > CImg<T>& operator--() { > if (is_empty()) return *this; > > ># 10562 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 10562 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = *ptrd-(T)1; > return *this; > } > > > > > > CImg<T> operator--(int) { > const CImg<T> copy(*this,false); > --*this; > return copy; > } ># 10592 "./CImg.h" > CImg<T> operator-() const { > return CImg<T>(_width,_height,_depth,_spectrum,(T)0)-=*this; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator-(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)-=value; > } > > > > > > > CImg<Tfloat> operator-(const char *const expression) const { > return CImg<Tfloat>(*this,false)-=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator-(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)-=img; > } > > > > > > template<typename t> > CImg<T>& operator*=(const t value) { > if (is_empty()) return *this; > > ># 10633 "./CImg.h" >#pragma omp parallel for if (size()>=262144) ># 10633 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd * value); > return *this; > } > > > > > > CImg<T>& operator*=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator*="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 10656 "./CImg.h" >#pragma omp parallel ># 10656 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 10659 "./CImg.h" >#pragma omp for collapse(3) ># 10659 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd * lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > mul(CImg<T>(_width,_height,_depth,_spectrum,expression,true)); > } > cimg::exception_mode() = omode; > return *this; > } ># 10692 "./CImg.h" > template<typename t> > CImg<T>& operator*=(const CImg<t>& img) { > return ((*this)*img).move_to(*this); > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator*(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)*=value; > } > > > > > > > CImg<Tfloat> operator*(const char *const expression) const { > return CImg<Tfloat>(*this,false)*=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator*(const CImg<t>& img) const { > if (_width!=img._height || _depth!=1 || _spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "operator*(): Invalid multiplication of instance by specified matrix (%u,%u,%u,%u,%p)", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data); > CImg<typename cimg::superset<T,t>::type> res(img._width,_height); > > ># 10730 "./CImg.h" >#pragma omp parallel for if (size()>1024 && img.size()>1024) collapse(2) ># 10730 "./CImg.h" > > for (int j = 0; j<(int)((res)._height); ++j) for (int i = 0; i<(int)((res)._width); ++i) { typename cimg::superset2<T,t,double>::type value = 0; for (int k = 0; k<(int)((*this)._width); ++k) value+=(*this)(k,j)*img(i,k); res(i,j) = (typename cimg::superset<T,t>::type)value; } > > > > > return res; > } > > > > > > template<typename t> > CImg<T>& operator/=(const t value) { > if (is_empty()) return *this; > > ># 10747 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 10747 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(*ptrd / value); > return *this; > } > > > > > > CImg<T>& operator/=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator/="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 10770 "./CImg.h" >#pragma omp parallel ># 10770 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 10773 "./CImg.h" >#pragma omp for collapse(3) ># 10773 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd / lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > div(CImg<T>(_width,_height,_depth,_spectrum,expression,true)); > } > cimg::exception_mode() = omode; > return *this; > } ># 10800 "./CImg.h" > template<typename t> > CImg<T>& operator/=(const CImg<t>& img) { > return (*this*img.get_invert()).move_to(*this); > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator/(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)/=value; > } > > > > > > > CImg<Tfloat> operator/(const char *const expression) const { > return CImg<Tfloat>(*this,false)/=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator/(const CImg<t>& img) const { > return (*this)*img.get_invert(); > } > > > > > > template<typename t> > CImg<T>& operator%=(const t value) { > if (is_empty()) return *this; > > ># 10842 "./CImg.h" >#pragma omp parallel for if (size()>=16384) ># 10842 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::mod(*ptrd,(T)value); > return *this; > } > > > > > > CImg<T>& operator%=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator%="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 10865 "./CImg.h" >#pragma omp parallel ># 10865 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 10868 "./CImg.h" >#pragma omp for collapse(3) ># 10868 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::mod(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this%=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator%=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this%=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = cimg::mod(*ptrd,(T)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = cimg::mod(*ptrd,(T)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator%(const t value) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)%=value; > } > > > > > > > CImg<Tfloat> operator%(const char *const expression) const { > return CImg<Tfloat>(*this,false)%=expression; > } > > > > > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> operator%(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false)%=img; > } > > > > > > template<typename t> > CImg<T>& operator&=(const t value) { > if (is_empty()) return *this; > > ># 10940 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 10940 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)value); > return *this; > } > > > > > > CImg<T>& operator&=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator&="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 10963 "./CImg.h" >#pragma omp parallel ># 10963 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 10966 "./CImg.h" >#pragma omp for collapse(3) ># 10966 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this&=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator&=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this&=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator&(const t value) const { > return (+*this)&=value; > } > > > > > > > CImg<T> operator&(const char *const expression) const { > return (+*this)&=expression; > } > > > > > > > template<typename t> > CImg<T> operator&(const CImg<t>& img) const { > return (+*this)&=img; > } > > > > > > template<typename t> > CImg<T>& operator|=(const t value) { > if (is_empty()) return *this; > > ># 11038 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 11038 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)value); > return *this; > } > > > > > > CImg<T>& operator|=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator|="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 11061 "./CImg.h" >#pragma omp parallel ># 11061 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 11064 "./CImg.h" >#pragma omp for collapse(3) ># 11064 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this|=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator|=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this|=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator|(const t value) const { > return (+*this)|=value; > } > > > > > > > CImg<T> operator|(const char *const expression) const { > return (+*this)|=expression; > } > > > > > > > template<typename t> > CImg<T> operator|(const CImg<t>& img) const { > return (+*this)|=img; > } > > > > > > > > template<typename t> > CImg<T>& operator^=(const t value) { > if (is_empty()) return *this; > > ># 11138 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 11138 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)value); > return *this; > } > > > > > > > > CImg<T>& operator^=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator^="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 11163 "./CImg.h" >#pragma omp parallel ># 11163 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 11166 "./CImg.h" >#pragma omp for collapse(3) ># 11166 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this^=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > > > template<typename t> > CImg<T>& operator^=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this^=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator^(const t value) const { > return (+*this)^=value; > } > > > > > > > CImg<T> operator^(const char *const expression) const { > return (+*this)^=expression; > } > > > > > > > template<typename t> > CImg<T> operator^(const CImg<t>& img) const { > return (+*this)^=img; > } > > > > > > template<typename t> > CImg<T>& operator<<=(const t value) { > if (is_empty()) return *this; > > ># 11240 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 11240 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(((long)*ptrd) << (int)value); > return *this; > } > > > > > > CImg<T>& operator<<=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 11263 "./CImg.h" >#pragma omp parallel ># 11263 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 11266 "./CImg.h" >#pragma omp for collapse(3) ># 11266 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd << (int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this<<=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator<<=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this^=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((long)*ptrd << (int)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((long)*ptrd << (int)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator<<(const t value) const { > return (+*this)<<=value; > } > > > > > > > CImg<T> operator<<(const char *const expression) const { > return (+*this)<<=expression; > } > > > > > > > template<typename t> > CImg<T> operator<<(const CImg<t>& img) const { > return (+*this)<<=img; > } > > > > > > template<typename t> > CImg<T>& operator>>=(const t value) { > if (is_empty()) return *this; > > ># 11338 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 11338 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)(((long)*ptrd) >> (int)value); > return *this; > } > > > > > > CImg<T>& operator>>=(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 11361 "./CImg.h" >#pragma omp parallel ># 11361 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 11364 "./CImg.h" >#pragma omp for collapse(3) ># 11364 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd >> (int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > cimg::exception_mode() = omode; > *this>>=CImg<T>(_width,_height,_depth,_spectrum,expression,true); > } > cimg::exception_mode() = omode; > return *this; > } > > > > > > template<typename t> > CImg<T>& operator>>=(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return *this^=+img; > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)((long)*ptrd >> (int)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)((long)*ptrd >> (int)*(ptrs++)); > } > return *this; > } > > > > > > > template<typename t> > CImg<T> operator>>(const t value) const { > return (+*this)>>=value; > } > > > > > > > CImg<T> operator>>(const char *const expression) const { > return (+*this)>>=expression; > } > > > > > > > template<typename t> > CImg<T> operator>>(const CImg<t>& img) const { > return (+*this)>>=img; > } > > > > > > CImg<T> operator~() const { > CImg<T> res(_width,_height,_depth,_spectrum); > const T *ptrs = _data; > for (T *ptrd = (res)._data, *_maxptrd = (res)._data + (res).size(); ptrd<_maxptrd; ++ptrd) { const unsigned long value = (unsigned long)*(ptrs++); *ptrd = (T)~value; } > return res; > } > > > > > > > template<typename t> > bool operator==(const t value) const { > if (is_empty()) return false; > typedef typename cimg::superset<T,t>::type Tt; > bool is_equal = true; > for (T *ptrd = _data + size(); is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)value)) {} > return is_equal; > } > > > > > > > bool operator==(const char *const expression) const { > if (is_empty()) return !*expression; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > bool is_equal = true; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); > const T *ptrs = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { if (!is_equal) break; is_equal = ((double)*(ptrs--)==mp(x,y,z,c)); } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp(x,y,z,c)); } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp(x,y,z,c)); } > } catch (CImgException&) { > cimg::exception_mode() = omode; > is_equal = (*this==CImg<T>(_width,_height,_depth,_spectrum,expression,true)); > } > cimg::exception_mode() = omode; > return is_equal; > } ># 11494 "./CImg.h" > template<typename t> > bool operator==(const CImg<t>& img) const { > typedef typename cimg::superset<T,t>::type Tt; > const unsigned long siz = size(); > bool is_equal = true; > if (siz!=img.size()) return false; > t *ptrs = img._data + siz; > for (T *ptrd = _data + siz; is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)*(--ptrs))) {} > return is_equal; > } > > > > > > > template<typename t> > bool operator!=(const t value) const { > return !((*this)==value); > } > > > > > > > bool operator!=(const char *const expression) const { > return !((*this)==expression); > } ># 11531 "./CImg.h" > template<typename t> > bool operator!=(const CImg<t>& img) const { > return !((*this)==img); > } ># 11565 "./CImg.h" > template<typename t> > CImgList<typename cimg::superset<T,t>::type> operator,(const CImg<t>& img) const { > return CImgList<typename cimg::superset<T,t>::type>(*this,img); > } ># 11580 "./CImg.h" > template<typename t> > CImgList<typename cimg::superset<T,t>::type> operator,(const CImgList<t>& list) const { > return CImgList<typename cimg::superset<T,t>::type>(list,false).insert(*this,0); > } ># 11600 "./CImg.h" > CImgList<T> operator<(const char axis) const { > return get_split(axis); > } ># 11619 "./CImg.h" > static const char* pixel_type() { > return cimg::type<T>::string(); > } ># 11634 "./CImg.h" > int width() const { > return (int)_width; > } ># 11648 "./CImg.h" > int height() const { > return (int)_height; > } ># 11664 "./CImg.h" > int depth() const { > return (int)_depth; > } ># 11682 "./CImg.h" > int spectrum() const { > return (int)_spectrum; > } ># 11701 "./CImg.h" > unsigned long size() const { > return (unsigned long)_width*_height*_depth*_spectrum; > } ># 11715 "./CImg.h" > T* data() { > return _data; > } > > > const T* data() const { > return _data; > } ># 11752 "./CImg.h" > T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { > return _data + x + y*(unsigned long)_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth; > } > > const T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { > return _data + x + y*_width + z*(unsigned long)_width*_height + c*(unsigned long)_width*_height*_depth; > } ># 11777 "./CImg.h" > long offset(const int x, const int y=0, const int z=0, const int c=0) const { > return x + y*(long)_width + z*(long)_width*_height + c*(long)_width*_height*_depth; > } > > > > > > > > iterator begin() { > return _data; > } > > > const_iterator begin() const { > return _data; > } ># 11812 "./CImg.h" > iterator end() { > return _data + size(); > } > > > const_iterator end() const { > return _data + size(); > } > > > > > > > > T& front() { > return *_data; > } > > > const T& front() const { > return *_data; > } ># 11843 "./CImg.h" > T& back() { > return *(_data + size() - 1); > } > > > const T& back() const { > return *(_data + size() - 1); > } ># 11865 "./CImg.h" > T& at(const int offset, const T out_value) { > return (offset<0 || offset>=(int)size())?(cimg::temporary(out_value)=out_value):(*this)[offset]; > } > > > T at(const int offset, const T out_value) const { > return (offset<0 || offset>=(int)size())?out_value:(*this)[offset]; > } ># 11888 "./CImg.h" > T& at(const int offset) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "at(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _at(offset); > } > > T& _at(const int offset) { > const unsigned int siz = (unsigned int)size(); > return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; > } > > > T at(const int offset) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "at(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _at(offset); > } > > T _at(const int offset) const { > const unsigned int siz = (unsigned int)size(); > return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; > } ># 11931 "./CImg.h" > T& atX(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || x>=width())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atX(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || x>=width())?out_value:(*this)(x,y,z,c); > } ># 11957 "./CImg.h" > T& atX(const int x, const int y=0, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atX(x,y,z,c); > } > > T& _atX(const int x, const int y=0, const int z=0, const int c=0) { > return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); > } > > > T atX(const int x, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atX(x,y,z,c); > } > > T _atX(const int x, const int y=0, const int z=0, const int c=0) const { > return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); > } > > > > > > T& atXY(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || y<0 || x>=width() || y>=height())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atXY(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || y<0 || x>=width() || y>=height())?out_value:(*this)(x,y,z,c); > } > > > > > > > > T& atXY(const int x, const int y, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXY(x,y,z,c); > } > > T& _atXY(const int x, const int y, const int z=0, const int c=0) { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); > } > > > T atXY(const int x, const int y, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXY(x,y,z,c); > } > > T _atXY(const int x, const int y, const int z=0, const int c=0) const { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); > } > > > > > > T& atXYZ(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())? > (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atXYZ(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())?out_value:(*this)(x,y,z,c); > } > > > > > > > > T& atXYZ(const int x, const int y, const int z, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZ(x,y,z,c); > } > > T& _atXYZ(const int x, const int y, const int z, const int c=0) { > return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z),c); > } > > > T atXYZ(const int x, const int y, const int z, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZ(x,y,z,c); > } > > T _atXYZ(const int x, const int y, const int z, const int c=0) const { > return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z),c); > } > > > > > > T& atXYZC(const int x, const int y, const int z, const int c, const T out_value) { > return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())? > (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); > } > > > T atXYZC(const int x, const int y, const int z, const int c, const T out_value) const { > return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())?out_value:(*this)(x,y,z,c); > } > > > > > > > > T& atXYZC(const int x, const int y, const int z, const int c) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZC(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZC(x,y,z,c); > } > > T& _atXYZC(const int x, const int y, const int z, const int c) { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); > } > > > T atXYZC(const int x, const int y, const int z, const int c) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "atXYZC(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _atXYZC(x,y,z,c); > } > > T _atXYZC(const int x, const int y, const int z, const int c) const { > return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), > z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); > } ># 12136 "./CImg.h" > Tfloat linear_atX(const float fx, const int y, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1; > const float > dx = fx - x; > const Tfloat > Ic = (Tfloat)atX(x,y,z,c,out_value), In = (Tfloat)atXY(nx,y,z,c,out_value); > return Ic + dx*(In-Ic); > } ># 12161 "./CImg.h" > Tfloat linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atX(fx,y,z,c); > } > > Tfloat _linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx); > const unsigned int > x = (unsigned int)nfx; > const float > dx = nfx - x; > const unsigned int > nx = dx>0?x+1:x; > const Tfloat > Ic = (Tfloat)(*this)(x,y,z,c), In = (Tfloat)(*this)(nx,y,z,c); > return Ic + dx*(In-Ic); > } > > > > > > > Tfloat linear_atXY(const float fx, const float fy, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1; > const float > dx = fx - x, > dy = fy - y; > const Tfloat > Icc = (Tfloat)atXY(x,y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), > Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value); > return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); > } ># 12209 "./CImg.h" > Tfloat linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atXY(fx,fy,z,c); > } > > Tfloat _linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy); > const unsigned int > x = (unsigned int)nfx, > y = (unsigned int)nfy; > const float > dx = nfx - x, > dy = nfy - y; > const unsigned int > nx = dx>0?x+1:x, > ny = dy>0?y+1:y; > const Tfloat > Icc = (Tfloat)(*this)(x,y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), > Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c); > return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); > } > > > > > > > Tfloat linear_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1, > z = (int)fz - (fz>=0?0:1), nz = z + 1; > const float > dx = fx - x, > dy = fy - y, > dz = fz - z; > const Tfloat > Iccc = (Tfloat)atXYZ(x,y,z,c,out_value), Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), > Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), > Iccn = (Tfloat)atXYZ(x,y,nz,c,out_value), Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), > Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value); > return Iccc + > dx*(Incc-Iccc + > dy*(Iccc+Innc-Icnc-Incc + > dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + > dz*(Iccc+Incn-Iccn-Incc)) + > dy*(Icnc-Iccc + > dz*(Iccc+Icnn-Iccn-Icnc)) + > dz*(Iccn-Iccc); > } ># 12273 "./CImg.h" > Tfloat linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atXYZ(fx,fy,fz,c); > } > > Tfloat _linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy), > nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); > const unsigned int > x = (unsigned int)nfx, > y = (unsigned int)nfy, > z = (unsigned int)nfz; > const float > dx = nfx - x, > dy = nfy - y, > dz = nfz - z; > const unsigned int > nx = dx>0?x+1:x, > ny = dy>0?y+1:y, > nz = dz>0?z+1:z; > const Tfloat > Iccc = (Tfloat)(*this)(x,y,z,c), Incc = (Tfloat)(*this)(nx,y,z,c), > Icnc = (Tfloat)(*this)(x,ny,z,c), Innc = (Tfloat)(*this)(nx,ny,z,c), > Iccn = (Tfloat)(*this)(x,y,nz,c), Incn = (Tfloat)(*this)(nx,y,nz,c), > Icnn = (Tfloat)(*this)(x,ny,nz,c), Innn = (Tfloat)(*this)(nx,ny,nz,c); > return Iccc + > dx*(Incc-Iccc + > dy*(Iccc+Innc-Icnc-Incc + > dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + > dz*(Iccc+Incn-Iccn-Incc)) + > dy*(Icnc-Iccc + > dz*(Iccc+Icnn-Iccn-Icnc)) + > dz*(Iccn-Iccc); > } > > > > > > > Tfloat linear_atXYZC(const float fx, const float fy, const float fz, const float fc, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1, > z = (int)fz - (fz>=0?0:1), nz = z + 1, > c = (int)fc - (fc>=0?0:1), nc = c + 1; > const float > dx = fx - x, > dy = fy - y, > dz = fz - z, > dc = fc - c; > const Tfloat > Icccc = (Tfloat)atXYZC(x,y,z,c,out_value), Inccc = (Tfloat)atXYZC(nx,y,z,c,out_value), > Icncc = (Tfloat)atXYZC(x,ny,z,c,out_value), Inncc = (Tfloat)atXYZC(nx,ny,z,c,out_value), > Iccnc = (Tfloat)atXYZC(x,y,nz,c,out_value), Incnc = (Tfloat)atXYZC(nx,y,nz,c,out_value), > Icnnc = (Tfloat)atXYZC(x,ny,nz,c,out_value), Innnc = (Tfloat)atXYZC(nx,ny,nz,c,out_value), > Icccn = (Tfloat)atXYZC(x,y,z,nc,out_value), Inccn = (Tfloat)atXYZC(nx,y,z,nc,out_value), > Icncn = (Tfloat)atXYZC(x,ny,z,nc,out_value), Inncn = (Tfloat)atXYZC(nx,ny,z,nc,out_value), > Iccnn = (Tfloat)atXYZC(x,y,nz,nc,out_value), Incnn = (Tfloat)atXYZC(nx,y,nz,nc,out_value), > Icnnn = (Tfloat)atXYZC(x,ny,nz,nc,out_value), Innnn = (Tfloat)atXYZC(nx,ny,nz,nc,out_value); > return Icccc + > dx*(Inccc-Icccc + > dy*(Icccc+Inncc-Icncc-Inccc + > dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + > dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc-Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + > dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + > dz*(Icccc+Incnc-Iccnc-Inccc + > dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + > dc*(Icccc+Inccn-Inccc-Icccn)) + > dy*(Icncc-Icccc + > dz*(Icccc+Icnnc-Iccnc-Icncc + > dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + > dc*(Icccc+Icncn-Icncc-Icccn)) + > dz*(Iccnc-Icccc + > dc*(Icccc+Iccnn-Iccnc-Icccn)) + > dc*(Icccn-Icccc); > } ># 12364 "./CImg.h" > Tfloat linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "linear_atXYZC(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return _linear_atXYZC(fx,fy,fz,fc); > } > > Tfloat _linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy), > nfz = fz<0?0:(fz>_depth-1?_depth-1:fz), > nfc = fc<0?0:(fc>_spectrum-1?_spectrum-1:fc); > const unsigned int > x = (unsigned int)nfx, > y = (unsigned int)nfy, > z = (unsigned int)nfz, > c = (unsigned int)nfc; > const float > dx = nfx - x, > dy = nfy - y, > dz = nfz - z, > dc = nfc - c; > const unsigned int > nx = dx>0?x+1:x, > ny = dy>0?y+1:y, > nz = dz>0?z+1:z, > nc = dc>0?c+1:c; > const Tfloat > Icccc = (Tfloat)(*this)(x,y,z,c), Inccc = (Tfloat)(*this)(nx,y,z,c), > Icncc = (Tfloat)(*this)(x,ny,z,c), Inncc = (Tfloat)(*this)(nx,ny,z,c), > Iccnc = (Tfloat)(*this)(x,y,nz,c), Incnc = (Tfloat)(*this)(nx,y,nz,c), > Icnnc = (Tfloat)(*this)(x,ny,nz,c), Innnc = (Tfloat)(*this)(nx,ny,nz,c), > Icccn = (Tfloat)(*this)(x,y,z,nc), Inccn = (Tfloat)(*this)(nx,y,z,nc), > Icncn = (Tfloat)(*this)(x,ny,z,nc), Inncn = (Tfloat)(*this)(nx,ny,z,nc), > Iccnn = (Tfloat)(*this)(x,y,nz,nc), Incnn = (Tfloat)(*this)(nx,y,nz,nc), > Icnnn = (Tfloat)(*this)(x,ny,nz,nc), Innnn = (Tfloat)(*this)(nx,ny,nz,nc); > return Icccc + > dx*(Inccc-Icccc + > dy*(Icccc+Inncc-Icncc-Inccc + > dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + > dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc-Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + > dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + > dz*(Icccc+Incnc-Iccnc-Inccc + > dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + > dc*(Icccc+Inccn-Inccc-Icccn)) + > dy*(Icncc-Icccc + > dz*(Icccc+Icnnc-Iccnc-Icncc + > dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + > dc*(Icccc+Icncn-Icncc-Icccn)) + > dz*(Iccnc-Icccc + > dc*(Icccc+Iccnn-Iccnc-Icccn)) + > dc*(Icccn-Icccc); > } ># 12438 "./CImg.h" > Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2; > const float > dx = fx - x; > const Tfloat > Ip = (Tfloat)atX(px,y,z,c,out_value), Ic = (Tfloat)atX(x,y,z,c,out_value), > In = (Tfloat)atX(nx,y,z,c,out_value), Ia = (Tfloat)atX(ax,y,z,c,out_value); > return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T out_value, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atX(fx,y,z,c,out_value); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12474 "./CImg.h" > Tfloat cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cubic_atX(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _cubic_atX(fx,y,z,c); > } > > Tfloat _cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx); > const int > x = (int)nfx; > const float > dx = nfx - x; > const int > px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2; > const Tfloat > Ip = (Tfloat)(*this)(px,y,z,c), Ic = (Tfloat)(*this)(x,y,z,c), > In = (Tfloat)(*this)(nx,y,z,c), Ia = (Tfloat)(*this)(ax,y,z,c); > return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atX(const float fx, const int y, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atX(fx,y,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > Tfloat _cubic_atX(const float fx, const int y, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = _cubic_atX(fx,y,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > > > > > > Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, > y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2; > const float dx = fx - x, dy = fy - y; > const Tfloat > Ipp = (Tfloat)atXY(px,py,z,c,out_value), Icp = (Tfloat)atXY(x,py,z,c,out_value), Inp = (Tfloat)atXY(nx,py,z,c,out_value), Iap = (Tfloat)atXY(ax,py,z,c,out_value), > Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), > Ipc = (Tfloat)atXY(px,y,z,c,out_value), Icc = (Tfloat)atXY(x, y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), Iac = (Tfloat)atXY(ax,y,z,c,out_value), > Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), > Ipn = (Tfloat)atXY(px,ny,z,c,out_value), Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value), Ian = (Tfloat)atXY(ax,ny,z,c,out_value), > In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), > Ipa = (Tfloat)atXY(px,ay,z,c,out_value), Ica = (Tfloat)atXY(x,ay,z,c,out_value), Ina = (Tfloat)atXY(nx,ay,z,c,out_value), Iaa = (Tfloat)atXY(ax,ay,z,c,out_value), > Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T out_value, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXY(fx,fy,z,c,out_value); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12552 "./CImg.h" > Tfloat cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cubic_atXY(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _cubic_atXY(fx,fy,z,c); > } > > Tfloat _cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy); > const int x = (int)nfx, y = (int)nfy; > const float dx = nfx - x, dy = nfy - y; > const int > px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, > py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2; > const Tfloat > Ipp = (Tfloat)(*this)(px,py,z,c), Icp = (Tfloat)(*this)(x,py,z,c), Inp = (Tfloat)(*this)(nx,py,z,c), Iap = (Tfloat)(*this)(ax,py,z,c), > Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), > Ipc = (Tfloat)(*this)(px,y,z,c), Icc = (Tfloat)(*this)(x, y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), Iac = (Tfloat)(*this)(ax,y,z,c), > Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), > Ipn = (Tfloat)(*this)(px,ny,z,c), Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c), Ian = (Tfloat)(*this)(ax,ny,z,c), > In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), > Ipa = (Tfloat)(*this)(px,ay,z,c), Ica = (Tfloat)(*this)(x,ay,z,c), Ina = (Tfloat)(*this)(nx,ay,z,c), Iaa = (Tfloat)(*this)(ax,ay,z,c), > Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXY(fx,fy,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > Tfloat _cubic_atXY(const float fx, const float fy, const int z, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = _cubic_atXY(fx,fy,z,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > > > > > > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value) const { > const int > x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, > y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2, > z = (int)fz - (fz>=0?0:1), pz = z - 1, nz = z + 1, az = z + 2; > const float dx = fx - x, dy = fy - y, dz = fz - z; > const Tfloat > Ippp = (Tfloat)atXYZ(px,py,pz,c,out_value), Icpp = (Tfloat)atXYZ(x,py,pz,c,out_value), > Inpp = (Tfloat)atXYZ(nx,py,pz,c,out_value), Iapp = (Tfloat)atXYZ(ax,py,pz,c,out_value), > Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), > Ipcp = (Tfloat)atXYZ(px,y,pz,c,out_value), Iccp = (Tfloat)atXYZ(x, y,pz,c,out_value), > Incp = (Tfloat)atXYZ(nx,y,pz,c,out_value), Iacp = (Tfloat)atXYZ(ax,y,pz,c,out_value), > Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), > Ipnp = (Tfloat)atXYZ(px,ny,pz,c,out_value), Icnp = (Tfloat)atXYZ(x,ny,pz,c,out_value), > Innp = (Tfloat)atXYZ(nx,ny,pz,c,out_value), Ianp = (Tfloat)atXYZ(ax,ny,pz,c,out_value), > Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), > Ipap = (Tfloat)atXYZ(px,ay,pz,c,out_value), Icap = (Tfloat)atXYZ(x,ay,pz,c,out_value), > Inap = (Tfloat)atXYZ(nx,ay,pz,c,out_value), Iaap = (Tfloat)atXYZ(ax,ay,pz,c,out_value), > Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), > Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), > Ippc = (Tfloat)atXYZ(px,py,z,c,out_value), Icpc = (Tfloat)atXYZ(x,py,z,c,out_value), > Inpc = (Tfloat)atXYZ(nx,py,z,c,out_value), Iapc = (Tfloat)atXYZ(ax,py,z,c,out_value), > Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), > Ipcc = (Tfloat)atXYZ(px,y,z,c,out_value), Iccc = (Tfloat)atXYZ(x, y,z,c,out_value), > Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), Iacc = (Tfloat)atXYZ(ax,y,z,c,out_value), > Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), > Ipnc = (Tfloat)atXYZ(px,ny,z,c,out_value), Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), > Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), Ianc = (Tfloat)atXYZ(ax,ny,z,c,out_value), > Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), > Ipac = (Tfloat)atXYZ(px,ay,z,c,out_value), Icac = (Tfloat)atXYZ(x,ay,z,c,out_value), > Inac = (Tfloat)atXYZ(nx,ay,z,c,out_value), Iaac = (Tfloat)atXYZ(ax,ay,z,c,out_value), > Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), > Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), > Ippn = (Tfloat)atXYZ(px,py,nz,c,out_value), Icpn = (Tfloat)atXYZ(x,py,nz,c,out_value), > Inpn = (Tfloat)atXYZ(nx,py,nz,c,out_value), Iapn = (Tfloat)atXYZ(ax,py,nz,c,out_value), > Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), > Ipcn = (Tfloat)atXYZ(px,y,nz,c,out_value), Iccn = (Tfloat)atXYZ(x, y,nz,c,out_value), > Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), Iacn = (Tfloat)atXYZ(ax,y,nz,c,out_value), > Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), > Ipnn = (Tfloat)atXYZ(px,ny,nz,c,out_value), Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), > Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value), Iann = (Tfloat)atXYZ(ax,ny,nz,c,out_value), > Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), > Ipan = (Tfloat)atXYZ(px,ay,nz,c,out_value), Ican = (Tfloat)atXYZ(x,ay,nz,c,out_value), > Inan = (Tfloat)atXYZ(nx,ay,nz,c,out_value), Iaan = (Tfloat)atXYZ(ax,ay,nz,c,out_value), > Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), > In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), > Ippa = (Tfloat)atXYZ(px,py,az,c,out_value), Icpa = (Tfloat)atXYZ(x,py,az,c,out_value), > Inpa = (Tfloat)atXYZ(nx,py,az,c,out_value), Iapa = (Tfloat)atXYZ(ax,py,az,c,out_value), > Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), > Ipca = (Tfloat)atXYZ(px,y,az,c,out_value), Icca = (Tfloat)atXYZ(x, y,az,c,out_value), > Inca = (Tfloat)atXYZ(nx,y,az,c,out_value), Iaca = (Tfloat)atXYZ(ax,y,az,c,out_value), > Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), > Ipna = (Tfloat)atXYZ(px,ny,az,c,out_value), Icna = (Tfloat)atXYZ(x,ny,az,c,out_value), > Inna = (Tfloat)atXYZ(nx,ny,az,c,out_value), Iana = (Tfloat)atXYZ(ax,ny,az,c,out_value), > Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), > Ipaa = (Tfloat)atXYZ(px,ay,az,c,out_value), Icaa = (Tfloat)atXYZ(x,ay,az,c,out_value), > Inaa = (Tfloat)atXYZ(nx,ay,az,c,out_value), Iaaa = (Tfloat)atXYZ(ax,ay,az,c,out_value), > Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), > Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T out_value, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXYZ(fx,fy,fz,c,out_value); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12681 "./CImg.h" > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cubic_atXYZ(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > return _cubic_atXYZ(fx,fy,fz,c); > } > > Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { > const float > nfx = fx<0?0:(fx>_width-1?_width-1:fx), > nfy = fy<0?0:(fy>_height-1?_height-1:fy), > nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); > const int x = (int)nfx, y = (int)nfy, z = (int)nfz; > const float dx = nfx - x, dy = nfy - y, dz = nfz - z; > const int > px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, > py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2, > pz = z-1<0?0:z-1, nz = dz>0?z+1:z, az = z+2>=depth()?depth()-1:z+2; > const Tfloat > Ippp = (Tfloat)(*this)(px,py,pz,c), Icpp = (Tfloat)(*this)(x,py,pz,c), > Inpp = (Tfloat)(*this)(nx,py,pz,c), Iapp = (Tfloat)(*this)(ax,py,pz,c), > Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), > Ipcp = (Tfloat)(*this)(px,y,pz,c), Iccp = (Tfloat)(*this)(x, y,pz,c), > Incp = (Tfloat)(*this)(nx,y,pz,c), Iacp = (Tfloat)(*this)(ax,y,pz,c), > Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), > Ipnp = (Tfloat)(*this)(px,ny,pz,c), Icnp = (Tfloat)(*this)(x,ny,pz,c), > Innp = (Tfloat)(*this)(nx,ny,pz,c), Ianp = (Tfloat)(*this)(ax,ny,pz,c), > Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), > Ipap = (Tfloat)(*this)(px,ay,pz,c), Icap = (Tfloat)(*this)(x,ay,pz,c), > Inap = (Tfloat)(*this)(nx,ay,pz,c), Iaap = (Tfloat)(*this)(ax,ay,pz,c), > Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), > Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), > Ippc = (Tfloat)(*this)(px,py,z,c), Icpc = (Tfloat)(*this)(x,py,z,c), > Inpc = (Tfloat)(*this)(nx,py,z,c), Iapc = (Tfloat)(*this)(ax,py,z,c), > Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), > Ipcc = (Tfloat)(*this)(px,y,z,c), Iccc = (Tfloat)(*this)(x, y,z,c), > Incc = (Tfloat)(*this)(nx,y,z,c), Iacc = (Tfloat)(*this)(ax,y,z,c), > Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), > Ipnc = (Tfloat)(*this)(px,ny,z,c), Icnc = (Tfloat)(*this)(x,ny,z,c), > Innc = (Tfloat)(*this)(nx,ny,z,c), Ianc = (Tfloat)(*this)(ax,ny,z,c), > Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), > Ipac = (Tfloat)(*this)(px,ay,z,c), Icac = (Tfloat)(*this)(x,ay,z,c), > Inac = (Tfloat)(*this)(nx,ay,z,c), Iaac = (Tfloat)(*this)(ax,ay,z,c), > Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), > Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), > Ippn = (Tfloat)(*this)(px,py,nz,c), Icpn = (Tfloat)(*this)(x,py,nz,c), > Inpn = (Tfloat)(*this)(nx,py,nz,c), Iapn = (Tfloat)(*this)(ax,py,nz,c), > Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), > Ipcn = (Tfloat)(*this)(px,y,nz,c), Iccn = (Tfloat)(*this)(x, y,nz,c), > Incn = (Tfloat)(*this)(nx,y,nz,c), Iacn = (Tfloat)(*this)(ax,y,nz,c), > Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), > Ipnn = (Tfloat)(*this)(px,ny,nz,c), Icnn = (Tfloat)(*this)(x,ny,nz,c), > Innn = (Tfloat)(*this)(nx,ny,nz,c), Iann = (Tfloat)(*this)(ax,ny,nz,c), > Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), > Ipan = (Tfloat)(*this)(px,ay,nz,c), Ican = (Tfloat)(*this)(x,ay,nz,c), > Inan = (Tfloat)(*this)(nx,ay,nz,c), Iaan = (Tfloat)(*this)(ax,ay,nz,c), > Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), > In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), > Ippa = (Tfloat)(*this)(px,py,az,c), Icpa = (Tfloat)(*this)(x,py,az,c), > Inpa = (Tfloat)(*this)(nx,py,az,c), Iapa = (Tfloat)(*this)(ax,py,az,c), > Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), > Ipca = (Tfloat)(*this)(px,y,az,c), Icca = (Tfloat)(*this)(x, y,az,c), > Inca = (Tfloat)(*this)(nx,y,az,c), Iaca = (Tfloat)(*this)(ax,y,az,c), > Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), > Ipna = (Tfloat)(*this)(px,ny,az,c), Icna = (Tfloat)(*this)(x,ny,az,c), > Inna = (Tfloat)(*this)(nx,ny,az,c), Iana = (Tfloat)(*this)(ax,ny,az,c), > Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), > Ipaa = (Tfloat)(*this)(px,ay,az,c), Icaa = (Tfloat)(*this)(x,ay,az,c), > Inaa = (Tfloat)(*this)(nx,ay,az,c), Iaaa = (Tfloat)(*this)(ax,ay,az,c), > Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), > Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); > return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); > } > > > > > > Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = cubic_atXYZ(fx,fy,fz,c); > return val<min_value?min_value:val>max_value?max_value:val; > } > > Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c, > const Tfloat min_value, const Tfloat max_value) const { > const Tfloat val = _cubic_atXYZ(fx,fy,fz,c); > return val<min_value?min_value:val>max_value?max_value:val; > } ># 12786 "./CImg.h" > CImg<T>& set_linear_atXY(const T& value, const float fx, const float fy=0, const int z=0, const int c=0, > const bool is_added=false) { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1; > const float > dx = fx - x, > dy = fy - y; > if (z>=0 && z<depth() && c>=0 && c<spectrum()) { > if (y>=0 && y<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*(1-dy), w2 = is_added?1:(1-w1); > (*this)(x,y,z,c) = (T)(w1*value + w2*(*this)(x,y,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*(1-dy), w2 = is_added?1:(1-w1); > (*this)(nx,y,z,c) = (T)(w1*value + w2*(*this)(nx,y,z,c)); > } > } > if (ny>=0 && ny<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*dy, w2 = is_added?1:(1-w1); > (*this)(x,ny,z,c) = (T)(w1*value + w2*(*this)(x,ny,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*dy, w2 = is_added?1:(1-w1); > (*this)(nx,ny,z,c) = (T)(w1*value + w2*(*this)(nx,ny,z,c)); > } > } > } > return *this; > } > > > > > > > CImg<T>& set_linear_atXYZ(const T& value, const float fx, const float fy=0, const float fz=0, const int c=0, > const bool is_added=false) { > const int > x = (int)fx - (fx>=0?0:1), nx = x + 1, > y = (int)fy - (fy>=0?0:1), ny = y + 1, > z = (int)fz - (fz>=0?0:1), nz = z + 1; > const float > dx = fx - x, > dy = fy - y, > dz = fz - z; > if (c>=0 && c<spectrum()) { > if (z>=0 && z<depth()) { > if (y>=0 && y<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*(1-dy)*(1-dz), w2 = is_added?1:(1-w1); > (*this)(x,y,z,c) = (T)(w1*value + w2*(*this)(x,y,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*(1-dy)*(1-dz), w2 = is_added?1:(1-w1); > (*this)(nx,y,z,c) = (T)(w1*value + w2*(*this)(nx,y,z,c)); > } > } > if (ny>=0 && ny<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*dy*(1-dz), w2 = is_added?1:(1-w1); > (*this)(x,ny,z,c) = (T)(w1*value + w2*(*this)(x,ny,z,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*dy*(1-dz), w2 = is_added?1:(1-w1); > (*this)(nx,ny,z,c) = (T)(w1*value + w2*(*this)(nx,ny,z,c)); > } > } > } > if (nz>=0 && nz<depth()) { > if (y>=0 && y<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*(1-dy)*dz, w2 = is_added?1:(1-w1); > (*this)(x,y,nz,c) = (T)(w1*value + w2*(*this)(x,y,nz,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*(1-dy)*dz, w2 = is_added?1:(1-w1); > (*this)(nx,y,nz,c) = (T)(w1*value + w2*(*this)(nx,y,nz,c)); > } > } > if (ny>=0 && ny<height()) { > if (x>=0 && x<width()) { > const float w1 = (1-dx)*dy*dz, w2 = is_added?1:(1-w1); > (*this)(x,ny,nz,c) = (T)(w1*value + w2*(*this)(x,ny,nz,c)); > } > if (nx>=0 && nx<width()) { > const float w1 = dx*dy*dz, w2 = is_added?1:(1-w1); > (*this)(nx,ny,nz,c) = (T)(w1*value + w2*(*this)(nx,ny,nz,c)); > } > } > } > } > return *this; > } ># 12896 "./CImg.h" > CImg<charT> value_string(const char separator=',', const unsigned int max_size=0) const { > if (is_empty()) return CImg<charT>::string(""); > CImgList<charT> items; > char s_item[256] = { 0 }; > const T *ptrs = _data; > unsigned int string_size = 0; > for (unsigned long off = 0, siz = (unsigned int)size(); off<siz && string_size<=max_size; ++off) { > const unsigned int printed_size = 1U + snprintf(s_item,sizeof(s_item),cimg::type<T>::format(),cimg::type<T>::format(*(ptrs++))); > CImg<charT> item(s_item,printed_size); > item[printed_size-1] = separator; > item.move_to(items); > if (max_size) string_size+=printed_size; > } > CImg<charT> res; > (items>'x').move_to(res); > if (max_size && res._width>max_size) res.crop(0,max_size); > res.back() = 0; > return res; > } ># 12931 "./CImg.h" > bool is_shared() const { > return _is_shared; > } > > > > > > > bool is_empty() const { > return !(_data && _width && _height && _depth && _spectrum); > } > > > > > > bool is_inf() const { > if (cimg::type<T>::is_float()) for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) if (cimg::type<T>::is_inf((float)*p)) return true; > return false; > } > > > > > > bool is_nan() const { > if (cimg::type<T>::is_float()) for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) if (cimg::type<T>::is_nan((float)*p)) return true; > return false; > } > > > bool is_sameX(const unsigned int size_x) const { > return _width==size_x; > } > > > template<typename t> > bool is_sameX(const CImg<t>& img) const { > return is_sameX(img._width); > } > > > bool is_sameX(const CImgDisplay& disp) const { > return is_sameX(disp._width); > } > > > bool is_sameY(const unsigned int size_y) const { > return _height==size_y; > } > > > template<typename t> > bool is_sameY(const CImg<t>& img) const { > return is_sameY(img._height); > } > > > bool is_sameY(const CImgDisplay& disp) const { > return is_sameY(disp._height); > } > > > bool is_sameZ(const unsigned int size_z) const { > return _depth==size_z; > } > > > template<typename t> > bool is_sameZ(const CImg<t>& img) const { > return is_sameZ(img._depth); > } > > > bool is_sameC(const unsigned int size_c) const { > return _spectrum==size_c; > } > > > template<typename t> > bool is_sameC(const CImg<t>& img) const { > return is_sameC(img._spectrum); > } > > > > > > bool is_sameXY(const unsigned int size_x, const unsigned int size_y) const { > return _width==size_x && _height==size_y; > } > > > > > > template<typename t> > bool is_sameXY(const CImg<t>& img) const { > return is_sameXY(img._width,img._height); > } > > > > > > bool is_sameXY(const CImgDisplay& disp) const { > return is_sameXY(disp._width,disp._height); > } > > > > > > bool is_sameXZ(const unsigned int size_x, const unsigned int size_z) const { > return _width==size_x && _depth==size_z; > } > > > > > > template<typename t> > bool is_sameXZ(const CImg<t>& img) const { > return is_sameXZ(img._width,img._depth); > } > > > > > > bool is_sameXC(const unsigned int size_x, const unsigned int size_c) const { > return _width==size_x && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXC(const CImg<t>& img) const { > return is_sameXC(img._width,img._spectrum); > } > > > > > > bool is_sameYZ(const unsigned int size_y, const unsigned int size_z) const { > return _height==size_y && _depth==size_z; > } > > > > > > template<typename t> > bool is_sameYZ(const CImg<t>& img) const { > return is_sameYZ(img._height,img._depth); > } > > > > > > bool is_sameYC(const unsigned int size_y, const unsigned int size_c) const { > return _height==size_y && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameYC(const CImg<t>& img) const { > return is_sameYC(img._height,img._spectrum); > } > > > > > > bool is_sameZC(const unsigned int size_z, const unsigned int size_c) const { > return _depth==size_z && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameZC(const CImg<t>& img) const { > return is_sameZC(img._depth,img._spectrum); > } > > > > > > bool is_sameXYZ(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z) const { > return is_sameXY(size_x,size_y) && _depth==size_z; > } > > > > > > template<typename t> > bool is_sameXYZ(const CImg<t>& img) const { > return is_sameXYZ(img._width,img._height,img._depth); > } > > > > > > bool is_sameXYC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_c) const { > return is_sameXY(size_x,size_y) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXYC(const CImg<t>& img) const { > return is_sameXYC(img._width,img._height,img._spectrum); > } > > > > > > bool is_sameXZC(const unsigned int size_x, const unsigned int size_z, const unsigned int size_c) const { > return is_sameXZ(size_x,size_z) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXZC(const CImg<t>& img) const { > return is_sameXZC(img._width,img._depth,img._spectrum); > } > > > > > > bool is_sameYZC(const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { > return is_sameYZ(size_y,size_z) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameYZC(const CImg<t>& img) const { > return is_sameYZC(img._height,img._depth,img._spectrum); > } > > > > > > bool is_sameXYZC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { > return is_sameXYZ(size_x,size_y,size_z) && _spectrum==size_c; > } > > > > > > template<typename t> > bool is_sameXYZC(const CImg<t>& img) const { > return is_sameXYZC(img._width,img._height,img._depth,img._spectrum); > } ># 13226 "./CImg.h" > bool containsXYZC(const int x, const int y=0, const int z=0, const int c=0) const { > return !is_empty() && x>=0 && x<width() && y>=0 && y<height() && z>=0 && z<depth() && c>=0 && c<spectrum(); > } ># 13250 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& x, t& y, t& z, t& c) const { > const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; > unsigned long off = (unsigned long)(ppixel - _data); > const unsigned long nc = off/whd; > off%=whd; > const unsigned long nz = off/wh; > off%=wh; > const unsigned long ny = off/_width, nx = off%_width; > x = (t)nx; y = (t)ny; z = (t)nz; c = (t)nc; > return true; > } > > > > > > template<typename t> > bool contains(const T& pixel, t& x, t& y, t& z) const { > const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; > unsigned long off = ((unsigned long)(ppixel - _data))%whd; > const unsigned long nz = off/wh; > off%=wh; > const unsigned long ny = off/_width, nx = off%_width; > x = (t)nx; y = (t)ny; z = (t)nz; > return true; > } > > > > > > template<typename t> > bool contains(const T& pixel, t& x, t& y) const { > const unsigned long wh = (unsigned long)_width*_height, siz = wh*_depth*_spectrum; > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; > unsigned long off = ((unsigned int)(ppixel - _data))%wh; > const unsigned long ny = off/_width, nx = off%_width; > x = (t)nx; y = (t)ny; > return true; > } > > > > > > template<typename t> > bool contains(const T& pixel, t& x) const { > const T *const ppixel = &pixel; > if (is_empty() || ppixel<_data || ppixel>=_data+size()) return false; > x = (t)(((unsigned long)(ppixel - _data))%_width); > return true; > } > > > > > > bool contains(const T& pixel) const { > const T *const ppixel = &pixel; > return !is_empty() && ppixel>=_data && ppixel<_data + size(); > } ># 13336 "./CImg.h" > template<typename t> > bool is_overlapped(const CImg<t>& img) const { > const unsigned long csiz = size(), isiz = img.size(); > return !((void*)(_data + csiz)<=(void*)img._data || (void*)_data>=(void*)(img._data + isiz)); > } ># 13356 "./CImg.h" > template<typename tp, typename tc, typename to> > bool is_object3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool full_check=true, > char *const error_message=0) const { > if (error_message) *error_message = 0; > > > if (is_empty()) { > if (primitives || colors || opacities) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines no vertices but %u primitives, %u colors and %lu opacities", > _width,primitives._width,primitives._width,colors._width,(unsigned long)opacities.size()); > return false; > } > return true; > } > > > if (_height!=3 || _depth>1 || _spectrum>1) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) has invalid vertex dimensions (%u,%u,%u,%u)", > _width,primitives._width,_width,_height,_depth,_spectrum); > return false; > } > if (colors._width>primitives._width+1) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines %u colors", > _width,primitives._width,colors._width); > return false; > } > if (opacities.size()>primitives._width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines %lu opacities", > _width,primitives._width,(unsigned long)opacities.size()); > return false; > } > if (!full_check) return true; > > > for (int l = 0; l<(int)(primitives)._width; ++l) { > const CImg<tp>& primitive = primitives[l]; > const unsigned long psiz = primitive.size(); > switch (psiz) { > case 1 : { > const unsigned int i0 = (unsigned int)primitive(0); > if (i0>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", > _width,primitives._width,i0,l); > return false; > } > } break; > case 5 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > if (i0>=_width || i1>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in sphere primitive [%u]", > _width,primitives._width,i0,i1,l); > return false; > } > } break; > case 2 : > case 6 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > if (i0>=_width || i1>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in segment primitive [%u]", > _width,primitives._width,i0,i1,l); > return false; > } > } break; > case 3 : > case 9 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2); > if (i0>=_width || i1>=_width || i2>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u) in triangle primitive [%u]", > _width,primitives._width,i0,i1,i2,l); > return false; > } > } break; > case 4 : > case 12 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2), > i3 = (unsigned int)primitive(3); > if (i0>=_width || i1>=_width || i2>=_width || i3>=_width) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in quadrangle primitive [%u]", > _width,primitives._width,i0,i1,i2,i3,l); > return false; > } > } break; > default : > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines an invalid primitive [%u] of size %u", > _width,primitives._width,l,(unsigned int)psiz); > return false; > } > } > > > for (int c = 0; c<(int)(colors)._width; ++c) { > const CImg<tc>& color = colors[c]; > if (!color) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines no color for primitive [%u]", > _width,primitives._width,c); > return false; > } > } > > > if (colors._width>primitives._width) { > const CImg<tc> &light = colors.back(); > if (!light || light._depth>1) { > if (error_message) std::sprintf(error_message, > "3d object (%u,%u) defines an invalid light texture (%u,%u,%u,%u)", > _width,primitives._width,light._width,light._height,light._depth,light._spectrum); > return false; > } > } > > return true; > } ># 13503 "./CImg.h" > bool is_CImg3d(const bool full_check=true, char *const error_message=0) const { > if (error_message) *error_message = 0; > > > if (_width!=1 || _height<8 || _depth!=1 || _spectrum!=1) { > if (error_message) std::sprintf(error_message, > "CImg3d has invalid dimensions (%u,%u,%u,%u)", > _width,_height,_depth,_spectrum); > return false; > } > const T *ptrs = _data, *const ptre = end(); > if (!_is_CImg3d(*(ptrs++),'C') || !_is_CImg3d(*(ptrs++),'I') || !_is_CImg3d(*(ptrs++),'m') || > !_is_CImg3d(*(ptrs++),'g') || !_is_CImg3d(*(ptrs++),'3') || !_is_CImg3d(*(ptrs++),'d')) { > if (error_message) std::sprintf(error_message, > "CImg3d header not found"); > return false; > } > const unsigned int > nb_points = cimg::float2uint((float)*(ptrs++)), > nb_primitives = cimg::float2uint((float)*(ptrs++)); > > > if (!full_check) { > const unsigned long minimal_size = 8UL + 3*nb_points + 6*nb_primitives; > if (_data + minimal_size>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has only %lu values, while at least %lu values were expected", > nb_points,nb_primitives,size(),minimal_size); > return false; > } > } > > > if (!nb_points) { > if (nb_primitives) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines no vertices but %u primitives", > nb_points,nb_primitives,nb_primitives); > return false; > } > if (ptrs!=ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) is an empty object but contains %u value%s more than expected", > nb_points,nb_primitives,(unsigned int)(ptre-ptrs),(ptre-ptrs)>1?"s":""); > return false; > } > return true; > } > if (ptrs+3*nb_points>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines only %u vertices data", > nb_points,nb_primitives,(unsigned int)(ptre-ptrs)/3); > return false; > } > ptrs+=3*nb_points; > > > if (ptrs==ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines %u vertices but no primitive", > nb_points,nb_primitives,nb_points); > return false; > } > > if (!full_check) return true; > > for (unsigned int p = 0; p<nb_primitives; ++p) { > const unsigned int nb_inds = (unsigned int)*(ptrs++); > switch (nb_inds) { > case 1 : { > const unsigned int i0 = cimg::float2uint((float)*(ptrs++)); > if (i0>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", > nb_points,nb_primitives,i0,p); > return false; > } > } break; > case 5 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)); > ptrs+=3; > if (i0>=nb_points || i1>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in sphere primitive [%u]", > nb_points,nb_primitives,i0,i1,p); > return false; > } > } break; > case 2 : case 6 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)); > if (nb_inds==6) ptrs+=4; > if (i0>=nb_points || i1>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in segment primitive [%u]", > nb_points,nb_primitives,i0,i1,p); > return false; > } > } break; > case 3 : case 9 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)), > i2 = cimg::float2uint((float)*(ptrs++)); > if (nb_inds==9) ptrs+=6; > if (i0>=nb_points || i1>=nb_points || i2>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u) in triangle primitive [%u]", > nb_points,nb_primitives,i0,i1,i2,p); > return false; > } > } break; > case 4 : case 12 : { > const unsigned int > i0 = cimg::float2uint((float)*(ptrs++)), > i1 = cimg::float2uint((float)*(ptrs++)), > i2 = cimg::float2uint((float)*(ptrs++)), > i3 = cimg::float2uint((float)*(ptrs++)); > if (nb_inds==12) ptrs+=8; > if (i0>=nb_points || i1>=nb_points || i2>=nb_points || i3>=nb_points) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in quadrangle primitive [%u]", > nb_points,nb_primitives,i0,i1,i2,i3,p); > return false; > } > } break; > default : > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines an invalid primitive [%u] of size %u", > nb_points,nb_primitives,p,nb_inds); > return false; > } > if (ptrs>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has incomplete primitive data for primitive [%u], %u values missing", > nb_points,nb_primitives,p,(unsigned int)(ptrs-ptre)); > return false; > } > } > > > if (ptrs==ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines no color/texture data", > nb_points,nb_primitives); > return false; > } > for (unsigned int c = 0; c<nb_primitives; ++c) { > if (*(ptrs++)!=(T)-128) ptrs+=2; > else if ((ptrs+=3)<ptre) { > const unsigned int w = (unsigned int)*(ptrs-3), h = (unsigned int)*(ptrs-2), s = (unsigned int)*(ptrs-1); > if (!h && !s) { > if (w>=c) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid shared sprite/texture indice %u for primitive [%u]", > nb_points,nb_primitives,w,c); > return false; > } > } else ptrs+=w*h*s; > } > if (ptrs>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has incomplete color/texture data for primitive [%u], %u values missing", > nb_points,nb_primitives,c,(unsigned int)(ptrs-ptre)); > return false; > } > } > > > if (ptrs==ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) defines no opacity data", > nb_points,nb_primitives); > return false; > } > for (unsigned int o = 0; o<nb_primitives; ++o) { > if (*(ptrs++)==(T)-128 && (ptrs+=3)<ptre) { > const unsigned int w = (unsigned int)*(ptrs-3), h = (unsigned int)*(ptrs-2), s = (unsigned int)*(ptrs-1); > if (!h && !s) { > if (w>=o) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) refers to invalid shared opacity indice %u for primitive [%u]", > nb_points,nb_primitives,w,o); > return false; > } > } else ptrs+=w*h*s; > } > if (ptrs>ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) has incomplete opacity data for primitive [%u]", > nb_points,nb_primitives,o); > return false; > } > } > > > if (ptrs<ptre) { > if (error_message) std::sprintf(error_message, > "CImg3d (%u,%u) contains %u value%s more than expected", > nb_points,nb_primitives,(unsigned int)(ptre-ptrs),(ptre-ptrs)>1?"s":""); > return false; > } > return true; > } > > static bool _is_CImg3d(const T val, const char c) { > return val>=(T)c && val<(T)(c+1); > } ># 13723 "./CImg.h" > struct _cimg_math_parser { > CImgList<longT> code; > CImg<longT> opcode; > const CImg<longT>* p_code; > CImgList<charT> labelM; > CImg<uintT> level, labelMpos, label1pos; > CImg<doubleT> mem; > CImg<charT> expr; > const CImg<T>& reference; > CImg<Tdouble> reference_stats; > unsigned int mempos, result; > const char *const calling_function; > typedef double (*mp_func)(_cimg_math_parser&); ># 13755 "./CImg.h" > _cimg_math_parser():reference(CImg<T>::empty()),calling_function(0) {} > > _cimg_math_parser(const CImg<T>& img, const char *const expression, const char *const funcname=0): > reference(img),calling_function(funcname?funcname:"cimg_math_parser") { > unsigned int l = 0; > if (expression) { > l = (unsigned int)std::strlen(expression); > expr.assign(expression,l+1); > if (*expr._data) { > char *d = expr._data; > for (const char *s = expr._data; *s || (bool)(*d=0); ++s) if (*s!=' ') *(d++) = *s; > l = (unsigned int)(d - expr._data); > } > } > if (!l) throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Empty specified expression.", > pixel_type(),calling_function); > > int lv = 0; > level.assign(l); > unsigned int *pd = level._data; > for (const char *ps = expr._data; *ps && lv>=0; ++ps) *(pd++) = (unsigned int)(*ps=='('||*ps=='['?lv++:*ps==')'||*ps==']'?--lv:lv); > if (lv!=0) { > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Unbalanced parentheses/brackets in specified expression '%s'.", > pixel_type(),calling_function, > expr._data); > } > > mem.assign(512); > mem[0] = 0; > mem[1] = 1; > mem[2] = 2; > mem[3] = (double)reference._width; > mem[4] = (double)reference._height; > mem[5] = (double)reference._depth; > mem[6] = (double)reference._spectrum; > mem[7] = cimg::PI; > mem[8] = std::exp(1.0); > mempos = 13; > labelMpos.assign(8); > label1pos.assign(128,1,1,1,~0U); > label1pos['w'] = 3; > label1pos['h'] = 4; > label1pos['d'] = 5; > label1pos['s'] = 6; > label1pos[0] = 7; > label1pos['e'] = 8; > label1pos['x'] = 9; > label1pos['y'] = 10; > label1pos['z'] = 11; > label1pos['c'] = 12; > result = compile(expr._data,expr._data+l); > } > > > unsigned int opcode0(const mp_func op) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos).move_to(code); > return pos; > } > > unsigned int opcode1(const mp_func op, const unsigned int arg1) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1).move_to(code); > return pos; > } > > unsigned int opcode2(const mp_func op, const unsigned int arg1, const unsigned int arg2) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1,arg2).move_to(code); > return pos; > } > > unsigned int opcode3(const mp_func op, const unsigned int arg1, const unsigned int arg2, const unsigned int arg3) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1,arg2,arg3).move_to(code); > return pos; > } > > unsigned int opcode6(const mp_func op, const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, > const unsigned int arg4, const unsigned int arg5, const unsigned int arg6) { > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(op),pos,arg1,arg2,arg3,arg4,arg5,arg6).move_to(code); > return pos; > } > > > unsigned int compile(char *const ss, char *const se) { > if (!ss || se<=ss || !*ss) { > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Missing item in specified expression '%s'.", > pixel_type(),calling_function, > expr._data); > } > char > *const se1 = se-1, *const se2 = se-2, *const se3 = se-3, *const se4 = se-4, > *const ss1 = ss+1, *const ss2 = ss+2, *const ss3 = ss+3, *const ss4 = ss+4, > *const ss5 = ss+5, *const ss6 = ss+6, *const ss7 = ss+7; > const char saved_char = *se; *se = 0; > const unsigned int clevel = level[ss-expr._data], clevel1 = clevel+1; > if (*se1==';') return compile(ss,se1); > > > char end = 0, sep = 0; double val = 0; > const int nb = std::sscanf(ss,"%lf%c%c",&val,&sep,&end); > if (nb==1) { > if (val==0 || val==1 || val==2) { *se = saved_char; return (int)val; }; > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > mem[pos] = val; > { *se = saved_char; return pos; }; > } > if (nb==2 && sep=='%') { > if (val==0 || val==100 || val==200) { *se = saved_char; return (int)(val/100); }; > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > mem[pos] = val/100; > { *se = saved_char; return pos; }; > } > if (ss1==se) switch (*ss) { > case 'w' : case 'h' : case 'd' : case 's' : > case 'x' : case 'y' : case 'z' : case 'c' : case 'e' : { *se = saved_char; return label1pos[*ss]; }; > case 'u' : if (label1pos['u']!=~0U) { *se = saved_char; return label1pos['u']; }; { const unsigned int _i1 = 0, _i2 = 1; { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > case 'g' : if (label1pos['g']!=~0U) { *se = saved_char; return label1pos['g']; }; { *se = saved_char; return opcode0(mp_g); };; > case 'i' : if (label1pos['i']!=~0U) { *se = saved_char; return label1pos['i']; }; { *se = saved_char; return opcode0(mp_i); };; > case '?' : { const unsigned int _i1 = 0, _i2 = 1; { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > } > if (ss1==se1) { > if (*ss=='p' && *ss1=='i') { *se = saved_char; return label1pos[0]; }; > if (*ss=='i') { > if (*ss1=='m') { if (label1pos[1]!=~0U) { *se = saved_char; return label1pos[1]; }; { *se = saved_char; return opcode0(mp_im); };; } > if (*ss1=='M') { if (label1pos[2]!=~0U) { *se = saved_char; return label1pos[2]; }; { *se = saved_char; return opcode0(mp_iM); };; } > if (*ss1=='a') { if (label1pos[3]!=~0U) { *se = saved_char; return label1pos[3]; }; { *se = saved_char; return opcode0(mp_ia); };; } > if (*ss1=='v') { if (label1pos[4]!=~0U) { *se = saved_char; return label1pos[4]; }; { *se = saved_char; return opcode0(mp_iv); };; } > } > if (*ss1=='m') { > if (*ss=='x') { if (label1pos[5]!=~0U) { *se = saved_char; return label1pos[5]; }; { *se = saved_char; return opcode0(mp_xm); };; } > if (*ss=='y') { if (label1pos[6]!=~0U) { *se = saved_char; return label1pos[6]; }; { *se = saved_char; return opcode0(mp_ym); };; } > if (*ss=='z') { if (label1pos[7]!=~0U) { *se = saved_char; return label1pos[7]; }; { *se = saved_char; return opcode0(mp_zm); };; } > if (*ss=='c') { if (label1pos[8]!=~0U) { *se = saved_char; return label1pos[8]; }; { *se = saved_char; return opcode0(mp_cm); };; } > } > if (*ss1=='M') { > if (*ss=='x') { if (label1pos[9]!=~0U) { *se = saved_char; return label1pos[9]; }; { *se = saved_char; return opcode0(mp_xM); };; } > if (*ss=='y') { if (label1pos[10]!=~0U) { *se = saved_char; return label1pos[10]; }; { *se = saved_char; return opcode0(mp_yM); };; } > if (*ss=='z') { if (label1pos[11]!=~0U) { *se = saved_char; return label1pos[11]; }; { *se = saved_char; return opcode0(mp_zM); };; } > if (*ss=='c') { if (label1pos[12]!=~0U) { *se = saved_char; return label1pos[12]; }; { *se = saved_char; return opcode0(mp_cM); };; } > } > } > > > for (char *s = se2; s>ss; --s) if (*s==';' && level[s-expr._data]==clevel) { compile(ss,s); { *se = saved_char; return compile(s+1,se); }; } > for (char *s = ss1, *ps = ss, *ns = ss2; s<se1; ++s, ++ps, ++ns) > if (*s=='=' && *ns!='=' && *ps!='=' && *ps!='>' && *ps!='<' && *ps!='!' && level[s-expr._data]==clevel) { > CImg<charT> variable_name(ss,(unsigned int)(s-ss+1)); > variable_name.back() = 0; > bool is_valid_name = true; > if (*ss>='0' && *ss<='9') is_valid_name = false; > else for (const char *ns = ss+1; ns<s; ++ns) > if ((*ns<'a' || *ns>'z') && (*ns<'A' || *ns>'Z') && (*ns<'0' || *ns>'9') && *ns!='_') { > is_valid_name = false; break; > } > if (!is_valid_name) { > *se = saved_char; > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Invalid variable name '%s' in specified expression '%s%s%s'.", > pixel_type(),calling_function, > variable_name._data, > (ss-8)>expr._data?"...":"", > (ss-8)>expr._data?ss-8:expr._data, > se<&expr.back()?"...":""); > } > const unsigned int pos = compile(s+1,se); > if (variable_name[0] && variable_name[1] && !variable_name[2]) { > const char c1 = variable_name[0], c2 = variable_name[1]; > if (c1=='p' && c2=='i') variable_name.fill((char)0,(char)0); > else if (c1=='i') { > if (c2=='m') variable_name.fill(1,0); > else if (c2=='M') variable_name.fill(2,0); > else if (c2=='a') variable_name.fill(3,0); > else if (c2=='v') variable_name.fill(4,0); > } else if (c2=='m') { > if (c1=='x') variable_name.fill(5,0); > else if (c1=='y') variable_name.fill(6,0); > else if (c1=='z') variable_name.fill(7,0); > else if (c1=='c') variable_name.fill(8,0); > } else if (c2=='M') { > if (c1=='x') variable_name.fill(9,0); > else if (c1=='y') variable_name.fill(10,0); > else if (c1=='z') variable_name.fill(11,0); > else if (c1=='c') variable_name.fill(12,0); > } > } > if (variable_name[1]) { > int label_pos = -1; > for (int i = 0; i<(int)(labelM)._width; ++i) if (!std::strcmp(variable_name,labelM[i])) { label_pos = i; break; } > if (label_pos<0) { > if (labelM._width>=labelMpos._width) labelMpos.resize(-200,1,1,1,0); > label_pos = labelM._width; > variable_name.move_to(labelM); > } > labelMpos[label_pos] = pos; > } else label1pos[*variable_name] = pos; > { *se = saved_char; return pos; }; > } > > > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='|' && *ns=='|' && level[s-expr._data]==clevel) { > const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_logical_or),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='&' && *ns=='&' && level[s-expr._data]==clevel) { > const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_logical_and),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > for (char *s = se2; s>ss; --s) if (*s=='|' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_bitwise_or,_i1,_i2); }; }; > for (char *s = se2; s>ss; --s) if (*s=='&' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_bitwise_and,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='!' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_noteq,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='=' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_eqeq,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='<' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_infeq,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='>' && *ns=='=' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_supeq,_i1,_i2); }; }; > for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) > if (*s=='<' && *ns!='<' && *ps!='<' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_inf,_i1,_i2); }; }; > for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) > if (*s=='>' && *ns!='>' && *ps!='>' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_sup,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='<' && *ns=='<' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_lsl,_i1,_i2); }; }; > for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='>' && *ns=='>' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+2,se); { *se = saved_char; return opcode2(mp_lsr,_i1,_i2); }; }; > for (char *s = se2, *ps = se3; s>ss; --s, --ps) > if (*s=='+' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && > (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) > { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_add,_i1,_i2); }; }; > for (char *s = se2, *ps = se3; s>ss; --s, --ps) > if (*s=='-' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && > (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) > { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_sub,_i1,_i2); }; }; > for (char *s = se2; s>ss; --s) if (*s=='*' && level[s-expr._data]==clevel) { > const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+1,se); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_mul),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > for (char *s = se2; s>ss; --s) if (*s=='/' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_div,_i1,_i2); }; }; > for (char *s = se2, *ns = se1; s>ss; --s, --ns) > if (*s=='%' && *ns!='^' && level[s-expr._data]==clevel) > { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_modulo,_i1,_i2); }; }; > if (ss<se1) { > if (*ss=='+') { *se = saved_char; return compile(ss1,se); }; > if (*ss=='-') { *se = saved_char; return opcode1(mp_minus,compile(ss1,se)); };; > if (*ss=='!') { *se = saved_char; return opcode1(mp_logical_not,compile(ss1,se)); };; > if (*ss=='~') { *se = saved_char; return opcode1(mp_bitwise_not,compile(ss1,se)); };; > } > for (char *s = se2; s>ss; --s) if (*s=='^' && level[s-expr._data]==clevel) { const unsigned int _i1 = compile(ss,s), _i2 = compile(s+1,se); { *se = saved_char; return opcode2(mp_pow,_i1,_i2); }; }; > > > if (*se1==']') { > const bool is_relative = *ss=='j'; > if ((*ss=='i' || is_relative) && *ss1=='[') { > if (*ss2==']') { *se = saved_char; return opcode0(mp_i); };; > { *se = saved_char; return opcode1(is_relative?mp_joff:mp_ioff,compile(ss2,se1)); };; > } > } > if (*se1==')') { > if (*ss=='(') { *se = saved_char; return compile(ss1,se1); }; > if (!std::strncmp(ss,"sin(",4)) { *se = saved_char; return opcode1(mp_sin,compile(ss4,se1)); };; > if (!std::strncmp(ss,"cos(",4)) { *se = saved_char; return opcode1(mp_cos,compile(ss4,se1)); };; > if (!std::strncmp(ss,"tan(",4)) { *se = saved_char; return opcode1(mp_tan,compile(ss4,se1)); };; > if (!std::strncmp(ss,"asin(",5)) { *se = saved_char; return opcode1(mp_asin,compile(ss5,se1)); };; > if (!std::strncmp(ss,"acos(",5)) { *se = saved_char; return opcode1(mp_acos,compile(ss5,se1)); };; > if (!std::strncmp(ss,"atan(",5)) { *se = saved_char; return opcode1(mp_atan,compile(ss5,se1)); };; > if (!std::strncmp(ss,"sinh(",5)) { *se = saved_char; return opcode1(mp_sinh,compile(ss5,se1)); };; > if (!std::strncmp(ss,"cosh(",5)) { *se = saved_char; return opcode1(mp_cosh,compile(ss5,se1)); };; > if (!std::strncmp(ss,"tanh(",5)) { *se = saved_char; return opcode1(mp_tanh,compile(ss5,se1)); };; > if (!std::strncmp(ss,"log10(",6)) { *se = saved_char; return opcode1(mp_log10,compile(ss6,se1)); };; > if (!std::strncmp(ss,"log2(",5)) { *se = saved_char; return opcode1(mp_log2,compile(ss5,se1)); };; > if (!std::strncmp(ss,"log(",4)) { *se = saved_char; return opcode1(mp_log,compile(ss4,se1)); };; > if (!std::strncmp(ss,"exp(",4)) { *se = saved_char; return opcode1(mp_exp,compile(ss4,se1)); };; > if (!std::strncmp(ss,"sqrt(",5)) { *se = saved_char; return opcode1(mp_sqrt,compile(ss5,se1)); };; > if (!std::strncmp(ss,"sign(",5)) { *se = saved_char; return opcode1(mp_sign,compile(ss5,se1)); };; > if (!std::strncmp(ss,"abs(",4)) { *se = saved_char; return opcode1(mp_abs,compile(ss4,se1)); };; > if (!std::strncmp(ss,"atan2(",6)) { > char *s1 = ss6; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > { const unsigned int _i1 = compile(ss6,s1), _i2 = compile(s1+1,se1); { *se = saved_char; return opcode2(mp_atan2,_i1,_i2); }; }; > } > if (*ss=='i' && *ss1=='f' && *ss2=='(') { > char *s1 = ss3; while (s1<se4 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > const unsigned int mem_cond = compile(ss3,s1), bp1 = code._width, mem_A = compile(s1+1,s2), > bp2 = code._width, mem_B = compile(s2+1,se1); > if (mempos>=mem._width) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_if),pos,mem_cond,mem_A,mem_B,bp2-bp1,code._width-bp2).move_to(code,bp1); > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"round(",6)) { > unsigned int value = 0, round = 1, direction = 0; > char *s1 = ss6; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > value = compile(ss6,s1==se2?++s1:s1); > if (s1<se1) { > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > round = compile(s1+1,s2==se2?++s2:s2); > if (s2<se1) direction = compile(s2+1,se1); > } > { const unsigned int _i1 = value, _i2 = round, _i3 = direction; { *se = saved_char; return opcode3(mp_round,_i1,_i2,_i3); }; }; > } > if ((*ss=='?' || *ss=='u') && *ss1=='(') { > if (*ss2==')') { const unsigned int _i1 = 0, _i2 = 1; { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > char *s1 = ss2; while (s1<se1 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > if (s1<se1) { const unsigned int _i1 = compile(ss2,s1), _i2 = compile(s1+1,se1); { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > { const unsigned int _i1 = 0, _i2 = compile(ss2,s1); { *se = saved_char; return opcode2(mp_u,_i1,_i2); }; }; > } > const bool is_relative = *ss=='j'; > if ((*ss=='i' || is_relative) && *ss1=='(') { > if (*ss2==')') { *se = saved_char; return opcode0(mp_i); };; > unsigned int > indx = is_relative?0:9, indy = is_relative?0:10, > indz = is_relative?0:11, indc = is_relative?0:12, > borders = 0, interpolation = 0; > if (ss2!=se1) { > char *s1 = ss2; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > indx = compile(ss2,s1==se2?++s1:s1); > if (s1<se1) { > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > indy = compile(s1+1,s2==se2?++s2:s2); > if (s2<se1) { > char *s3 = s2+1; while (s3<se2 && (*s3!=',' || level[s3-expr._data]!=clevel1)) ++s3; > indz = compile(s2+1,s3==se2?++s3:s3); > if (s3<se1) { > char *s4 = s3+1; while (s4<se2 && (*s4!=',' || level[s4-expr._data]!=clevel1)) ++s4; > indc = compile(s3+1,s4==se2?++s4:s4); > if (s4<se1) { > char *s5 = s4+1; while (s5<se2 && (*s5!=',' || level[s5-expr._data]!=clevel1)) ++s5; > interpolation = compile(s4+1,s5==se2?++s5:s5); > if (s5<se1) borders = compile(s5+1,se1); > } > } > } > } > } > { const unsigned int _i1 = indx, _i2 = indy, _i3 = indz, _i4 = indc, _i5 = interpolation, _i6 = borders; { *se = saved_char; return opcode6(is_relative?mp_jxyzc:mp_ixyzc,_i1,_i2,_i3,_i4,_i5,_i6); }; }; > } > if (!std::strncmp(ss,"min(",4) || !std::strncmp(ss,"max(",4) || !std::strncmp(ss,"med(",4) || !std::strncmp(ss,"kth(",4)) { > CImgList<longT> opcode; > if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(*ss=='k'?mp_kth:ss[1]=='i'?mp_min:ss[1]=='a'?mp_max:mp_med),pos).move_to(opcode); > for (char *s = ss4; s<se; ++s) { > char *ns = s; while (ns<se && (*ns!=',' || level[ns-expr._data]!=clevel1) && (*ns!=')' || level[ns-expr._data]!=clevel)) ++ns; > CImg<longT>::vector(compile(s,ns)).move_to(opcode); > s = ns; > } > (opcode>'y').move_to(code); > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"arg(",4)) { > CImgList<longT> opcode; > if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > CImg<longT>::vector((long)(mp_arg),pos).move_to(opcode); > for (char *s = ss4; s<se; ++s) { > char *ns = s; while (ns<se && (*ns!=',' || level[ns-expr._data]!=clevel1) && (*ns!=')' || level[ns-expr._data]!=clevel)) ++ns; > CImg<longT>::vector(compile(s,ns)).move_to(opcode); > s = ns; > } > (opcode>'y').move_to(code); > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"narg(",5)) { > if (*ss5==')') { *se = saved_char; return 0; }; > unsigned int nb_args = 0; > for (char *s = ss5; s<se; ++s) { > char *ns = s; while (ns<se && (*ns!=',' || level[ns-expr._data]!=clevel1) && (*ns!=')' || level[ns-expr._data]!=clevel)) ++ns; > ++nb_args; s = ns; > } > if (nb_args==0 || nb_args==1) { *se = saved_char; return nb_args; }; > if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); > const unsigned int pos = mempos++; > mem[pos] = nb_args; > { *se = saved_char; return pos; }; > } > if (!std::strncmp(ss,"isval(",6)) { > char sep = 0, end = 0; double val = 0; > if (std::sscanf(ss6,"%lf%c%c",&val,&sep,&end)==2 && sep==')') { *se = saved_char; return 1; }; > { *se = saved_char; return 0; }; > } > if (!std::strncmp(ss,"isnan(",6)) { *se = saved_char; return opcode1(mp_isnan,compile(ss6,se1)); };; > if (!std::strncmp(ss,"isinf(",6)) { *se = saved_char; return opcode1(mp_isinf,compile(ss6,se1)); };; > if (!std::strncmp(ss,"isint(",6)) { *se = saved_char; return opcode1(mp_isint,compile(ss6,se1)); };; > if (!std::strncmp(ss,"isbool(",7)) { *se = saved_char; return opcode1(mp_isbool,compile(ss7,se1)); };; > if (!std::strncmp(ss,"rol(",4) || !std::strncmp(ss,"ror(",4)) { > unsigned int value = 0, nb = 1; > char *s1 = ss4; while (s1<se2 && (*s1!=',' || level[s1-expr._data]!=clevel1)) ++s1; > value = compile(ss4,s1==se2?++s1:s1); > if (s1<se1) { > char *s2 = s1+1; while (s2<se2 && (*s2!=',' || level[s2-expr._data]!=clevel1)) ++s2; > nb = compile(s1+1,se1); > } > { const unsigned int _i1 = value, _i2 = nb; { *se = saved_char; return opcode2(*ss2=='l'?mp_rol:mp_ror,_i1,_i2); }; }; > } > > if (!std::strncmp(ss,"sinc(",5)) { *se = saved_char; return opcode1(mp_sinc,compile(ss5,se1)); };; > if (!std::strncmp(ss,"int(",4)) { *se = saved_char; return opcode1(mp_int,compile(ss4,se1)); };; > } > > > CImg<charT> variable_name(ss,(unsigned int)(se-ss+1)); > variable_name.back() = 0; > if (variable_name[1]) { for (int i = 0; i<(int)(labelM)._width; ++i) if (!std::strcmp(variable_name,labelM[i])) { *se = saved_char; return labelMpos[i]; }; } > else if (label1pos[*variable_name]!=~0U) { *se = saved_char; return label1pos[*variable_name]; }; > *se = saved_char; > throw CImgArgumentException("[_cimg_math_parser] " > "CImg<%s>::%s(): Invalid item '%s' in specified expression '%s%s%s'.\n", > pixel_type(),calling_function, > variable_name._data, > (ss-8)>expr._data?"...":"", > (ss-8)>expr._data?ss-8:expr._data, > se<&expr.back()?"...":""); > return 0; > } > > > > > static double mp_u(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] + cimg::rand()*(mp.mem[mp.opcode(3)]-mp.mem[mp.opcode(2)]); > } > static double mp_g(_cimg_math_parser& mp) { > cimg::unused(mp); > return cimg::grand(); > } > static double mp_i(_cimg_math_parser& mp) { > return (double)mp.reference.atXYZC((int)mp.mem[9],(int)mp.mem[10],(int)mp.mem[11],(int)mp.mem[12],0); > } > static double mp_logical_and(_cimg_math_parser& mp) { > const bool is_A = (bool)mp.mem[mp.opcode(2)]; > const CImg<longT> *const pE = ++mp.p_code + mp.opcode(4); > if (!is_A) { mp.p_code = pE - 1; return 0; } > const unsigned int mem_B = (unsigned int)mp.opcode(3); > for ( ; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return (double)(bool)mp.mem[mem_B]; > } > static double mp_logical_or(_cimg_math_parser& mp) { > const bool is_A = (bool)mp.mem[mp.opcode(2)]; > const CImg<longT> *const pE = ++mp.p_code + mp.opcode(4); > if (is_A) { mp.p_code = pE - 1; return 1; } > const unsigned int mem_B = (unsigned int)mp.opcode(3); > for ( ; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return (double)(bool)mp.mem[mem_B]; > } > static double mp_infeq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]<=mp.mem[mp.opcode(3)]); > } > static double mp_supeq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]>=mp.mem[mp.opcode(3)]); > } > static double mp_noteq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]!=mp.mem[mp.opcode(3)]); > } > static double mp_eqeq(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]==mp.mem[mp.opcode(3)]); > } > static double mp_inf(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]<mp.mem[mp.opcode(3)]); > } > static double mp_sup(_cimg_math_parser& mp) { > return (double)(mp.mem[mp.opcode(2)]>mp.mem[mp.opcode(3)]); > } > static double mp_add(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] + mp.mem[mp.opcode(3)]; > } > static double mp_sub(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] - mp.mem[mp.opcode(3)]; > } > static double mp_mul(_cimg_math_parser& mp) { > const double A = mp.mem[mp.opcode(2)]; > const CImg<longT> *const pE = ++mp.p_code + mp.opcode(4); > if (!A) { mp.p_code = pE - 1; return 0; } > const unsigned int mem_B = (unsigned int)mp.opcode(3); > for ( ; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return A*(double)mp.mem[mem_B]; > } > static double mp_div(_cimg_math_parser& mp) { > return mp.mem[mp.opcode(2)] / mp.mem[mp.opcode(3)]; > } > static double mp_minus(_cimg_math_parser& mp) { > return -mp.mem[mp.opcode(2)]; > } > static double mp_not(_cimg_math_parser& mp) { > return !mp.mem[mp.opcode(2)]; > } > static double mp_logical_not(_cimg_math_parser& mp) { > return !mp.mem[mp.opcode(2)]; > } > static double mp_bitwise_not(_cimg_math_parser& mp) { > return ~(unsigned long)mp.mem[mp.opcode(2)]; > } > static double mp_modulo(_cimg_math_parser& mp) { > return cimg::mod(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)]); > } > static double mp_bitwise_and(_cimg_math_parser& mp) { > return ((unsigned long)mp.mem[mp.opcode(2)] & (unsigned long)mp.mem[mp.opcode(3)]); > } > static double mp_bitwise_or(_cimg_math_parser& mp) { > return ((unsigned long)mp.mem[mp.opcode(2)] | (unsigned long)mp.mem[mp.opcode(3)]); > } > static double mp_pow(_cimg_math_parser& mp) { > const double v = mp.mem[mp.opcode(2)], p = mp.mem[mp.opcode(3)]; > if (p==0) return 1; > if (p==0.5) return std::sqrt(v); > if (p==1) return v; > if (p==2) return v*v; > if (p==3) return v*v*v; > if (p==4) return v*v*v*v; > return std::pow(v,p); > } > static double mp_sin(_cimg_math_parser& mp) { > return std::sin(mp.mem[mp.opcode(2)]); > } > static double mp_cos(_cimg_math_parser& mp) { > return std::cos(mp.mem[mp.opcode(2)]); > } > static double mp_tan(_cimg_math_parser& mp) { > return std::tan(mp.mem[mp.opcode(2)]); > } > static double mp_asin(_cimg_math_parser& mp) { > return std::asin(mp.mem[mp.opcode(2)]); > } > static double mp_acos(_cimg_math_parser& mp) { > return std::acos(mp.mem[mp.opcode(2)]); > } > static double mp_atan(_cimg_math_parser& mp) { > return std::atan(mp.mem[mp.opcode(2)]); > } > static double mp_sinh(_cimg_math_parser& mp) { > return std::sinh(mp.mem[mp.opcode(2)]); > } > static double mp_cosh(_cimg_math_parser& mp) { > return std::cosh(mp.mem[mp.opcode(2)]); > } > static double mp_tanh(_cimg_math_parser& mp) { > return std::tanh(mp.mem[mp.opcode(2)]); > } > static double mp_log10(_cimg_math_parser& mp) { > return std::log10(mp.mem[mp.opcode(2)]); > } > static double mp_log2(_cimg_math_parser& mp) { > return cimg::log2(mp.mem[mp.opcode(2)]); > } > static double mp_log(_cimg_math_parser& mp) { > return std::log(mp.mem[mp.opcode(2)]); > } > static double mp_exp(_cimg_math_parser& mp) { > return std::exp(mp.mem[mp.opcode(2)]); > } > static double mp_sqrt(_cimg_math_parser& mp) { > return std::sqrt(mp.mem[mp.opcode(2)]); > } > static double mp_sign(_cimg_math_parser& mp) { > return cimg::sign(mp.mem[mp.opcode(2)]); > } > static double mp_abs(_cimg_math_parser& mp) { > return cimg::abs(mp.mem[mp.opcode(2)]); > } > static double mp_atan2(_cimg_math_parser& mp) { > return std::atan2(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)]); > } > static double mp_if(_cimg_math_parser& mp) { > const bool is_cond = (bool)mp.mem[mp.opcode(2)]; > const unsigned int mem_A = (unsigned int)mp.opcode(3), mem_B = (unsigned int)mp.opcode(4); > const CImg<longT> > *const pB = ++mp.p_code + mp.opcode(5), > *const pE = pB + mp.opcode(6); > if (is_cond) { > for ( ; mp.p_code<pB; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > mp.p_code = pE - 1; > return mp.mem[mem_A]; > } > for (mp.p_code = pB; mp.p_code<pE; ++mp.p_code) { > const CImg<longT> &op = *mp.p_code; > mp.opcode._data = op._data; mp.opcode._height = op._height; > const unsigned int target = (unsigned int)mp.opcode[1]; > mp.mem[target] = (*(mp_func)((mp).opcode[0]))(mp); > } > --mp.p_code; > return mp.mem[mem_B]; > } > static double mp_round(_cimg_math_parser& mp) { > return cimg::round(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)],(int)mp.mem[mp.opcode(4)]); > } > static double mp_ixyzc(_cimg_math_parser& mp) { > const int i = (int)mp.mem[mp.opcode(6)], b = (int)mp.mem[mp.opcode(7)]; > if (i==0) { > if (b==2) return (double)mp.reference.atXYZC(cimg::mod((int)mp.mem[mp.opcode(2)],mp.reference.width()), > cimg::mod((int)mp.mem[mp.opcode(3)],mp.reference.height()), > cimg::mod((int)mp.mem[mp.opcode(4)],mp.reference.depth()), > cimg::mod((int)mp.mem[mp.opcode(5)],mp.reference.spectrum())); > if (b==1) return (double)mp.reference.atXYZC((int)mp.mem[mp.opcode(2)], > (int)mp.mem[mp.opcode(3)], > (int)mp.mem[mp.opcode(4)], > (int)mp.mem[mp.opcode(5)]); > return (double)mp.reference.atXYZC((int)mp.mem[mp.opcode(2)], > (int)mp.mem[mp.opcode(3)], > (int)mp.mem[mp.opcode(4)], > (int)mp.mem[mp.opcode(5)],0); > } else { > if (b==2) return (double)mp.reference.linear_atXYZC(cimg::mod((float)mp.mem[mp.opcode(2)],(float)mp.reference.width()), > cimg::mod((float)mp.mem[mp.opcode(3)],(float)mp.reference.height()), > cimg::mod((float)mp.mem[mp.opcode(4)],(float)mp.reference.depth()), > cimg::mod((float)mp.mem[mp.opcode(5)],(float)mp.reference.spectrum())); > if (b==1) return (double)mp.reference.linear_atXYZC((float)mp.mem[mp.opcode(2)], > (float)mp.mem[mp.opcode(3)], > (float)mp.mem[mp.opcode(4)], > (float)mp.mem[mp.opcode(5)]); > return (double)mp.reference.linear_atXYZC((float)mp.mem[mp.opcode(2)], > (float)mp.mem[mp.opcode(3)], > (float)mp.mem[mp.opcode(4)], > (float)mp.mem[mp.opcode(5)],0); > } > } > static double mp_jxyzc(_cimg_math_parser& mp) { > const double x = mp.mem[9], y = mp.mem[10], z = mp.mem[11], c = mp.mem[12]; > const int i = (int)mp.mem[mp.opcode(6)], b = (int)mp.mem[mp.opcode(7)]; > if (i==0) { > if (b==2) return (double)mp.reference.atXYZC(cimg::mod((int)(x+mp.mem[mp.opcode(2)]),mp.reference.width()), > cimg::mod((int)(y+mp.mem[mp.opcode(3)]),mp.reference.height()), > cimg::mod((int)(z+mp.mem[mp.opcode(4)]),mp.reference.depth()), > cimg::mod((int)(c+mp.mem[mp.opcode(5)]),mp.reference.spectrum())); > if (b==1) return (double)mp.reference.atXYZC((int)(x+mp.mem[mp.opcode(2)]), > (int)(y+mp.mem[mp.opcode(3)]), > (int)(z+mp.mem[mp.opcode(4)]), > (int)(c+mp.mem[mp.opcode(5)])); > return (double)mp.reference.atXYZC((int)(x+mp.mem[mp.opcode(2)]), > (int)(y+mp.mem[mp.opcode(3)]), > (int)(z+mp.mem[mp.opcode(4)]), > (int)(c+mp.mem[mp.opcode(5)]),0); > } else { > if (b==2) return (double)mp.reference.linear_atXYZC(cimg::mod((float)(x+mp.mem[mp.opcode(2)]),(float)mp.reference.width()), > cimg::mod((float)(y+mp.mem[mp.opcode(3)]),(float)mp.reference.height()), > cimg::mod((float)(z+mp.mem[mp.opcode(4)]),(float)mp.reference.depth()), > cimg::mod((float)(c+mp.mem[mp.opcode(5)]),(float)mp.reference.spectrum())); > if (b==1) return (double)mp.reference.linear_atXYZC((float)(x+mp.mem[mp.opcode(2)]), > (float)(y+mp.mem[mp.opcode(3)]), > (float)(z+mp.mem[mp.opcode(4)]), > (float)(c+mp.mem[mp.opcode(5)])); > return (double)mp.reference.linear_atXYZC((float)(x+mp.mem[mp.opcode(2)]), > (float)(y+mp.mem[mp.opcode(3)]), > (float)(z+mp.mem[mp.opcode(4)]), > (float)(c+mp.mem[mp.opcode(5)]),0); > } > } > static double mp_min(_cimg_math_parser& mp) { > double val = mp.mem[mp.opcode(2)]; > for (unsigned int i = 3; i<mp.opcode._height; ++i) val = cimg::min(val,mp.mem[mp.opcode(i)]); > return val; > } > static double mp_max(_cimg_math_parser& mp) { > double val = mp.mem[mp.opcode(2)]; > for (unsigned int i = 3; i<mp.opcode._height; ++i) val = cimg::max(val,mp.mem[mp.opcode(i)]); > return val; > } > static double mp_med(_cimg_math_parser& mp) { > CImg<doubleT> values(mp.opcode._height-2); > double *p = values.data(); > for (unsigned int i = 2; i<mp.opcode._height; ++i) *(p++) = mp.mem[mp.opcode(i)]; > return values.median(); > } > static double mp_kth(_cimg_math_parser& mp) { > CImg<doubleT> values(mp.opcode._height-3); > double *p = values.data(); > for (unsigned int i = 3; i<mp.opcode._height; ++i) *(p++) = mp.mem[mp.opcode(i)]; > int ind = (int)cimg::round(mp.mem[mp.opcode(2)]); > if (ind<0) ind+=1+values.width(); > ind = cimg::max(1,cimg::min(values.width(),ind)); > return values.kth_smallest(ind-1); > } > static double mp_isnan(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return cimg::type<double>::is_nan(val); > } > static double mp_isinf(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return cimg::type<double>::is_inf(val); > } > static double mp_isint(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return (double)(cimg::mod(val,1.0)==0); > } > static double mp_isbool(_cimg_math_parser& mp) { > const double val = mp.mem[mp.opcode(2)]; > return (val==0.0 || val==1.0); > } > static double mp_rol(_cimg_math_parser& mp) { > return cimg::rol(mp.mem[mp.opcode(2)],(unsigned int)mp.mem[mp.opcode(3)]); > } > static double mp_ror(_cimg_math_parser& mp) { > return cimg::ror(mp.mem[mp.opcode(2)],(unsigned int)mp.mem[mp.opcode(3)]); > } > static double mp_lsl(_cimg_math_parser& mp) { > return (long)mp.mem[mp.opcode(2)]<<(unsigned int)mp.mem[mp.opcode(3)]; > } > static double mp_lsr(_cimg_math_parser& mp) { > return (long)mp.mem[mp.opcode(2)]>>(unsigned int)mp.mem[mp.opcode(3)]; > } > static double mp_sinc(_cimg_math_parser& mp) { > return cimg::sinc(mp.mem[mp.opcode(2)]); > } > static double mp_im(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[0]:0; > } > static double mp_iM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[1]:0; > } > static double mp_ia(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[2]:0; > } > static double mp_iv(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[3]:0; > } > static double mp_xm(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[4]:0; > } > static double mp_ym(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[5]:0; > } > static double mp_zm(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[6]:0; > } > static double mp_cm(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[7]:0; > } > static double mp_xM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[8]:0; > } > static double mp_yM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[9]:0; > } > static double mp_zM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[10]:0; > } > static double mp_cM(_cimg_math_parser& mp) { > if (!mp.reference_stats) mp.reference.get_stats().move_to(mp.reference_stats); > return mp.reference_stats?mp.reference_stats[11]:0; > } > static double mp_arg(_cimg_math_parser& mp) { > const int _ind = (int)mp.mem[mp.opcode(2)]; > const unsigned int nb_args = mp.opcode._height-2, ind = _ind<0?_ind+nb_args:(unsigned int)_ind; > if (ind>=nb_args) return 0; > return mp.mem[mp.opcode(ind+2)]; > } > static double mp_int(_cimg_math_parser& mp) { > return (double)(long)mp.mem[mp.opcode(2)]; > } > static double mp_ioff(_cimg_math_parser& mp) { > const unsigned long off = (unsigned long)mp.mem[mp.opcode(2)]; > if (off>=mp.reference.size()) return 0; > return (double)mp.reference[off]; > } > static double mp_joff(_cimg_math_parser& mp) { > const int x = (int)mp.mem[9], y = (int)mp.mem[10], z = (int)mp.mem[11], c = (int)mp.mem[12]; > const unsigned long off = mp.reference.offset(x,y,z,c) + (unsigned long)(mp.mem[mp.opcode(2)]); > if (off>=mp.reference.size()) return 0; > return (double)mp.reference[off]; > } > > > double operator()(const double x, const double y, const double z, const double c) { > if (!mem) return 0; > mem[9] = x; mem[10] = y; mem[11] = z; mem[12] = c; > opcode._is_shared = true; opcode._width = opcode._depth = opcode._spectrum = 1; > > for (p_code = code._data; p_code<code.end(); ++p_code) { > const CImg<longT> &op = *p_code; > opcode._data = op._data; opcode._height = op._height; > const unsigned int target = (unsigned int)opcode[1]; > mem[target] = (*(mp_func)((*this).opcode[0]))(*this); > } > return mem[result]; > } > }; ># 14593 "./CImg.h" > CImg<T>& sqr() { > if (is_empty()) return *this; > > ># 14596 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 14596 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(val*val); }; > return *this; > } > > > CImg<Tfloat> get_sqr() const { > return CImg<Tfloat>(*this,false).sqr(); > } ># 14620 "./CImg.h" > CImg<T>& sqrt() { > if (is_empty()) return *this; > > ># 14623 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14623 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::sqrt((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sqrt() const { > return CImg<Tfloat>(*this,false).sqrt(); > } ># 14641 "./CImg.h" > CImg<T>& exp() { > if (is_empty()) return *this; > > ># 14644 "./CImg.h" >#pragma omp parallel for if (size()>=4096) ># 14644 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::exp((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_exp() const { > return CImg<Tfloat>(*this,false).exp(); > } ># 14662 "./CImg.h" > CImg<T>& log() { > if (is_empty()) return *this; > > ># 14665 "./CImg.h" >#pragma omp parallel for if (size()>=262144) ># 14665 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::log((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_log() const { > return CImg<Tfloat>(*this,false).log(); > } ># 14683 "./CImg.h" > CImg<T>& log2() { > if (is_empty()) return *this; > > ># 14686 "./CImg.h" >#pragma omp parallel for if (size()>=4096) ># 14686 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::log2((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_log2() const { > return CImg<Tfloat>(*this,false).log2(); > } ># 14704 "./CImg.h" > CImg<T>& log10() { > if (is_empty()) return *this; > > ># 14707 "./CImg.h" >#pragma omp parallel for if (size()>=4096) ># 14707 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::log10((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_log10() const { > return CImg<Tfloat>(*this,false).log10(); > } ># 14725 "./CImg.h" > CImg<T>& abs() { > if (is_empty()) return *this; > > ># 14728 "./CImg.h" >#pragma omp parallel for if (size()>=524288) ># 14728 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::abs(*ptrd); > return *this; > } > > > CImg<Tfloat> get_abs() const { > return CImg<Tfloat>(*this,false).abs(); > } ># 14750 "./CImg.h" > CImg<T>& sign() { > if (is_empty()) return *this; > > ># 14753 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 14753 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::sign(*ptrd); > return *this; > } > > > CImg<Tfloat> get_sign() const { > return CImg<Tfloat>(*this,false).sign(); > } ># 14772 "./CImg.h" > CImg<T>& cos() { > if (is_empty()) return *this; > > ># 14775 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14775 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::cos((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_cos() const { > return CImg<Tfloat>(*this,false).cos(); > } ># 14794 "./CImg.h" > CImg<T>& sin() { > if (is_empty()) return *this; > > ># 14797 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14797 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::sin((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sin() const { > return CImg<Tfloat>(*this,false).sin(); > } ># 14816 "./CImg.h" > CImg<T>& sinc() { > if (is_empty()) return *this; > > ># 14819 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14819 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::sinc((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sinc() const { > return CImg<Tfloat>(*this,false).sinc(); > } ># 14838 "./CImg.h" > CImg<T>& tan() { > if (is_empty()) return *this; > > ># 14841 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14841 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::tan((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_tan() const { > return CImg<Tfloat>(*this,false).tan(); > } ># 14859 "./CImg.h" > CImg<T>& cosh() { > if (is_empty()) return *this; > > ># 14862 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14862 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::cosh((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_cosh() const { > return CImg<Tfloat>(*this,false).cosh(); > } ># 14880 "./CImg.h" > CImg<T>& sinh() { > if (is_empty()) return *this; > > ># 14883 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14883 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::sinh((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_sinh() const { > return CImg<Tfloat>(*this,false).sinh(); > } ># 14901 "./CImg.h" > CImg<T>& tanh() { > if (is_empty()) return *this; > > ># 14904 "./CImg.h" >#pragma omp parallel for if (size()>=2048) ># 14904 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::tanh((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_tanh() const { > return CImg<Tfloat>(*this,false).tanh(); > } ># 14922 "./CImg.h" > CImg<T>& acos() { > if (is_empty()) return *this; > > ># 14925 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14925 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::acos((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_acos() const { > return CImg<Tfloat>(*this,false).acos(); > } ># 14943 "./CImg.h" > CImg<T>& asin() { > if (is_empty()) return *this; > > ># 14946 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14946 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::asin((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_asin() const { > return CImg<Tfloat>(*this,false).asin(); > } ># 14964 "./CImg.h" > CImg<T>& atan() { > if (is_empty()) return *this; > > ># 14967 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 14967 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::atan((double)*ptrd); > return *this; > } > > > CImg<Tfloat> get_atan() const { > return CImg<Tfloat>(*this,false).atan(); > } ># 14994 "./CImg.h" > template<typename t> > CImg<T>& atan2(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return atan2(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)std::atan2((double)*ptrd,(double)*(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)std::atan2((double)*ptrd,(double)*(ptrs++)); > } > return *this; > } > > > template<typename t> > CImg<Tfloat> get_atan2(const CImg<t>& img) const { > return CImg<Tfloat>(*this,false).atan2(img); > } ># 15029 "./CImg.h" > template<typename t> > CImg<T>& mul(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return mul(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd * *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd * *(ptrs++)); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_mul(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).mul(img); > } > > > > > > template<typename t> > CImg<T>& div(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return div(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)(*ptrd / *(ptrs++)); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)(*ptrd / *(ptrs++)); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_div(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).div(img); > } ># 15087 "./CImg.h" > CImg<T>& pow(const double p) { > if (is_empty()) return *this; > if (p==-4) { > > ># 15091 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15091 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val*val)); } > return *this; > } > if (p==-3) { > > ># 15098 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15098 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val)); } > return *this; > } > if (p==-2) { > > ># 15105 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15105 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val)); } > return *this; > } > if (p==-1) { > > ># 15112 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15112 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1.0/val); } > return *this; > } > if (p==-0.5) { > > ># 15119 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 15119 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = (T)(1/std::sqrt((double)val)); } > return *this; > } > if (p==0) return fill(1); > if (p==0.5) return sqrt(); > if (p==1) return *this; > if (p==2) return sqr(); > if (p==3) { > > ># 15130 "./CImg.h" >#pragma omp parallel for if (size()>=262144) ># 15130 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = val*val*val; } > return *this; > } > if (p==4) { > > ># 15137 "./CImg.h" >#pragma omp parallel for if (size()>=131072) ># 15137 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T val = *ptrd; *ptrd = val*val*val*val; } > return *this; > } > > ># 15143 "./CImg.h" >#pragma omp parallel for if (size()>=1024) ># 15143 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)std::pow((double)*ptrd,p); > return *this; > } > > > CImg<Tfloat> get_pow(const double p) const { > return CImg<Tfloat>(*this,false).pow(p); > } > > > > > > CImg<T>& pow(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"pow"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 15171 "./CImg.h" >#pragma omp parallel ># 15171 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 15174 "./CImg.h" >#pragma omp for collapse(3) ># 15174 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)std::pow((double)*ptrd,lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<Tfloat> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > pow(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<Tfloat> get_pow(const char *const expression) const { > return CImg<Tfloat>(*this,false).pow(expression); > } > > > > > > template<typename t> > CImg<T>& pow(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return pow(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)std::pow((double)*ptrd,(double)(*(ptrs++))); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)std::pow((double)*ptrd,(double)(*(ptrs++))); > } > return *this; > } > > > template<typename t> > CImg<Tfloat> get_pow(const CImg<t>& img) const { > return CImg<Tfloat>(*this,false).pow(img); > } > > > > > > CImg<T>& rol(const unsigned int n=1) { > if (is_empty()) return *this; > > ># 15233 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15233 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::rol(*ptrd,n); > return *this; > } > > > CImg<T> get_rol(const unsigned int n=1) const { > return (+*this).rol(n); > } > > > > > > CImg<T>& rol(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"rol"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 15261 "./CImg.h" >#pragma omp parallel ># 15261 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 15264 "./CImg.h" >#pragma omp for collapse(3) ># 15264 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<Tfloat> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > rol(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<T> get_rol(const char *const expression) const { > return (+*this).rol(expression); > } > > > > > > template<typename t> > CImg<T>& rol(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return rol(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)cimg::rol(*ptrd,(unsigned int)(*(ptrs++))); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)cimg::rol(*ptrd,(unsigned int)(*(ptrs++))); > } > return *this; > } > > > template<typename t> > CImg<T> get_rol(const CImg<t>& img) const { > return (+*this).rol(img); > } > > > > > > CImg<T>& ror(const unsigned int n=1) { > if (is_empty()) return *this; > > ># 15323 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 15323 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::ror(*ptrd,n); > return *this; > } > > > CImg<T> get_ror(const unsigned int n=1) const { > return (+*this).ror(n); > } > > > > > > CImg<T>& ror(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"ror"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 15351 "./CImg.h" >#pragma omp parallel ># 15351 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 15354 "./CImg.h" >#pragma omp for collapse(3) ># 15354 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<Tfloat> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > ror(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<T> get_ror(const char *const expression) const { > return (+*this).ror(expression); > } > > > > > > template<typename t> > CImg<T>& ror(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return ror(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = (T)cimg::ror(*ptrd,(unsigned int)(*(ptrs++))); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = (T)cimg::ror(*ptrd,(unsigned int)(*(ptrs++))); > } > return *this; > } > > > template<typename t> > CImg<T> get_ror(const CImg<t>& img) const { > return (+*this).ror(img); > } > > > > > > > CImg<T>& min(const T val) { > if (is_empty()) return *this; > > ># 15414 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 15414 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::min(*ptrd,val); > return *this; > } > > > CImg<T> get_min(const T val) const { > return (+*this).min(val); > } > > > > > > > template<typename t> > CImg<T>& min(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return min(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = cimg::min((T)*(ptrs++),*ptrd); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = cimg::min((T)*(ptrs++),*ptrd); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_min(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).min(img); > } > > > > > > > CImg<T>& min(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"min"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 15467 "./CImg.h" >#pragma omp parallel ># 15467 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 15470 "./CImg.h" >#pragma omp for collapse(3) ># 15470 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::min(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<T> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > min(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<Tfloat> get_min(const char *const expression) const { > return CImg<Tfloat>(*this,false).min(expression); > } > > > > > > > CImg<T>& max(const T val) { > if (is_empty()) return *this; > > ># 15507 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 15507 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::max(*ptrd,val); > return *this; > } > > > CImg<T> get_max(const T val) const { > return (+*this).max(val); > } > > > > > > > template<typename t> > CImg<T>& max(const CImg<t>& img) { > const unsigned long siz = size(), isiz = img.size(); > if (siz && isiz) { > if (is_overlapped(img)) return max(+img); > T *ptrd = _data, *const ptre = _data + siz; > if (siz>isiz) for (unsigned long n = siz/isiz; n; --n) > for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs<ptrs_end; ++ptrd) *ptrd = cimg::max((T)*(ptrs++),*ptrd); > for (const t *ptrs = img._data; ptrd<ptre; ++ptrd) *ptrd = cimg::max((T)*(ptrs++),*ptrd); > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_max(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this,false).max(img); > } > > > > > > > CImg<T>& max(const char *const expression) { > if (is_empty()) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"max"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); --ptrd; } > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 15560 "./CImg.h" >#pragma omp parallel ># 15560 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 15563 "./CImg.h" >#pragma omp for collapse(3) ># 15563 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::max(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } > } > } catch (CImgException&) { > CImg<T> values(_width,_height,_depth,_spectrum); > try { > values.fill(expression,true); > } catch (CImgException&) { > cimg::exception_mode() = omode; > values.load(expression); > } > max(values); > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<Tfloat> get_max(const char *const expression) const { > return CImg<Tfloat>(*this,false).max(expression); > } > > > > > T& min() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_min = _data; > T min_value = *ptr_min; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > return *ptr_min; > } > > > const T& min() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_min = _data; > T min_value = *ptr_min; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > return *ptr_min; > } > > > > > T& max() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_max = _data; > T max_value = *ptr_max; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > return *ptr_max; > } > > > const T& max() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_max = _data; > T max_value = *ptr_max; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > return *ptr_max; > } > > > > > > template<typename t> > T& min_max(t& max_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min_max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_min = _data; > T min_value = *ptr_min, max_value = min_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > max_val = (t)max_value; > return *ptr_min; > } > > > template<typename t> > const T& min_max(t& max_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "min_max(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_min = _data; > T min_value = *ptr_min, max_value = min_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > max_val = (t)max_value; > return *ptr_min; > } > > > > > > template<typename t> > T& max_min(t& min_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max_min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > T *ptr_max = _data; > T max_value = *ptr_max, min_value = max_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > min_val = (t)min_value; > return *ptr_max; > } > > > template<typename t> > const T& max_min(t& min_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "max_min(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const T *ptr_max = _data; > T max_value = *ptr_max, min_value = max_value; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > min_val = (t)min_value; > return *ptr_max; > } > > > > > > T kth_smallest(const unsigned int k) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "kth_smallest(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > CImg<T> arr(*this); > unsigned int l = 0, ir = size() - 1; > for (;;) { > if (ir<=l+1) { > if (ir==l+1 && arr[ir]<arr[l]) cimg::swap(arr[l],arr[ir]); > return arr[k]; > } else { > const unsigned int mid = (l + ir)>>1; > cimg::swap(arr[mid],arr[l+1]); > if (arr[l]>arr[ir]) cimg::swap(arr[l],arr[ir]); > if (arr[l+1]>arr[ir]) cimg::swap(arr[l+1],arr[ir]); > if (arr[l]>arr[l+1]) cimg::swap(arr[l],arr[l+1]); > unsigned int i = l + 1, j = ir; > const T pivot = arr[l+1]; > for (;;) { > do ++i; while (arr[i]<pivot); > do --j; while (arr[j]>pivot); > if (j<i) break; > cimg::swap(arr[i],arr[j]); > } > arr[l+1] = arr[j]; > arr[j] = pivot; > if (j>=k) ir = j - 1; > if (j<=k) l = i; > } > } > return 0; > } > > > > > T median() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "median(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const unsigned int s = size(); > const T res = kth_smallest(s>>1); > return (s%2)?res:((res+kth_smallest((s>>1)-1))/2); > } > > > > > Tdouble sum() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "sum(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)*ptrs; > return res; > } > > > > > Tdouble mean() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "mean(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)*ptrs; > return res/size(); > } ># 15809 "./CImg.h" > Tdouble variance(const unsigned int variance_method=1) const { > Tdouble foo; > return variance_mean(variance_method,foo); > } > > > > > > > template<typename t> > Tdouble variance_mean(const unsigned int variance_method, t& mean) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "variance_mean(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > Tdouble variance = 0, average = 0; > const unsigned long siz = size(); > switch (variance_method) { > case 0 :{ > Tdouble S = 0, S2 = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; S+=val; S2+=val*val; } > variance = (S2 - S*S/siz)/siz; > average = S; > } break; > case 1 : { > Tdouble S = 0, S2 = 0; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; S+=val; S2+=val*val; } > variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; > average = S; > } break; > case 2 : { > CImg<Tfloat> buf(*this,false); > buf.sort(); > const unsigned long siz2 = siz>>1; > const Tdouble med_i = (double)buf[siz2]; > for (Tfloat *ptrs = (buf)._data, *_maxptrs = (buf)._data + (buf).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; *ptrs = (Tfloat)cimg::abs(val - med_i); average+=val; } > buf.sort(); > const Tdouble sig = (Tdouble)(1.4828*buf[siz2]); > variance = sig*sig; > } break; > default : { > CImg<Tfloat> buf(*this,false); > const unsigned long siz2 = siz>>1; > for (Tfloat *ptrs = (buf)._data, *_maxptrs = (buf)._data + (buf).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)*ptrs; (*ptrs)=(Tfloat)((*ptrs)*val); average+=val; } > buf.sort(); > Tdouble a = 0; > const Tfloat *ptrs = buf._data; > for (unsigned long j = 0; j<siz2; ++j) a+=(Tdouble)*(ptrs++); > const Tdouble sig = (Tdouble)(2.6477*std::sqrt(a/siz2)); > variance = sig*sig; > } > } > mean = (t)(average/siz); > return variance>0?variance:0; > } ># 15876 "./CImg.h" > Tdouble variance_noise(const unsigned int variance_method=2) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "variance_noise(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned long siz = size(); > if (!siz || !_data) return 0; > if (variance_method>1) { > CImg<Tdouble> tmp(*this); > if (_depth==1) { > const Tdouble cste = 1.0/std::sqrt(20.0); > > ># 15889 "./CImg.h" >#pragma omp parallel for if (_width*_height>=262144 && _spectrum>=2) ># 15889 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > tmp(x,y,c) = cste*((Tdouble)Inc + (Tdouble)Ipc + (Tdouble)Icn + > (Tdouble)Icp - 4*(Tdouble)Icc); > } > } > } else { > const Tdouble cste = 1.0/std::sqrt(42.0); > > ># 15901 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=262144 && _spectrum>=2) ># 15901 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[27]; T& Ippp = I[0]; T& Icpp = I[1]; T& Inpp = I[2]; T& Ipcp = I[3]; T& Iccp = I[4]; T& Incp = I[5]; T& Ipnp = I[6]; T& Icnp = I[7]; T& Innp = I[8]; T& Ippc = I[9]; T& Icpc = I[10]; T& Inpc = I[11]; T& Ipcc = I[12]; T& Iccc = I[13]; T& Incc = I[14]; T& Ipnc = I[15]; T& Icnc = I[16]; T& Innc = I[17]; T& Ippn = I[18]; T& Icpn = I[19]; T& Inpn = I[20]; T& Ipcn = I[21]; T& Iccn = I[22]; T& Incn = I[23]; T& Ipnn = I[24]; T& Icnn = I[25]; T& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (T)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (T)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (T)(*this)(0,y,z,c)), (I[15] = I[16] = (T)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (T)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (T)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (T)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (T)(*this)(_n1x,y,_p1z,c)), (I[8] = (T)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (T)(*this)(_n1x,_p1y,z,c)), (I[14] = (T)(*this)(_n1x,y,z,c)), (I[17] = (T)(*this)(_n1x,_n1y,z,c)), (I[20] = (T)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (T)(*this)(_n1x,y,_n1z,c)), (I[26] = (T)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > tmp(x,y,z,c) = cste*( > (Tdouble)Incc + (Tdouble)Ipcc + (Tdouble)Icnc + (Tdouble)Icpc + > (Tdouble)Iccn + (Tdouble)Iccp - 6*(Tdouble)Iccc); > } > } > } > return tmp.variance(variance_method); > } > > > Tdouble variance = 0, S = 0, S2 = 0; > if (_depth==1) { > const Tdouble cste = 1.0/std::sqrt(20.0); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tdouble val = cste*((Tdouble)Inc + (Tdouble)Ipc + > (Tdouble)Icn + (Tdouble)Icp - 4*(Tdouble)Icc); > S+=val; S2+=val*val; > } > } else { > const Tdouble cste = 1.0/std::sqrt(42.0); > T I[27]; T& Ippp = I[0]; T& Icpp = I[1]; T& Inpp = I[2]; T& Ipcp = I[3]; T& Iccp = I[4]; T& Incp = I[5]; T& Ipnp = I[6]; T& Icnp = I[7]; T& Innp = I[8]; T& Ippc = I[9]; T& Icpc = I[10]; T& Inpc = I[11]; T& Ipcc = I[12]; T& Iccc = I[13]; T& Incc = I[14]; T& Ipnc = I[15]; T& Icnc = I[16]; T& Innc = I[17]; T& Ippn = I[18]; T& Icpn = I[19]; T& Inpn = I[20]; T& Ipcn = I[21]; T& Iccn = I[22]; T& Incn = I[23]; T& Ipnn = I[24]; T& Icnn = I[25]; T& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (T)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (T)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (T)(*this)(0,y,z,c)), (I[15] = I[16] = (T)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (T)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (T)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (T)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (T)(*this)(_n1x,y,_p1z,c)), (I[8] = (T)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (T)(*this)(_n1x,_p1y,z,c)), (I[14] = (T)(*this)(_n1x,y,z,c)), (I[17] = (T)(*this)(_n1x,_n1y,z,c)), (I[20] = (T)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (T)(*this)(_n1x,y,_n1z,c)), (I[26] = (T)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tdouble val = cste * > ((Tdouble)Incc + (Tdouble)Ipcc + (Tdouble)Icnc + > (Tdouble)Icpc + > (Tdouble)Iccn + (Tdouble)Iccp - 6*(Tdouble)Iccc); > S+=val; S2+=val*val; > } > } > if (variance_method) variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; > else variance = (S2 - S*S/siz)/siz; > return variance>0?variance:0; > } > > > > > > template<typename t> > Tdouble MSE(const CImg<t>& img) const { > if (img.size()!=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "MSE(): Instance and specified image (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data); > Tdouble vMSE = 0; > const t* ptr2 = img._data; > for (T *ptr1 = (*this)._data, *_maxptr1 = (*this)._data + (*this).size(); ptr1<_maxptr1; ++ptr1) { > const Tdouble diff = (Tdouble)*ptr1 - (Tdouble)*(ptr2++); > vMSE+=diff*diff; > } > const unsigned long siz = img.size(); > if (siz) vMSE/=siz; > return vMSE; > } > > > > > > > template<typename t> > Tdouble PSNR(const CImg<t>& img, const Tdouble max_value=255) const { > const Tdouble vMSE = (Tdouble)std::sqrt(MSE(img)); > return (vMSE!=0)?(Tdouble)(20*std::log10(max_value/vMSE)):(Tdouble)(cimg::type<Tdouble>::max()); > } ># 15982 "./CImg.h" > double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0) const { > if (!expression) return 0; > return _cimg_math_parser(*this,expression,"eval")(x,y,z,c); > } > > > > > > > template<typename t> > CImg<doubleT> eval(const char *const expression, const CImg<t>& xyzc) const { > CImg<doubleT> res(1,xyzc.size()/4); > if (!expression) return res.fill(0); > _cimg_math_parser mp(*this,expression,"eval"); > > ># 15998 "./CImg.h" >#pragma omp parallel if (res._height>=512 && std::strlen(expression)>=6) ># 15998 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 16001 "./CImg.h" >#pragma omp for ># 16001 "./CImg.h" > > for (unsigned int i = 0; i<res._height; ++i) { > const unsigned int i4 = 4*i; > const double x = (double)xyzc[i4], y = (double)xyzc[i4+1], z = (double)xyzc[i4+2], c = (double)xyzc[i4+3]; > res[i] = lmp(x,y,z,c); > } > } > > > > > > > > return res; > } > > > > > > > CImg<Tdouble> get_stats(const unsigned int variance_method=1) const { > if (is_empty()) return CImg<doubleT>(); > const unsigned long siz = size(); > const T *const odata = _data; > const T *pm = odata, *pM = odata; > Tdouble S = 0, S2 = 0; > T m = *pm, M = m; > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > const Tdouble _val = (Tdouble)val; > if (val<m) { m = val; pm = ptrs; } > if (val>M) { M = val; pM = ptrs; } > S+=_val; > S2+=_val*_val; > } > const Tdouble > mean_value = S/siz, > _variance_value = variance_method==0?(S2 - S*S/siz)/siz: > (variance_method==1?(siz>1?(S2 - S*S/siz)/(siz - 1):0): > variance(variance_method)), > variance_value = _variance_value>0?_variance_value:0; > int > xm = 0, ym = 0, zm = 0, cm = 0, > xM = 0, yM = 0, zM = 0, cM = 0; > contains(*pm,xm,ym,zm,cm); > contains(*pM,xM,yM,zM,cM); > return CImg<Tdouble>(1,12).fill((Tdouble)m,(Tdouble)M,mean_value,variance_value, > (Tdouble)xm,(Tdouble)ym,(Tdouble)zm,(Tdouble)cm, > (Tdouble)xM,(Tdouble)yM,(Tdouble)zM,(Tdouble)cM); > } > > > CImg<T>& stats(const unsigned int variance_method=1) { > return get_stats(variance_method).move_to(*this); > } ># 16073 "./CImg.h" > Tdouble magnitude(const int magnitude_type=2) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "magnitude(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > switch (magnitude_type) { > case -1 : { > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) { const Tdouble val = (Tdouble)cimg::abs(*ptrs); if (val>res) res = val; } > } break; > case 1 : { > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)cimg::abs(*ptrs); > } break; > default : { > for (T *ptrs = (*this)._data, *_maxptrs = (*this)._data + (*this).size(); ptrs<_maxptrs; ++ptrs) res+=(Tdouble)cimg::sqr(*ptrs); > res = (Tdouble)std::sqrt(res); > } > } > return res; > } > > > > > Tdouble trace() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "trace(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > Tdouble res = 0; > for (int k = 0; k<(int)((*this)._width); ++k) res+=(Tdouble)(*this)(k,k); > return res; > } > > > > > Tdouble det() const { > if (is_empty() || _width!=_height || _depth!=1 || _spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "det(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > switch (_width) { > case 1 : return (Tdouble)((*this)(0,0)); > case 2 : return (Tdouble)((*this)(0,0))*(Tdouble)((*this)(1,1)) - (Tdouble)((*this)(0,1))*(Tdouble)((*this)(1,0)); > case 3 : { > const Tdouble > a = (Tdouble)_data[0], d = (Tdouble)_data[1], g = (Tdouble)_data[2], > b = (Tdouble)_data[3], e = (Tdouble)_data[4], h = (Tdouble)_data[5], > c = (Tdouble)_data[6], f = (Tdouble)_data[7], i = (Tdouble)_data[8]; > return i*a*e - a*h*f - i*b*d + b*g*f + c*d*h - c*g*e; > } > default : { > CImg<Tfloat> lu(*this); > CImg<uintT> indx; > bool d; > lu._LU(indx,d); > Tdouble res = d?(Tdouble)1:(Tdouble)-1; > for (int i = 0; i<(int)((lu)._width); ++i) res*=lu(i,i); > return res; > } > } > return 0; > } > > > > > > template<typename t> > Tdouble dot(const CImg<t>& img) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "dot(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!img) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "dot(): Empty specified image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int nb = cimg::min(size(),img.size()); > Tdouble res = 0; > for (unsigned int off = 0; off<nb; ++off) res+=(Tdouble)_data[off]*(Tdouble)img[off]; > return res; > } > > > > > > > > CImg<T> get_vector_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { > CImg<T> res; > if (res._height!=_spectrum) res.assign(1,_spectrum); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const T *ptrs = data(x,y,z); > T *ptrd = res._data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *(ptrd++) = *ptrs; ptrs+=whd; } > return res; > } ># 16183 "./CImg.h" > CImg<T> get_matrix_at(const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) const { > const int n = (int)std::sqrt((double)_spectrum); > const T *ptrs = data(x,y,z,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > CImg<T> res(n,n); > T *ptrd = res._data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *(ptrd++) = *ptrs; ptrs+=whd; } > return res; > } > > > > > > > > CImg<T> get_tensor_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { > const T *ptrs = data(x,y,z,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > if (_spectrum==6) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd),*(ptrs+3*whd),*(ptrs+4*whd),*(ptrs+5*whd)); > if (_spectrum==3) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd)); > return tensor(*ptrs); > } ># 16214 "./CImg.h" > template<typename t> > CImg<T>& set_vector_at(const CImg<t>& vec, const unsigned int x, const unsigned int y=0, const unsigned int z=0) { > if (x<_width && y<_height && z<_depth) { > const t *ptrs = vec._data; > const unsigned long whd = (unsigned long)_width*_height*_depth; > T *ptrd = data(x,y,z); > for (unsigned int k = cimg::min((unsigned int)vec.size(),_spectrum); k; --k) { *ptrd = (T)*(ptrs++); ptrd+=whd; } > } > return *this; > } ># 16232 "./CImg.h" > template<typename t> > CImg<T>& set_matrix_at(const CImg<t>& mat, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { > return set_vector_at(mat,x,y,z); > } ># 16244 "./CImg.h" > template<typename t> > CImg<T>& set_tensor_at(const CImg<t>& ten, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { > T *ptrd = data(x,y,z,0); > const unsigned long siz = (unsigned long)_width*_height*_depth; > if (ten._height==2) { > *ptrd = (T)ten[0]; ptrd+=siz; > *ptrd = (T)ten[1]; ptrd+=siz; > *ptrd = (T)ten[3]; > } > else { > *ptrd = (T)ten[0]; ptrd+=siz; > *ptrd = (T)ten[1]; ptrd+=siz; > *ptrd = (T)ten[2]; ptrd+=siz; > *ptrd = (T)ten[4]; ptrd+=siz; > *ptrd = (T)ten[5]; ptrd+=siz; > *ptrd = (T)ten[8]; > } > return *this; > } > > > > > > CImg<T>& vector() { > return unroll('y'); > } > > > CImg<T> get_vector() const { > return get_unroll('y'); > } > > > > > CImg<T>& matrix() { > const unsigned long siz = size(); > switch (siz) { > case 1 : break; > case 4 : _width = _height = 2; break; > case 9 : _width = _height = 3; break; > case 16 : _width = _height = 4; break; > case 25 : _width = _height = 5; break; > case 36 : _width = _height = 6; break; > case 49 : _width = _height = 7; break; > case 64 : _width = _height = 8; break; > case 81 : _width = _height = 9; break; > case 100 : _width = _height = 10; break; > default : { > unsigned long i = 11, i2 = i*i; > while (i2<siz) { i2+=2*i + 1; ++i; } > if (i2==siz) _width = _height = i; > else throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "matrix(): Invalid instance size %u (should be a square integer).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > siz); > } > } > return *this; > } > > > CImg<T> get_matrix() const { > return (+*this).matrix(); > } > > > > > CImg<T>& tensor() { > return get_tensor().move_to(*this); > } > > > CImg<T> get_tensor() const { > CImg<T> res; > const unsigned long siz = size(); > switch (siz) { > case 1 : break; > case 3 : > res.assign(2,2); > res(0,0) = (*this)(0); > res(1,0) = res(0,1) = (*this)(1); > res(1,1) = (*this)(2); > break; > case 6 : > res.assign(3,3); > res(0,0) = (*this)(0); > res(1,0) = res(0,1) = (*this)(1); > res(2,0) = res(0,2) = (*this)(2); > res(1,1) = (*this)(3); > res(2,1) = res(1,2) = (*this)(4); > res(2,2) = (*this)(5); > break; > default : > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "tensor(): Invalid instance size (does not define a 1x1, 2x2 or 3x3 tensor).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > } > return res; > } > > > > > > CImg<T>& diagonal() { > return get_diagonal().move_to(*this); > } > > > CImg<T> get_diagonal() const { > if (is_empty()) return *this; > CImg<T> res(size(),size(),1,1,0); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) res(off,off) = (*this)(off); > return res; > } > > > > > > CImg<T>& identity_matrix() { > return identity_matrix(cimg::max(_width,_height)).move_to(*this); > } > > > CImg<T> get_identity_matrix() const { > return identity_matrix(cimg::max(_width,_height)); > } > > > > > > > CImg<T>& sequence(const T a0, const T a1) { > if (is_empty()) return *this; > const unsigned int siz = size() - 1; > T* ptr = _data; > if (siz) { > const Tdouble delta = (Tdouble)a1 - (Tdouble)a0; > for (unsigned long l = 0, _maxl = (*this).size(); l<_maxl; ++l) *(ptr++) = (T)(a0 + delta*l/siz); > } else *ptr = a0; > return *this; > } > > > CImg<T> get_sequence(const T a0, const T a1) const { > return (+*this).sequence(a0,a1); > } > > > > > > CImg<T>& transpose() { > if (_width==1) { _width = _height; _height = 1; return *this; } > if (_height==1) { _height = _width; _width = 1; return *this; } > if (_width==_height) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = y; x<width(); ++x) cimg::swap((*this)(x,y,z,c),(*this)(y,x,z,c)); > return *this; > } > return get_transpose().move_to(*this); > } > > > CImg<T> get_transpose() const { > return get_permute_axes("yxzc"); > } > > > > > > > template<typename t> > CImg<T>& cross(const CImg<t>& img) { > if (_width!=1 || _height<3 || img._width!=1 || img._height<3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "cross(): Instance and/or specified image (%u,%u,%u,%u,%p) are not 3d vectors.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data); > > const T x = (*this)[0], y = (*this)[1], z = (*this)[2]; > (*this)[0] = (T)(y*img[2] - z*img[1]); > (*this)[1] = (T)(z*img[0] - x*img[2]); > (*this)[2] = (T)(x*img[1] - y*img[0]); > return *this; > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_cross(const CImg<t>& img) const { > return CImg<typename cimg::superset<T,t>::type>(*this).cross(img); > } > > > > > > > > CImg<T>& invert(const bool use_LU=true) { > if (_width!=_height || _depth!=1 || _spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "invert(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 16476 "./CImg.h" > const double dete = _width>3?-1.0:det(); > if (dete!=0.0 && _width==2) { > const double > a = _data[0], c = _data[1], > b = _data[2], d = _data[3]; > _data[0] = (T)(d/dete); _data[1] = (T)(-c/dete); > _data[2] = (T)(-b/dete); _data[3] = (T)(a/dete); > } else if (dete!=0.0 && _width==3) { > const double > a = _data[0], d = _data[1], g = _data[2], > b = _data[3], e = _data[4], h = _data[5], > c = _data[6], f = _data[7], i = _data[8]; > _data[0] = (T)((i*e-f*h)/dete), _data[1] = (T)((g*f-i*d)/dete), _data[2] = (T)((d*h-g*e)/dete); > _data[3] = (T)((h*c-i*b)/dete), _data[4] = (T)((i*a-c*g)/dete), _data[5] = (T)((g*b-a*h)/dete); > _data[6] = (T)((b*f-e*c)/dete), _data[7] = (T)((d*c-a*f)/dete), _data[8] = (T)((a*e-d*b)/dete); > } else { > if (use_LU) { > CImg<Tfloat> A(*this), indx, col(1,_width); > bool d; > A._LU(indx,d); > for (int j = 0; j<(int)((*this)._width); ++j) { > col.fill(0); > col(j) = 1; > col._solve(A,indx); > for (int i = 0; i<(int)((*this)._width); ++i) (*this)(j,i) = (T)col(i); > } > } else { > CImg<Tfloat> U(_width,_width), S(1,_width), V(_width,_width); > SVD(U,S,V,false); > U.transpose(); > for (int k = 0; k<(int)((S)._height); ++k) if (S[k]!=0) S[k]=1/S[k]; > S.diagonal(); > *this = V*S*U; > } > } > > return *this; > } > > > CImg<Tfloat> get_invert(const bool use_LU=true) const { > return CImg<Tfloat>(*this,false).invert(use_LU); > } > > > > > CImg<T>& pseudoinvert() { > return get_pseudoinvert().move_to(*this); > } > > > CImg<Tfloat> get_pseudoinvert() const { > CImg<Tfloat> U, S, V; > SVD(U,S,V); > const Tfloat tolerance = (sizeof(Tfloat)<=4?5.96e-8f:1.11e-16f)*cimg::max(_width,_height)*S.max(); > for (int x = 0; x<(int)((V)._width); ++x) { > const Tfloat s = S(x), invs = s>tolerance?1/s:(Tfloat)0; > for (int y = 0; y<(int)((V)._height); ++y) V(x,y)*=invs; > } > return V*U.transpose(); > } > > > > > > > template<typename t> > CImg<T>& solve(const CImg<t>& A) { > if (_width!=1 || _depth!=1 || _spectrum!=1 || _height!=A._height || A._depth!=1 || A._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "solve(): Instance and specified matrix (%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > A._width,A._height,A._depth,A._spectrum,A._data); > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > if (A._width==A._height) { ># 16580 "./CImg.h" > CImg<Ttfloat> lu(A,false); > CImg<Ttfloat> indx; > bool d; > lu._LU(indx,d); > _solve(lu,indx); > > } else { ># 16612 "./CImg.h" > assign(A.get_pseudoinvert()*(*this)); > > } > return *this; > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_solve(const CImg<t>& A) const { > return CImg<typename cimg::superset2<T,t,float>::type>(*this,false).solve(A); > } > > template<typename t, typename ti> > CImg<T>& _solve(const CImg<t>& A, const CImg<ti>& indx) { > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > const int N = size(); > int ii = -1; > Ttfloat sum; > for (int i = 0; i<N; ++i) { > const int ip = (int)indx[i]; > Ttfloat sum = (*this)(ip); > (*this)(ip) = (*this)(i); > if (ii>=0) for (int j = ii; j<=i-1; ++j) sum-=A(j,i)*(*this)(j); > else if (sum!=0) ii = i; > (*this)(i) = (T)sum; > } > for (int i = N - 1; i>=0; --i) { > sum = (*this)(i); > for (int j = i + 1; j<N; ++j) sum-=A(j,i)*(*this)(j); > (*this)(i) = (T)(sum/A(i,i)); > } > return *this; > } ># 16653 "./CImg.h" > template<typename t> > CImg<T>& solve_tridiagonal(const CImg<t>& A) { > const unsigned int siz = (int)size(); > if (A._width!=3 || A._height!=siz) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "solve_tridiagonal(): Instance and tridiagonal matrix " > "(%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > A._width,A._height,A._depth,A._spectrum,A._data); > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > const Ttfloat epsilon = 1e-4f; > CImg<Ttfloat> B = A.get_column(1), V(*this,false); > for (int i = 1; i<(int)siz; ++i) { > const Ttfloat m = A(0,i)/(B[i-1]?B[i-1]:epsilon); > B[i] -= m*A(2,i-1); > V[i] -= m*V[i-1]; > } > (*this)[siz-1] = (T)(V[siz-1]/(B[siz-1]?B[siz-1]:epsilon)); > for (int i = (int)siz - 2; i>=0; --i) (*this)[i] = (T)((V[i] - A(2,i)*(*this)[i+1])/(B[i]?B[i]:epsilon)); > return *this; > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_solve_tridiagonal(const CImg<t>& A) const { > return CImg<typename cimg::superset2<T,t,float>::type>(*this,false).solve_tridiagonal(A); > } > > > > > > > template<typename t> > const CImg<T>& eigen(CImg<t>& val, CImg<t> &vec) const { > if (is_empty()) { val.assign(); vec.assign(); } > else { > if (_width!=_height || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (val.size()<(unsigned long)_width) val.assign(1,_width); > if (vec.size()<(unsigned long)_width*_width) vec.assign(_width,_width); > switch (_width) { > case 1 : { val[0] = (t)(*this)[0]; vec[0] = (t)1; } break; > case 2 : { > const double a = (*this)[0], b = (*this)[1], c = (*this)[2], d = (*this)[3], e = a + d; > double f = e*e - 4*(a*d - b*c); > if (f<0) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Complex eigenvalues found.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > f = std::sqrt(f); > const double l1 = 0.5*(e-f), l2 = 0.5*(e+f); > const double theta1 = std::atan2(l2-a,b), theta2 = std::atan2(l1-a,b); > val[0] = (t)l2; > val[1] = (t)l1; > vec(0,0) = (t)std::cos(theta1); > vec(0,1) = (t)std::sin(theta1); > vec(1,0) = (t)std::cos(theta2); > vec(1,1) = (t)std::sin(theta2); > } break; > default : > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Eigenvalues computation of general matrices is limited to 2x2 matrices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > } > } > return *this; > } > > > > > > CImgList<Tfloat> get_eigen() const { > CImgList<Tfloat> res(2); > eigen(res[0],res[1]); > return res; > } > > > > > > > template<typename t> > const CImg<T>& symmetric_eigen(CImg<t>& val, CImg<t>& vec) const { > if (is_empty()) { val.assign(); vec.assign(); } > else { ># 16768 "./CImg.h" > if (_width!=_height || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "eigen(): Instance is not a square matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > val.assign(1,_width); > if (vec._data) vec.assign(_width,_width); > if (_width<3) { > eigen(val,vec); > if (_width==2) { vec[1] = -vec[2]; vec[3] = vec[0]; } > return *this; > } > CImg<t> V(_width,_width); > SVD(vec,val,V,false); > bool is_ambiguous = false; > float eig = 0; > for (int p = 0; p<(int)((val)._height); ++p) { > if (val[p]>eig) eig = (float)val[p]; > t scal = 0; > for (int y = 0; y<(int)((vec)._height); ++y) scal+=vec(p,y)*V(p,y); > if (cimg::abs(scal)<0.9f) is_ambiguous = true; > if (scal<0) val[p] = -val[p]; > } > if (is_ambiguous) { > ++(eig*=2); > SVD(vec,val,V,false,40,eig); > val-=eig; > } > CImg<intT> permutations; > CImg<t> tmp(_width); > val.sort(permutations,false); > for (int k = 0; k<(int)((vec)._height); ++k) { > for (int y = 0; y<(int)((permutations)._height); ++y) tmp(y) = vec(permutations(y),k); > std::memcpy(vec.data(0,k),tmp._data,sizeof(t)*_width); > } > > } > return *this; > } > > > > > > CImgList<Tfloat> get_symmetric_eigen() const { > CImgList<Tfloat> res(2); > symmetric_eigen(res[0],res[1]); > return res; > } > > > > > > > template<typename t> > CImg<T>& sort(CImg<t>& permutations, const bool is_increasing=true) { > permutations.assign(_width,_height,_depth,_spectrum); > if (is_empty()) return *this; > for (unsigned long off = 0, _maxoff = (permutations).size(); off<_maxoff; ++off) permutations[off] = (t)off; > return _quicksort(0,size()-1,permutations,is_increasing,true); > } > > > template<typename t> > CImg<T> get_sort(CImg<t>& permutations, const bool is_increasing=true) const { > return (+*this).sort(permutations,is_increasing); > } ># 16847 "./CImg.h" > CImg<T>& sort(const bool is_increasing=true, const char axis=0) { > if (is_empty()) return *this; > CImg<uintT> perm; > switch (cimg::uncase(axis)) { > case 0 : > _quicksort(0,size()-1,perm,is_increasing,false); > break; > case 'x' : { > perm.assign(_width); > get_crop(0,0,0,0,_width-1,0,0,0).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(perm[x],y,z,c); > } break; > case 'y' : { > perm.assign(_height); > get_crop(0,0,0,0,0,_height-1,0,0).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(x,perm[y],z,c); > } break; > case 'z' : { > perm.assign(_depth); > get_crop(0,0,0,0,0,0,_depth-1,0).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(x,y,perm[z],c); > } break; > case 'c' : { > perm.assign(_spectrum); > get_crop(0,0,0,0,0,0,0,_spectrum-1).sort(perm,is_increasing); > CImg<T> img(*this,false); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y,z,c) = img(x,y,z,perm[c]); > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "sort(): Invalid specified axis '%c' " > "(should be { x | y | z | c }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),axis); > } > return *this; > } > > > CImg<T> get_sort(const bool is_increasing=true, const char axis=0) const { > return (+*this).sort(is_increasing,axis); > } > > template<typename t> > CImg<T>& _quicksort(const int indm, const int indM, CImg<t>& permutations, const bool is_increasing, const bool is_permutations) { > if (indm<indM) { > const int mid = (indm + indM)/2; > if (is_increasing) { > if ((*this)[indm]>(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > if ((*this)[mid]>(*this)[indM]) { > cimg::swap((*this)[indM],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); > } > if ((*this)[indm]>(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > } else { > if ((*this)[indm]<(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > if ((*this)[mid]<(*this)[indM]) { > cimg::swap((*this)[indM],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); > } > if ((*this)[indm]<(*this)[mid]) { > cimg::swap((*this)[indm],(*this)[mid]); if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); > } > } > if (indM - indm>=3) { > const T pivot = (*this)[mid]; > int i = indm, j = indM; > if (is_increasing) { > do { > while ((*this)[i]<pivot) ++i; > while ((*this)[j]>pivot) --j; > if (i<=j) { > if (is_permutations) cimg::swap(permutations[i],permutations[j]); > cimg::swap((*this)[i++],(*this)[j--]); > } > } while (i<=j); > } else { > do { > while ((*this)[i]>pivot) ++i; > while ((*this)[j]<pivot) --j; > if (i<=j) { > if (is_permutations) cimg::swap(permutations[i],permutations[j]); > cimg::swap((*this)[i++],(*this)[j--]); > } > } while (i<=j); > } > if (indm<j) _quicksort(indm,j,permutations,is_increasing,is_permutations); > if (i<indM) _quicksort(i,indM,permutations,is_increasing,is_permutations); > } > } > return *this; > } ># 16963 "./CImg.h" > template<typename t> > const CImg<T>& SVD(CImg<t>& U, CImg<t>& S, CImg<t>& V, const bool sorting=true, > const unsigned int max_iteration=40, const float lambda=0) const { > if (is_empty()) { U.assign(); S.assign(); V.assign(); } > else { > U = *this; > if (lambda!=0) { > const unsigned int delta = cimg::min(U._width,U._height); > for (unsigned int i = 0; i<delta; ++i) U(i,i) = (t)(U(i,i) + lambda); > } > if (S.size()<_width) S.assign(1,_width); > if (V._width<_width || V._height<_height) V.assign(_width,_width); > CImg<t> rv1(_width); > t anorm = 0, c, f, g = 0, h, s, scale = 0; > int l = 0, nm = 0; > > for (int i = 0; i<(int)((U)._width); ++i) { > l = i+1; rv1[i] = scale*g; g = s = scale = 0; > if (i<height()) { > for (int k = i; k<height(); ++k) scale+= cimg::abs(U(i,k)); > if (scale) { > for (int k = i; k<height(); ++k) { U(i,k)/=scale; s+= U(i,k)*U(i,k); } > f = U(i,i); g = (t)((f>=0?-1:1)*std::sqrt(s)); h=f*g-s; U(i,i) = f-g; > for (int j = l; j<width(); ++j) { > s = 0; > for (int k=i; k<height(); ++k) s+= U(i,k)*U(j,k); > f = s/h; > for (int k = i; k<height(); ++k) U(j,k)+= f*U(i,k); > } > for (int k = i; k<height(); ++k) U(i,k)*= scale; > } > } > S[i]=scale*g; > > g = s = scale = 0; > if (i<height() && i!=width()-1) { > for (int k = l; k<width(); ++k) scale+=cimg::abs(U(k,i)); > if (scale) { > for (int k = l; k<width(); ++k) { U(k,i)/= scale; s+= U(k,i)*U(k,i); } > f = U(l,i); g = (t)((f>=0?-1:1)*std::sqrt(s)); h = f*g-s; U(l,i) = f-g; > for (int k = l; k<width(); ++k) rv1[k]=U(k,i)/h; > for (int j = l; j<height(); ++j) { > s = 0; > for (int k = l; k<width(); ++k) s+= U(k,j)*U(k,i); > for (int k = l; k<width(); ++k) U(k,j)+= s*rv1[k]; > } > for (int k = l; k<width(); ++k) U(k,i)*= scale; > } > } > anorm = (t)cimg::max((float)anorm,(float)(cimg::abs(S[i])+cimg::abs(rv1[i]))); > } > > for (int i = width()-1; i>=0; --i) { > if (i<width()-1) { > if (g) { > for (int j = l; j<width(); ++j) V(i,j) =(U(j,i)/U(l,i))/g; > for (int j = l; j<width(); ++j) { > s = 0; > for (int k = l; k<width(); ++k) s+= U(k,i)*V(j,k); > for (int k = l; k<width(); ++k) V(j,k)+= s*V(i,k); > } > } > for (int j = l; j<width(); ++j) V(j,i) = V(i,j) = (t)0.0; > } > V(i,i) = (t)1.0; g = rv1[i]; l = i; > } > > for (int i = cimg::min(width(),height())-1; i>=0; --i) { > l = i+1; g = S[i]; > for (int j = l; j<width(); ++j) U(j,i) = 0; > if (g) { > g = 1/g; > for (int j = l; j<width(); ++j) { > s = 0; for (int k = l; k<height(); ++k) s+= U(i,k)*U(j,k); > f = (s/U(i,i))*g; > for (int k = i; k<height(); ++k) U(j,k)+= f*U(i,k); > } > for (int j = i; j<height(); ++j) U(i,j)*= g; > } else for (int j = i; j<height(); ++j) U(i,j) = 0; > ++U(i,i); > } > > for (int k = width()-1; k>=0; --k) { > for (unsigned int its = 0; its<max_iteration; ++its) { > bool flag = true; > for (l = k; l>=1; --l) { > nm = l-1; > if ((cimg::abs(rv1[l])+anorm)==anorm) { flag = false; break; } > if ((cimg::abs(S[nm])+anorm)==anorm) break; > } > if (flag) { > c = 0; s = 1; > for (int i = l; i<=k; ++i) { > f = s*rv1[i]; rv1[i] = c*rv1[i]; > if ((cimg::abs(f)+anorm)==anorm) break; > g = S[i]; h = (t)cimg::_pythagore(f,g); S[i] = h; h = 1/h; c = g*h; s = -f*h; > for (int j = 0; j<(int)((U)._height); ++j) { const t y = U(nm,j), z = U(i,j); U(nm,j) = y*c + z*s; U(i,j) = z*c - y*s; } > } > } > const t z = S[k]; > if (l==k) { if (z<0) { S[k] = -z; for (int j = 0; j<(int)((U)._width); ++j) V(k,j) = -V(k,j); } break; } > nm = k-1; > t x = S[l], y = S[nm]; > g = rv1[nm]; h = rv1[k]; > f = ((y-z)*(y+z)+(g-h)*(g+h))/(2*h*y); > g = (t)cimg::_pythagore(f,1.0); > f = ((x-z)*(x+z)+h*((y/(f+ (f>=0?g:-g)))-h))/x; > c = s = 1; > for (int j = l; j<=nm; ++j) { > const int i = j+1; > g = rv1[i]; h = s*g; g = c*g; > t y = S[i]; > t z = (t)cimg::_pythagore(f,h); > rv1[j] = z; c = f/z; s = h/z; > f = x*c+g*s; g = g*c-x*s; h = y*s; y*=c; > for (int jj = 0; jj<(int)((U)._width); ++jj) { const t x = V(j,jj), z = V(i,jj); V(j,jj) = x*c + z*s; V(i,jj) = z*c - x*s; } > z = (t)cimg::_pythagore(f,h); S[j] = z; > if (z) { z = 1/z; c = f*z; s = h*z; } > f = c*g+s*y; x = c*y-s*g; > for (int jj = 0; jj<(int)((U)._height); ++jj) { const t y = U(j,jj); z = U(i,jj); U(j,jj) = y*c + z*s; U(i,jj) = z*c - y*s; } > } > rv1[l] = 0; rv1[k]=f; S[k]=x; > } > } > > if (sorting) { > CImg<intT> permutations; > CImg<t> tmp(_width); > S.sort(permutations,false); > for (int k = 0; k<(int)((U)._height); ++k) { > for (int y = 0; y<(int)((permutations)._height); ++y) tmp(y) = U(permutations(y),k); > std::memcpy(U.data(0,k),tmp._data,sizeof(t)*_width); > } > for (int k = 0; k<(int)((V)._height); ++k) { > for (int y = 0; y<(int)((permutations)._height); ++y) tmp(y) = V(permutations(y),k); > std::memcpy(V.data(0,k),tmp._data,sizeof(t)*_width); > } > } > } > return *this; > } > > > > > > CImgList<Tfloat> get_SVD(const bool sorting=true, > const unsigned int max_iteration=40, const float lambda=0) const { > CImgList<Tfloat> res(3); > SVD(res[0],res[1],res[2],sorting,max_iteration,lambda); > return res; > } > > > template<typename t> > CImg<T>& _LU(CImg<t>& indx, bool& d) { > const int N = width(); > int imax = 0; > CImg<Tfloat> vv(N); > indx.assign(N); > d = true; > for (int i = 0; i<(int)((*this)._width); ++i) { > Tfloat vmax = 0; > for (int j = 0; j<(int)((*this)._width); ++j) { > const Tfloat tmp = cimg::abs((*this)(j,i)); > if (tmp>vmax) vmax = tmp; > } > if (vmax==0) { indx.fill(0); return fill(0); } > vv[i] = 1/vmax; > } > for (int j = 0; j<(int)((*this)._width); ++j) { > for (int i = 0; i<j; ++i) { > Tfloat sum=(*this)(j,i); > for (int k = 0; k<i; ++k) sum-=(*this)(k,i)*(*this)(j,k); > (*this)(j,i) = (T)sum; > } > Tfloat vmax = 0; > for (int i = j; i<width(); ++i) { > Tfloat sum=(*this)(j,i); > for (int k = 0; k<j; ++k) sum-=(*this)(k,i)*(*this)(j,k); > (*this)(j,i) = (T)sum; > const Tfloat tmp = vv[i]*cimg::abs(sum); > if (tmp>=vmax) { vmax=tmp; imax=i; } > } > if (j!=imax) { > for (int k = 0; k<(int)((*this)._width); ++k) cimg::swap((*this)(k,imax),(*this)(k,j)); > d =!d; > vv[imax] = vv[j]; > } > indx[j] = (t)imax; > if ((*this)(j,j)==0) (*this)(j,j) = (T)1e-20; > if (j<N) { > const Tfloat tmp = 1/(Tfloat)(*this)(j,j); > for (int i=j+1; i<N; ++i) (*this)(j,i) = (T)((*this)(j,i)*tmp); > } > } > return *this; > } ># 17171 "./CImg.h" > template<typename tf, typename t> > static CImg<T> dijkstra(const tf& distance, const unsigned int nb_nodes, > const unsigned int starting_node, const unsigned int ending_node, > CImg<t>& previous_node) { > if (starting_node>=nb_nodes) > throw CImgArgumentException("CImg<%s>::dijkstra(): Specified indice of starting node %u is higher than number of nodes %u.", > pixel_type(),starting_node,nb_nodes); > CImg<T> dist(1,nb_nodes,1,1,cimg::type<T>::max()); > dist(starting_node) = 0; > previous_node.assign(1,nb_nodes,1,1,(t)-1); > previous_node(starting_node) = (t)starting_node; > CImg<uintT> Q(nb_nodes); > for (int u = 0; u<(int)((Q)._width); ++u) Q(u) = u; > cimg::swap(Q(starting_node),Q(0)); > unsigned int sizeQ = nb_nodes; > while (sizeQ) { > > const unsigned int umin = Q(0); > if (umin==ending_node) sizeQ = 0; > else { > const T dmin = dist(umin); > const T infty = cimg::type<T>::max(); > for (unsigned int q = 1; q<sizeQ; ++q) { > const unsigned int v = Q(q); > const T d = (T)distance(v,umin); > if (d<infty) { > const T alt = dmin + d; > if (alt<dist(v)) { > dist(v) = alt; > previous_node(v) = (t)umin; > const T distpos = dist(Q(q)); > for (unsigned int pos = q, par = 0; pos && distpos<dist(Q(par=(pos+1)/2-1)); pos=par) cimg::swap(Q(pos),Q(par)); > } > } > } > > Q(0) = Q(--sizeQ); > const T distpos = dist(Q(0)); > for (unsigned int pos = 0, left = 0, right = 0; > ((right=2*(pos+1),(left=right-1))<sizeQ && distpos>dist(Q(left))) || (right<sizeQ && distpos>dist(Q(right)));) { > if (right<sizeQ) { > if (dist(Q(left))<dist(Q(right))) { cimg::swap(Q(pos),Q(left)); pos = left; } > else { cimg::swap(Q(pos),Q(right)); pos = right; } > } else { cimg::swap(Q(pos),Q(left)); pos = left; } > } > } > } > return dist; > } > > > template<typename tf, typename t> > static CImg<T> dijkstra(const tf& distance, const unsigned int nb_nodes, > const unsigned int starting_node, const unsigned int ending_node=~0U) { > CImg<uintT> foo; > return dijkstra(distance,nb_nodes,starting_node,ending_node,foo); > } ># 17237 "./CImg.h" > template<typename t> > CImg<T>& dijkstra(const unsigned int starting_node, const unsigned int ending_node, CImg<t>& previous_node) { > return get_dijkstra(starting_node,ending_node,previous_node).move_to(*this); > } > > > template<typename t> > CImg<T> get_dijkstra(const unsigned int starting_node, const unsigned int ending_node, CImg<t>& previous_node) const { > if (_width!=_height || _depth!=1 || _spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "dijkstra(): Instance is not a graph adjacency matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return dijkstra(*this,_width,starting_node,ending_node,previous_node); > } > > > CImg<T>& dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) { > return get_dijkstra(starting_node,ending_node).move_to(*this); > } > > > CImg<Tfloat> get_dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) const { > CImg<uintT> foo; > return get_dijkstra(starting_node,ending_node,foo); > } > > > > > > > static CImg<T> string(const char *const str, const bool is_last_zero=true) { > if (!str) return CImg<T>(); > return CImg<T>(str,(unsigned int)std::strlen(str)+(is_last_zero?1:0)); > } > > > > > > static CImg<T> vector(const T& a0) { > CImg<T> r(1,1); > r[0] = a0; > return r; > } > > > > > > > static CImg<T> vector(const T& a0, const T& a1) { > CImg<T> r(1,2); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; > return r; > } > > > > > > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2) { > CImg<T> r(1,3); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; > return r; > } ># 17314 "./CImg.h" > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3) { > CImg<T> r(1,4); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { > CImg<T> r(1,5); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { > CImg<T> r(1,6); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6) { > CImg<T> r(1,7); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7) { > CImg<T> r(1,8); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8) { > CImg<T> r(1,9); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9) { > CImg<T> r(1,10); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10) { > CImg<T> r(1,11); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11) { > CImg<T> r(1,12); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12) { > CImg<T> r(1,13); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13) { > CImg<T> r(1,14); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13, const T& a14) { > CImg<T> r(1,15); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; > return r; > } > > > static CImg<T> vector(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13, const T& a14, const T& a15) { > CImg<T> r(1,16); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; > return r; > } > > > > > > > static CImg<T> matrix(const T& a0) { > return vector(a0); > } ># 17464 "./CImg.h" > static CImg<T> matrix(const T& a0, const T& a1, > const T& a2, const T& a3) { > CImg<T> r(2,2); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; > *(ptr++) = a2; *(ptr++) = a3; > return r; > } ># 17484 "./CImg.h" > static CImg<T> matrix(const T& a0, const T& a1, const T& a2, > const T& a3, const T& a4, const T& a5, > const T& a6, const T& a7, const T& a8) { > CImg<T> r(3,3); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; > *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; > *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; > return r; > } > > > static CImg<T> matrix(const T& a0, const T& a1, const T& a2, const T& a3, > const T& a4, const T& a5, const T& a6, const T& a7, > const T& a8, const T& a9, const T& a10, const T& a11, > const T& a12, const T& a13, const T& a14, const T& a15) { > CImg<T> r(4,4); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; > *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; > *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; > *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; > return r; > } > > > static CImg<T> matrix(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, > const T& a5, const T& a6, const T& a7, const T& a8, const T& a9, > const T& a10, const T& a11, const T& a12, const T& a13, const T& a14, > const T& a15, const T& a16, const T& a17, const T& a18, const T& a19, > const T& a20, const T& a21, const T& a22, const T& a23, const T& a24) { > CImg<T> r(5,5); T *ptr = r._data; > *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; > *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; *(ptr++) = a9; > *(ptr++) = a10; *(ptr++) = a11; *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; > *(ptr++) = a15; *(ptr++) = a16; *(ptr++) = a17; *(ptr++) = a18; *(ptr++) = a19; > *(ptr++) = a20; *(ptr++) = a21; *(ptr++) = a22; *(ptr++) = a23; *(ptr++) = a24; > return r; > } > > > > > > > static CImg<T> tensor(const T& a0) { > return matrix(a0); > } > > > static CImg<T> tensor(const T& a0, const T& a1, const T& a2) { > return matrix(a0,a1,a1,a2); > } > > > static CImg<T> tensor(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { > return matrix(a0,a1,a2,a1,a3,a4,a2,a4,a5); > } > > > static CImg<T> diagonal(const T& a0) { > return matrix(a0); > } > > > static CImg<T> diagonal(const T& a0, const T& a1) { > return matrix(a0,0,0,a1); > } > > > static CImg<T> diagonal(const T& a0, const T& a1, const T& a2) { > return matrix(a0,0,0,0,a1,0,0,0,a2); > } > > > static CImg<T> diagonal(const T& a0, const T& a1, const T& a2, const T& a3) { > return matrix(a0,0,0,0,0,a1,0,0,0,0,a2,0,0,0,0,a3); > } > > > static CImg<T> diagonal(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { > return matrix(a0,0,0,0,0,0,a1,0,0,0,0,0,a2,0,0,0,0,0,a3,0,0,0,0,0,a4); > } > > > > > > static CImg<T> identity_matrix(const unsigned int N) { > CImg<T> res(N,N,1,1,0); > for (int x = 0; x<(int)((res)._width); ++x) res(x,x) = 1; > return res; > } > > > > > > > > static CImg<T> sequence(const unsigned int N, const T a0, const T a1) { > if (N) return CImg<T>(1,N).sequence(a0,a1); > return CImg<T>(); > } ># 17595 "./CImg.h" > static CImg<T> rotation_matrix(const float x, const float y, const float z, const float w, const bool is_quaternion=false) { > float X,Y,Z,W; > if (!is_quaternion) { > const float norm = (float)std::sqrt(x*x + y*y + z*z), > nx = norm>0?x/norm:0, > ny = norm>0?y/norm:0, > nz = norm>0?z/norm:1, > nw = norm>0?w:0, > sina = (float)std::sin(nw/2), > cosa = (float)std::cos(nw/2); > X = nx*sina; > Y = ny*sina; > Z = nz*sina; > W = cosa; > } else { > const float norm = (float)std::sqrt(x*x + y*y + z*z + w*w); > if (norm>0) { X = x/norm; Y = y/norm; Z = z/norm; W = w/norm; } > else { X = Y = Z = 0; W = 1; } > } > const float xx = X*X, xy = X*Y, xz = X*Z, xw = X*W, yy = Y*Y, yz = Y*Z, yw = Y*W, zz = Z*Z, zw = Z*W; > return CImg<T>::matrix((T)(1-2*(yy+zz)), (T)(2*(xy+zw)), (T)(2*(xz-yw)), > (T)(2*(xy-zw)), (T)(1-2*(xx+zz)), (T)(2*(yz+xw)), > (T)(2*(xz+yw)), (T)(2*(yz-xw)), (T)(1-2*(xx+yy))); > } ># 17631 "./CImg.h" > CImg<T>& fill(const T val) { > if (is_empty()) return *this; > if (val && sizeof(T)!=1) for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = val; > else std::memset(_data,(int)val,sizeof(T)*size()); > return *this; > } > > > CImg<T> get_fill(const T val) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val); > } > > > > > > > CImg<T>& fill(const T val0, const T val1) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-1; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; } > if (ptrd!=ptre+1) *(ptrd++) = val0; > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-2; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; } > ptre+=2; > switch (ptre - ptrd) { > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-3; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; } > ptre+=3; > switch (ptre - ptrd) { > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-4; > for (ptrd = _data; ptrd<ptre; ) { *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; } > ptre+=4; > switch (ptre - ptrd) { > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-5; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > } > ptre+=5; > switch (ptre - ptrd) { > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-6; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; *(ptrd++) = val6; > } > ptre+=6; > switch (ptre - ptrd) { > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-7; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; > *(ptrd++) = val4; *(ptrd++) = val5; *(ptrd++) = val6; *(ptrd++) = val7; > } > ptre+=7; > switch (ptre - ptrd) { > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-8; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; > *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; > } > ptre+=8; > switch (ptre - ptrd) { > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-9; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; > *(ptrd++) = val5; *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; > } > ptre+=9; > switch (ptre - ptrd) { > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-10; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; > *(ptrd++) = val5; *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; > *(ptrd++) = val10; > } > ptre+=10; > switch (ptre - ptrd) { > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-11; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > } > ptre+=11; > switch (ptre - ptrd) { > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-12; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; > } > ptre+=12; > switch (ptre - ptrd) { > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-13; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; *(ptrd++) = val13; > } > ptre+=13; > switch (ptre - ptrd) { > case 13 : *(--ptre) = val12; > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, > val13); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-14; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; *(ptrd++) = val13; *(ptrd++) = val14; > } > ptre+=14; > switch (ptre - ptrd) { > case 14 : *(--ptre) = val13; > case 13 : *(--ptre) = val12; > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, > val13,val14); > } > > > CImg<T>& fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14, const T val15) { > if (is_empty()) return *this; > T *ptrd, *ptre = end()-15; > for (ptrd = _data; ptrd<ptre; ) { > *(ptrd++) = val0; *(ptrd++) = val1; *(ptrd++) = val2; *(ptrd++) = val3; *(ptrd++) = val4; *(ptrd++) = val5; > *(ptrd++) = val6; *(ptrd++) = val7; *(ptrd++) = val8; *(ptrd++) = val9; *(ptrd++) = val10; *(ptrd++) = val11; > *(ptrd++) = val12; *(ptrd++) = val13; *(ptrd++) = val14; *(ptrd++) = val15; > } > ptre+=15; > switch (ptre - ptrd) { > case 15 : *(--ptre) = val14; > case 14 : *(--ptre) = val13; > case 13 : *(--ptre) = val12; > case 12 : *(--ptre) = val11; > case 11 : *(--ptre) = val10; > case 10 : *(--ptre) = val9; > case 9 : *(--ptre) = val8; > case 8 : *(--ptre) = val7; > case 7 : *(--ptre) = val6; > case 6 : *(--ptre) = val5; > case 5 : *(--ptre) = val4; > case 4 : *(--ptre) = val3; > case 3 : *(--ptre) = val2; > case 2 : *(--ptre) = val1; > case 1 : *(--ptre) = val0; > } > return *this; > } > > > CImg<T> get_fill(const T val0, const T val1, const T val2, const T val3, const T val4, const T val5, const T val6, > const T val7, const T val8, const T val9, const T val10, const T val11, const T val12, > const T val13, const T val14, const T val15) const { > return CImg<T>(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12, > val13,val14,val15); > } > > > > > > > CImg<T>& fill(const char *const expression, const bool repeat_flag) { > if (is_empty() || !expression || !*expression) return *this; > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { > const CImg<T> _base = cimg::_is_self_expr(expression)?+*this:CImg<T>(), &base = _base?_base:*this; > _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"fill"); > T *ptrd = *expression=='<'?end()-1:_data; > if (*expression=='<') for (int c = (int)((*this)._spectrum)-1; c>=0; --c) for (int z = (int)((*this)._depth)-1; z>=0; --z) for (int y = (int)((*this)._height)-1; y>=0; --y) for (int x = (int)((*this)._width)-1; x>=0; --x) *(ptrd--) = (T)mp(x,y,z,c); > else if (*expression=='>') for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (T)mp(x,y,z,c); > else { > > if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) > ># 18086 "./CImg.h" >#pragma omp parallel ># 18086 "./CImg.h" > > { > _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; > ># 18089 "./CImg.h" >#pragma omp for collapse(3) ># 18089 "./CImg.h" > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) *ptrd++ = (T)lmp(x,y,z,c); > } > } > else > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (T)mp(x,y,z,c); > } > } catch (CImgException& e) { > char item[16384] = { 0 }, sep = 0; > const char *nexpression = expression; > unsigned long nb = 0; > const unsigned long siz = size(); > T *ptrd = _data; > for (double val = 0; *nexpression && nb<siz; ++nb) { > sep = 0; > const int err = std::sscanf(nexpression,"%4095[ \n\t0-9.e+-]%c",item,&sep); > if (err>0 && std::sscanf(item,"%lf",&val)==1) { > nexpression+=std::strlen(item) + (err>1?1:0); > *(ptrd++) = (T)val; > } else break; > } > cimg::exception_mode() = omode; > if (nb<siz && (sep || *nexpression)) > throw CImgArgumentException(e.what(),pixel_type(),expression); > if (repeat_flag && nb && nb<siz) for (T *ptrs = _data, *const ptre = _data + siz; ptrd<ptre; ++ptrs) *(ptrd++) = *ptrs; > } > cimg::exception_mode() = omode; > return *this; > } > > > CImg<T> get_fill(const char *const values, const bool repeat_values) const { > return (+*this).fill(values,repeat_values); > } > > > > > > > template<typename t> > CImg<T>& fill(const CImg<t>& values, const bool repeat_values=true) { > if (is_empty() || !values) return *this; > T *ptrd = _data, *ptre = ptrd + size(); > for (t *ptrs = values._data, *ptrs_end = ptrs + values.size(); ptrs<ptrs_end && ptrd<ptre; ++ptrs) *(ptrd++) = (T)*ptrs; > if (repeat_values && ptrd<ptre) for (T *ptrs = _data; ptrd<ptre; ++ptrs) *(ptrd++) = *ptrs; > return *this; > } > > > template<typename t> > CImg<T> get_fill(const CImg<t>& values, const bool repeat_values=true) const { > return repeat_values?CImg<T>(_width,_height,_depth,_spectrum).fill(values,repeat_values):(+*this).fill(values,repeat_values); > } ># 18154 "./CImg.h" > CImg<T>& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const int a0, ...) { > > > > > if (y<_height && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(0,y,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_width; ++k) { ptrd+=1; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const double a0, ...) { > if (y<_height && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(0,y,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_width; ++k) { ptrd+=1; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } ># 18176 "./CImg.h" > CImg<T>& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const int a0, ...) { > if (x<_width && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,0,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_height; ++k) { ptrd+=_width; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const double a0, ...) { > if (x<_width && z<_depth && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,0,z,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_height; ++k) { ptrd+=_width; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } ># 18194 "./CImg.h" > CImg<T>& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const int a0, ...) { > const unsigned long wh = (unsigned long)_width*_height; > if (x<_width && y<_height && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,0,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_depth; ++k) { ptrd+=wh; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const double a0, ...) { > const unsigned long wh = (unsigned long)_width*_height; > if (x<_width && y<_height && c<_spectrum) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,0,c); *ptrd = (T)a0; for (unsigned long k = 1; k<_depth; ++k) { ptrd+=wh; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } ># 18214 "./CImg.h" > CImg<T>& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const int a0, ...) { > const unsigned long whd = (unsigned long)_width*_height*_depth; > if (x<_width && y<_height && z<_depth) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,z,0); *ptrd = (T)a0; for (unsigned long k = 1; k<_spectrum; ++k) { ptrd+=whd; *ptrd = (T)__builtin_va_arg(ap,int); } __builtin_va_end(ap); }; > return *this; > } > > > CImg<T>& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const double a0, ...) { > const unsigned long whd = (unsigned long)_width*_height*_depth; > if (x<_width && y<_height && z<_depth) { va_list ap; __builtin_va_start(ap,a0); T *ptrd = data(x,y,z,0); *ptrd = (T)a0; for (unsigned long k = 1; k<_spectrum; ++k) { ptrd+=whd; *ptrd = (T)__builtin_va_arg(ap,double); } __builtin_va_end(ap); }; > return *this; > } > > > > > > > > CImg<T>& discard(const T value) { > return get_discard(value).move_to(*this); > } > > > CImg<T> get_discard(const T value) const { > CImg<T> res(1,size()); > T *pd = res._data; > for (const T *ps = _data, *const pse = end(); ps<pse; ++ps) > if (*ps!=value) *(pd++) = *ps; > if (pd==res._data) return CImg<T>(); > return res.resize(1,pd-res._data,1,1,-1); > } > > > > > > > > template<typename t> > CImg<T>& discard(const CImg<t>& values) { > return get_discard(values).move_to(*this); > } > > > template<typename t> > CImg<T> get_discard(const CImg<t>& values) const { > if (!values) return *this; > if (values.size()==1) return get_discard(*values); > CImg<T> res(1,size()); > T *pd = res._data; > const t *const pve = values.end(); > for (const T *ps = _data, *const pse = end(); ps<pse; ) { > const T *_ps = ps; > const t *pv = values._data; > while (_ps<pse && pv<pve) { if (*(_ps++)!=(T)*pv) break; ++pv; } > if (pv!=pve) { > const unsigned int l = _ps - ps; > if (l==1) *(pd++) = *ps; else { std::memcpy(pd,ps,sizeof(T)*l); pd+=l; } > } > ps = _ps; > } > if (pd==res._data) return CImg<T>(); > return res.resize(1,pd-res._data,1,1,-1); > } > > > > > CImg<T>& invert_endianness() { > cimg::invert_endianness(_data,size()); > return *this; > } > > > CImg<T> get_invert_endianness() const { > return (+*this).invert_endianness(); > } > > > > > > > > CImg<T>& rand(const T val_min, const T val_max) { > const float delta = (float)val_max - (float)val_min; > for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) *ptrd = (T)(val_min + cimg::rand()*delta); > return *this; > } > > > CImg<T> get_rand(const T val_min, const T val_max) const { > return (+*this).rand(val_min,val_max); > } ># 18318 "./CImg.h" > CImg<T>& round(const double y=1, const int rounding_type=0) { > if (y>0) > > ># 18321 "./CImg.h" >#pragma omp parallel for if (size()>=8192) ># 18321 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = cimg::round(*ptrd,y,rounding_type); > return *this; > } > > > CImg<T> get_round(const double y=1, const unsigned int rounding_type=0) const { > return (+*this).round(y,rounding_type); > } ># 18347 "./CImg.h" > CImg<T>& noise(const double sigma, const unsigned int noise_type=0) { > if (!is_empty()) { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > Tfloat nsigma = (Tfloat)sigma, m = 0, M = 0; > if (nsigma==0 && noise_type!=3) return *this; > if (nsigma<0 || noise_type==2) m = (Tfloat)min_max(M); > if (nsigma<0) nsigma = (Tfloat)(-nsigma*(M-m)/100.0); > switch (noise_type) { > case 0 : { > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::grand()); > if (val>vmax) val = vmax; > if (val<vmin) val = vmin; > *ptrd = (T)val; > } > } break; > case 1 : { > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::crand()); > if (val>vmax) val = vmax; > if (val<vmin) val = vmin; > *ptrd = (T)val; > } > } break; > case 2 : { > if (nsigma<0) nsigma = -nsigma; > if (M==m) { m = 0; M = (Tfloat)(cimg::type<T>::is_float()?1:cimg::type<T>::max()); } > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) if (cimg::rand()*100<nsigma) *ptrd = (T)(cimg::rand()<0.5?M:m); > } break; > > case 3 : { > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)cimg::prand(*ptrd); > } break; > > case 4 : { > const Tfloat sqrt2 = (Tfloat)std::sqrt(2.0); > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const Tfloat > val0 = (Tfloat)*ptrd/sqrt2, > re = (Tfloat)(val0 + nsigma*cimg::grand()), > im = (Tfloat)(val0 + nsigma*cimg::grand()); > Tfloat val = (Tfloat)std::sqrt(re*re + im*im); > if (val>vmax) val = vmax; > if (val<vmin) val = vmin; > *ptrd = (T)val; > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "noise(): Invalid specified noise type %d " > "(should be { 0=gaussian | 1=uniform | 2=salt&Pepper | 3=poisson }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > noise_type); > } > } > return *this; > } > > > CImg<T> get_noise(const double sigma, const unsigned int noise_type=0) const { > return (+*this).noise(sigma,noise_type); > } ># 18421 "./CImg.h" > CImg<T>& normalize(const T min_value, const T max_value) { > if (is_empty()) return *this; > const T a = min_value<max_value?min_value:max_value, b = min_value<max_value?max_value:min_value; > T m, M = max_min(m); > const Tfloat fm = (Tfloat)m, fM = (Tfloat)M; > if (m==M) return fill(min_value); > if (m!=a || M!=b) > > ># 18429 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 18429 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (T)((*ptrd-fm)/(fM-fm)*(b-a)+a); > return *this; > } > > > CImg<Tfloat> get_normalize(const T min_value, const T max_value) const { > return CImg<Tfloat>(*this,false).normalize((Tfloat)min_value,(Tfloat)max_value); > } ># 18449 "./CImg.h" > CImg<T>& normalize() { > const unsigned long whd = (unsigned long)_width*_height*_depth; > > ># 18452 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18452 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *ptrd = data(0,y,z,0); > for (int x = 0; x<(int)((*this)._width); ++x) { > const T *ptrs = ptrd; > float n = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { n+=cimg::sqr((float)*ptrs); ptrs+=whd; } > n = (float)std::sqrt(n); > T *_ptrd = ptrd++; > if (n>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (T)(*_ptrd/n); _ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (T)0; _ptrd+=whd; } > } > } > return *this; > } > > > CImg<Tfloat> get_normalize() const { > return CImg<Tfloat>(*this,false).normalize(); > } ># 18484 "./CImg.h" > CImg<T>& norm(const int norm_type=2) { > if (_spectrum==1) return abs(); > return get_norm(norm_type).move_to(*this); > } > > > CImg<Tfloat> get_norm(const int norm_type=2) const { > if (is_empty()) return *this; > if (_spectrum==1) return get_abs(); > const unsigned long whd = (unsigned long)_width*_height*_depth; > CImg<Tfloat> res(_width,_height,_depth); > switch (norm_type) { > case -1 : { > > ># 18498 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18498 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned long off = offset(0,y,z); > const T *ptrs = _data + off; > Tfloat *ptrd = res._data + off; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat n = 0; > const T *_ptrs = ptrs++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { const Tfloat val = (Tfloat)cimg::abs(*_ptrs); if (val>n) n = val; _ptrs+=whd; } > *(ptrd++) = n; > } > } > } break; > case 1 : { > > ># 18514 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18514 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned long off = offset(0,y,z); > const T *ptrs = _data + off; > Tfloat *ptrd = res._data + off; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat n = 0; > const T *_ptrs = ptrs++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { n+=cimg::abs(*_ptrs); _ptrs+=whd; } > *(ptrd++) = n; > } > } > } break; > default : { > > ># 18530 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) ># 18530 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned long off = offset(0,y,z); > const T *ptrs = _data + off; > Tfloat *ptrd = res._data + off; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat n = 0; > const T *_ptrs = ptrs++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { n+=cimg::sqr((Tfloat)*_ptrs); _ptrs+=whd; } > *(ptrd++) = (Tfloat)std::sqrt((Tfloat)n); > } > } > } > } > return res; > } ># 18559 "./CImg.h" > CImg<T>& cut(const T min_value, const T max_value) { > if (is_empty()) return *this; > const T a = min_value<max_value?min_value:max_value, b = min_value<max_value?max_value:min_value; > > ># 18563 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18563 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = (*ptrd<a)?a:((*ptrd>b)?b:*ptrd); > return *this; > } > > > CImg<T> get_cut(const T min_value, const T max_value) const { > return (+*this).cut(min_value,max_value); > } ># 18585 "./CImg.h" > CImg<T>& quantize(const unsigned int nb_levels, const bool keep_range=true) { > if (!nb_levels) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "quantize(): Invalid quantization request with 0 values.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (is_empty()) return *this; > Tfloat m, M = (Tfloat)max_min(m), range = M - m; > if (range>0) { > if (keep_range) > > ># 18596 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18596 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); > *ptrd = (T)(m + cimg::min(val,nb_levels-1)*range/nb_levels); > } else > > ># 18603 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18603 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); > *ptrd = (T)cimg::min(val,nb_levels-1); > } > } > return *this; > } > > > CImg<T> get_quantize(const unsigned int n, const bool keep_range=true) const { > return (+*this).quantize(n,keep_range); > } ># 18630 "./CImg.h" > CImg<T>& threshold(const T value, const bool soft_threshold=false, const bool strict_threshold=false) { > if (is_empty()) return *this; > if (strict_threshold) { > if (soft_threshold) > > ># 18635 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18635 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T v = *ptrd; *ptrd = v>value?(T)(v-value):v<-(float)value?(T)(v+value):(T)0; } > else > > ># 18640 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 18640 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = *ptrd>value?(T)1:(T)0; > } else { > if (soft_threshold) > > ># 18646 "./CImg.h" >#pragma omp parallel for if (size()>=32768) ># 18646 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { const T v = *ptrd; *ptrd = v>=value?(T)(v-value):v<=-(float)value?(T)(v+value):(T)0; } > else > > ># 18651 "./CImg.h" >#pragma omp parallel for if (size()>=65536) ># 18651 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) *ptrd = *ptrd>=value?(T)1:(T)0; > } > return *this; > } > > > CImg<T> get_threshold(const T value, const bool soft_threshold=false, const bool strict_threshold=false) const { > return (+*this).threshold(value,soft_threshold,strict_threshold); > } ># 18678 "./CImg.h" > CImg<T>& histogram(const unsigned int nb_levels, const T min_value, const T max_value) { > return get_histogram(nb_levels,min_value,max_value).move_to(*this); > } > > > CImg<T>& histogram(const unsigned int nb_levels) { > return get_histogram(nb_levels).move_to(*this); > } > > > CImg<ulongT> get_histogram(const unsigned int nb_levels, const T min_value, const T max_value) const { > if (!nb_levels || is_empty()) return CImg<ulongT>(); > T vmin = min_value<max_value?min_value:max_value, vmax = min_value<max_value?max_value:min_value; > CImg<ulongT> res(nb_levels,1,1,1,0); > for (T *ptrs = (*this)._data + (*this).size() - 1; ptrs>=(*this)._data; --ptrs) { > const T val = *ptrs; > if (val>=vmin && val<=vmax) ++res[val==vmax?nb_levels-1:(unsigned int)((val-vmin)*nb_levels/(vmax-vmin))]; > } > return res; > } > > > CImg<ulongT> get_histogram(const unsigned int nb_levels) const { > if (!nb_levels || is_empty()) return CImg<ulongT>(); > T vmax = 0, vmin = min_max(vmax); > return get_histogram(nb_levels,vmin,vmax); > } ># 18718 "./CImg.h" > CImg<T>& equalize(const unsigned int nb_levels, const T min_value, const T max_value) { > if (!nb_levels || is_empty()) return *this; > T vmin = min_value<max_value?min_value:max_value, vmax = min_value<max_value?max_value:min_value; > CImg<ulongT> hist = get_histogram(nb_levels,vmin,vmax); > unsigned long cumul = 0; > for (int pos = 0; pos<(int)((hist)._width); ++pos) { cumul+=hist[pos]; hist[pos] = cumul; } > > ># 18725 "./CImg.h" >#pragma omp parallel for if (size()>=1048576) ># 18725 "./CImg.h" > > > for (T *ptrd = (*this)._data + (*this).size() - 1; ptrd>=(*this)._data; --ptrd) { > const int pos = (int)((*ptrd-vmin)*(nb_levels-1)/(vmax-vmin)); > if (pos>=0 && pos<(int)nb_levels) *ptrd = (T)(vmin + (vmax-vmin)*hist[pos]/size()); > } > return *this; > } > > > CImg<T>& equalize(const unsigned int nb_levels) { > if (!nb_levels || is_empty()) return *this; > T vmax = 0, vmin = min_max(vmax); > return equalize(nb_levels,vmin,vmax); > } > > > CImg<T> get_equalize(const unsigned int nblevels, const T val_min, const T val_max) const { > return (+*this).equalize(nblevels,val_min,val_max); > } > > > CImg<T> get_equalize(const unsigned int nblevels) const { > return (+*this).equalize(nblevels); > } ># 18766 "./CImg.h" > template<typename t> > CImg<T>& index(const CImg<t>& colormap, const float dithering=1, const bool map_indexes=false) { > return get_index(colormap,dithering,map_indexes).move_to(*this); > } > > > template<typename t> > CImg<typename CImg<t>::Tuint> > get_index(const CImg<t>& colormap, const float dithering=1, const bool map_indexes=true) const { > if (colormap._spectrum!=_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "index(): Instance and specified colormap (%u,%u,%u,%u,%p) " > "have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); > > typedef typename CImg<t>::Tuint tuint; > if (is_empty()) return CImg<tuint>(); > const unsigned long whd = (unsigned long)_width*_height*_depth, pwhd = (unsigned long)colormap._width*colormap._height*colormap._depth; > CImg<tuint> res(_width,_height,_depth,map_indexes?_spectrum:1); > tuint *ptrd = res._data; > if (dithering>0) { > const float ndithering = (dithering<0?0:dithering>1?1:dithering)/16; > Tfloat valm = 0, valM = (Tfloat)max_min(valm); > if (valm==valM && valm>=0 && valM<=255) { valm = 0; valM = 255; } > CImg<Tfloat> cache = get_crop(-1,0,0,0,_width,1,0,_spectrum-1); > Tfloat *cache_current = cache.data(1,0,0,0), *cache_next = cache.data(1,1,0,0); > const unsigned long cwhd = (unsigned long)cache._width*cache._height*cache._depth; > switch (_spectrum) { > case 1 : { > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc0 = cache_next; const T *ptrs0 = data(0,y+1,z,0); > for (int x = 0; x<(int)((*this)._width); ++x) *(ptrc0++) = (Tfloat)*(ptrs0++); > } > Tfloat *ptrs0 = cache_current, *ptrsn0 = cache_next; > for (int x = 0; x<(int)((*this)._width); ++x) { > const Tfloat _val0 = (Tfloat)*ptrs0, val0 = _val0<valm?valm:_val0>valM?valM:_val0; > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0<ptrp_end; ) { > const Tfloat pval0 = (Tfloat)*(ptrp0++) - val0, dist = pval0*pval0; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > const Tfloat err0 = ((*(ptrs0++)=val0) - (Tfloat)*ptrmin0)*ndithering; > *ptrs0+=7*err0; *(ptrsn0-1)+=3*err0; *(ptrsn0++)+=5*err0; *ptrsn0+=err0; > if (map_indexes) *(ptrd++) = (tuint)*ptrmin0; else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } break; > case 2 : { > tuint *ptrd1 = ptrd + whd; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc0 = cache_next, *ptrc1 = ptrc0 + cwhd; > const T *ptrs0 = data(0,y+1,z,0), *ptrs1 = ptrs0 + whd; > for (int x = 0; x<(int)((*this)._width); ++x) { *(ptrc0++) = (Tfloat)*(ptrs0++); *(ptrc1++) = (Tfloat)*(ptrs1++); } > } > Tfloat > *ptrs0 = cache_current, *ptrs1 = ptrs0 + cwhd, > *ptrsn0 = cache_next, *ptrsn1 = ptrsn0 + cwhd; > for (int x = 0; x<(int)((*this)._width); ++x) { > const Tfloat > _val0 = (Tfloat)*ptrs0, val0 = _val0<valm?valm:_val0>valM?valM:_val0, > _val1 = (Tfloat)*ptrs1, val1 = _val1<valm?valm:_val1>valM?valM:_val1; > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, > dist = pval0*pval0 + pval1*pval1; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > const t *const ptrmin1 = ptrmin0 + pwhd; > const Tfloat > err0 = ((*(ptrs0++)=val0) - (Tfloat)*ptrmin0)*ndithering, > err1 = ((*(ptrs1++)=val1) - (Tfloat)*ptrmin1)*ndithering; > *ptrs0+=7*err0; *ptrs1+=7*err1; > *(ptrsn0-1)+=3*err0; *(ptrsn1-1)+=3*err1; > *(ptrsn0++)+=5*err0; *(ptrsn1++)+=5*err1; > *ptrsn0+=err0; *ptrsn1+=err1; > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*ptrmin1; } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } break; > case 3 : { > tuint *ptrd1 = ptrd + whd, *ptrd2 = ptrd1 + whd; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc0 = cache_next, *ptrc1 = ptrc0 + cwhd, *ptrc2 = ptrc1 + cwhd; > const T *ptrs0 = data(0,y+1,z,0), *ptrs1 = ptrs0 + whd, *ptrs2 = ptrs1 + whd; > for (int x = 0; x<(int)((*this)._width); ++x) { *(ptrc0++) = (Tfloat)*(ptrs0++); *(ptrc1++) = (Tfloat)*(ptrs1++); *(ptrc2++) = (Tfloat)*(ptrs2++); } > } > Tfloat > *ptrs0 = cache_current, *ptrs1 = ptrs0 + cwhd, *ptrs2 = ptrs1 + cwhd, > *ptrsn0 = cache_next, *ptrsn1 = ptrsn0 + cwhd, *ptrsn2 = ptrsn1 + cwhd; > for (int x = 0; x<(int)((*this)._width); ++x) { > const Tfloat > _val0 = (Tfloat)*ptrs0, val0 = _val0<valm?valm:_val0>valM?valM:_val0, > _val1 = (Tfloat)*ptrs1, val1 = _val1<valm?valm:_val1>valM?valM:_val1, > _val2 = (Tfloat)*ptrs2, val2 = _val2<valm?valm:_val2>valM?valM:_val2; > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, pval2 = (Tfloat)*(ptrp2++) - val2, > dist = pval0*pval0 + pval1*pval1 + pval2*pval2; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > const t *const ptrmin1 = ptrmin0 + pwhd, *const ptrmin2 = ptrmin1 + pwhd; > const Tfloat > err0 = ((*(ptrs0++)=val0) - (Tfloat)*ptrmin0)*ndithering, > err1 = ((*(ptrs1++)=val1) - (Tfloat)*ptrmin1)*ndithering, > err2 = ((*(ptrs2++)=val2) - (Tfloat)*ptrmin2)*ndithering; > > *ptrs0+=7*err0; *ptrs1+=7*err1; *ptrs2+=7*err2; > *(ptrsn0-1)+=3*err0; *(ptrsn1-1)+=3*err1; *(ptrsn2-1)+=3*err2; > *(ptrsn0++)+=5*err0; *(ptrsn1++)+=5*err1; *(ptrsn2++)+=5*err2; > *ptrsn0+=err0; *ptrsn1+=err1; *ptrsn2+=err2; > > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*ptrmin1; *(ptrd2++) = (tuint)*ptrmin2; } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } break; > default : > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > if (y<height()-2) { > Tfloat *ptrc = cache_next; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *_ptrc = ptrc; const T *_ptrs = data(0,y+1,z,c); > for (int x = 0; x<(int)((*this)._width); ++x) *(_ptrc++) = (Tfloat)*(_ptrs++); > ptrc+=cwhd; > } > } > Tfloat *ptrs = cache_current, *ptrsn = cache_next; > for (int x = 0; x<(int)((*this)._width); ++x) { > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin = colormap._data; > for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrp<ptrp_end; ++ptrp) { > Tfloat dist = 0; Tfloat *_ptrs = ptrs; const t *_ptrp = ptrp; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const Tfloat _val = *_ptrs, val = _val<valm?valm:_val>valM?valM:_val; > dist+=cimg::sqr((*_ptrs=val) - (Tfloat)*_ptrp); _ptrs+=cwhd; _ptrp+=pwhd; > } > if (dist<distmin) { ptrmin = ptrp; distmin = dist; } > } > const t *_ptrmin = ptrmin; Tfloat *_ptrs = ptrs++, *_ptrsn = (ptrsn++)-1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const Tfloat err = (*(_ptrs++) - (Tfloat)*_ptrmin)*ndithering; > *_ptrs+=7*err; *(_ptrsn++)+=3*err; *(_ptrsn++)+=5*err; *_ptrsn+=err; > _ptrmin+=pwhd; _ptrs+=cwhd-1; _ptrsn+=cwhd-2; > } > if (map_indexes) { > tuint *_ptrd = ptrd++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (tuint)*ptrmin; _ptrd+=whd; ptrmin+=pwhd; } > } > else *(ptrd++) = (tuint)(ptrmin - colormap._data); > } > cimg::swap(cache_current,cache_next); > } > } > } else { > switch (_spectrum) { > case 1 : { > > ># 18932 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18932 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z); > for (const T *ptrs0 = data(0,y,z), *ptrs_end = ptrs0 + _width; ptrs0<ptrs_end; ) { > const Tfloat val0 = (Tfloat)*(ptrs0++); > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0<ptrp_end; ) { > const Tfloat pval0 = (Tfloat)*(ptrp0++) - val0, dist = pval0*pval0; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > if (map_indexes) *(ptrd++) = (tuint)*ptrmin0; else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > } > } break; > case 2 : { > > ># 18949 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18949 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z), *ptrd1 = ptrd + whd; > for (const T *ptrs0 = data(0,y,z), *ptrs1 = ptrs0 + whd, *ptrs_end = ptrs0 + _width; ptrs0<ptrs_end; ) { > const Tfloat val0 = (Tfloat)*(ptrs0++), val1 = (Tfloat)*(ptrs1++); > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, > dist = pval0*pval0 + pval1*pval1; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*(ptrmin0 + pwhd); } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > } > } break; > case 3 : { > > ># 18969 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18969 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z), *ptrd1 = ptrd + whd, *ptrd2 = ptrd1 + whd; > for (const T *ptrs0 = data(0,y,z), *ptrs1 = ptrs0 + whd, *ptrs2 = ptrs1 + whd, *ptrs_end = ptrs0 + _width; ptrs0<ptrs_end; ) { > const Tfloat val0 = (Tfloat)*(ptrs0++), val1 = (Tfloat)*(ptrs1++), val2 = (Tfloat)*(ptrs2++); > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin0 = colormap._data; > for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, *ptrp_end = ptrp1; ptrp0<ptrp_end; ) { > const Tfloat > pval0 = (Tfloat)*(ptrp0++) - val0, pval1 = (Tfloat)*(ptrp1++) - val1, pval2 = (Tfloat)*(ptrp2++) - val2, > dist = pval0*pval0 + pval1*pval1 + pval2*pval2; > if (dist<distmin) { ptrmin0 = ptrp0 - 1; distmin = dist; } > } > if (map_indexes) { *(ptrd++) = (tuint)*ptrmin0; *(ptrd1++) = (tuint)*(ptrmin0 + pwhd); *(ptrd2++) = (tuint)*(ptrmin0 + 2*pwhd); } > else *(ptrd++) = (tuint)(ptrmin0 - colormap._data); > } > } > } break; > default : > > ># 18989 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=64 && _height*_depth>=16 && pwhd>=16) ># 18989 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > tuint *ptrd = res.data(0,y,z); > for (const T *ptrs = data(0,y,z), *ptrs_end = ptrs + _width; ptrs<ptrs_end; ++ptrs) { > Tfloat distmin = cimg::type<Tfloat>::max(); const t *ptrmin = colormap._data; > for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrp<ptrp_end; ++ptrp) { > Tfloat dist = 0; const T *_ptrs = ptrs; const t *_ptrp = ptrp; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { dist+=cimg::sqr((Tfloat)*_ptrs - (Tfloat)*_ptrp); _ptrs+=whd; _ptrp+=pwhd; } > if (dist<distmin) { ptrmin = ptrp; distmin = dist; } > } > if (map_indexes) { > tuint *_ptrd = ptrd++; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *_ptrd = (tuint)*ptrmin; _ptrd+=whd; ptrmin+=pwhd; } > } > else *(ptrd++) = (tuint)(ptrmin - colormap._data); > } > } > } > } > return res; > } ># 19025 "./CImg.h" > template<typename t> > CImg<T>& map(const CImg<t>& colormap) { > return get_map(colormap).move_to(*this); > } > > > template<typename t> > CImg<t> get_map(const CImg<t>& colormap) const { > if (_spectrum!=1 && colormap._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "map(): Instance and specified colormap (%u,%u,%u,%u,%p) " > "have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); > > const unsigned long whd = (unsigned long)_width*_height*_depth, pwhd = (unsigned long)colormap._width*colormap._height*colormap._depth; > CImg<t> res(_width,_height,_depth,colormap._spectrum==1?_spectrum:colormap._spectrum); > switch (colormap._spectrum) { > case 1 : { > const T *ptrs = _data; > for (t *ptrd = (res)._data, *_maxptrd = (res)._data + (res).size(); ptrd<_maxptrd; ++ptrd) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > *ptrd = colormap[ind]; > } > } break; > case 2 : { > const t *const ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd; > t *ptrd0 = res._data, *ptrd1 = ptrd0 + whd; > for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs<ptrs_end; ) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > *(ptrd0++) = ptrp0[ind]; *(ptrd1++) = ptrp1[ind]; > } > } break; > case 3 : { > const t *const ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd; > t *ptrd0 = res._data, *ptrd1 = ptrd0 + whd, *ptrd2 = ptrd1 + whd; > for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs<ptrs_end; ) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > *(ptrd0++) = ptrp0[ind]; *(ptrd1++) = ptrp1[ind]; *(ptrd2++) = ptrp2[ind]; > } > } break; > default : { > t *ptrd = res._data; > for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs<ptrs_end; ) { > const unsigned long _ind = (unsigned long)*(ptrs++), ind = _ind<pwhd?_ind:0; > const t *ptrp = colormap._data + ind; > t *_ptrd = ptrd++; for (int c = 0; c<(int)((res)._spectrum); ++c) { *_ptrd = *ptrp; _ptrd+=whd; ptrp+=pwhd; } > } > } > } > return res; > } ># 19089 "./CImg.h" > CImg<T>& label(const bool is_high_connectivity=false, const Tfloat tolerance=0) { > return get_label(is_high_connectivity,tolerance).move_to(*this); > } > > > CImg<unsigned long> get_label(const bool is_high_connectivity=false, > const Tfloat tolerance=0) const { > if (is_empty()) return CImg<unsigned long>(); > > > int dx[13], dy[13], dz[13], nb = 0; > dx[nb]=1; dy[nb] = 0; dz[nb++]=0; > dx[nb]=0; dy[nb] = 1; dz[nb++]=0; > if (is_high_connectivity) { > dx[nb]=1; dy[nb] = 1; dz[nb++]=0; > dx[nb]=1; dy[nb] = -1; dz[nb++]=0; > } > if (_depth>1) { > dx[nb]=0; dy[nb] = 0; dz[nb++]=1; > if (is_high_connectivity) { > dx[nb]=1; dy[nb] = 1; dz[nb++]=-1; > dx[nb]=1; dy[nb] = 0; dz[nb++]=-1; > dx[nb]=1; dy[nb] = -1; dz[nb++]=-1; > dx[nb]=0; dy[nb] = 1; dz[nb++]=-1; > > dx[nb]=0; dy[nb] = 1; dz[nb++]=1; > dx[nb]=1; dy[nb] = -1; dz[nb++]=1; > dx[nb]=1; dy[nb] = 0; dz[nb++]=1; > dx[nb]=1; dy[nb] = 1; dz[nb++]=1; > } > } > return _get_label(nb,dx,dy,dz,tolerance); > } > > > > > > > template<typename t> > CImg<T>& label(const CImg<t>& connectivity_mask, const Tfloat tolerance=0) { > return get_label(connectivity_mask,tolerance).move_to(*this); > } > > > template<typename t> > CImg<unsigned long> get_label(const CImg<t>& connectivity_mask, > const Tfloat tolerance=0) const { > int nb = 0; > for (t *ptr = (connectivity_mask)._data, *_maxptr = (connectivity_mask)._data + (connectivity_mask).size(); ptr<_maxptr; ++ptr) if (*ptr) ++nb; > CImg<intT> dx(nb,1,1,1,0), dy(nb,1,1,1,0), dz(nb,1,1,1,0); > nb = 0; > for (int z = 0; z<(int)((connectivity_mask)._depth); ++z) for (int y = 0; y<(int)((connectivity_mask)._height); ++y) for (int x = 0; x<(int)((connectivity_mask)._width); ++x) if ((x || y || z) && > connectivity_mask(x,y,z)) { > dx[nb] = x; dy[nb] = y; dz[nb++] = z; > } > return _get_label(nb,dx,dy,dz,tolerance); > } > > CImg<unsigned long> _get_label(const unsigned int nb, const int > *const dx, const int *const dy, const int *const dz, > const Tfloat tolerance) const { > CImg<unsigned long> res(_width,_height,_depth,_spectrum); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > CImg<unsigned long> _res = res.get_shared_channel(c); > > > unsigned long *ptr = _res.data(); > for (unsigned long p = 0, _maxp = (_res).size(); p<_maxp; ++p) *(ptr++) = p; > > > for (unsigned int n = 0; n<nb; ++n) { > const int _dx = dx[n], _dy = dy[n], _dz = dz[n]; > if (_dx || _dy || _dz) { > const int > x0 = _dx<0?-_dx:0, > x1 = _dx<0?_width:_width - _dx, > y0 = _dy<0?-_dy:0, > y1 = _dy<0?_height:_height - _dy, > z0 = _dz<0?-_dz:0, > z1 = _dz<0?_depth:_depth - _dz; > const long wh = (long)_width*_height, offset = (long)_dz*wh + (long)_dy*_width + _dx; > for (long z = z0, nz = z0 + _dz, pz = z0*wh; z<z1; ++z, ++nz, pz+=wh) { > for (long y = y0, ny = y0 + _dy, py = y0*_width + pz; y<y1; ++y, ++ny, py+=_width) { > for (long x = x0, nx = x0 + _dx, p = x0 + py; x<x1; ++x, ++nx, ++p) { > if ((Tfloat)cimg::abs((*this)(x,y,z,c,wh)-(*this)(nx,ny,nz,c,wh))<=tolerance) { > const long q = p + offset; > unsigned long x, y; > for (x = p<q?q:p, y = p<q?p:q; x!=y && _res[x]!=x; ) { x = _res[x]; if (x<y) cimg::swap(x,y); } > if (x!=y) _res[x] = y; > for (unsigned long _p = p; _p!=y; ) { const unsigned long h = _res[_p]; _res[_p] = y; _p = h; } > for (unsigned long _q = q; _q!=y; ) { const unsigned long h = _res[_q]; _res[_q] = y; _q = h; } > } > } > } > } > } > } > > > unsigned long counter = 0; > ptr = _res.data(); > for (unsigned long p = 0, _maxp = (_res).size(); p<_maxp; ++p) { *ptr = *ptr==p?counter++:_res[*ptr]; ++ptr; } > } > return res; > } > > > CImg<T>& _system_strescape() { > > > CImgList<T> list; > const T *ptrs = _data; > for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) switch ((int)*p) { > case '\\' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\\\",(unsigned int)std::strlen("\\\\"),1,1,1,false).move_to(list); ptrs = p+1; break; > case '\"' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\\"",(unsigned int)std::strlen("\\\""),1,1,1,false).move_to(list); ptrs = p+1; break; > case '!' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\"\\!\"",(unsigned int)std::strlen("\"\\!\""),1,1,1,false).move_to(list); ptrs = p+1; break; > case '`' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\`",(unsigned int)std::strlen("\\`"),1,1,1,false).move_to(list); ptrs = p+1; break; > case '$' : if (p!=ptrs) CImg<T>(ptrs,(unsigned int)(p-ptrs),1,1,1,false).move_to(list); CImg<T>("\\$",(unsigned int)std::strlen("\\$"),1,1,1,false).move_to(list); ptrs = p+1; break; > } > if (ptrs<end()) CImg<T>(ptrs,(unsigned int)(end()-ptrs),1,1,1,false).move_to(list); > return (list>'x').move_to(*this); > } ># 19225 "./CImg.h" > static const CImg<Tuchar>& default_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,256,1,3); > for (unsigned int index = 0, r = 16; r<256; r+=32) > for (unsigned int g = 16; g<256; g+=32) > for (unsigned int b = 32; b<256; b+=64) { > colormap(0,index,0) = (Tuchar)r; > colormap(0,index,1) = (Tuchar)g; > colormap(0,index++,2) = (Tuchar)b; > } > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& HSV_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > CImg<Tint> tmp(1,256,1,3,1); > tmp.get_shared_channel(0).sequence(0,359); > colormap = tmp.HSVtoRGB(); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& lines_LUT256() { > static const unsigned char pal[] = { > 217,62,88,75,1,237,240,12,56,160,165,116,1,1,204,2,15,248,148,185,133,141,46,246,222,116,16,5,207,226, > 17,114,247,1,214,53,238,0,95,55,233,235,109,0,17,54,33,0,90,30,3,0,94,27,19,0,68,212,166,130,0,15,7,119, > 238,2,246,198,0,3,16,10,13,2,25,28,12,6,2,99,18,141,30,4,3,140,12,4,30,233,7,10,0,136,35,160,168,184,20, > 233,0,1,242,83,90,56,180,44,41,0,6,19,207,5,31,214,4,35,153,180,75,21,76,16,202,218,22,17,2,136,71,74, > 81,251,244,148,222,17,0,234,24,0,200,16,239,15,225,102,230,186,58,230,110,12,0,7,129,249,22,241,37,219, > 1,3,254,210,3,212,113,131,197,162,123,252,90,96,209,60,0,17,0,180,249,12,112,165,43,27,229,77,40,195,12, > 87,1,210,148,47,80,5,9,1,137,2,40,57,205,244,40,8,252,98,0,40,43,206,31,187,0,180,1,69,70,227,131,108,0, > 223,94,228,35,248,243,4,16,0,34,24,2,9,35,73,91,12,199,51,1,249,12,103,131,20,224,2,70,32, > 233,1,165,3,8,154,246,233,196,5,0,6,183,227,247,195,208,36,0,0,226,160,210,198,69,153,210,1,23,8,192,2,4, > 137,1,0,52,2,249,241,129,0,0,234,7,238,71,7,32,15,157,157,252,158,2,250,6,13,30,11,162,0,199,21,11,27,224, > 4,157,20,181,111,187,218,3,0,11,158,230,196,34,223,22,248,135,254,210,157,219,0,117,239,3,255,4,227,5,247, > 11,4,3,188,111,11,105,195,2,0,14,1,21,219,192,0,183,191,113,241,1,12,17,248,0,48,7,19,1,254,212,0,239,246, > 0,23,0,250,165,194,194,17,3,253,0,24,6,0,141,167,221,24,212,2,235,243,0,0,205,1,251,133,204,28,4,6,1,10, > 141,21,74,12,236,254,228,19,1,0,214,1,186,13,13,6,13,16,27,209,6,216,11,207,251,59,32,9,155,23,19,235,143, > 116,6,213,6,75,159,23,6,0,228,4,10,245,249,1,7,44,234,4,102,174,0,19,239,103,16,15,18,8,214,22,4,47,244, > 255,8,0,251,173,1,212,252,250,251,252,6,0,29,29,222,233,246,5,149,0,182,180,13,151,0,203,183,0,35,149,0, > 235,246,254,78,9,17,203,73,11,195,0,3,5,44,0,0,237,5,106,6,130,16,214,20,168,247,168,4,207,11,5,1,232,251, > 129,210,116,231,217,223,214,27,45,38,4,177,186,249,7,215,172,16,214,27,249,230,236,2,34,216,217,0,175,30, > 243,225,244,182,20,212,2,226,21,255,20,0,2,13,62,13,191,14,76,64,20,121,4,118,0,216,1,147,0,2,210,1,215, > 95,210,236,225,184,46,0,248,24,11,1,9,141,250,243,9,221,233,160,11,147,2,55,8,23,12,253,9,0,54,0,231,6,3, > 141,8,2,246,9,180,5,11,8,227,8,43,110,242,1,130,5,97,36,10,6,219,86,133,11,108,6,1,5,244,67,19,28,0,174, > 154,16,127,149,252,188,196,196,228,244,9,249,0,0,0,37,170,32,250,0,73,255,23,3,224,234,38,195,198,0,255,87, > 33,221,174,31,3,0,189,228,6,153,14,144,14,108,197,0,9,206,245,254,3,16,253,178,248,0,95,125,8,0,3,168,21, > 23,168,19,50,240,244,185,0,1,144,10,168,31,82,1,13 }; > static const CImg<Tuchar> colormap(pal,1,256,1,3,false); > return colormap; > } > > > > > > > static const CImg<Tuchar>& hot_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,4,1,3,0); > colormap[1] = colormap[2] = colormap[3] = colormap[6] = colormap[7] = colormap[11] = 255; > colormap.resize(1,256,1,3,3); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& cool_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) colormap.assign(1,2,1,3).fill(0,255,255,0,255,255).resize(1,256,1,3,3); > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& jet_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,4,1,3,0); > colormap[2] = colormap[3] = colormap[5] = colormap[6] = colormap[8] = colormap[9] = 255; > colormap.resize(1,256,1,3,3); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& flag_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,4,1,3,0); > colormap[0] = colormap[1] = colormap[5] = colormap[9] = colormap[10] = 255; > colormap.resize(1,256,1,3,0,2); > } > cimg::mutex(8,0); > return colormap; > } > > > > > > > static const CImg<Tuchar>& cube_LUT256() { > static CImg<Tuchar> colormap; > cimg::mutex(8); > if (!colormap) { > colormap.assign(1,8,1,3,0); > colormap[1] = colormap[3] = colormap[5] = colormap[7] = > colormap[10] = colormap[11] = colormap[12] = colormap[13] = > colormap[20] = colormap[21] = colormap[22] = colormap[23] = 255; > colormap.resize(1,256,1,3,3); > } > cimg::mutex(8,0); > return colormap; > } > > > CImg<T>& sRGBtoRGB() { > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) { > const Tfloat > sval = (Tfloat)*ptr, > nsval = (sval<0?0:sval>255?255:sval)/255, > val = (Tfloat)(nsval<=0.04045f?nsval/12.92f:std::pow((nsval+0.055f)/(1.055f),2.4f)); > *ptr = (T)(val*255); > } > return *this; > } > > > CImg<Tfloat> get_sRGBtoRGB() const { > return CImg<Tfloat>(*this,false).sRGBtoRGB(); > } > > > CImg<T>& RGBtosRGB() { > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) { > const Tfloat > val = (Tfloat)*ptr, > nval = (val<0?0:val>255?255:val)/255, > sval = (Tfloat)(nval<=0.0031308f?nval*12.92f:1.055f*std::pow(nval,0.416667f)-0.055f); > *ptr = (T)(sval*255); > } > return *this; > } > > > CImg<Tfloat> get_RGBtosRGB() const { > return CImg<Tfloat>(*this,false).RGBtosRGB(); > } > > > CImg<T>& RGBtoHSV() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoHSV(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > nR = (R<0?0:(R>255?255:R))/255, > nG = (G<0?0:(G>255?255:G))/255, > nB = (B<0?0:(B>255?255:B))/255, > m = cimg::min(nR,nG,nB), > M = cimg::max(nR,nG,nB); > Tfloat H = 0, S = 0; > if (M!=m) { > const Tfloat > f = (nR==m)?(nG-nB):((nG==m)?(nB-nR):(nR-nG)), > i = (Tfloat)((nR==m)?3:((nG==m)?5:1)); > H = (i-f/(M-m)); > if (H>=6) H-=6; > H*=60; > S = (M-m)/M; > } > *(p1++) = (T)H; > *(p2++) = (T)S; > *(p3++) = (T)M; > } > return *this; > } > > > CImg<Tfloat> get_RGBtoHSV() const { > return CImg<Tfloat>(*this,false).RGBtoHSV(); > } > > > CImg<T>& HSVtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "HSVtoRGB(): Instance is not a HSV image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > Tfloat > H = (Tfloat)*p1, > S = (Tfloat)*p2, > V = (Tfloat)*p3, > R = 0, G = 0, B = 0; > if (H==0 && S==0) R = G = B = V; > else { > H/=60; > const int i = (int)std::floor(H); > const Tfloat > f = (i&1)?(H - i):(1 - H + i), > m = V*(1 - S), > n = V*(1 - S*f); > switch (i) { > case 6 : > case 0 : R = V; G = n; B = m; break; > case 1 : R = n; G = V; B = m; break; > case 2 : R = m; G = V; B = n; break; > case 3 : R = m; G = n; B = V; break; > case 4 : R = n; G = m; B = V; break; > case 5 : R = V; G = m; B = n; break; > } > } > R*=255; G*=255; B*=255; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_HSVtoRGB() const { > return CImg<Tuchar>(*this,false).HSVtoRGB(); > } > > > CImg<T>& RGBtoHSL() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoHSL(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > nR = (R<0?0:(R>255?255:R))/255, > nG = (G<0?0:(G>255?255:G))/255, > nB = (B<0?0:(B>255?255:B))/255, > m = cimg::min(nR,nG,nB), > M = cimg::max(nR,nG,nB), > L = (m + M)/2; > Tfloat H = 0, S = 0; > if (M==m) H = S = 0; > else { > const Tfloat > f = (nR==m)?(nG-nB):((nG==m)?(nB-nR):(nR-nG)), > i = (nR==m)?3.0f:((nG==m)?5.0f:1.0f); > H = (i-f/(M-m)); > if (H>=6) H-=6; > H*=60; > S = (2*L<=1)?((M-m)/(M+m)):((M-m)/(2-M-m)); > } > *(p1++) = (T)H; > *(p2++) = (T)S; > *(p3++) = (T)L; > } > return *this; > } > > > CImg<Tfloat> get_RGBtoHSL() const { > return CImg< Tfloat>(*this,false).RGBtoHSL(); > } > > > CImg<T>& HSLtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "HSLtoRGB(): Instance is not a HSL image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > H = (Tfloat)*p1, > S = (Tfloat)*p2, > L = (Tfloat)*p3, > q = 2*L<1?L*(1+S):(L+S-L*S), > p = 2*L-q, > h = H/360, > tr = h + 1.0f/3, > tg = h, > tb = h - 1.0f/3, > ntr = tr<0?tr+1:(tr>1?tr-1:tr), > ntg = tg<0?tg+1:(tg>1?tg-1:tg), > ntb = tb<0?tb+1:(tb>1?tb-1:tb), > R = 255*(6*ntr<1?p+(q-p)*6*ntr:(2*ntr<1?q:(3*ntr<2?p+(q-p)*6*(2.0f/3-ntr):p))), > G = 255*(6*ntg<1?p+(q-p)*6*ntg:(2*ntg<1?q:(3*ntg<2?p+(q-p)*6*(2.0f/3-ntg):p))), > B = 255*(6*ntb<1?p+(q-p)*6*ntb:(2*ntb<1?q:(3*ntb<2?p+(q-p)*6*(2.0f/3-ntb):p))); > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_HSLtoRGB() const { > return CImg<Tuchar>(*this,false).HSLtoRGB(); > } > > > CImg<T>& RGBtoHSI() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoHSI(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > nR = (R<0?0:(R>255?255:R))/255, > nG = (G<0?0:(G>255?255:G))/255, > nB = (B<0?0:(B>255?255:B))/255, > m = cimg::min(nR,nG,nB), > theta = (Tfloat)(std::acos(0.5f*((nR-nG)+(nR-nB))/std::sqrt(std::pow(nR-nG,2)+(nR-nB)*(nG-nB)))*180/cimg::PI), > sum = nR + nG + nB; > Tfloat H = 0, S = 0, I = 0; > if (theta>0) H = (nB<=nG)?theta:360-theta; > if (sum>0) S = 1 - 3/sum*m; > I = sum/3; > *(p1++) = (T)H; > *(p2++) = (T)S; > *(p3++) = (T)I; > } > return *this; > } > > > CImg<Tfloat> get_RGBtoHSI() const { > return CImg<Tfloat>(*this,false).RGBtoHSI(); > } > > > CImg<T>& HSItoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "HSItoRGB(): Instance is not a HSI image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > Tfloat > H = (Tfloat)*p1, > S = (Tfloat)*p2, > I = (Tfloat)*p3, > a = I*(1-S), > R = 0, G = 0, B = 0; > if (H<120) { > B = a; > R = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); > G = 3*I-(R+B); > } else if (H<240) { > H-=120; > R = a; > G = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); > B = 3*I-(R+G); > } else { > H-=240; > G = a; > B = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); > R = 3*I-(G+B); > } > R*=255; G*=255; B*=255; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tfloat> get_HSItoRGB() const { > return CImg< Tuchar>(*this,false).HSItoRGB(); > } > > > CImg<T>& RGBtoYCbCr() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoYCbCr(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > Y = (66*R + 129*G + 25*B + 128)/256 + 16, > Cb = (-38*R - 74*G + 112*B + 128)/256 + 128, > Cr = (112*R - 94*G - 18*B + 128)/256 + 128; > *(p1++) = (T)(Y<0?0:(Y>255?255:Y)); > *(p2++) = (T)(Cb<0?0:(Cb>255?255:Cb)); > *(p3++) = (T)(Cr<0?0:(Cr>255?255:Cr)); > } > return *this; > } > > > CImg<Tuchar> get_RGBtoYCbCr() const { > return CImg<Tuchar>(*this,false).RGBtoYCbCr(); > } > > > CImg<T>& YCbCrtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "YCbCrtoRGB(): Instance is not a YCbCr image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > Y = (Tfloat)*p1 - 16, > Cb = (Tfloat)*p2 - 128, > Cr = (Tfloat)*p3 - 128, > R = (298*Y + 409*Cr + 128)/256, > G = (298*Y - 100*Cb - 208*Cr + 128)/256, > B = (298*Y + 516*Cb + 128)/256; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_YCbCrtoRGB() const { > return CImg<Tuchar>(*this,false).YCbCrtoRGB(); > } > > > CImg<T>& RGBtoYUV() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoYUV(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1/255, > G = (Tfloat)*p2/255, > B = (Tfloat)*p3/255, > Y = 0.299f*R + 0.587f*G + 0.114f*B; > *(p1++) = (T)Y; > *(p2++) = (T)(0.492f*(B-Y)); > *(p3++) = (T)(0.877*(R-Y)); > } > return *this; > } > > > CImg<Tfloat> get_RGBtoYUV() const { > return CImg<Tfloat>(*this,false).RGBtoYUV(); > } > > > CImg<T>& YUVtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "YUVtoRGB(): Instance is not a YUV image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > Y = (Tfloat)*p1, > U = (Tfloat)*p2, > V = (Tfloat)*p3, > R = (Y + 1.140f*V)*255, > G = (Y - 0.395f*U - 0.581f*V)*255, > B = (Y + 2.032f*U)*255; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_YUVtoRGB() const { > return CImg< Tuchar>(*this,false).YUVtoRGB(); > } > > > CImg<T>& RGBtoCMY() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoCMY(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1, > G = (Tfloat)*p2, > B = (Tfloat)*p3, > C = 255 - R, > M = 255 - G, > Y = 255 - B; > *(p1++) = (T)(C<0?0:(C>255?255:C)); > *(p2++) = (T)(M<0?0:(M>255?255:M)); > *(p3++) = (T)(Y<0?0:(Y>255?255:Y)); > } > return *this; > } > > > CImg<Tuchar> get_RGBtoCMY() const { > return CImg<Tfloat>(*this,false).RGBtoCMY(); > } > > > CImg<T>& CMYtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CMYtoRGB(): Instance is not a CMY image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > C = (Tfloat)*p1, > M = (Tfloat)*p2, > Y = (Tfloat)*p3, > R = 255 - C, > G = 255 - M, > B = 255 - Y; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_CMYtoRGB() const { > return CImg<Tuchar>(*this,false).CMYtoRGB(); > } > > > CImg<T>& CMYtoCMYK() { > return get_CMYtoCMYK().move_to(*this); > } > > > CImg<Tuchar> get_CMYtoCMYK() const { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CMYtoCMYK(): Instance is not a CMY image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<Tfloat> res(_width,_height,_depth,4); > const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2); > Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2), *pd4 = res.data(0,0,0,3); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > Tfloat > C = (Tfloat)*(ps1++), > M = (Tfloat)*(ps2++), > Y = (Tfloat)*(ps3++), > K = cimg::min(C,M,Y); > if (K>=255) C = M = Y = 0; > else { const Tfloat K1 = 255 - K; C = 255*(C - K)/K1; M = 255*(M - K)/K1; Y = 255*(Y - K)/K1; } > *(pd1++) = (Tfloat)(C<0?0:(C>255?255:C)); > *(pd2++) = (Tfloat)(M<0?0:(M>255?255:M)); > *(pd3++) = (Tfloat)(Y<0?0:(Y>255?255:Y)); > *(pd4++) = (Tfloat)(K<0?0:(K>255?255:K)); > } > return res; > } > > > CImg<T>& CMYKtoCMY() { > return get_CMYKtoCMY().move_to(*this); > } > > > CImg<Tfloat> get_CMYKtoCMY() const { > if (_spectrum!=4) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CMYKtoCMY(): Instance is not a CMYK image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<Tfloat> res(_width,_height,_depth,3); > const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2), *ps4 = data(0,0,0,3); > Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > C = (Tfloat)*(ps1++), > M = (Tfloat)*(ps2++), > Y = (Tfloat)*(ps3++), > K = (Tfloat)*(ps4++), > K1 = 1 - K/255, > nC = C*K1 + K, > nM = M*K1 + K, > nY = Y*K1 + K; > *(pd1++) = (Tfloat)(nC<0?0:(nC>255?255:nC)); > *(pd2++) = (Tfloat)(nM<0?0:(nM>255?255:nM)); > *(pd3++) = (Tfloat)(nY<0?0:(nY>255?255:nY)); > } > return res; > } > > > > > > CImg<T>& RGBtoXYZ() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoXYZ(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > R = (Tfloat)*p1/255, > G = (Tfloat)*p2/255, > B = (Tfloat)*p3/255; > *(p1++) = (T)(0.412453f*R + 0.357580f*G + 0.180423f*B); > *(p2++) = (T)(0.212671f*R + 0.715160f*G + 0.072169f*B); > *(p3++) = (T)(0.019334f*R + 0.119193f*G + 0.950227f*B); > } > return *this; > } > > > CImg<Tfloat> get_RGBtoXYZ() const { > return CImg<Tfloat>(*this,false).RGBtoXYZ(); > } > > > CImg<T>& XYZtoRGB() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "XYZtoRGB(): Instance is not a XYZ image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > X = (Tfloat)*p1*255, > Y = (Tfloat)*p2*255, > Z = (Tfloat)*p3*255, > R = 3.240479f*X - 1.537150f*Y - 0.498535f*Z, > G = -0.969256f*X + 1.875992f*Y + 0.041556f*Z, > B = 0.055648f*X - 0.204043f*Y + 1.057311f*Z; > *(p1++) = (T)(R<0?0:(R>255?255:R)); > *(p2++) = (T)(G<0?0:(G>255?255:G)); > *(p3++) = (T)(B<0?0:(B>255?255:B)); > } > return *this; > } > > > CImg<Tuchar> get_XYZtoRGB() const { > return CImg<Tuchar>(*this,false).XYZtoRGB(); > } > > > CImg<T>& XYZtoLab() { > > > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "XYZtoLab(): Instance is not a XYZ image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const Tfloat > Xn = (Tfloat)(0.412453f + 0.357580f + 0.180423f), > Yn = (Tfloat)(0.212671f + 0.715160f + 0.072169f), > Zn = (Tfloat)(0.019334f + 0.119193f + 0.950227f); > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > X = (Tfloat)*p1, > Y = (Tfloat)*p2, > Z = (Tfloat)*p3, > XXn = X/Xn, YYn = Y/Yn, ZZn = Z/Zn, > fX = (Tfloat)((XXn)>=0.008856f?(std::pow(XXn,(Tfloat)1/3)):(7.787f*(XXn)+16.0f/116)), > fY = (Tfloat)((YYn)>=0.008856f?(std::pow(YYn,(Tfloat)1/3)):(7.787f*(YYn)+16.0f/116)), > fZ = (Tfloat)((ZZn)>=0.008856f?(std::pow(ZZn,(Tfloat)1/3)):(7.787f*(ZZn)+16.0f/116)); > *(p1++) = (T)cimg::max(0.0f,116*fY - 16); > *(p2++) = (T)(500*(fX - fY)); > *(p3++) = (T)(200*(fY - fZ)); > } > return *this; > } > > > CImg<Tfloat> get_XYZtoLab() const { > return CImg<Tfloat>(*this,false).XYZtoLab(); > } > > > CImg<T>& LabtoXYZ() { > > > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "LabtoXYZ(): Instance is not a Lab image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const Tfloat > Xn = (Tfloat)(0.412453f + 0.357580f + 0.180423f), > Yn = (Tfloat)(0.212671f + 0.715160f + 0.072169f), > Zn = (Tfloat)(0.019334f + 0.119193f + 0.950227f); > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > L = (Tfloat)*p1, > a = (Tfloat)*p2, > b = (Tfloat)*p3, > cY = (L + 16)/116, > Y = (Tfloat)(Yn*((cY)>=0.206893f?((cY)*(cY)*(cY)):(((cY)-16.0f/116)/7.787f))), > pY = (Tfloat)std::pow(Y/Yn,(Tfloat)1/3), > cX = a/500 + pY, > X = Xn*cX*cX*cX, > cZ = pY - b/200, > Z = Zn*cZ*cZ*cZ; > *(p1++) = (T)(X); > *(p2++) = (T)(Y); > *(p3++) = (T)(Z); > } > return *this; > } > > > CImg<Tfloat> get_LabtoXYZ() const { > return CImg<Tfloat>(*this,false).LabtoXYZ(); > } > > > CImg<T>& XYZtoxyY() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "XYZtoxyY(): Instance is not a XYZ image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > X = (Tfloat)*p1, > Y = (Tfloat)*p2, > Z = (Tfloat)*p3, > sum = (X+Y+Z), > nsum = sum>0?sum:1; > *(p1++) = (T)(X/nsum); > *(p2++) = (T)(Y/nsum); > *(p3++) = (T)Y; > } > return *this; > } > > > CImg<Tfloat> get_XYZtoxyY() const { > return CImg<Tfloat>(*this,false).XYZtoxyY(); > } > > > CImg<T>& xyYtoXYZ() { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "xyYtoXYZ(): Instance is not a xyY image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); > for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { > const Tfloat > px = (Tfloat)*p1, > py = (Tfloat)*p2, > Y = (Tfloat)*p3, > ny = py>0?py:1; > *(p1++) = (T)(px*Y/ny); > *(p2++) = (T)Y; > *(p3++) = (T)((1-px-py)*Y/ny); > } > return *this; > } > > > CImg<Tfloat> get_xyYtoXYZ() const { > return CImg<Tfloat>(*this,false).xyYtoXYZ(); > } > > > CImg<T>& RGBtoLab() { > return RGBtoXYZ().XYZtoLab(); > } > > > CImg<Tfloat> get_RGBtoLab() const { > return CImg<Tfloat>(*this,false).RGBtoLab(); > } > > > CImg<T>& LabtoRGB() { > return LabtoXYZ().XYZtoRGB(); > } > > > CImg<Tuchar> get_LabtoRGB() const { > return CImg<Tuchar>(*this,false).LabtoRGB(); > } > > > CImg<T>& RGBtoxyY() { > return RGBtoXYZ().XYZtoxyY(); > } > > > CImg<Tfloat> get_RGBtoxyY() const { > return CImg<Tfloat>(*this,false).RGBtoxyY(); > } > > > CImg<T>& xyYtoRGB() { > return xyYtoXYZ().XYZtoRGB(); > } > > > CImg<Tuchar> get_xyYtoRGB() const { > return CImg<Tuchar>(*this,false).xyYtoRGB(); > } > > > CImg<T>& RGBtoCMYK() { > return RGBtoCMY().CMYtoCMYK(); > } > > > CImg<Tfloat> get_RGBtoCMYK() const { > return CImg<Tfloat>(*this,false).RGBtoCMYK(); > } > > > CImg<T>& CMYKtoRGB() { > return CMYKtoCMY().CMYtoRGB(); > } > > > CImg<Tuchar> get_CMYKtoRGB() const { > return CImg<Tuchar>(*this,false).CMYKtoRGB(); > } > > > > > > CImg<T>& RGBtoBayer() { > return get_RGBtoBayer().move_to(*this); > } > > > CImg<T> get_RGBtoBayer() const { > if (_spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "RGBtoBayer(): Instance is not a RGB image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> res(_width,_height,_depth,1); > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > T *ptrd = res._data; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > if (y%2) { > if (x%2) *(ptrd++) = *ptr_b; > else *(ptrd++) = *ptr_g; > } else { > if (x%2) *(ptrd++) = *ptr_g; > else *(ptrd++) = *ptr_r; > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > return res; > } > > > CImg<T>& BayertoRGB(const unsigned int interpolation_type=3) { > return get_BayertoRGB(interpolation_type).move_to(*this); > } > > > CImg<Tuchar> get_BayertoRGB(const unsigned int interpolation_type=3) const { > if (_spectrum!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "BayertoRGB(): Instance is not a Bayer image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<Tuchar> res(_width,_height,_depth,3); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > Tuchar *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); > switch (interpolation_type) { > case 3 : { > T R[9]; T& Rpp = R[0]; T& Rcp = R[1]; T& Rnp = R[2]; T& Rpc = R[3]; T& Rcc = R[4]; T& Rnc = R[5]; T& Rpn = R[6]; T& Rcn = R[7]; T& Rnn = R[8]; Rpp = Rcp = Rnp = Rpc = Rcc = Rnc = Rpn = Rcn = Rnn = 0; > T G[9]; T& Gpp = G[0]; T& Gcp = G[1]; T& Gnp = G[2]; T& Gpc = G[3]; T& Gcc = G[4]; T& Gnc = G[5]; T& Gpn = G[6]; T& Gcn = G[7]; T& Gnn = G[8]; Gpp = Gcp = Gnp = Gpc = Gcc = Gnc = Gpn = Gcn = Gnn = 0; > T B[9]; T& Bpp = B[0]; T& Bcp = B[1]; T& Bnp = B[2]; T& Bpc = B[3]; T& Bcc = B[4]; T& Bnc = B[5]; T& Bpn = B[6]; T& Bcn = B[7]; T& Bnn = B[8]; Bpp = Bcp = Bnp = Bpc = Bcc = Bnc = Bpn = Bcn = Bnn = 0; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > if (y%2) { > if (x%2) { > const Tfloat alpha = cimg::sqr((Tfloat)Inc - Ipc), beta = cimg::sqr((Tfloat)Icn - Icp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_g = (Tuchar)((cx*(Inc+Ipc) + cy*(Icn+Icp))/(2*(cx+cy))); > } else *ptr_g = (Tuchar)Icc; > } else { > if (x%2) *ptr_g = (Tuchar)Icc; > else { > const Tfloat alpha = cimg::sqr((Tfloat)Inc - Ipc), beta = cimg::sqr((Tfloat)Icn - Icp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_g = (Tuchar)((cx*(Inc+Ipc) + cy*(Icn+Icp))/(2*(cx+cy))); > } > } > ++ptr_g; > } > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > G[0] = (T)(res)(_p1x,_p1y,z,1), G[1] = (T)(res)(x,_p1y,z,1), G[2] = (T)(res)(_n1x,_p1y,z,1), G[3] = (T)(res)(_p1x,y,z,1), G[4] = (T)(res)(x,y,z,1), G[5] = (T)(res)(_n1x,y,z,1), G[6] = (T)(res)(_p1x,_n1y,z,1), G[7] = (T)(res)(x,_n1y,z,1), G[8] = (T)(res)(_n1x,_n1y,z,1); > if (y%2) { > if (x%2) *ptr_b = (Tuchar)Icc; > else { *ptr_r = (Tuchar)((Icn+Icp)/2); *ptr_b = (Tuchar)((Inc+Ipc)/2); } > } else { > if (x%2) { *ptr_r = (Tuchar)((Inc+Ipc)/2); *ptr_b = (Tuchar)((Icn+Icp)/2); } > else *ptr_r = (Tuchar)Icc; > } > ++ptr_r; ++ptr_b; > } > ptr_r = res.data(0,0,0,0); > ptr_g = res.data(0,0,0,1); > ptr_b = res.data(0,0,0,2); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > R[0] = (T)(res)(_p1x,_p1y,z,0), R[1] = (T)(res)(x,_p1y,z,0), R[2] = (T)(res)(_n1x,_p1y,z,0), R[3] = (T)(res)(_p1x,y,z,0), R[4] = (T)(res)(x,y,z,0), R[5] = (T)(res)(_n1x,y,z,0), R[6] = (T)(res)(_p1x,_n1y,z,0), R[7] = (T)(res)(x,_n1y,z,0), R[8] = (T)(res)(_n1x,_n1y,z,0); > G[0] = (T)(res)(_p1x,_p1y,z,1), G[1] = (T)(res)(x,_p1y,z,1), G[2] = (T)(res)(_n1x,_p1y,z,1), G[3] = (T)(res)(_p1x,y,z,1), G[4] = (T)(res)(x,y,z,1), G[5] = (T)(res)(_n1x,y,z,1), G[6] = (T)(res)(_p1x,_n1y,z,1), G[7] = (T)(res)(x,_n1y,z,1), G[8] = (T)(res)(_n1x,_n1y,z,1); > B[0] = (T)(res)(_p1x,_p1y,z,2), B[1] = (T)(res)(x,_p1y,z,2), B[2] = (T)(res)(_n1x,_p1y,z,2), B[3] = (T)(res)(_p1x,y,z,2), B[4] = (T)(res)(x,y,z,2), B[5] = (T)(res)(_n1x,y,z,2), B[6] = (T)(res)(_p1x,_n1y,z,2), B[7] = (T)(res)(x,_n1y,z,2), B[8] = (T)(res)(_n1x,_n1y,z,2); > if (y%2) { > if (x%2) { > const float alpha = (float)cimg::sqr(Rnc-Rpc), beta = (float)cimg::sqr(Rcn-Rcp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_r = (Tuchar)((cx*(Rnc+Rpc) + cy*(Rcn+Rcp))/(2*(cx+cy))); > } > } else { > if (!(x%2)) { > const float alpha = (float)cimg::sqr(Bnc-Bpc), beta = (float)cimg::sqr(Bcn-Bcp), cx = 1/(1+alpha), cy = 1/(1+beta); > *ptr_b = (Tuchar)((cx*(Bnc+Bpc) + cy*(Bcn+Bcp))/(2*(cx+cy))); > } > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } break; > case 2 : { > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > if (y%2) { > if (x%2) { *ptr_r = (Tuchar)((Ipp+Inn+Ipn+Inp)/4); *ptr_g = (Tuchar)((Inc+Ipc+Icn+Icp)/4); *ptr_b = (Tuchar)Icc; } > else { *ptr_r = (Tuchar)((Icp+Icn)/2); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)((Inc+Ipc)/2); } > } else { > if (x%2) { *ptr_r = (Tuchar)((Ipc+Inc)/2); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)((Icn+Icp)/2); } > else { *ptr_r = (Tuchar)Icc; *ptr_g = (Tuchar)((Inc+Ipc+Icn+Icp)/4); *ptr_b = (Tuchar)((Ipp+Inn+Ipn+Inp)/4); } > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } break; > case 1 : { > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int _p1x = x?x-1:1, _p1y = y?y-1:1, _n1x = x<width()-1?x+1:x-1, _n1y = y<height()-1?y+1:y-1; > I[0] = (T)(*this)(_p1x,_p1y,z,0), I[1] = (T)(*this)(x,_p1y,z,0), I[2] = (T)(*this)(_n1x,_p1y,z,0), I[3] = (T)(*this)(_p1x,y,z,0), I[4] = (T)(*this)(x,y,z,0), I[5] = (T)(*this)(_n1x,y,z,0), I[6] = (T)(*this)(_p1x,_n1y,z,0), I[7] = (T)(*this)(x,_n1y,z,0), I[8] = (T)(*this)(_n1x,_n1y,z,0); > if (y%2) { > if (x%2) { *ptr_r = (Tuchar)cimg::min(Ipp,Inn,Ipn,Inp); *ptr_g = (Tuchar)cimg::min(Inc,Ipc,Icn,Icp); *ptr_b = (Tuchar)Icc; } > else { *ptr_r = (Tuchar)cimg::min(Icn,Icp); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)cimg::min(Inc,Ipc); } > } else { > if (x%2) { *ptr_r = (Tuchar)cimg::min(Inc,Ipc); *ptr_g = (Tuchar)Icc; *ptr_b = (Tuchar)cimg::min(Icn,Icp); } > else { *ptr_r = (Tuchar)Icc; *ptr_g = (Tuchar)cimg::min(Inc,Ipc,Icn,Icp); *ptr_b = (Tuchar)cimg::min(Ipp,Inn,Ipn,Inp); } > } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } break; > default : { > const T *ptrs = _data; > res.fill(0); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const T val = *(ptrs++); > if (y%2) { if (x%2) *ptr_b = val; else *ptr_g = val; } else { if (x%2) *ptr_g = val; else *ptr_r = val; } > ++ptr_r; ++ptr_g; ++ptr_b; > } > } > } > return res; > } ># 20275 "./CImg.h" > static float _cimg_lanczos(const float x) { > if (x<=-2 || x>=2) return 0; > const float a = (float)cimg::PI*x, b = 0.5f*a; > return (float)(x?std::sin(a)*std::sin(b)/(a*b):1); > } ># 20303 "./CImg.h" > CImg<T>& resize(const int size_x, const int size_y=-100, > const int size_z=-100, const int size_c=-100, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) { > if (!size_x || !size_y || !size_z || !size_c) return assign(); > const unsigned int > _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), > _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), > _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), > _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), > sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; > if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return *this; > if (is_empty()) return assign(sx,sy,sz,sc,(T)0); > if (interpolation_type==-1 && sx*sy*sz*sc==size()) { > _width = sx; _height = sy; _depth = sz; _spectrum = sc; > return *this; > } > return get_resize(sx,sy,sz,sc,interpolation_type,boundary_conditions,centering_x,centering_y,centering_z,centering_c).move_to(*this); > } > > > CImg<T> get_resize(const int size_x, const int size_y = -100, > const int size_z = -100, const int size_c = -100, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) const { > if (centering_x<0 || centering_x>1 || centering_y<0 || centering_y>1 || > centering_z<0 || centering_z>1 || centering_c<0 || centering_c>1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize(): Specified centering arguments (%g,%g,%g,%g) are outside range [0,1].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > centering_x,centering_y,centering_z,centering_c); > > if (!size_x || !size_y || !size_z || !size_c) return CImg<T>(); > const unsigned int > _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), > _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), > _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), > _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), > sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; > if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return +*this; > if (is_empty()) return CImg<T>(sx,sy,sz,sc,0); > > CImg<T> res; > switch (interpolation_type) { > > > > case -1 : > std::memcpy(res.assign(sx,sy,sz,sc,0)._data,_data,sizeof(T)*cimg::min(size(),sx*sy*sz*sc)); > break; > > > > case 0 : { > const int > xc = (int)(centering_x*((int)sx - width())), > yc = (int)(centering_y*((int)sy - height())), > zc = (int)(centering_z*((int)sz - depth())), > cc = (int)(centering_c*((int)sc - spectrum())); > > switch (boundary_conditions) { > case 2 : { > res.assign(sx,sy,sz,sc); > const int > x0 = ((int)xc%width()) - width(), > y0 = ((int)yc%height()) - height(), > z0 = ((int)zc%depth()) - depth(), > c0 = ((int)cc%spectrum()) - spectrum(); > > ># 20374 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=65536) ># 20374 "./CImg.h" > > > for (int c = c0; c<(int)sc; c+=spectrum()) > for (int z = z0; z<(int)sz; z+=depth()) > for (int y = y0; y<(int)sy; y+=height()) > for (int x = x0; x<(int)sx; x+=width()) > res.draw_image(x,y,z,c,*this); > } break; > case 1 : { > res.assign(sx,sy,sz,sc).draw_image(xc,yc,zc,cc,*this); > CImg<T> sprite; > if (xc>0) { > res.get_crop(xc,yc,zc,cc,xc,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int x = xc-1; x>=0; --x) res.draw_image(x,yc,zc,cc,sprite); > } > if (xc+width()<(int)sx) { > res.get_crop(xc+width()-1,yc,zc,cc,xc+width()-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int x = xc+width(); x<(int)sx; ++x) res.draw_image(x,yc,zc,cc,sprite); > } > if (yc>0) { > res.get_crop(0,yc,zc,cc,sx-1,yc,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int y = yc-1; y>=0; --y) res.draw_image(0,y,zc,cc,sprite); > } > if (yc+height()<(int)sy) { > res.get_crop(0,yc+height()-1,zc,cc,sx-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int y = yc+height(); y<(int)sy; ++y) res.draw_image(0,y,zc,cc,sprite); > } > if (zc>0) { > res.get_crop(0,0,zc,cc,sx-1,sy-1,zc,cc+spectrum()-1).move_to(sprite); > for (int z = zc-1; z>=0; --z) res.draw_image(0,0,z,cc,sprite); > } > if (zc+depth()<(int)sz) { > res.get_crop(0,0,zc+depth()-1,cc,sx-1,sy-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); > for (int z = zc+depth(); z<(int)sz; ++z) res.draw_image(0,0,z,cc,sprite); > } > if (cc>0) { > res.get_crop(0,0,0,cc,sx-1,sy-1,sz-1,cc).move_to(sprite); > for (int c = cc-1; c>=0; --c) res.draw_image(0,0,0,c,sprite); > } > if (cc+spectrum()<(int)sc) { > res.get_crop(0,0,0,cc+spectrum()-1,sx-1,sy-1,sz-1,cc+spectrum()-1).move_to(sprite); > for (int c = cc+spectrum(); c<(int)sc; ++c) res.draw_image(0,0,0,c,sprite); > } > } break; > default : > res.assign(sx,sy,sz,sc,0).draw_image(xc,yc,zc,cc,*this); > } > break; > } break; > > > > case 1 : { > res.assign(sx,sy,sz,sc); > CImg<ulongT> off_x(sx), off_y(sy+1), off_z(sz+1), off_c(sc+1); > const unsigned long > wh = (unsigned long)_width*_height, > whd = (unsigned long)_width*_height*_depth, > sxy = (unsigned long)sx*sy, > sxyz = (unsigned long)sx*sy*sz; > if (sx==_width) off_x.fill(1); > else { > unsigned long *poff_x = off_x._data, curr = 0; > for (int x = 0; x<(int)((res)._width); ++x) { const unsigned long old = curr; curr = ((x+1LU)*_width/sx); *(poff_x++) = curr - old; } > } > if (sy==_height) off_y.fill(_width); > else { > unsigned long *poff_y = off_y._data, curr = 0; > for (int y = 0; y<(int)((res)._height); ++y) { const unsigned long old = curr; curr = ((y+1LU)*_height/sy); *(poff_y++) = _width*(curr - old); } *poff_y = 0; > } > if (sz==_depth) off_z.fill(wh); > else { > unsigned long *poff_z = off_z._data, curr = 0; > for (int z = 0; z<(int)((res)._depth); ++z) { const unsigned long old = curr; curr = ((z+1LU)*_depth/sz); *(poff_z++) = wh*(curr - old); } *poff_z = 0; > } > if (sc==_spectrum) off_c.fill(whd); > else { > unsigned long *poff_c = off_c._data, curr = 0; > for (int c = 0; c<(int)((res)._spectrum); ++c) { const unsigned long old = curr; curr = ((c+1LU)*_spectrum/sc); *(poff_c++) = whd*(curr - old); } *poff_c = 0; > } > > T *ptrd = res._data; > const T* ptrc = _data; > const unsigned long *poff_c = off_c._data; > for (unsigned int c = 0; c<sc; ) { > const T *ptrz = ptrc; > const unsigned long *poff_z = off_z._data; > for (unsigned int z = 0; z<sz; ) { > const T *ptry = ptrz; > const unsigned long *poff_y = off_y._data; > for (unsigned int y = 0; y<sy; ) { > const T *ptrx = ptry; > const unsigned long *poff_x = off_x._data; > for (int x = 0; x<(int)((res)._width); ++x) { *(ptrd++) = *ptrx; ptrx+=*(poff_x++); } > ++y; > unsigned long dy = *(poff_y++); > for (;!dy && y<dy; std::memcpy(ptrd,ptrd - sx,sizeof(T)*sx), ++y, ptrd+=sx, dy = *(poff_y++)) {} > ptry+=dy; > } > ++z; > unsigned long dz = *(poff_z++); > for (;!dz && z<dz; std::memcpy(ptrd,ptrd-sxy,sizeof(T)*sxy), ++z, ptrd+=sxy, dz = *(poff_z++)) {} > ptrz+=dz; > } > ++c; > unsigned long dc = *(poff_c++); > for (;!dc && c<dc; std::memcpy(ptrd,ptrd-sxyz,sizeof(T)*sxyz), ++c, ptrd+=sxyz, dc = *(poff_c++)) {} > ptrc+=dc; > } > } break; > > > > case 2 : { > bool instance_first = true; > if (sx!=_width) { > CImg<Tfloat> tmp(sx,_height,_depth,_spectrum,0); > for (unsigned int a = _width*sx, b = _width, c = sx, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) tmp(t,y,z,v)+=(Tfloat)(*this)(s,y,z,v)*d; > if (!b) { > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) tmp(t,y,z,v)/=_width; > ++t; > b = _width; > } > if (!c) { ++s; c = sx; } > } > tmp.move_to(res); > instance_first = false; > } > if (sy!=_height) { > CImg<Tfloat> tmp(sx,sy,_depth,_spectrum,0); > for (unsigned int a = _height*sy, b = _height, c = sy, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > if (instance_first) > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,t,z,v)+=(Tfloat)(*this)(x,s,z,v)*d; > else > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,t,z,v)+=(Tfloat)res(x,s,z,v)*d; > if (!b) { > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int z = 0; z<(int)((tmp)._depth); ++z) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,t,z,v)/=_height; > ++t; > b = _height; > } > if (!c) { ++s; c = sy; } > } > tmp.move_to(res); > instance_first = false; > } > if (sz!=_depth) { > CImg<Tfloat> tmp(sx,sy,sz,_spectrum,0); > for (unsigned int a = _depth*sz, b = _depth, c = sz, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > if (instance_first) > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,t,v)+=(Tfloat)(*this)(x,y,s,v)*d; > else > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,t,v)+=(Tfloat)res(x,y,s,v)*d; > if (!b) { > for (int v = 0; v<(int)((tmp)._spectrum); ++v) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,t,v)/=_depth; > ++t; > b = _depth; > } > if (!c) { ++s; c = sz; } > } > tmp.move_to(res); > instance_first = false; > } > if (sc!=_spectrum) { > CImg<Tfloat> tmp(sx,sy,sz,sc,0); > for (unsigned int a = _spectrum*sc, b = _spectrum, c = sc, s = 0, t = 0; a; ) { > const unsigned int d = cimg::min(b,c); > a-=d; b-=d; c-=d; > if (instance_first) > for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,z,t)+=(Tfloat)(*this)(x,y,z,s)*d; > else > for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,z,t)+=(Tfloat)res(x,y,z,s)*d; > if (!b) { > for (int z = 0; z<(int)((tmp)._depth); ++z) for (int y = 0; y<(int)((tmp)._height); ++y) for (int x = 0; x<(int)((tmp)._width); ++x) tmp(x,y,z,t)/=_spectrum; > ++t; > b = _spectrum; > } > if (!c) { ++s; c = sc; } > } > tmp.move_to(res); > instance_first = false; > } > } break; > > > > case 3 : { > CImg<uintT> off(cimg::max(sx,sy,sz,sc)); > CImg<floatT> foff(off._width); > CImg<T> resx, resy, resz, resc; > > if (sx!=_width) { > if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); > else { > const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; > resx.assign(sx,_height,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } > > ># 20583 "./CImg.h" >#pragma omp parallel for collapse(3) if (resx.size()>=65536) ># 20583 "./CImg.h" > > > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) { > const T *ptrs = data(0,y,z,c), *const ptrsmax = ptrs + (_width-1); > T *ptrd = resx.data(0,y,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+1):val1; > *(ptrd++) = (T)((1-alpha)*val1 + alpha*val2); > ptrs+=*(poff++); > } > } > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); > else { > const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; > resy.assign(sx,sy,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } > > ># 20613 "./CImg.h" >#pragma omp parallel for collapse(3) if (resy.size()>=65536) ># 20613 "./CImg.h" > > > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) { > const T *ptrs = resx.data(x,0,z,c), *const ptrsmax = ptrs + (_height-1)*sx; > T *ptrd = resy.data(x,0,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+sx):val1; > *ptrd = (T)((1-alpha)*val1 + alpha*val2); > ptrd+=sx; > ptrs+=*(poff++); > } > } > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); > else { > const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; > const unsigned int sxy = sx*sy; > resz.assign(sx,sy,sz,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } > > ># 20646 "./CImg.h" >#pragma omp parallel for collapse(3) if (resz.size()>=65536) ># 20646 "./CImg.h" > > > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) { > const T *ptrs = resy.data(x,y,0,c), *const ptrsmax = ptrs + (_depth-1)*sxy; > T *ptrd = resz.data(x,y,0,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+sxy):val1; > *ptrd = (T)((1-alpha)*val1 + alpha*val2); > ptrd+=sxy; > ptrs+=*(poff++); > } > } > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); > else { > const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; > const unsigned int sxyz = sx*sy*sz; > resc.assign(sx,sy,sz,sc); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } > > ># 20679 "./CImg.h" >#pragma omp parallel for collapse(3) if (resc.size()>=65536) ># 20679 "./CImg.h" > > > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) { > const T *ptrs = resz.data(x,y,z,0), *const ptrsmax = ptrs + (_spectrum-1)*sxyz; > T *ptrd = resc.data(x,y,z,0); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { > const float alpha = *(pfoff++); > const T val1 = *ptrs, val2 = ptrs<ptrsmax?*(ptrs+sxyz):val1; > *ptrd = (T)((1-alpha)*val1 + alpha*val2); > ptrd+=sxyz; > ptrs+=*(poff++); > } > } > } > } > resz.assign(); > } else resc.assign(resz,true); > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > case 4 : { > CImg<T> resx, resy, resz, resc; > if (sx!=_width) { > if (sx<_width) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > resx.assign(sx,_height,_depth,_spectrum,0); > const int dx = sx*2, dy = width()*2; > int err = (int)(dy + centering_x*(sx*dy/width() - dy)), xs = 0; > for (int x = 0; x<(int)((resx)._width); ++x) if ((err-=dy)<=0) { > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) resx(x,y,z,c) = (*this)(xs,y,z,c); > ++xs; > err+=dx; > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (sy<_height) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > resy.assign(sx,sy,_depth,_spectrum,0); > const int dx = sy*2, dy = height()*2; > int err = (int)(dy + centering_y*(sy*dy/height() - dy)), ys = 0; > for (int y = 0; y<(int)((resy)._height); ++y) if ((err-=dy)<=0) { > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) resy(x,y,z,c) = resx(x,ys,z,c); > ++ys; > err+=dx; > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (sz<_depth) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > resz.assign(sx,sy,sz,_spectrum,0); > const int dx = sz*2, dy = depth()*2; > int err = (int)(dy + centering_z*(sz*dy/depth() - dy)), zs = 0; > for (int z = 0; z<(int)((resz)._depth); ++z) if ((err-=dy)<=0) { > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) resz(x,y,z,c) = resy(x,y,zs,c); > ++zs; > err+=dx; > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (sc<_spectrum) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > resc.assign(sx,sy,sz,sc,0); > const int dx = sc*2, dy = spectrum()*2; > int err = (int)(dy + centering_c*(sc*dy/spectrum() - dy)), cs = 0; > for (int c = 0; c<(int)((resc)._spectrum); ++c) if ((err-=dy)<=0) { > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) resc(x,y,z,c) = resz(x,y,z,cs); > ++cs; > err+=dx; > } > } > resz.assign(); > } else resc.assign(resz,true); > > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > case 5 : { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > CImg<uintT> off(cimg::max(sx,sy,sz,sc)); > CImg<floatT> foff(off._width); > CImg<T> resx, resy, resz, resc; > > if (sx!=_width) { > if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); > else { > const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; > resx.assign(sx,_height,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } > > ># 20787 "./CImg.h" >#pragma omp parallel for collapse(3) if (resx.size()>=65536) ># 20787 "./CImg.h" > > > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) { > const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_width-2); > T *ptrd = resx.data(0,y,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-1):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *(ptrd++) = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrs+=*(poff++); > } > } > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); > else { > const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; > resy.assign(sx,sy,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } > > ># 20822 "./CImg.h" >#pragma omp parallel for collapse(3) if (resy.size()>=65536) ># 20822 "./CImg.h" > > > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) { > const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_height-2)*sx; > T *ptrd = resy.data(x,0,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sx):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sx):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sx; > ptrs+=*(poff++); > } > } > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); > else { > const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; > const unsigned int sxy = sx*sy; > resz.assign(sx,sy,sz,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } > > ># 20860 "./CImg.h" >#pragma omp parallel for collapse(3) if (resz.size()>=65536) ># 20860 "./CImg.h" > > > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) { > const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_depth-2)*sxy; > T *ptrd = resz.data(x,y,0,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxy):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxy):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxy; > ptrs+=*(poff++); > } > } > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); > else { > const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; > const unsigned int sxyz = sx*sy*sz; > resc.assign(sx,sy,sz,sc); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } > > ># 20898 "./CImg.h" >#pragma omp parallel for collapse(3) if (resc.size()>=65536) ># 20898 "./CImg.h" > > > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) { > const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; > T *ptrd = resc.data(x,y,z,0); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { > const float t = *(pfoff++); > const Tfloat > val1 = (Tfloat)*ptrs, > val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxyz):val1, > val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val1, > val3 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxyz):val2, > val = val1 + 0.5f*(t*(-val0+val2) + t*t*(2*val0-5*val1+4*val2-val3) + t*t*t*(-val0+3*val1-3*val2+val3)); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxyz; > ptrs+=*(poff++); > } > } > } > } > resz.assign(); > } else resc.assign(resz,true); > > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > case 6 : { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > CImg<uintT> off(cimg::max(sx,sy,sz,sc)); > CImg<floatT> foff(off._width); > CImg<T> resx, resy, resz, resc; > > if (sx!=_width) { > if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); > else { > if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); > else { > const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; > resx.assign(sx,_height,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fx; *(poff++) = (unsigned int)curr - (unsigned int)old; } > > ># 20946 "./CImg.h" >#pragma omp parallel for collapse(3) if (resx.size()>=65536) ># 20946 "./CImg.h" > > > for (int c = 0; c<(int)((resx)._spectrum); ++c) for (int z = 0; z<(int)((resx)._depth); ++z) for (int y = 0; y<(int)((resx)._height); ++y) { > const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + 1, *const ptrsmax = ptrs0 + (_width-2); > T *ptrd = resx.data(0,y,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int x = 0; x<(int)((resx)._width); ++x) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-1):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *(ptrd++) = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrs+=*(poff++); > } > } > } > } > } else resx.assign(*this,true); > > if (sy!=_height) { > if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); > else { > if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); > else { > const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; > resy.assign(sx,sy,_depth,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; *(poff++) = sx*((unsigned int)curr-(unsigned int)old); } > > ># 20988 "./CImg.h" >#pragma omp parallel for collapse(3) if (resy.size()>=65536) ># 20988 "./CImg.h" > > > for (int c = 0; c<(int)((resy)._spectrum); ++c) for (int z = 0; z<(int)((resy)._depth); ++z) for (int x = 0; x<(int)((resy)._width); ++x) { > const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sx, *const ptrsmax = ptrs0 + (_height-2)*sx; > T *ptrd = resy.data(x,0,z,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int y = 0; y<(int)((resy)._height); ++y) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sx):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sx):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sx):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sx; > ptrs+=*(poff++); > } > } > } > } > resx.assign(); > } else resy.assign(resx,true); > > if (sz!=_depth) { > if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); > else { > if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); > else { > const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; > const unsigned int sxy = sx*sy; > resz.assign(sx,sy,sz,_spectrum); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fz; *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); } > > ># 21033 "./CImg.h" >#pragma omp parallel for collapse(3) if (resz.size()>=65536) ># 21033 "./CImg.h" > > > for (int c = 0; c<(int)((resz)._spectrum); ++c) for (int y = 0; y<(int)((resz)._height); ++y) for (int x = 0; x<(int)((resz)._width); ++x) { > const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxy, *const ptrsmax = ptrs0 + (_depth-2)*sxy; > T *ptrd = resz.data(x,y,0,c); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int z = 0; z<(int)((resz)._depth); ++z) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxy):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxy):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxy):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxy; > ptrs+=*(poff++); > } > } > } > } > resy.assign(); > } else resz.assign(resy,true); > > if (sc!=_spectrum) { > if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); > else { > if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); > else { > const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0):(float)_spectrum/sc; > const unsigned int sxyz = sx*sy*sz; > resc.assign(sx,sy,sz,sc); > float curr = 0, old = 0; > unsigned int *poff = off._data; > float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fc; *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); } > > ># 21078 "./CImg.h" >#pragma omp parallel for collapse(3) if (resc.size()>=65536) ># 21078 "./CImg.h" > > > for (int z = 0; z<(int)((resc)._depth); ++z) for (int y = 0; y<(int)((resc)._height); ++y) for (int x = 0; x<(int)((resc)._width); ++x) { > const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxyz, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; > T *ptrd = resc.data(x,y,z,0); > const unsigned int *poff = off._data; > const float *pfoff = foff._data; > for (int c = 0; c<(int)((resc)._spectrum); ++c) { > const float > t = *(pfoff++), > w0 = _cimg_lanczos(t+2), > w1 = _cimg_lanczos(t+1), > w2 = _cimg_lanczos(t), > w3 = _cimg_lanczos(t-1), > w4 = _cimg_lanczos(t-2); > const Tfloat > val2 = (Tfloat)*ptrs, > val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxyz):val2, > val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxyz):val1, > val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val2, > val4 = ptrs<ptrsmax?(Tfloat)*(ptrs+2*sxyz):val3, > val = (val0*w0 + val1*w1 + val2*w2 + val3*w3 + val4*w4)/(w1 + w2 + w3 + w4); > *ptrd = (T)(val<vmin?vmin:val>vmax?vmax:val); > ptrd+=sxyz; > ptrs+=*(poff++); > } > } > } > } > resz.assign(); > } else resc.assign(resz,true); > > return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; > } break; > > > > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize(): Invalid specified interpolation %d " > "(should be { -1=raw | 0=none | 1=nearest | 2=average | 3=linear | 4=grid | 5=cubic | 6=lanczos }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > interpolation_type); > } > return res; > } ># 21135 "./CImg.h" > template<typename t> > CImg<T>& resize(const CImg<t>& src, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) { > return resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } > > > template<typename t> > CImg<T> get_resize(const CImg<t>& src, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) const { > return get_resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } ># 21164 "./CImg.h" > CImg<T>& resize(const CImgDisplay& disp, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) { > return resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } > > > CImg<T> get_resize(const CImgDisplay& disp, > const int interpolation_type=1, const unsigned int boundary_conditions=0, > const float centering_x = 0, const float centering_y = 0, > const float centering_z = 0, const float centering_c = 0) const { > return get_resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, > centering_x,centering_y,centering_z,centering_c); > } > > > CImg<T>& resize_halfXY() { > return get_resize_halfXY().move_to(*this); > } > > > CImg<T> get_resize_halfXY() const { > if (is_empty()) return *this; > const Tfloat mask[9] = { 0.07842776544f, 0.1231940459f, 0.07842776544f, > 0.1231940459f, 0.1935127547f, 0.1231940459f, > 0.07842776544f, 0.1231940459f, 0.07842776544f }; > T I[9] = { 0 }; > CImg<T> res(_width/2,_height/2,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (T)(*this)(0,y,z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,z,c)), (I[5] = (T)(*this)(_n1x,y,z,c)), (I[8] = (T)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > if (x%2 && y%2) *(ptrd++) = (T) > (I[0]*mask[0] + I[1]*mask[1] + I[2]*mask[2] + > I[3]*mask[3] + I[4]*mask[4] + I[5]*mask[5] + > I[6]*mask[6] + I[7]*mask[7] + I[8]*mask[8]); > return res; > } > > > > > > CImg<T>& resize_doubleXY() { > return get_resize_doubleXY().move_to(*this); > } > > > CImg<T> get_resize_doubleXY() const { ># 21237 "./CImg.h" > if (is_empty()) return *this; > CImg<T> res(_width<<1,_height<<1,_depth,_spectrum); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > T > *ptrd1 = res.data(0,0,z,c), > *ptrd2 = ptrd1 + res._width; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y, ptrd1+=(res)._width, ptrd2+=(res)._width) for (int x = 0, _p1x = 0, _n1x = (int)( (I[1] = (T)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (T)(*this)(0,y,z,c)), (I[7] = (T)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,z,c)), (I[5] = (T)(*this)(_n1x,y,z,c)), (I[8] = (T)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[1] = I[2], I[3] = I[4], I[4] = I[5], I[7] = I[8], _p1x = x++, ++_n1x) { > if (Icp!=Icn && Ipc!=Inc) { > *(ptrd1++) = Ipc==Icp?Ipc:Icc; > *(ptrd1++) = Icp==Inc?Inc:Icc; > *(ptrd2++) = Ipc==Icn?Ipc:Icc; > *(ptrd2++) = Icn==Inc?Inc:Icc; > } else { *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; } > } > } > return res; > } > > > > > > CImg<T>& resize_tripleXY() { > return get_resize_tripleXY().move_to(*this); > } > > > CImg<T> get_resize_tripleXY() const { ># 21290 "./CImg.h" > if (is_empty()) return *this; > CImg<T> res(3*_width,3*_height,_depth,_spectrum); > T I[9]; T& Ipp = I[0]; T& Icp = I[1]; T& Inp = I[2]; T& Ipc = I[3]; T& Icc = I[4]; T& Inc = I[5]; T& Ipn = I[6]; T& Icn = I[7]; T& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > T > *ptrd1 = res.data(0,0,z,c), > *ptrd2 = ptrd1 + res._width, > *ptrd3 = ptrd2 + res._width; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y, ptrd1+=2*(res)._width, ptrd2+=2*(res)._width, ptrd3+=2*(res)._width) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (T)(*this)(0,y,z,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,z,c)), (I[5] = (T)(*this)(_n1x,y,z,c)), (I[8] = (T)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > if (Icp != Icn && Ipc != Inc) { > *(ptrd1++) = Ipc==Icp?Ipc:Icc; > *(ptrd1++) = (Ipc==Icp && Icc!=Inp) || (Icp==Inc && Icc!=Ipp)?Icp:Icc; > *(ptrd1++) = Icp==Inc?Inc:Icc; > *(ptrd2++) = (Ipc==Icp && Icc!=Ipn) || (Ipc==Icn && Icc!=Ipp)?Ipc:Icc; > *(ptrd2++) = Icc; > *(ptrd2++) = (Icp==Inc && Icc!=Inn) || (Icn==Inc && Icc!=Inp)?Inc:Icc; > *(ptrd3++) = Ipc==Icn?Ipc:Icc; > *(ptrd3++) = (Ipc==Icn && Icc!=Inn) || (Icn==Inc && Icc!=Ipn)?Icn:Icc; > *(ptrd3++) = Icn==Inc?Inc:Icc; > } else { > *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd1++) = Icc; > *(ptrd2++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; > *(ptrd3++) = Icc; *(ptrd3++) = Icc; *(ptrd3++) = Icc; > } > } > } > return res; > } > > > > > > CImg<T>& mirror(const char axis) { > if (is_empty()) return *this; > T *pf, *pb, *buf = 0; > switch (cimg::uncase(axis)) { > case 'x' : { > pf = _data; pb = data(_width-1); > const unsigned int width2 = _width/2; > for (unsigned int yzv = 0; yzv<_height*_depth*_spectrum; ++yzv) { > for (unsigned int x = 0; x<width2; ++x) { const T val = *pf; *(pf++) = *pb; *(pb--) = val; } > pf+=_width - width2; > pb+=_width + width2; > } > } break; > case 'y' : { > buf = new T[_width]; > pf = _data; pb = data(0,_height-1); > const unsigned int height2 = _height/2; > for (unsigned int zv = 0; zv<_depth*_spectrum; ++zv) { > for (unsigned int y = 0; y<height2; ++y) { > std::memcpy(buf,pf,_width*sizeof(T)); > std::memcpy(pf,pb,_width*sizeof(T)); > std::memcpy(pb,buf,_width*sizeof(T)); > pf+=_width; > pb-=_width; > } > pf+=(unsigned long)_width*(_height - height2); > pb+=(unsigned long)_width*(_height + height2); > } > } break; > case 'z' : { > buf = new T[(unsigned long)_width*_height]; > pf = _data; pb = data(0,0,_depth-1); > const unsigned int depth2 = _depth/2; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > for (unsigned int z = 0; z<depth2; ++z) { > std::memcpy(buf,pf,_width*_height*sizeof(T)); > std::memcpy(pf,pb,_width*_height*sizeof(T)); > std::memcpy(pb,buf,_width*_height*sizeof(T)); > pf+=(unsigned long)_width*_height; > pb-=(unsigned long)_width*_height; > } > pf+=(unsigned long)_width*_height*(_depth - depth2); > pb+=(unsigned long)_width*_height*(_depth + depth2); > } > } break; > case 'c' : { > buf = new T[(unsigned long)_width*_height*_depth]; > pf = _data; pb = data(0,0,0,_spectrum-1); > const unsigned int _spectrum2 = _spectrum/2; > for (unsigned int v = 0; v<_spectrum2; ++v) { > std::memcpy(buf,pf,_width*_height*_depth*sizeof(T)); > std::memcpy(pf,pb,_width*_height*_depth*sizeof(T)); > std::memcpy(pb,buf,_width*_height*_depth*sizeof(T)); > pf+=(unsigned long)_width*_height*_depth; > pb-=(unsigned long)_width*_height*_depth; > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "mirror(): Invalid specified axis '%c'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > delete[] buf; > return *this; > } > > > CImg<T> get_mirror(const char axis) const { > return (+*this).mirror(axis); > } > > > > > > > CImg<T>& mirror(const char *const axes) { > for (const char *s = axes; *s; s++) mirror(*s); > return *this; > } > > > CImg<T> get_mirror(const char *const axes) const { > return (+*this).mirror(axes); > } ># 21423 "./CImg.h" > CImg<T>& shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, > const int boundary_conditions=0) { > if (is_empty()) return *this; > if (delta_x) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_x)>=width()) return fill(0); > if (delta_x<0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(0,y,z,c),data(-delta_x,y,z,c),(_width+delta_x)*sizeof(T)); > std::memset(data(_width+delta_x,y,z,c),0,-delta_x*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(delta_x,y,z,c),data(0,y,z,c),(_width-delta_x)*sizeof(T)); > std::memset(data(0,y,z,c),0,delta_x*sizeof(T)); > } > break; > case 1 : > if (delta_x<0) { > const int ndelta_x = (-delta_x>=width())?width()-1:-delta_x; > if (!ndelta_x) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); > T *ptrd = data(_width-1,y,z,c); > const T val = *ptrd; > for (int l = 0; l<ndelta_x-1; ++l) *(--ptrd) = val; > } > } else { > const int ndelta_x = (delta_x>=width())?width()-1:delta_x; > if (!ndelta_x) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memmove(data(ndelta_x,y,z,c),data(0,y,z,c),(_width-ndelta_x)*sizeof(T)); > T *ptrd = data(0,y,z,c); > const T val = *ptrd; > for (int l = 0; l<ndelta_x-1; ++l) *(++ptrd) = val; > } > } > break; > default : { > const int ml = cimg::mod(-delta_x,width()), ndelta_x = (ml<=width()/2)?ml:(ml-width()); > if (!ndelta_x) return *this; > T *const buf = new T[cimg::abs(ndelta_x)]; > if (ndelta_x>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memcpy(buf,data(0,y,z,c),ndelta_x*sizeof(T)); > std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); > std::memcpy(data(_width-ndelta_x,y,z,c),buf,ndelta_x*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > std::memcpy(buf,data(_width+ndelta_x,y,z,c),-ndelta_x*sizeof(T)); > std::memmove(data(-ndelta_x,y,z,c),data(0,y,z,c),(_width+ndelta_x)*sizeof(T)); > std::memcpy(data(0,y,z,c),buf,-ndelta_x*sizeof(T)); > } > delete[] buf; > } > } > > if (delta_y) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_y)>=height()) return fill(0); > if (delta_y<0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,0,z,c),data(0,-delta_y,z,c),_width*(_height+delta_y)*sizeof(T)); > std::memset(data(0,_height+delta_y,z,c),0,-delta_y*_width*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,delta_y,z,c),data(0,0,z,c),_width*(_height-delta_y)*sizeof(T)); > std::memset(data(0,0,z,c),0,delta_y*_width*sizeof(T)); > } > break; > case 1 : > if (delta_y<0) { > const int ndelta_y = (-delta_y>=height())?height()-1:-delta_y; > if (!ndelta_y) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); > T *ptrd = data(0,_height-ndelta_y,z,c), *ptrs = data(0,_height-1,z,c); > for (int l = 0; l<ndelta_y-1; ++l) { std::memcpy(ptrd,ptrs,_width*sizeof(T)); ptrd+=_width; } > } > } else { > const int ndelta_y = (delta_y>=height())?height()-1:delta_y; > if (!ndelta_y) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memmove(data(0,ndelta_y,z,c),data(0,0,z,c),_width*(_height-ndelta_y)*sizeof(T)); > T *ptrd = data(0,1,z,c), *ptrs = data(0,0,z,c); > for (int l = 0; l<ndelta_y-1; ++l) { std::memcpy(ptrd,ptrs,_width*sizeof(T)); ptrd+=_width; } > } > } > break; > default : { > const int ml = cimg::mod(-delta_y,height()), ndelta_y = (ml<=height()/2)?ml:(ml-height()); > if (!ndelta_y) return *this; > T *const buf = new T[(unsigned long)_width*cimg::abs(ndelta_y)]; > if (ndelta_y>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memcpy(buf,data(0,0,z,c),_width*ndelta_y*sizeof(T)); > std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); > std::memcpy(data(0,_height-ndelta_y,z,c),buf,_width*ndelta_y*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > std::memcpy(buf,data(0,_height+ndelta_y,z,c),-ndelta_y*_width*sizeof(T)); > std::memmove(data(0,-ndelta_y,z,c),data(0,0,z,c),_width*(_height+ndelta_y)*sizeof(T)); > std::memcpy(data(0,0,z,c),buf,-ndelta_y*_width*sizeof(T)); > } > delete[] buf; > } > } > > if (delta_z) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_z)>=depth()) return fill(0); > if (delta_z<0) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,0,c),data(0,0,-delta_z,c),_width*_height*(_depth+delta_z)*sizeof(T)); > std::memset(data(0,0,_depth+delta_z,c),0,_width*_height*(-delta_z)*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,delta_z,c),data(0,0,0,c),_width*_height*(_depth-delta_z)*sizeof(T)); > std::memset(data(0,0,0,c),0,delta_z*_width*_height*sizeof(T)); > } > break; > case 1 : > if (delta_z<0) { > const int ndelta_z = (-delta_z>=depth())?depth()-1:-delta_z; > if (!ndelta_z) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); > T *ptrd = data(0,0,_depth-ndelta_z,c), *ptrs = data(0,0,_depth-1,c); > for (int l = 0; l<ndelta_z-1; ++l) { std::memcpy(ptrd,ptrs,_width*_height*sizeof(T)); ptrd+=(unsigned long)_width*_height; } > } > } else { > const int ndelta_z = (delta_z>=depth())?depth()-1:delta_z; > if (!ndelta_z) return *this; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memmove(data(0,0,ndelta_z,c),data(0,0,0,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); > T *ptrd = data(0,0,1,c), *ptrs = data(0,0,0,c); > for (int l = 0; l<ndelta_z-1; ++l) { std::memcpy(ptrd,ptrs,_width*_height*sizeof(T)); ptrd+=(unsigned long)_width*_height; } > } > } > break; > default : { > const int ml = cimg::mod(-delta_z,depth()), ndelta_z = (ml<=depth()/2)?ml:(ml-depth()); > if (!ndelta_z) return *this; > T *const buf = new T[(unsigned long)_width*_height*cimg::abs(ndelta_z)]; > if (ndelta_z>0) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memcpy(buf,data(0,0,0,c),_width*_height*ndelta_z*sizeof(T)); > std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); > std::memcpy(data(0,0,_depth-ndelta_z,c),buf,_width*_height*ndelta_z*sizeof(T)); > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > std::memcpy(buf,data(0,0,_depth+ndelta_z,c),-ndelta_z*_width*_height*sizeof(T)); > std::memmove(data(0,0,-ndelta_z,c),data(0,0,0,c),_width*_height*(_depth+ndelta_z)*sizeof(T)); > std::memcpy(data(0,0,0,c),buf,-ndelta_z*_width*_height*sizeof(T)); > } > delete[] buf; > } > } > > if (delta_c) > switch (boundary_conditions) { > case 0 : > if (cimg::abs(delta_c)>=spectrum()) return fill(0); > if (delta_c<0) { > std::memmove(_data,data(0,0,0,-delta_c),_width*_height*_depth*(_spectrum+delta_c)*sizeof(T)); > std::memset(data(0,0,0,_spectrum+delta_c),0,_width*_height*_depth*(-delta_c)*sizeof(T)); > } else { > std::memmove(data(0,0,0,delta_c),_data,_width*_height*_depth*(_spectrum-delta_c)*sizeof(T)); > std::memset(_data,0,delta_c*_width*_height*_depth*sizeof(T)); > } > break; > case 1 : > if (delta_c<0) { > const int ndelta_c = (-delta_c>=spectrum())?spectrum()-1:-delta_c; > if (!ndelta_c) return *this; > std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); > T *ptrd = data(0,0,0,_spectrum-ndelta_c), *ptrs = data(0,0,0,_spectrum-1); > for (int l = 0; l<ndelta_c-1; ++l) { std::memcpy(ptrd,ptrs,_width*_height*_depth*sizeof(T)); ptrd+=(unsigned long)_width*_height*_depth; } > } else { > const int ndelta_c = (delta_c>=spectrum())?spectrum()-1:delta_c; > if (!ndelta_c) return *this; > std::memmove(data(0,0,0,ndelta_c),_data,_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); > T *ptrd = data(0,0,0,1); > for (int l = 0; l<ndelta_c-1; ++l) { std::memcpy(ptrd,_data,_width*_height*_depth*sizeof(T)); ptrd+=(unsigned long)_width*_height*_depth; } > } > break; > default : { > const int ml = cimg::mod(-delta_c,spectrum()), ndelta_c = (ml<=spectrum()/2)?ml:(ml-spectrum()); > if (!ndelta_c) return *this; > T *const buf = new T[(unsigned long)_width*_height*_depth*cimg::abs(ndelta_c)]; > if (ndelta_c>0) { > std::memcpy(buf,_data,_width*_height*_depth*ndelta_c*sizeof(T)); > std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); > std::memcpy(data(0,0,0,_spectrum-ndelta_c),buf,_width*_height*_depth*ndelta_c*sizeof(T)); > } else { > std::memcpy(buf,data(0,0,0,_spectrum+ndelta_c),-ndelta_c*_width*_height*_depth*sizeof(T)); > std::memmove(data(0,0,0,-ndelta_c),_data,_width*_height*_depth*(_spectrum+ndelta_c)*sizeof(T)); > std::memcpy(_data,buf,-ndelta_c*_width*_height*_depth*sizeof(T)); > } > delete[] buf; > } > } > return *this; > } > > > CImg<T> get_shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, > const int boundary_conditions=0) const { > return (+*this).shift(delta_x,delta_y,delta_z,delta_c,boundary_conditions); > } > > > > > > > CImg<T>& permute_axes(const char *const order) { > return get_permute_axes(order).move_to(*this); > } > > > CImg<T> get_permute_axes(const char *const order) const { > const T foo = (T)0; > return _get_permute_axes(order,foo); > } > > template<typename t> > CImg<t> _get_permute_axes(const char *const permut, const t&) const { > if (is_empty() || !permut) return CImg<t>(*this,false); > CImg<t> res; > const T* ptrs = _data; > if (!cimg::strncasecmp(permut,"xyzc",4)) return +*this; > if (!cimg::strncasecmp(permut,"xycz",4)) { > res.assign(_width,_height,_spectrum,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,y,c,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xzyc",4)) { > res.assign(_width,_depth,_height,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,z,y,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xzcy",4)) { > res.assign(_width,_depth,_spectrum,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,z,c,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xcyz",4)) { > res.assign(_width,_spectrum,_height,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,c,y,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"xczy",4)) { > res.assign(_width,_spectrum,_depth,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(x,c,z,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yxzc",4)) { > res.assign(_height,_width,_depth,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,x,z,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yxcz",4)) { > res.assign(_height,_width,_spectrum,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,x,c,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yzxc",4)) { > res.assign(_height,_depth,_width,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,z,x,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yzcx",4)) { > res.assign(_height,_depth,_spectrum,_width); > switch (_width) { > case 1 : { > t *ptr_r = res.data(0,0,0,0); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); > } > } break; > case 2 : { > t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); > } > } break; > case 3 : { > t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); *(ptr_b++) = (t)*(ptrs++); > } > } break; > case 4 : { > t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2), *ptr_a = res.data(0,0,0,3); > for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { > *(ptr_r++) = (t)*(ptrs++); *(ptr_g++) = (t)*(ptrs++); *(ptr_b++) = (t)*(ptrs++); *(ptr_a++) = (t)*(ptrs++); > } > } break; > default : { > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,z,c,x,wh,whd) = *(ptrs++); > return res; > } > } > } > if (!cimg::strncasecmp(permut,"ycxz",4)) { > res.assign(_height,_spectrum,_width,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,c,x,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"yczx",4)) { > res.assign(_height,_spectrum,_depth,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(y,c,z,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zxyc",4)) { > res.assign(_depth,_width,_height,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,x,y,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zxcy",4)) { > res.assign(_depth,_width,_spectrum,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,x,c,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zyxc",4)) { > res.assign(_depth,_height,_width,_spectrum); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,y,x,c,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zycx",4)) { > res.assign(_depth,_height,_spectrum,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,y,c,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zcxy",4)) { > res.assign(_depth,_spectrum,_width,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,c,x,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"zcyx",4)) { > res.assign(_depth,_spectrum,_height,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(z,c,y,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"cxyz",4)) { > res.assign(_spectrum,_width,_height,_depth); > switch (_spectrum) { > case 1 : { > const T *ptr_r = data(0,0,0,0); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) *(ptrd++) = (t)*(ptr_r++); > } break; > case 2 : { > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { > *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); > } > } break; > case 3 : { > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { > *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); *(ptrd++) = (t)*(ptr_b++); > } > } break; > case 4 : { > const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); > t *ptrd = res._data; > for (unsigned long siz = (unsigned long)_width*_height*_depth; siz; --siz) { > *(ptrd++) = (t)*(ptr_r++); *(ptrd++) = (t)*(ptr_g++); *(ptrd++) = (t)*(ptr_b++); *(ptrd++) = (t)*(ptr_a++); > } > } break; > default : { > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,x,y,z,wh,whd) = (t)*(ptrs++); > } > } > } > if (!cimg::strncasecmp(permut,"cxzy",4)) { > res.assign(_spectrum,_width,_depth,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,x,z,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"cyxz",4)) { > res.assign(_spectrum,_height,_width,_depth); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,y,x,z,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"cyzx",4)) { > res.assign(_spectrum,_height,_depth,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,y,z,x,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"czxy",4)) { > res.assign(_spectrum,_depth,_width,_height); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,z,x,y,wh,whd) = (t)*(ptrs++); > } > if (!cimg::strncasecmp(permut,"czyx",4)) { > res.assign(_spectrum,_depth,_height,_width); > const unsigned long wh = (unsigned long)res._width*res._height, whd = wh*res._depth; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) res(c,z,y,x,wh,whd) = (t)*(ptrs++); > } > if (!res) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "permute_axes(): Invalid specified permutation '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > permut); > return res; > } > > > > > > CImg<T>& unroll(const char axis) { > const unsigned int siz = size(); > if (siz) switch (axis) { > case 'x' : _width = siz; _height = _depth = _spectrum = 1; break; > case 'y' : _height = siz; _width = _depth = _spectrum = 1; break; > case 'z' : _depth = siz; _width = _height = _spectrum = 1; break; > default : _spectrum = siz; _width = _height = _depth = 1; > } > return *this; > } > > > CImg<T> get_unroll(const char axis) const { > return (+*this).unroll(axis); > } ># 21854 "./CImg.h" > CImg<T>& rotate(const float angle, const unsigned int interpolation=1, const unsigned int boundary=0) { > const float nangle = cimg::mod(angle,360.0f); > if (nangle==0.0f) return *this; > return get_rotate(angle,interpolation,boundary).move_to(*this); > } > > > CImg<T> get_rotate(const float angle, const unsigned int interpolation=1, const unsigned int boundary=0) const { > if (is_empty()) return *this; > CImg<T> res; > const float nangle = cimg::mod(angle,360.0f); > if (boundary!=1 && cimg::mod(nangle,90.0f)==0) { > const int wm1 = width() - 1, hm1 = height() - 1; > const int iangle = (int)nangle/90; > switch (iangle) { > case 1 : { > res.assign(_height,_width,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(y,hm1-x,z,c); > } break; > case 2 : { > res.assign(_width,_height,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(wm1-x,hm1-y,z,c); > } break; > case 3 : { > res.assign(_height,_width,_depth,_spectrum); > T *ptrd = res._data; > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(wm1-y,x,z,c); > } break; > default : > return *this; > } > } else { > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > const float > rad = (float)(nangle*cimg::PI/180.0), > ca = (float)std::cos(rad), > sa = (float)std::sin(rad), > ux = cimg::abs(_width*ca), uy = cimg::abs(_width*sa), > vx = cimg::abs(_height*sa), vy = cimg::abs(_height*ca), > w2 = 0.5f*_width, h2 = 0.5f*_height, > dw2 = 0.5f*(ux+vx), dh2 = 0.5f*(uy+vy); > res.assign((int)(ux+vx),(int)(uy+vy),_depth,_spectrum); > switch (boundary) { > case 0 : { > switch (interpolation) { > case 2 : { > > ># 21903 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21903 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = cubic_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c,0); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { > > ># 21912 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21912 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)linear_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c,0); > } break; > default : { > > ># 21919 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21919 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = atXY((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),(int)(h2 - (x-dw2)*sa + (y-dh2)*ca),z,c,0); > } > } > } break; > case 1 : { > switch (interpolation) { > case 2 : { > > ># 21930 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21930 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { > > ># 21939 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21939 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(w2 + (x-dw2)*ca + (y-dh2)*sa,h2 - (x-dw2)*sa + (y-dh2)*ca,z,c); > } break; > default : { > > ># 21946 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21946 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = _atXY((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),(int)(h2 - (x-dw2)*sa + (y-dh2)*ca),z,c); > } > } > } break; > case 2 : { > switch (interpolation) { > case 2 : { > > ># 21957 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21957 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(cimg::mod(w2 + (x-dw2)*ca + (y-dh2)*sa,(float)width()), > cimg::mod(h2 - (x-dw2)*sa + (y-dh2)*ca,(float)height()),z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { > > ># 21967 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21967 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(cimg::mod(w2 + (x-dw2)*ca + (y-dh2)*sa,(float)width()), > cimg::mod(h2 - (x-dw2)*sa + (y-dh2)*ca,(float)height()),z,c); > } break; > default : { > > ># 21975 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 21975 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (*this)(cimg::mod((int)(w2 + (x-dw2)*ca + (y-dh2)*sa),width()), > cimg::mod((int)(h2 - (x-dw2)*sa + (y-dh2)*ca),height()),z,c); > } > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate(): Invalid specified border conditions %d " > "(should be { 0=dirichlet | 1=neumann | 2=periodic }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > boundary); > } > } > return res; > } ># 22003 "./CImg.h" > CImg<T>& rotate(const float angle, const float cx, const float cy, const float zoom, > const unsigned int interpolation=1, const unsigned int boundary=3) { > return get_rotate(angle,cx,cy,zoom,interpolation,boundary).move_to(*this); > } > > > CImg<T> get_rotate(const float angle, const float cx, const float cy, const float zoom, > const unsigned int interpolation=1, const unsigned int boundary=3) const { > if (interpolation>2) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate(): Invalid specified interpolation type %d " > "(should be { 0=none | 1=linear | 2=cubic }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > interpolation); > if (is_empty()) return *this; > CImg<T> res(_width,_height,_depth,_spectrum); > const Tfloat vmin = (Tfloat)cimg::type<T>::min(), vmax = (Tfloat)cimg::type<T>::max(); > const float > rad = (float)((angle*cimg::PI)/180.0), > ca = (float)std::cos(rad)/zoom, > sa = (float)std::sin(rad)/zoom; > switch (boundary) { > case 0 : { > switch (interpolation) { > case 2 : { > > ># 22029 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22029 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = cubic_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c,0); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { > > ># 22038 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22038 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)linear_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c,0); > } break; > default : { > > ># 22045 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22045 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = atXY((int)(cx + (x-cx)*ca + (y-cy)*sa),(int)(cy - (x-cx)*sa + (y-cy)*ca),z,c,0); > } > } > } break; > case 1 : { > switch (interpolation) { > case 2 : { > > ># 22056 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22056 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { > > ># 22065 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22065 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(cx + (x-cx)*ca + (y-cy)*sa,cy - (x-cx)*sa + (y-cy)*ca,z,c); > } break; > default : { > > ># 22072 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22072 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = _atXY((int)(cx + (x-cx)*ca + (y-cy)*sa),(int)(cy - (x-cx)*sa + (y-cy)*ca),z,c); > } > } > } break; > case 2 : { > switch (interpolation) { > case 2 : { > > ># 22083 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22083 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > const Tfloat val = _cubic_atXY(cimg::mod(cx + (x-cx)*ca + (y-cy)*sa,(float)width()), > cimg::mod(cy - (x-cx)*sa + (y-cy)*ca,(float)height()),z,c); > res(x,y,z,c) = (T)(val<vmin?vmin:val>vmax?vmax:val); > } > } break; > case 1 : { > > ># 22093 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22093 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (T)_linear_atXY(cimg::mod(cx + (x-cx)*ca + (y-cy)*sa,(float)width()), > cimg::mod(cy - (x-cx)*sa + (y-cy)*ca,(float)height()),z,c); > } break; > default : { > > ># 22101 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=2048) ># 22101 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) > res(x,y,z,c) = (*this)(cimg::mod((int)(cx + (x-cx)*ca + (y-cy)*sa),width()), > cimg::mod((int)(cy - (x-cx)*sa + (y-cy)*ca),height()),z,c); > } > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "rotate(): Invalid specified border conditions %d " > "(should be { 0=dirichlet | 1=neumann | 2=periodic }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > boundary); > } > return res; > } ># 22126 "./CImg.h" > template<typename t> > CImg<T>& warp(const CImg<t>& warp, const bool is_relative=false, > const unsigned int interpolation=1, const unsigned int boundary_conditions=0) { > return get_warp(warp,is_relative,interpolation,boundary_conditions).move_to(*this); > } > > > template<typename t> > CImg<T> get_warp(const CImg<t>& warp, const bool is_relative=false, > const unsigned int interpolation=1, const unsigned int boundary_conditions=0) const { > if (is_empty() || !warp) return *this; > if (is_relative && !is_sameXYZ(warp)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "warp(): Instance and specified relative warping field (%u,%u,%u,%u,%p) " > "have different XYZ dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > warp._width,warp._height,warp._depth,warp._spectrum,warp._data); > > CImg<T> res(warp._width,warp._height,warp._depth,_spectrum); > > if (warp._spectrum==1) { > if (is_relative) { > if (interpolation==2) { > if (boundary_conditions==2) > > ># 22151 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22151 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); > } > else if (boundary_conditions==1) > > ># 22159 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22159 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX(x - (float)*(ptrs0++),y,z,c); > } > else > > ># 22167 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22167 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atX(x - (float)*(ptrs0++),y,z,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) > > ># 22176 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22176 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); > } > else if (boundary_conditions==1) > > ># 22184 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22184 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX(x - (float)*(ptrs0++),y,z,c); > } > else > > ># 22192 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22192 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atX(x - (float)*(ptrs0++),y,z,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width),y,z,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atX(x - (int)*(ptrs0++),y,z,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atX(x - (int)*(ptrs0++),y,z,c,0); > } > } > } else { > if (interpolation==2) { > if (boundary_conditions==2) > > ># 22219 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22219 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); > } > else if (boundary_conditions==1) > > ># 22227 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22227 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atX((float)*(ptrs0++),0,0,c); > } > else > > ># 22235 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22235 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atX((float)*(ptrs0++),0,0,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) > > ># 22244 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22244 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); > } > else if (boundary_conditions==1) > > ># 22252 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22252 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atX((float)*(ptrs0++),0,0,c); > } > else > > ># 22260 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22260 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atX((float)*(ptrs0++),0,0,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width),0,0,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atX((int)*(ptrs0++),0,0,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atX((int)*(ptrs0++),0,0,c,0); > } > } > } > > } else if (warp._spectrum==2) { > if (is_relative) { > if (interpolation==2) { > if (boundary_conditions==2) > > ># 22290 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22290 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); > } > else if (boundary_conditions==1) > > ># 22299 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22299 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); > } > else > > ># 22307 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22307 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) > > ># 22316 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22316 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); > } > else if (boundary_conditions==1) > > ># 22325 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22325 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); > } > else > > ># 22333 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22333 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width), > cimg::mod(y - (int)*(ptrs1++),(int)_height),z,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXY(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXY(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z,c,0); > } > } > } else { > if (interpolation==2) { > if (boundary_conditions==2) > > ># 22361 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22361 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height),0,c); > } > else if (boundary_conditions==1) > > ># 22370 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22370 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); > } > else > > ># 22378 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22378 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) > > ># 22387 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22387 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height),0,c); > } > else if (boundary_conditions==1) > > ># 22396 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22396 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); > } > else > > ># 22404 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22404 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width), > cimg::mod((int)*(ptrs1++),(int)_height),0,c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXY((int)*(ptrs0++),(int)*(ptrs1++),0,c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXY((int)*(ptrs0++),(int)*(ptrs1++),0,c,0); > } > } > } > > } else if (warp._spectrum==3) { > if (is_relative) { > if (interpolation==2) { > if (boundary_conditions==2) > > ># 22435 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22435 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height), > cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) > > ># 22445 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22445 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); > } > else > > ># 22453 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22453 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) > > ># 22462 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22462 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), > cimg::mod(y - (float)*(ptrs1++),(float)_height), > cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) > > ># 22472 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22472 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); > } > else > > ># 22480 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22480 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod(x - (int)*(ptrs0++),(int)_width), > cimg::mod(y - (int)*(ptrs1++),(int)_height), > cimg::mod(z - (int)*(ptrs2++),(int)_depth),c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXYZ(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z - (int)*(ptrs2++),c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXYZ(x - (int)*(ptrs0++),y - (int)*(ptrs1++),z - (int)*(ptrs2++),c,0); > } > } > } else { > if (interpolation==2) { > if (boundary_conditions==2) > > ># 22509 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22509 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height), > cimg::mod((float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) > > ># 22519 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22519 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_cubic_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); > } > else > > ># 22527 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=4096) ># 22527 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)cubic_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c,0); > } > } else if (interpolation==1) { > if (boundary_conditions==2) > > ># 22536 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22536 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), > cimg::mod((float)*(ptrs1++),(float)_height), > cimg::mod((float)*(ptrs2++),(float)_depth),c); > } > else if (boundary_conditions==1) > > ># 22546 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22546 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)_linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); > } > else > > ># 22554 "./CImg.h" >#pragma omp parallel for collapse(3) if (res.size()>=1048576) ># 22554 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (T)linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c,0); > } > } else { > if (boundary_conditions==2) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = (*this)(cimg::mod((int)*(ptrs0++),(int)_width), > cimg::mod((int)*(ptrs1++),(int)_height), > cimg::mod((int)*(ptrs2++),(int)_depth),c); > } > else if (boundary_conditions==1) > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = _atXYZ((int)*(ptrs0++),(int)*(ptrs1++),(int)*(ptrs2++),c); > } > else > for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) { > const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); T *ptrd = res.data(0,y,z,c); > for (int x = 0; x<(int)((res)._width); ++x) *(ptrd++) = atXYZ((int)*(ptrs0++),(int)*(ptrs1++),(int)*(ptrs2++),c,0); > } > } > } > } > return res; > } > > > > > > > > CImg<T> get_projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) const { > if (is_empty() || _depth<2) return +*this; > const unsigned int > _x0 = (x0>=_width)?_width - 1:x0, > _y0 = (y0>=_height)?_height - 1:y0, > _z0 = (z0>=_depth)?_depth - 1:z0; > const CImg<T> > img_xy = get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1), > img_zy = get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).permute_axes("xzyc").resize(_depth,_height,1,-100,-1), > img_xz = get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1); > return CImg<T>(_width + _depth,_height + _depth,1,_spectrum,cimg::min(img_xy.min(),img_zy.min(),img_xz.min())). > draw_image(0,0,img_xy).draw_image(img_xy._width,0,img_zy). > draw_image(0,img_xy._height,img_xz); > } > > > CImg<T>& projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) { > if (_depth<2) return *this; > return get_projections2d(x0,y0,z0).move_to(*this); > } ># 22623 "./CImg.h" > CImg<T>& crop(const int x0, const int y0, const int z0, const int c0, > const int x1, const int y1, const int z1, const int c1, > const bool boundary_conditions=false) { > return get_crop(x0,y0,z0,c0,x1,y1,z1,c1,boundary_conditions).move_to(*this); > } > > > CImg<T> get_crop(const int x0, const int y0, const int z0, const int c0, > const int x1, const int y1, const int z1, const int c1, > const bool boundary_conditions=false) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "crop(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const int > nx0 = x0<x1?x0:x1, nx1 = x0^x1^nx0, > ny0 = y0<y1?y0:y1, ny1 = y0^y1^ny0, > nz0 = z0<z1?z0:z1, nz1 = z0^z1^nz0, > nc0 = c0<c1?c0:c1, nc1 = c0^c1^nc0; > CImg<T> res(1U + nx1 - nx0,1U + ny1 - ny0,1U + nz1 - nz0,1U + nc1 - nc0); > if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height() || nz0<0 || nz1>=depth() || nc0<0 || nc1>=spectrum()) { > if (boundary_conditions) for (int c = 0; c<(int)((res)._spectrum); ++c) for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) res(x,y,z,c) = _atXYZC(nx0+x,ny0+y,nz0+z,nc0+c); > else res.fill(0).draw_image(-nx0,-ny0,-nz0,-nc0,*this); > } else res.draw_image(-nx0,-ny0,-nz0,-nc0,*this); > return res; > } > > > CImg<T>& crop(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const bool boundary_conditions=false) { > return crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); > } > > > CImg<T> get_crop(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const bool boundary_conditions=false) const { > return get_crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); > } > > > CImg<T>& crop(const int x0, const int y0, > const int x1, const int y1, > const bool boundary_conditions=false) { > return crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); > } > > > CImg<T> get_crop(const int x0, const int y0, > const int x1, const int y1, > const bool boundary_conditions=false) const { > return get_crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); > } > > > CImg<T>& crop(const int x0, const int x1, const bool boundary_conditions=false) { > return crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); > } > > > CImg<T> get_crop(const int x0, const int x1, const bool boundary_conditions=false) const { > return get_crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); > } > > > CImg<T>& autocrop(const T value, const char *const axes="czyx") { > if (is_empty()) return *this; > for (const char *s = axes; *s; ++s) { > const char axis = cimg::uncase(*s); > const CImg<intT> coords = _autocrop(value,axis); > if (coords[0]==-1 && coords[1]==-1) return assign(); > else switch (axis) { > case 'x' : { > const int x0 = coords[0], x1 = coords[1]; > if (x0>=0 && x1>=0) crop(x0,x1); > } break; > case 'y' : { > const int y0 = coords[0], y1 = coords[1]; > if (y0>=0 && y1>=0) crop(0,y0,_width-1,y1); > } break; > case 'z' : { > const int z0 = coords[0], z1 = coords[1]; > if (z0>=0 && z1>=0) crop(0,0,z0,_width-1,_height-1,z1); > } break; > default : { > const int c0 = coords[0], c1 = coords[1]; > if (c0>=0 && c1>=0) crop(0,0,0,c0,_width-1,_height-1,_depth-1,c1); > } > } > } > return *this; > } > > > CImg<T> get_autocrop(const T value, const char *const axes="czyx") const { > return (+*this).autocrop(value,axes); > } > > > > > > > CImg<T>& autocrop(const T *const color=0, const char *const axes="zyx") { > if (is_empty()) return *this; > if (!color) { > const CImg<T> col1 = get_vector_at(0,0,0); > const unsigned int w = _width, h = _height, d = _depth, s = _spectrum; > autocrop(col1,axes); > if (_width==w && _height==h && _depth==d && _spectrum==s) { > const CImg<T> col2 = get_vector_at(w-1,h-1,d-1); > autocrop(col2,axes); > } > return *this; > } > for (const char *s = axes; *s; ++s) { > const char axis = cimg::uncase(*s); > switch (axis) { > case 'x' : { > int x0 = width(), x1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<intT> coords = get_shared_channel(c)._autocrop(color[c],'x'); > const int nx0 = coords[0], nx1 = coords[1]; > if (nx0>=0 && nx1>=0) { x0 = cimg::min(x0,nx0); x1 = cimg::max(x1,nx1); } > } > if (x0==width() && x1==-1) return assign(); else crop(x0,x1); > } break; > case 'y' : { > int y0 = height(), y1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<intT> coords = get_shared_channel(c)._autocrop(color[c],'y'); > const int ny0 = coords[0], ny1 = coords[1]; > if (ny0>=0 && ny1>=0) { y0 = cimg::min(y0,ny0); y1 = cimg::max(y1,ny1); } > } > if (y0==height() && y1==-1) return assign(); else crop(0,y0,_width-1,y1); > } break; > default : { > int z0 = depth(), z1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<intT> coords = get_shared_channel(c)._autocrop(color[c],'z'); > const int nz0 = coords[0], nz1 = coords[1]; > if (nz0>=0 && nz1>=0) { z0 = cimg::min(z0,nz0); z1 = cimg::max(z1,nz1); } > } > if (z0==depth() && z1==-1) return assign(); else crop(0,0,z0,_width-1,_height-1,z1); > } > } > } > return *this; > } > > > CImg<T> get_autocrop(const T *const color=0, const char *const axes="zyx") const { > return (+*this).autocrop(color,axes); > } > > > template<typename t> CImg<T>& autocrop(const CImg<t>& color, const char *const axes="zyx") { > return get_autocrop(color,axes).move_to(*this); > } > > > template<typename t> CImg<T> get_autocrop(const CImg<t>& color, const char *const axes="zyx") const { > return get_autocrop(color._data,axes); > } > > CImg<intT> _autocrop(const T value, const char axis) const { > CImg<intT> res; > switch (cimg::uncase(axis)) { > case 'x' : { > int x0 = -1, x1 = -1; > for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) > if ((*this)(x,y,z,c)!=value) { x0 = x; x = width(); y = height(); z = depth(); c = spectrum(); } > if (x0>=0) { > for (int x = width()-1; x>=0; --x) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) > if ((*this)(x,y,z,c)!=value) { x1 = x; x = 0; y = height(); z = depth(); c = spectrum(); } > } > res = CImg<intT>::vector(x0,x1); > } break; > case 'y' : { > int y0 = -1, y1 = -1; > for (int y = 0; y<(int)((*this)._height); ++y) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { y0 = y; x = width(); y = height(); z = depth(); c = spectrum(); } > if (y0>=0) { > for (int y = height()-1; y>=0; --y) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { y1 = y; x = width(); y = 0; z = depth(); c = spectrum(); } > } > res = CImg<intT>::vector(y0,y1); > } break; > case 'z' : { > int z0 = -1, z1 = -1; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { z0 = z; x = width(); y = height(); z = depth(); c = spectrum(); } > if (z0>=0) { > for (int z = depth()-1; z>=0; --z) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { z1 = z; x = width(); y = height(); z = 0; c = spectrum(); } > } > res = CImg<intT>::vector(z0,z1); > } break; > default : { > int c0 = -1, c1 = -1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { c0 = c; x = width(); y = height(); z = depth(); c = spectrum(); } > if (c0>=0) { > for (int c = spectrum()-1; c>=0; --c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) > if ((*this)(x,y,z,c)!=value) { c1 = c; x = width(); y = height(); z = depth(); c = 0; } > } > res = CImg<intT>::vector(c0,c1); > } > } > return res; > } > > > > > > CImg<T> get_column(const int x0) const { > return get_columns(x0,x0); > } > > > CImg<T>& column(const int x0) { > return columns(x0,x0); > } > > > > > > > CImg<T>& columns(const int x0, const int x1) { > return get_columns(x0,x1).move_to(*this); > } > > > CImg<T> get_columns(const int x0, const int x1) const { > return get_crop(x0,0,0,0,x1,height()-1,depth()-1,spectrum()-1); > } > > > CImg<T> get_row(const int y0) const { > return get_rows(y0,y0); > } > > > > > > CImg<T>& row(const int y0) { > return rows(y0,y0); > } > > > > > > > CImg<T> get_rows(const int y0, const int y1) const { > return get_crop(0,y0,0,0,width()-1,y1,depth()-1,spectrum()-1); > } > > > CImg<T>& rows(const int y0, const int y1) { > return get_rows(y0,y1).move_to(*this); > } > > > > > > CImg<T> get_slice(const int z0) const { > return get_slices(z0,z0); > } > > > CImg<T>& slice(const int z0) { > return slices(z0,z0); > } > > > > > > > CImg<T> get_slices(const int z0, const int z1) const { > return get_crop(0,0,z0,0,width()-1,height()-1,z1,spectrum()-1); > } > > > CImg<T>& slices(const int z0, const int z1) { > return get_slices(z0,z1).move_to(*this); > } > > > > > > CImg<T> get_channel(const int c0) const { > return get_channels(c0,c0); > } > > > CImg<T>& channel(const int c0) { > return channels(c0,c0); > } > > > > > > > CImg<T> get_channels(const int c0, const int c1) const { > return get_crop(0,0,0,c0,width()-1,height()-1,depth()-1,c1); > } > > > CImg<T>& channels(const int c0, const int c1) { > return get_channels(c0,c1).move_to(*this); > } > > > CImg<floatT> get_streamline(const float x, const float y, const float z, > const float L=256, const float dl=0.1f, > const unsigned int interpolation_type=2, const bool is_backward_tracking=false, > const bool is_oriented_only=false) const { > if (_spectrum!=2 && _spectrum!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "streamline(): Instance is not a 2d or 3d vector field.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (_spectrum==2) { > if (is_oriented_only) { > typename CImg<T>::_functor4d_streamline2d_oriented func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true,0,0,0,_width-1.0f,_height-1.0f,0.0f); > } else { > typename CImg<T>::_functor4d_streamline2d_directed func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false,0,0,0,_width-1.0f,_height-1.0f,0.0f); > } > } > if (is_oriented_only) { > typename CImg<T>::_functor4d_streamline3d_oriented func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true,0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); > } > typename CImg<T>::_functor4d_streamline3d_directed func(*this); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false,0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); > } ># 22988 "./CImg.h" > template<typename tfunc> > static CImg<floatT> streamline(const tfunc& func, > const float x, const float y, const float z, > const float L=256, const float dl=0.1f, > const unsigned int interpolation_type=2, const bool is_backward_tracking=false, > const bool is_oriented_only=false, > const float x0=0, const float y0=0, const float z0=0, > const float x1=0, const float y1=0, const float z1=0) { > if (dl<=0) > throw CImgArgumentException("CImg<%s>::streamline(): Invalid specified integration length %g " > "(should be >0).", > pixel_type(), > dl); > > const bool is_bounded = (x0!=x1 || y0!=y1 || z0!=z1); > if (L<=0 || (is_bounded && (x<x0 || x>x1 || y<y0 || y>y1 || z<z0 || z>z1))) return CImg<floatT>(); > const unsigned int size_L = (unsigned int)cimg::round(L/dl+1); > CImg<floatT> coordinates(size_L,3); > const float dl2 = dl/2; > float > *ptr_x = coordinates.data(0,0), > *ptr_y = coordinates.data(0,1), > *ptr_z = coordinates.data(0,2), > pu = (float)(dl*func(x,y,z,0)), > pv = (float)(dl*func(x,y,z,1)), > pw = (float)(dl*func(x,y,z,2)), > X = x, Y = y, Z = z; > > switch (interpolation_type) { > case 0 : { > for (int l = 0; l<(int)((coordinates)._width); ++l) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > const int > xi = (int)(X>0?X+0.5f:X-0.5f), > yi = (int)(Y>0?Y+0.5f:Y-0.5f), > zi = (int)(Z>0?Z+0.5f:Z-0.5f); > float > u = (float)(dl*func((float)xi,(float)yi,(float)zi,0)), > v = (float)(dl*func((float)xi,(float)yi,(float)zi,1)), > w = (float)(dl*func((float)xi,(float)yi,(float)zi,2)); > if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } break; > case 1 : { > for (int l = 0; l<(int)((coordinates)._width); ++l) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > float > u = (float)(dl*func(X,Y,Z,0)), > v = (float)(dl*func(X,Y,Z,1)), > w = (float)(dl*func(X,Y,Z,2)); > if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } break; > case 2 : { > for (int l = 0; l<(int)((coordinates)._width); ++l) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > float > u0 = (float)(dl2*func(X,Y,Z,0)), > v0 = (float)(dl2*func(X,Y,Z,1)), > w0 = (float)(dl2*func(X,Y,Z,2)); > if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } > float > u = (float)(dl*func(X+u0,Y+v0,Z+w0,0)), > v = (float)(dl*func(X+u0,Y+v0,Z+w0,1)), > w = (float)(dl*func(X+u0,Y+v0,Z+w0,2)); > if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } break; > default : { > for (int x = 0; x<(int)((coordinates)._width); ++x) { > *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; > float > u0 = (float)(dl2*func(X,Y,Z,0)), > v0 = (float)(dl2*func(X,Y,Z,1)), > w0 = (float)(dl2*func(X,Y,Z,2)); > if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } > float > u1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,0)), > v1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,1)), > w1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,2)); > if (is_oriented_only && u1*pu + v1*pv + w1*pw<0) { u1 = -u1; v1 = -v1; w1 = -w1; } > float > u2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,0)), > v2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,1)), > w2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,2)); > if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u2 = -u2; v2 = -v2; w2 = -w2; } > float > u3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,0)), > v3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,1)), > w3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,2)); > if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u3 = -u3; v3 = -v3; w3 = -w3; } > const float > u = (u0 + u3)/3 + (u1 + u2)/1.5f, > v = (v0 + v3)/3 + (v1 + v2)/1.5f, > w = (w0 + w3)/3 + (w1 + w2)/1.5f; > if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } > if (is_bounded && (X<x0 || X>x1 || Y<y0 || Y>y1 || Z<z0 || Z>z1)) break; > } > } > } > if (ptr_x!=coordinates.data(0,1)) coordinates.resize((int)(ptr_x-coordinates.data()),3,1,1,0); > return coordinates; > } > > > static CImg<floatT> streamline(const char *const expression, > const float x, const float y, const float z, > const float L=256, const float dl=0.1f, > const unsigned int interpolation_type=2, const bool is_backward_tracking=true, > const bool is_oriented_only=false, > const float x0=0, const float y0=0, const float z0=0, > const float x1=0, const float y1=0, const float z1=0) { > _functor4d_streamline_expr func(expression); > return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,is_oriented_only,x0,y0,z0,x1,y1,z1); > } > > struct _functor4d_streamline2d_directed { > const CImg<T>& ref; > _functor4d_streamline2d_directed(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return c<2?(float)ref._linear_atXY(x,y,(int)z,c):0; > } > }; > > struct _functor4d_streamline3d_directed { > const CImg<T>& ref; > _functor4d_streamline3d_directed(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return (float)ref._linear_atXYZ(x,y,z,c); > } > }; > > struct _functor4d_streamline2d_oriented { > const CImg<T>& ref; > CImg<floatT> *pI; > _functor4d_streamline2d_oriented(const CImg<T>& pref):ref(pref),pI(0) { pI = new CImg<floatT>(2,2,1,2); } > ~_functor4d_streamline2d_oriented() { delete pI; } > float operator()(const float x, const float y, const float z, const unsigned int c) const { > > int > xi = (int)x - (x>=0?0:1), nxi = xi + 1, > yi = (int)y - (y>=0?0:1), nyi = yi + 1, > zi = (int)z; > const float > dx = x - xi, > dy = y - yi; > if (c==0) { > CImg<floatT>& I = *pI; > if (xi<0) xi = 0; if (nxi<0) nxi = 0; > if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; > if (yi<0) yi = 0; if (nyi<0) nyi = 0; > if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; > I(0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,1) = (float)ref(xi,yi,zi,1); > I(1,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,1) = (float)ref(nxi,yi,zi,1); > I(1,1,0) = (float)ref(nxi,nyi,zi,0); I(1,1,1) = (float)ref(nxi,nyi,zi,1); > I(0,1,0) = (float)ref(xi,nyi,zi,0); I(0,1,1) = (float)ref(xi,nyi,zi,1); > if (I(1,0,0)*I(0,0,0)+I(1,0,1)*I(0,0,1)<0) { I(1,0,0) = -I(1,0,0); I(1,0,1) = -I(1,0,1); }; if (I(1,1,0)*I(0,0,0)+I(1,1,1)*I(0,0,1)<0) { I(1,1,0) = -I(1,1,0); I(1,1,1) = -I(1,1,1); }; if (I(0,1,0)*I(0,0,0)+I(0,1,1)*I(0,0,1)<0) { I(0,1,0) = -I(0,1,0); I(0,1,1) = -I(0,1,1); }; > } > return c<2?(float)pI->_linear_atXY(dx,dy,0,c):0; > } > }; > > struct _functor4d_streamline3d_oriented { > const CImg<T>& ref; > CImg<floatT> *pI; > _functor4d_streamline3d_oriented(const CImg<T>& pref):ref(pref),pI(0) { pI = new CImg<floatT>(2,2,2,3); } > ~_functor4d_streamline3d_oriented() { delete pI; } > float operator()(const float x, const float y, const float z, const unsigned int c) const { > > > int > xi = (int)x - (x>=0?0:1), nxi = xi + 1, > yi = (int)y - (y>=0?0:1), nyi = yi + 1, > zi = (int)z - (z>=0?0:1), nzi = zi + 1; > const float > dx = x - xi, > dy = y - yi, > dz = z - zi; > if (c==0) { > CImg<floatT>& I = *pI; > if (xi<0) xi = 0; if (nxi<0) nxi = 0; > if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; > if (yi<0) yi = 0; if (nyi<0) nyi = 0; > if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; > if (zi<0) zi = 0; if (nzi<0) nzi = 0; > if (zi>=ref.depth()) zi = ref.depth()-1; if (nzi>=ref.depth()) nzi = ref.depth()-1; > I(0,0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,0,1) = (float)ref(xi,yi,zi,1); I(0,0,0,2) = (float)ref(xi,yi,zi,2); > I(1,0,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,0,1) = (float)ref(nxi,yi,zi,1); I(1,0,0,2) = (float)ref(nxi,yi,zi,2); > I(1,1,0,0) = (float)ref(nxi,nyi,zi,0); I(1,1,0,1) = (float)ref(nxi,nyi,zi,1); I(1,1,0,2) = (float)ref(nxi,nyi,zi,2); > I(0,1,0,0) = (float)ref(xi,nyi,zi,0); I(0,1,0,1) = (float)ref(xi,nyi,zi,1); I(0,1,0,2) = (float)ref(xi,nyi,zi,2); > I(0,0,1,0) = (float)ref(xi,yi,nzi,0); I(0,0,1,1) = (float)ref(xi,yi,nzi,1); I(0,0,1,2) = (float)ref(xi,yi,nzi,2); > I(1,0,1,0) = (float)ref(nxi,yi,nzi,0); I(1,0,1,1) = (float)ref(nxi,yi,nzi,1); I(1,0,1,2) = (float)ref(nxi,yi,nzi,2); > I(1,1,1,0) = (float)ref(nxi,nyi,nzi,0); I(1,1,1,1) = (float)ref(nxi,nyi,nzi,1); I(1,1,1,2) = (float)ref(nxi,nyi,nzi,2); > I(0,1,1,0) = (float)ref(xi,nyi,nzi,0); I(0,1,1,1) = (float)ref(xi,nyi,nzi,1); I(0,1,1,2) = (float)ref(xi,nyi,nzi,2); > if (I(1,0,0,0)*I(0,0,0,0)+I(1,0,0,1)*I(0,0,0,1)+I(1,0,0,2)*I(0,0,0,2)<0) { I(1,0,0,0) = -I(1,0,0,0); I(1,0,0,1) = -I(1,0,0,1); I(1,0,0,2) = -I(1,0,0,2); }; if (I(1,1,0,0)*I(0,0,0,0)+I(1,1,0,1)*I(0,0,0,1)+I(1,1,0,2)*I(0,0,0,2)<0) { I(1,1,0,0) = -I(1,1,0,0); I(1,1,0,1) = -I(1,1,0,1); I(1,1,0,2) = -I(1,1,0,2); }; if (I(0,1,0,0)*I(0,0,0,0)+I(0,1,0,1)*I(0,0,0,1)+I(0,1,0,2)*I(0,0,0,2)<0) { I(0,1,0,0) = -I(0,1,0,0); I(0,1,0,1) = -I(0,1,0,1); I(0,1,0,2) = -I(0,1,0,2); }; > if (I(0,0,1,0)*I(0,0,0,0)+I(0,0,1,1)*I(0,0,0,1)+I(0,0,1,2)*I(0,0,0,2)<0) { I(0,0,1,0) = -I(0,0,1,0); I(0,0,1,1) = -I(0,0,1,1); I(0,0,1,2) = -I(0,0,1,2); }; if (I(1,0,1,0)*I(0,0,0,0)+I(1,0,1,1)*I(0,0,0,1)+I(1,0,1,2)*I(0,0,0,2)<0) { I(1,0,1,0) = -I(1,0,1,0); I(1,0,1,1) = -I(1,0,1,1); I(1,0,1,2) = -I(1,0,1,2); }; if (I(1,1,1,0)*I(0,0,0,0)+I(1,1,1,1)*I(0,0,0,1)+I(1,1,1,2)*I(0,0,0,2)<0) { I(1,1,1,0) = -I(1,1,1,0); I(1,1,1,1) = -I(1,1,1,1); I(1,1,1,2) = -I(1,1,1,2); }; if (I(0,1,1,0)*I(0,0,0,0)+I(0,1,1,1)*I(0,0,0,1)+I(0,1,1,2)*I(0,0,0,2)<0) { I(0,1,1,0) = -I(0,1,1,0); I(0,1,1,1) = -I(0,1,1,1); I(0,1,1,2) = -I(0,1,1,2); }; > } > return (float)pI->_linear_atXYZ(dx,dy,dz,c); > } > }; > > struct _functor4d_streamline_expr { > _cimg_math_parser *mp; > ~_functor4d_streamline_expr() { delete mp; } > _functor4d_streamline_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg<T>::empty(),expr,"streamline"); } > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return (float)(*mp)(x,y,z,c); > } > }; ># 23212 "./CImg.h" > CImg<T> get_shared_points(const unsigned int x0, const unsigned int x1, > const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) { > const unsigned int beg = (unsigned int)offset(x0,y0,z0,c0), end = offset(x1,y0,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > x0,x1,y0,z0,c0); > > return CImg<T>(_data+beg,x1-x0+1,1,1,1,true); > } > > > const CImg<T> get_shared_points(const unsigned int x0, const unsigned int x1, > const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) const { > const unsigned int beg = (unsigned int)offset(x0,y0,z0,c0), end = offset(x1,y0,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > x0,x1,y0,z0,c0); > > return CImg<T>(_data+beg,x1-x0+1,1,1,1,true); > } ># 23244 "./CImg.h" > CImg<T> get_shared_rows(const unsigned int y0, const unsigned int y1, > const unsigned int z0=0, const unsigned int c0=0) { > const unsigned int beg = offset(0,y0,z0,c0), end = offset(0,y1,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_rows(): Invalid request of a shared-memory subset (0->%u,%u->%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,y0,y1,z0,c0); > > return CImg<T>(_data+beg,_width,y1-y0+1,1,1,true); > } > > > const CImg<T> get_shared_rows(const unsigned int y0, const unsigned int y1, > const unsigned int z0=0, const unsigned int c0=0) const { > const unsigned int beg = offset(0,y0,z0,c0), end = offset(0,y1,z0,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_rows(): Invalid request of a shared-memory subset (0->%u,%u->%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,y0,y1,z0,c0); > > return CImg<T>(_data+beg,_width,y1-y0+1,1,1,true); > } > > > > > > > > CImg<T> get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) { > return get_shared_rows(y0,y0,z0,c0); > } > > > const CImg<T> get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) const { > return get_shared_rows(y0,y0,z0,c0); > } > > > > > > > > CImg<T> get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) { > const unsigned int beg = offset(0,0,z0,c0), end = offset(0,0,z1,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_slices(): Invalid request of a shared-memory subset (0->%u,0->%u,%u->%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,z0,z1,c0); > > return CImg<T>(_data+beg,_width,_height,z1-z0+1,1,true); > } > > > const CImg<T> get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) const { > const unsigned int beg = offset(0,0,z0,c0), end = offset(0,0,z1,c0); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_slices(): Invalid request of a shared-memory subset (0->%u,0->%u,%u->%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,z0,z1,c0); > > return CImg<T>(_data+beg,_width,_height,z1-z0+1,1,true); > } > > > > > > > CImg<T> get_shared_slice(const unsigned int z0, const unsigned int c0=0) { > return get_shared_slices(z0,z0,c0); > } > > > const CImg<T> get_shared_slice(const unsigned int z0, const unsigned int c0=0) const { > return get_shared_slices(z0,z0,c0); > } > > > > > > > CImg<T> get_shared_channels(const unsigned int c0, const unsigned int c1) { > const unsigned int beg = offset(0,0,0,c0), end = offset(0,0,0,c1); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_channels(): Invalid request of a shared-memory subset (0->%u,0->%u,0->%u,%u->%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,_depth-1,c0,c1); > > return CImg<T>(_data+beg,_width,_height,_depth,c1-c0+1,true); > } > > > const CImg<T> get_shared_channels(const unsigned int c0, const unsigned int c1) const { > const unsigned int beg = offset(0,0,0,c0), end = offset(0,0,0,c1); > if (beg>end || beg>=size() || end>=size()) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_shared_channels(): Invalid request of a shared-memory subset (0->%u,0->%u,0->%u,%u->%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > _width-1,_height-1,_depth-1,c0,c1); > > return CImg<T>(_data+beg,_width,_height,_depth,c1-c0+1,true); > } > > > > > > CImg<T> get_shared_channel(const unsigned int c0) { > return get_shared_channels(c0,c0); > } > > > const CImg<T> get_shared_channel(const unsigned int c0) const { > return get_shared_channels(c0,c0); > } > > > CImg<T> get_shared() { > return CImg<T>(_data,_width,_height,_depth,_spectrum,true); > } > > > const CImg<T> get_shared() const { > return CImg<T>(_data,_width,_height,_depth,_spectrum,true); > } ># 23387 "./CImg.h" > CImgList<T> get_split(const char axis, const int nb=0) const { > CImgList<T> res; > if (is_empty()) return res; > const char _axis = cimg::uncase(axis); > > if (nb<=0) { > const unsigned int dp = (unsigned int)(nb?-nb:1); > switch (_axis) { > case 'x': { > res.assign(_width/dp+(_width%dp?1:0),1,1); > const unsigned int pe = _width - dp; > > ># 23399 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _height*_depth*_spectrum>=128) ># 23399 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(p,0,0,0,p+dp-1,_height-1,_depth-1,_spectrum-1).move_to(res[p/dp]); > get_crop((res._width-1)*dp,0,0,0,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } break; > case 'y': { > res.assign(_height/dp+(_height%dp?1:0),1,1); > const unsigned int pe = _height - dp; > > ># 23408 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _width*_depth*_spectrum>=128) ># 23408 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(0,p,0,0,_width-1,p+dp-1,_depth-1,_spectrum-1).move_to(res[p/dp]); > get_crop(0,(res._width-1)*dp,0,0,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } break; > case 'z': { > res.assign(_depth/dp+(_depth%dp?1:0),1,1); > const unsigned int pe = _depth - dp; > > ># 23417 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _width*_height*_spectrum>=128) ># 23417 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(0,0,p,0,_width-1,_height-1,p+dp-1,_spectrum-1).move_to(res[p/dp]); > get_crop(0,0,(res._width-1)*dp,0,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } break; > default : { > res.assign(_spectrum/dp+(_spectrum%dp?1:0),1,1); > const unsigned int pe = _spectrum - dp; > > ># 23426 "./CImg.h" >#pragma omp parallel for if (res._width>=128 && _width*_height*_depth>=128) ># 23426 "./CImg.h" > > > for (unsigned int p = 0; p<pe; p+=dp) get_crop(0,0,0,p,_width-1,_height-1,_depth-1,p+dp-1).move_to(res[p/dp]); > get_crop(0,0,0,(res._width-1)*dp,_width-1,_height-1,_depth-1,_spectrum-1).move_to(res.back()); > } > } > } else { > const unsigned int siz = _axis=='x'?_width:_axis=='y'?_height:_axis=='z'?_depth:_axis=='c'?_spectrum:0; > if ((unsigned int)nb>siz) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_split(): Instance cannot be split along %c-axis into %u blocs.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis,nb); > int err = (int)siz; > unsigned int _p = 0; > switch (_axis) { > case 'x' : { > for (int p = 0; p<(int)((*this)._width); ++p) if ((err-=nb)<=0) { > get_crop(_p,0,0,0,p,_height-1,_depth-1,_spectrum-1).move_to(res); > err+=(int)siz; > _p=p+1; > } > } break; > case 'y' : { > for (int p = 0; p<(int)((*this)._height); ++p) if ((err-=nb)<=0) { > get_crop(0,_p,0,0,_width-1,p,_depth-1,_spectrum-1).move_to(res); > err+=(int)siz; > _p=p+1; > } > } break; > case 'z' : { > for (int p = 0; p<(int)((*this)._depth); ++p) if ((err-=nb)<=0) { > get_crop(0,0,_p,0,_width-1,_height-1,p,_spectrum-1).move_to(res); > err+=(int)siz; > _p=p+1; > } > } break; > default : { > for (int p = 0; p<(int)((*this)._spectrum); ++p) if ((err-=nb)<=0) { > get_crop(0,0,0,_p,_width-1,_height-1,_depth-1,p).move_to(res); > err+=(int)siz; > _p=p+1; > } > } > } > } > return res; > } > > > > > > > > CImgList<T> get_split(const T value, const bool keep_values, const bool is_shared) const { > CImgList<T> res; > if (is_empty()) return res; > for (const T *ps = _data, *_ps = ps, *const pe = end(); ps<pe; ) { > while (_ps<pe && *_ps==value) ++_ps; > unsigned int siz = _ps - ps; > if (siz && keep_values) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > while (_ps<pe && *_ps!=value) ++_ps; > siz = _ps - ps; > if (siz) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > } > return res; > } > > > > > > > > template<typename t> > CImgList<T> get_split(const CImg<t>& values, const bool keep_values, const bool is_shared) const { > CImgList<T> res; > if (is_empty()) return res; > if (!values) return CImgList<T>(*this); > if (values.size()==1) return get_split(*values,keep_values,is_shared); > const t *pve = values.end(); > for (const T *ps = _data, *_ps = ps, *const pe = end(); ps<pe; ) { > > > const t *pv = 0; > do { > pv = values._data; > const T *__ps = _ps; > while (__ps<pe && pv<pve && *__ps==(T)*pv) { ++__ps; ++pv; } > if (pv==pve) _ps = __ps; > } while (pv==pve); > unsigned int siz = _ps - ps; > if (siz && keep_values) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > > > do { > pv = values._data; > while (_ps<pe && *_ps!=(T)*pv) ++_ps; > if (_ps<pe) { > const T *__ps = _ps + 1; > ++pv; > while (__ps<pe && pv<pve && *__ps==(T)*pv) { ++__ps; ++pv; } > if (pv!=pve) _ps = __ps; > } > } while (_ps<pe && pv!=pve); > > > siz = _ps - ps; > if (siz) res.insert(CImg<T>(ps,1,siz,1,1,is_shared),~0U,is_shared); > ps = _ps; > } > return res; > } > > > CImgList<T> get_split(const bool is_shared) const { > CImgList<T> res; > if (is_empty()) return res; > T *p0 = _data, current = *p0; > for (T *p = (*this)._data, *_maxp = (*this)._data + (*this).size(); p<_maxp; ++p) if (*p!=current) { res.insert(CImg<T>(p0,1,p-p0,1,1,is_shared),~0U,is_shared); p0 = p; current = *p; } > res.insert(CImg<T>(p0,1,end()-p0,1,1,is_shared),~0U,is_shared); > return res; > } > > > > > > > > template<typename t> > CImg<T>& append(const CImg<t>& img, const char axis='x', const float align=0) { > if (is_empty()) return assign(img,false); > if (!img) return *this; > return CImgList<T>(*this,true).insert(img).get_append(axis,align).move_to(*this); > } > > > CImg<T>& append(const CImg<T>& img, const char axis='x', const float align=0) { > if (is_empty()) return assign(img,false); > if (!img) return *this; > return CImgList<T>(*this,img,true).get_append(axis,align).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_append(const CImg<T>& img, const char axis='x', const float align=0) const { > if (is_empty()) return +img; > if (!img) return +*this; > return CImgList<typename cimg::superset<T,t>::type>(*this,true).insert(img).get_append(axis,align); > } > > > CImg<T> get_append(const CImg<T>& img, const char axis='x', const float align=0) const { > if (is_empty()) return +img; > if (!img) return +*this; > return CImgList<T>(*this,img,true).get_append(axis,align); > } ># 23605 "./CImg.h" > template<typename t> > CImg<T>& correlate(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_correlate(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_correlate(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > typedef typename cimg::superset2<T,t,float>::type Ttfloat; > CImg<Ttfloat> res(_width,_height,_depth,cimg::max(_spectrum,mask._spectrum)); > if (boundary_conditions && mask._width==mask._height && ((mask._depth==1 && mask._width<=5) || (mask._depth==mask._width && mask._width<=3))) { > > Ttfloat *ptrd = res._data; > switch (mask._depth) { > case 3 : { > T I[27] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0, _p1z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,_p1z,0)), (I[3] = I[4] = (T)(_img)(0,y,_p1z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,_p1z,0)), (I[9] = I[10] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = (T)(_img)(0,_n1y,z,0)), (I[18] = I[19] = (T)(_img)(0,_p1y,_n1z,0)), (I[21] = I[22] = (T)(_img)(0,y,_n1z,0)), (I[24] = I[25] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,_p1z,0)), (I[5] = (T)(_img)(_n1x,y,_p1z,0)), (I[8] = (T)(_img)(_n1x,_n1y,_p1z,0)), (I[11] = (T)(_img)(_n1x,_p1y,z,0)), (I[14] = (T)(_img)(_n1x,y,z,0)), (I[17] = (T)(_img)(_n1x,_n1y,z,0)), (I[20] = (T)(_img)(_n1x,_p1y,_n1z,0)), (I[23] = (T)(_img)(_n1x,y,_n1z,0)), (I[26] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + > I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + > I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + > I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + > I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + > I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + > I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + > I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + > I[24]*I[24] + I[25]*I[25] + I[26]*I[26]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + > I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + > I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + > I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26])/std::sqrt(N):0); > } > } else for (int z = 0, _p1z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,_p1z,0)), (I[3] = I[4] = (T)(_img)(0,y,_p1z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,_p1z,0)), (I[9] = I[10] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = (T)(_img)(0,_n1y,z,0)), (I[18] = I[19] = (T)(_img)(0,_p1y,_n1z,0)), (I[21] = I[22] = (T)(_img)(0,y,_n1z,0)), (I[24] = I[25] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,_p1z,0)), (I[5] = (T)(_img)(_n1x,y,_p1z,0)), (I[8] = (T)(_img)(_n1x,_n1y,_p1z,0)), (I[11] = (T)(_img)(_n1x,_p1y,z,0)), (I[14] = (T)(_img)(_n1x,y,z,0)), (I[17] = (T)(_img)(_n1x,_n1y,z,0)), (I[20] = (T)(_img)(_n1x,_p1y,_n1z,0)), (I[23] = (T)(_img)(_n1x,y,_n1z,0)), (I[26] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + > I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + > I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + > I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26]); > } > } break; > case 2 : { > T I[8] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), (I[4] = (T)(_img)(0,y,_n1z,0)), (I[6] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)), (I[5] = (T)(_img)(_n1x,y,_n1z,0)), (I[7] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], ++x, ++_n1x) { > const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + > I[2]*I[2] + I[3]*I[3] + > I[4]*I[4] + I[5]*I[5] + > I[6]*I[6] + I[7]*I[7]); > *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3] + > I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7])/std::sqrt(N):0); > } > } else for (int z = 0, _n1z = 1>=((_img)._depth)?(int)((_img)._depth)-1:1; _n1z<(int)((_img)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), (I[4] = (T)(_img)(0,y,_n1z,0)), (I[6] = (T)(_img)(0,_n1y,_n1z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)), (I[5] = (T)(_img)(_n1x,y,_n1z,0)), (I[7] = (T)(_img)(_n1x,_n1y,_n1z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], ++x, ++_n1x) > *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3] + > I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7]); > } > } break; > default : > case 1 : > switch (mask._width) { > case 6 : { > T I[36] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2, _n3y = 3>=((_img)._height)?(int)((_img)._height)-1:3; _n3y<(int)((_img)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = 2>=(_img)._width?(_img).width()-1:2, _n3x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[6] = I[7] = I[8] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = I[14] = (T)(_img)(0,y,z,0)), (I[18] = I[19] = I[20] = (T)(_img)(0,_n1y,z,0)), (I[24] = I[25] = I[26] = (T)(_img)(0,_n2y,z,0)), (I[30] = I[31] = I[32] = (T)(_img)(0,_n3y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[9] = (T)(_img)(_n1x,_p1y,z,0)), (I[15] = (T)(_img)(_n1x,y,z,0)), (I[21] = (T)(_img)(_n1x,_n1y,z,0)), (I[27] = (T)(_img)(_n1x,_n2y,z,0)), (I[33] = (T)(_img)(_n1x,_n3y,z,0)), (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[10] = (T)(_img)(_n2x,_p1y,z,0)), (I[16] = (T)(_img)(_n2x,y,z,0)), (I[22] = (T)(_img)(_n2x,_n1y,z,0)), (I[28] = (T)(_img)(_n2x,_n2y,z,0)), (I[34] = (T)(_img)(_n2x,_n3y,z,0)), 3>=(_img)._width?(_img).width()-1:3); (_n3x<(_img).width() && ( (I[5] = (T)(_img)(_n3x,_p2y,z,0)), (I[11] = (T)(_img)(_n3x,_p1y,z,0)), (I[17] = (T)(_img)(_n3x,y,z,0)), (I[23] = (T)(_img)(_n3x,_n1y,z,0)), (I[29] = (T)(_img)(_n3x,_n2y,z,0)), (I[35] = (T)(_img)(_n3x,_n3y,z,0)),1)) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + > I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + > I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + > I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + > I[24]*I[24] + I[25]*I[25] + I[26]*I[26] + I[27]*I[27] + I[28]*I[28] + I[29]*I[29] + > I[30]*I[30] + I[31]*I[31] + I[32]*I[32] + I[33]*I[33] + I[34]*I[34] + I[35]*I[35]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26] + I[27]*_mask[27] + I[28]*_mask[28] + I[29]*_mask[29] + > I[30]*_mask[30] + I[31]*_mask[31] + I[32]*_mask[32] + I[33]*_mask[33] + I[34]*_mask[34] + I[35]*_mask[35])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2, _n3y = 3>=((_img)._height)?(int)((_img)._height)-1:3; _n3y<(int)((_img)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = 2>=(_img)._width?(_img).width()-1:2, _n3x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[6] = I[7] = I[8] = (T)(_img)(0,_p1y,z,0)), (I[12] = I[13] = I[14] = (T)(_img)(0,y,z,0)), (I[18] = I[19] = I[20] = (T)(_img)(0,_n1y,z,0)), (I[24] = I[25] = I[26] = (T)(_img)(0,_n2y,z,0)), (I[30] = I[31] = I[32] = (T)(_img)(0,_n3y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[9] = (T)(_img)(_n1x,_p1y,z,0)), (I[15] = (T)(_img)(_n1x,y,z,0)), (I[21] = (T)(_img)(_n1x,_n1y,z,0)), (I[27] = (T)(_img)(_n1x,_n2y,z,0)), (I[33] = (T)(_img)(_n1x,_n3y,z,0)), (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[10] = (T)(_img)(_n2x,_p1y,z,0)), (I[16] = (T)(_img)(_n2x,y,z,0)), (I[22] = (T)(_img)(_n2x,_n1y,z,0)), (I[28] = (T)(_img)(_n2x,_n2y,z,0)), (I[34] = (T)(_img)(_n2x,_n3y,z,0)), 3>=(_img)._width?(_img).width()-1:3); (_n3x<(_img).width() && ( (I[5] = (T)(_img)(_n3x,_p2y,z,0)), (I[11] = (T)(_img)(_n3x,_p1y,z,0)), (I[17] = (T)(_img)(_n3x,y,z,0)), (I[23] = (T)(_img)(_n3x,_n1y,z,0)), (I[29] = (T)(_img)(_n3x,_n2y,z,0)), (I[35] = (T)(_img)(_n3x,_n3y,z,0)),1)) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + > I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + > I[18]*_mask[18] + I[19]*_mask[19] + I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + > I[24]*_mask[24] + I[25]*_mask[25] + I[26]*_mask[26] + I[27]*_mask[27] + I[28]*_mask[28] + I[29]*_mask[29] + > I[30]*_mask[30] + I[31]*_mask[31] + I[32]*_mask[32] + I[33]*_mask[33] + I[34]*_mask[34] + I[35]*_mask[35]); > } > } break; > case 5 : { > T I[25] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[5] = I[6] = I[7] = (T)(_img)(0,_p1y,z,0)), (I[10] = I[11] = I[12] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = I[17] = (T)(_img)(0,_n1y,z,0)), (I[20] = I[21] = I[22] = (T)(_img)(0,_n2y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[8] = (T)(_img)(_n1x,_p1y,z,0)), (I[13] = (T)(_img)(_n1x,y,z,0)), (I[18] = (T)(_img)(_n1x,_n1y,z,0)), (I[23] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[9] = (T)(_img)(_n2x,_p1y,z,0)), (I[14] = (T)(_img)(_n2x,y,z,0)), (I[19] = (T)(_img)(_n2x,_n1y,z,0)), (I[24] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + > I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + > I[10]*I[10] + I[11]*I[11] + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + > I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + I[18]*I[18] + I[19]*I[19] + > I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + I[24]*I[24]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + > I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + > I[10]*_mask[10] + I[11]*_mask[11] + I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + I[18]*_mask[18] + I[19]*_mask[19] + > I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + I[24]*_mask[24])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = I[2] = (T)(_img)(_p2x,_p2y,z,0)), (I[5] = I[6] = I[7] = (T)(_img)(0,_p1y,z,0)), (I[10] = I[11] = I[12] = (T)(_img)(0,y,z,0)), (I[15] = I[16] = I[17] = (T)(_img)(0,_n1y,z,0)), (I[20] = I[21] = I[22] = (T)(_img)(0,_n2y,z,0)), (I[3] = (T)(_img)(_n1x,_p2y,z,0)), (I[8] = (T)(_img)(_n1x,_p1y,z,0)), (I[13] = (T)(_img)(_n1x,y,z,0)), (I[18] = (T)(_img)(_n1x,_n1y,z,0)), (I[23] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[4] = (T)(_img)(_n2x,_p2y,z,0)), (I[9] = (T)(_img)(_n2x,_p1y,z,0)), (I[14] = (T)(_img)(_n2x,y,z,0)), (I[19] = (T)(_img)(_n2x,_n1y,z,0)), (I[24] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + I[ 4]*_mask[ 4] + > I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + > I[10]*_mask[10] + I[11]*_mask[11] + I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + > I[15]*_mask[15] + I[16]*_mask[16] + I[17]*_mask[17] + I[18]*_mask[18] + I[19]*_mask[19] + > I[20]*_mask[20] + I[21]*_mask[21] + I[22]*_mask[22] + I[23]*_mask[23] + I[24]*_mask[24]); > } > } break; > case 4 : { > T I[16] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[4] = I[5] = (T)(_img)(0,y,z,0)), (I[8] = I[9] = (T)(_img)(0,_n1y,z,0)), (I[12] = I[13] = (T)(_img)(0,_n2y,z,0)), (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[6] = (T)(_img)(_n1x,y,z,0)), (I[10] = (T)(_img)(_n1x,_n1y,z,0)), (I[14] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[3] = (T)(_img)(_n2x,_p1y,z,0)), (I[7] = (T)(_img)(_n2x,y,z,0)), (I[11] = (T)(_img)(_n2x,_n1y,z,0)), (I[15] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], _p1x = x++, ++_n1x, ++_n2x) { > const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + > I[ 4]*I[ 4] + I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + > I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + > I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15]); > *(ptrd++) = (Ttfloat)(N?(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + > I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + > I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1, _n2y = 2>=((_img)._height)?(int)((_img)._height)-1:2; _n2y<(int)((_img)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=(_img)._width?(_img).width()-1:1, _n2x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[4] = I[5] = (T)(_img)(0,y,z,0)), (I[8] = I[9] = (T)(_img)(0,_n1y,z,0)), (I[12] = I[13] = (T)(_img)(0,_n2y,z,0)), (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[6] = (T)(_img)(_n1x,y,z,0)), (I[10] = (T)(_img)(_n1x,_n1y,z,0)), (I[14] = (T)(_img)(_n1x,_n2y,z,0)), 2>=(_img)._width?(_img).width()-1:2); (_n2x<(_img).width() && ( (I[3] = (T)(_img)(_n2x,_p1y,z,0)), (I[7] = (T)(_img)(_n2x,y,z,0)), (I[11] = (T)(_img)(_n2x,_n1y,z,0)), (I[15] = (T)(_img)(_n2x,_n2y,z,0)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[14] = I[15], _p1x = x++, ++_n1x, ++_n2x) > *(ptrd++) = (Ttfloat)(I[ 0]*_mask[ 0] + I[ 1]*_mask[ 1] + I[ 2]*_mask[ 2] + I[ 3]*_mask[ 3] + > I[ 4]*_mask[ 4] + I[ 5]*_mask[ 5] + I[ 6]*_mask[ 6] + I[ 7]*_mask[ 7] + > I[ 8]*_mask[ 8] + I[ 9]*_mask[ 9] + I[10]*_mask[10] + I[11]*_mask[11] + > I[12]*_mask[12] + I[13]*_mask[13] + I[14]*_mask[14] + I[15]*_mask[15]); > } > } break; > case 3 : { > T I[9] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[3] = I[4] = (T)(_img)(0,y,z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[5] = (T)(_img)(_n1x,y,z,0)), (I[8] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + I[2]*I[2] + > I[3]*I[3] + I[4]*I[4] + I[5]*I[5] + > I[6]*I[6] + I[7]*I[7] + I[8]*I[8]); > *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + I[2]*_mask[2] + > I[3]*_mask[3] + I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7] + I[8]*_mask[8])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _p1y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(_img)(_p1x,_p1y,z,0)), (I[3] = I[4] = (T)(_img)(0,y,z,0)), (I[6] = I[7] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[2] = (T)(_img)(_n1x,_p1y,z,0)), (I[5] = (T)(_img)(_n1x,y,z,0)), (I[8] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + I[2]*_mask[2] + > I[3]*_mask[3] + I[4]*_mask[4] + I[5]*_mask[5] + > I[6]*_mask[6] + I[7]*_mask[7] + I[8]*_mask[8]); > } > } break; > case 2 : { > T I[4] = { 0 }; > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) { > const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + > I[2]*I[2] + I[3]*I[3]); > *(ptrd++) = (Ttfloat)(N?(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3])/std::sqrt(N):0); > } > } else for (int z = 0; z<(int)((_img)._depth); ++z) for (int y = 0, _n1y = 1>=((_img)._height)?(int)((_img)._height)-1:1; _n1y<(int)((_img)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(_img)(0,y,z,0)), (I[2] = (T)(_img)(0,_n1y,z,0)), 1>=(_img)._width?(_img).width()-1:1); (_n1x<(_img).width() && ( (I[1] = (T)(_img)(_n1x,y,z,0)), (I[3] = (T)(_img)(_n1x,_n1y,z,0)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) > *(ptrd++) = (Ttfloat)(I[0]*_mask[0] + I[1]*_mask[1] + > I[2]*_mask[2] + I[3]*_mask[3]); > } > } break; > case 1 : > if (is_normalized) res.fill(1); > else for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > res.get_shared_channel(c).assign(_img)*=_mask[0]; > } > break; > } > } > } else { > const int > mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, > mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), > mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; > > ># 23824 "./CImg.h" >#pragma omp parallel for if (res._spectrum>=2) ># 23824 "./CImg.h" > > > for (int c = 0; c<(int)((res)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > const Ttfloat _M = (Ttfloat)_mask.magnitude(2), M = _M*_M; > > ># 23832 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 23832 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Ttfloat val = 0, N = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Ttfloat _val = (Ttfloat)_img(x+xm,y+ym,z+zm); > val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); > N+=_val*_val; > } > N*=M; > res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); > } > if (boundary_conditions) > > ># 23850 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23850 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0, N = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Ttfloat _val = (Ttfloat)_img._atXYZ(x+xm,y+ym,z+zm); > val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); > N+=_val*_val; > } > N*=M; > res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); > } > else > > ># 23867 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23867 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0, N = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Ttfloat _val = (Ttfloat)_img.atXYZ(x+xm,y+ym,z+zm,0,0); > val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); > N+=_val*_val; > } > N*=M; > res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); > } > } else { > > ># 23884 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 23884 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Ttfloat val = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) > val+=_img(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); > res(x,y,z,c) = (Ttfloat)val; > } > if (boundary_conditions) > > ># 23898 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23898 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) > val+=_img._atXYZ(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); > res(x,y,z,c) = (Ttfloat)val; > } > else > > ># 23911 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23911 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Ttfloat val = 0; > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) > val+=_img.atXYZ(x+xm,y+ym,z+zm,0,0)*_mask(mx1+xm,my1+ym,mz1+zm); > res(x,y,z,c) = (Ttfloat)val; > } > } > } > } > return res; > } ># 23937 "./CImg.h" > template<typename t> > CImg<T>& convolve(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_convolve(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset2<T,t,float>::type> get_convolve(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > return get_correlate(CImg<t>(mask._data,mask.size(),1,1,1,true).get_mirror('x').resize(mask,-1),boundary_conditions,is_normalized); > } > > > > > > > > template<typename t> > CImg<T>& erode(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_erode(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_erode(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > typedef typename cimg::superset<T,t>::type Tt; > CImg<Tt> res(_width,_height,_depth,cimg::max(_spectrum,mask._spectrum)); > const int > mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, > mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), > mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; > > ># 23975 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 23975 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > > ># 23982 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 23982 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) + mval); > if (mval && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > if (boundary_conditions) > > ># 23999 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 23999 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) + mval); > if (mval && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > else > > ># 24015 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24015 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) + mval); > if (mval && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > } else { > > ># 24031 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 24031 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > if (boundary_conditions) > > ># 24047 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24047 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > else > > ># 24062 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24062 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt min_val = cimg::type<Tt>::max(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval<min_val) min_val = cval; > } > res(x,y,z,c) = min_val; > } > } > } > return res; > } > > > > > > > > CImg<T>& erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { > if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; > if (sx>1 && _width>1) { > const int L = width(), off = 1, s = (int)sx, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *const ptrdb = buf._data, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > T *ptrd = buf._data, cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val<=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval<cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval<cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val<=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val<cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val<cur) cur = val; *(ptrd--) = cur; } > T *pd = data(0,y,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sy>1 && _height>1) { > const int L = height(), off = width(), s = (int)sy, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val<=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval<cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval<cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val<=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val<cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val<cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,0,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sz>1 && _depth>1) { > const int L = depth(), off = width()*height(), s = (int)sz, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val<=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval<cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval<cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val<=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val<cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val<cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,y,0,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > return *this; > } > > > CImg<T> get_erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { > return (+*this).erode(sx,sy,sz); > } > > > > > > CImg<T>& erode(const unsigned int s) { > return erode(s,s,s); > } > > > CImg<T> get_erode(const unsigned int s) const { > return (+*this).erode(s); > } > > > > > > > > template<typename t> > CImg<T>& dilate(const CImg<t>& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { > if (is_empty() || !mask) return *this; > return get_dilate(mask,boundary_conditions,is_normalized).move_to(*this); > } > > > template<typename t> > CImg<typename cimg::superset<T,t>::type> get_dilate(const CImg<t>& mask, const unsigned int boundary_conditions=1, > const bool is_normalized=false) const { > if (is_empty() || !mask) return *this; > typedef typename cimg::superset<T,t>::type Tt; > CImg<Tt> res(_width,_height,_depth,_spectrum); > const int > mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, > mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), > mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; > > ># 24216 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 24216 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> _img = get_shared_channel(c%_spectrum); > const CImg<t> _mask = mask.get_shared_channel(c%mask._spectrum); > if (is_normalized) { > > ># 24223 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=32768) ># 24223 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) - mval); > if (mval && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > if (boundary_conditions) > > ># 24240 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24240 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) - mval); > if (mval && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > else > > ># 24256 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24256 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const t mval = _mask(mx1+xm,my1+ym,mz1+zm); > const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) - mval); > if (mval && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > } else { > > ># 24272 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth>=128) ># 24272 "./CImg.h" > > > for (int z = mz1; z<mze; ++z) > for (int y = my1; y<mye; ++y) > for (int x = mx1; x<mxe; ++x) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > if (boundary_conditions) > > ># 24288 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24288 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > else > > ># 24303 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) ># 24303 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) > for (int x = 0; x<width(); (y<my1 || y>=mye || z<mz1 || z>=mze)?++x:((x<mx1-1 || x>=mxe)?++x:(x=mxe))) { > Tt max_val = cimg::type<Tt>::min(); > for (int zm = -mz1; zm<=mz2; ++zm) > for (int ym = -my1; ym<=my2; ++ym) > for (int xm = -mx1; xm<=mx2; ++xm) { > const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); > if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; > } > res(x,y,z,c) = max_val; > } > } > } > return res; > } > > > > > > > > CImg<T>& dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { > if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; > if (sx>1 && _width>1) { > const int L = width(), off = 1, s = (int)sx, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val>=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } > T *pd = data(0,y,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sy>1 && _height>1) { > const int L = height(), off = width(), s = (int)sy, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val>=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,0,z,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > > if (sz>1 && _depth>1) { > const int L = depth(), off = width()*height(), s = (int)sz, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; > CImg<T> buf(L); > > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; > const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; > ptrd = buf._data; T cur = *ptrs; ptrs+=off; bool is_first = true; > for (int p = s2-1; p>0 && ptrs<=ptrse; --p) { const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; }} *(ptrd++) = cur; > for (int p = s1; p>0 && ptrd<=ptrde; --p) { const T val = *ptrs; if (ptrs<ptrse) ptrs+=off; if (val>=cur) { cur = val; is_first = false; } *(ptrd++) = cur; } > for (int p = L - s - 1; p>0; --p) { > const T val = *ptrs; ptrs+=off; > if (is_first) { > const T *nptrs = ptrs - off; cur = val; > for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } > nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; > } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } > *(ptrd++) = cur; > } > ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; > for (int p = s1; p>0 && ptrs>=ptrsb; --p) { const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; } *(ptrd--) = cur; > for (int p = s2-1; p>0 && ptrd>=ptrdb; --p) { const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; } > T *pd = data(x,y,0,c); for (T *ps = (buf)._data, *_maxps = (buf)._data + (buf).size(); ps<_maxps; ++ps) { *pd = *ps; pd+=off; } > } > } > return *this; > } > > > CImg<T> get_dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { > return (+*this).dilate(sx,sy,sz); > } > > > > > > CImg<T>& dilate(const unsigned int s) { > return dilate(s,s,s); > } > > > CImg<T> get_dilate(const unsigned int s) const { > return (+*this).dilate(s); > } > > > > > > > > template<typename t> > CImg<T>& watershed(const CImg<t>& priority, const bool fill_lines=true) { > if (is_empty()) return *this; > if (!is_sameXYZ(priority)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "watershed(): image instance and specified priority (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),priority._width,priority._height,priority._depth,priority._spectrum,priority._data); > if (_spectrum!=1) { for (int c = 0; c<(int)((*this)._spectrum); ++c) get_shared_channel(c).watershed(priority.get_shared_channel(c%priority._spectrum),fill_lines); return *this; } > > CImg<boolT> is_queued(_width,_height,_depth,1,0); > CImg<typename cimg::superset2<T,t,int>::type> Q; > unsigned int sizeQ = 0; > > > const T *ptrs = _data; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) if (*(ptrs++)) { > if (x-1>=0 && !(*this)(x-1,y,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); > if (x+1<width() && !(*this)(x+1,y,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); > if (y-1>=0 && !(*this)(x,y-1,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); > if (y+1<height() && !(*this)(x,y+1,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); > if (z-1>=0 && !(*this)(x,y,z-1)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); > if (z+1<depth() && !(*this)(x,y,z+1)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); > } > > > while (sizeQ) { > > > const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); > Q._priority_queue_remove(sizeQ); > > > bool is_same_label = true; > unsigned int label = 0; > if (x-1>=0) { > if ((*this)(x-1,y,z)) { if (!label) label = (unsigned int)(*this)(x-1,y,z); else if (label!=(*this)(x-1,y,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); > } > if (x+1<width()) { > if ((*this)(x+1,y,z)) { if (!label) label = (unsigned int)(*this)(x+1,y,z); else if (label!=(*this)(x+1,y,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); > } > if (y-1>=0) { > if ((*this)(x,y-1,z)) { if (!label) label = (unsigned int)(*this)(x,y-1,z); else if (label!=(*this)(x,y-1,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); > } > if (y+1<height()) { > if ((*this)(x,y+1,z)) { if (!label) label = (unsigned int)(*this)(x,y+1,z); else if (label!=(*this)(x,y+1,z)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); > } > if (z-1>=0) { > if ((*this)(x,y,z-1)) { if (!label) label = (unsigned int)(*this)(x,y,z-1); else if (label!=(*this)(x,y,z-1)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); > } > if (z+1<depth()) { > if ((*this)(x,y,z+1)) { if (!label) label = (unsigned int)(*this)(x,y,z+1); else if (label!=(*this)(x,y,z+1)) is_same_label = false; } > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); > } > if (is_same_label) (*this)(x,y,z) = (T)label; > } > > > if (fill_lines) { > > > is_queued = false; > const T *ptrs = _data; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) if (!*(ptrs++) && > ((x-1>=0 && (*this)(x-1,y,z)) || (x+1<width() && (*this)(x+1,y,z)) || > (y-1>=0 && (*this)(x,y-1,z)) || (y+1<height() && (*this)(x,y+1,z)) || > (z-1>=0 && (*this)(x,y,z-1)) || (z+1>depth() && (*this)(x,y,z+1)))) > Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z),x,y,z); > > > while (sizeQ) { > const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); > Q._priority_queue_remove(sizeQ); > t pmax = cimg::type<t>::min(); > int xmax = 0, ymax = 0, zmax = 0; > if (x-1>=0) { > if ((*this)(x-1,y,z)) { if (priority(x-1,y,z)>pmax) { pmax = priority(x-1,y,z); xmax = x-1; ymax = y; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); > } > if (x+1<width()) { > if ((*this)(x+1,y,z)) { if (priority(x+1,y,z)>pmax) { pmax = priority(x+1,y,z); xmax = x+1; ymax = y; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); > } > if (y-1>=0) { > if ((*this)(x,y-1,z)) { if (priority(x,y-1,z)>pmax) { pmax = priority(x,y-1,z); xmax = x; ymax = y-1; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); > } > if (y+1<height()) { > if ((*this)(x,y+1,z)) { if (priority(x,y+1,z)>pmax) { pmax = priority(x,y+1,z); xmax = x; ymax = y+1; zmax = z; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); > } > if (z-1>=0) { > if ((*this)(x,y,z-1)) { if (priority(x,y,z-1)>pmax) { pmax = priority(x,y,z-1); xmax = x; ymax = y; zmax = z-1; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); > } > if (z+1<depth()) { > if ((*this)(x,y,z+1)) { if (priority(x,y,z+1)>pmax) { pmax = priority(x,y,z+1); xmax = x; ymax = y; zmax = z+1; }} > else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); > } > (*this)(x,y,z) = (*this)(xmax,ymax,zmax); > } > } > return *this; > } > > > template<typename t> > CImg<T> get_watershed(const CImg<t>& priority, const bool fill_lines=true) const { > return (+*this).watershed(priority,fill_lines); > } > > > template<typename t> > bool _priority_queue_insert(CImg<boolT>& is_queued, unsigned int& siz, const t value, const unsigned int x, const unsigned int y, const unsigned int z) { > if (is_queued(x,y,z)) return false; > is_queued(x,y,z) = true; > if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } > (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; > for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { > cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); > cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); > } > return true; > } > > CImg<T>& _priority_queue_remove(unsigned int& siz) { > (*this)(0,0) = (*this)(--siz,0); (*this)(0,1) = (*this)(siz,1); (*this)(0,2) = (*this)(siz,2); (*this)(0,3) = (*this)(siz,3); > const float value = (*this)(0,0); > for (unsigned int pos = 0, left = 0, right = 0; > ((right=2*(pos+1),(left=right-1))<siz && value<(*this)(left,0)) || (right<siz && value<(*this)(right,0));) { > if (right<siz) { > if ((*this)(left,0)>(*this)(right,0)) { > cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); > cimg::swap((*this)(pos,2),(*this)(left,2)); cimg::swap((*this)(pos,3),(*this)(left,3)); > pos = left; > } else { > cimg::swap((*this)(pos,0),(*this)(right,0)); cimg::swap((*this)(pos,1),(*this)(right,1)); > cimg::swap((*this)(pos,2),(*this)(right,2)); cimg::swap((*this)(pos,3),(*this)(right,3)); > pos = right; > } > } else { > cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); > cimg::swap((*this)(pos,2),(*this)(left,2)); cimg::swap((*this)(pos,3),(*this)(left,3)); > pos = left; > } > } > return *this; > } ># 24599 "./CImg.h" > CImg<T>& deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) { ># 24619 "./CImg.h" > const char naxis = cimg::uncase(axis); > const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; > if (is_empty() || (nsigma<0.1f && !order)) return *this; > const float > nnsigma = nsigma<0.1f?0.1f:nsigma, > alpha = 1.695f/nnsigma, > ema = (float)std::exp(-alpha), > ema2 = (float)std::exp(-2*alpha), > b1 = -2*ema, > b2 = ema2; > float a0 = 0, a1 = 0, a2 = 0, a3 = 0, coefp = 0, coefn = 0; > switch (order) { > case 0 : { > const float k = (1-ema)*(1-ema)/(1+2*alpha*ema-ema2); > a0 = k; > a1 = k*(alpha-1)*ema; > a2 = k*(alpha+1)*ema; > a3 = -k*ema2; > } break; > case 1 : { > const float k = -(1-ema)*(1-ema)*(1-ema)/(2*(ema+1)*ema); > a0 = a3 = 0; > a1 = k*ema; > a2 = -a1; > } break; > case 2 : { > const float > ea = (float)std::exp(-alpha), > k = -(ema2-1)/(2*alpha*ema), > kn = (-2*(-1+3*ea-3*ea*ea+ea*ea*ea)/(3*ea+1+3*ea*ea+ea*ea*ea)); > a0 = kn; > a1 = -kn*(1+k*alpha)*ema; > a2 = kn*(1-k*alpha)*ema; > a3 = -kn*ema2; > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "deriche(): Invalid specified filter order %u " > "(should be { 0=smoothing | 1=1st-derivative | 2=2nd-derivative }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > order); > } > coefp = (a0+a1)/(1+b1+b2); > coefn = (a2+a3)/(1+b1+b2); > switch (naxis) { > case 'x' : { > const int N = _width; > const unsigned long off = 1U; > > ># 24668 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24668 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { T *ptrX = data(0,y,z,c); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } break; > case 'y' : { > const int N = _height; > const unsigned long off = (unsigned long)_width; > > ># 24676 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24676 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { T *ptrX = data(x,0,z,c); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } break; > case 'z' : { > const int N = _depth; > const unsigned long off = (unsigned long)_width*_height; > > ># 24684 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24684 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { T *ptrX = data(x,y,0,c); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } break; > default : { > const int N = _spectrum; > const unsigned long off = (unsigned long)_width*_height*_depth; > > ># 24692 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24692 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { T *ptrX = data(x,y,z,0); CImg<Tfloat> Y(N); Tfloat *ptrY = Y._data, yb = 0, yp = 0; T xp = (T)0; if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } for (int m = 0; m<N; ++m) { const T xc = *ptrX; ptrX+=off; const Tfloat yc = *(ptrY++) = (Tfloat)(a0*xc + a1*xp - b1*yp - b2*yb); xp = xc; yb = yp; yp = yc; } T xn = (T)0, xa = (T)0; Tfloat yn = 0, ya = 0; if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } for (int n = N-1; n>=0; --n) { const T xc = *(ptrX-=off); const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); xa = xn; xn = xc; ya = yn; yn = yc; *ptrX = (T)(*(--ptrY)+yc); }; } > } > } > return *this; > } > > > CImg<Tfloat> get_deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) const { > return CImg<Tfloat>(*this,false).deriche(sigma,order,axis,boundary_conditions); > } ># 24716 "./CImg.h" > template <int K> > static void _cimg_recursive_apply(T *data, const Tfloat filter[], const int N, const unsigned long off, const int order, const bool boundary_conditions) { > Tfloat val[K]; > switch (order) { > case 0 : { > for (int pass = 0; pass<2; ++pass) { > for (int k = 1; k<K; ++k) val[k] = (Tfloat)(boundary_conditions?*data:0); > for (int n = 0; n<N; ++n) { > val[0] = (Tfloat)(*data)*filter[0]; > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) data+=off; else data-=off; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > if (!pass) data-=off; > } > } break; > case 1 : { > Tfloat x[3]; > for (int pass = 0; pass<2; ++pass) { > for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); > for (int k = 0; k<K; ++k) val[k] = 0; > for (int n = 0; n<N-1; ++n) { > if (!pass) { > x[0] = (Tfloat)*(data+off); > val[0] = 0.5f * (x[0] - x[2])*filter[0]; > } else val[0] = (Tfloat)(*data)*filter[0]; > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) { > data+=off; > for (int k = 2; k>0; --k) x[k] = x[k-1]; > } else data-=off; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > *data = (T)0; > } > } break; > case 2: { > Tfloat x[3]; > for (int pass = 0; pass<2; ++pass) { > for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); > for (int k = 0; k<K; ++k) val[k] = 0; > for (int n = 0; n<N-1; ++n) { > if (!pass) { x[0] = (Tfloat)*(data+off); val[0] = (x[1] - x[2])*filter[0]; } > else { x[0] = (Tfloat)*(data-off); val[0] = (x[2] - x[1])*filter[0]; } > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) data+=off; else data-=off; > for (int k = 2; k>0; --k) x[k] = x[k-1]; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > *data = (T)0; > } > } break; > case 3: { > Tfloat x[3]; > for (int pass = 0; pass<2; ++pass) { > for (int k = 0; k<3; ++k) x[k] = (Tfloat)(boundary_conditions?*data:0); > for (int k = 0; k<K; ++k) val[k] = 0; > for (int n = 0; n<N-1; ++n) { > if (!pass) { x[0] = (Tfloat)*(data+off); val[0] = (x[0] - 2*x[1] + x[2])*filter[0]; } > else { x[0] = (Tfloat)*(data-off); val[0] = 0.5f*(x[2] - x[0])*filter[0]; } > for (int k = 1; k<K; ++k) val[0]+=val[k]*filter[k]; > *data = (T)val[0]; > if (!pass) data+=off; else data-=off; > for (int k = 2; k>0; --k) x[k] = x[k-1]; > for (int k = K-1; k>0; --k) val[k] = val[k-1]; > } > *data = (T)0; > } > } break; > } > } ># 24803 "./CImg.h" > CImg<T>& vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) { > if (is_empty()) return *this; > const char naxis = cimg::uncase(axis); > const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; > if (is_empty() || (nsigma<0.1f && !order)) return *this; > const Tfloat > nnsigma = nsigma<0.1f?0.1f:nsigma, > q = (Tfloat)(nnsigma<2.5?3.97156-4.14554*std::sqrt(1-0.2689*nnsigma):0.98711*nnsigma-0.96330), > b0 = 1.57825f + 2.44413f*q + 1.4281f*q*q + 0.422205f*q*q*q, > b1 = (2.44413f*q + 2.85619f*q*q + 1.26661f*q*q*q), > b2 = -(1.4281f*q*q + 1.26661f*q*q*q), > b3 = 0.422205f*q*q*q, > B = 1.f - (b1 + b2 + b3)/b0; > Tfloat filter[4]; > filter[0] = B; filter[1] = b1/b0; filter[2] = b2/b0; filter[3] = b3/b0; > > switch (naxis) { > case 'x' : { > > ># 24822 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24822 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) _cimg_recursive_apply<4>(data(0,y,z,c),filter,_width,1U,order,boundary_conditions); > } break; > case 'y' : { > > ># 24828 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24828 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) _cimg_recursive_apply<4>(data(x,0,z,c),filter,_height,(unsigned long)_width,order,boundary_conditions); > } break; > case 'z' : { > > ># 24834 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24834 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) _cimg_recursive_apply<4>(data(x,y,0,c),filter,_depth,(unsigned long)(_width*_height),order,boundary_conditions); > } break; > default : { > > ># 24840 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) ># 24840 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) _cimg_recursive_apply<4>(data(x,y,z,0),filter,_spectrum,(unsigned long)(_width*_height*_depth),order,boundary_conditions); > } > } > return *this; > } > > > CImg<Tfloat> get_vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) const { > return CImg<Tfloat>(*this,false).vanvliet(sigma,order,axis,boundary_conditions); > } ># 24865 "./CImg.h" > CImg<T>& blur(const float sigma_x, const float sigma_y, const float sigma_z, > const bool boundary_conditions=true, const bool is_gaussian=false) { > if (!is_empty()) { > if (is_gaussian) { > if (_width>1) vanvliet(sigma_x,0,'x',boundary_conditions); > if (_height>1) vanvliet(sigma_y,0,'y',boundary_conditions); > if (_depth>1) vanvliet(sigma_z,0,'z',boundary_conditions); > } else { > if (_width>1) deriche(sigma_x,0,'x',boundary_conditions); > if (_height>1) deriche(sigma_y,0,'y',boundary_conditions); > if (_depth>1) deriche(sigma_z,0,'z',boundary_conditions); > } > } > return *this; > } > > > CImg<Tfloat> get_blur(const float sigma_x, const float sigma_y, const float sigma_z, > const bool boundary_conditions=true, const bool is_gaussian=false) const { > return CImg<Tfloat>(*this,false).blur(sigma_x,sigma_y,sigma_z,boundary_conditions,is_gaussian); > } > > > > > > > > CImg<T>& blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) { > const float nsigma = sigma>=0?sigma:-sigma*cimg::max(_width,_height,_depth)/100; > return blur(nsigma,nsigma,nsigma,boundary_conditions,is_gaussian); > } > > > CImg<Tfloat> get_blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) const { > return CImg<Tfloat>(*this,false).blur(sigma,boundary_conditions,is_gaussian); > } ># 24913 "./CImg.h" > template<typename t> > CImg<T>& blur_anisotropic(const CImg<t>& G, > const float amplitude=60, const float dl=0.8f, const float da=30, > const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=1) { > > > if (!is_sameXYZ(G) || (G._spectrum!=3 && G._spectrum!=6)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "blur_anisotropic(): Invalid specified diffusion tensor field (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > G._width,G._height,G._depth,G._spectrum,G._data); > > if (is_empty() || amplitude<=0 || dl<0) return *this; > const bool is_3d = (G._spectrum==6); > T val_min, val_max = max_min(val_min); > > if (da<=0) { > CImg<Tfloat> velocity(_width,_height,_depth,_spectrum); > for (unsigned int iteration = 0; iteration<(unsigned int)amplitude; ++iteration) { > Tfloat *ptrd = velocity._data, veloc_max = 0; > if (is_3d) > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ixx = Incc + Ipcc - 2*Iccc, > ixy = (Innc + Ippc - Inpc - Ipnc)/4, > ixz = (Incn + Ipcp - Incp - Ipcn)/4, > iyy = Icnc + Icpc - 2*Iccc, > iyz = (Icnn + Icpp - Icnp - Icpn)/4, > izz = Iccn + Iccp - 2*Iccc, > veloc = (Tfloat)(G(x,y,z,0)*ixx + 2*G(x,y,z,1)*ixy + 2*G(x,y,z,2)*ixz + G(x,y,z,3)*iyy + 2*G(x,y,z,4)*iyz + G(x,y,z,5)*izz); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > } > else > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ixx = Inc + Ipc - 2*Icc, > ixy = (Inn + Ipp - Inp - Ipn)/4, > iyy = Icn + Icp - 2*Icc, > veloc = (Tfloat)(G(x,y,0,0)*ixx + 2*G(x,y,0,1)*ixy + G(x,y,0,2)*iyy); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > } > if (veloc_max>0) *this+=(velocity*=dl/veloc_max); > } > } else { > const unsigned long whd = (unsigned long)_width*_height*_depth; > const float sqrt2amplitude = (float)std::sqrt(2*amplitude); > const int dx1 = width() - 1, dy1 = height() - 1, dz1 = depth() - 1; > CImg<Tfloat> res(_width,_height,_depth,_spectrum,0), W(_width,_height,_depth,is_3d?4:3), val(_spectrum,1,1,1,0); > int N = 0; > if (is_3d) { > for (float phi = (180%(int)da)/2.0f; phi<=180; phi+=da) { > const float phir = (float)(phi*cimg::PI/180), datmp = (float)(da/std::cos(phir)), da2 = datmp<1?360.0f:datmp; > for (float theta = 0; theta<360; (theta+=da2),++N) { > const float > thetar = (float)(theta*cimg::PI/180), > vx = (float)(std::cos(thetar)*std::cos(phir)), > vy = (float)(std::sin(thetar)*std::cos(phir)), > vz = (float)std::sin(phir); > const t > *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2), > *pd = G.data(0,0,0,3), *pe = G.data(0,0,0,4), *pf = G.data(0,0,0,5); > Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2), *pd3 = W.data(0,0,0,3); > for (int zg = 0; zg<(int)((G)._depth); ++zg) for (int yg = 0; yg<(int)((G)._height); ++yg) for (int xg = 0; xg<(int)((G)._width); ++xg) { > const t a = *(pa++), b = *(pb++), c = *(pc++), d = *(pd++), e = *(pe++), f = *(pf++); > const float > u = (float)(a*vx + b*vy + c*vz), > v = (float)(b*vx + d*vy + e*vz), > w = (float)(c*vx + e*vy + f*vz), > n = (float)std::sqrt(1e-5+u*u+v*v+w*w), > dln = dl/n; > *(pd0++) = (Tfloat)(u*dln); > *(pd1++) = (Tfloat)(v*dln); > *(pd2++) = (Tfloat)(w*dln); > *(pd3++) = (Tfloat)n; > } > > > ># 24999 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=2) firstprivate(val) ># 24999 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > val.fill(0); > const float > n = (float)W(x,y,z,3), > fsigma = (float)(n*sqrt2amplitude), > fsigma2 = 2*fsigma*fsigma, > length = gauss_prec*fsigma; > float > S = 0, > X = (float)x, > Y = (float)y, > Z = (float)z; > switch (interpolation_type) { > case 0 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { > const int > cx = (int)(X+0.5f), > cy = (int)(Y+0.5f), > cz = (int)(Z+0.5f); > const float > u = (float)W(cx,cy,cz,0), > v = (float)W(cx,cy,cz,1), > w = (float)W(cx,cy,cz,2); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(*this)(cx,cy,cz,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,cz,c)); > S+=coef; > } > X+=u; Y+=v; Z+=w; > } > } break; > case 1 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { > const float > u = (float)(W._linear_atXYZ(X,Y,Z,0)), > v = (float)(W._linear_atXYZ(X,Y,Z,1)), > w = (float)(W._linear_atXYZ(X,Y,Z,2)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); > S+=coef; > } > X+=u; Y+=v; Z+=w; > } > } break; > default : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { > const float > u0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,0)), > v0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,1)), > w0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,2)), > u = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,0)), > v = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,1)), > w = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,2)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); > S+=coef; > } > X+=u; Y+=v; Z+=w; > } > } break; > } > Tfloat *ptrd = res.data(x,y,z); > if (S>0) for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=val[c]/S; ptrd+=whd; } > else for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=(Tfloat)((*this)(x,y,z,c)); ptrd+=whd; } > } > } > } > } else { > for (float theta = (360%(int)da)/2.0f; theta<360; (theta+=da),++N) { > const float thetar = (float)(theta*cimg::PI/180), vx = (float)(std::cos(thetar)), vy = (float)(std::sin(thetar)); > const t *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2); > Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2); > for (int yg = 0; yg<(int)((G)._height); ++yg) for (int xg = 0; xg<(int)((G)._width); ++xg) { > const t a = *(pa++), b = *(pb++), c = *(pc++); > const float > u = (float)(a*vx + b*vy), > v = (float)(b*vx + c*vy), > n = (float)std::sqrt(1e-5+u*u+v*v), > dln = dl/n; > *(pd0++) = (Tfloat)(u*dln); > *(pd1++) = (Tfloat)(v*dln); > *(pd2++) = (Tfloat)n; > } > > > ># 25091 "./CImg.h" >#pragma omp parallel for if (_width>=256 && _height>=2) firstprivate(val) ># 25091 "./CImg.h" > > > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > val.fill(0); > const float > n = (float)W(x,y,0,2), > fsigma = (float)(n*sqrt2amplitude), > fsigma2 = 2*fsigma*fsigma, > length = gauss_prec*fsigma; > float > S = 0, > X = (float)x, > Y = (float)y; > switch (interpolation_type) { > case 0 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { > const int > cx = (int)(X+0.5f), > cy = (int)(Y+0.5f); > const float > u = (float)W(cx,cy,0,0), > v = (float)W(cx,cy,0,1); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(*this)(cx,cy,0,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,0,c)); > S+=coef; > } > X+=u; Y+=v; > } > } break; > case 1 : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { > const float > u = (float)(W._linear_atXY(X,Y,0,0)), > v = (float)(W._linear_atXY(X,Y,0,1)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); > S+=coef; > } > X+=u; Y+=v; > } > } break; > default : { > for (float l = 0; l<length && X>=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { > const float > u0 = (float)(0.5f*W._linear_atXY(X,Y,0,0)), > v0 = (float)(0.5f*W._linear_atXY(X,Y,0,1)), > u = (float)(W._linear_atXY(X+u0,Y+v0,0,0)), > v = (float)(W._linear_atXY(X+u0,Y+v0,0,1)); > if (is_fast_approx) { for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } > else { > const float coef = (float)std::exp(-l*l/fsigma2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); > S+=coef; > } > X+=u; Y+=v; > } > } > } > Tfloat *ptrd = res.data(x,y); > if (S>0) for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=val[c]/S; ptrd+=whd; } > else for (int c = 0; c<(int)((res)._spectrum); ++c) { *ptrd+=(Tfloat)((*this)(x,y,0,c)); ptrd+=whd; } > } > } > } > const Tfloat *ptrs = res._data; > for (T *ptrd = (*this)._data, *_maxptrd = (*this)._data + (*this).size(); ptrd<_maxptrd; ++ptrd) { const Tfloat val = *(ptrs++)/N; *ptrd = val<val_min?val_min:(val>val_max?val_max:(T)val); } > } > return *this; > } > > > template<typename t> > CImg<T> get_blur_anisotropic(const CImg<t>& G, > const float amplitude=60, const float dl=0.8f, const float da=30, > const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=true) const { > return (+*this).blur_anisotropic(G,amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); > } ># 25187 "./CImg.h" > CImg<T>& blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, const float da=30, > const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=true) { > return blur_anisotropic(get_diffusion_tensors(sharpness,anisotropy,alpha,sigma,interpolation_type!=3), > amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); > } > > > CImg<T> get_blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, > const float da=30, const float gauss_prec=2, const unsigned int interpolation_type=0, > const bool is_fast_approx=true) const { > return (+*this).blur_anisotropic(amplitude,sharpness,anisotropy,alpha,sigma,dl,da,gauss_prec,interpolation_type,is_fast_approx); > } ># 25218 "./CImg.h" > template<typename t> > CImg<T>& blur_bilateral(const CImg<t>& guide, const float sigma_x, const float sigma_y, const float sigma_z, const float sigma_r, > const int bgrid_x, const int bgrid_y, const int bgrid_z, const int bgrid_r, > const bool interpolation_type=true) { > if (!is_sameXYZ(guide)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "blur_bilateral(): Invalid size for specified guide image (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > guide._width,guide._height,guide._depth,guide._spectrum,guide._data); > if (is_empty()) return *this; > T m, M = guide.max_min(m); > if (m==M) return *this; > const float range = (float)(M - m); > const unsigned int > bx0 = bgrid_x>=0?bgrid_x:_width*-bgrid_x/100, > by0 = bgrid_y>=0?bgrid_y:_height*-bgrid_y/100, > bz0 = bgrid_z>=0?bgrid_z:_depth*-bgrid_z/100, > br0 = bgrid_r>=0?bgrid_r:(int)(-range*bgrid_r/100), > bx = bx0>0?bx0:1, > by = by0>0?by0:1, > bz = bz0>0?bz0:1, > br = br0>0?br0:1; > const float > _sigma_x = sigma_x>=0?sigma_x:-sigma_x*_width/100, > _sigma_y = sigma_y>=0?sigma_y:-sigma_y*_height/100, > _sigma_z = sigma_z>=0?sigma_z:-sigma_z*_depth/100, > _sigma_r = sigma_r>=0?sigma_r:-sigma_r*range/100, > nsigma_x = _sigma_x*bx/_width, > nsigma_y = _sigma_y*by/_height, > nsigma_z = _sigma_z*bz/_depth, > nsigma_r = _sigma_r*br/range; > if (nsigma_x>0 || nsigma_y>0 || nsigma_z>0 || nsigma_r>0) { > const bool is_3d = (_depth>1); > if (is_3d) { > CImg<floatT> bgrid(bx,by,bz,br), bgridw(bx,by,bz,br); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<t> _guide = guide.get_shared_channel(c%guide._spectrum); > bgrid.fill(0); bgridw.fill(0); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const T val = (*this)(x,y,z,c); > const float gval = (float)_guide(x,y,z); > const int X = x*bx/_width, Y = y*by/_height, Z = z*bz/_depth, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > bgrid(X,Y,Z,R) += (float)val; > bgridw(X,Y,Z,R) += 1; > } > bgrid.blur(nsigma_x,nsigma_y,nsigma_z,true).deriche(nsigma_r,0,'c',false); > bgridw.blur(nsigma_x,nsigma_y,nsigma_z,true).deriche(nsigma_r,0,'c',false); > if (interpolation_type) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y,z), > X = (float)x*bx/_width, Y = (float)y*by/_height, Z = (float)z*bz/_depth, R = (float)cimg::min(br-1.0f,(gval-m)*br/range), > bval0 = bgrid._linear_atXYZC(X,Y,Z,R), bval1 = bgridw._linear_atXYZC(X,Y,Z,R); > (*this)(x,y,z,c) = (T)(bval0/bval1); > } else for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y,z); > const int X = x*bx/_width, Y = y*by/_height, Z = z*bz/_depth, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > const float bval0 = bgrid(X,Y,Z,R), bval1 = bgridw(X,Y,Z,R); > (*this)(x,y,z,c) = (T)(bval0/bval1); > } > } > } else { > CImg<floatT> bgrid(bx,by,br,2); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<t> _guide = guide.get_shared_channel(c%guide._spectrum); > bgrid.fill(0); > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const T val = (*this)(x,y,c); > const float gval = (float)_guide(x,y); > const int X = x*bx/_width, Y = y*by/_height, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > bgrid(X,Y,R,0) += (float)val; > bgrid(X,Y,R,1) += 1; > } > bgrid.blur(nsigma_x,nsigma_y,0,true).blur(0,0,nsigma_r,false); > if (interpolation_type) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y), > X = (float)x*bx/_width, Y = (float)y*by/_height, R = (float)cimg::min(br-1.0f,(gval-m)*br/range), > bval0 = bgrid._linear_atXYZ(X,Y,R,0), bval1 = bgrid._linear_atXYZ(X,Y,R,1); > (*this)(x,y,c) = (T)(bval0/bval1); > } else for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float gval = (float)_guide(x,y); > const int X = x*bx/_width, Y = y*by/_height, R = (int)cimg::min(br-1.0f,(gval-m)*br/range); > const float bval0 = bgrid(X,Y,R,0), bval1 = bgrid(X,Y,R,1); > (*this)(x,y,c) = (T)(bval0/bval1); > } > } > } > } > return *this; > } > > > template<typename t> > CImg<T> get_blur_bilateral(const CImg<t>& guide, const float sigma_x, const float sigma_y, const float sigma_z, const float sigma_r, > const int bgrid_x, const int bgrid_y, const int bgrid_z, const int bgrid_r, > const bool interpolation_type=true) const { > return (+*this).blur_bilateral(guide,sigma_x,sigma_y,sigma_z,sigma_r,bgrid_x,bgrid_y,bgrid_z,bgrid_r,interpolation_type); > } ># 25324 "./CImg.h" > template<typename t> > CImg<T>& blur_bilateral(const CImg<t>& guide, const float sigma_s, const float sigma_r, const int bgrid_s=-33, const int bgrid_r=32, > const bool interpolation_type=true) { > const float nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100; > return blur_bilateral(guide,nsigma_s,nsigma_s,nsigma_s,sigma_r,bgrid_s,bgrid_s,bgrid_s,bgrid_r,interpolation_type); > } > > > template<typename t> > CImg<T> get_blur_bilateral(const CImg<t>& guide, const float sigma_s, const float sigma_r, const int bgrid_s=-33, const int bgrid_r=32, > const bool interpolation_type=true) const { > return (+*this).blur_bilateral(guide,sigma_s,sigma_s,sigma_s,sigma_r,bgrid_s,bgrid_s,bgrid_s,bgrid_r,interpolation_type); > } ># 25347 "./CImg.h" > CImg<T>& blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, > const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) { > if (is_empty() || !patch_size || !lookup_size) return *this; > return get_blur_patch(sigma_s,sigma_p,patch_size,lookup_size,smoothness,is_fast_approx).move_to(*this); > } > > > CImg<T> get_blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, > const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) const { ># 25437 "./CImg.h" > if (is_empty() || !patch_size || !lookup_size) return +*this; > CImg<Tfloat> res(_width,_height,_depth,_spectrum,0); > const CImg<T> _img = smoothness>0?get_blur(smoothness):CImg<Tfloat>(),&img = smoothness>0?_img:*this; > CImg<T> P(patch_size*patch_size*_spectrum), Q(P); > const float > nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100, > sigma_s2 = nsigma_s*nsigma_s, sigma_p2 = sigma_p*sigma_p, sigma_p3 = 3*sigma_p, > Pnorm = P.size()*sigma_p2; > const int rsize2 = (int)lookup_size/2, rsize1 = (int)lookup_size - rsize2 - 1; > const unsigned int N2 = patch_size*patch_size, N3 = N2*patch_size; > cimg::unused(N2,N3); > if (_depth>1) switch (patch_size) { > case 2 : if (is_fast_approx) for (int z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,z,c), pP[1] = (T)(img)(_n1x,y,z,c), pP[2] = (T)(img)(x,_n1y,z,c), pP[3] = (T)(img)(_n1x,_n1y,z,c), pP[4] = (T)(img)(x,y,_n1z,c), pP[5] = (T)(img)(_n1x,y,_n1z,c), pP[6] = (T)(img)(x,_n1y,_n1z,c), pP[7] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0; for (int r = (int)(z0)<0?0:(int)(z0), _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); ++r, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (cimg::abs(img(x,y,z,0) - img(p,q,r,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,r,c), pQ[1] = (T)(img)(_n1p,q,r,c), pQ[2] = (T)(img)(p,_n1q,r,c), pQ[3] = (T)(img)(_n1p,_n1q,r,c), pQ[4] = (T)(img)(p,q,_n1r,c), pQ[5] = (T)(img)(_n1p,q,_n1r,c), pQ[6] = (T)(img)(p,_n1q,_n1r,c), pQ[7] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } else for (int z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,z,c), pP[1] = (T)(img)(_n1x,y,z,c), pP[2] = (T)(img)(x,_n1y,z,c), pP[3] = (T)(img)(_n1x,_n1y,z,c), pP[4] = (T)(img)(x,y,_n1z,c), pP[5] = (T)(img)(_n1x,y,_n1z,c), pP[6] = (T)(img)(x,_n1y,_n1z,c), pP[7] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0, weight_max = 0; for (int r = (int)(z0)<0?0:(int)(z0), _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); ++r, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (p!=x || q!=y || r!=z) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,r,c), pQ[1] = (T)(img)(_n1p,q,r,c), pQ[2] = (T)(img)(p,_n1q,r,c), pQ[3] = (T)(img)(_n1p,_n1q,r,c), pQ[4] = (T)(img)(p,q,_n1r,c), pQ[5] = (T)(img)(_n1p,q,_n1r,c), pQ[6] = (T)(img)(p,_n1q,_n1r,c), pQ[7] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } break; > case 3 : if (is_fast_approx) for (int z = 0, _p1z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,_p1z,c), pP[1] = (T)(img)(x,_p1y,_p1z,c), pP[2] = (T)(img)(_n1x,_p1y,_p1z,c), pP[3] = (T)(img)(_p1x,y,_p1z,c), pP[4] = (T)(img)(x,y,_p1z,c), pP[5] = (T)(img)(_n1x,y,_p1z,c), pP[6] = (T)(img)(_p1x,_n1y,_p1z,c), pP[7] = (T)(img)(x,_n1y,_p1z,c), pP[8] = (T)(img)(_n1x,_n1y,_p1z,c), pP[9] = (T)(img)(_p1x,_p1y,z,c), pP[10] = (T)(img)(x,_p1y,z,c), pP[11] = (T)(img)(_n1x,_p1y,z,c), pP[12] = (T)(img)(_p1x,y,z,c), pP[13] = (T)(img)(x,y,z,c), pP[14] = (T)(img)(_n1x,y,z,c), pP[15] = (T)(img)(_p1x,_n1y,z,c), pP[16] = (T)(img)(x,_n1y,z,c), pP[17] = (T)(img)(_n1x,_n1y,z,c), pP[18] = (T)(img)(_p1x,_p1y,_n1z,c), pP[19] = (T)(img)(x,_p1y,_n1z,c), pP[20] = (T)(img)(_n1x,_p1y,_n1z,c), pP[21] = (T)(img)(_p1x,y,_n1z,c), pP[22] = (T)(img)(x,y,_n1z,c), pP[23] = (T)(img)(_n1x,y,_n1z,c), pP[24] = (T)(img)(_p1x,_n1y,_n1z,c), pP[25] = (T)(img)(x,_n1y,_n1z,c), pP[26] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0; for (int r = (int)(z0)<0?0:(int)(z0), _p1r = r-1<0?0:r-1, _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); _p1r = r++, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (cimg::abs(img(x,y,z,0) - img(p,q,r,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,_p1r,c), pQ[1] = (T)(img)(p,_p1q,_p1r,c), pQ[2] = (T)(img)(_n1p,_p1q,_p1r,c), pQ[3] = (T)(img)(_p1p,q,_p1r,c), pQ[4] = (T)(img)(p,q,_p1r,c), pQ[5] = (T)(img)(_n1p,q,_p1r,c), pQ[6] = (T)(img)(_p1p,_n1q,_p1r,c), pQ[7] = (T)(img)(p,_n1q,_p1r,c), pQ[8] = (T)(img)(_n1p,_n1q,_p1r,c), pQ[9] = (T)(img)(_p1p,_p1q,r,c), pQ[10] = (T)(img)(p,_p1q,r,c), pQ[11] = (T)(img)(_n1p,_p1q,r,c), pQ[12] = (T)(img)(_p1p,q,r,c), pQ[13] = (T)(img)(p,q,r,c), pQ[14] = (T)(img)(_n1p,q,r,c), pQ[15] = (T)(img)(_p1p,_n1q,r,c), pQ[16] = (T)(img)(p,_n1q,r,c), pQ[17] = (T)(img)(_n1p,_n1q,r,c), pQ[18] = (T)(img)(_p1p,_p1q,_n1r,c), pQ[19] = (T)(img)(p,_p1q,_n1r,c), pQ[20] = (T)(img)(_n1p,_p1q,_n1r,c), pQ[21] = (T)(img)(_p1p,q,_n1r,c), pQ[22] = (T)(img)(p,q,_n1r,c), pQ[23] = (T)(img)(_n1p,q,_n1r,c), pQ[24] = (T)(img)(_p1p,_n1q,_n1r,c), pQ[25] = (T)(img)(p,_n1q,_n1r,c), pQ[26] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } else for (int z = 0, _p1z = 0, _n1z = 1>=((res)._depth)?(int)((res)._depth)-1:1; _n1z<(int)((res)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,_p1z,c), pP[1] = (T)(img)(x,_p1y,_p1z,c), pP[2] = (T)(img)(_n1x,_p1y,_p1z,c), pP[3] = (T)(img)(_p1x,y,_p1z,c), pP[4] = (T)(img)(x,y,_p1z,c), pP[5] = (T)(img)(_n1x,y,_p1z,c), pP[6] = (T)(img)(_p1x,_n1y,_p1z,c), pP[7] = (T)(img)(x,_n1y,_p1z,c), pP[8] = (T)(img)(_n1x,_n1y,_p1z,c), pP[9] = (T)(img)(_p1x,_p1y,z,c), pP[10] = (T)(img)(x,_p1y,z,c), pP[11] = (T)(img)(_n1x,_p1y,z,c), pP[12] = (T)(img)(_p1x,y,z,c), pP[13] = (T)(img)(x,y,z,c), pP[14] = (T)(img)(_n1x,y,z,c), pP[15] = (T)(img)(_p1x,_n1y,z,c), pP[16] = (T)(img)(x,_n1y,z,c), pP[17] = (T)(img)(_n1x,_n1y,z,c), pP[18] = (T)(img)(_p1x,_p1y,_n1z,c), pP[19] = (T)(img)(x,_p1y,_n1z,c), pP[20] = (T)(img)(_n1x,_p1y,_n1z,c), pP[21] = (T)(img)(_p1x,y,_n1z,c), pP[22] = (T)(img)(x,y,_n1z,c), pP[23] = (T)(img)(_n1x,y,_n1z,c), pP[24] = (T)(img)(_p1x,_n1y,_n1z,c), pP[25] = (T)(img)(x,_n1y,_n1z,c), pP[26] = (T)(img)(_n1x,_n1y,_n1z,c); pP+=N3; } const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; float sum_weights = 0, weight_max = 0; for (int r = (int)(z0)<0?0:(int)(z0), _p1r = r-1<0?0:r-1, _n1r = r+1>=(int)((res)._depth)?(int)((res)._depth)-1:r+1; r<=(int)(z1) && (_n1r<(int)((res)._depth) || r==--_n1r); _p1r = r++, ++_n1r) for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (p!=x || q!=y || r!=z) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,_p1r,c), pQ[1] = (T)(img)(p,_p1q,_p1r,c), pQ[2] = (T)(img)(_n1p,_p1q,_p1r,c), pQ[3] = (T)(img)(_p1p,q,_p1r,c), pQ[4] = (T)(img)(p,q,_p1r,c), pQ[5] = (T)(img)(_n1p,q,_p1r,c), pQ[6] = (T)(img)(_p1p,_n1q,_p1r,c), pQ[7] = (T)(img)(p,_n1q,_p1r,c), pQ[8] = (T)(img)(_n1p,_n1q,_p1r,c), pQ[9] = (T)(img)(_p1p,_p1q,r,c), pQ[10] = (T)(img)(p,_p1q,r,c), pQ[11] = (T)(img)(_n1p,_p1q,r,c), pQ[12] = (T)(img)(_p1p,q,r,c), pQ[13] = (T)(img)(p,q,r,c), pQ[14] = (T)(img)(_n1p,q,r,c), pQ[15] = (T)(img)(_p1p,_n1q,r,c), pQ[16] = (T)(img)(p,_n1q,r,c), pQ[17] = (T)(img)(_n1p,_n1q,r,c), pQ[18] = (T)(img)(_p1p,_p1q,_n1r,c), pQ[19] = (T)(img)(p,_p1q,_n1r,c), pQ[20] = (T)(img)(_n1p,_p1q,_n1r,c), pQ[21] = (T)(img)(_p1p,q,_n1r,c), pQ[22] = (T)(img)(p,q,_n1r,c), pQ[23] = (T)(img)(_n1p,q,_n1r,c), pQ[24] = (T)(img)(_p1p,_n1q,_n1r,c), pQ[25] = (T)(img)(p,_n1q,_n1r,c), pQ[26] = (T)(img)(_n1p,_n1q,_n1r,c); pQ+=N3; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); } break; > default : { > const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; > if (is_fast_approx) > > ># 25455 "./CImg.h" >#pragma omp parallel for collapse(2) if (res._width>=32 && res._height*res._depth>=4) private(P,Q) ># 25455 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; > float sum_weights = 0; > for (int r = (int)(z0)<0?0:(int)(z0), _maxr = (int)(z1)<(int)((res)._depth)?(int)(z1):(int)((res)._depth)-1; r<=_maxr; ++r) for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (cimg::abs(img(x,y,z,0)-img(p,q,r,0))<sigma_p3) { > (Q = img.get_crop(p - psize1,q - psize1,r - psize1,p + psize2,q + psize2,r + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, dz = (float)z - r, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy + dz*dz)/sigma_s2), > weight = distance2>3?0.0f:1.0f; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); > } > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); > } else > > ># 25474 "./CImg.h" >#pragma omp parallel for collapse(2) if (res._width>=32 && res._height*res._depth>=4) firstprivate(P,Q) ># 25474 "./CImg.h" > > > for (int z = 0; z<(int)((res)._depth); ++z) for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; > float sum_weights = 0, weight_max = 0; > for (int r = (int)(z0)<0?0:(int)(z0), _maxr = (int)(z1)<(int)((res)._depth)?(int)(z1):(int)((res)._depth)-1; r<=_maxr; ++r) for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (p!=x || q!=y || r!=z) { > (Q = img.get_crop(p - psize1,q - psize1,r - psize1,p + psize2,q + psize2,r + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, dz = (float)z - r, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy + dz*dz)/sigma_s2), > weight = (float)std::exp(-distance2); > if (weight>weight_max) weight_max = weight; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); > } > sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); > } > } > } else switch (patch_size) { > case 2 : if (is_fast_approx) for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,0,c), pP[1] = (T)(img)(_n1x,y,0,c), pP[2] = (T)(img)(x,_n1y,0,c), pP[3] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,0,c), pQ[1] = (T)(img)(_n1p,q,0,c), pQ[2] = (T)(img)(p,_n1q,0,c), pQ[3] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; ++x, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(x,y,0,c), pP[1] = (T)(img)(_n1x,y,0,c), pP[2] = (T)(img)(x,_n1y,0,c), pP[3] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); ++q, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); ++p, ++_n1p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(p,q,0,c), pQ[1] = (T)(img)(_n1p,q,0,c), pQ[2] = (T)(img)(p,_n1q,0,c), pQ[3] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 3 : if (is_fast_approx) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_p1x,y,0,c), pP[4] = (T)(img)(x,y,0,c), pP[5] = (T)(img)(_n1x,y,0,c), pP[6] = (T)(img)(_p1x,_n1y,0,c), pP[7] = (T)(img)(x,_n1y,0,c), pP[8] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_p1p,q,0,c), pQ[4] = (T)(img)(p,q,0,c), pQ[5] = (T)(img)(_n1p,q,0,c), pQ[6] = (T)(img)(_p1p,_n1q,0,c), pQ[7] = (T)(img)(p,_n1q,0,c), pQ[8] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1; _n1y<(int)((res)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1; _n1x<(int)((res)._width) || x==--_n1x; _p1x = x++, ++_n1x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_p1x,y,0,c), pP[4] = (T)(img)(x,y,0,c), pP[5] = (T)(img)(_n1x,y,0,c), pP[6] = (T)(img)(_p1x,_n1y,0,c), pP[7] = (T)(img)(x,_n1y,0,c), pP[8] = (T)(img)(_n1x,_n1y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1; q<=(int)(y1) && (_n1q<(int)((res)._height) || q==--_n1q); _p1q = q++, ++_n1q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1; p<=(int)(x1) && (_n1p<(int)((res)._width) || p==--_n1p); _p1p = p++, ++_n1p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_p1p,q,0,c), pQ[4] = (T)(img)(p,q,0,c), pQ[5] = (T)(img)(_n1p,q,0,c), pQ[6] = (T)(img)(_p1p,_n1q,0,c), pQ[7] = (T)(img)(p,_n1q,0,c), pQ[8] = (T)(img)(_n1p,_n1q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 4 : if (is_fast_approx) for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_n2x,_p1y,0,c), pP[4] = (T)(img)(_p1x,y,0,c), pP[5] = (T)(img)(x,y,0,c), pP[6] = (T)(img)(_n1x,y,0,c), pP[7] = (T)(img)(_n2x,y,0,c), pP[8] = (T)(img)(_p1x,_n1y,0,c), pP[9] = (T)(img)(x,_n1y,0,c), pP[10] = (T)(img)(_n1x,_n1y,0,c), pP[11] = (T)(img)(_n2x,_n1y,0,c), pP[12] = (T)(img)(_p1x,_n2y,0,c), pP[13] = (T)(img)(x,_n2y,0,c), pP[14] = (T)(img)(_n1x,_n2y,0,c), pP[15] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p1p = p++, ++_n1p, ++_n2p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_n2p,_p1q,0,c), pQ[4] = (T)(img)(_p1p,q,0,c), pQ[5] = (T)(img)(p,q,0,c), pQ[6] = (T)(img)(_n1p,q,0,c), pQ[7] = (T)(img)(_n2p,q,0,c), pQ[8] = (T)(img)(_p1p,_n1q,0,c), pQ[9] = (T)(img)(p,_n1q,0,c), pQ[10] = (T)(img)(_n1p,_n1q,0,c), pQ[11] = (T)(img)(_n2p,_n1q,0,c), pQ[12] = (T)(img)(_p1p,_n2q,0,c), pQ[13] = (T)(img)(p,_n2q,0,c), pQ[14] = (T)(img)(_n1p,_n2q,0,c), pQ[15] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p1x,_p1y,0,c), pP[1] = (T)(img)(x,_p1y,0,c), pP[2] = (T)(img)(_n1x,_p1y,0,c), pP[3] = (T)(img)(_n2x,_p1y,0,c), pP[4] = (T)(img)(_p1x,y,0,c), pP[5] = (T)(img)(x,y,0,c), pP[6] = (T)(img)(_n1x,y,0,c), pP[7] = (T)(img)(_n2x,y,0,c), pP[8] = (T)(img)(_p1x,_n1y,0,c), pP[9] = (T)(img)(x,_n1y,0,c), pP[10] = (T)(img)(_n1x,_n1y,0,c), pP[11] = (T)(img)(_n2x,_n1y,0,c), pP[12] = (T)(img)(_p1x,_n2y,0,c), pP[13] = (T)(img)(x,_n2y,0,c), pP[14] = (T)(img)(_n1x,_n2y,0,c), pP[15] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p1p = p++, ++_n1p, ++_n2p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p1p,_p1q,0,c), pQ[1] = (T)(img)(p,_p1q,0,c), pQ[2] = (T)(img)(_n1p,_p1q,0,c), pQ[3] = (T)(img)(_n2p,_p1q,0,c), pQ[4] = (T)(img)(_p1p,q,0,c), pQ[5] = (T)(img)(p,q,0,c), pQ[6] = (T)(img)(_n1p,q,0,c), pQ[7] = (T)(img)(_n2p,q,0,c), pQ[8] = (T)(img)(_p1p,_n1q,0,c), pQ[9] = (T)(img)(p,_n1q,0,c), pQ[10] = (T)(img)(_n1p,_n1q,0,c), pQ[11] = (T)(img)(_n2p,_n1q,0,c), pQ[12] = (T)(img)(_p1p,_n2q,0,c), pQ[13] = (T)(img)(p,_n2q,0,c), pQ[14] = (T)(img)(_n1p,_n2q,0,c), pQ[15] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 5 : if (is_fast_approx) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_p2x,_p1y,0,c), pP[6] = (T)(img)(_p1x,_p1y,0,c), pP[7] = (T)(img)(x,_p1y,0,c), pP[8] = (T)(img)(_n1x,_p1y,0,c), pP[9] = (T)(img)(_n2x,_p1y,0,c), pP[10] = (T)(img)(_p2x,y,0,c), pP[11] = (T)(img)(_p1x,y,0,c), pP[12] = (T)(img)(x,y,0,c), pP[13] = (T)(img)(_n1x,y,0,c), pP[14] = (T)(img)(_n2x,y,0,c), pP[15] = (T)(img)(_p2x,_n1y,0,c), pP[16] = (T)(img)(_p1x,_n1y,0,c), pP[17] = (T)(img)(x,_n1y,0,c), pP[18] = (T)(img)(_n1x,_n1y,0,c), pP[19] = (T)(img)(_n2x,_n1y,0,c), pP[20] = (T)(img)(_p2x,_n2y,0,c), pP[21] = (T)(img)(_p1x,_n2y,0,c), pP[22] = (T)(img)(x,_n2y,0,c), pP[23] = (T)(img)(_n1x,_n2y,0,c), pP[24] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_p2p,_p1q,0,c), pQ[6] = (T)(img)(_p1p,_p1q,0,c), pQ[7] = (T)(img)(p,_p1q,0,c), pQ[8] = (T)(img)(_n1p,_p1q,0,c), pQ[9] = (T)(img)(_n2p,_p1q,0,c), pQ[10] = (T)(img)(_p2p,q,0,c), pQ[11] = (T)(img)(_p1p,q,0,c), pQ[12] = (T)(img)(p,q,0,c), pQ[13] = (T)(img)(_n1p,q,0,c), pQ[14] = (T)(img)(_n2p,q,0,c), pQ[15] = (T)(img)(_p2p,_n1q,0,c), pQ[16] = (T)(img)(_p1p,_n1q,0,c), pQ[17] = (T)(img)(p,_n1q,0,c), pQ[18] = (T)(img)(_n1p,_n1q,0,c), pQ[19] = (T)(img)(_n2p,_n1q,0,c), pQ[20] = (T)(img)(_p2p,_n2q,0,c), pQ[21] = (T)(img)(_p1p,_n2q,0,c), pQ[22] = (T)(img)(p,_n2q,0,c), pQ[23] = (T)(img)(_n1p,_n2q,0,c), pQ[24] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2; _n2y<(int)((res)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2; _n2x<(int)((res)._width) || _n1x==--_n2x || x==(_n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_p2x,_p1y,0,c), pP[6] = (T)(img)(_p1x,_p1y,0,c), pP[7] = (T)(img)(x,_p1y,0,c), pP[8] = (T)(img)(_n1x,_p1y,0,c), pP[9] = (T)(img)(_n2x,_p1y,0,c), pP[10] = (T)(img)(_p2x,y,0,c), pP[11] = (T)(img)(_p1x,y,0,c), pP[12] = (T)(img)(x,y,0,c), pP[13] = (T)(img)(_n1x,y,0,c), pP[14] = (T)(img)(_n2x,y,0,c), pP[15] = (T)(img)(_p2x,_n1y,0,c), pP[16] = (T)(img)(_p1x,_n1y,0,c), pP[17] = (T)(img)(x,_n1y,0,c), pP[18] = (T)(img)(_n1x,_n1y,0,c), pP[19] = (T)(img)(_n2x,_n1y,0,c), pP[20] = (T)(img)(_p2x,_n2y,0,c), pP[21] = (T)(img)(_p1x,_n2y,0,c), pP[22] = (T)(img)(x,_n2y,0,c), pP[23] = (T)(img)(_n1x,_n2y,0,c), pP[24] = (T)(img)(_n2x,_n2y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2; q<=(int)(y1) && (_n2q<(int)((res)._height) || _n1q==--_n2q || q==(_n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2; p<=(int)(x1) && (_n2p<(int)((res)._width) || _n1p==--_n2p || p==(_n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_p2p,_p1q,0,c), pQ[6] = (T)(img)(_p1p,_p1q,0,c), pQ[7] = (T)(img)(p,_p1q,0,c), pQ[8] = (T)(img)(_n1p,_p1q,0,c), pQ[9] = (T)(img)(_n2p,_p1q,0,c), pQ[10] = (T)(img)(_p2p,q,0,c), pQ[11] = (T)(img)(_p1p,q,0,c), pQ[12] = (T)(img)(p,q,0,c), pQ[13] = (T)(img)(_n1p,q,0,c), pQ[14] = (T)(img)(_n2p,q,0,c), pQ[15] = (T)(img)(_p2p,_n1q,0,c), pQ[16] = (T)(img)(_p1p,_n1q,0,c), pQ[17] = (T)(img)(p,_n1q,0,c), pQ[18] = (T)(img)(_n1p,_n1q,0,c), pQ[19] = (T)(img)(_n2p,_n1q,0,c), pQ[20] = (T)(img)(_p2p,_n2q,0,c), pQ[21] = (T)(img)(_p1p,_n2q,0,c), pQ[22] = (T)(img)(p,_n2q,0,c), pQ[23] = (T)(img)(_n1p,_n2q,0,c), pQ[24] = (T)(img)(_n2p,_n2q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 6 : if (is_fast_approx) for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_n3x,_p2y,0,c), pP[6] = (T)(img)(_p2x,_p1y,0,c), pP[7] = (T)(img)(_p1x,_p1y,0,c), pP[8] = (T)(img)(x,_p1y,0,c), pP[9] = (T)(img)(_n1x,_p1y,0,c), pP[10] = (T)(img)(_n2x,_p1y,0,c), pP[11] = (T)(img)(_n3x,_p1y,0,c), pP[12] = (T)(img)(_p2x,y,0,c), pP[13] = (T)(img)(_p1x,y,0,c), pP[14] = (T)(img)(x,y,0,c), pP[15] = (T)(img)(_n1x,y,0,c), pP[16] = (T)(img)(_n2x,y,0,c), pP[17] = (T)(img)(_n3x,y,0,c), pP[18] = (T)(img)(_p2x,_n1y,0,c), pP[19] = (T)(img)(_p1x,_n1y,0,c), pP[20] = (T)(img)(x,_n1y,0,c), pP[21] = (T)(img)(_n1x,_n1y,0,c), pP[22] = (T)(img)(_n2x,_n1y,0,c), pP[23] = (T)(img)(_n3x,_n1y,0,c), pP[24] = (T)(img)(_p2x,_n2y,0,c), pP[25] = (T)(img)(_p1x,_n2y,0,c), pP[26] = (T)(img)(x,_n2y,0,c), pP[27] = (T)(img)(_n1x,_n2y,0,c), pP[28] = (T)(img)(_n2x,_n2y,0,c), pP[29] = (T)(img)(_n3x,_n2y,0,c), pP[30] = (T)(img)(_p2x,_n3y,0,c), pP[31] = (T)(img)(_p1x,_n3y,0,c), pP[32] = (T)(img)(x,_n3y,0,c), pP[33] = (T)(img)(_n1x,_n3y,0,c), pP[34] = (T)(img)(_n2x,_n3y,0,c), pP[35] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_n3p,_p2q,0,c), pQ[6] = (T)(img)(_p2p,_p1q,0,c), pQ[7] = (T)(img)(_p1p,_p1q,0,c), pQ[8] = (T)(img)(p,_p1q,0,c), pQ[9] = (T)(img)(_n1p,_p1q,0,c), pQ[10] = (T)(img)(_n2p,_p1q,0,c), pQ[11] = (T)(img)(_n3p,_p1q,0,c), pQ[12] = (T)(img)(_p2p,q,0,c), pQ[13] = (T)(img)(_p1p,q,0,c), pQ[14] = (T)(img)(p,q,0,c), pQ[15] = (T)(img)(_n1p,q,0,c), pQ[16] = (T)(img)(_n2p,q,0,c), pQ[17] = (T)(img)(_n3p,q,0,c), pQ[18] = (T)(img)(_p2p,_n1q,0,c), pQ[19] = (T)(img)(_p1p,_n1q,0,c), pQ[20] = (T)(img)(p,_n1q,0,c), pQ[21] = (T)(img)(_n1p,_n1q,0,c), pQ[22] = (T)(img)(_n2p,_n1q,0,c), pQ[23] = (T)(img)(_n3p,_n1q,0,c), pQ[24] = (T)(img)(_p2p,_n2q,0,c), pQ[25] = (T)(img)(_p1p,_n2q,0,c), pQ[26] = (T)(img)(p,_n2q,0,c), pQ[27] = (T)(img)(_n1p,_n2q,0,c), pQ[28] = (T)(img)(_n2p,_n2q,0,c), pQ[29] = (T)(img)(_n3p,_n2q,0,c), pQ[30] = (T)(img)(_p2p,_n3q,0,c), pQ[31] = (T)(img)(_p1p,_n3q,0,c), pQ[32] = (T)(img)(p,_n3q,0,c), pQ[33] = (T)(img)(_n1p,_n3q,0,c), pQ[34] = (T)(img)(_n2p,_n3q,0,c), pQ[35] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p2x,_p2y,0,c), pP[1] = (T)(img)(_p1x,_p2y,0,c), pP[2] = (T)(img)(x,_p2y,0,c), pP[3] = (T)(img)(_n1x,_p2y,0,c), pP[4] = (T)(img)(_n2x,_p2y,0,c), pP[5] = (T)(img)(_n3x,_p2y,0,c), pP[6] = (T)(img)(_p2x,_p1y,0,c), pP[7] = (T)(img)(_p1x,_p1y,0,c), pP[8] = (T)(img)(x,_p1y,0,c), pP[9] = (T)(img)(_n1x,_p1y,0,c), pP[10] = (T)(img)(_n2x,_p1y,0,c), pP[11] = (T)(img)(_n3x,_p1y,0,c), pP[12] = (T)(img)(_p2x,y,0,c), pP[13] = (T)(img)(_p1x,y,0,c), pP[14] = (T)(img)(x,y,0,c), pP[15] = (T)(img)(_n1x,y,0,c), pP[16] = (T)(img)(_n2x,y,0,c), pP[17] = (T)(img)(_n3x,y,0,c), pP[18] = (T)(img)(_p2x,_n1y,0,c), pP[19] = (T)(img)(_p1x,_n1y,0,c), pP[20] = (T)(img)(x,_n1y,0,c), pP[21] = (T)(img)(_n1x,_n1y,0,c), pP[22] = (T)(img)(_n2x,_n1y,0,c), pP[23] = (T)(img)(_n3x,_n1y,0,c), pP[24] = (T)(img)(_p2x,_n2y,0,c), pP[25] = (T)(img)(_p1x,_n2y,0,c), pP[26] = (T)(img)(x,_n2y,0,c), pP[27] = (T)(img)(_n1x,_n2y,0,c), pP[28] = (T)(img)(_n2x,_n2y,0,c), pP[29] = (T)(img)(_n3x,_n2y,0,c), pP[30] = (T)(img)(_p2x,_n3y,0,c), pP[31] = (T)(img)(_p1x,_n3y,0,c), pP[32] = (T)(img)(x,_n3y,0,c), pP[33] = (T)(img)(_n1x,_n3y,0,c), pP[34] = (T)(img)(_n2x,_n3y,0,c), pP[35] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p2p,_p2q,0,c), pQ[1] = (T)(img)(_p1p,_p2q,0,c), pQ[2] = (T)(img)(p,_p2q,0,c), pQ[3] = (T)(img)(_n1p,_p2q,0,c), pQ[4] = (T)(img)(_n2p,_p2q,0,c), pQ[5] = (T)(img)(_n3p,_p2q,0,c), pQ[6] = (T)(img)(_p2p,_p1q,0,c), pQ[7] = (T)(img)(_p1p,_p1q,0,c), pQ[8] = (T)(img)(p,_p1q,0,c), pQ[9] = (T)(img)(_n1p,_p1q,0,c), pQ[10] = (T)(img)(_n2p,_p1q,0,c), pQ[11] = (T)(img)(_n3p,_p1q,0,c), pQ[12] = (T)(img)(_p2p,q,0,c), pQ[13] = (T)(img)(_p1p,q,0,c), pQ[14] = (T)(img)(p,q,0,c), pQ[15] = (T)(img)(_n1p,q,0,c), pQ[16] = (T)(img)(_n2p,q,0,c), pQ[17] = (T)(img)(_n3p,q,0,c), pQ[18] = (T)(img)(_p2p,_n1q,0,c), pQ[19] = (T)(img)(_p1p,_n1q,0,c), pQ[20] = (T)(img)(p,_n1q,0,c), pQ[21] = (T)(img)(_n1p,_n1q,0,c), pQ[22] = (T)(img)(_n2p,_n1q,0,c), pQ[23] = (T)(img)(_n3p,_n1q,0,c), pQ[24] = (T)(img)(_p2p,_n2q,0,c), pQ[25] = (T)(img)(_p1p,_n2q,0,c), pQ[26] = (T)(img)(p,_n2q,0,c), pQ[27] = (T)(img)(_n1p,_n2q,0,c), pQ[28] = (T)(img)(_n2p,_n2q,0,c), pQ[29] = (T)(img)(_n3p,_n2q,0,c), pQ[30] = (T)(img)(_p2p,_n3q,0,c), pQ[31] = (T)(img)(_p1p,_n3q,0,c), pQ[32] = (T)(img)(p,_n3q,0,c), pQ[33] = (T)(img)(_n1p,_n3q,0,c), pQ[34] = (T)(img)(_n2p,_n3q,0,c), pQ[35] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 7 : if (is_fast_approx) for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_p3x,_p2y,0,c), pP[8] = (T)(img)(_p2x,_p2y,0,c), pP[9] = (T)(img)(_p1x,_p2y,0,c), pP[10] = (T)(img)(x,_p2y,0,c), pP[11] = (T)(img)(_n1x,_p2y,0,c), pP[12] = (T)(img)(_n2x,_p2y,0,c), pP[13] = (T)(img)(_n3x,_p2y,0,c), pP[14] = (T)(img)(_p3x,_p1y,0,c), pP[15] = (T)(img)(_p2x,_p1y,0,c), pP[16] = (T)(img)(_p1x,_p1y,0,c), pP[17] = (T)(img)(x,_p1y,0,c), pP[18] = (T)(img)(_n1x,_p1y,0,c), pP[19] = (T)(img)(_n2x,_p1y,0,c), pP[20] = (T)(img)(_n3x,_p1y,0,c), pP[21] = (T)(img)(_p3x,y,0,c), pP[22] = (T)(img)(_p2x,y,0,c), pP[23] = (T)(img)(_p1x,y,0,c), pP[24] = (T)(img)(x,y,0,c), pP[25] = (T)(img)(_n1x,y,0,c), pP[26] = (T)(img)(_n2x,y,0,c), pP[27] = (T)(img)(_n3x,y,0,c), pP[28] = (T)(img)(_p3x,_n1y,0,c), pP[29] = (T)(img)(_p2x,_n1y,0,c), pP[30] = (T)(img)(_p1x,_n1y,0,c), pP[31] = (T)(img)(x,_n1y,0,c), pP[32] = (T)(img)(_n1x,_n1y,0,c), pP[33] = (T)(img)(_n2x,_n1y,0,c), pP[34] = (T)(img)(_n3x,_n1y,0,c), pP[35] = (T)(img)(_p3x,_n2y,0,c), pP[36] = (T)(img)(_p2x,_n2y,0,c), pP[37] = (T)(img)(_p1x,_n2y,0,c), pP[38] = (T)(img)(x,_n2y,0,c), pP[39] = (T)(img)(_n1x,_n2y,0,c), pP[40] = (T)(img)(_n2x,_n2y,0,c), pP[41] = (T)(img)(_n3x,_n2y,0,c), pP[42] = (T)(img)(_p3x,_n3y,0,c), pP[43] = (T)(img)(_p2x,_n3y,0,c), pP[44] = (T)(img)(_p1x,_n3y,0,c), pP[45] = (T)(img)(x,_n3y,0,c), pP[46] = (T)(img)(_n1x,_n3y,0,c), pP[47] = (T)(img)(_n2x,_n3y,0,c), pP[48] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_p3p,_p2q,0,c), pQ[8] = (T)(img)(_p2p,_p2q,0,c), pQ[9] = (T)(img)(_p1p,_p2q,0,c), pQ[10] = (T)(img)(p,_p2q,0,c), pQ[11] = (T)(img)(_n1p,_p2q,0,c), pQ[12] = (T)(img)(_n2p,_p2q,0,c), pQ[13] = (T)(img)(_n3p,_p2q,0,c), pQ[14] = (T)(img)(_p3p,_p1q,0,c), pQ[15] = (T)(img)(_p2p,_p1q,0,c), pQ[16] = (T)(img)(_p1p,_p1q,0,c), pQ[17] = (T)(img)(p,_p1q,0,c), pQ[18] = (T)(img)(_n1p,_p1q,0,c), pQ[19] = (T)(img)(_n2p,_p1q,0,c), pQ[20] = (T)(img)(_n3p,_p1q,0,c), pQ[21] = (T)(img)(_p3p,q,0,c), pQ[22] = (T)(img)(_p2p,q,0,c), pQ[23] = (T)(img)(_p1p,q,0,c), pQ[24] = (T)(img)(p,q,0,c), pQ[25] = (T)(img)(_n1p,q,0,c), pQ[26] = (T)(img)(_n2p,q,0,c), pQ[27] = (T)(img)(_n3p,q,0,c), pQ[28] = (T)(img)(_p3p,_n1q,0,c), pQ[29] = (T)(img)(_p2p,_n1q,0,c), pQ[30] = (T)(img)(_p1p,_n1q,0,c), pQ[31] = (T)(img)(p,_n1q,0,c), pQ[32] = (T)(img)(_n1p,_n1q,0,c), pQ[33] = (T)(img)(_n2p,_n1q,0,c), pQ[34] = (T)(img)(_n3p,_n1q,0,c), pQ[35] = (T)(img)(_p3p,_n2q,0,c), pQ[36] = (T)(img)(_p2p,_n2q,0,c), pQ[37] = (T)(img)(_p1p,_n2q,0,c), pQ[38] = (T)(img)(p,_n2q,0,c), pQ[39] = (T)(img)(_n1p,_n2q,0,c), pQ[40] = (T)(img)(_n2p,_n2q,0,c), pQ[41] = (T)(img)(_n3p,_n2q,0,c), pQ[42] = (T)(img)(_p3p,_n3q,0,c), pQ[43] = (T)(img)(_p2p,_n3q,0,c), pQ[44] = (T)(img)(_p1p,_n3q,0,c), pQ[45] = (T)(img)(p,_n3q,0,c), pQ[46] = (T)(img)(_n1p,_n3q,0,c), pQ[47] = (T)(img)(_n2p,_n3q,0,c), pQ[48] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3; _n3y<(int)((res)._height) || _n2y==--_n3y || _n1y==--_n2y || y==(_n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3; _n3x<(int)((res)._width) || _n2x==--_n3x || _n1x==--_n2x || x==(_n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_p3x,_p2y,0,c), pP[8] = (T)(img)(_p2x,_p2y,0,c), pP[9] = (T)(img)(_p1x,_p2y,0,c), pP[10] = (T)(img)(x,_p2y,0,c), pP[11] = (T)(img)(_n1x,_p2y,0,c), pP[12] = (T)(img)(_n2x,_p2y,0,c), pP[13] = (T)(img)(_n3x,_p2y,0,c), pP[14] = (T)(img)(_p3x,_p1y,0,c), pP[15] = (T)(img)(_p2x,_p1y,0,c), pP[16] = (T)(img)(_p1x,_p1y,0,c), pP[17] = (T)(img)(x,_p1y,0,c), pP[18] = (T)(img)(_n1x,_p1y,0,c), pP[19] = (T)(img)(_n2x,_p1y,0,c), pP[20] = (T)(img)(_n3x,_p1y,0,c), pP[21] = (T)(img)(_p3x,y,0,c), pP[22] = (T)(img)(_p2x,y,0,c), pP[23] = (T)(img)(_p1x,y,0,c), pP[24] = (T)(img)(x,y,0,c), pP[25] = (T)(img)(_n1x,y,0,c), pP[26] = (T)(img)(_n2x,y,0,c), pP[27] = (T)(img)(_n3x,y,0,c), pP[28] = (T)(img)(_p3x,_n1y,0,c), pP[29] = (T)(img)(_p2x,_n1y,0,c), pP[30] = (T)(img)(_p1x,_n1y,0,c), pP[31] = (T)(img)(x,_n1y,0,c), pP[32] = (T)(img)(_n1x,_n1y,0,c), pP[33] = (T)(img)(_n2x,_n1y,0,c), pP[34] = (T)(img)(_n3x,_n1y,0,c), pP[35] = (T)(img)(_p3x,_n2y,0,c), pP[36] = (T)(img)(_p2x,_n2y,0,c), pP[37] = (T)(img)(_p1x,_n2y,0,c), pP[38] = (T)(img)(x,_n2y,0,c), pP[39] = (T)(img)(_n1x,_n2y,0,c), pP[40] = (T)(img)(_n2x,_n2y,0,c), pP[41] = (T)(img)(_n3x,_n2y,0,c), pP[42] = (T)(img)(_p3x,_n3y,0,c), pP[43] = (T)(img)(_p2x,_n3y,0,c), pP[44] = (T)(img)(_p1x,_n3y,0,c), pP[45] = (T)(img)(x,_n3y,0,c), pP[46] = (T)(img)(_n1x,_n3y,0,c), pP[47] = (T)(img)(_n2x,_n3y,0,c), pP[48] = (T)(img)(_n3x,_n3y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3; q<=(int)(y1) && (_n3q<(int)((res)._height) || _n2q==--_n3q || _n1q==--_n2q || q==(_n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3; p<=(int)(x1) && (_n3p<(int)((res)._width) || _n2p==--_n3p || _n1p==--_n2p || p==(_n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_p3p,_p2q,0,c), pQ[8] = (T)(img)(_p2p,_p2q,0,c), pQ[9] = (T)(img)(_p1p,_p2q,0,c), pQ[10] = (T)(img)(p,_p2q,0,c), pQ[11] = (T)(img)(_n1p,_p2q,0,c), pQ[12] = (T)(img)(_n2p,_p2q,0,c), pQ[13] = (T)(img)(_n3p,_p2q,0,c), pQ[14] = (T)(img)(_p3p,_p1q,0,c), pQ[15] = (T)(img)(_p2p,_p1q,0,c), pQ[16] = (T)(img)(_p1p,_p1q,0,c), pQ[17] = (T)(img)(p,_p1q,0,c), pQ[18] = (T)(img)(_n1p,_p1q,0,c), pQ[19] = (T)(img)(_n2p,_p1q,0,c), pQ[20] = (T)(img)(_n3p,_p1q,0,c), pQ[21] = (T)(img)(_p3p,q,0,c), pQ[22] = (T)(img)(_p2p,q,0,c), pQ[23] = (T)(img)(_p1p,q,0,c), pQ[24] = (T)(img)(p,q,0,c), pQ[25] = (T)(img)(_n1p,q,0,c), pQ[26] = (T)(img)(_n2p,q,0,c), pQ[27] = (T)(img)(_n3p,q,0,c), pQ[28] = (T)(img)(_p3p,_n1q,0,c), pQ[29] = (T)(img)(_p2p,_n1q,0,c), pQ[30] = (T)(img)(_p1p,_n1q,0,c), pQ[31] = (T)(img)(p,_n1q,0,c), pQ[32] = (T)(img)(_n1p,_n1q,0,c), pQ[33] = (T)(img)(_n2p,_n1q,0,c), pQ[34] = (T)(img)(_n3p,_n1q,0,c), pQ[35] = (T)(img)(_p3p,_n2q,0,c), pQ[36] = (T)(img)(_p2p,_n2q,0,c), pQ[37] = (T)(img)(_p1p,_n2q,0,c), pQ[38] = (T)(img)(p,_n2q,0,c), pQ[39] = (T)(img)(_n1p,_n2q,0,c), pQ[40] = (T)(img)(_n2p,_n2q,0,c), pQ[41] = (T)(img)(_n3p,_n2q,0,c), pQ[42] = (T)(img)(_p3p,_n3q,0,c), pQ[43] = (T)(img)(_p2p,_n3q,0,c), pQ[44] = (T)(img)(_p1p,_n3q,0,c), pQ[45] = (T)(img)(p,_n3q,0,c), pQ[46] = (T)(img)(_n1p,_n3q,0,c), pQ[47] = (T)(img)(_n2p,_n3q,0,c), pQ[48] = (T)(img)(_n3p,_n3q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 8 : if (is_fast_approx) for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_n4x,_p3y,0,c), pP[8] = (T)(img)(_p3x,_p2y,0,c), pP[9] = (T)(img)(_p2x,_p2y,0,c), pP[10] = (T)(img)(_p1x,_p2y,0,c), pP[11] = (T)(img)(x,_p2y,0,c), pP[12] = (T)(img)(_n1x,_p2y,0,c), pP[13] = (T)(img)(_n2x,_p2y,0,c), pP[14] = (T)(img)(_n3x,_p2y,0,c), pP[15] = (T)(img)(_n4x,_p2y,0,c), pP[16] = (T)(img)(_p3x,_p1y,0,c), pP[17] = (T)(img)(_p2x,_p1y,0,c), pP[18] = (T)(img)(_p1x,_p1y,0,c), pP[19] = (T)(img)(x,_p1y,0,c), pP[20] = (T)(img)(_n1x,_p1y,0,c), pP[21] = (T)(img)(_n2x,_p1y,0,c), pP[22] = (T)(img)(_n3x,_p1y,0,c), pP[23] = (T)(img)(_n4x,_p1y,0,c), pP[24] = (T)(img)(_p3x,y,0,c), pP[25] = (T)(img)(_p2x,y,0,c), pP[26] = (T)(img)(_p1x,y,0,c), pP[27] = (T)(img)(x,y,0,c), pP[28] = (T)(img)(_n1x,y,0,c), pP[29] = (T)(img)(_n2x,y,0,c), pP[30] = (T)(img)(_n3x,y,0,c), pP[31] = (T)(img)(_n4x,y,0,c), pP[32] = (T)(img)(_p3x,_n1y,0,c), pP[33] = (T)(img)(_p2x,_n1y,0,c), pP[34] = (T)(img)(_p1x,_n1y,0,c), pP[35] = (T)(img)(x,_n1y,0,c), pP[36] = (T)(img)(_n1x,_n1y,0,c), pP[37] = (T)(img)(_n2x,_n1y,0,c), pP[38] = (T)(img)(_n3x,_n1y,0,c), pP[39] = (T)(img)(_n4x,_n1y,0,c), pP[40] = (T)(img)(_p3x,_n2y,0,c), pP[41] = (T)(img)(_p2x,_n2y,0,c), pP[42] = (T)(img)(_p1x,_n2y,0,c), pP[43] = (T)(img)(x,_n2y,0,c), pP[44] = (T)(img)(_n1x,_n2y,0,c), pP[45] = (T)(img)(_n2x,_n2y,0,c), pP[46] = (T)(img)(_n3x,_n2y,0,c), pP[47] = (T)(img)(_n4x,_n2y,0,c), pP[48] = (T)(img)(_p3x,_n3y,0,c), pP[49] = (T)(img)(_p2x,_n3y,0,c), pP[50] = (T)(img)(_p1x,_n3y,0,c), pP[51] = (T)(img)(x,_n3y,0,c), pP[52] = (T)(img)(_n1x,_n3y,0,c), pP[53] = (T)(img)(_n2x,_n3y,0,c), pP[54] = (T)(img)(_n3x,_n3y,0,c), pP[55] = (T)(img)(_n4x,_n3y,0,c), pP[56] = (T)(img)(_p3x,_n4y,0,c), pP[57] = (T)(img)(_p2x,_n4y,0,c), pP[58] = (T)(img)(_p1x,_n4y,0,c), pP[59] = (T)(img)(x,_n4y,0,c), pP[60] = (T)(img)(_n1x,_n4y,0,c), pP[61] = (T)(img)(_n2x,_n4y,0,c), pP[62] = (T)(img)(_n3x,_n4y,0,c), pP[63] = (T)(img)(_n4x,_n4y,0,c);; pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_n4p,_p3q,0,c), pQ[8] = (T)(img)(_p3p,_p2q,0,c), pQ[9] = (T)(img)(_p2p,_p2q,0,c), pQ[10] = (T)(img)(_p1p,_p2q,0,c), pQ[11] = (T)(img)(p,_p2q,0,c), pQ[12] = (T)(img)(_n1p,_p2q,0,c), pQ[13] = (T)(img)(_n2p,_p2q,0,c), pQ[14] = (T)(img)(_n3p,_p2q,0,c), pQ[15] = (T)(img)(_n4p,_p2q,0,c), pQ[16] = (T)(img)(_p3p,_p1q,0,c), pQ[17] = (T)(img)(_p2p,_p1q,0,c), pQ[18] = (T)(img)(_p1p,_p1q,0,c), pQ[19] = (T)(img)(p,_p1q,0,c), pQ[20] = (T)(img)(_n1p,_p1q,0,c), pQ[21] = (T)(img)(_n2p,_p1q,0,c), pQ[22] = (T)(img)(_n3p,_p1q,0,c), pQ[23] = (T)(img)(_n4p,_p1q,0,c), pQ[24] = (T)(img)(_p3p,q,0,c), pQ[25] = (T)(img)(_p2p,q,0,c), pQ[26] = (T)(img)(_p1p,q,0,c), pQ[27] = (T)(img)(p,q,0,c), pQ[28] = (T)(img)(_n1p,q,0,c), pQ[29] = (T)(img)(_n2p,q,0,c), pQ[30] = (T)(img)(_n3p,q,0,c), pQ[31] = (T)(img)(_n4p,q,0,c), pQ[32] = (T)(img)(_p3p,_n1q,0,c), pQ[33] = (T)(img)(_p2p,_n1q,0,c), pQ[34] = (T)(img)(_p1p,_n1q,0,c), pQ[35] = (T)(img)(p,_n1q,0,c), pQ[36] = (T)(img)(_n1p,_n1q,0,c), pQ[37] = (T)(img)(_n2p,_n1q,0,c), pQ[38] = (T)(img)(_n3p,_n1q,0,c), pQ[39] = (T)(img)(_n4p,_n1q,0,c), pQ[40] = (T)(img)(_p3p,_n2q,0,c), pQ[41] = (T)(img)(_p2p,_n2q,0,c), pQ[42] = (T)(img)(_p1p,_n2q,0,c), pQ[43] = (T)(img)(p,_n2q,0,c), pQ[44] = (T)(img)(_n1p,_n2q,0,c), pQ[45] = (T)(img)(_n2p,_n2q,0,c), pQ[46] = (T)(img)(_n3p,_n2q,0,c), pQ[47] = (T)(img)(_n4p,_n2q,0,c), pQ[48] = (T)(img)(_p3p,_n3q,0,c), pQ[49] = (T)(img)(_p2p,_n3q,0,c), pQ[50] = (T)(img)(_p1p,_n3q,0,c), pQ[51] = (T)(img)(p,_n3q,0,c), pQ[52] = (T)(img)(_n1p,_n3q,0,c), pQ[53] = (T)(img)(_n2p,_n3q,0,c), pQ[54] = (T)(img)(_n3p,_n3q,0,c), pQ[55] = (T)(img)(_n4p,_n3q,0,c), pQ[56] = (T)(img)(_p3p,_n4q,0,c), pQ[57] = (T)(img)(_p2p,_n4q,0,c), pQ[58] = (T)(img)(_p1p,_n4q,0,c), pQ[59] = (T)(img)(p,_n4q,0,c), pQ[60] = (T)(img)(_n1p,_n4q,0,c), pQ[61] = (T)(img)(_n2p,_n4q,0,c), pQ[62] = (T)(img)(_n3p,_n4q,0,c), pQ[63] = (T)(img)(_n4p,_n4q,0,c);; pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p3x,_p3y,0,c), pP[1] = (T)(img)(_p2x,_p3y,0,c), pP[2] = (T)(img)(_p1x,_p3y,0,c), pP[3] = (T)(img)(x,_p3y,0,c), pP[4] = (T)(img)(_n1x,_p3y,0,c), pP[5] = (T)(img)(_n2x,_p3y,0,c), pP[6] = (T)(img)(_n3x,_p3y,0,c), pP[7] = (T)(img)(_n4x,_p3y,0,c), pP[8] = (T)(img)(_p3x,_p2y,0,c), pP[9] = (T)(img)(_p2x,_p2y,0,c), pP[10] = (T)(img)(_p1x,_p2y,0,c), pP[11] = (T)(img)(x,_p2y,0,c), pP[12] = (T)(img)(_n1x,_p2y,0,c), pP[13] = (T)(img)(_n2x,_p2y,0,c), pP[14] = (T)(img)(_n3x,_p2y,0,c), pP[15] = (T)(img)(_n4x,_p2y,0,c), pP[16] = (T)(img)(_p3x,_p1y,0,c), pP[17] = (T)(img)(_p2x,_p1y,0,c), pP[18] = (T)(img)(_p1x,_p1y,0,c), pP[19] = (T)(img)(x,_p1y,0,c), pP[20] = (T)(img)(_n1x,_p1y,0,c), pP[21] = (T)(img)(_n2x,_p1y,0,c), pP[22] = (T)(img)(_n3x,_p1y,0,c), pP[23] = (T)(img)(_n4x,_p1y,0,c), pP[24] = (T)(img)(_p3x,y,0,c), pP[25] = (T)(img)(_p2x,y,0,c), pP[26] = (T)(img)(_p1x,y,0,c), pP[27] = (T)(img)(x,y,0,c), pP[28] = (T)(img)(_n1x,y,0,c), pP[29] = (T)(img)(_n2x,y,0,c), pP[30] = (T)(img)(_n3x,y,0,c), pP[31] = (T)(img)(_n4x,y,0,c), pP[32] = (T)(img)(_p3x,_n1y,0,c), pP[33] = (T)(img)(_p2x,_n1y,0,c), pP[34] = (T)(img)(_p1x,_n1y,0,c), pP[35] = (T)(img)(x,_n1y,0,c), pP[36] = (T)(img)(_n1x,_n1y,0,c), pP[37] = (T)(img)(_n2x,_n1y,0,c), pP[38] = (T)(img)(_n3x,_n1y,0,c), pP[39] = (T)(img)(_n4x,_n1y,0,c), pP[40] = (T)(img)(_p3x,_n2y,0,c), pP[41] = (T)(img)(_p2x,_n2y,0,c), pP[42] = (T)(img)(_p1x,_n2y,0,c), pP[43] = (T)(img)(x,_n2y,0,c), pP[44] = (T)(img)(_n1x,_n2y,0,c), pP[45] = (T)(img)(_n2x,_n2y,0,c), pP[46] = (T)(img)(_n3x,_n2y,0,c), pP[47] = (T)(img)(_n4x,_n2y,0,c), pP[48] = (T)(img)(_p3x,_n3y,0,c), pP[49] = (T)(img)(_p2x,_n3y,0,c), pP[50] = (T)(img)(_p1x,_n3y,0,c), pP[51] = (T)(img)(x,_n3y,0,c), pP[52] = (T)(img)(_n1x,_n3y,0,c), pP[53] = (T)(img)(_n2x,_n3y,0,c), pP[54] = (T)(img)(_n3x,_n3y,0,c), pP[55] = (T)(img)(_n4x,_n3y,0,c), pP[56] = (T)(img)(_p3x,_n4y,0,c), pP[57] = (T)(img)(_p2x,_n4y,0,c), pP[58] = (T)(img)(_p1x,_n4y,0,c), pP[59] = (T)(img)(x,_n4y,0,c), pP[60] = (T)(img)(_n1x,_n4y,0,c), pP[61] = (T)(img)(_n2x,_n4y,0,c), pP[62] = (T)(img)(_n3x,_n4y,0,c), pP[63] = (T)(img)(_n4x,_n4y,0,c);; pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p3p,_p3q,0,c), pQ[1] = (T)(img)(_p2p,_p3q,0,c), pQ[2] = (T)(img)(_p1p,_p3q,0,c), pQ[3] = (T)(img)(p,_p3q,0,c), pQ[4] = (T)(img)(_n1p,_p3q,0,c), pQ[5] = (T)(img)(_n2p,_p3q,0,c), pQ[6] = (T)(img)(_n3p,_p3q,0,c), pQ[7] = (T)(img)(_n4p,_p3q,0,c), pQ[8] = (T)(img)(_p3p,_p2q,0,c), pQ[9] = (T)(img)(_p2p,_p2q,0,c), pQ[10] = (T)(img)(_p1p,_p2q,0,c), pQ[11] = (T)(img)(p,_p2q,0,c), pQ[12] = (T)(img)(_n1p,_p2q,0,c), pQ[13] = (T)(img)(_n2p,_p2q,0,c), pQ[14] = (T)(img)(_n3p,_p2q,0,c), pQ[15] = (T)(img)(_n4p,_p2q,0,c), pQ[16] = (T)(img)(_p3p,_p1q,0,c), pQ[17] = (T)(img)(_p2p,_p1q,0,c), pQ[18] = (T)(img)(_p1p,_p1q,0,c), pQ[19] = (T)(img)(p,_p1q,0,c), pQ[20] = (T)(img)(_n1p,_p1q,0,c), pQ[21] = (T)(img)(_n2p,_p1q,0,c), pQ[22] = (T)(img)(_n3p,_p1q,0,c), pQ[23] = (T)(img)(_n4p,_p1q,0,c), pQ[24] = (T)(img)(_p3p,q,0,c), pQ[25] = (T)(img)(_p2p,q,0,c), pQ[26] = (T)(img)(_p1p,q,0,c), pQ[27] = (T)(img)(p,q,0,c), pQ[28] = (T)(img)(_n1p,q,0,c), pQ[29] = (T)(img)(_n2p,q,0,c), pQ[30] = (T)(img)(_n3p,q,0,c), pQ[31] = (T)(img)(_n4p,q,0,c), pQ[32] = (T)(img)(_p3p,_n1q,0,c), pQ[33] = (T)(img)(_p2p,_n1q,0,c), pQ[34] = (T)(img)(_p1p,_n1q,0,c), pQ[35] = (T)(img)(p,_n1q,0,c), pQ[36] = (T)(img)(_n1p,_n1q,0,c), pQ[37] = (T)(img)(_n2p,_n1q,0,c), pQ[38] = (T)(img)(_n3p,_n1q,0,c), pQ[39] = (T)(img)(_n4p,_n1q,0,c), pQ[40] = (T)(img)(_p3p,_n2q,0,c), pQ[41] = (T)(img)(_p2p,_n2q,0,c), pQ[42] = (T)(img)(_p1p,_n2q,0,c), pQ[43] = (T)(img)(p,_n2q,0,c), pQ[44] = (T)(img)(_n1p,_n2q,0,c), pQ[45] = (T)(img)(_n2p,_n2q,0,c), pQ[46] = (T)(img)(_n3p,_n2q,0,c), pQ[47] = (T)(img)(_n4p,_n2q,0,c), pQ[48] = (T)(img)(_p3p,_n3q,0,c), pQ[49] = (T)(img)(_p2p,_n3q,0,c), pQ[50] = (T)(img)(_p1p,_n3q,0,c), pQ[51] = (T)(img)(p,_n3q,0,c), pQ[52] = (T)(img)(_n1p,_n3q,0,c), pQ[53] = (T)(img)(_n2p,_n3q,0,c), pQ[54] = (T)(img)(_n3p,_n3q,0,c), pQ[55] = (T)(img)(_n4p,_n3q,0,c), pQ[56] = (T)(img)(_p3p,_n4q,0,c), pQ[57] = (T)(img)(_p2p,_n4q,0,c), pQ[58] = (T)(img)(_p1p,_n4q,0,c), pQ[59] = (T)(img)(p,_n4q,0,c), pQ[60] = (T)(img)(_n1p,_n4q,0,c), pQ[61] = (T)(img)(_n2p,_n4q,0,c), pQ[62] = (T)(img)(_n3p,_n4q,0,c), pQ[63] = (T)(img)(_n4p,_n4q,0,c);; pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > case 9 : if (is_fast_approx) for (int y = 0, _p4y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=(int)((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=(int)((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=(int)((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=(int)((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p4y = _p3y, _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p4x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(int)((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=(int)((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=(int)((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=(int)((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p4x = _p3x, _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p4x,_p4y,0,c), pP[1] = (T)(img)(_p3x,_p4y,0,c), pP[2] = (T)(img)(_p2x,_p4y,0,c), pP[3] = (T)(img)(_p1x,_p4y,0,c), pP[4] = (T)(img)(x,_p4y,0,c), pP[5] = (T)(img)(_n1x,_p4y,0,c), pP[6] = (T)(img)(_n2x,_p4y,0,c), pP[7] = (T)(img)(_n3x,_p4y,0,c), pP[8] = (T)(img)(_n4x,_p4y,0,c), pP[9] = (T)(img)(_p4x,_p3y,0,c), pP[10] = (T)(img)(_p3x,_p3y,0,c), pP[11] = (T)(img)(_p2x,_p3y,0,c), pP[12] = (T)(img)(_p1x,_p3y,0,c), pP[13] = (T)(img)(x,_p3y,0,c), pP[14] = (T)(img)(_n1x,_p3y,0,c), pP[15] = (T)(img)(_n2x,_p3y,0,c), pP[16] = (T)(img)(_n3x,_p3y,0,c), pP[17] = (T)(img)(_n4x,_p3y,0,c), pP[18] = (T)(img)(_p4x,_p2y,0,c), pP[19] = (T)(img)(_p3x,_p2y,0,c), pP[20] = (T)(img)(_p2x,_p2y,0,c), pP[21] = (T)(img)(_p1x,_p2y,0,c), pP[22] = (T)(img)(x,_p2y,0,c), pP[23] = (T)(img)(_n1x,_p2y,0,c), pP[24] = (T)(img)(_n2x,_p2y,0,c), pP[25] = (T)(img)(_n3x,_p2y,0,c), pP[26] = (T)(img)(_n4x,_p2y,0,c), pP[27] = (T)(img)(_p4x,_p1y,0,c), pP[28] = (T)(img)(_p3x,_p1y,0,c), pP[29] = (T)(img)(_p2x,_p1y,0,c), pP[30] = (T)(img)(_p1x,_p1y,0,c), pP[31] = (T)(img)(x,_p1y,0,c), pP[32] = (T)(img)(_n1x,_p1y,0,c), pP[33] = (T)(img)(_n2x,_p1y,0,c), pP[34] = (T)(img)(_n3x,_p1y,0,c), pP[35] = (T)(img)(_n4x,_p1y,0,c), pP[36] = (T)(img)(_p4x,y,0,c), pP[37] = (T)(img)(_p3x,y,0,c), pP[38] = (T)(img)(_p2x,y,0,c), pP[39] = (T)(img)(_p1x,y,0,c), pP[40] = (T)(img)(x,y,0,c), pP[41] = (T)(img)(_n1x,y,0,c), pP[42] = (T)(img)(_n2x,y,0,c), pP[43] = (T)(img)(_n3x,y,0,c), pP[44] = (T)(img)(_n4x,y,0,c), pP[45] = (T)(img)(_p4x,_n1y,0,c), pP[46] = (T)(img)(_p3x,_n1y,0,c), pP[47] = (T)(img)(_p2x,_n1y,0,c), pP[48] = (T)(img)(_p1x,_n1y,0,c), pP[49] = (T)(img)(x,_n1y,0,c), pP[50] = (T)(img)(_n1x,_n1y,0,c), pP[51] = (T)(img)(_n2x,_n1y,0,c), pP[52] = (T)(img)(_n3x,_n1y,0,c), pP[53] = (T)(img)(_n4x,_n1y,0,c), pP[54] = (T)(img)(_p4x,_n2y,0,c), pP[55] = (T)(img)(_p3x,_n2y,0,c), pP[56] = (T)(img)(_p2x,_n2y,0,c), pP[57] = (T)(img)(_p1x,_n2y,0,c), pP[58] = (T)(img)(x,_n2y,0,c), pP[59] = (T)(img)(_n1x,_n2y,0,c), pP[60] = (T)(img)(_n2x,_n2y,0,c), pP[61] = (T)(img)(_n3x,_n2y,0,c), pP[62] = (T)(img)(_n4x,_n2y,0,c), pP[63] = (T)(img)(_p4x,_n3y,0,c), pP[64] = (T)(img)(_p3x,_n3y,0,c), pP[65] = (T)(img)(_p2x,_n3y,0,c), pP[66] = (T)(img)(_p1x,_n3y,0,c), pP[67] = (T)(img)(x,_n3y,0,c), pP[68] = (T)(img)(_n1x,_n3y,0,c), pP[69] = (T)(img)(_n2x,_n3y,0,c), pP[70] = (T)(img)(_n3x,_n3y,0,c), pP[71] = (T)(img)(_n4x,_n3y,0,c), pP[72] = (T)(img)(_p4x,_n4y,0,c), pP[73] = (T)(img)(_p3x,_n4y,0,c), pP[74] = (T)(img)(_p2x,_n4y,0,c), pP[75] = (T)(img)(_p1x,_n4y,0,c), pP[76] = (T)(img)(x,_n4y,0,c), pP[77] = (T)(img)(_n1x,_n4y,0,c), pP[78] = (T)(img)(_n2x,_n4y,0,c), pP[79] = (T)(img)(_n3x,_n4y,0,c), pP[80] = (T)(img)(_n4x,_n4y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p4q = q-4<0?0:q-4, _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p4q = _p3q, _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p4p = p-4<0?0:p-4, _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p4p = _p3p, _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (cimg::abs(img(x,y,0,0) - img(p,q,0,0))<sigma_p3) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p4p,_p4q,0,c), pQ[1] = (T)(img)(_p3p,_p4q,0,c), pQ[2] = (T)(img)(_p2p,_p4q,0,c), pQ[3] = (T)(img)(_p1p,_p4q,0,c), pQ[4] = (T)(img)(p,_p4q,0,c), pQ[5] = (T)(img)(_n1p,_p4q,0,c), pQ[6] = (T)(img)(_n2p,_p4q,0,c), pQ[7] = (T)(img)(_n3p,_p4q,0,c), pQ[8] = (T)(img)(_n4p,_p4q,0,c), pQ[9] = (T)(img)(_p4p,_p3q,0,c), pQ[10] = (T)(img)(_p3p,_p3q,0,c), pQ[11] = (T)(img)(_p2p,_p3q,0,c), pQ[12] = (T)(img)(_p1p,_p3q,0,c), pQ[13] = (T)(img)(p,_p3q,0,c), pQ[14] = (T)(img)(_n1p,_p3q,0,c), pQ[15] = (T)(img)(_n2p,_p3q,0,c), pQ[16] = (T)(img)(_n3p,_p3q,0,c), pQ[17] = (T)(img)(_n4p,_p3q,0,c), pQ[18] = (T)(img)(_p4p,_p2q,0,c), pQ[19] = (T)(img)(_p3p,_p2q,0,c), pQ[20] = (T)(img)(_p2p,_p2q,0,c), pQ[21] = (T)(img)(_p1p,_p2q,0,c), pQ[22] = (T)(img)(p,_p2q,0,c), pQ[23] = (T)(img)(_n1p,_p2q,0,c), pQ[24] = (T)(img)(_n2p,_p2q,0,c), pQ[25] = (T)(img)(_n3p,_p2q,0,c), pQ[26] = (T)(img)(_n4p,_p2q,0,c), pQ[27] = (T)(img)(_p4p,_p1q,0,c), pQ[28] = (T)(img)(_p3p,_p1q,0,c), pQ[29] = (T)(img)(_p2p,_p1q,0,c), pQ[30] = (T)(img)(_p1p,_p1q,0,c), pQ[31] = (T)(img)(p,_p1q,0,c), pQ[32] = (T)(img)(_n1p,_p1q,0,c), pQ[33] = (T)(img)(_n2p,_p1q,0,c), pQ[34] = (T)(img)(_n3p,_p1q,0,c), pQ[35] = (T)(img)(_n4p,_p1q,0,c), pQ[36] = (T)(img)(_p4p,q,0,c), pQ[37] = (T)(img)(_p3p,q,0,c), pQ[38] = (T)(img)(_p2p,q,0,c), pQ[39] = (T)(img)(_p1p,q,0,c), pQ[40] = (T)(img)(p,q,0,c), pQ[41] = (T)(img)(_n1p,q,0,c), pQ[42] = (T)(img)(_n2p,q,0,c), pQ[43] = (T)(img)(_n3p,q,0,c), pQ[44] = (T)(img)(_n4p,q,0,c), pQ[45] = (T)(img)(_p4p,_n1q,0,c), pQ[46] = (T)(img)(_p3p,_n1q,0,c), pQ[47] = (T)(img)(_p2p,_n1q,0,c), pQ[48] = (T)(img)(_p1p,_n1q,0,c), pQ[49] = (T)(img)(p,_n1q,0,c), pQ[50] = (T)(img)(_n1p,_n1q,0,c), pQ[51] = (T)(img)(_n2p,_n1q,0,c), pQ[52] = (T)(img)(_n3p,_n1q,0,c), pQ[53] = (T)(img)(_n4p,_n1q,0,c), pQ[54] = (T)(img)(_p4p,_n2q,0,c), pQ[55] = (T)(img)(_p3p,_n2q,0,c), pQ[56] = (T)(img)(_p2p,_n2q,0,c), pQ[57] = (T)(img)(_p1p,_n2q,0,c), pQ[58] = (T)(img)(p,_n2q,0,c), pQ[59] = (T)(img)(_n1p,_n2q,0,c), pQ[60] = (T)(img)(_n2p,_n2q,0,c), pQ[61] = (T)(img)(_n3p,_n2q,0,c), pQ[62] = (T)(img)(_n4p,_n2q,0,c), pQ[63] = (T)(img)(_p4p,_n3q,0,c), pQ[64] = (T)(img)(_p3p,_n3q,0,c), pQ[65] = (T)(img)(_p2p,_n3q,0,c), pQ[66] = (T)(img)(_p1p,_n3q,0,c), pQ[67] = (T)(img)(p,_n3q,0,c), pQ[68] = (T)(img)(_n1p,_n3q,0,c), pQ[69] = (T)(img)(_n2p,_n3q,0,c), pQ[70] = (T)(img)(_n3p,_n3q,0,c), pQ[71] = (T)(img)(_n4p,_n3q,0,c), pQ[72] = (T)(img)(_p4p,_n4q,0,c), pQ[73] = (T)(img)(_p3p,_n4q,0,c), pQ[74] = (T)(img)(_p2p,_n4q,0,c), pQ[75] = (T)(img)(_p1p,_n4q,0,c), pQ[76] = (T)(img)(p,_n4q,0,c), pQ[77] = (T)(img)(_n1p,_n4q,0,c), pQ[78] = (T)(img)(_n2p,_n4q,0,c), pQ[79] = (T)(img)(_n3p,_n4q,0,c), pQ[80] = (T)(img)(_n4p,_n4q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = alldist>3?0.0f:1.0f; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else for (int y = 0, _p4y = 0, _p3y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=(int)((res)._height)?(int)((res)._height)-1:1, _n2y = 2>=(int)((res)._height)?(int)((res)._height)-1:2, _n3y = 3>=(int)((res)._height)?(int)((res)._height)-1:3, _n4y = 4>=(int)((res)._height)?(int)((res)._height)-1:4; _n4y<(int)((res)._height) || _n3y==--_n4y || _n2y==--_n3y || _n1y==--_n2y || y==(_n4y = _n3y = _n2y = --_n1y); _p4y = _p3y, _p3y = _p2y, _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y, ++_n3y, ++_n4y) for (int x = 0, _p4x = 0, _p3x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(int)((res)._width)?(int)((res)._width)-1:1, _n2x = 2>=(int)((res)._width)?(int)((res)._width)-1:2, _n3x = 3>=(int)((res)._width)?(int)((res)._width)-1:3, _n4x = 4>=(int)((res)._width)?(int)((res)._width)-1:4; _n4x<(int)((res)._width) || _n3x==--_n4x || _n2x==--_n3x || _n1x==--_n2x || x==(_n4x = _n3x = _n2x = --_n1x); _p4x = _p3x, _p3x = _p2x, _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x, ++_n3x, ++_n4x) { T *pP = P._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pP[0] = (T)(img)(_p4x,_p4y,0,c), pP[1] = (T)(img)(_p3x,_p4y,0,c), pP[2] = (T)(img)(_p2x,_p4y,0,c), pP[3] = (T)(img)(_p1x,_p4y,0,c), pP[4] = (T)(img)(x,_p4y,0,c), pP[5] = (T)(img)(_n1x,_p4y,0,c), pP[6] = (T)(img)(_n2x,_p4y,0,c), pP[7] = (T)(img)(_n3x,_p4y,0,c), pP[8] = (T)(img)(_n4x,_p4y,0,c), pP[9] = (T)(img)(_p4x,_p3y,0,c), pP[10] = (T)(img)(_p3x,_p3y,0,c), pP[11] = (T)(img)(_p2x,_p3y,0,c), pP[12] = (T)(img)(_p1x,_p3y,0,c), pP[13] = (T)(img)(x,_p3y,0,c), pP[14] = (T)(img)(_n1x,_p3y,0,c), pP[15] = (T)(img)(_n2x,_p3y,0,c), pP[16] = (T)(img)(_n3x,_p3y,0,c), pP[17] = (T)(img)(_n4x,_p3y,0,c), pP[18] = (T)(img)(_p4x,_p2y,0,c), pP[19] = (T)(img)(_p3x,_p2y,0,c), pP[20] = (T)(img)(_p2x,_p2y,0,c), pP[21] = (T)(img)(_p1x,_p2y,0,c), pP[22] = (T)(img)(x,_p2y,0,c), pP[23] = (T)(img)(_n1x,_p2y,0,c), pP[24] = (T)(img)(_n2x,_p2y,0,c), pP[25] = (T)(img)(_n3x,_p2y,0,c), pP[26] = (T)(img)(_n4x,_p2y,0,c), pP[27] = (T)(img)(_p4x,_p1y,0,c), pP[28] = (T)(img)(_p3x,_p1y,0,c), pP[29] = (T)(img)(_p2x,_p1y,0,c), pP[30] = (T)(img)(_p1x,_p1y,0,c), pP[31] = (T)(img)(x,_p1y,0,c), pP[32] = (T)(img)(_n1x,_p1y,0,c), pP[33] = (T)(img)(_n2x,_p1y,0,c), pP[34] = (T)(img)(_n3x,_p1y,0,c), pP[35] = (T)(img)(_n4x,_p1y,0,c), pP[36] = (T)(img)(_p4x,y,0,c), pP[37] = (T)(img)(_p3x,y,0,c), pP[38] = (T)(img)(_p2x,y,0,c), pP[39] = (T)(img)(_p1x,y,0,c), pP[40] = (T)(img)(x,y,0,c), pP[41] = (T)(img)(_n1x,y,0,c), pP[42] = (T)(img)(_n2x,y,0,c), pP[43] = (T)(img)(_n3x,y,0,c), pP[44] = (T)(img)(_n4x,y,0,c), pP[45] = (T)(img)(_p4x,_n1y,0,c), pP[46] = (T)(img)(_p3x,_n1y,0,c), pP[47] = (T)(img)(_p2x,_n1y,0,c), pP[48] = (T)(img)(_p1x,_n1y,0,c), pP[49] = (T)(img)(x,_n1y,0,c), pP[50] = (T)(img)(_n1x,_n1y,0,c), pP[51] = (T)(img)(_n2x,_n1y,0,c), pP[52] = (T)(img)(_n3x,_n1y,0,c), pP[53] = (T)(img)(_n4x,_n1y,0,c), pP[54] = (T)(img)(_p4x,_n2y,0,c), pP[55] = (T)(img)(_p3x,_n2y,0,c), pP[56] = (T)(img)(_p2x,_n2y,0,c), pP[57] = (T)(img)(_p1x,_n2y,0,c), pP[58] = (T)(img)(x,_n2y,0,c), pP[59] = (T)(img)(_n1x,_n2y,0,c), pP[60] = (T)(img)(_n2x,_n2y,0,c), pP[61] = (T)(img)(_n3x,_n2y,0,c), pP[62] = (T)(img)(_n4x,_n2y,0,c), pP[63] = (T)(img)(_p4x,_n3y,0,c), pP[64] = (T)(img)(_p3x,_n3y,0,c), pP[65] = (T)(img)(_p2x,_n3y,0,c), pP[66] = (T)(img)(_p1x,_n3y,0,c), pP[67] = (T)(img)(x,_n3y,0,c), pP[68] = (T)(img)(_n1x,_n3y,0,c), pP[69] = (T)(img)(_n2x,_n3y,0,c), pP[70] = (T)(img)(_n3x,_n3y,0,c), pP[71] = (T)(img)(_n4x,_n3y,0,c), pP[72] = (T)(img)(_p4x,_n4y,0,c), pP[73] = (T)(img)(_p3x,_n4y,0,c), pP[74] = (T)(img)(_p2x,_n4y,0,c), pP[75] = (T)(img)(_p1x,_n4y,0,c), pP[76] = (T)(img)(x,_n4y,0,c), pP[77] = (T)(img)(_n1x,_n4y,0,c), pP[78] = (T)(img)(_n2x,_n4y,0,c), pP[79] = (T)(img)(_n3x,_n4y,0,c), pP[80] = (T)(img)(_n4x,_n4y,0,c); pP+=N2; } const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; float sum_weights = 0, weight_max = 0; for (int q = (int)(y0)<0?0:(int)(y0), _p4q = q-4<0?0:q-4, _p3q = q-3<0?0:q-3, _p2q = q-2<0?0:q-2, _p1q = q-1<0?0:q-1, _n1q = q+1>=(int)((res)._height)?(int)((res)._height)-1:q+1, _n2q = q+2>=(int)((res)._height)?(int)((res)._height)-1:q+2, _n3q = q+3>=(int)((res)._height)?(int)((res)._height)-1:q+3, _n4q = q+4>=(int)((res)._height)?(int)((res)._height)-1:q+4; q<=(int)(y1) && (_n4q<(int)((res)._height) || _n3q==--_n4q || _n2q==--_n3q || _n1q==--_n2q || q==(_n4q = _n3q = _n2q = --_n1q)); _p4q = _p3q, _p3q = _p2q, _p2q = _p1q, _p1q = q++, ++_n1q, ++_n2q, ++_n3q, ++_n4q) for (int p = (int)(x0)<0?0:(int)(x0), _p4p = p-4<0?0:p-4, _p3p = p-3<0?0:p-3, _p2p = p-2<0?0:p-2, _p1p = p-1<0?0:p-1, _n1p = p+1>=(int)((res)._width)?(int)((res)._width)-1:p+1, _n2p = p+2>=(int)((res)._width)?(int)((res)._width)-1:p+2, _n3p = p+3>=(int)((res)._width)?(int)((res)._width)-1:p+3, _n4p = p+4>=(int)((res)._width)?(int)((res)._width)-1:p+4; p<=(int)(x1) && (_n4p<(int)((res)._width) || _n3p==--_n4p || _n2p==--_n3p || _n1p==--_n2p || p==(_n4p = _n3p = _n2p = --_n1p)); _p4p = _p3p, _p3p = _p2p, _p2p = _p1p, _p1p = p++, ++_n1p, ++_n2p, ++_n3p, ++_n4p) if (p!=x || q!=y) { T *pQ = Q._data; for (int c = 0; c<(int)((res)._spectrum); ++c) { pQ[0] = (T)(img)(_p4p,_p4q,0,c), pQ[1] = (T)(img)(_p3p,_p4q,0,c), pQ[2] = (T)(img)(_p2p,_p4q,0,c), pQ[3] = (T)(img)(_p1p,_p4q,0,c), pQ[4] = (T)(img)(p,_p4q,0,c), pQ[5] = (T)(img)(_n1p,_p4q,0,c), pQ[6] = (T)(img)(_n2p,_p4q,0,c), pQ[7] = (T)(img)(_n3p,_p4q,0,c), pQ[8] = (T)(img)(_n4p,_p4q,0,c), pQ[9] = (T)(img)(_p4p,_p3q,0,c), pQ[10] = (T)(img)(_p3p,_p3q,0,c), pQ[11] = (T)(img)(_p2p,_p3q,0,c), pQ[12] = (T)(img)(_p1p,_p3q,0,c), pQ[13] = (T)(img)(p,_p3q,0,c), pQ[14] = (T)(img)(_n1p,_p3q,0,c), pQ[15] = (T)(img)(_n2p,_p3q,0,c), pQ[16] = (T)(img)(_n3p,_p3q,0,c), pQ[17] = (T)(img)(_n4p,_p3q,0,c), pQ[18] = (T)(img)(_p4p,_p2q,0,c), pQ[19] = (T)(img)(_p3p,_p2q,0,c), pQ[20] = (T)(img)(_p2p,_p2q,0,c), pQ[21] = (T)(img)(_p1p,_p2q,0,c), pQ[22] = (T)(img)(p,_p2q,0,c), pQ[23] = (T)(img)(_n1p,_p2q,0,c), pQ[24] = (T)(img)(_n2p,_p2q,0,c), pQ[25] = (T)(img)(_n3p,_p2q,0,c), pQ[26] = (T)(img)(_n4p,_p2q,0,c), pQ[27] = (T)(img)(_p4p,_p1q,0,c), pQ[28] = (T)(img)(_p3p,_p1q,0,c), pQ[29] = (T)(img)(_p2p,_p1q,0,c), pQ[30] = (T)(img)(_p1p,_p1q,0,c), pQ[31] = (T)(img)(p,_p1q,0,c), pQ[32] = (T)(img)(_n1p,_p1q,0,c), pQ[33] = (T)(img)(_n2p,_p1q,0,c), pQ[34] = (T)(img)(_n3p,_p1q,0,c), pQ[35] = (T)(img)(_n4p,_p1q,0,c), pQ[36] = (T)(img)(_p4p,q,0,c), pQ[37] = (T)(img)(_p3p,q,0,c), pQ[38] = (T)(img)(_p2p,q,0,c), pQ[39] = (T)(img)(_p1p,q,0,c), pQ[40] = (T)(img)(p,q,0,c), pQ[41] = (T)(img)(_n1p,q,0,c), pQ[42] = (T)(img)(_n2p,q,0,c), pQ[43] = (T)(img)(_n3p,q,0,c), pQ[44] = (T)(img)(_n4p,q,0,c), pQ[45] = (T)(img)(_p4p,_n1q,0,c), pQ[46] = (T)(img)(_p3p,_n1q,0,c), pQ[47] = (T)(img)(_p2p,_n1q,0,c), pQ[48] = (T)(img)(_p1p,_n1q,0,c), pQ[49] = (T)(img)(p,_n1q,0,c), pQ[50] = (T)(img)(_n1p,_n1q,0,c), pQ[51] = (T)(img)(_n2p,_n1q,0,c), pQ[52] = (T)(img)(_n3p,_n1q,0,c), pQ[53] = (T)(img)(_n4p,_n1q,0,c), pQ[54] = (T)(img)(_p4p,_n2q,0,c), pQ[55] = (T)(img)(_p3p,_n2q,0,c), pQ[56] = (T)(img)(_p2p,_n2q,0,c), pQ[57] = (T)(img)(_p1p,_n2q,0,c), pQ[58] = (T)(img)(p,_n2q,0,c), pQ[59] = (T)(img)(_n1p,_n2q,0,c), pQ[60] = (T)(img)(_n2p,_n2q,0,c), pQ[61] = (T)(img)(_n3p,_n2q,0,c), pQ[62] = (T)(img)(_n4p,_n2q,0,c), pQ[63] = (T)(img)(_p4p,_n3q,0,c), pQ[64] = (T)(img)(_p3p,_n3q,0,c), pQ[65] = (T)(img)(_p2p,_n3q,0,c), pQ[66] = (T)(img)(_p1p,_n3q,0,c), pQ[67] = (T)(img)(p,_n3q,0,c), pQ[68] = (T)(img)(_n1p,_n3q,0,c), pQ[69] = (T)(img)(_n2p,_n3q,0,c), pQ[70] = (T)(img)(_n3p,_n3q,0,c), pQ[71] = (T)(img)(_n4p,_n3q,0,c), pQ[72] = (T)(img)(_p4p,_n4q,0,c), pQ[73] = (T)(img)(_p3p,_n4q,0,c), pQ[74] = (T)(img)(_p2p,_n4q,0,c), pQ[75] = (T)(img)(_p1p,_n4q,0,c), pQ[76] = (T)(img)(p,_n4q,0,c), pQ[77] = (T)(img)(_n1p,_n4q,0,c), pQ[78] = (T)(img)(_n2p,_n4q,0,c), pQ[79] = (T)(img)(_n3p,_n4q,0,c), pQ[80] = (T)(img)(_n4p,_n4q,0,c); pQ+=N2; } float distance2 = 0; pQ = Q._data; for (T *pP = (P)._data, *_maxpP = (P)._data + (P).size(); pP<_maxpP; ++pP) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } distance2/=Pnorm; const float dx = (float)p - x, dy = (float)q - y, alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); if (weight>weight_max) weight_max = weight; sum_weights+=weight; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); } sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } break; > default : { > const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; > if (is_fast_approx) > > ># 25508 "./CImg.h" >#pragma omp parallel for if (res._width>=32 && res._height>=4) firstprivate(P,Q) ># 25508 "./CImg.h" > > > for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; > float sum_weights = 0; > for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (cimg::abs(img(x,y,0)-img(p,q,0))<sigma_p3) { > (Q = img.get_crop(p - psize1,q - psize1,p + psize2,q + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy)/sigma_s2), > weight = distance2>3?0.0f:1.0f; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); > } > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); > } else > > ># 25527 "./CImg.h" >#pragma omp parallel for if (res._width>=32 && res._height>=4) firstprivate(P,Q) ># 25527 "./CImg.h" > > > for (int y = 0; y<(int)((res)._height); ++y) for (int x = 0; x<(int)((res)._width); ++x) { > P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); > const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; > float sum_weights = 0, weight_max = 0; > for (int q = (int)(y0)<0?0:(int)(y0), _maxq = (int)(y1)<(int)((res)._height)?(int)(y1):(int)((res)._height)-1; q<=_maxq; ++q) for (int p = (int)(x0)<0?0:(int)(x0), _maxp = (int)(x1)<(int)((res)._width)?(int)(x1):(int)((res)._width)-1; p<=_maxp; ++p) if (p!=x || q!=y) { > (Q = img.get_crop(p - psize1,q - psize1,p + psize2,q + psize2,true))-=P; > const float > dx = (float)x - p, dy = (float)y - q, > distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy)/sigma_s2), > weight = (float)std::exp(-distance2); > if (weight>weight_max) weight_max = weight; > sum_weights+=weight; > for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight*(*this)(p,q,c); > } > sum_weights+=weight_max; for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)+=weight_max*(*this)(x,y,c); > if (sum_weights>0) for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,c)/=sum_weights; > else for (int c = 0; c<(int)((res)._spectrum); ++c) res(x,y,0,c) = (Tfloat)((*this)(x,y,c)); > } > } > } > return res; > } > > > > > > CImg<T>& blur_median(const unsigned int n) { > if (!n) return *this; > return get_blur_median(n).move_to(*this); > } > > > CImg<T> get_blur_median(const unsigned int n) const { > if (is_empty() || n<=1) return +*this; > CImg<T> res(_width,_height,_depth,_spectrum); > T *ptrd = res._data; > cimg::unused(ptrd); > const int hl = n/2, hr = hl - 1 + n%2; > if (res._depth!=1) > > ># 25570 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width>=16 && _height*_depth*_spectrum>=4) ># 25570 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int > x0 = x - hl, y0 = y - hl, z0 = z-hl, x1 = x + hr, y1 = y + hr, z1 = z+hr, > nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, > nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1, nz1 = z1>=depth()?depth()-1:z1; > res(x,y,z,c) = get_crop(nx0,ny0,nz0,c,nx1,ny1,nz1,c).median(); > } else { > > if (res._height!=1) switch (n) { > case 3 : { > > ># 25583 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25583 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[9] = { 0 }; > T J[9]; T& Jpp = J[0]; T& Jcp = J[1]; T& Jnp = J[2]; T& Jpc = J[3]; T& Jcc = J[4]; T& Jnc = J[5]; T& Jpn = J[6]; T& Jcn = J[7]; T& Jnn = J[8]; Jpp = Jcp = Jnp = Jpc = Jcc = Jnc = Jpn = Jcn = Jnn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > std::memcpy(J,I,9*sizeof(T)); > if ((Jcp)>(Jnp)) cimg::swap(Jcp,Jnp); if ((Jcc)>(Jnc)) cimg::swap(Jcc,Jnc); if ((Jcn)>(Jnn)) cimg::swap(Jcn,Jnn); > if ((Jpp)>(Jcp)) cimg::swap(Jpp,Jcp); if ((Jpc)>(Jcc)) cimg::swap(Jpc,Jcc); if ((Jpn)>(Jcn)) cimg::swap(Jpn,Jcn); > if ((Jcp)>(Jnp)) cimg::swap(Jcp,Jnp); if ((Jcc)>(Jnc)) cimg::swap(Jcc,Jnc); if ((Jcn)>(Jnn)) cimg::swap(Jcn,Jnn); > if ((Jpp)>(Jpc)) cimg::swap(Jpp,Jpc); if ((Jnc)>(Jnn)) cimg::swap(Jnc,Jnn); if ((Jcc)>(Jcn)) cimg::swap(Jcc,Jcn); > if ((Jpc)>(Jpn)) cimg::swap(Jpc,Jpn); if ((Jcp)>(Jcc)) cimg::swap(Jcp,Jcc); if ((Jnp)>(Jnc)) cimg::swap(Jnp,Jnc); > if ((Jcc)>(Jcn)) cimg::swap(Jcc,Jcn); if ((Jcc)>(Jnp)) cimg::swap(Jcc,Jnp); if ((Jpn)>(Jcc)) cimg::swap(Jpn,Jcc); > if ((Jcc)>(Jnp)) cimg::swap(Jcc,Jnp); > res(x,y,c) = Jcc; > } > } > } break; > case 5 : { > > ># 25603 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25603 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[25] = { 0 }; > T J[25]; T& Jbb = J[0]; T& Jpb = J[1]; T& Jcb = J[2]; T& Jnb = J[3]; T& Jab = J[4]; T& Jbp = J[5]; T& Jpp = J[6]; T& Jcp = J[7]; T& Jnp = J[8]; T& Jap = J[9]; T& Jbc = J[10]; T& Jpc = J[11]; T& Jcc = J[12]; T& Jnc = J[13]; T& Jac = J[14]; T& Jbn = J[15]; T& Jpn = J[16]; T& Jcn = J[17]; T& Jnn = J[18]; T& Jan = J[19]; T& Jba = J[20]; T& Jpa = J[21]; T& Jca = J[22]; T& Jna = J[23]; T& Jaa = J[24]; Jbb = Jpb = Jcb = Jnb = Jab = Jbp = Jpp = Jcp = Jnp = Jap = Jbc = Jpc = Jcc = Jnc = Jac = Jbn = Jpn = Jcn = Jnn = Jan = Jba = Jpa = Jca = Jna = Jaa = 0; > for (int y = 0, _p2y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1, _n2y = 2>=((*this)._height)?(int)((*this)._height)-1:2; _n2y<(int)((*this)._height) || _n1y==--_n2y || y==(_n2y = --_n1y); _p2y = _p1y, _p1y = y++, ++_n1y, ++_n2y) for (int x = 0, _p2x = 0, _p1x = 0, _n1x = 1>=(*this)._width?(*this).width()-1:1, _n2x = (int)( (I[0] = I[1] = I[2] = (T)(*this)(_p2x,_p2y,0,c)), (I[5] = I[6] = I[7] = (T)(*this)(0,_p1y,0,c)), (I[10] = I[11] = I[12] = (T)(*this)(0,y,0,c)), (I[15] = I[16] = I[17] = (T)(*this)(0,_n1y,0,c)), (I[20] = I[21] = I[22] = (T)(*this)(0,_n2y,0,c)), (I[3] = (T)(*this)(_n1x,_p2y,0,c)), (I[8] = (T)(*this)(_n1x,_p1y,0,c)), (I[13] = (T)(*this)(_n1x,y,0,c)), (I[18] = (T)(*this)(_n1x,_n1y,0,c)), (I[23] = (T)(*this)(_n1x,_n2y,0,c)), 2>=(*this)._width?(*this).width()-1:2); (_n2x<(*this).width() && ( (I[4] = (T)(*this)(_n2x,_p2y,0,c)), (I[9] = (T)(*this)(_n2x,_p1y,0,c)), (I[14] = (T)(*this)(_n2x,y,0,c)), (I[19] = (T)(*this)(_n2x,_n1y,0,c)), (I[24] = (T)(*this)(_n2x,_n2y,0,c)),1)) || _n1x==--_n2x || x==(_n2x = --_n1x); I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], _p2x = _p1x, _p1x = x++, ++_n1x, ++_n2x) { > std::memcpy(J,I,25*sizeof(T)); > if ((Jbb)>(Jpb)) cimg::swap(Jbb,Jpb); if ((Jnb)>(Jab)) cimg::swap(Jnb,Jab); if ((Jcb)>(Jab)) cimg::swap(Jcb,Jab); if ((Jcb)>(Jnb)) cimg::swap(Jcb,Jnb); > if ((Jpp)>(Jcp)) cimg::swap(Jpp,Jcp); if ((Jbp)>(Jcp)) cimg::swap(Jbp,Jcp); if ((Jbp)>(Jpp)) cimg::swap(Jbp,Jpp); if ((Jap)>(Jbc)) cimg::swap(Jap,Jbc); > if ((Jnp)>(Jbc)) cimg::swap(Jnp,Jbc); if ((Jnp)>(Jap)) cimg::swap(Jnp,Jap); if ((Jcc)>(Jnc)) cimg::swap(Jcc,Jnc); if ((Jpc)>(Jnc)) cimg::swap(Jpc,Jnc); > if ((Jpc)>(Jcc)) cimg::swap(Jpc,Jcc); if ((Jbn)>(Jpn)) cimg::swap(Jbn,Jpn); if ((Jac)>(Jpn)) cimg::swap(Jac,Jpn); if ((Jac)>(Jbn)) cimg::swap(Jac,Jbn); > if ((Jnn)>(Jan)) cimg::swap(Jnn,Jan); if ((Jcn)>(Jan)) cimg::swap(Jcn,Jan); if ((Jcn)>(Jnn)) cimg::swap(Jcn,Jnn); if ((Jpa)>(Jca)) cimg::swap(Jpa,Jca); > if ((Jba)>(Jca)) cimg::swap(Jba,Jca); if ((Jba)>(Jpa)) cimg::swap(Jba,Jpa); if ((Jna)>(Jaa)) cimg::swap(Jna,Jaa); if ((Jcb)>(Jbp)) cimg::swap(Jcb,Jbp); > if ((Jnb)>(Jpp)) cimg::swap(Jnb,Jpp); if ((Jbb)>(Jpp)) cimg::swap(Jbb,Jpp); if ((Jbb)>(Jnb)) cimg::swap(Jbb,Jnb); if ((Jab)>(Jcp)) cimg::swap(Jab,Jcp); > if ((Jpb)>(Jcp)) cimg::swap(Jpb,Jcp); if ((Jpb)>(Jab)) cimg::swap(Jpb,Jab); if ((Jpc)>(Jac)) cimg::swap(Jpc,Jac); if ((Jnp)>(Jac)) cimg::swap(Jnp,Jac); > if ((Jnp)>(Jpc)) cimg::swap(Jnp,Jpc); if ((Jcc)>(Jbn)) cimg::swap(Jcc,Jbn); if ((Jap)>(Jbn)) cimg::swap(Jap,Jbn); if ((Jap)>(Jcc)) cimg::swap(Jap,Jcc); > if ((Jnc)>(Jpn)) cimg::swap(Jnc,Jpn); if ((Jbc)>(Jpn)) cimg::swap(Jbc,Jpn); if ((Jbc)>(Jnc)) cimg::swap(Jbc,Jnc); if ((Jba)>(Jna)) cimg::swap(Jba,Jna); > if ((Jcn)>(Jna)) cimg::swap(Jcn,Jna); if ((Jcn)>(Jba)) cimg::swap(Jcn,Jba); if ((Jpa)>(Jaa)) cimg::swap(Jpa,Jaa); if ((Jnn)>(Jaa)) cimg::swap(Jnn,Jaa); > if ((Jnn)>(Jpa)) cimg::swap(Jnn,Jpa); if ((Jan)>(Jca)) cimg::swap(Jan,Jca); if ((Jnp)>(Jcn)) cimg::swap(Jnp,Jcn); if ((Jap)>(Jnn)) cimg::swap(Jap,Jnn); > if ((Jbb)>(Jnn)) cimg::swap(Jbb,Jnn); if ((Jbb)>(Jap)) cimg::swap(Jbb,Jap); if ((Jbc)>(Jan)) cimg::swap(Jbc,Jan); if ((Jpb)>(Jan)) cimg::swap(Jpb,Jan); > if ((Jpb)>(Jbc)) cimg::swap(Jpb,Jbc); if ((Jpc)>(Jba)) cimg::swap(Jpc,Jba); if ((Jcb)>(Jba)) cimg::swap(Jcb,Jba); if ((Jcb)>(Jpc)) cimg::swap(Jcb,Jpc); > if ((Jcc)>(Jpa)) cimg::swap(Jcc,Jpa); if ((Jnb)>(Jpa)) cimg::swap(Jnb,Jpa); if ((Jnb)>(Jcc)) cimg::swap(Jnb,Jcc); if ((Jnc)>(Jca)) cimg::swap(Jnc,Jca); > if ((Jab)>(Jca)) cimg::swap(Jab,Jca); if ((Jab)>(Jnc)) cimg::swap(Jab,Jnc); if ((Jac)>(Jna)) cimg::swap(Jac,Jna); if ((Jbp)>(Jna)) cimg::swap(Jbp,Jna); > if ((Jbp)>(Jac)) cimg::swap(Jbp,Jac); if ((Jbn)>(Jaa)) cimg::swap(Jbn,Jaa); if ((Jpp)>(Jaa)) cimg::swap(Jpp,Jaa); if ((Jpp)>(Jbn)) cimg::swap(Jpp,Jbn); > if ((Jcp)>(Jpn)) cimg::swap(Jcp,Jpn); if ((Jcp)>(Jan)) cimg::swap(Jcp,Jan); if ((Jnc)>(Jpa)) cimg::swap(Jnc,Jpa); if ((Jbn)>(Jna)) cimg::swap(Jbn,Jna); > if ((Jcp)>(Jnc)) cimg::swap(Jcp,Jnc); if ((Jcp)>(Jbn)) cimg::swap(Jcp,Jbn); if ((Jpb)>(Jap)) cimg::swap(Jpb,Jap); if ((Jnb)>(Jpc)) cimg::swap(Jnb,Jpc); > if ((Jbp)>(Jcn)) cimg::swap(Jbp,Jcn); if ((Jpc)>(Jcn)) cimg::swap(Jpc,Jcn); if ((Jap)>(Jcn)) cimg::swap(Jap,Jcn); if ((Jab)>(Jbc)) cimg::swap(Jab,Jbc); > if ((Jpp)>(Jcc)) cimg::swap(Jpp,Jcc); if ((Jcp)>(Jac)) cimg::swap(Jcp,Jac); if ((Jab)>(Jpp)) cimg::swap(Jab,Jpp); if ((Jab)>(Jcp)) cimg::swap(Jab,Jcp); > if ((Jcc)>(Jac)) cimg::swap(Jcc,Jac); if ((Jbc)>(Jac)) cimg::swap(Jbc,Jac); if ((Jpp)>(Jcp)) cimg::swap(Jpp,Jcp); if ((Jbc)>(Jcc)) cimg::swap(Jbc,Jcc); > if ((Jpp)>(Jbc)) cimg::swap(Jpp,Jbc); if ((Jpp)>(Jcn)) cimg::swap(Jpp,Jcn); if ((Jcc)>(Jcn)) cimg::swap(Jcc,Jcn); if ((Jcp)>(Jcn)) cimg::swap(Jcp,Jcn); > if ((Jcp)>(Jbc)) cimg::swap(Jcp,Jbc); if ((Jcc)>(Jnn)) cimg::swap(Jcc,Jnn); if ((Jcp)>(Jcc)) cimg::swap(Jcp,Jcc); if ((Jbc)>(Jnn)) cimg::swap(Jbc,Jnn); > if ((Jcc)>(Jba)) cimg::swap(Jcc,Jba); if ((Jbc)>(Jba)) cimg::swap(Jbc,Jba); if ((Jbc)>(Jcc)) cimg::swap(Jbc,Jcc); > res(x,y,c) = Jcc; > } > } > } break; > default : { > > ># 25641 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=16 && _height*_spectrum>=4) ># 25641 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const int > x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, > nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, > nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1; > res(x,y,c) = get_crop(nx0,ny0,0,c,nx1,ny1,0,c).median(); > } > } > } else switch (n) { > case 2 : { > > ># 25654 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25654 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[4] = { 0 }; > for (int y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (T)(*this)(0,y,0,c)), (I[2] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[1] = (T)(*this)(_n1x,y,0,c)), (I[3] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) res(x,c) = (T)(0.5f*(I[0]+I[1])); > } > } break; > case 3 : { > > ># 25663 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 25663 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > T I[9] = { 0 }; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (T)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (T)(*this)(0,y,0,c)), (I[6] = I[7] = (T)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (T)(*this)(_n1x,_p1y,0,c)), (I[5] = (T)(*this)(_n1x,y,0,c)), (I[8] = (T)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > res(x,c) = I[3]<I[4]?(I[4]<I[5]?I[4]:(I[3]<I[5]?I[5]:I[3])):(I[3]<I[5]?I[3]:(I[4]<I[5]?I[5]:I[4])); > } > } break; > default : { > > ># 25673 "./CImg.h" >#pragma omp parallel for if (_width>=16 && _spectrum>=2) ># 25673 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int x = 0; x<(int)((*this)._width); ++x) { > const int > x0 = x - hl, x1 = x + hr, > nx0 = x0<0?0:x0, nx1 = x1>=width()?width()-1:x1; > res(x,c) = get_crop(nx0,0,0,c,nx1,0,0,c).median(); > } > } > } > } > return res; > } ># 25695 "./CImg.h" > CImg<T>& sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, const float alpha=0, const float sigma=0) { > if (is_empty()) return *this; > T val_min, val_max = max_min(val_min); > const float nedge = edge/2; > CImg<Tfloat> velocity(_width,_height,_depth,_spectrum), _veloc_max(_spectrum); > > if (_depth>1) { > if (sharpen_type) { > CImg<Tfloat> G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); > if (sigma>0) G.blur(sigma); > > ># 25706 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=32 && _height*_depth>=16) ># 25706 "./CImg.h" > > > for (int z = 0; z<(int)((G)._depth); ++z) for (int y = 0; y<(int)((G)._height); ++y) { > Tfloat *ptrG0 = G.data(0,y,z,0), *ptrG1 = G.data(0,y,z,1), *ptrG2 = G.data(0,y,z,2), *ptrG3 = G.data(0,y,z,3); > CImg<Tfloat> val, vec; > for (int x = 0; x<(int)((G)._width); ++x) { > G.get_tensor_at(x,y,z).symmetric_eigen(val,vec); > if (val[0]<0) val[0] = 0; > if (val[1]<0) val[1] = 0; > if (val[2]<0) val[2] = 0; > *(ptrG0++) = vec(0,0); > *(ptrG1++) = vec(0,1); > *(ptrG2++) = vec(0,2); > *(ptrG3++) = 1 - (Tfloat)std::pow(1+val[0]+val[1]+val[2],-(Tfloat)nedge); > } > } > > ># 25723 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=512 && _spectrum>=2) ># 25723 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > u = G(x,y,z,0), > v = G(x,y,z,1), > w = G(x,y,z,2), > amp = G(x,y,z,3), > ixx = Incc + Ipcc - 2*Iccc, > ixy = (Innc + Ippc - Inpc - Ipnc)/4, > ixz = (Incn + Ipcp - Incp - Ipcn)/4, > iyy = Icnc + Icpc - 2*Iccc, > iyz = (Icnn + Icpp - Icnp - Icpn)/4, > izz = Iccn + Iccp - 2*Iccc, > ixf = Incc - Iccc, > ixb = Iccc - Ipcc, > iyf = Icnc - Iccc, > iyb = Iccc - Icpc, > izf = Iccn - Iccc, > izb = Iccc - Iccp, > itt = u*u*ixx + v*v*iyy + w*w*izz + 2*u*v*ixy + 2*u*w*ixz + 2*v*w*iyz, > it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb) + w*cimg::minmod(izf,izb), > veloc = -amp*cimg::sign(itt)*cimg::abs(it); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } else > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat veloc = -Ipcc - Incc - Icpc - Icnc - Iccp - Iccn + 6*Iccc; > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } else { > if (sharpen_type) { > CImg<Tfloat> G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); > if (sigma>0) G.blur(sigma); > > ># 25770 "./CImg.h" >#pragma omp parallel for if (_width>=32 && _height>=16) ># 25770 "./CImg.h" > > > for (int y = 0; y<(int)((G)._height); ++y) { > CImg<Tfloat> val, vec; > Tfloat *ptrG0 = G.data(0,y,0,0), *ptrG1 = G.data(0,y,0,1), *ptrG2 = G.data(0,y,0,2); > for (int x = 0; x<(int)((G)._width); ++x) { > G.get_tensor_at(x,y).symmetric_eigen(val,vec); > if (val[0]<0) val[0] = 0; > if (val[1]<0) val[1] = 0; > *(ptrG0++) = vec(0,0); > *(ptrG1++) = vec(0,1); > *(ptrG2++) = 1 - (Tfloat)std::pow(1 + val[0] + val[1],-(Tfloat)nedge); > } > } > > ># 25785 "./CImg.h" >#pragma omp parallel for if (_width*_height>=512 && _spectrum>=2) ># 25785 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > u = G(x,y,0), > v = G(x,y,1), > amp = G(x,y,2), > ixx = Inc + Ipc - 2*Icc, > ixy = (Inn + Ipp - Inp - Ipn)/4, > iyy = Icn + Icp - 2*Icc, > ixf = Inc - Icc, > ixb = Icc - Ipc, > iyf = Icn - Icc, > iyb = Icc - Icp, > itt = u*u*ixx + v*v*iyy + 2*u*v*ixy, > it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb), > veloc = -amp*cimg::sign(itt)*cimg::abs(it); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } else > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat veloc = -Ipc - Inc - Icp - Icn + 4*Icc; > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } > _veloc_max[c] = veloc_max; > } > } > const Tfloat veloc_max = _veloc_max.max(); > if (veloc_max<=0) return *this; > return ((velocity*=amplitude/veloc_max)+=*this).cut(val_min,val_max).move_to(*this); > } > > > CImg<T> get_sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, const float alpha=0, const float sigma=0) const { > return (+*this).sharpen(amplitude,sharpen_type,edge,alpha,sigma); > } ># 25844 "./CImg.h" > CImgList<Tfloat> get_gradient(const char *const axes=0, const int scheme=3) const { > CImgList<Tfloat> grad(2,_width,_height,_depth,_spectrum); > bool is_3d = false; > if (axes) { > for (unsigned int a = 0; axes[a]; ++a) { > const char axis = cimg::uncase(axes[a]); > switch (axis) { > case 'x' : case 'y' : break; > case 'z' : is_3d = true; break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_gradient(): Invalid specified axis '%c'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } > } else is_3d = (_depth>1); > if (is_3d) { > CImg<Tfloat>(_width,_height,_depth,_spectrum).move_to(grad); > switch (scheme) { > case -1 : { > > ># 25866 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 25866 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > *(ptrd0++) = Iccc - Ipcc; > *(ptrd1++) = Iccc - Icpc; > *(ptrd2++) = Iccc - Iccp; > } > } > } break; > case 1 : { > > ># 25881 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 25881 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; > Tfloat I[8]; Tfloat& Iccc = I[0]; Tfloat& Incc = I[1]; Tfloat& Icnc = I[2]; Tfloat& Innc = I[3]; Tfloat& Iccn = I[4]; Tfloat& Incn = I[5]; Tfloat& Icnn = I[6]; Tfloat& Innn = I[7]; Iccc = Incc = Icnc = Innc = Iccn = Incn = Icnn = Innn = 0; > for (int z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; ++z, ++_n1z) for (int y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (Tfloat)(*this)(0,y,z,c)), (I[2] = (Tfloat)(*this)(0,_n1y,z,c)), (I[4] = (Tfloat)(*this)(0,y,_n1z,c)), (I[6] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[1] = (Tfloat)(*this)(_n1x,y,z,c)), (I[3] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[7] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], ++x, ++_n1x) { > *(ptrd0++) = Incc - Iccc; > *(ptrd1++) = Icnc - Iccc; > *(ptrd2++) = Iccn - Iccc; > } > } > } break; > case 4 : { > grad[0] = get_deriche(0,1,'x'); > grad[1] = get_deriche(0,1,'y'); > grad[2] = get_deriche(0,1,'z'); > } break; > case 5 : { > grad[0] = get_vanvliet(0,1,'x'); > grad[1] = get_vanvliet(0,1,'y'); > grad[2] = get_vanvliet(0,1,'z'); > } break; > default : { > > ># 25906 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 25906 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > *(ptrd0++) = (Incc - Ipcc)/2; > *(ptrd1++) = (Icnc - Icpc)/2; > *(ptrd2++) = (Iccn - Iccp)/2; > } > } > } > } > } else switch (scheme) { > case -1 : { > > ># 25923 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25923 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = Icc - Ipc; > *(ptrd1++) = Icc - Icp; > } > } > } break; > case 1 : { > > ># 25937 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25937 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[4]; Tfloat& Icc = I[0]; Tfloat& Inc = I[1]; Tfloat& Icn = I[2]; Tfloat& Inn = I[3]; Icc = Inc = Icn = Inn = 0; > for (int y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; ++y, ++_n1y) for (int x = 0, _n1x = (int)( (I[0] = (Tfloat)(*this)(0,y,z,c)), (I[2] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[1] = (Tfloat)(*this)(_n1x,y,z,c)), (I[3] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[2] = I[3], ++x, ++_n1x) { > *(ptrd0++) = Inc - Icc; > *(ptrd1++) = Icn - Icc; > } > } > } break; > case 2 : { > > ># 25951 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25951 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = -Ipp - 2*Ipc - Ipn + Inp + 2*Inc + Inn; > *(ptrd1++) = -Ipp - 2*Icp - Inp + Ipn + 2*Icn + Inn; > } > } > } break; > case 3 : { > > ># 25965 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25965 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > const Tfloat a = (Tfloat)(0.25f*(2-std::sqrt(2.0f))), b = (Tfloat)(0.5f*(std::sqrt(2.0f)-1)); > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = -a*Ipp - b*Ipc - a*Ipn + a*Inp + b*Inc + a*Inn; > *(ptrd1++) = -a*Ipp - b*Icp - a*Inp + a*Ipn + b*Icn + a*Inn; > } > } > } break; > case 4 : { > grad[0] = get_deriche(0,1,'x'); > grad[1] = get_deriche(0,1,'y'); > } break; > case 5 : { > grad[0] = get_vanvliet(0,1,'x'); > grad[1] = get_vanvliet(0,1,'y'); > } break; > default : { > > ># 25988 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 25988 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = (Inc - Ipc)/2; > *(ptrd1++) = (Icn - Icp)/2; > } > } > } > } > if (!axes) return grad; > CImgList<Tfloat> res; > for (unsigned int l = 0; axes[l]; ++l) { > const char axis = cimg::uncase(axes[l]); > switch (axis) { > case 'x' : res.insert(grad[0]); break; > case 'y' : res.insert(grad[1]); break; > case 'z' : res.insert(grad[2]); break; > } > } > grad.assign(); > return res; > } > > > > > > CImgList<Tfloat> get_hessian(const char *const axes=0) const { > CImgList<Tfloat> res; > const char *naxes = axes, *const def_axes2d = "xxxyyy", *const def_axes3d = "xxxyxzyyyzzz"; > if (!axes) naxes = _depth>1?def_axes3d:def_axes2d; > const unsigned int lmax = std::strlen(naxes); > if (lmax%2) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_hessian(): Invalid specified axes '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > naxes); > > res.assign(lmax/2,_width,_height,_depth,_spectrum); > if (!cimg::strcasecmp(naxes,def_axes3d)) { > > > ># 26034 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26034 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const unsigned long off = c*_width*_height*_depth; > Tfloat > *ptrd0 = res[0]._data + off, *ptrd1 = res[1]._data + off, *ptrd2 = res[2]._data + off, > *ptrd3 = res[3]._data + off, *ptrd4 = res[4]._data + off, *ptrd5 = res[5]._data + off; > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > *(ptrd0++) = Ipcc + Incc - 2*Iccc; > *(ptrd1++) = (Ippc + Innc - Ipnc - Inpc)/4; > *(ptrd2++) = (Ipcp + Incn - Ipcn - Incp)/4; > *(ptrd3++) = Icpc + Icnc - 2*Iccc; > *(ptrd4++) = (Icpp + Icnn - Icpn - Icnp)/4; > *(ptrd5++) = Iccn + Iccp - 2*Iccc; > } > } > } else if (!cimg::strcasecmp(naxes,def_axes2d)) { > > ># 26053 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26053 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > const unsigned long off = c*_width*_height*_depth + z*_width*_height; > Tfloat *ptrd0 = res[0]._data + off, *ptrd1 = res[1]._data + off, *ptrd2 = res[2]._data + off; > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > *(ptrd0++) = Ipc + Inc - 2*Icc; > *(ptrd1++) = (Ipp + Inn - Ipn - Inp)/4; > *(ptrd2++) = Icp + Icn - 2*Icc; > } > } > } else for (unsigned int l = 0; l<lmax; ) { > const unsigned int l2 = l/2; > char axis1 = naxes[l++], axis2 = naxes[l++]; > if (axis1>axis2) cimg::swap(axis1,axis2); > bool valid_axis = false; > if (axis1=='x' && axis2=='x') { > valid_axis = true; > > ># 26073 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26073 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat *ptrd = res[l2].data(0,0,z,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Ipc + Inc - 2*Icc; > } > } > else if (axis1=='x' && axis2=='y') { > valid_axis = true; > > ># 26084 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26084 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat *ptrd = res[l2].data(0,0,z,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = (Ipp + Inn - Ipn - Inp)/4; > } > } > else if (axis1=='x' && axis2=='z') { > valid_axis = true; > > ># 26095 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26095 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res[l2].data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = (Ipcp + Incn - Ipcn - Incp)/4; > } > } > else if (axis1=='y' && axis2=='y') { > valid_axis = true; > > ># 26106 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26106 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > Tfloat *ptrd = res[l2].data(0,0,z,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Icp + Icn - 2*Icc; > } > } > else if (axis1=='y' && axis2=='z') { > valid_axis = true; > > ># 26117 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26117 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res[l2].data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = (Icpp + Icnn - Icpn - Icnp)/4; > } > } > else if (axis1=='z' && axis2=='z') { > valid_axis = true; > > ># 26128 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26128 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res[l2].data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = Iccn + Iccp - 2*Iccc; > } > } > else if (!valid_axis) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_hessian(): Invalid specified axes '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > naxes); > } > return res; > } > > > CImg<T>& laplacian() { > return get_laplacian().move_to(*this); > } > > > CImg<Tfloat> get_laplacian() const { > if (is_empty()) return CImg<Tfloat>(); > CImg<Tfloat> res(_width,_height,_depth,_spectrum); > if (_depth>1) { > > ># 26156 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26156 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res.data(0,0,0,c); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) *(ptrd++) = Incc + Ipcc + Icnc + Icpc + Iccn + Iccp - 6*Iccc; > } > } else if (_height>1) { > > ># 26165 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26165 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res.data(0,0,0,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Inc + Ipc + Icn + Icp - 4*Icc; > } > } else { > > ># 26174 "./CImg.h" >#pragma omp parallel for if (_width>=1048576 && _height*_depth*_spectrum>=2) ># 26174 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd = res.data(0,0,0,c); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) *(ptrd++) = Inc + Ipc - 2*Icc; > } > } > return res; > } > > > > > > CImg<T>& structure_tensors(const unsigned int scheme=2) { > return get_structure_tensors(scheme).move_to(*this); > } > > > CImg<Tfloat> get_structure_tensors(const unsigned int scheme=2) const { > if (is_empty()) return *this; > CImg<Tfloat> res; > if (_depth>1) { > res.assign(_width,_height,_depth,6,0); > switch (scheme) { > case 0 : { > > ># 26202 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26202 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat > *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), > *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ix = (Incc - Ipcc)/2, > iy = (Icnc - Icpc)/2, > iz = (Iccn - Iccp)/2; > *(ptrd0++)+=ix*ix; > *(ptrd1++)+=ix*iy; > *(ptrd2++)+=ix*iz; > *(ptrd3++)+=iy*iy; > *(ptrd4++)+=iy*iz; > *(ptrd5++)+=iz*iz; > } > } > } break; > case 1 : { > > ># 26225 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26225 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat > *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), > *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Incc - Iccc, ixb = Iccc - Ipcc, > iyf = Icnc - Iccc, iyb = Iccc - Icpc, > izf = Iccn - Iccc, izb = Iccc - Iccp; > *(ptrd0++)+=(ixf*ixf + 2*ixf*ixb + ixb*ixb)/4; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; > *(ptrd3++)+=(iyf*iyf + 2*iyf*iyb + iyb*iyb)/4; > *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; > *(ptrd5++)+=(izf*izf + 2*izf*izb + izb*izb)/4; > } > } > } break; > default : { > > ># 26248 "./CImg.h" >#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) ># 26248 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat > *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), > *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Incc - Iccc, ixb = Iccc - Ipcc, > iyf = Icnc - Iccc, iyb = Iccc - Icpc, > izf = Iccn - Iccc, izb = Iccc - Iccp; > *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; > *(ptrd3++)+=(iyf*iyf + iyb*iyb)/2; > *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; > *(ptrd5++)+=(izf*izf + izb*izb)/2; > } > } > } break; > } > } else { > res.assign(_width,_height,_depth,3,0); > switch (scheme) { > case 0 : { > > ># 26275 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26275 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ix = (Inc - Ipc)/2, > iy = (Icn - Icp)/2; > *(ptrd0++)+=ix*ix; > *(ptrd1++)+=ix*iy; > *(ptrd2++)+=iy*iy; > } > } > } break; > case 1 : { > > ># 26292 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26292 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Inc - Icc, ixb = Icc - Ipc, > iyf = Icn - Icc, iyb = Icc - Icp; > *(ptrd0++)+=(ixf*ixf + 2*ixf*ixb + ixb*ixb)/4; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(iyf*iyf + 2*iyf*iyb + iyb*iyb)/4; > } > } > } break; > default : { > > ># 26309 "./CImg.h" >#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) ># 26309 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) { > const Tfloat > ixf = Inc - Icc, ixb = Icc - Ipc, > iyf = Icn - Icc, iyb = Icc - Icp; > *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; > *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; > *(ptrd2++)+=(iyf*iyf + iyb*iyb)/2; > } > } > } break; > } > } > return res; > } ># 26337 "./CImg.h" > CImg<T>& diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) { > CImg<Tfloat> res; > const float nsharpness = cimg::max(sharpness,1e-5f), power1 = (is_sqrt?0.5f:1)*nsharpness, power2 = power1/(1e-7f+1-anisotropy); > blur(alpha).normalize(0,(T)255); > > if (_depth>1) { > get_structure_tensors().move_to(res).blur(sigma); > > ># 26346 "./CImg.h" >#pragma omp parallel for collapse(2) if(_width>=256 && _height*_depth>=256) ># 26346 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > Tfloat > *ptrd0 = res.data(0,y,z,0), *ptrd1 = res.data(0,y,z,1), *ptrd2 = res.data(0,y,z,2), > *ptrd3 = res.data(0,y,z,3), *ptrd4 = res.data(0,y,z,4), *ptrd5 = res.data(0,y,z,5); > CImg<floatT> val(3), vec(3,3); > for (int x = 0; x<(int)((*this)._width); ++x) { > res.get_tensor_at(x,y,z).symmetric_eigen(val,vec); > const float > _l1 = val[2], _l2 = val[1], _l3 = val[0], > l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, l3 = _l3>0?_l3:0, > ux = vec(0,0), uy = vec(0,1), uz = vec(0,2), > vx = vec(1,0), vy = vec(1,1), vz = vec(1,2), > wx = vec(2,0), wy = vec(2,1), wz = vec(2,2), > n1 = (float)std::pow(1+l1+l2+l3,-power1), > n2 = (float)std::pow(1+l1+l2+l3,-power2); > *(ptrd0++) = n1*(ux*ux + vx*vx) + n2*wx*wx; > *(ptrd1++) = n1*(ux*uy + vx*vy) + n2*wx*wy; > *(ptrd2++) = n1*(ux*uz + vx*vz) + n2*wx*wz; > *(ptrd3++) = n1*(uy*uy + vy*vy) + n2*wy*wy; > *(ptrd4++) = n1*(uy*uz + vy*vz) + n2*wy*wz; > *(ptrd5++) = n1*(uz*uz + vz*vz) + n2*wz*wz; > } > } > } else { > get_structure_tensors().move_to(res).blur(sigma); > > ># 26374 "./CImg.h" >#pragma omp parallel for if(_width>=256 && _height>=256) ># 26374 "./CImg.h" > > > for (int y = 0; y<(int)((*this)._height); ++y) { > Tfloat *ptrd0 = res.data(0,y,0,0), *ptrd1 = res.data(0,y,0,1), *ptrd2 = res.data(0,y,0,2); > CImg<floatT> val(2), vec(2,2); > for (int x = 0; x<(int)((*this)._width); ++x) { > res.get_tensor_at(x,y).symmetric_eigen(val,vec); > const float > _l1 = val[1], _l2 = val[0], > l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, > ux = vec(1,0), uy = vec(1,1), > vx = vec(0,0), vy = vec(0,1), > n1 = (float)std::pow(1+l1+l2,-power1), > n2 = (float)std::pow(1+l1+l2,-power2); > *(ptrd0++) = n1*ux*ux + n2*vx*vx; > *(ptrd1++) = n1*ux*uy + n2*vx*vy; > *(ptrd2++) = n1*uy*uy + n2*vy*vy; > } > } > } > return res.move_to(*this); > } > > > CImg<Tfloat> get_diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, > const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) const { > return CImg<Tfloat>(*this,false).diffusion_tensors(sharpness,anisotropy,alpha,sigma,is_sqrt); > } ># 26412 "./CImg.h" > CImg<T>& displacement(const CImg<T>& source, const float smoothness=0.1f, const float precision=5.0f, > const unsigned int nb_scales=0, const unsigned int iteration_max=10000, > const bool is_backward=false) { > return get_displacement(source,smoothness,precision,nb_scales,iteration_max,is_backward).move_to(*this); > } > > > CImg<Tfloat> get_displacement(const CImg<T>& source, > const float smoothness=0.1f, const float precision=5.0f, > const unsigned int nb_scales=0, const unsigned int iteration_max=10000, > const bool is_backward=false) const { > if (is_empty() || !source) return +*this; > if (!is_sameXYZC(source)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "displacement(): Instance and source image (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > source._width,source._height,source._depth,source._spectrum,source._data); > if (precision<0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "displacement(): Invalid specified precision %g " > "(should be >=0)", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > precision); > const unsigned int _nb_scales = nb_scales>0?nb_scales:(unsigned int)(2*std::log((double)(cimg::max(_width,_height)))); > const float _precision = (float)std::pow(10.0,-(double)precision); > float sm, sM = source.max_min(sm), tm, tM = max_min(tm); > const float sdelta = sm==sM?1:(sM - sm), tdelta = tm==tM?1:(tM - tm); > const bool is_3d = source._depth>1; > CImg<floatT> U; > > for (int scale = _nb_scales-1; scale>=0; --scale) { > const float factor = (float)std::pow(1.5,(double)scale); > const unsigned int > _sw = (unsigned int)(_width/factor), sw = _sw?_sw:1, > _sh = (unsigned int)(_height/factor), sh = _sh?_sh:1, > _sd = (unsigned int)(_depth/factor), sd = _sd?_sd:1; > if (sw<5 && sh<5 && (!is_3d || sd<5)) continue; > const CImg<Tfloat> > I1 = (source.get_resize(sw,sh,sd,-100,2)-=sm)/=sdelta, > I2 = (get_resize(I1,2)-=tm)/=tdelta; > if (U) (U*=1.5f).resize(I2._width,I2._height,I2._depth,-100,3); > else U.assign(I2._width,I2._height,I2._depth,is_3d?3:2,0); > float dt = 2, energy = cimg::type<float>::max(); > const CImgList<Tfloat> dI = is_backward?I1.get_gradient():I2.get_gradient(); > > for (unsigned int iteration = 0; iteration<iteration_max; ++iteration) { > float _energy = 0; > if (is_3d) { > if (smoothness>=0) for (int z = 0, _p1z = 0, _n1z = 1>=((U)._depth)?(int)((U)._depth)-1:1; _n1z<(int)((U)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,z,0):x + U(x,y,z,0), > Y = is_backward?y - U(x,y,z,1):y + U(x,y,z,1), > Z = is_backward?z - U(x,y,z,2):z + U(x,y,z,2); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXYZ(X,Y,Z,c) - I2(x,y,z,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,z,c) - I2.linear_atXYZ(X,Y,Z,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,z,c) - U(_p1x,y,z,c)), > Uy = 0.5f*(U(x,_n1y,z,c) - U(x,_p1y,z,c)), > Uz = 0.5f*(U(x,y,_n1z,c) - U(x,y,_p1z,c)), > Uxx = U(_n1x,y,z,c) + U(_p1x,y,z,c), > Uyy = U(x,_n1y,z,c) + U(x,_p1y,z,c), > Uzz = U(x,y,_n1z,c) + U(x,y,_p1z,c); > U(x,y,z,c) = (float)(U(x,y,z,c) + dt*(delta_I*dI[c].linear_atXYZ(X,Y,Z) + smoothness* ( Uxx + Uyy + Uzz)))/(1+6*smoothness*dt); > _energy_regul+=Ux*Ux + Uy*Uy + Uz*Uz; > } > _energy+=delta_I*delta_I + smoothness*_energy_regul; > } else { > const float nsmoothness = -smoothness; > for (int z = 0, _p1z = 0, _n1z = 1>=((U)._depth)?(int)((U)._depth)-1:1; _n1z<(int)((U)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,z,0):x + U(x,y,z,0), > Y = is_backward?y - U(x,y,z,1):y + U(x,y,z,1), > Z = is_backward?z - U(x,y,z,2):z + U(x,y,z,2); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXYZ(X,Y,Z,c) - I2(x,y,z,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,z,c) - I2.linear_atXYZ(X,Y,Z,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,z,c) - U(_p1x,y,z,c)), > Uy = 0.5f*(U(x,_n1y,z,c) - U(x,_p1y,z,c)), > Uz = 0.5f*(U(x,y,_n1z,c) - U(x,y,_p1z,c)), > N2 = Ux*Ux + Uy*Uy + Uz*Uz, > N = std::sqrt(N2), > N3 = 1e-5f + N2*N, > coef_a = (1 - Ux*Ux/N2)/N, > coef_b = -2*Ux*Uy/N3, > coef_c = -2*Ux*Uz/N3, > coef_d = (1 - Uy*Uy/N2)/N, > coef_e = -2*Uy*Uz/N3, > coef_f = (1 - Uz*Uz/N2)/N, > Uxx = U(_n1x,y,z,c) + U(_p1x,y,z,c), > Uyy = U(x,_n1y,z,c) + U(x,_p1y,z,c), > Uzz = U(x,y,_n1z,c) + U(x,y,_p1z,c), > Uxy = 0.25f*(U(_n1x,_n1y,z,c) + U(_p1x,_p1y,z,c) - U(_n1x,_p1y,z,c) - U(_n1x,_p1y,z,c)), > Uxz = 0.25f*(U(_n1x,y,_n1z,c) + U(_p1x,y,_p1z,c) - U(_n1x,y,_p1z,c) - U(_n1x,y,_p1z,c)), > Uyz = 0.25f*(U(x,_n1y,_n1z,c) + U(x,_p1y,_p1z,c) - U(x,_n1y,_p1z,c) - U(x,_n1y,_p1z,c)); > U(x,y,z,c) = (float)(U(x,y,z,c) + dt*(delta_I*dI[c].linear_atXYZ(X,Y,Z) + > nsmoothness* ( coef_a*Uxx + coef_b*Uxy + coef_c*Uxz + coef_d*Uyy + coef_e*Uyz + coef_f*Uzz )) > )/(1+2*(coef_a+coef_d+coef_f)*nsmoothness*dt); > _energy_regul+=N; > } > _energy+=delta_I*delta_I + nsmoothness*_energy_regul; > } > } > } else { > if (smoothness>=0) for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,0):x + U(x,y,0), > Y = is_backward?y - U(x,y,1):y + U(x,y,1); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXY(X,Y,c) - I2(x,y,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,c) - I2.linear_atXY(X,Y,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,c) - U(_p1x,y,c)), > Uy = 0.5f*(U(x,_n1y,c) - U(x,_p1y,c)), > Uxx = U(_n1x,y,c) + U(_p1x,y,c), > Uyy = U(x,_n1y,c) + U(x,_p1y,c); > U(x,y,c) = (float)(U(x,y,c) + dt*(delta_I*dI[c].linear_atXY(X,Y) + smoothness*( Uxx + Uyy )))/(1+4*smoothness*dt); > _energy_regul+=Ux*Ux + Uy*Uy; > } > _energy+=delta_I*delta_I + smoothness*_energy_regul; > } else { > const float nsmoothness = -smoothness; > for (int y = 0, _p1y = 0, _n1y = 1>=((U)._height)?(int)((U)._height)-1:1; _n1y<(int)((U)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = 1>=((U)._width)?(int)((U)._width)-1:1; _n1x<(int)((U)._width) || x==--_n1x; _p1x = x++, ++_n1x) { > const float > X = is_backward?x - U(x,y,0):x + U(x,y,0), > Y = is_backward?y - U(x,y,1):y + U(x,y,1); > float delta_I = 0, _energy_regul = 0; > if (is_backward) for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1.linear_atXY(X,Y,c) - I2(x,y,c)); > else for (int c = 0; c<(int)((I2)._spectrum); ++c) delta_I+=(float)(I1(x,y,c) - I2.linear_atXY(X,Y,c)); > for (int c = 0; c<(int)((U)._spectrum); ++c) { > const float > Ux = 0.5f*(U(_n1x,y,c) - U(_p1x,y,c)), > Uy = 0.5f*(U(x,_n1y,c) - U(x,_p1y,c)), > N2 = Ux*Ux + Uy*Uy, > N = std::sqrt(N2), > N3 = 1e-5f + N2*N, > coef_a = Uy*Uy/N3, > coef_b = -2*Ux*Uy/N3, > coef_c = Ux*Ux/N3, > Uxx = U(_n1x,y,c) + U(_p1x,y,c), > Uyy = U(x,_n1y,c) + U(x,_p1y,c), > Uxy = 0.25f*(U(_n1x,_n1y,c) + U(_p1x,_p1y,c) - U(_n1x,_p1y,c) - U(_n1x,_p1y,c)); > U(x,y,c) = (float)(U(x,y,c) + dt*(delta_I*dI[c].linear_atXY(X,Y) + nsmoothness*( coef_a*Uxx + coef_b*Uxy + coef_c*Uyy )))/(1+2*(coef_a+coef_c)*nsmoothness*dt); > _energy_regul+=N; > } > _energy+=delta_I*delta_I + nsmoothness*_energy_regul; > } > } > } > const float d_energy = (_energy - energy)/(sw*sh*sd); > if (d_energy<=0 && -d_energy<_precision) break; > if (d_energy>0) dt*=0.5f; > energy = _energy; > } > } > return U; > } ># 26586 "./CImg.h" > CImg<T>& distance(const T value, const unsigned int metric=2) { > if (is_empty()) return *this; > bool is_value = false; > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) *ptr = *ptr==value?is_value=true,0:(T)999999999; > if (!is_value) return fill(cimg::type<T>::max()); > switch (metric) { > case 0 : return _distance_core(_distance_sep_cdt,_distance_dist_cdt); > case 1 : return _distance_core(_distance_sep_mdt,_distance_dist_mdt); > case 3 : return _distance_core(_distance_sep_edt,_distance_dist_edt); > default : return _distance_core(_distance_sep_edt,_distance_dist_edt).sqrt(); > } > return *this; > } > > > CImg<Tfloat> get_distance(const T value, const unsigned int metric=2) const { > return CImg<Tfloat>(*this,false).distance((Tfloat)value,metric); > } > > static long _distance_sep_edt(const long i, const long u, const long *const g) { > return (u*u-i*i+g[u]-g[i])/(2*(u-i)); > } > > static long _distance_dist_edt(const long x, const long i, const long *const g) { > return (x-i)*(x-i) + g[i]; > } > > static long _distance_sep_mdt(const long i, const long u, const long *const g) { > return (u-i<=g[u]-g[i]?999999999:(g[u]-g[i]+u+i)/2); > } > > static long _distance_dist_mdt(const long x, const long i, const long *const g) { > return (x<i?i-x:x-i) + g[i]; > } > > static long _distance_sep_cdt(const long i, const long u, const long *const g) { > const long h = (i+u)/2; > if (g[i]<=g[u]) { return h<i+g[u]?i+g[u]:h; } > return h<u-g[i]?h:u-g[i]; > } > > static long _distance_dist_cdt(const long x, const long i, const long *const g) { > const long d = x<i?i-x:x-i; > return d<g[i]?g[i]:d; > } > > static void _distance_scan(const unsigned int len, > const long *const g, > long (*const sep)(const long, const long, const long *const), > long (*const f)(const long, const long, const long *const), > long *const s, > long *const t, > long *const dt) { > long q = s[0] = t[0] = 0; > for (int u = 1; u<(int)len; ++u) { > while ((q>=0) && f(t[q],s[q],g)>f(t[q],u,g)) { --q; } > if (q<0) { q = 0; s[0] = u; } > else { const long w = 1 + sep(s[q], u, g); if (w<(long)len) { ++q; s[q] = u; t[q] = w; }} > } > for (int u = (int)len-1; u>=0; --u) { dt[u] = f(u,s[q],g); if (u==t[q]) --q; } > } > > CImg<T>& _distance_core(long (*const sep)(const long, const long, const long *const), > long (*const f)(const long, const long, const long *const)) { > const unsigned long wh = (unsigned long)_width*_height; > > ># 26652 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 26652 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > CImg<longT> g(_width), dt(_width), s(_width), t(_width); > CImg<T> img = get_shared_channel(c); > > ># 26658 "./CImg.h" >#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) firstprivate(g,dt,s,t) ># 26658 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) g[x] = (long)img(x,y,z,0,wh); > _distance_scan(_width,g,sep,f,s,t,dt); > for (int x = 0; x<(int)((*this)._width); ++x) img(x,y,z,0,wh) = (T)dt[x]; > } > if (_height>1) { > g.assign(_height); dt.assign(_height); s.assign(_height); t.assign(_height); > > ># 26668 "./CImg.h" >#pragma omp parallel for collapse(2) if (_height>=512 && _width*_depth>=16) firstprivate(g,dt,s,t) ># 26668 "./CImg.h" > > > for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > for (int y = 0; y<(int)((*this)._height); ++y) g[y] = (long)img(x,y,z,0,wh); > _distance_scan(_height,g,sep,f,s,t,dt); > for (int y = 0; y<(int)((*this)._height); ++y) img(x,y,z,0,wh) = (T)dt[y]; > } > } > if (_depth>1) { > g.assign(_depth); dt.assign(_depth); s.assign(_depth); t.assign(_depth); > > ># 26679 "./CImg.h" >#pragma omp parallel for collapse(2) if (_depth>=512 && _width*_height>=16) firstprivate(g,dt,s,t) ># 26679 "./CImg.h" > > > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (int z = 0; z<(int)((*this)._depth); ++z) g[z] = (long)img(x,y,z,0,wh); > _distance_scan(_depth,g,sep,f,s,t,dt); > for (int z = 0; z<(int)((*this)._depth); ++z) img(x,y,z,0,wh) = (T)dt[z]; > } > } > } > return *this; > } > > > > > > > > template<typename t> > CImg<T>& distance(const T value, const CImg<t>& metric_mask) { > if (is_empty()) return *this; > bool is_value = false; > for (T *ptr = (*this)._data, *_maxptr = (*this)._data + (*this).size(); ptr<_maxptr; ++ptr) *ptr = *ptr==value?is_value=true,0:(T)999999999; > if (!is_value) return fill(cimg::type<T>::max()); > const unsigned long wh = (unsigned long)_width*_height; > > ># 26705 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) ># 26705 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > CImg<T> img = get_shared_channel(c); > > ># 26710 "./CImg.h" >#pragma omp parallel for collapse(3) if (_width*_height*_depth>=1024) ># 26710 "./CImg.h" > > > for (int dz = 0; dz<(int)((metric_mask)._depth); ++dz) for (int dy = 0; dy<(int)((metric_mask)._height); ++dy) for (int dx = 0; dx<(int)((metric_mask)._width); ++dx) { > const t weight = metric_mask(dx,dy,dz); > if (weight) { > for (int z = dz, nz = 0; z<depth(); ++z,++nz) { > for (int y = dy , ny = 0; y<height(); ++y,++ny) { > for (int x = dx, nx = 0; x<width(); ++x,++nx) { > const T dd = img(nx,ny,nz,0,wh) + weight; > if (dd<img(x,y,z,0,wh)) img(x,y,z,0,wh) = dd; > } > } > } > for (int z = depth() - 1 - dz, nz = depth() - 1; z>=0; --z,--nz) { > for (int y = height() - 1 - dy, ny = height() - 1; y>=0; --y,--ny) { > for (int x = width() - 1 - dx, nx = width() - 1; x>=0; --x,--nx) { > const T dd = img(nx,ny,nz,0,wh) + weight; > if (dd<img(x,y,z,0,wh)) img(x,y,z,0,wh) = dd; > } > } > } > } > } > } > return *this; > } > > > template<typename t> > CImg<Tfloat> get_distance(const T value, const CImg<t>& metric_mask) const { > return CImg<Tfloat>(*this,false).distance(value,metric_mask); > } > > > > > > > > template<typename t, typename to> > CImg<T>& distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity, CImg<to>& return_path) { > return get_distance_dijkstra(value,metric,is_high_connectivity,return_path).move_to(*this); > } > > > template<typename t, typename to> > CImg<typename cimg::superset<t,long>::type> get_distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity, CImg<to>& return_path) const { > if (is_empty()) return return_path.assign(); > if (!is_sameXYZ(metric)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "distance_dijkstra(): image instance and metric map (%u,%u,%u,%u) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > metric._width,metric._height,metric._depth,metric._spectrum); > typedef typename cimg::superset<t,long>::type td; > CImg<td> result(_width,_height,_depth,_spectrum), Q; > CImg<boolT> is_queued(_width,_height,_depth,1); > if (return_path) return_path.assign(_width,_height,_depth,_spectrum); > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> img = get_shared_channel(c); > const CImg<t> met = metric.get_shared_channel(c%metric._spectrum); > CImg<td> res = result.get_shared_channel(c); > CImg<to> path = return_path?return_path.get_shared_channel(c):CImg<to>(); > unsigned int sizeQ = 0; > > > is_queued.fill(0); > for (int z = 0; z<(int)((img)._depth); ++z) for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) if (img(x,y,z)==value) { > Q._priority_queue_insert(is_queued,sizeQ,0,x,y,z); > res(x,y,z) = 0; > if (path) path(x,y,z) = (to)0; > } > > > while (sizeQ) { > > > const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); > const td P = (td)-Q(0,0); > Q._priority_queue_remove(sizeQ); > > > td npot = 0; > if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x-1,y,z)+P),x-1,y,z)) { > res(x-1,y,z) = npot; if (path) path(x-1,y,z) = (to)2; > } > if (x+1<width() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x+1,y,z)+P),x+1,y,z)) { > res(x+1,y,z) = npot; if (path) path(x+1,y,z) = (to)1; > } > if (y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y-1,z)+P),x,y-1,z)) { > res(x,y-1,z) = npot; if (path) path(x,y-1,z) = (to)8; > } > if (y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y+1,z)+P),x,y+1,z)) { > res(x,y+1,z) = npot; if (path) path(x,y+1,z) = (to)4; > } > if (z-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z-1)+P),x,y,z-1)) { > res(x,y,z-1) = npot; if (path) path(x,y,z-1) = (to)32; > } > if (z+1<depth() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z+1)+P),x,y,z+1)) { > res(x,y,z+1) = npot; if (path) path(x,y,z+1) = (to)16; > } > > if (is_high_connectivity) { > const float sqrt2 = std::sqrt(2.0f), sqrt3 = std::sqrt(3.0f); > > > if (x-1>=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y-1,z)+P)),x-1,y-1,z)) { > res(x-1,y-1,z) = npot; if (path) path(x-1,y-1,z) = (to)10; > } > if (x+1<width() && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y-1,z)+P)),x+1,y-1,z)) { > res(x+1,y-1,z) = npot; if (path) path(x+1,y-1,z) = (to)9; > } > if (x-1>=0 && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y+1,z)+P)),x-1,y+1,z)) { > res(x-1,y+1,z) = npot; if (path) path(x-1,y+1,z) = (to)6; > } > if (x+1<width() && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y+1,z)+P)),x+1,y+1,z)) { > res(x+1,y+1,z) = npot; if (path) path(x+1,y+1,z) = (to)5; > } > > if (z-1>=0) { > if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z-1)+P)),x-1,y,z-1)) { > res(x-1,y,z-1) = npot; if (path) path(x-1,y,z-1) = (to)34; > } > if (x+1<width() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y,z-1)+P)),x+1,y,z-1)) { > res(x+1,y,z-1) = npot; if (path) path(x+1,y,z-1) = (to)33; > } > if (y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z-1)+P)),x,y-1,z-1)) { > res(x,y-1,z-1) = npot; if (path) path(x,y-1,z-1) = (to)40; > } > if (y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y+1,z-1)+P)),x,y+1,z-1)) { > res(x,y+1,z-1) = npot; if (path) path(x,y+1,z-1) = (to)36; > } > if (x-1>=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z-1)+P)),x-1,y-1,z-1)) { > res(x-1,y-1,z-1) = npot; if (path) path(x-1,y-1,z-1) = (to)42; > } > if (x+1<width() && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z-1)+P)),x+1,y-1,z-1)) { > res(x+1,y-1,z-1) = npot; if (path) path(x+1,y-1,z-1) = (to)41; > } > if (x-1>=0 && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y+1,z-1)+P)),x-1,y+1,z-1)) { > res(x-1,y+1,z-1) = npot; if (path) path(x-1,y+1,z-1) = (to)38; > } > if (x+1<width() && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y+1,z-1)+P)),x+1,y+1,z-1)) { > res(x+1,y+1,z-1) = npot; if (path) path(x+1,y+1,z-1) = (to)37; > } > } > > if (z+1<depth()) { > if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z+1)+P)),x-1,y,z+1)) { > res(x-1,y,z+1) = npot; if (path) path(x-1,y,z+1) = (to)18; > } > if (x+1<width() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y,z+1)+P)),x+1,y,z+1)) { > res(x+1,y,z+1) = npot; if (path) path(x+1,y,z+1) = (to)17; > } > if (y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z+1)+P)),x,y-1,z+1)) { > res(x,y-1,z+1) = npot; if (path) path(x,y-1,z+1) = (to)24; > } > if (y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y+1,z+1)+P)),x,y+1,z+1)) { > res(x,y+1,z+1) = npot; if (path) path(x,y+1,z+1) = (to)20; > } > if (x-1>=0 && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z+1)+P)),x-1,y-1,z+1)) { > res(x-1,y-1,z+1) = npot; if (path) path(x-1,y-1,z+1) = (to)26; > } > if (x+1<width() && y-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z+1)+P)),x+1,y-1,z+1)) { > res(x+1,y-1,z+1) = npot; if (path) path(x+1,y-1,z+1) = (to)25; > } > if (x-1>=0 && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y+1,z+1)+P)),x-1,y+1,z+1)) { > res(x-1,y+1,z+1) = npot; if (path) path(x-1,y+1,z+1) = (to)22; > } > if (x+1<width() && y+1<height() && Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y+1,z+1)+P)),x+1,y+1,z+1)) { > res(x+1,y+1,z+1) = npot; if (path) path(x+1,y+1,z+1) = (to)21; > } > } > } > } > } > return result; > } > > > template<typename t> > CImg<T>& distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity=false) { > return get_distance_dijkstra(value,metric,is_high_connectivity).move_to(*this); > } > > > template<typename t> > CImg<Tfloat> get_distance_dijkstra(const T value, const CImg<t>& metric, const bool is_high_connectivity=false) const { > CImg<T> return_path; > return get_distance_dijkstra(value,metric,is_high_connectivity,return_path); > } > > > > > > > template<typename t> > CImg<T>& distance_eikonal(const T value, const CImg<t>& metric) { > return get_distance_eikonal(value,metric).move_to(*this); > } > > > template<typename t> > CImg<Tfloat> get_distance_eikonal(const T value, const CImg<t>& metric) const { > if (is_empty()) return *this; > if (!is_sameXYZ(metric)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "distance_eikonal(): image instance and metric map (%u,%u,%u,%u) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > metric._width,metric._height,metric._depth,metric._spectrum); > CImg<Tfloat> result(_width,_height,_depth,_spectrum,cimg::type<Tfloat>::max()), Q; > CImg<charT> state(_width,_height,_depth); > > > ># 26924 "./CImg.h" >#pragma omp parallel for if (_spectrum>=2) firstprivate(Q,state) ># 26924 "./CImg.h" > > > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const CImg<T> img = get_shared_channel(c); > const CImg<t> met = metric.get_shared_channel(c%metric._spectrum); > CImg<Tfloat> res = result.get_shared_channel(c); > unsigned int sizeQ = 0; > state.fill(-1); > > > Tfloat *ptr1 = res._data; char *ptr2 = state._data; > for (T *ptr0 = (img)._data, *_maxptr0 = (img)._data + (img).size(); ptr0<_maxptr0; ++ptr0) { if (*ptr0==value) { *ptr1 = 0; *ptr2 = 1; } ++ptr1; ++ptr2; } > > > ptr2 = state._data; > for (int z = 0; z<(int)((img)._depth); ++z) for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) if (*(ptr2++)==1) { > if (x-1>=0 && state(x-1,y,z)==-1) { > const Tfloat dist = res(x-1,y,z) = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x-1,y,z); > } > if (x+1<width() && state(x+1,y,z)==-1) { > const Tfloat dist = res(x+1,y,z) = __distance_eikonal(res,met(x+1,y,z),x+1,y,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x+1,y,z); > } > if (y-1>=0 && state(x,y-1,z)==-1) { > const Tfloat dist = res(x,y-1,z) = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y-1,z); > } > if (y+1<height() && state(x,y+1,z)==-1) { > const Tfloat dist = res(x,y+1,z) = __distance_eikonal(res,met(x,y+1,z),x,y+1,z); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y+1,z); > } > if (z-1>=0 && state(x,y,z-1)==-1) { > const Tfloat dist = res(x,y,z-1) = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z-1); > } > if (z+1<depth() && state(x,y,z+1)==-1) { > const Tfloat dist = res(x,y,z+1) = __distance_eikonal(res,met(x,y,z+1),x,y,z+1); > Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z+1); > } > } > > > while (sizeQ) { > int x = -1, y = -1, z = -1; > while (sizeQ && x<0) { > x = (int)Q(0,1); y = (int)Q(0,2); z = (int)Q(0,3); > Q._priority_queue_remove(sizeQ); > if (state(x,y,z)==1) x = -1; else state(x,y,z) = 1; > } > if (x>=0) { > if (x-1>=0 && state(x-1,y,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); > if (dist<res(x-1,y,z)) { res(x-1,y,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x-1,y,z); } > } > if (x+1<width() && state(x+1,y,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x+1,y,z),x+1,y,z); > if (dist<res(x+1,y,z)) { res(x+1,y,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x+1,y,z); } > } > if (y-1>=0 && state(x,y-1,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); > if (dist<res(x,y-1,z)) { res(x,y-1,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y-1,z); } > } > if (y+1<height() && state(x,y+1,z)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y+1,z),x,y+1,z); > if (dist<res(x,y+1,z)) { res(x,y+1,z) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y+1,z); } > } > if (z-1>=0 && state(x,y,z-1)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); > if (dist<res(x,y,z-1)) { res(x,y,z-1) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z-1); } > } > if (z+1<depth() && state(x,y,z+1)!=1) { > const Tfloat dist = __distance_eikonal(res,met(x,y,z+1),x,y,z+1); > if (dist<res(x,y,z+1)) { res(x,y,z+1) = dist; Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z+1); } > } > } > } > } > return result; > } > > > Tfloat __distance_eikonal(const CImg<Tfloat>& res, const Tfloat P, const int x=0, const int y=0, const int z=0) const { > const T M = cimg::type<T>::max(); > T T1 = cimg::min(x-1>=0?res(x-1,y,z):M,x+1<width()?res(x+1,y,z):M); > Tfloat root = 0; > if (_depth>1) { > T > T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1<height()?res(x,y+1,z):M), > T3 = cimg::min(z-1>=0?res(x,y,z-1):M,z+1<depth()?res(x,y,z+1):M); > if (T1>T2) cimg::swap(T1,T2); > if (T2>T3) cimg::swap(T2,T3); > if (T1>T2) cimg::swap(T1,T2); > if (P<=0) return (Tfloat)T1; > if (T3<M && ___distance_eikonal(3,-2*(T1+T2+T3),T1*T1+T2*T2+T3*T3-P*P,root)) return cimg::max((Tfloat)T3,root); > if (T2<M && ___distance_eikonal(2,-2*(T1+T2),T1*T1+T2*T2-P*P,root)) return cimg::max((Tfloat)T2,root); > return P + T1; > } else if (_height>1) { > T T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1<height()?res(x,y+1,z):M); > if (T1>T2) cimg::swap(T1,T2); > if (P<=0) return (Tfloat)T1; > if (T2<M && ___distance_eikonal(2,-2*(T1+T2),T1*T1+T2*T2-P*P,root)) return cimg::max((Tfloat)T2,root); > return P + T1; > } else { > if (P<=0) return (Tfloat)T1; > return P + T1; > } > return 0; > } > > > static bool ___distance_eikonal(const Tfloat a, const Tfloat b, const Tfloat c, Tfloat &root) { > const Tfloat delta = b*b - 4*a*c; > if (delta<0) return false; > root = 0.5f*(-b + std::sqrt(delta))/a; > return true; > } > > > template<typename t> > void _eik_priority_queue_insert(CImg<charT>& state, unsigned int& siz, const t value, const unsigned int x, const unsigned int y, const unsigned int z) { > if (state(x,y,z)>0) return; > state(x,y,z) = 0; > if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } > (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; > for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { > cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); > cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); > } > } > > > > > > > > CImg<T>& distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) { > if (is_empty()) return *this; > CImg<Tfloat> velocity(*this); > for (unsigned int iteration = 0; iteration<nb_iterations; ++iteration) { > Tfloat *ptrd = velocity._data, veloc_max = 0; > if (_depth>1) { > Tfloat I[27]; Tfloat& Ippp = I[0]; Tfloat& Icpp = I[1]; Tfloat& Inpp = I[2]; Tfloat& Ipcp = I[3]; Tfloat& Iccp = I[4]; Tfloat& Incp = I[5]; Tfloat& Ipnp = I[6]; Tfloat& Icnp = I[7]; Tfloat& Innp = I[8]; Tfloat& Ippc = I[9]; Tfloat& Icpc = I[10]; Tfloat& Inpc = I[11]; Tfloat& Ipcc = I[12]; Tfloat& Iccc = I[13]; Tfloat& Incc = I[14]; Tfloat& Ipnc = I[15]; Tfloat& Icnc = I[16]; Tfloat& Innc = I[17]; Tfloat& Ippn = I[18]; Tfloat& Icpn = I[19]; Tfloat& Inpn = I[20]; Tfloat& Ipcn = I[21]; Tfloat& Iccn = I[22]; Tfloat& Incn = I[23]; Tfloat& Ipnn = I[24]; Tfloat& Icnn = I[25]; Tfloat& Innn = I[26]; Ippp = Icpp = Inpp = Ipcp = Iccp = Incp = Ipnp = Icnp = Innp = Ippc = Icpc = Inpc = Ipcc = Iccc = Incc = Ipnc = Icnc = Innc = Ippn = Icpn = Inpn = Ipcn = Iccn = Incn = Ipnn = Icnn = Innn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0, _p1z = 0, _n1z = 1>=((*this)._depth)?(int)((*this)._depth)-1:1; _n1z<(int)((*this)._depth) || z==--_n1z; _p1z = z++, ++_n1z) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,_p1z,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,_p1z,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,_p1z,c)), (I[9] = I[10] = (Tfloat)(*this)(0,_p1y,z,c)), (I[12] = I[13] = (Tfloat)(*this)(0,y,z,c)), (I[15] = I[16] = (Tfloat)(*this)(0,_n1y,z,c)), (I[18] = I[19] = (Tfloat)(*this)(0,_p1y,_n1z,c)), (I[21] = I[22] = (Tfloat)(*this)(0,y,_n1z,c)), (I[24] = I[25] = (Tfloat)(*this)(0,_n1y,_n1z,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,_p1z,c)), (I[5] = (Tfloat)(*this)(_n1x,y,_p1z,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,_p1z,c)), (I[11] = (Tfloat)(*this)(_n1x,_p1y,z,c)), (I[14] = (Tfloat)(*this)(_n1x,y,z,c)), (I[17] = (Tfloat)(*this)(_n1x,_n1y,z,c)), (I[20] = (Tfloat)(*this)(_n1x,_p1y,_n1z,c)), (I[23] = (Tfloat)(*this)(_n1x,y,_n1z,c)), (I[26] = (Tfloat)(*this)(_n1x,_n1y,_n1z,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], _p1x = x++, ++_n1x) if (band_size<=0 || cimg::abs(Iccc)<band_size) { > const Tfloat > gx = (Incc - Ipcc)/2, > gy = (Icnc - Icpc)/2, > gz = (Iccn - Iccp)/2, > sgn = -cimg::sign(Iccc), > ix = gx*sgn>0?(Incc - Iccc):(Iccc - Ipcc), > iy = gy*sgn>0?(Icnc - Iccc):(Iccc - Icpc), > iz = gz*sgn>0?(Iccn - Iccc):(Iccc - Iccp), > ng = (Tfloat)(1e-5f + std::sqrt(gx*gx + gy*gy + gz*gz)), > ngx = gx/ng, > ngy = gy/ng, > ngz = gz/ng, > veloc = sgn*(ngx*ix + ngy*iy + ngz*iz - 1); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } else *(ptrd++) = 0; > } else { > Tfloat I[9]; Tfloat& Ipp = I[0]; Tfloat& Icp = I[1]; Tfloat& Inp = I[2]; Tfloat& Ipc = I[3]; Tfloat& Icc = I[4]; Tfloat& Inc = I[5]; Tfloat& Ipn = I[6]; Tfloat& Icn = I[7]; Tfloat& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0, _p1y = 0, _n1y = 1>=((*this)._height)?(int)((*this)._height)-1:1; _n1y<(int)((*this)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (Tfloat)(*this)(_p1x,_p1y,0,c)), (I[3] = I[4] = (Tfloat)(*this)(0,y,0,c)), (I[6] = I[7] = (Tfloat)(*this)(0,_n1y,0,c)), 1>=(*this)._width?(*this).width()-1:1); (_n1x<(*this).width() && ( (I[2] = (Tfloat)(*this)(_n1x,_p1y,0,c)), (I[5] = (Tfloat)(*this)(_n1x,y,0,c)), (I[8] = (Tfloat)(*this)(_n1x,_n1y,0,c)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) if (band_size<=0 || cimg::abs(Icc)<band_size) { > const Tfloat > gx = (Inc - Ipc)/2, > gy = (Icn - Icp)/2, > sgn = -cimg::sign(Icc), > ix = gx*sgn>0?(Inc - Icc):(Icc - Ipc), > iy = gy*sgn>0?(Icn - Icc):(Icc - Icp), > ng = (Tfloat)(1e-5f + std::sqrt(gx*gx + gy*gy)), > ngx = gx/ng, > ngy = gy/ng, > veloc = sgn*(ngx*ix + ngy*iy - 1); > *(ptrd++) = veloc; > if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; > } else *(ptrd++) = 0; > } > if (veloc_max>0) *this+=(velocity*=time_step/veloc_max); > } > return *this; > } > > > CImg<Tfloat> get_distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) const { > return CImg<Tfloat>(*this,false).distance_eikonal(nb_iterations,band_size,time_step); > } > > > > > > > > CImg<T>& haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) { > return get_haar(axis,invert,nb_scales).move_to(*this); > } > > > CImg<Tfloat> get_haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) const { > if (is_empty() || !nb_scales) return +*this; > CImg<Tfloat> res; > const Tfloat sqrt2 = std::sqrt(2); > if (nb_scales==1) { > switch (cimg::uncase(axis)) { > case 'x' : { > const unsigned int w = _width/2; > if (w) { > if ((w%2) && w!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Sub-image width %u is not even.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > w); > > res.assign(_width,_height,_depth,_spectrum); > if (invert) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (unsigned int x = 0, xw = w, x2 = 0; x<w; ++x, ++xw) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z,c), val1 = (Tfloat)(*this)(xw,y,z,c); > res(x2++,y,z,c) = (val0 - val1)/sqrt2; > res(x2++,y,z,c) = (val0 + val1)/sqrt2; > } > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (unsigned int x = 0, xw = w, x2 = 0; x<w; ++x, ++xw) { > const Tfloat val0 = (Tfloat)(*this)(x2++,y,z,c), val1 = (Tfloat)(*this)(x2++,y,z,c); > res(x,y,z,c) = (val0 + val1)/sqrt2; > res(xw,y,z,c) = (val1 - val0)/sqrt2; > } > } > } else return *this; > } break; > case 'y' : { > const unsigned int h = _height/2; > if (h) { > if ((h%2) && h!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Sub-image height %u is not even.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > h); > > res.assign(_width,_height,_depth,_spectrum); > if (invert) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int y = 0, yh = h, y2 = 0; y<h; ++y, ++yh) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z,c), val1 = (Tfloat)(*this)(x,yh,z,c); > res(x,y2++,z,c) = (val0 - val1)/sqrt2; > res(x,y2++,z,c) = (val0 + val1)/sqrt2; > } > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int y = 0, yh = h, y2 = 0; y<h; ++y, ++yh) { > const Tfloat val0 = (Tfloat)(*this)(x,y2++,z,c), val1 = (Tfloat)(*this)(x,y2++,z,c); > res(x,y,z,c) = (val0 + val1)/sqrt2; > res(x,yh,z,c) = (val1 - val0)/sqrt2; > } > } > } else return *this; > } break; > case 'z' : { > const unsigned int d = _depth/2; > if (d) { > if ((d%2) && d!=1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Sub-image depth %u is not even.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > d); > > res.assign(_width,_height,_depth,_spectrum); > if (invert) for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int z = 0, zd = d, z2 = 0; z<d; ++z, ++zd) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z,c), val1 = (Tfloat)(*this)(x,y,zd,c); > res(x,y,z2++,c) = (val0 - val1)/sqrt2; > res(x,y,z2++,c) = (val0 + val1)/sqrt2; > } > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (unsigned int z = 0, zd = d, z2 = 0; z<d; ++z, ++zd) { > const Tfloat val0 = (Tfloat)(*this)(x,y,z2++,c), val1 = (Tfloat)(*this)(x,y,z2++,c); > res(x,y,z,c) = (val0 + val1)/sqrt2; > res(x,y,zd,c) = (val1 - val0)/sqrt2; > } > } > } else return *this; > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Invalid specified axis '%c' " > "(should be { x | y | z }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } else { > if (invert) { > res.assign(*this); > switch (cimg::uncase(axis)) { > case 'x' : { > unsigned int w = _width; > for (unsigned int s = 1; w && s<nb_scales; ++s) w/=2; > for (w = w?w:1; w<=_width; w*=2) res.draw_image(res.get_crop(0,w-1).get_haar('x',true,1)); > } break; > case 'y' : { > unsigned int h = _width; > for (unsigned int s = 1; h && s<nb_scales; ++s) h/=2; > for (h = h?h:1; h<=_height; h*=2) res.draw_image(res.get_crop(0,0,_width-1,h-1).get_haar('y',true,1)); > } break; > case 'z' : { > unsigned int d = _depth; > for (unsigned int s = 1; d && s<nb_scales; ++s) d/=2; > for (d = d?d:1; d<=_depth; d*=2) res.draw_image(res.get_crop(0,0,0,_width-1,_height-1,d-1).get_haar('z',true,1)); > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Invalid specified axis '%c' " > "(should be { x | y | z }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } else { > res = get_haar(axis,false,1); > switch (cimg::uncase(axis)) { > case 'x' : { > for (unsigned int s = 1, w = _width/2; w && s<nb_scales; ++s, w/=2) res.draw_image(res.get_crop(0,w-1).get_haar('x',false,1)); > } break; > case 'y' : { > for (unsigned int s = 1, h = _height/2; h && s<nb_scales; ++s, h/=2) res.draw_image(res.get_crop(0,0,_width-1,h-1).get_haar('y',false,1)); > } break; > case 'z' : { > for (unsigned int s = 1, d = _depth/2; d && s<nb_scales; ++s, d/=2) res.draw_image(res.get_crop(0,0,0,_width-1,_height-1,d-1).get_haar('z',false,1)); > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "haar(): Invalid specified axis '%c' " > "(should be { x | y | z }).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > axis); > } > } > } > return res; > } > > > > > > > CImg<T>& haar(const bool invert=false, const unsigned int nb_scales=1) { > return get_haar(invert,nb_scales).move_to(*this); > } > > > CImg<Tfloat> get_haar(const bool invert=false, const unsigned int nb_scales=1) const { > CImg<Tfloat> res; > if (nb_scales==1) { > if (_width>1) get_haar('x',invert,1).move_to(res); > if (_height>1) { if (res) res.haar('y',invert,1); else get_haar('y',invert,1).move_to(res); } > if (_depth>1) { if (res) res.haar('z',invert,1); else get_haar('z',invert,1).move_to(res); } > if (res) return res; > } else { > if (invert) { > res.assign(*this); > if (_width>1) { > if (_height>1) { > if (_depth>1) { > unsigned int w = _width, h = _height, d = _depth; for (unsigned int s = 1; w && h && d && s<nb_scales; ++s) { w/=2; h/=2; d/=2; } > for (w = w?w:1, h = h?h:1, d = d?d:1; w<=_width && h<=_height && d<=_depth; w*=2, h*=2, d*=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,d-1).get_haar(true,1)); > } else { > unsigned int w = _width, h = _height; for (unsigned int s = 1; w && h && s<nb_scales; ++s) { w/=2; h/=2; } > for (w = w?w:1, h = h?h:1; w<=_width && h<=_height; w*=2, h*=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,0).get_haar(true,1)); > } > } else { > if (_depth>1) { > unsigned int w = _width, d = _depth; for (unsigned int s = 1; w && d && s<nb_scales; ++s) { w/=2; d/=2; } > for (w = w?w:1, d = d?d:1; w<=_width && d<=_depth; w*=2, d*=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,d-1).get_haar(true,1)); > } else { > unsigned int w = _width; for (unsigned int s = 1; w && s<nb_scales; ++s) w/=2; > for (w = w?w:1; w<=_width; w*=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,0).get_haar(true,1)); > } > } > } else { > if (_height>1) { > if (_depth>1) { > unsigned int h = _height, d = _depth; for (unsigned int s = 1; h && d && s<nb_scales; ++s) { h/=2; d/=2; } > for (h = h?h:1, d = d?d:1; h<=_height && d<=_depth; h*=2, d*=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,d-1).get_haar(true,1)); > } else { > unsigned int h = _height; for (unsigned int s = 1; h && s<nb_scales; ++s) h/=2; > for (h = h?h:1; h<=_height; h*=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,0).get_haar(true,1)); > } > } else { > if (_depth>1) { > unsigned int d = _depth; for (unsigned int s = 1; d && s<nb_scales; ++s) d/=2; > for (d = d?d:1; d<=_depth; d*=2) > res.draw_image(res.get_crop(0,0,0,0,0,d-1).get_haar(true,1)); > } else return *this; > } > } > } else { > res = get_haar(false,1); > if (_width>1) { > if (_height>1) { > if (_depth>1) for (unsigned int s = 1, w = _width/2, h = _height/2, d = _depth/2; w && h && d && s<nb_scales; ++s, w/=2, h/=2, d/=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,d-1).haar(false,1)); > else for (unsigned int s = 1, w = _width/2, h = _height/2; w && h && s<nb_scales; ++s, w/=2, h/=2) > res.draw_image(res.get_crop(0,0,0,w-1,h-1,0).haar(false,1)); > } else { > if (_depth>1) for (unsigned int s = 1, w = _width/2, d = _depth/2; w && d && s<nb_scales; ++s, w/=2, d/=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,d-1).haar(false,1)); > else for (unsigned int s = 1, w = _width/2; w && s<nb_scales; ++s, w/=2) > res.draw_image(res.get_crop(0,0,0,w-1,0,0).haar(false,1)); > } > } else { > if (_height>1) { > if (_depth>1) for (unsigned int s = 1, h = _height/2, d = _depth/2; h && d && s<nb_scales; ++s, h/=2, d/=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,d-1).haar(false,1)); > else for (unsigned int s = 1, h = _height/2; h && s<nb_scales; ++s, h/=2) > res.draw_image(res.get_crop(0,0,0,0,h-1,0).haar(false,1)); > } else { > if (_depth>1) for (unsigned int s = 1, d = _depth/2; d && s<nb_scales; ++s, d/=2) > res.draw_image(res.get_crop(0,0,0,0,0,d-1).haar(false,1)); > else return *this; > } > } > } > return res; > } > return *this; > } > > > > > > > CImgList<Tfloat> get_FFT(const char axis, const bool is_invert=false) const { > CImgList<Tfloat> res(*this,CImg<Tfloat>()); > CImg<Tfloat>::FFT(res[0],res[1],axis,is_invert); > return res; > } > > > > > > CImgList<Tfloat> get_FFT(const bool is_invert=false) const { > CImgList<Tfloat> res(*this,CImg<Tfloat>()); > CImg<Tfloat>::FFT(res[0],res[1],is_invert); > return res; > } ># 27382 "./CImg.h" > static void FFT(CImg<T>& real, CImg<T>& imag, const char axis, const bool is_invert=false) { > if (!real) > throw CImgInstanceException("CImg<%s>::FFT(): Specified real part is empty.", > pixel_type()); > > if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,0); > if (!real.is_sameXYZC(imag)) > throw CImgInstanceException("CImg<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and imaginary part (%u,%u,%u,%u,%p) have different dimensions.", > pixel_type(), > real._width,real._height,real._depth,real._spectrum,real._data, > imag._width,imag._height,imag._depth,imag._spectrum,imag._data); > > cimg::mutex(12); > fftw_complex *data_in; > fftw_plan data_plan; > > switch (cimg::uncase(axis)) { > case 'x' : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the X-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._width), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._width,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > for (int c = 0; c<(int)((real)._spectrum); ++c) for (int z = 0; z<(int)((real)._depth); ++z) for (int y = 0; y<(int)((real)._height); ++y) { > T *ptrr = real.data(0,y,z,c), *ptri = imag.data(0,y,z,c); > double *ptrd = (double*)data_in; > for (int x = 0; x<(int)((real)._width); ++x) { *(ptrd++) = (double)*(ptrr++); *(ptrd++) = (double)*(ptri++); } > fftw_execute(data_plan); > const unsigned int fact = real._width; > if (is_invert) for (int x = 0; x<(int)((real)._width); ++x) { *(--ptri) = (T)(*(--ptrd)/fact); *(--ptrr) = (T)(*(--ptrd)/fact); } > else for (int x = 0; x<(int)((real)._width); ++x) { *(--ptri) = (T)*(--ptrd); *(--ptrr) = (T)*(--ptrd); } > } > } break; > case 'y' : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._height); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the Y-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._height), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._height,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > const unsigned int off = real._width; > for (int c = 0; c<(int)((real)._spectrum); ++c) for (int z = 0; z<(int)((real)._depth); ++z) for (int x = 0; x<(int)((real)._width); ++x) { > T *ptrr = real.data(x,0,z,c), *ptri = imag.data(x,0,z,c); > double *ptrd = (double*)data_in; > for (int y = 0; y<(int)((real)._height); ++y) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } > fftw_execute(data_plan); > const unsigned int fact = real._height; > if (is_invert) for (int y = 0; y<(int)((real)._height); ++y) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } > else for (int y = 0; y<(int)((real)._height); ++y) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } > } > } break; > case 'z' : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._depth); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the Z-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._depth), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._depth,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > const unsigned long off = (unsigned long)real._width*real._height; > for (int c = 0; c<(int)((real)._spectrum); ++c) for (int y = 0; y<(int)((real)._height); ++y) for (int x = 0; x<(int)((real)._width); ++x) { > T *ptrr = real.data(x,y,0,c), *ptri = imag.data(x,y,0,c); > double *ptrd = (double*)data_in; > for (int z = 0; z<(int)((real)._depth); ++z) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } > fftw_execute(data_plan); > const unsigned int fact = real._depth; > if (is_invert) for (int z = 0; z<(int)((real)._depth); ++z) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } > else for (int z = 0; z<(int)((real)._depth); ++z) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } > } > } break; > default : { > data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._spectrum); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u) along the C-axis.", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._spectrum), > real._width,real._height,real._depth,real._spectrum); > > data_plan = fftw_plan_dft_1d(real._spectrum,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > const unsigned long off = (unsigned long)real._width*real._height*real._depth; > for (int z = 0; z<(int)((real)._depth); ++z) for (int y = 0; y<(int)((real)._height); ++y) for (int x = 0; x<(int)((real)._width); ++x) { > T *ptrr = real.data(x,y,z,0), *ptri = imag.data(x,y,z,0); > double *ptrd = (double*)data_in; > for (int c = 0; c<(int)((real)._spectrum); ++c) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } > fftw_execute(data_plan); > const unsigned int fact = real._spectrum; > if (is_invert) for (int c = 0; c<(int)((real)._spectrum); ++c) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } > else for (int c = 0; c<(int)((real)._spectrum); ++c) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } > } > } > } > fftw_destroy_plan(data_plan); > fftw_free(data_in); > cimg::mutex(12,0); ># 27611 "./CImg.h" > } ># 27620 "./CImg.h" > static void FFT(CImg<T>& real, CImg<T>& imag, const bool is_invert=false, const unsigned int nb_threads=0) { > if (!real) > throw CImgInstanceException("CImgList<%s>::FFT(): Empty specified real part.", > pixel_type()); > > if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,0); > if (!real.is_sameXYZC(imag)) > throw CImgInstanceException("CImgList<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and imaginary part (%u,%u,%u,%u,%p) have different dimensions.", > pixel_type(), > real._width,real._height,real._depth,real._spectrum,real._data, > imag._width,imag._height,imag._depth,imag._spectrum,imag._data); > > > cimg::mutex(12); > > const unsigned int _nb_threads = nb_threads?nb_threads:cimg::nb_cpus(); > static int fftw_st = fftw_init_threads(); > cimg::unused(fftw_st); > fftw_plan_with_nthreads(_nb_threads); > > > > fftw_complex *data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width*real._height*real._depth); > if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) for computing FFT of image (%u,%u,%u,%u).", > pixel_type(), > cimg::strbuffersize(sizeof(fftw_complex)*real._width*real._height*real._depth*real._spectrum), > real._width,real._height,real._depth,real._spectrum); > > fftw_plan data_plan; > const unsigned long w = (unsigned long)real._width, wh = w*real._height, whd = wh*real._depth; > data_plan = fftw_plan_dft_3d(real._width,real._height,real._depth,data_in,data_in,is_invert?(+1):(-1),(1U << 6)); > for (int c = 0; c<(int)((real)._spectrum); ++c) { > T *ptrr = real.data(0,0,0,c), *ptri = imag.data(0,0,0,c); > double *ptrd = (double*)data_in; > for (unsigned int x = 0; x<real._width; ++x, ptrr-=wh-1, ptri-=wh-1) > for (unsigned int y = 0; y<real._height; ++y, ptrr-=whd-w, ptri-=whd-w) > for (unsigned int z = 0; z<real._depth; ++z, ptrr+=wh, ptri+=wh) { > *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; > } > fftw_execute(data_plan); > ptrd = (double*)data_in; > ptrr = real.data(0,0,0,c); > ptri = imag.data(0,0,0,c); > if (!is_invert) for (unsigned int x = 0; x<real._width; ++x, ptrr-=wh-1, ptri-=wh-1) > for (unsigned int y = 0; y<real._height; ++y, ptrr-=whd-w, ptri-=whd-w) > for (unsigned int z = 0; z<real._depth; ++z, ptrr+=wh, ptri+=wh) { > *ptrr = (T)*(ptrd++); *ptri = (T)*(ptrd++); > } > else for (unsigned int x = 0; x<real._width; ++x, ptrr-=wh-1, ptri-=wh-1) > for (unsigned int y = 0; y<real._height; ++y, ptrr-=whd-w, ptri-=whd-w) > for (unsigned int z = 0; z<real._depth; ++z, ptrr+=wh, ptri+=wh) { > *ptrr = (T)(*(ptrd++)/whd); *ptri = (T)(*(ptrd++)/whd); > } > } > fftw_destroy_plan(data_plan); > fftw_free(data_in); > > fftw_cleanup_threads(); > > cimg::mutex(12,0); > > > > > > > } ># 27701 "./CImg.h" > CImg<T>& shift_object3d(const float tx, const float ty=0, const float tz=0) { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "shift_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > get_shared_row(0)+=tx; get_shared_row(1)+=ty; get_shared_row(2)+=tz; > return *this; > } > > > CImg<Tfloat> get_shift_object3d(const float tx, const float ty=0, const float tz=0) const { > return CImg<Tfloat>(*this,false).shift_object3d(tx,ty,tz); > } > > > > > > CImg<T>& shift_object3d() { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "shift_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); > float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); > xcoords-=(xm + xM)/2; ycoords-=(ym + yM)/2; zcoords-=(zm + zM)/2; > return *this; > } > > > CImg<Tfloat> get_shift_object3d() const { > return CImg<Tfloat>(*this,false).shift_object3d(); > } > > > > > > > > CImg<T>& resize_object3d(const float sx, const float sy=-100, const float sz=-100) { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); > float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); > if (xm<xM) { if (sx>0) xcoords*=sx/(xM-xm); else xcoords*=-sx/100; } > if (ym<yM) { if (sy>0) ycoords*=sy/(yM-ym); else ycoords*=-sy/100; } > if (zm<zM) { if (sz>0) zcoords*=sz/(zM-zm); else zcoords*=-sz/100; } > return *this; > } > > > CImg<Tfloat> get_resize_object3d(const float sx, const float sy=-100, const float sz=-100) const { > return CImg<Tfloat>(*this,false).resize_object3d(sx,sy,sz); > } > > > CImg<T> resize_object3d() { > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "resize_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > CImg<T> xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); > float xm, xM = (float)xcoords.max_min(xm), ym, yM = (float)ycoords.max_min(ym), zm, zM = (float)zcoords.max_min(zm); > const float dx = xM - xm, dy = yM - ym, dz = zM - zm, dmax = cimg::max(dx,dy,dz); > if (dmax>0) { xcoords/=dmax; ycoords/=dmax; zcoords/=dmax; } > return *this; > } > > > CImg<Tfloat> get_resize_object3d() const { > return CImg<Tfloat>(*this,false).resize_object3d(); > } > > > > > > > > template<typename tf, typename tp, typename tff> > CImg<T>& append_object3d(CImgList<tf>& primitives, const CImg<tp>& obj_vertices, const CImgList<tff>& obj_primitives) { > if (!obj_vertices || !obj_primitives) return *this; > if (obj_vertices._height!=3 || obj_vertices._depth>1 || obj_vertices._spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "append_object3d(): Specified vertice image (%u,%u,%u,%u,%p) is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > obj_vertices._width,obj_vertices._height,obj_vertices._depth,obj_vertices._spectrum,obj_vertices._data); > > if (is_empty()) { primitives.assign(obj_primitives); return assign(obj_vertices); } > if (_height!=3 || _depth>1 || _spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "append_object3d(): Instance is not a set of 3d vertices.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int P = _width; > append(obj_vertices,'x'); > const unsigned int N = primitives._width; > primitives.insert(obj_primitives); > for (unsigned int i = N; i<primitives._width; ++i) { > CImg<tf> &p = primitives[i]; > switch (p.size()) { > case 1 : p[0]+=P; break; > case 5 : p[0]+=P; p[1]+=P; break; > case 2 : case 6 : p[0]+=P; p[1]+=P; break; > case 3 : case 9 : p[0]+=P; p[1]+=P; p[2]+=P; break; > case 4 : case 12 : p[0]+=P; p[1]+=P; p[2]+=P; p[3]+=P; break; > } > } > return *this; > } ># 27826 "./CImg.h" > template<typename tp, typename tc, typename tt, typename tx> > const CImg<T>& texturize_object3d(CImgList<tp>& primitives, CImgList<tc>& colors, > const CImg<tt>& texture, const CImg<tx>& coords=CImg<tx>::empty()) const { > if (is_empty()) return *this; > if (_height!=3) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "texturize_object3d(): image instance is not a set of 3d points.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (coords && (coords._width!=_width || coords._height!=2)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "texturize_object3d(): Invalid specified texture coordinates (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > coords._width,coords._height,coords._depth,coords._spectrum,coords._data); > CImg<unsigned int> _coords; > if (!coords) { > _coords.assign(_width,2); > float > xmin, xmax = (float)get_shared_row(0).max_min(xmin), > ymin, ymax = (float)get_shared_row(1).max_min(ymin), > dx = xmax>xmin?xmax-xmin:1, > dy = ymax>ymin?ymax-ymin:1; > for (int p = 0; p<(int)((*this)._width); ++p) { > _coords(p,0) = (unsigned int)(((*this)(p,0)-xmin)*(texture._width-1)/dx); > _coords(p,1) = (unsigned int)(((*this)(p,1)-ymin)*(texture._height-1)/dy); > } > } else _coords = coords; > > int texture_ind = -1; > for (int l = 0; l<(int)(primitives)._width; ++l) { > CImg<tp> &p = primitives[l]; > const unsigned int siz = p.size(); > switch (siz) { > case 1 : { > const unsigned int > i0 = (unsigned int)p[0], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1); > texture.get_vector_at(x0,y0).move_to(colors[l]); > } break; > case 2 : case 6 : { > const unsigned int > i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), > x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1); > if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); > CImg<tp>::vector(i0,i1,x0,y0,x1,y1).move_to(p); > } break; > case 3 : case 9 : { > const unsigned int > i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), > x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1), > x2 = (unsigned int)_coords(i2,0), y2 = (unsigned int)_coords(i2,1); > if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); > CImg<tp>::vector(i0,i1,i2,x0,y0,x1,y1,x2,y2).move_to(p); > } break; > case 4 : case 12 : { > const unsigned int > i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], i3 = (unsigned int)p[3], > x0 = (unsigned int)_coords(i0,0), y0 = (unsigned int)_coords(i0,1), > x1 = (unsigned int)_coords(i1,0), y1 = (unsigned int)_coords(i1,1), > x2 = (unsigned int)_coords(i2,0), y2 = (unsigned int)_coords(i2,1), > x3 = (unsigned int)_coords(i3,0), y3 = (unsigned int)_coords(i3,1); > if (texture_ind<0) colors[texture_ind=l] = texture; else colors[l].assign(colors[texture_ind],true); > CImg<tp>::vector(i0,i1,i2,i3,x0,y0,x1,y1,x2,y2,x3,y3).move_to(p); > } break; > } > } > return *this; > } ># 27913 "./CImg.h" > template<typename tf, typename tc, typename te> > CImg<floatT> get_elevation3d(CImgList<tf>& primitives, CImgList<tc>& colors, const CImg<te>& elevation) const { > if (!is_sameXY(elevation) || elevation._depth>1 || elevation._spectrum>1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_elevation3d(): Instance and specified elevation (%u,%u,%u,%u,%p) " > "have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > elevation._width,elevation._height,elevation._depth,elevation._spectrum,elevation._data); > if (is_empty()) return *this; > float m, M = (float)max_min(m); > if (M==m) ++M; > colors.assign(); > const unsigned int size_x1 = _width - 1, size_y1 = _height - 1; > for (unsigned int y = 0; y<size_y1; ++y) > for (unsigned int x = 0; x<size_x1; ++x) { > const unsigned char > r = (unsigned char)(((*this)(x,y,0) - m)*255/(M-m)), > g = _spectrum>1?(unsigned char)(((*this)(x,y,1) - m)*255/(M-m)):r, > b = _spectrum>2?(unsigned char)(((*this)(x,y,2) - m)*255/(M-m)):(_spectrum>1?0:r); > CImg<tc>::vector((tc)r,(tc)g,(tc)b).move_to(colors); > } > const typename CImg<te>::_functor2d_int func(elevation); > return elevation3d(primitives,func,0,0,_width-1.0f,_height-1.0f,_width,_height); > } ># 27947 "./CImg.h" > template<typename tf, typename tc> > CImg<floatT> get_projections3d(CImgList<tf>& primitives, CImgList<tc>& colors, > const unsigned int x0, const unsigned int y0, const unsigned int z0, > const bool normalize_colors=false) const { > float m = 0, M = 0, delta = 1; > if (normalize_colors) { m = (float)min_max(M); delta = 255/(m==M?1:M-m); } > const unsigned int > _x0 = (x0>=_width)?_width - 1:x0, > _y0 = (y0>=_height)?_height - 1:y0, > _z0 = (z0>=_depth)?_depth - 1:z0; > CImg<tc> img_xy, img_xz, img_yz; > if (normalize_colors) { > ((get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1)-=m)*=delta).move_to(img_xy); > ((get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1)-=m)*=delta).resize(_width,_depth,1,-100,-1).move_to(img_xz); > ((get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1)-=m)*=delta).resize(_height,_depth,1,-100,-1).move_to(img_yz); > } else { > get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1).move_to(img_xy); > get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1).move_to(img_xz); > get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).resize(_height,_depth,1,-100,-1).move_to(img_yz); > } > CImg<floatT> points(12,3,1,1, > 0,_width-1,_width-1,0, 0,_width-1,_width-1,0, _x0,_x0,_x0,_x0, > 0,0,_height-1,_height-1, _y0,_y0,_y0,_y0, 0,_height-1,_height-1,0, > _z0,_z0,_z0,_z0, 0,0,_depth-1,_depth-1, 0,0,_depth-1,_depth-1); > primitives.assign(); > CImg<tf>::vector(0,1,2,3,0,0,img_xy._width-1,0,img_xy._width-1,img_xy._height-1,0,img_xy._height-1).move_to(primitives); > CImg<tf>::vector(4,5,6,7,0,0,img_xz._width-1,0,img_xz._width-1,img_xz._height-1,0,img_xz._height-1).move_to(primitives); > CImg<tf>::vector(8,9,10,11,0,0,img_yz._width-1,0,img_yz._width-1,img_yz._height-1,0,img_yz._height-1).move_to(primitives); > colors.assign(); > img_xy.move_to(colors); > img_xz.move_to(colors); > img_yz.move_to(colors); > return points; > } ># 27999 "./CImg.h" > template<typename tf> > CImg<floatT> get_isoline3d(CImgList<tf>& primitives, const float isovalue, > const int size_x=-100, const int size_y=-100) const { > if (_spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_isoline3d(): Instance is not a scalar image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (_depth>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_isoline3d(): Instance is not a 2d image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > primitives.assign(); > if (is_empty()) return *this; > CImg<floatT> vertices; > if ((size_x==-100 && size_y==-100) || (size_x==width() && size_y==height())) { > const _functor2d_int func(*this); > vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,width(),height()); > } else { > const _functor2d_float func(*this); > vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,size_x,size_y); > } > return vertices; > } ># 28041 "./CImg.h" > template<typename tf> > CImg<floatT> get_isosurface3d(CImgList<tf>& primitives, const float isovalue, > const int size_x=-100, const int size_y=-100, const int size_z=-100) const { > if (_spectrum>1) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "get_isosurface3d(): Instance is not a scalar image.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > primitives.assign(); > if (is_empty()) return *this; > CImg<floatT> vertices; > if ((size_x==-100 && size_y==-100 && size_z==-100) || (size_x==width() && size_y==height() && size_z==depth())) { > const _functor3d_int func(*this); > vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f,width(),height(),depth()); > } else { > const _functor3d_float func(*this); > vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f,size_x,size_y,size_z); > } > return vertices; > } ># 28072 "./CImg.h" > template<typename tf, typename tfunc> > static CImg<floatT> elevation3d(CImgList<tf>& primitives, const tfunc& func, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > const float > nx0 = x0<x1?x0:x1, ny0 = y0<y1?y0:y1, > nx1 = x0<x1?x1:x0, ny1 = y0<y1?y1:y0; > const unsigned int > _nsize_x = (unsigned int)(size_x>=0?size_x:(nx1-nx0)*-size_x/100), nsize_x = _nsize_x?_nsize_x:1, nsize_x1 = nsize_x - 1, > _nsize_y = (unsigned int)(size_y>=0?size_y:(ny1-ny0)*-size_y/100), nsize_y = _nsize_y?_nsize_y:1, nsize_y1 = nsize_y - 1; > if (nsize_x<2 || nsize_y<2) > throw CImgArgumentException("CImg<%s>::elevation3d(): Invalid specified size (%d,%d).", > pixel_type(), > nsize_x,nsize_y); > > CImg<floatT> vertices(nsize_x*nsize_y,3); > floatT *ptr_x = vertices.data(0,0), *ptr_y = vertices.data(0,1), *ptr_z = vertices.data(0,2); > for (unsigned int y = 0; y<nsize_y; ++y) { > const float Y = ny0 + y*(ny1-ny0)/nsize_y1; > for (unsigned int x = 0; x<nsize_x; ++x) { > const float X = nx0 + x*(nx1-nx0)/nsize_x1; > *(ptr_x++) = (float)x; > *(ptr_y++) = (float)y; > *(ptr_z++) = (float)func(X,Y); > } > } > primitives.assign(nsize_x1*nsize_y1,1,4); > for (unsigned int p = 0, y = 0; y<nsize_y1; ++y) { > const unsigned int yw = y*nsize_x; > for (unsigned int x = 0; x<nsize_x1; ++x) { > const unsigned int xpyw = x + yw, xpyww = xpyw + nsize_x; > primitives[p++].fill(xpyw,xpyww,xpyww+1,xpyw+1); > } > } > return vertices; > } > > > template<typename tf> > static CImg<floatT> elevation3d(CImgList<tf>& primitives, const char *const expression, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > const _functor2d_expr func(expression); > return elevation3d(primitives,func,x0,y0,x1,y1,size_x,size_y); > } ># 28131 "./CImg.h" > template<typename tf, typename tfunc> > static CImg<floatT> isoline3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > static const unsigned int edges[16] = { 0x0, 0x9, 0x3, 0xa, 0x6, 0xf, 0x5, 0xc, 0xc, 0x5, 0xf, 0x6, 0xa, 0x3, 0x9, 0x0 }; > static const int segments[16][4] = { { -1,-1,-1,-1 }, { 0,3,-1,-1 }, { 0,1,-1,-1 }, { 1,3,-1,-1 }, > { 1,2,-1,-1 }, { 0,1,2,3 }, { 0,2,-1,-1 }, { 2,3,-1,-1 }, > { 2,3,-1,-1 }, { 0,2,-1,-1}, { 0,3,1,2 }, { 1,2,-1,-1 }, > { 1,3,-1,-1 }, { 0,1,-1,-1}, { 0,3,-1,-1}, { -1,-1,-1,-1 } }; > const unsigned int > _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), > _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), > nx = _nx?_nx:1, > ny = _ny?_ny:1, > nxm1 = nx - 1, > nym1 = ny - 1; > primitives.assign(); > if (!nxm1 || !nym1) return CImg<floatT>(); > const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1; > CImgList<floatT> vertices; > CImg<intT> indices1(nx,1,1,2,-1), indices2(nx,1,1,2); > CImg<floatT> values1(nx), values2(nx); > float X = x0, Y = y0, nX = X + dx, nY = Y + dy; > > > for (int x = 0; x<(int)((values1)._width); ++x) { values1(x) = (float)func(X,Y); X+=dx; } > > > for (unsigned int yi = 0, nyi = 1; yi<nym1; ++yi, ++nyi, Y=nY, nY+=dy) { > X = x0; nX = X + dx; > indices2.fill(-1); > for (unsigned int xi = 0, nxi = 1; xi<nxm1; ++xi, ++nxi, X=nX, nX+=dx) { > > > const float > val0 = values1(xi), > val1 = values1(nxi), > val2 = values2(nxi) = (float)func(nX,nY), > val3 = values2(xi) = (float)func(X,nY); > const unsigned int > configuration = (val0<isovalue?1:0) | (val1<isovalue?2:0) | (val2<isovalue?4:0) | (val3<isovalue?8:0), > edge = edges[configuration]; > > > if (edge) { > if ((edge&1) && indices1(xi,0)<0) { > const float Xi = X + (isovalue-val0)*dx/(val1-val0); > indices1(xi,0) = vertices._width; > CImg<floatT>::vector(Xi,Y,0).move_to(vertices); > } > if ((edge&2) && indices1(nxi,1)<0) { > const float Yi = Y + (isovalue-val1)*dy/(val2-val1); > indices1(nxi,1) = vertices._width; > CImg<floatT>::vector(nX,Yi,0).move_to(vertices); > } > if ((edge&4) && indices2(xi,0)<0) { > const float Xi = X + (isovalue-val3)*dx/(val2-val3); > indices2(xi,0) = vertices._width; > CImg<floatT>::vector(Xi,nY,0).move_to(vertices); > } > if ((edge&8) && indices1(xi,1)<0) { > const float Yi = Y + (isovalue-val0)*dy/(val3-val0); > indices1(xi,1) = vertices._width; > CImg<floatT>::vector(X,Yi,0).move_to(vertices); > } > > > for (const int *segment = segments[configuration]; *segment!=-1; ) { > const unsigned int p0 = *(segment++), p1 = *(segment++); > const tf > i0 = (tf)(_isoline3d_indice(p0,indices1,indices2,xi,nxi)), > i1 = (tf)(_isoline3d_indice(p1,indices1,indices2,xi,nxi)); > CImg<tf>::vector(i0,i1).move_to(primitives); > } > } > } > values1.swap(values2); > indices1.swap(indices2); > } > return vertices>'x'; > } > > > template<typename tf> > static CImg<floatT> isoline3d(CImgList<tf>& primitives, const char *const expression, const float isovalue, > const float x0, const float y0, const float x1, const float y1, > const int size_x=256, const int size_y=256) { > const _functor2d_expr func(expression); > return isoline3d(primitives,func,isovalue,x0,y0,x1,y1,size_x,size_y); > } > > template<typename t> > static int _isoline3d_indice(const unsigned int edge, const CImg<t>& indices1, const CImg<t>& indices2, > const unsigned int x, const unsigned int nx) { > switch (edge) { > case 0 : return (int)indices1(x,0); > case 1 : return (int)indices1(nx,1); > case 2 : return (int)indices2(x,0); > case 3 : return (int)indices1(x,1); > } > return 0; > } ># 28250 "./CImg.h" > template<typename tf, typename tfunc> > static CImg<floatT> isosurface3d(CImgList<tf>& primitives, const tfunc& func, const float isovalue, > const float x0, const float y0, const float z0, > const float x1, const float y1, const float z1, > const int size_x=32, const int size_y=32, const int size_z=32) { > static const unsigned int edges[256] = { > 0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, > 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, > 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, > 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, > 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, > 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, > 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, > 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, > 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, > 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, > 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, > 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, > 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, > 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, > 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, > 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000 }; > > static const int triangles[256][16] = { > { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, > { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1 }, > { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 }, { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1 }, > { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1 }, > { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1 }, > { 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1 }, { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1 }, > { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1 }, { 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1 }, > { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1 }, { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, > { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1 }, { 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1 }, { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1 }, > { 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1 }, { 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1 }, > { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1 }, > { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, > { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1 }, { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, { 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, > { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1 }, > { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1 }, { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1 }, > { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, > { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1 }, { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1 }, > { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1 }, > { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1 }, { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1 }, > { 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, > { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1 }, > { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1 }, > { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, { 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1 }, > { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1 }, { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1 }, > { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1 }, > { 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1 }, { 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1 }, > { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1 }, > { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1 }, { 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1 }, > { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1 }, { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1 }, { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1 }, > { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1 }, { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1 }, > { 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, { 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1 }, > { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1 }, { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, > { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1 }, { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1 }, > { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 }, { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1 }, > { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1 }, { 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1 }, > { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1 }, { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1 }, { 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1 }, { 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, { 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1 }, > { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1 }, > { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1 }, { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1 }, > { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1 }, > { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1 }, { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1 }, > { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1 }, { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1 }, > { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1 }, { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1 }, > { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1 }, > { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1 }, { 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1 }, { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1 }, > { 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1 }, { 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1 }, > { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1 }, { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1 }, { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1 }, { 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1 }, > { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 }, { 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1 }, > { 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1 }, > { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1 }, { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1 }, > { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1 }, > { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1 }, { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1 }, > { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1 }, > { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1 }, { 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1 }, > { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1 }, { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1 }, > { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1 }, { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1 }, { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, > { 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1 }, { 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1 }, > { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1 }, { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1 }, > { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1 }, { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1 }, > { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1 }, { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1 }, > { 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, { 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1 }, > { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1 }, { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1 }, > { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1 }, { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1 }, > { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1 }, > { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1 }, { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, > { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } > }; > > const unsigned int > _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), > _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), > _nz = (unsigned int)(size_z>=0?size_z:cimg::round((z1-z0)*-size_z/100 + 1)), > nx = _nx?_nx:1, > ny = _ny?_ny:1, > nz = _nz?_nz:1, > nxm1 = nx - 1, > nym1 = ny - 1, > nzm1 = nz - 1; > primitives.assign(); > if (!nxm1 || !nym1 || !nzm1) return CImg<floatT>(); > const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1, dz = (z1 - z0)/nzm1; > CImgList<floatT> vertices; > CImg<intT> indices1(nx,ny,1,3,-1), indices2(indices1); > CImg<floatT> values1(nx,ny), values2(nx,ny); > float X = 0, Y = 0, Z = 0, nX = 0, nY = 0, nZ = 0; > > > Y = y0; > for (int y = 0; y<(int)((values1)._height); ++y) { > X = x0; > for (int x = 0; x<(int)((values1)._width); ++x) { values1(x,y) = (float)func(X,Y,z0); X+=dx; } > Y+=dy; > } > > > Z = z0; nZ = Z + dz; > for (unsigned int zi = 0; zi<nzm1; ++zi, Z = nZ, nZ+=dz) { > Y = y0; nY = Y + dy; > indices2.fill(-1); > for (unsigned int yi = 0, nyi = 1; yi<nym1; ++yi, ++nyi, Y = nY, nY+=dy) { > X = x0; nX = X + dx; > for (unsigned int xi = 0, nxi = 1; xi<nxm1; ++xi, ++nxi, X = nX, nX+=dx) { > > > const float > val0 = values1(xi,yi), > val1 = values1(nxi,yi), > val2 = values1(nxi,nyi), > val3 = values1(xi,nyi), > val4 = values2(xi,yi) = (float)func(X,Y,nZ), > val5 = values2(nxi,yi) = (float)func(nX,Y,nZ), > val6 = values2(nxi,nyi) = (float)func(nX,nY,nZ), > val7 = values2(xi,nyi) = (float)func(X,nY,nZ); > > const unsigned int configuration = > (val0<isovalue?1:0) | (val1<isovalue?2:0) | (val2<isovalue?4:0) | (val3<isovalue?8:0) | > (val4<isovalue?16:0) | (val5<isovalue?32:0) | (val6<isovalue?64:0) | (val7<isovalue?128:0), > edge = edges[configuration]; > > > if (edge) { > if ((edge&1) && indices1(xi,yi,0)<0) { > const float Xi = X + (isovalue-val0)*dx/(val1-val0); > indices1(xi,yi,0) = vertices._width; > CImg<floatT>::vector(Xi,Y,Z).move_to(vertices); > } > if ((edge&2) && indices1(nxi,yi,1)<0) { > const float Yi = Y + (isovalue-val1)*dy/(val2-val1); > indices1(nxi,yi,1) = vertices._width; > CImg<floatT>::vector(nX,Yi,Z).move_to(vertices); > } > if ((edge&4) && indices1(xi,nyi,0)<0) { > const float Xi = X + (isovalue-val3)*dx/(val2-val3); > indices1(xi,nyi,0) = vertices._width; > CImg<floatT>::vector(Xi,nY,Z).move_to(vertices); > } > if ((edge&8) && indices1(xi,yi,1)<0) { > const float Yi = Y + (isovalue-val0)*dy/(val3-val0); > indices1(xi,yi,1) = vertices._width; > CImg<floatT>::vector(X,Yi,Z).move_to(vertices); > } > if ((edge&16) && indices2(xi,yi,0)<0) { > const float Xi = X + (isovalue-val4)*dx/(val5-val4); > indices2(xi,yi,0) = vertices._width; > CImg<floatT>::vector(Xi,Y,nZ).move_to(vertices); > } > if ((edge&32) && indices2(nxi,yi,1)<0) { > const float Yi = Y + (isovalue-val5)*dy/(val6-val5); > indices2(nxi,yi,1) = vertices._width; > CImg<floatT>::vector(nX,Yi,nZ).move_to(vertices); > } > if ((edge&64) && indices2(xi,nyi,0)<0) { > const float Xi = X + (isovalue-val7)*dx/(val6-val7); > indices2(xi,nyi,0) = vertices._width; > CImg<floatT>::vector(Xi,nY,nZ).move_to(vertices); > } > if ((edge&128) && indices2(xi,yi,1)<0) { > const float Yi = Y + (isovalue-val4)*dy/(val7-val4); > indices2(xi,yi,1) = vertices._width; > CImg<floatT>::vector(X,Yi,nZ).move_to(vertices); > } > if ((edge&256) && indices1(xi,yi,2)<0) { > const float Zi = Z+ (isovalue-val0)*dz/(val4-val0); > indices1(xi,yi,2) = vertices._width; > CImg<floatT>::vector(X,Y,Zi).move_to(vertices); > } > if ((edge&512) && indices1(nxi,yi,2)<0) { > const float Zi = Z + (isovalue-val1)*dz/(val5-val1); > indices1(nxi,yi,2) = vertices._width; > CImg<floatT>::vector(nX,Y,Zi).move_to(vertices); > } > if ((edge&1024) && indices1(nxi,nyi,2)<0) { > const float Zi = Z + (isovalue-val2)*dz/(val6-val2); > indices1(nxi,nyi,2) = vertices._width; > CImg<floatT>::vector(nX,nY,Zi).move_to(vertices); > } > if ((edge&2048) && indices1(xi,nyi,2)<0) { > const float Zi = Z + (isovalue-val3)*dz/(val7-val3); > indices1(xi,nyi,2) = vertices._width; > CImg<floatT>::vector(X,nY,Zi).move_to(vertices); > } > > > for (const int *triangle = triangles[configuration]; *triangle!=-1; ) { > const unsigned int p0 = *(triangle++), p1 = *(triangle++), p2 = *(triangle++); > const tf > i0 = (tf)(_isosurface3d_indice(p0,indices1,indices2,xi,yi,nxi,nyi)), > i1 = (tf)(_isosurface3d_indice(p1,indices1,indices2,xi,yi,nxi,nyi)), > i2 = (tf)(_isosurface3d_indice(p2,indices1,indices2,xi,yi,nxi,nyi)); > CImg<tf>::vector(i0,i2,i1).move_to(primitives); > } > } > } > } > cimg::swap(values1,values2); > cimg::swap(indices1,indices2); > } > return vertices>'x'; > } > > > template<typename tf> > static CImg<floatT> isosurface3d(CImgList<tf>& primitives, const char *const expression, const float isovalue, > const float x0, const float y0, const float z0, > const float x1, const float y1, const float z1, > const int dx=32, const int dy=32, const int dz=32) { > const _functor3d_expr func(expression); > return isosurface3d(primitives,func,isovalue,x0,y0,z0,x1,y1,z1,dx,dy,dz); > } > > template<typename t> > static int _isosurface3d_indice(const unsigned int edge, const CImg<t>& indices1, const CImg<t>& indices2, > const unsigned int x, const unsigned int y, const unsigned int nx, const unsigned int ny) { > switch (edge) { > case 0 : return indices1(x,y,0); > case 1 : return indices1(nx,y,1); > case 2 : return indices1(x,ny,0); > case 3 : return indices1(x,y,1); > case 4 : return indices2(x,y,0); > case 5 : return indices2(nx,y,1); > case 6 : return indices2(x,ny,0); > case 7 : return indices2(x,y,1); > case 8 : return indices1(x,y,2); > case 9 : return indices1(nx,y,2); > case 10 : return indices1(nx,ny,2); > case 11 : return indices1(x,ny,2); > } > return 0; > } > > > struct _functor2d_int { > const CImg<T>& ref; > _functor2d_int(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y) const { > return (float)ref((int)x,(int)y); > } > }; > > struct _functor2d_float { > const CImg<T>& ref; > _functor2d_float(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y) const { > return (float)ref._linear_atXY(x,y); > } > }; > > struct _functor2d_expr { > _cimg_math_parser *mp; > _functor2d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg<T>::empty(),expr,0); } > ~_functor2d_expr() { delete mp; } > float operator()(const float x, const float y) const { > return (float)(*mp)(x,y,0,0); > } > }; > > struct _functor3d_int { > const CImg<T>& ref; > _functor3d_int(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z) const { > return (float)ref((int)x,(int)y,(int)z); > } > }; > > struct _functor3d_float { > const CImg<T>& ref; > _functor3d_float(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z) const { > return (float)ref._linear_atXYZ(x,y,z); > } > }; > > struct _functor3d_expr { > _cimg_math_parser *mp; > ~_functor3d_expr() { delete mp; } > _functor3d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg<T>::empty(),expr,0); } > float operator()(const float x, const float y, const float z) const { > return (float)(*mp)(x,y,z,0); > } > }; > > struct _functor4d_int { > const CImg<T>& ref; > _functor4d_int(const CImg<T>& pref):ref(pref) {} > float operator()(const float x, const float y, const float z, const unsigned int c) const { > return (float)ref((int)x,(int)y,(int)z,c); > } > }; ># 28641 "./CImg.h" > template<typename tf> > static CImg<floatT> box3d(CImgList<tf>& primitives, > const float size_x=200, const float size_y=100, const float size_z=100) { > primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 0,1,5,4, 3,7,6,2, 0,4,7,3, 1,2,6,5); > return CImg<floatT>(8,3,1,1, > 0.,size_x,size_x, 0., 0.,size_x,size_x, 0., > 0., 0.,size_y,size_y, 0., 0.,size_y,size_y, > 0., 0., 0., 0.,size_z,size_z,size_z,size_z); > } ># 28667 "./CImg.h" > template<typename tf> > static CImg<floatT> cone3d(CImgList<tf>& primitives, > const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { > primitives.assign(); > if (!subdivisions) return CImg<floatT>(); > CImgList<floatT> vertices(2,1,3,1,1, > 0.,0.,size_z, > 0.,0.,0.); > for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { > const float a = (float)(angle*cimg::PI/180); > CImg<floatT>::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0).move_to(vertices); > } > const unsigned int nbr = vertices._width - 2; > for (unsigned int p = 0; p<nbr; ++p) { > const unsigned int curr = 2 + p, next = 2 + ((p+1)%nbr); > CImg<tf>::vector(1,next,curr).move_to(primitives); > CImg<tf>::vector(0,curr,next).move_to(primitives); > } > return vertices>'x'; > } ># 28704 "./CImg.h" > template<typename tf> > static CImg<floatT> cylinder3d(CImgList<tf>& primitives, > const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { > primitives.assign(); > if (!subdivisions) return CImg<floatT>(); > CImgList<floatT> vertices(2,1,3,1,1, > 0.,0.,0., > 0.,0.,size_z); > for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { > const float a = (float)(angle*cimg::PI/180); > CImg<floatT>::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0.0f).move_to(vertices); > CImg<floatT>::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),size_z).move_to(vertices); > } > const unsigned int nbr = (vertices._width - 2)/2; > for (unsigned int p = 0; p<nbr; ++p) { > const unsigned int curr = 2+2*p, next = 2+(2*((p+1)%nbr)); > CImg<tf>::vector(0,next,curr).move_to(primitives); > CImg<tf>::vector(1,curr+1,next+1).move_to(primitives); > CImg<tf>::vector(curr,next,next+1,curr+1).move_to(primitives); > } > return vertices>'x'; > } ># 28744 "./CImg.h" > template<typename tf> > static CImg<floatT> torus3d(CImgList<tf>& primitives, > const float radius1=100, const float radius2=30, > const unsigned int subdivisions1=24, const unsigned int subdivisions2=12) { > primitives.assign(); > if (!subdivisions1 || !subdivisions2) return CImg<floatT>(); > CImgList<floatT> vertices; > for (unsigned int v = 0; v<subdivisions1; ++v) { > const float > beta = (float)(v*2*cimg::PI/subdivisions1), > xc = radius1*(float)std::cos(beta), > yc = radius1*(float)std::sin(beta); > for (unsigned int u = 0; u<subdivisions2; ++u) { > const float > alpha = (float)(u*2*cimg::PI/subdivisions2), > x = xc + radius2*(float)(std::cos(alpha)*std::cos(beta)), > y = yc + radius2*(float)(std::cos(alpha)*std::sin(beta)), > z = radius2*(float)std::sin(alpha); > CImg<floatT>::vector(x,y,z).move_to(vertices); > } > } > for (unsigned int vv = 0; vv<subdivisions1; ++vv) { > const unsigned int nv = (vv+1)%subdivisions1; > for (unsigned int uu = 0; uu<subdivisions2; ++uu) { > const unsigned int nu = (uu+1)%subdivisions2, svv = subdivisions2*vv, snv = subdivisions2*nv; > CImg<tf>::vector(svv+nu,svv+uu,snv+uu,snv+nu).move_to(primitives); > } > } > return vertices>'x'; > } ># 28792 "./CImg.h" > template<typename tf> > static CImg<floatT> plane3d(CImgList<tf>& primitives, > const float size_x=100, const float size_y=100, > const unsigned int subdivisions_x=10, const unsigned int subdivisions_y=10) { > primitives.assign(); > if (!subdivisions_x || !subdivisions_y) return CImg<floatT>(); > CImgList<floatT> vertices; > const unsigned int w = subdivisions_x + 1, h = subdivisions_y + 1; > const float fx = (float)size_x/w, fy = (float)size_y/h; > for (unsigned int y = 0; y<h; ++y) for (unsigned int x = 0; x<w; ++x) > CImg<floatT>::vector(fx*x,fy*y,0).move_to(vertices); > for (unsigned int y = 0; y<subdivisions_y; ++y) for (unsigned int x = 0; x<subdivisions_x; ++x) { > const int off1 = x+y*w, off2 = x+1+y*w, off3 = x+1+(y+1)*w, off4 = x+(y+1)*w; > CImg<tf>::vector(off1,off4,off3,off2).move_to(primitives); > } > return vertices>'x'; > } ># 28825 "./CImg.h" > template<typename tf> > static CImg<floatT> sphere3d(CImgList<tf>& primitives, > const float radius=50, const unsigned int subdivisions=3) { > > > primitives.assign(); > const double tmp = (1+std::sqrt(5.0f))/2, a = 1.0/std::sqrt(1+tmp*tmp), b = tmp*a; > CImgList<floatT> vertices(12,1,3,1,1, b,a,0.0, -b,a,0.0, -b,-a,0.0, b,-a,0.0, a,0.0,b, a,0.0,-b, > -a,0.0,-b, -a,0.0,b, 0.0,b,a, 0.0,-b,a, 0.0,-b,-a, 0.0,b,-a); > primitives.assign(20,1,3,1,1, 4,8,7, 4,7,9, 5,6,11, 5,10,6, 0,4,3, 0,3,5, 2,7,1, 2,1,6, > 8,0,11, 8,11,1, 9,10,3, 9,2,10, 8,4,0, 11,0,5, 4,9,3, > 5,3,10, 7,8,1, 6,1,11, 7,2,9, 6,10,2); > > float he = (float)a; > > > for (unsigned int i = 0; i<subdivisions; ++i) { > const unsigned int L = primitives._width; > he/=2; > const float he2 = he*he; > for (unsigned int l = 0; l<L; ++l) { > const unsigned int > p0 = (unsigned int)primitives(0,0), p1 = (unsigned int)primitives(0,1), p2 = (unsigned int)primitives(0,2); > const float > x0 = vertices(p0,0), y0 = vertices(p0,1), z0 = vertices(p0,2), > x1 = vertices(p1,0), y1 = vertices(p1,1), z1 = vertices(p1,2), > x2 = vertices(p2,0), y2 = vertices(p2,1), z2 = vertices(p2,2), > tnx0 = (x0+x1)/2, tny0 = (y0+y1)/2, tnz0 = (z0+z1)/2, nn0 = (float)std::sqrt(tnx0*tnx0+tny0*tny0+tnz0*tnz0), > tnx1 = (x0+x2)/2, tny1 = (y0+y2)/2, tnz1 = (z0+z2)/2, nn1 = (float)std::sqrt(tnx1*tnx1+tny1*tny1+tnz1*tnz1), > tnx2 = (x1+x2)/2, tny2 = (y1+y2)/2, tnz2 = (z1+z2)/2, nn2 = (float)std::sqrt(tnx2*tnx2+tny2*tny2+tnz2*tnz2), > nx0 = tnx0/nn0, ny0 = tny0/nn0, nz0 = tnz0/nn0, > nx1 = tnx1/nn1, ny1 = tny1/nn1, nz1 = tnz1/nn1, > nx2 = tnx2/nn2, ny2 = tny2/nn2, nz2 = tnz2/nn2; > int i0 = -1, i1 = -1, i2 = -1; > for (int p = 0; p<(int)(vertices)._width; ++p) { > const float x = (float)vertices(p,0), y = (float)vertices(p,1), z = (float)vertices(p,2); > if (cimg::sqr(x-nx0) + cimg::sqr(y-ny0) + cimg::sqr(z-nz0)<he2) i0 = p; > if (cimg::sqr(x-nx1) + cimg::sqr(y-ny1) + cimg::sqr(z-nz1)<he2) i1 = p; > if (cimg::sqr(x-nx2) + cimg::sqr(y-ny2) + cimg::sqr(z-nz2)<he2) i2 = p; > } > if (i0<0) { CImg<floatT>::vector(nx0,ny0,nz0).move_to(vertices); i0 = vertices._width - 1; } > if (i1<0) { CImg<floatT>::vector(nx1,ny1,nz1).move_to(vertices); i1 = vertices._width - 1; } > if (i2<0) { CImg<floatT>::vector(nx2,ny2,nz2).move_to(vertices); i2 = vertices._width - 1; } > primitives.remove(0); > CImg<tf>::vector(p0,i0,i1).move_to(primitives); > CImg<tf>::vector((tf)i0,(tf)p1,(tf)i2).move_to(primitives); > CImg<tf>::vector((tf)i1,(tf)i2,(tf)p2).move_to(primitives); > CImg<tf>::vector((tf)i1,(tf)i0,(tf)i2).move_to(primitives); > } > } > return (vertices>'x')*=radius; > } ># 28894 "./CImg.h" > template<typename tf, typename t> > static CImg<floatT> ellipsoid3d(CImgList<tf>& primitives, > const CImg<t>& tensor, const unsigned int subdivisions=3) { > primitives.assign(); > if (!subdivisions) return CImg<floatT>(); > CImg<floatT> S, V; > tensor.symmetric_eigen(S,V); > const float orient = > (V(0,1)*V(1,2) - V(0,2)*V(1,1))*V(2,0) + > (V(0,2)*V(1,0) - V(0,0)*V(1,2))*V(2,1) + > (V(0,0)*V(1,1) - V(0,1)*V(1,0))*V(2,2); > if (orient<0) { V(2,0) = -V(2,0); V(2,1) = -V(2,1); V(2,2) = -V(2,2); } > const float l0 = S[0], l1 = S[1], l2 = S[2]; > CImg<floatT> vertices = sphere3d(primitives,1.0,subdivisions); > vertices.get_shared_row(0)*=l0; > vertices.get_shared_row(1)*=l1; > vertices.get_shared_row(2)*=l2; > return V*vertices; > } ># 28921 "./CImg.h" > template<typename tp, typename tc, typename to> > CImg<T>& object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool full_check=true) { > return get_object3dtoCImg3d(primitives,colors,opacities,full_check).move_to(*this); > } > > > template<typename tp, typename tc> > CImg<T>& object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const bool full_check=true) { > return get_object3dtoCImg3d(primitives,colors,full_check).move_to(*this); > } > > > template<typename tp> > CImg<T>& object3dtoCImg3d(const CImgList<tp>& primitives, > const bool full_check=true) { > return get_object3dtoCImg3d(primitives,full_check).move_to(*this); > } > > > CImg<T>& object3dtoCImg3d(const bool full_check=true) { > return get_object3dtoCImg3d(full_check).move_to(*this); > } > > > template<typename tp, typename tc, typename to> > CImg<floatT> get_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool full_check=true) const { > char error_message[1024] = { 0 }; > if (!is_object3d(primitives,colors,opacities,full_check,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "object3dtoCImg3d(): Invalid specified 3d object (%u,%u) (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),_width,primitives._width,error_message); > CImg<floatT> res(1,_size_object3dtoCImg3d(primitives,colors,opacities)); > float *ptrd = res._data; > > > *(ptrd++) = 'C' + 0.5f; *(ptrd++) = 'I' + 0.5f; *(ptrd++) = 'm' + 0.5f; > *(ptrd++) = 'g' + 0.5f; *(ptrd++) = '3' + 0.5f; *(ptrd++) = 'd' + 0.5f; > > > *(ptrd++) = cimg::uint2float(_width); > *(ptrd++) = cimg::uint2float(primitives._width); > > > if (is_empty() || !primitives) return res; > const T *ptrx = data(0,0), *ptry = data(0,1), *ptrz = data(0,2); > for (int p = 0; p<(int)((*this)._width); ++p) { > *(ptrd++) = (float)*(ptrx++); > *(ptrd++) = (float)*(ptry++); > *(ptrd++) = (float)*(ptrz++); > } > > > for (int p = 0; p<(int)(primitives)._width; ++p) { > *(ptrd++) = (float)primitives[p].size(); > const tp *ptrp = primitives[p]._data; > for (unsigned long i = 0, _maxi = (primitives[p]).size(); i<_maxi; ++i) *(ptrd++) = cimg::uint2float((unsigned int)*(ptrp++)); > } > > > const unsigned int csiz = cimg::min(colors._width,primitives._width); > for (int c = 0; c<(int)csiz; ++c) { > const CImg<tc>& color = colors[c]; > const tc *ptrc = color._data; > if (color.size()==3) { *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*ptrc; } > else { > *(ptrd++) = -128.0f; > int shared_ind = -1; > if (color.is_shared()) for (int i = 0; i<c; ++i) if (ptrc==colors[i]._data) { shared_ind = i; break; } > if (shared_ind<0) { > *(ptrd++) = (float)color._width; > *(ptrd++) = (float)color._height; > *(ptrd++) = (float)color._spectrum; > for (unsigned long l = 0, _maxl = (color).size(); l<_maxl; ++l) *(ptrd++) = (float)*(ptrc++); > } else { > *(ptrd++) = (float)shared_ind; > *(ptrd++) = 0; > *(ptrd++) = 0; > } > } > } > const int csiz2 = primitives._width - colors._width; > for (int c = 0; c<csiz2; ++c) { *(ptrd++) = 200.0f; *(ptrd++) = 200.0f; *(ptrd++) = 200.0f; } > > > ptrd = _object3dtoCImg3d(opacities,ptrd); > const float *ptre = res.end(); > while (ptrd<ptre) *(ptrd++) = 1.0f; > return res; > } > > template<typename to> > float* _object3dtoCImg3d(const CImgList<to>& opacities, float *ptrd) const { > for (int o = 0; o<(int)(opacities)._width; ++o) { > const CImg<to>& opacity = opacities[o]; > const to *ptro = opacity._data; > if (opacity.size()==1) *(ptrd++) = (float)*ptro; > else { > *(ptrd++) = -128.0f; > int shared_ind = -1; > if (opacity.is_shared()) for (int i = 0; i<o; ++i) if (ptro==opacities[i]._data) { shared_ind = i; break; } > if (shared_ind<0) { > *(ptrd++) = (float)opacity._width; > *(ptrd++) = (float)opacity._height; > *(ptrd++) = (float)opacity._spectrum; > for (unsigned long l = 0, _maxl = (opacity).size(); l<_maxl; ++l) *(ptrd++) = (float)*(ptro++); > } else { > *(ptrd++) = (float)shared_ind; > *(ptrd++) = 0; > *(ptrd++) = 0; > } > } > } > return ptrd; > } > > template<typename to> > float* _object3dtoCImg3d(const CImg<to>& opacities, float *ptrd) const { > const to *ptro = opacities._data; > for (unsigned long o = 0, _maxo = (opacities).size(); o<_maxo; ++o) *(ptrd++) = (float)*(ptro++); > return ptrd; > } > > template<typename tp, typename tc, typename to> > unsigned int _size_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const CImgList<to>& opacities) const { > unsigned int siz = 8 + 3*width(); > for (int p = 0; p<(int)(primitives)._width; ++p) siz+=primitives[p].size() + 1; > for (int c = cimg::min(primitives._width,colors._width)-1; c>=0; --c) { > if (colors[c].is_shared()) siz+=4; > else { const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; } > } > if (colors._width<primitives._width) siz+=3*(primitives._width - colors._width); > for (int o = 0; o<(int)(opacities)._width; ++o) { > if (opacities[o].is_shared()) siz+=4; > else { const unsigned int osiz = opacities[o].size(); siz+=(osiz!=1)?4+osiz:1; } > } > siz+=primitives._width - opacities._width; > return siz; > } > > template<typename tp, typename tc, typename to> > unsigned int _size_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const CImg<to>& opacities) const { > unsigned int siz = 8 + 3*width(); > for (int p = 0; p<(int)(primitives)._width; ++p) siz+=primitives[p].size() + 1; > for (int c = cimg::min(primitives._width,colors._width)-1; c>=0; --c) { > const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; > } > if (colors._width<primitives._width) siz+=3*(primitives._width - colors._width); > siz+=primitives.size(); > cimg::unused(opacities); > return siz; > } > > > template<typename tp, typename tc> > CImg<floatT> get_object3dtoCImg3d(const CImgList<tp>& primitives, > const CImgList<tc>& colors, > const bool full_check=true) const { > CImgList<T> opacities; > return get_object3dtoCImg3d(primitives,colors,opacities,full_check); > } > > > template<typename tp> > CImg<floatT> get_object3dtoCImg3d(const CImgList<tp>& primitives, > const bool full_check=true) const { > CImgList<T> colors, opacities; > return get_object3dtoCImg3d(primitives,colors,opacities,full_check); > } > > > CImg<floatT> get_object3dtoCImg3d(const bool full_check=true) const { > CImgList<T> opacities, colors; > CImgList<uintT> primitives(width(),1,1,1,1); > for (int p = 0; p<(int)(primitives)._width; ++p) primitives(p,0) = p; > return get_object3dtoCImg3d(primitives,colors,opacities,full_check); > } ># 29117 "./CImg.h" > template<typename tp, typename tc, typename to> > CImg<T>& CImg3dtoobject3d(CImgList<tp>& primitives, > CImgList<tc>& colors, > CImgList<to>& opacities, > const bool full_check=true) { > return get_CImg3dtoobject3d(primitives,colors,opacities,full_check).move_to(*this); > } > > > template<typename tp, typename tc, typename to> > CImg<T> get_CImg3dtoobject3d(CImgList<tp>& primitives, > CImgList<tc>& colors, > CImgList<to>& opacities, > const bool full_check=true) const { > char error_message[1024] = { 0 }; > if (!is_CImg3d(full_check,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "CImg3dtoobject3d(): image instance is not a CImg3d (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),error_message); > const T *ptrs = _data + 6; > const unsigned int > nb_points = cimg::float2uint((float)*(ptrs++)), > nb_primitives = cimg::float2uint((float)*(ptrs++)); > const CImg<T> points = CImg<T>(ptrs,3,nb_points,1,1,true).get_transpose(); > ptrs+=3*nb_points; > primitives.assign(nb_primitives); > for (int p = 0; p<(int)(primitives)._width; ++p) { > const unsigned int nb_inds = (unsigned int)*(ptrs++); > primitives[p].assign(1,nb_inds); > tp *ptrp = primitives[p]._data; > for (unsigned int i = 0; i<nb_inds; ++i) *(ptrp++) = (tp)cimg::float2uint((float)*(ptrs++)); > } > colors.assign(nb_primitives); > for (int c = 0; c<(int)(colors)._width; ++c) { > if (*ptrs==(T)-128) { > ++ptrs; > const unsigned int w = (unsigned int)*(ptrs++), h = (unsigned int)*(ptrs++), s = (unsigned int)*(ptrs++); > if (!h && !s) colors[c].assign(colors[w],true); > else { colors[c].assign(ptrs,w,h,1,s,false); ptrs+=w*h*s; } > } else { colors[c].assign(ptrs,1,1,1,3,false); ptrs+=3; } > } > opacities.assign(nb_primitives); > for (int o = 0; o<(int)(opacities)._width; ++o) { > if (*ptrs==(T)-128) { > ++ptrs; > const unsigned int w = (unsigned int)*(ptrs++), h = (unsigned int)*(ptrs++), s = (unsigned int)*(ptrs++); > if (!h && !s) opacities[o].assign(opacities[w],true); > else { opacities[o].assign(ptrs,w,h,1,s,false); ptrs+=w*h*s; } > } else opacities[o].assign(1,1,1,1,*(ptrs++)); > } > return points; > } ># 29185 "./CImg.h" > template<typename tc> > CImg<T>& _draw_scanline(const int x0, const int x1, const int y, > const tc *const color, const float opacity, > const float brightness, > const float nopacity, const float copacity, const unsigned long whd) { > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const int nx0 = x0>0?x0:0, nx1 = x1<width()?x1:width()-1, dx = nx1 - nx0; > if (dx>=0) { > const tc *col = color; > const unsigned long off = whd - dx - 1; > T *ptrd = data(nx0,y); > if (opacity>=1) { > if (brightness==1) { > if (sizeof(T)!=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)*(col++); > for (int x = dx; x>=0; --x) *(ptrd++) = val; > ptrd+=off; > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)*(col++); > std::memset(ptrd,(int)val,dx+1); > ptrd+=whd; > } > } else if (brightness<1) { > if (sizeof(T)!=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(*(col++)*brightness); > for (int x = dx; x>=0; --x) *(ptrd++) = val; > ptrd+=off; > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(*(col++)*brightness); > std::memset(ptrd,(int)val,dx+1); > ptrd+=whd; > } > } else { > if (sizeof(T)!=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); > for (int x = dx; x>=0; --x) *(ptrd++) = val; > ptrd+=off; > } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); > std::memset(ptrd,(int)val,dx+1); > ptrd+=whd; > } > } > } else { > if (brightness==1) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)*(col++); > for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } > ptrd+=off; > } > } else if (brightness<=1) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(*(col++)*brightness); > for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } > ptrd+=off; > } > } else { > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); > for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } > ptrd+=off; > } > } > } > } > return *this; > } ># 29269 "./CImg.h" > template<typename tc> > CImg<T>& draw_point(const int x0, const int y0, const int z0, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_point(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (x0>=0 && y0>=0 && z0>=0 && x0<width() && y0<height() && z0<depth()) { > const unsigned long whd = (unsigned long)_width*_height*_depth; > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > T *ptrd = data(x0,y0,z0,0); > const tc *col = color; > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_point(const int x0, const int y0, > const tc *const color, const float opacity=1) { > return draw_point(x0,y0,0,color,opacity); > } > > > > > > > > template<typename t, typename tc> > CImg<T>& draw_point(const CImg<t>& points, > const tc *const color, const float opacity=1) { > if (is_empty() || !points) return *this; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_point(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > case 2 : { > for (int i = 0; i<(int)((points)._width); ++i) draw_point((int)points(i,0),(int)points(i,1),color,opacity); > } break; > default : { > for (int i = 0; i<(int)((points)._width); ++i) draw_point((int)points(i,0),(int)points(i,1),(int)points(i,2),color,opacity); > } > } > return *this; > } ># 29341 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { yleft-=(int)((float)xleft*((float)yright - yleft)/((float)xright - xleft)); xleft = 0; } > if (xright>=width()) { yright-=(int)(((float)xright - width())*((float)yright - yleft)/((float)xright - xleft)); xright = width() - 1; } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { xup-=(int)((float)yup*((float)xdown - xup)/((float)ydown - yup)); yup = 0; } > if (ydown>=height()) { xdown-=(int)(((float)ydown - height())*((float)xdown - xup)/((float)ydown - yup)); ydown = height() - 1; } > T *ptrd0 = data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()); > const unsigned long wh = (unsigned long)_width*_height; > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > T *ptrd = ptrd0; const tc* col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; const tc* col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > T *ptrd = ptrd0; const tc* col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; const tc* col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } > return *this; > } ># 29421 "./CImg.h" > template<typename tz,typename tc> > CImg<T>& draw_line(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > tzfloat > Z0 = 1/(tzfloat)z0, Z1 = 1/(tzfloat)z1, nz0 = Z0, nz1 = Z1, dz = Z1 - Z0, > &zleft = xdir?nz0:nz1, > &zright = xdir?nz1:nz0, > &zup = ydir?nz0:nz1, > &zdown = ydir?nz1:nz0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > zleft-=(tzfloat)xleft*(zright - zleft)/D; > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > zright-=(tzfloat)d*(zright - zleft)/D; > xright = width() - 1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > zup-=(tzfloat)yup*(zdown - zup)/D; > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > zdown-=(tzfloat)d*(zdown - zup)/D; > ydown = height() - 1; > } > T *ptrd0 = data(nx0,ny0); > tz *ptrz = zbuffer.data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()); > const unsigned long wh = (unsigned long)_width*_height, > ndx = dx>0?dx:1; > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz && pattern&hatch) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz && pattern&hatch) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > T *ptrd = ptrd0; const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } > return *this; > } ># 29549 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > int nx0 = x0, ny0 = y0, nz0 = z0, nx1 = x1, ny1 = y1, nz1 = z1; > if (nx0>nx1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (nx1<0 || nx0>=width()) return *this; > if (nx0<0) { const float D = 1.0f + nx1 - nx0; ny0-=(int)((float)nx0*(1.0f + ny1 - ny0)/D); nz0-=(int)((float)nx0*(1.0f + nz1 - nz0)/D); nx0 = 0; } > if (nx1>=width()) { const float d = (float)nx1 - width(), D = 1.0f + nx1 - nx0; ny1+=(int)(d*(1.0f + ny0 - ny1)/D); nz1+=(int)(d*(1.0f + nz0 - nz1)/D); nx1 = width() - 1; } > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (ny1<0 || ny0>=height()) return *this; > if (ny0<0) { const float D = 1.0f + ny1 - ny0; nx0-=(int)((float)ny0*(1.0f + nx1 - nx0)/D); nz0-=(int)((float)ny0*(1.0f + nz1 - nz0)/D); ny0 = 0; } > if (ny1>=height()) { const float d = (float)ny1 - height(), D = 1.0f + ny1 - ny0; nx1+=(int)(d*(1.0f + nx0 - nx1)/D); nz1+=(int)(d*(1.0f + nz0 - nz1)/D); ny1 = height() - 1; } > if (nz0>nz1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (nz1<0 || nz0>=depth()) return *this; > if (nz0<0) { const float D = 1.0f + nz1 - nz0; nx0-=(int)((float)nz0*(1.0f + nx1 - nx0)/D); ny0-=(int)((float)nz0*(1.0f + ny1 - ny0)/D); nz0 = 0; } > if (nz1>=depth()) { const float d = (float)nz1 - depth(), D = 1.0f + nz1 - nz0; nx1+=(int)(d*(1.0f + nx0 - nx1)/D); ny1+=(int)(d*(1.0f + ny0 - ny1)/D); nz1 = depth() - 1; } > const unsigned int dmax = cimg::max(cimg::abs(nx1 - nx0),cimg::abs(ny1 - ny0),nz1 - nz0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const float px = (nx1 - nx0)/(float)dmax, py = (ny1 - ny0)/(float)dmax, pz = (nz1 - nz0)/(float)dmax; > float x = (float)nx0, y = (float)ny0, z = (float)nz0; > if (opacity>=1) for (unsigned int t = 0; t<=dmax; ++t) { > if (!(~pattern) || (~pattern && pattern&hatch)) { > T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } > } > x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > for (unsigned int t = 0; t<=dmax; ++t) { > if (!(~pattern) || (~pattern && pattern&hatch)) { > T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } > } > x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } > } > } > return *this; > } ># 29620 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, > const int x1, const int y1, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_line(x0,y0,x1,y1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > dtx = tx1-tx0, dty = ty1-ty0, > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > tnx0 = tx0, tnx1 = tx1, tny0 = ty0, tny1 = ty1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &txleft = xdir?tnx0:tnx1, &tyleft = xdir?tny0:tny1, &txright = xdir?tnx1:tnx0, &tyright = xdir?tny1:tny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0, > &txup = ydir?tnx0:tnx1, &tyup = ydir?tny0:tny1, &txdown = ydir?tnx1:tnx0, &tydown = ydir?tny1:tny0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > txleft-=(int)((float)xleft*((float)txright - txleft)/D); > tyleft-=(int)((float)xleft*((float)tyright - tyleft)/D); > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > txright-=(int)(d*((float)txright - txleft)/D); > tyright-=(int)(d*((float)tyright - tyleft)/D); > xright = width() - 1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > txup-=(int)((float)yup*((float)txdown - txup)/D); > tyup-=(int)((float)yup*((float)tydown - tyup)/D); > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > txdown-=(int)(d*((float)txdown - txup)/D); > tydown-=(int)(d*((float)tydown - tyup)/D); > ydown = height() - 1; > } > T *ptrd0 = data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()), > ndx = dx>0?dx:1; > const unsigned long wh = (unsigned long)_width*_height; > > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > T *ptrd = ptrd0; > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture(tx,ty,0,c); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture(tx,ty,0,c); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; > if (pattern&hatch) { > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture(tx,ty,0,c) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > T *ptrd = ptrd0; > const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture(tx,ty,0,c) + *ptrd*copacity); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } > return *this; > } ># 29742 "./CImg.h" > template<typename tc> > CImg<T>& draw_line(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() && z0<=0 && z1<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_line(x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > float > Tx0 = tx0/z0, Tx1 = tx1/z1, > Ty0 = ty0/z0, Ty1 = ty1/z1, > Z0 = 1/z0, Z1 = 1/z1, > dz = Z1 - Z0, dtx = Tx1 - Tx0, dty = Ty1 - Ty0, > tnx0 = Tx0, tnx1 = Tx1, tny0 = Ty0, tny1 = Ty1, nz0 = Z0, nz1 = Z1, > &zleft = xdir?nz0:nz1, &txleft = xdir?tnx0:tnx1, &tyleft = xdir?tny0:tny1, > &zright = xdir?nz1:nz0, &txright = xdir?tnx1:tnx0, &tyright = xdir?tny1:tny0, > &zup = ydir?nz0:nz1, &txup = ydir?tnx0:tnx1, &tyup = ydir?tny0:tny1, > &zdown = ydir?nz1:nz0, &txdown = ydir?tnx1:tnx0, &tydown = ydir?tny1:tny0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > zleft-=(float)xleft*(zright - zleft)/D; > txleft-=(float)xleft*(txright - txleft)/D; > tyleft-=(float)xleft*(tyright - tyleft)/D; > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > zright-=d*(zright - zleft)/D; > txright-=d*(txright - txleft)/D; > tyright-=d*(tyright - tyleft)/D; > xright = width() - 1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > zup-=(float)yup*(zdown - zup)/D; > txup-=(float)yup*(txdown - txup)/D; > tyup-=(float)yup*(tydown - tyup)/D; > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > zdown-=d*(zdown - zup)/D; > txdown-=d*(txdown - txup)/D; > tydown-=d*(tydown - tyup)/D; > ydown = height() - 1; > } > T *ptrd0 = data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()), > ndx = dx>0?dx:1; > const unsigned long wh = (unsigned long)_width*_height; > > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > ptrd0+=offx; > if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } > } > } > return *this; > } ># 29874 "./CImg.h" > template<typename tz, typename tc> > CImg<T>& draw_line(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_line(zbuffer,x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); > static unsigned int hatch = ~0U - (~0U>>1); > if (init_hatch) hatch = ~0U - (~0U>>1); > const bool xdir = x0<x1, ydir = y0<y1; > int > nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1, > &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1, > &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0, > &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1, > &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0; > float > Tx0 = tx0/z0, Tx1 = tx1/z1, > Ty0 = ty0/z0, Ty1 = ty1/z1, > dtx = Tx1 - Tx0, dty = Ty1 - Ty0, > tnx0 = Tx0, tnx1 = Tx1, tny0 = Ty0, tny1 = Ty1, > &txleft = xdir?tnx0:tnx1, &tyleft = xdir?tny0:tny1, > &txright = xdir?tnx1:tnx0, &tyright = xdir?tny1:tny0, > &txup = ydir?tnx0:tnx1, &tyup = ydir?tny0:tny1, > &txdown = ydir?tnx1:tnx0, &tydown = ydir?tny1:tny0; > tzfloat > Z0 = 1/(tzfloat)z0, Z1 = 1/(tzfloat)z1, > dz = Z1 - Z0, nz0 = Z0, nz1 = Z1, > &zleft = xdir?nz0:nz1, > &zright = xdir?nz1:nz0, > &zup = ydir?nz0:nz1, > &zdown = ydir?nz1:nz0; > if (xright<0 || xleft>=width()) return *this; > if (xleft<0) { > const float D = (float)xright - xleft; > yleft-=(int)((float)xleft*((float)yright - yleft)/D); > zleft-=(float)xleft*(zright - zleft)/D; > txleft-=(float)xleft*(txright - txleft)/D; > tyleft-=(float)xleft*(tyright - tyleft)/D; > xleft = 0; > } > if (xright>=width()) { > const float d = (float)xright - width(), D = (float)xright - xleft; > yright-=(int)(d*((float)yright - yleft)/D); > zright-=d*(zright - zleft)/D; > txright-=d*(txright - txleft)/D; > tyright-=d*(tyright - tyleft)/D; > xright = width()-1; > } > if (ydown<0 || yup>=height()) return *this; > if (yup<0) { > const float D = (float)ydown - yup; > xup-=(int)((float)yup*((float)xdown - xup)/D); > zup-=yup*(zdown - zup)/D; > txup-=yup*(txdown - txup)/D; > tyup-=yup*(tydown - tyup)/D; > yup = 0; > } > if (ydown>=height()) { > const float d = (float)ydown - height(), D = (float)ydown - yup; > xdown-=(int)(d*((float)xdown - xup)/D); > zdown-=d*(zdown - zup)/D; > txdown-=d*(txdown - txup)/D; > tydown-=d*(tydown - tyup)/D; > ydown = height()-1; > } > T *ptrd0 = data(nx0,ny0); > tz *ptrz = zbuffer.data(nx0,ny0); > int dx = xright - xleft, dy = ydown - yup; > const bool steep = dy>dx; > if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); > const long > offx = (nx0<nx1?1:-1)*(steep?width():1), > offy = (ny0<ny1?1:-1)*(steep?1:width()), > ndx = dx>0?dx:1; > const unsigned long wh = (unsigned long)_width*_height; > > if (opacity>=1) { > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)texture((int)(tx/z),(int)(ty/z),0,c); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } else { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { > if (pattern&hatch) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > } > } > hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } else for (int error = dx>>1, x = 0; x<=dx; ++x) { > const tzfloat z = Z0 + x*dz/ndx; > if (z>=(tzfloat)*ptrz) { > *ptrz = (tz)z; > const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; > T *ptrd = ptrd0; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*texture((int)(tx/z),(int)(ty/z),0,c) + *ptrd*copacity); ptrd+=wh; } > } > ptrd0+=offx; ptrz+=offx; > if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } > } > } > return *this; > } ># 30028 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_line(const CImg<t>& points, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() || !points || points._width<2) return *this; > bool ninit_hatch = init_hatch; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_line(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > > case 2 : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1); > int ox = x0, oy = y0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1); > draw_line(ox,oy,x,y,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; > } > } break; > default : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1), z0 = (int)points(0,2); > int ox = x0, oy = y0, oz = z0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1), z = (int)points(i,2); > draw_line(ox,oy,oz,x,y,z,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; oz = z; > } > } > } > return *this; > } ># 30077 "./CImg.h" > template<typename tc> > CImg<T>& draw_arrow(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity=1, > const float angle=30, const float length=-10, > const unsigned int pattern=~0U) { > if (is_empty()) return *this; > const float u = (float)(x0 - x1), v = (float)(y0 - y1), sq = u*u + v*v, > deg = (float)(angle*cimg::PI/180), ang = (sq>0)?(float)std::atan2(v,u):0.0f, > l = (length>=0)?length:-length*(float)std::sqrt(sq)/100; > if (sq>0) { > const float > cl = (float)std::cos(ang - deg), sl = (float)std::sin(ang - deg), > cr = (float)std::cos(ang + deg), sr = (float)std::sin(ang + deg); > const int > xl = x1 + (int)(l*cl), yl = y1 + (int)(l*sl), > xr = x1 + (int)(l*cr), yr = y1 + (int)(l*sr), > xc = x1 + (int)((l+1)*(cl+cr))/2, yc = y1 + (int)((l+1)*(sl+sr))/2; > draw_line(x0,y0,xc,yc,color,opacity,pattern).draw_triangle(x1,y1,xl,yl,xr,yr,color,opacity); > } else draw_point(x0,y0,color,opacity); > return *this; > } ># 30132 "./CImg.h" > template<typename tc> > CImg<T>& draw_spline(const int x0, const int y0, const float u0, const float v0, > const int x1, const int y1, const float u1, const float v1, > const tc *const color, const float opacity=1, > const float precision=0.25, const unsigned int pattern=~0U, > const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (x0==x1 && y0==y1) return draw_point(x0,y0,color,opacity); > bool ninit_hatch = init_hatch; > const float > ax = u0 + u1 + 2*(x0 - x1), > bx = 3*(x1 - x0) - 2*u0 - u1, > ay = v0 + v1 + 2*(y0 - y1), > by = 3*(y1 - y0) - 2*v0 - v1, > _precision = 1/(std::sqrt(cimg::sqr((float)x0-x1)+cimg::sqr((float)y0-y1))*(precision>0?precision:1)); > int ox = x0, oy = y0; > for (float t = 0; t<1; t+=_precision) { > const float t2 = t*t, t3 = t2*t; > const int > nx = (int)(ax*t3 + bx*t2 + u0*t + x0), > ny = (int)(ay*t3 + by*t2 + v0*t + y0); > draw_line(ox,oy,nx,ny,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = nx; oy = ny; > } > return draw_line(ox,oy,x1,y1,color,opacity,pattern,false); > } > > > > > > > template<typename tc> > CImg<T>& draw_spline(const int x0, const int y0, const int z0, const float u0, const float v0, const float w0, > const int x1, const int y1, const int z1, const float u1, const float v1, const float w1, > const tc *const color, const float opacity=1, > const float precision=4, const unsigned int pattern=~0U, > const bool init_hatch=true) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (x0==x1 && y0==y1 && z0==z1) return draw_point(x0,y0,z0,color,opacity); > bool ninit_hatch = init_hatch; > const float > ax = u0 + u1 + 2*(x0 - x1), > bx = 3*(x1 - x0) - 2*u0 - u1, > ay = v0 + v1 + 2*(y0 - y1), > by = 3*(y1 - y0) - 2*v0 - v1, > az = w0 + w1 + 2*(z0 - z1), > bz = 3*(z1 - z0) - 2*w0 - w1, > _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); > int ox = x0, oy = y0, oz = z0; > for (float t = 0; t<1; t+=_precision) { > const float t2 = t*t, t3 = t2*t; > const int > nx = (int)(ax*t3 + bx*t2 + u0*t + x0), > ny = (int)(ay*t3 + by*t2 + v0*t + y0), > nz = (int)(az*t3 + bz*t2 + w0*t + z0); > draw_line(ox,oy,oz,nx,ny,nz,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = nx; oy = ny; oz = nz; > } > return draw_line(ox,oy,oz,x1,y1,z1,color,opacity,pattern,false); > } ># 30224 "./CImg.h" > template<typename t> > CImg<T>& draw_spline(const int x0, const int y0, const float u0, const float v0, > const int x1, const int y1, const float u1, const float v1, > const CImg<t>& texture, > const int tx0, const int ty0, const int tx1, const int ty1, > const float opacity=1, > const float precision=4, const unsigned int pattern=~0U, > const bool init_hatch=true) { > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_empty()) return *this; > if (is_overlapped(texture)) return draw_spline(x0,y0,u0,v0,x1,y1,u1,v1,+texture,tx0,ty0,tx1,ty1,precision,opacity,pattern,init_hatch); > if (x0==x1 && y0==y1) return draw_point(x0,y0,texture.get_vector_at(x0,y0),opacity); > bool ninit_hatch = init_hatch; > const float > ax = u0 + u1 + 2*(x0 - x1), > bx = 3*(x1 - x0) - 2*u0 - u1, > ay = v0 + v1 + 2*(y0 - y1), > by = 3*(y1 - y0) - 2*v0 - v1, > _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); > int ox = x0, oy = y0, otx = tx0, oty = ty0; > for (float t1 = 0; t1<1; t1+=_precision) { > const float t2 = t1*t1, t3 = t2*t1; > const int > nx = (int)(ax*t3 + bx*t2 + u0*t1 + x0), > ny = (int)(ay*t3 + by*t2 + v0*t1 + y0), > ntx = tx0 + (int)((tx1-tx0)*t1), > nty = ty0 + (int)((ty1-ty0)*t1); > draw_line(ox,oy,nx,ny,texture,otx,oty,ntx,nty,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = nx; oy = ny; otx = ntx; oty = nty; > } > return draw_line(ox,oy,x1,y1,texture,otx,oty,tx1,ty1,opacity,pattern,false); > } ># 30273 "./CImg.h" > template<typename tp, typename tt, typename tc> > CImg<T>& draw_spline(const CImg<tp>& points, const CImg<tt>& tangents, > const tc *const color, const float opacity=1, > const bool is_closed_set=false, const float precision=4, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() || !points || !tangents || points._width<2 || tangents._width<2) return *this; > bool ninit_hatch = init_hatch; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > > case 2 : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1); > const float u0 = (float)tangents(0,0), v0 = (float)tangents(0,1); > int ox = x0, oy = y0; > float ou = u0, ov = v0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1); > const float u = (float)tangents(i,0), v = (float)tangents(i,1); > draw_spline(ox,oy,ou,ov,x,y,u,v,color,precision,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; ou = u; ov = v; > } > if (is_closed_set) draw_spline(ox,oy,ou,ov,x0,y0,u0,v0,color,precision,opacity,pattern,false); > } break; > default : { > const int x0 = (int)points(0,0), y0 = (int)points(0,1), z0 = (int)points(0,2); > const float u0 = (float)tangents(0,0), v0 = (float)tangents(0,1), w0 = (float)tangents(0,2); > int ox = x0, oy = y0, oz = z0; > float ou = u0, ov = v0, ow = w0; > for (unsigned int i = 1; i<points._width; ++i) { > const int x = (int)points(i,0), y = (int)points(i,1), z = (int)points(i,2); > const float u = (float)tangents(i,0), v = (float)tangents(i,1), w = (float)tangents(i,2); > draw_spline(ox,oy,oz,ou,ov,ow,x,y,z,u,v,w,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; oz = z; ou = u; ov = v; ow = w; > } > if (is_closed_set) draw_spline(ox,oy,oz,ou,ov,ow,x0,y0,z0,u0,v0,w0,color,precision,opacity,pattern,false); > } > } > return *this; > } > > > > > > template<typename tp, typename tc> > CImg<T>& draw_spline(const CImg<tp>& points, > const tc *const color, const float opacity=1, > const bool is_closed_set=false, const float precision=4, > const unsigned int pattern=~0U, const bool init_hatch=true) { > if (is_empty() || !points || points._width<2) return *this; > CImg<Tfloat> tangents; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > points._width,points._height,points._depth,points._spectrum,points._data); > case 2 : { > tangents.assign(points._width,points._height); > for (int p = 0; p<(int)((points)._width); ++p) { > const unsigned int > p0 = is_closed_set?(p+points._width-1)%points._width:(p?p-1:0), > p1 = is_closed_set?(p+1)%points._width:(p+1<points._width?p+1:p); > const float > x = (float)points(p,0), > y = (float)points(p,1), > x0 = (float)points(p0,0), > y0 = (float)points(p0,1), > x1 = (float)points(p1,0), > y1 = (float)points(p1,1), > u0 = x - x0, > v0 = y - y0, > n0 = 1e-8f + (float)std::sqrt(u0*u0 + v0*v0), > u1 = x1 - x, > v1 = y1 - y, > n1 = 1e-8f + (float)std::sqrt(u1*u1 + v1*v1), > u = u0/n0 + u1/n1, > v = v0/n0 + v1/n1, > n = 1e-8f + (float)std::sqrt(u*u + v*v), > fact = 0.5f*(n0 + n1); > tangents(p,0) = (Tfloat)(fact*u/n); > tangents(p,1) = (Tfloat)(fact*v/n); > } > } break; > default : { > tangents.assign(points._width,points._height); > for (int p = 0; p<(int)((points)._width); ++p) { > const unsigned int > p0 = is_closed_set?(p+points._width-1)%points._width:(p?p-1:0), > p1 = is_closed_set?(p+1)%points._width:(p+1<points._width?p+1:p); > const float > x = (float)points(p,0), > y = (float)points(p,1), > z = (float)points(p,2), > x0 = (float)points(p0,0), > y0 = (float)points(p0,1), > z0 = (float)points(p0,2), > x1 = (float)points(p1,0), > y1 = (float)points(p1,1), > z1 = (float)points(p1,2), > u0 = x - x0, > v0 = y - y0, > w0 = z - z0, > n0 = 1e-8f + (float)std::sqrt(u0*u0 + v0*v0 + w0*w0), > u1 = x1 - x, > v1 = y1 - y, > w1 = z1 - z, > n1 = 1e-8f + (float)std::sqrt(u1*u1 + v1*v1 + w1*w1), > u = u0/n0 + u1/n1, > v = v0/n0 + v1/n1, > w = w0/n0 + w1/n1, > n = 1e-8f + (float)std::sqrt(u*u + v*v + w*w), > fact = 0.5f*(n0 + n1); > tangents(p,0) = (Tfloat)(fact*u/n); > tangents(p,1) = (Tfloat)(fact*v/n); > tangents(p,2) = (Tfloat)(fact*w/n); > } > } > } > return draw_spline(points,tangents,color,opacity,is_closed_set,precision,pattern,init_hatch); > } ># 30695 "./CImg.h" > template<typename tc> > CImg<T>& _draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, const float opacity, > const float brightness) { > const float _sc_nopacity = cimg::abs((float)opacity), _sc_copacity = 1 - cimg::max((float)opacity,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > const float nbrightness = brightness<0?0:(brightness>2?2:brightness); > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2); > if (ny0<height() && ny2>=0) { > if ((nx1 - nx0)*(ny2 - ny0) - (nx2 - nx0)*(ny1 - ny0)<0) > for (int y = ny0<0?0:ny0, xr = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xl = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xl+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xl)) _draw_scanline(xl,xr,y,color,opacity,nbrightness,_sc_nopacity,_sc_copacity,_sc_whd); > else > for (int y = ny0<0?0:ny0, xr = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xl = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xl+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xl)) _draw_scanline(xr,xl,y,color,opacity,nbrightness,_sc_nopacity,_sc_copacity,_sc_whd); > } > return *this; > } ># 30727 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > _draw_triangle(x0,y0,x1,y1,x2,y2,color,opacity,1); > return *this; > } ># 30753 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, const float opacity, > const unsigned int pattern) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > draw_line(x0,y0,x1,y1,color,opacity,pattern,true). > draw_line(x1,y1,x2,y2,color,opacity,pattern,false). > draw_line(x2,y2,x0,y0,color,opacity,pattern,false); > return *this; > } ># 30786 "./CImg.h" > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const tc *const color, const float opacity=1, > const float brightness=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xleft0+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; pzl = pzn; } > int xleft = xleft0, xright = xright0; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright); > const int dx = xright - xleft; > const tzfloat pentez = (zright - zleft)/dx; > if (xleft<0 && dx) zleft-=xleft*(zright - zleft)/dx; > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width() - 1; > T* ptrd = data(xleft,y,0,0); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nbrightness*(*col++)); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*nbrightness**(col++) + *ptrd*copacity); ptrd+=whd; } > ptrd-=offx; > } > zleft+=pentez; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > } > } > zr+=pzr; zl+=pzl; > } > return *this; > } ># 30904 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; > if (xright<xleft) cimg::swap(xleft,xright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright - cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc-(dx?dx*(dc/dx):0); > int errc = dx>>1; > if (xleft<0 && dx) cleft-=xleft*(cright - cleft)/dx; > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width() - 1; > T* ptrd = data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > ptrd+=whd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > } > return *this; > } > > > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const tc *const color, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; pzl = pzn; } > int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright-cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc-(dx?dx*(dc/dx):0); > const tzfloat pentez = (zright - zleft)/dx; > int errc = dx>>1; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > zleft-=xleft*(zright - zleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T *ptrd = data(xleft,y); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > zr+=pzr; zl+=pzl; > } > return *this; > } ># 31070 "./CImg.h" > template<typename tc1, typename tc2, typename tc3> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc1 *const color1, > const tc2 *const color2, > const tc3 *const color3, > const float opacity=1) { > const unsigned char one = 1; > for (int c = 0; c<(int)((*this)._spectrum); ++c) get_shared_channel(c).draw_triangle(x0,y0,x1,y1,x2,y2,&one,color1[c],color2[c],color3[c],opacity); > return *this; > } ># 31101 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float opacity=1, > const float brightness=1) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), txright0 = ny0>=0?ntx0:(ntx0-ny0*(ntx2-ntx0)/(ny2-ny0)), tyright0 = ny0>=0?nty0:(nty0-ny0*(nty2-nty0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), txleft0 = ny1>=0?(ny0>=0?(ny0==ny1?ntx1:ntx0):(ntx0-ny0*(ntx1-ntx0)/(ny1-ny0))):(ntx1-ny1*(ntx2-ntx1)/(ny2-ny1)), tyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nty1:nty0):(nty0-ny0*(nty1-nty0)/(ny1-ny0))):(nty1-ny1*(nty2-nty1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = ntx2>ntx1?ntx2-ntx1:(_stxn=-1,ntx1-ntx2), _dtxr = ntx2>ntx0?ntx2-ntx0:(_stxr=-1,ntx0-ntx2), _dtxl = ntx1>ntx0?ntx1-ntx0:(_stxl=-1,ntx0-ntx1), _dtyn = nty2>nty1?nty2-nty1:(_styn=-1,nty1-nty2), _dtyr = nty2>nty0?nty2-nty0:(_styr=-1,nty0-nty2), _dtyl = nty1>nty0?nty1-nty0:(_styl=-1,nty0-nty1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(ntx2-ntx1)/_dyn:0, _rtyn = _dyn?(nty2-nty1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(ntx2-ntx0)/_dyr:0, _rtyr = _dyr?(nty2-nty0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(ntx1-ntx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nty1-nty0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), txright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), tyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(txleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), tyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txleft0=ntx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyleft0=nty1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > txleft = txleft0, txright = txright0, > tyleft = tyleft0, tyright = tyright0; > if (xright<xleft) cimg::swap(xleft,xright,txleft,txright,tyleft,tyright); > const int > dx = xright - xleft, > dtx = txright>txleft?txright - txleft:txleft - txright, > dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, > rtx = dx?(txright - txleft)/dx:0, > rty = dx?(tyright - tyleft)/dx:0, > stx = txright>txleft?1:-1, > sty = tyright>tyleft?1:-1, > ndtx = dtx - (dx?dx*(dtx/dx):0), > ndty = dty - (dx?dx*(dty/dx):0); > int errtx = dx>>1, errty = errtx; > if (xleft<0 && dx) { > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)*col; > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nbrightness**col); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float opacity=1, > const float brightness=1) { > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2, > nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xleft0+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int xleft = xleft0, xright = xright0; > float > zleft = zl, zright = zr, > txleft = txl, txright = txr, > tyleft = tyl, tyright = tyr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright); > const int dx = xright - xleft; > const float > pentez = (zright - zleft)/dx, > pentetx = (txright - txleft)/dx, > pentety = (tyright - tyleft)/dx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)*col; > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x=xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nbrightness**col); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } > > > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float opacity=1, > const float brightness=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float > nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), > nbrightness = brightness<0?0:(brightness>2?2:brightness); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), _sxn=1, _sxr=1, _sxl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errr = _dyr/2, _errl = _dyl/2, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), xleft0+=(y!=ny1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int xleft = xleft0, xright = xright0; > float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright); > const int dx = xright - xleft; > const float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; > const tzfloat pentez = (zright - zleft)/dx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T *ptrd = data(xleft,y,0,0); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)*col; > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nbrightness**col); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } else { > if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > } > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } ># 31524 "./CImg.h" > template<typename tc, typename tl> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const tc *const color, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,color,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd-1; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > if (xright<xleft) cimg::swap(xleft,xright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); > ptrd+=whd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > } > return *this; > } > > > template<typename tz, typename tc, typename tl> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const tc *const color, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color, > +light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > if (y==ny1) { zl = nz1; pzl = pzn; } > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > const tzfloat pentez = (zright - zleft)/dx; > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T *ptrd = data(xleft,y,0,0); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const tc cval = *(col++); > *ptrd = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tc *col = color; > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const tc cval = *(col++); > const T val = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; > } > ptrd-=offx; > } > zleft+=pentez; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > zr+=pzr; zl+=pzl; > } > return *this; > } ># 31736 "./CImg.h" > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) > return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,brightness0,brightness1,brightness2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), txright0 = ny0>=0?ntx0:(ntx0-ny0*(ntx2-ntx0)/(ny2-ny0)), tyright0 = ny0>=0?nty0:(nty0-ny0*(nty2-nty0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), txleft0 = ny1>=0?(ny0>=0?(ny0==ny1?ntx1:ntx0):(ntx0-ny0*(ntx1-ntx0)/(ny1-ny0))):(ntx1-ny1*(ntx2-ntx1)/(ny2-ny1)), tyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nty1:nty0):(nty0-ny0*(nty1-nty0)/(ny1-ny0))):(nty1-ny1*(nty2-nty1)/(ny2-ny1)), _sxn=1, _scn=1, _stxn=1, _styn=1, _sxr=1, _scr=1, _stxr=1, _styr=1, _sxl=1, _scl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dtxn = ntx2>ntx1?ntx2-ntx1:(_stxn=-1,ntx1-ntx2), _dtxr = ntx2>ntx0?ntx2-ntx0:(_stxr=-1,ntx0-ntx2), _dtxl = ntx1>ntx0?ntx1-ntx0:(_stxl=-1,ntx0-ntx1), _dtyn = nty2>nty1?nty2-nty1:(_styn=-1,nty1-nty2), _dtyr = nty2>nty0?nty2-nty0:(_styr=-1,nty0-nty2), _dtyl = nty1>nty0?nty1-nty0:(_styl=-1,nty0-nty1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errcr = _errr, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errcl = _errl, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rtxn = _dyn?(ntx2-ntx1)/_dyn:0, _rtyn = _dyn?(nty2-nty1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rtxr = _dyr?(ntx2-ntx0)/_dyr:0, _rtyr = _dyr?(nty2-nty0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(ntx1-ntx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nty1-nty0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), txright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), tyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), txleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), tyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txleft0=ntx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyleft0=nty1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > cleft = cleft0, cright = cright0, > txleft = txleft0, txright = txright0, > tyleft = tyleft0, tyright = tyright0; > if (xright<xleft) cimg::swap(xleft,xright,cleft,cright,txleft,txright,tyleft,tyright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > dtx = txright>txleft?txright - txleft:txleft - txright, > dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, > rc = dx?(cright - cleft)/dx:0, > rtx = dx?(txright - txleft)/dx:0, > rty = dx?(tyright - tyleft)/dx:0, > sc = cright>cleft?1:-1, > stx = txright>txleft?1:-1, > sty = tyright>tyleft?1:-1, > ndc = dc - (dx?dx*(dc/dx):0), > ndtx = dtx - (dx?dx*(dtx/dx):0), > ndty = dty - (dx?dx*(dty/dx):0); > int errc = dx>>1, errtx = errc, errty = errc; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_triangle(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, > brightness0,brightness1,brightness2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2, > nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int > xleft = xleft0, xright = xright0, > cleft = cleft0, cright = cright0; > float > zleft = zl, zright = zr, > txleft = txl, txright = txr, > tyleft = tyl, tyright = tyr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright - cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc - (dx?dx*(dc/dx):0); > const float > pentez = (zright - zleft)/dx, > pentetx = (txright - txleft)/dx, > pentety = (tyright - tyleft)/dx; > int errc = dx>>1; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } > > > template<typename tz, typename tc> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const float brightness0, > const float brightness1, > const float brightness2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, > brightness0,brightness1,brightness2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), > nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), > nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), cright0 = ny0>=0?nc0:(nc0-ny0*(nc2-nc0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), cleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nc1:nc0):(nc0-ny0*(nc1-nc0)/(ny1-ny0))):(nc1-ny1*(nc2-nc1)/(ny2-ny1)), _sxn=1, _scn=1, _sxr=1, _scr=1, _sxl=1, _scl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dcn = nc2>nc1?nc2-nc1:(_scn=-1,nc1-nc2), _dcr = nc2>nc0?nc2-nc0:(_scr=-1,nc0-nc2), _dcl = nc1>nc0?nc1-nc0:(_scl=-1,nc0-nc1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dcn-=_dyn?_dyn*(_dcn/_dyn):0, _dcr-=_dyr?_dyr*(_dcr/_dyr):0, _dcl-=_dyl?_dyl*(_dcl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errcn = _errn, _errr = _dyr/2, _errcr = _errr, _errl = _dyl/2, _errcl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rcn = _dyn?(nc2-nc1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rcr = _dyr?(nc2-nc0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rcl = (ny0!=ny1 && ny1>0)?(_dyl?(nc1-nc0)/_dyl:0): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), cright0+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), xleft0+=(y!=ny1)?(cleft0+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cleft0=nc1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; > float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,cleft,cright); > const int > dx = xright - xleft, > dc = cright>cleft?cright - cleft:cleft - cright, > rc = dx?(cright - cleft)/dx:0, > sc = cright>cleft?1:-1, > ndc = dc - (dx?dx*(dc/dx):0); > float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; > const tzfloat pentez = (zright - zleft)/dx; > int errc = dx>>1; > if (xleft<0 && dx) { > cleft-=xleft*(cright - cleft)/dx; > zleft-=xleft*(zright - zleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } ># 32076 "./CImg.h" > template<typename tc, typename tl> > CImg<T>& draw_triangle(const int x0, const int y0, > const int x1, const int y1, > const int x2, const int y2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > if (is_empty()) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2); > if (ny0>=height() || ny2<0) return *this; > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), txright0 = ny0>=0?ntx0:(ntx0-ny0*(ntx2-ntx0)/(ny2-ny0)), tyright0 = ny0>=0?nty0:(nty0-ny0*(nty2-nty0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), txleft0 = ny1>=0?(ny0>=0?(ny0==ny1?ntx1:ntx0):(ntx0-ny0*(ntx1-ntx0)/(ny1-ny0))):(ntx1-ny1*(ntx2-ntx1)/(ny2-ny1)), tyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nty1:nty0):(nty0-ny0*(nty1-nty0)/(ny1-ny0))):(nty1-ny1*(nty2-nty1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _slxn=1, _slyn=1, _sxr=1, _stxr=1, _styr=1, _slxr=1, _slyr=1, _sxl=1, _stxl=1, _styl=1, _slxl=1, _slyl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dyn = ny2-ny1, _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dyr = ny2-ny0, _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dyl = ny1-ny0, _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dlxn = ntx2>ntx1?ntx2-ntx1:(_slxn=-1,ntx1-ntx2), _dlxr = ntx2>ntx0?ntx2-ntx0:(_slxr=-1,ntx0-ntx2), _dlxl = ntx1>ntx0?ntx1-ntx0:(_slxl=-1,ntx0-ntx1), _dlyn = nty2>nty1?nty2-nty1:(_slyn=-1,nty1-nty2), _dlyr = nty2>nty0?nty2-nty0:(_slyr=-1,nty0-nty2), _dlyl = nty1>nty0?nty1-nty0:(_slyl=-1,nty0-nty1), _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, _dlxn-=_dyn?_dyn*(_dlxn/_dyn):0, _dlxr-=_dyr?_dyr*(_dlxr/_dyr):0, _dlxl-=_dyl?_dyl*(_dlxl/_dyl):0, _dlyn-=_dyn?_dyn*(_dlyn/_dyn):0, _dlyr-=_dyr?_dyr*(_dlyr/_dyr):0, _dlyl-=_dyl?_dyl*(_dlyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errlxn = _errn, _errlyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errlxr = _errr, _errlyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _errlxl = _errl, _errlyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rlxn = _dyn?(ntx2-ntx1)/_dyn:0, _rlyn = _dyn?(nty2-nty1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rlxr = _dyr?(ntx2-ntx0)/_dyr:0, _rlyr = _dyr?(nty2-nty0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ), _rlxl = (ny0!=ny1 && ny1>0)?(_dyl?(ntx1-ntx0)/_dyl:0): (_errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxn ), _rlyl = (ny0!=ny1 && ny1>0)?(_dyl?(nty1-nty0)/_dyl:0): (_errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), txright0+=_rlxr+((_errlxr-=_dlxr)<0?_errlxr+=_dyr,_slxr:0), tyright0+=_rlyr+((_errlyr-=_dlyr)<0?_errlyr+=_dyr,_slyr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), txleft0+=_rlxl+((_errlxl-=_dlxl)<0?(_errlxl+=_dyl,_slxl):0), tyleft0+=_rlyl+((_errlyl-=_dlyl)<0?(_errlyl+=_dyl,_slyl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxl=_rlxn, txleft0=ntx1, _errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyl=_rlyn, tyleft0=nty1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0, > txleft = txleft0, txright = txright0, > tyleft = tyleft0, tyright = tyright0; > if (xright<xleft) cimg::swap(xleft,xright,lxleft,lxright,lyleft,lyright,txleft,txright,tyleft,tyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > dtx = txright>txleft?txright - txleft:txleft - txright, > dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > rtx = dx?(txright - txleft)/dx:0, > rty = dx?(tyright - tyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > stx = txright>txleft?1:-1, > sty = tyright>tyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0), > ndtx = dtx - (dx?dx*(dtx/dx):0), > ndty = dty - (dx?dx*(dty/dx):0); > int errlx = dx>>1, errly = errlx, errtx = errlx, errty = errlx; > if (xleft<0 && dx) { > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } else for (int x = xleft; x<=xright; ++x) { > const tc *col = texture.data(txleft,tyleft); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); > tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); > } > } > return *this; > } > > > template<typename tc, typename tl> > CImg<T>& draw_triangle(const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > if (is_overlapped(light)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd-1; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2, > nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > float > zleft = zl, zright = zr, > txleft = txl, txright = txr, > tyleft = tyl, tyright = tyr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > const float > pentez = (zright - zleft)/dx, > pentetx = (txright - txleft)/dx, > pentety = (tyright - tyleft)/dx; > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y,0,0); > if (opacity>=1) for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x) { > const float invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } > > > template<typename tz, typename tc, typename tl> > CImg<T>& draw_triangle(CImg<tz>& zbuffer, > const int x0, const int y0, const float z0, > const int x1, const int y1, const float z1, > const int x2, const int y2, const float z2, > const CImg<tc>& texture, > const int tx0, const int ty0, > const int tx1, const int ty1, > const int tx2, const int ty2, > const CImg<tl>& light, > const int lx0, const int ly0, > const int lx1, const int ly1, > const int lx2, const int ly2, > const float opacity=1) { > typedef typename cimg::superset<tz,float>::type tzfloat; > if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; > if (!is_sameXY(zbuffer)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have different dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); > if (texture._depth>1 || texture._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > texture._width,texture._height,texture._depth,texture._spectrum,texture._data); > if (light._depth>1 || light._spectrum<_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),light._width,light._height,light._depth,light._spectrum,light._data); > if (is_overlapped(texture)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, > +texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, > texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > static const T maxval = (T)cimg::min(cimg::type<T>::max(),cimg::type<tc>::max()); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const long whd = (long)_width*_height*_depth, twhd = (long)texture._width*texture._height*texture._depth, offx = _spectrum*whd; > int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, > nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; > float > ntx0 = tx0/z0, nty0 = ty0/z0, > ntx1 = tx1/z1, nty1 = ty1/z1, > ntx2 = tx2/z2, nty2 = ty2/z2; > tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; > if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); > if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); > if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); > if (ny0>=height() || ny2<0) return *this; > float > ptxl = (ntx1 - ntx0)/(ny1 - ny0), > ptxr = (ntx2 - ntx0)/(ny2 - ny0), > ptxn = (ntx2 - ntx1)/(ny2 - ny1), > ptyl = (nty1 - nty0)/(ny1 - ny0), > ptyr = (nty2 - nty0)/(ny2 - ny0), > ptyn = (nty2 - nty1)/(ny2 - ny1), > txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), > tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), > txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))):(ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), > tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))):(ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); > tzfloat > pzl = (nz1 - nz0)/(ny1 - ny0), > pzr = (nz2 - nz0)/(ny2 - ny0), > pzn = (nz2 - nz1)/(ny2 - ny1), > zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), > zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); > for (int y = ny0<0?0:ny0, xright0 = ny0>=0?nx0:(nx0-ny0*(nx2-nx0)/(ny2-ny0)), lxright0 = ny0>=0?nlx0:(nlx0-ny0*(nlx2-nlx0)/(ny2-ny0)), lyright0 = ny0>=0?nly0:(nly0-ny0*(nly2-nly0)/(ny2-ny0)), xleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nx1:nx0):(nx0-ny0*(nx1-nx0)/(ny1-ny0))):(nx1-ny1*(nx2-nx1)/(ny2-ny1)), lxleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nlx1:nlx0):(nlx0-ny0*(nlx1-nlx0)/(ny1-ny0))):(nlx1-ny1*(nlx2-nlx1)/(ny2-ny1)), lyleft0 = ny1>=0?(ny0>=0?(ny0==ny1?nly1:nly0):(nly0-ny0*(nly1-nly0)/(ny1-ny0))):(nly1-ny1*(nly2-nly1)/(ny2-ny1)), _sxn=1, _stxn=1, _styn=1, _sxr=1, _stxr=1, _styr=1, _sxl=1, _stxl=1, _styl=1, _dxn = nx2>nx1?nx2-nx1:(_sxn=-1,nx1-nx2), _dxr = nx2>nx0?nx2-nx0:(_sxr=-1,nx0-nx2), _dxl = nx1>nx0?nx1-nx0:(_sxl=-1,nx0-nx1), _dtxn = nlx2>nlx1?nlx2-nlx1:(_stxn=-1,nlx1-nlx2), _dtxr = nlx2>nlx0?nlx2-nlx0:(_stxr=-1,nlx0-nlx2), _dtxl = nlx1>nlx0?nlx1-nlx0:(_stxl=-1,nlx0-nlx1), _dtyn = nly2>nly1?nly2-nly1:(_styn=-1,nly1-nly2), _dtyr = nly2>nly0?nly2-nly0:(_styr=-1,nly0-nly2), _dtyl = nly1>nly0?nly1-nly0:(_styl=-1,nly0-nly1), _dyn = ny2-ny1, _dyr = ny2-ny0, _dyl = ny1-ny0, _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, _dxr-=_dyr?_dyr*(_dxr/_dyr):0, _dxl-=_dyl?_dyl*(_dxl/_dyl):0, _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, cimg::min((int)(*this)._height-y-1,ny2-y)), _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _rxn = _dyn?(nx2-nx1)/_dyn:0, _rtxn = _dyn?(nlx2-nlx1)/_dyn:0, _rtyn = _dyn?(nly2-nly1)/_dyn:0, _rxr = _dyr?(nx2-nx0)/_dyr:0, _rtxr = _dyr?(nlx2-nlx0)/_dyr:0, _rtyr = _dyr?(nly2-nly0)/_dyr:0, _rxl = (ny0!=ny1 && ny1>0)?(_dyl?(nx1-nx0)/_dyl:0): (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), _rtxl = (ny0!=ny1 && ny1>0)?(_dyl?(nlx1-nlx0)/_dyl:0): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), _rtyl = (ny0!=ny1 && ny1>0)?(_dyl?(nly1-nly0)/_dyl:0): (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); _counter>=0; --_counter, ++y, xright0+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), lxright0+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), lyright0+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), xleft0+=(y!=ny1)?(lxleft0+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), lyleft0+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, lxleft0=nlx1, _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, lyleft0=nly1, _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, nx1-xleft0)) > { > if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } > int > xleft = xleft0, xright = xright0, > lxleft = lxleft0, lxright = lxright0, > lyleft = lyleft0, lyright = lyright0; > float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; > tzfloat zleft = zl, zright = zr; > if (xright<xleft) cimg::swap(xleft,xright,zleft,zright,txleft,txright,tyleft,tyright,lxleft,lxright,lyleft,lyright); > const int > dx = xright - xleft, > dlx = lxright>lxleft?lxright - lxleft:lxleft - lxright, > dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, > rlx = dx?(lxright - lxleft)/dx:0, > rly = dx?(lyright - lyleft)/dx:0, > slx = lxright>lxleft?1:-1, > sly = lyright>lyleft?1:-1, > ndlx = dlx - (dx?dx*(dlx/dx):0), > ndly = dly - (dx?dx*(dly/dx):0); > float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; > const tzfloat pentez = (zright - zleft)/dx; > int errlx = dx>>1, errly = errlx; > if (xleft<0 && dx) { > zleft-=xleft*(zright - zleft)/dx; > lxleft-=xleft*(lxright - lxleft)/dx; > lyleft-=xleft*(lyright - lyleft)/dx; > txleft-=xleft*(txright - txleft)/dx; > tyleft-=xleft*(tyright - tyleft)/dx; > } > if (xleft<0) xleft = 0; > if (xright>=width()-1) xright = width()-1; > T* ptrd = data(xleft,y); > tz *ptrz = zbuffer.data(xleft,y); > if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { > if (zleft>=(tzfloat)*ptrz) { > *ptrz = (tz)zleft; > const tzfloat invz = 1/zleft; > const tc *col = texture.data((int)(txleft*invz),(int)(tyleft*invz)); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { > const tl l = light(lxleft,lyleft,c); > const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); > *ptrd = (T)(nopacity*val + *ptrd*copacity); > ptrd+=whd; col+=twhd; > } > ptrd-=offx; > } > zleft+=pentez; txleft+=pentetx; tyleft+=pentety; > lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); > lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); > } > zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; > } > return *this; > } ># 32450 "./CImg.h" > CImg<T>& draw_rectangle(const int x0, const int y0, const int z0, const int c0, > const int x1, const int y1, const int z1, const int c1, > const T val, const float opacity=1) { > if (is_empty()) return *this; > const bool bx = (x0<x1), by = (y0<y1), bz = (z0<z1), bc = (c0<c1); > const int > nx0 = bx?x0:x1, nx1 = bx?x1:x0, > ny0 = by?y0:y1, ny1 = by?y1:y0, > nz0 = bz?z0:z1, nz1 = bz?z1:z0, > nc0 = bc?c0:c1, nc1 = bc?c1:c0; > const int > lX = (1 + nx1 - nx0) + (nx1>=width()?width() - 1 - nx1:0) + (nx0<0?nx0:0), > lY = (1 + ny1 - ny0) + (ny1>=height()?height() - 1 - ny1:0) + (ny0<0?ny0:0), > lZ = (1 + nz1 - nz0) + (nz1>=depth()?depth() - 1 - nz1:0) + (nz0<0?nz0:0), > lC = (1 + nc1 - nc0) + (nc1>=spectrum()?spectrum() - 1 - nc1:0) + (nc0<0?nc0:0); > const unsigned long > offX = (unsigned long)_width - lX, > offY = (unsigned long)_width*(_height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > T *ptrd = data(nx0<0?0:nx0,ny0<0?0:ny0,nz0<0?0:nz0,nc0<0?0:nc0); > if (lX>0 && lY>0 && lZ>0 && lC>0) > for (int v = 0; v<lC; ++v) { > for (int z = 0; z<lZ; ++z) { > for (int y = 0; y<lY; ++y) { > if (opacity>=1) { > if (sizeof(T)!=1) { for (int x = 0; x<lX; ++x) *(ptrd++) = val; ptrd+=offX; } > else { std::memset(ptrd,(int)val,lX); ptrd+=_width; } > } else { for (int x = 0; x<lX; ++x) { *ptrd = (T)(nopacity*val + *ptrd*copacity); ++ptrd; } ptrd+=offX; } > } > ptrd+=offY; > } > ptrd+=offZ; > } > return *this; > } ># 32498 "./CImg.h" > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_rectangle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > for (int c = 0; c<(int)((*this)._spectrum); ++c) draw_rectangle(x0,y0,z0,c,x1,y1,z1,c,(T)color[c],opacity); > return *this; > } > > > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, const int z0, > const int x1, const int y1, const int z1, > const tc *const color, const float opacity, > const unsigned int pattern) { > return draw_line(x0,y0,z0,x1,y0,z0,color,opacity,pattern,true). > draw_line(x1,y0,z0,x1,y1,z0,color,opacity,pattern,false). > draw_line(x1,y1,z0,x0,y1,z0,color,opacity,pattern,false). > draw_line(x0,y1,z0,x0,y0,z0,color,opacity,pattern,false). > draw_line(x0,y0,z1,x1,y0,z1,color,opacity,pattern,true). > draw_line(x1,y0,z1,x1,y1,z1,color,opacity,pattern,false). > draw_line(x1,y1,z1,x0,y1,z1,color,opacity,pattern,false). > draw_line(x0,y1,z1,x0,y0,z1,color,opacity,pattern,false). > draw_line(x0,y0,z0,x0,y0,z1,color,opacity,pattern,true). > draw_line(x1,y0,z0,x1,y0,z1,color,opacity,pattern,true). > draw_line(x1,y1,z0,x1,y1,z1,color,opacity,pattern,true). > draw_line(x0,y1,z0,x0,y1,z1,color,opacity,pattern,true); > } ># 32540 "./CImg.h" > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity=1) { > return draw_rectangle(x0,y0,0,x1,y1,_depth-1,color,opacity); > } > > > template<typename tc> > CImg<T>& draw_rectangle(const int x0, const int y0, > const int x1, const int y1, > const tc *const color, const float opacity, > const unsigned int pattern) { > if (is_empty()) return *this; > if (y0==y1) return draw_line(x0,y0,x1,y0,color,opacity,pattern,true); > if (x0==x1) return draw_line(x0,y0,x0,y1,color,opacity,pattern,true); > const bool bx = (x0<x1), by = (y0<y1); > const int > nx0 = bx?x0:x1, nx1 = bx?x1:x0, > ny0 = by?y0:y1, ny1 = by?y1:y0; > if (ny1==ny0+1) return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). > draw_line(nx1,ny1,nx0,ny1,color,opacity,pattern,false); > return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). > draw_line(nx1,ny0+1,nx1,ny1-1,color,opacity,pattern,false). > draw_line(nx1,ny1,nx0,ny1,color,opacity,pattern,false). > draw_line(nx0,ny1-1,nx0,ny0+1,color,opacity,pattern,false); > } > > > > > > > > template<typename t, typename tc> > CImg<T>& draw_polygon(const CImg<t>& points, > const tc *const color, const float opacity=1) { > if (is_empty() || !points) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_polygon(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > CImg<intT> npoints(points._width,2); > unsigned int nb_points = 1, p = 0; > int cx = npoints(0,0) = (int)points(0,0), cy = npoints(0,1) = (int)points(0,1); > const int cx0 = cx, cy0 = cy; > for (p = 1; p<points._width; ++p) { > const int nx = (int)points(p,0), ny = (int)points(p,1); > if (nx!=cx || ny!=cy) { npoints(nb_points,0) = nx; npoints(nb_points++,1) = ny; cx = nx; cy = ny; } > } > --p; > if ((int)points(p,0)==cx0 && (int)points(p,1)==cy0) --nb_points; > > if (nb_points<=1) return draw_point((int)npoints(0,0),(int)npoints(0,1),color,opacity); > if (nb_points==2) return draw_line((int)npoints(0,0),(int)npoints(0,1), > (int)npoints(1,0),(int)npoints(1,1),color,opacity); > if (nb_points==3) return draw_triangle((int)npoints(0,0),(int)npoints(0,1), > (int)npoints(1,0),(int)npoints(1,1), > (int)npoints(2,0),(int)npoints(2,1),color,opacity); > const float _sc_nopacity = cimg::abs((float)1), _sc_copacity = 1 - cimg::max((float)1,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > > if (opacity!=1) { > npoints.resize(nb_points,2,1,1,0); > CImg<intT> npoints_x = npoints.get_shared_row(0), npoints_y = npoints.get_shared_row(1); > int xmax = 0, xmin = (int)npoints_x.min_max(xmax), ymax = 0, ymin = (int)npoints_y.min_max(ymax); > if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; > if (ymin==ymax) return _draw_scanline(xmin,xmax,ymin,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > const unsigned int > nxmin = xmin<0?0:(unsigned int)xmin, nxmax = xmax>=width()?_width-1:(unsigned int)xmax, > nymin = ymin<0?0:(unsigned int)ymin, nymax = ymax>=height()?_height-1:(unsigned int)ymax, > dx = 1 + nxmax - nxmin, > dy = 1 + nymax - nymin; > npoints_x-=nxmin; npoints_y-=nymin; > unsigned char one = 1; > const CImg<unsigned char> mask = CImg<unsigned char>(dx,dy,1,1,0).draw_polygon(npoints,&one,1); > CImg<T> _color(dx,dy,1,spectrum()); > for (int c = 0; c<(int)((_color)._spectrum); ++c) _color.get_shared_channel(c).fill(color[c]); > return draw_image(nxmin,nymin,0,0,_color,mask,opacity,1); > } > > > int > xmax = 0, xmin = (int)npoints.get_shared_points(0,nb_points-1,0).min_max(xmax), > ymax = 0, ymin = (int)npoints.get_shared_points(0,nb_points-1,1).min_max(ymax); > if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; > if (ymin==ymax) return _draw_scanline(xmin,xmax,ymin,color,1,1,_sc_nopacity,_sc_copacity,_sc_whd); > const unsigned int > nymin = ymin<0?0:(unsigned int)ymin, > nymax = ymax>=height()?_height-1:(unsigned int)ymax, > dy = 1 + nymax - nymin; > CImg<intT> X(1+2*nb_points,dy,1,1,0), tmp; > cx = (int)npoints(0,0), cy = (int)npoints(0,1); > unsigned int cp = 0; > for (unsigned int p = 0; p<nb_points; ++p) { > const unsigned int np = (p!=nb_points-1)?p+1:0, ap = (np!=nb_points-1)?np+1:0; > const int > nx = (int)npoints(np,0), ny = (int)npoints(np,1), ay = (int)npoints(ap,1), > y0 = cy - nymin, y1 = ny - nymin; > if (y0!=y1) { > const int countermin = ((ny<ay && cy<ny) || (ny>ay && cy>ny))?1:0; > for (int x = cx, y = y0, _sx = 1, _sy = 1, > _dx = nx>cx?nx-cx:((_sx=-1),cx-nx), > _dy = y1>y0?y1-y0:((_sy=-1),y0-y1), > _counter = ((_dx-=_dy?_dy*(_dx/_dy):0),_dy), > _err = _dx>>1, > _rx = _dy?(nx-cx)/_dy:0; > _counter>=countermin; > --_counter, y+=_sy, x+=_rx + ((_err-=_dx)<0?_err+=_dy,_sx:0)) > if (y>=0 && y<(int)dy) X(++X(0,y),y) = x; > cp = np; cx = nx; cy = ny; > } else { > const int pp = (cp?cp-1:nb_points-1), py = (int)npoints(pp,1); > if (y0>=0 && y0<(int)dy) { > _draw_scanline(cx<nx?cx:nx,cx<nx?nx:cx,y0+nymin,color,1,1,_sc_nopacity,_sc_copacity,_sc_whd); > if ((cy>py && ay>cy) || (cy<py && ay<cy)) X(++X(0,y0),y0) = cx; > } > if (cy!=ay) { cp = np; cx = nx; cy = ny; } > } > } > > > for (int y = 0; y<(int)dy; ++y) { > tmp.assign(X.data(1,y),X(0,y),1,1,1,true).sort(); > for (int i = 1; i<=X(0,y); ) { > const int xb = X(i++,y), xe = X(i++,y); > _draw_scanline(xb,xe,nymin+y,color,1,1,_sc_nopacity,_sc_copacity,_sc_whd); > } > } > return *this; > } > > > template<typename t, typename tc> > CImg<T>& draw_polygon(const CImg<t>& points, > const tc *const color, const float opacity, const unsigned int pattern) { > if (is_empty() || !points || points._width<3) return *this; > bool ninit_hatch = true; > switch (points._height) { > case 0 : case 1 : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_polygon(): Invalid specified point set.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > case 2 : { > CImg<intT> npoints(points._width,2); > int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1); > unsigned int nb_points = 1; > for (unsigned int p = 1; p<points._width; ++p) { > const int nx = (int)points(p,0), ny = (int)points(p,1); > if (nx!=x || ny!=y) { npoints(nb_points,0) = nx; npoints(nb_points++,1) = ny; x = nx; y = ny; } > } > const int x0 = (int)npoints(0,0), y0 = (int)npoints(0,1); > int ox = x0, oy = y0; > for (unsigned int i = 1; i<nb_points; ++i) { > const int x = (int)npoints(i,0), y = (int)npoints(i,1); > draw_line(ox,oy,x,y,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; > } > draw_line(ox,oy,x0,y0,color,opacity,pattern,false); > } break; > default : { > CImg<intT> npoints(points._width,3); > int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1), z = npoints(0,2) = (int)points(0,2); > unsigned int nb_points = 1; > for (unsigned int p = 1; p<points._width; ++p) { > const int nx = (int)points(p,0), ny = (int)points(p,1), nz = (int)points(p,2); > if (nx!=x || ny!=y || nz!=z) { npoints(nb_points,0) = nx; npoints(nb_points,1) = ny; npoints(nb_points++,2) = nz; x = nx; y = ny; z = nz; } > } > const int x0 = (int)npoints(0,0), y0 = (int)npoints(0,1), z0 = (int)npoints(0,2); > int ox = x0, oy = y0, oz = z0; > for (unsigned int i = 1; i<nb_points; ++i) { > const int x = (int)npoints(i,0), y = (int)npoints(i,1), z = (int)npoints(i,2); > draw_line(ox,oy,oz,x,y,z,color,opacity,pattern,ninit_hatch); > ninit_hatch = false; > ox = x; oy = y; oz = z; > } > draw_line(ox,oy,oz,x0,y0,z0,color,opacity,pattern,false); > } > } > return *this; > } ># 32734 "./CImg.h" > template<typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, > const tc *const color, const float opacity=1) { > return _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,0U); > } ># 32748 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const CImg<t> &tensor, > const tc *const color, const float opacity=1) { > CImgList<t> eig = tensor.get_symmetric_eigen(); > const CImg<t> &val = eig[0], &vec = eig[1]; > return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), > std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, > color,opacity); > } ># 32769 "./CImg.h" > template<typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, > const tc *const color, const float opacity, const unsigned int pattern) { > if (pattern) _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,pattern); > return *this; > } ># 32785 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_ellipse(const int x0, const int y0, const CImg<t> &tensor, > const tc *const color, const float opacity, > const unsigned int pattern) { > CImgList<t> eig = tensor.get_symmetric_eigen(); > const CImg<t> &val = eig[0], &vec = eig[1]; > return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), > std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, > color,opacity,pattern); > } > > template<typename tc> > CImg<T>& _draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, > const tc *const color, const float opacity, > const unsigned int pattern) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_ellipse(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (r1<=0 || r2<=0) return draw_point(x0,y0,color,opacity); > const float _sc_nopacity = cimg::abs((float)opacity), _sc_copacity = 1 - cimg::max((float)opacity,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > const float > nr1 = cimg::abs(r1), nr2 = cimg::abs(r2), > nangle = (float)(angle*cimg::PI/180), > u = (float)std::cos(nangle), > v = (float)std::sin(nangle), > rmax = cimg::max(nr1,nr2), > l1 = (float)std::pow(rmax/(nr1>0?nr1:1e-6),2), > l2 = (float)std::pow(rmax/(nr2>0?nr2:1e-6),2), > a = l1*u*u + l2*v*v, > b = u*v*(l1-l2), > c = l1*v*v + l2*u*u; > const int > yb = (int)std::sqrt(a*rmax*rmax/(a*c - b*b)), > tymin = y0 - yb - 1, > tymax = y0 + yb + 1, > ymin = tymin<0?0:tymin, > ymax = tymax>=height()?height()-1:tymax; > int oxmin = 0, oxmax = 0; > bool first_line = true; > for (int y = ymin; y<=ymax; ++y) { > const float > Y = y - y0 + (y<y0?0.5f:-0.5f), > delta = b*b*Y*Y - a*(c*Y*Y - rmax*rmax), > sdelta = delta>0?(float)std::sqrt(delta)/a:0.0f, > bY = b*Y/a, > fxmin = x0 - 0.5f - bY - sdelta, > fxmax = x0 + 0.5f - bY + sdelta; > const int xmin = (int)fxmin, xmax = (int)fxmax; > if (!pattern) _draw_scanline(xmin,xmax,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else { > if (first_line) { > if (y0-yb>=0) _draw_scanline(xmin,xmax,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else draw_point(xmin,y,color,opacity).draw_point(xmax,y,color,opacity); > first_line = false; > } else { > if (xmin<oxmin) _draw_scanline(xmin,oxmin-1,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else _draw_scanline(oxmin+(oxmin==xmin?0:1),xmin,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (xmax<oxmax) _draw_scanline(xmax,oxmax-1,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > else _draw_scanline(oxmax+(oxmax==xmax?0:1),xmax,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (y==tymax) _draw_scanline(xmin+1,xmax-1,y,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > } > } > oxmin = xmin; oxmax = xmax; > } > return *this; > } ># 32864 "./CImg.h" > template<typename tc> > CImg<T>& draw_circle(const int x0, const int y0, int radius, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_circle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const float _sc_nopacity = cimg::abs((float)opacity), _sc_copacity = 1 - cimg::max((float)opacity,0); const unsigned long _sc_whd = (unsigned long)_width*_height*_depth; > if (radius<0 || x0-radius>=width() || y0+radius<0 || y0-radius>=height()) return *this; > if (y0>=0 && y0<height()) _draw_scanline(x0-radius,x0+radius,y0,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > for (int f = 1-radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x<y; ) { > if (f>=0) { > const int x1 = x0-x, x2 = x0+x, y1 = y0-y, y2 = y0+y; > if (y1>=0 && y1<height()) _draw_scanline(x1,x2,y1,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (y2>=0 && y2<height()) _draw_scanline(x1,x2,y2,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > f+=(ddFy+=2); --y; > } > const bool no_diag = y!=(x++); > ++(f+=(ddFx+=2)); > const int x1 = x0-y, x2 = x0+y, y1 = y0-x, y2 = y0+x; > if (no_diag) { > if (y1>=0 && y1<height()) _draw_scanline(x1,x2,y1,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > if (y2>=0 && y2<height()) _draw_scanline(x1,x2,y2,color,opacity,1,_sc_nopacity,_sc_copacity,_sc_whd); > } > } > return *this; > } ># 32902 "./CImg.h" > template<typename tc> > CImg<T>& draw_circle(const int x0, const int y0, int radius, > const tc *const color, const float opacity, > const unsigned int pattern) { > cimg::unused(pattern); > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_circle(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (radius<0 || x0-radius>=width() || y0+radius<0 || y0-radius>=height()) return *this; > if (!radius) return draw_point(x0,y0,color,opacity); > draw_point(x0-radius,y0,color,opacity).draw_point(x0+radius,y0,color,opacity). > draw_point(x0,y0-radius,color,opacity).draw_point(x0,y0+radius,color,opacity); > if (radius==1) return *this; > for (int f = 1-radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x<y; ) { > if (f>=0) { f+=(ddFy+=2); --y; } > ++x; ++(f+=(ddFx+=2)); > if (x!=y+1) { > const int x1 = x0-y, x2 = x0+y, y1 = y0-x, y2 = y0+x, x3 = x0-x, x4 = x0+x, y3 = y0-y, y4 = y0+y; > draw_point(x1,y1,color,opacity).draw_point(x1,y2,color,opacity). > draw_point(x2,y1,color,opacity).draw_point(x2,y2,color,opacity); > if (x!=y) > draw_point(x3,y3,color,opacity).draw_point(x4,y4,color,opacity). > draw_point(x4,y3,color,opacity).draw_point(x3,y4,color,opacity); > } > } > return *this; > } ># 32941 "./CImg.h" > template<typename t> > CImg<T>& draw_image(const int x0, const int y0, const int z0, const int c0, > const CImg<t>& sprite, const float opacity=1) { > if (is_empty() || !sprite) return *this; > if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); > if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) return assign(sprite,false); > const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); > const int > lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), > lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), > lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), > lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); > const t > *ptrs = sprite._data - > (bx?x0:0) - > (by?y0*sprite.width():0) - > (bz?z0*sprite.width()*sprite.height():0) - > (bc?c0*sprite.width()*sprite.height()*sprite.depth():0); > const unsigned long > offX = (unsigned long)_width - lX, > soffX = (unsigned long)sprite._width - lX, > offY = (unsigned long)_width*(_height - lY), > soffY = (unsigned long)sprite._width*(sprite._height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ), > soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (lX>0 && lY>0 && lZ>0 && lC>0) { > T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); > for (int v = 0; v<lC; ++v) { > for (int z = 0; z<lZ; ++z) { > for (int y = 0; y<lY; ++y) { > if (opacity>=1) for (int x = 0; x<lX; ++x) *(ptrd++) = (T)*(ptrs++); > else for (int x = 0; x<lX; ++x) { *ptrd = (T)(nopacity*(*(ptrs++)) + *ptrd*copacity); ++ptrd; } > ptrd+=offX; ptrs+=soffX; > } > ptrd+=offY; ptrs+=soffY; > } > ptrd+=offZ; ptrs+=soffZ; > } > } > return *this; > } > > > CImg<T>& draw_image(const int x0, const int y0, const int z0, const int c0, > const CImg<T>& sprite, const float opacity=1) { > if (is_empty() || !sprite) return *this; > if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); > if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) return assign(sprite,false); > const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); > const int > lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), > lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), > lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), > lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); > const T > *ptrs = sprite._data - > (bx?x0:0) - > (by?y0*sprite.width():0) - > (bz?z0*sprite.width()*sprite.height():0) - > (bc?c0*sprite.width()*sprite.height()*sprite.depth():0); > const unsigned long > offX = (unsigned long)_width - lX, > soffX = (unsigned long)sprite._width - lX, > offY = (unsigned long)_width*(_height - lY), > soffY = (unsigned long)sprite._width*(sprite._height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ), > soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ), > slX = lX*sizeof(T); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > if (lX>0 && lY>0 && lZ>0 && lC>0) { > T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); > for (int v = 0; v<lC; ++v) { > for (int z = 0; z<lZ; ++z) { > if (opacity>=1) for (int y = 0; y<lY; ++y) { std::memcpy(ptrd,ptrs,slX); ptrd+=_width; ptrs+=sprite._width; } > else for (int y = 0; y<lY; ++y) { > for (int x = 0; x<lX; ++x) { *ptrd = (T)(nopacity*(*(ptrs++)) + *ptrd*copacity); ++ptrd; } > ptrd+=offX; ptrs+=soffX; > } > ptrd+=offY; ptrs+=soffY; > } > ptrd+=offZ; ptrs+=soffZ; > } > } > return *this; > } > > > template<typename t> > CImg<T>& draw_image(const int x0, const int y0, const int z0, > const CImg<t>& sprite, const float opacity=1) { > return draw_image(x0,y0,z0,0,sprite,opacity); > } > > > template<typename t> > CImg<T>& draw_image(const int x0, const int y0, > const CImg<t>& sprite, const float opacity=1) { > return draw_image(x0,y0,0,sprite,opacity); > } > > > template<typename t> > CImg<T>& draw_image(const int x0, > const CImg<t>& sprite, const float opacity=1) { > return draw_image(x0,0,sprite,opacity); > } > > > template<typename t> > CImg<T>& draw_image(const CImg<t>& sprite, const float opacity=1) { > return draw_image(0,sprite,opacity); > } ># 33069 "./CImg.h" > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, const int y0, const int z0, const int c0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > if (is_empty() || !sprite || !mask) return *this; > if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,mask,opacity,mask_max_value); > if (is_overlapped(mask)) return draw_image(x0,y0,z0,c0,sprite,+mask,opacity,mask_max_value); > if (mask._width!=sprite._width || mask._height!=sprite._height || mask._depth!=sprite._depth) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_image(): Sprite (%u,%u,%u,%u,%p) and mask (%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > sprite._width,sprite._height,sprite._depth,sprite._spectrum,sprite._data, > mask._width,mask._height,mask._depth,mask._spectrum,mask._data); > > const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); > const int > lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), > lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), > lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), > lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); > const int > coff = -(bx?x0:0)-(by?y0*mask.width():0)-(bz?z0*mask.width()*mask.height():0)-(bc?c0*mask.width()*mask.height()*mask.depth():0), > ssize = mask.width()*mask.height()*mask.depth()*mask.spectrum(); > const ti *ptrs = sprite._data + coff; > const tm *ptrm = mask._data + coff; > const unsigned long > offX = (unsigned long)_width - lX, > soffX = (unsigned long)sprite._width - lX, > offY = (unsigned long)_width*(_height - lY), > soffY = (unsigned long)sprite._width*(sprite._height - lY), > offZ = (unsigned long)_width*_height*(_depth - lZ), > soffZ = (unsigned long)sprite._width*sprite._height*(sprite._depth - lZ); > if (lX>0 && lY>0 && lZ>0 && lC>0) { > T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); > for (int c = 0; c<lC; ++c) { > ptrm = mask._data + (ptrm - mask._data)%ssize; > for (int z = 0; z<lZ; ++z) { > for (int y = 0; y<lY; ++y) { > for (int x = 0; x<lX; ++x) { > const float mopacity = (float)(*(ptrm++)*opacity), > nopacity = cimg::abs(mopacity), copacity = mask_max_value - cimg::max(mopacity,0); > *ptrd = (T)((nopacity*(*(ptrs++)) + *ptrd*copacity)/mask_max_value); > ++ptrd; > } > ptrd+=offX; ptrs+=soffX; ptrm+=soffX; > } > ptrd+=offY; ptrs+=soffY; ptrm+=soffY; > } > ptrd+=offZ; ptrs+=soffZ; ptrm+=soffZ; > } > } > return *this; > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, const int y0, const int z0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(x0,y0,z0,0,sprite,mask,opacity,mask_max_value); > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, const int y0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(x0,y0,0,sprite,mask,opacity,mask_max_value); > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const int x0, > const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(x0,0,sprite,mask,opacity,mask_max_value); > } > > > template<typename ti, typename tm> > CImg<T>& draw_image(const CImg<ti>& sprite, const CImg<tm>& mask, const float opacity=1, > const float mask_max_value=1) { > return draw_image(0,sprite,mask,opacity,mask_max_value); > } ># 33164 "./CImg.h" > template<typename tc1, typename tc2, typename t> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc1 *const foreground_color, const tc2 *const background_color, > const float opacity, const CImgList<t>& font, ...) { > if (!font) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font); > vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,false); > } > > > > > > template<typename tc, typename t> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc *const foreground_color, const int, > const float opacity, const CImgList<t>& font, ...) { > if (!font) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font); > vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return _draw_text(x0,y0,tmp,foreground_color,(tc*)0,opacity,font,false); > } > > > > > > template<typename tc, typename t> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const int, const tc *const background_color, > const float opacity, const CImgList<t>& font, ...) { > if (!font) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font); > vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return _draw_text(x0,y0,tmp,(tc*)0,background_color,opacity,font,false); > } ># 33215 "./CImg.h" > template<typename tc1, typename tc2> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc1 *const foreground_color, const tc2 *const background_color, > const float opacity=1, const unsigned int font_height=13, ...) { > if (!font_height) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font_height); vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > const CImgList<ucharT>& font = CImgList<ucharT>::font(font_height,true); > _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,true); > return *this; > } > > > template<typename tc> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const tc *const foreground_color, const int background_color=0, > const float opacity=1, const unsigned int font_height=13, ...) { > if (!font_height) return *this; > cimg::unused(background_color); > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font_height); vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return draw_text(x0,y0,"%s",foreground_color,(const tc*)0,opacity,font_height,tmp); > } > > > template<typename tc> > CImg<T>& draw_text(const int x0, const int y0, > const char *const text, > const int, const tc *const background_color, > const float opacity=1, const unsigned int font_height=13, ...) { > if (!font_height) return *this; > char tmp[2048] = { 0 }; std::va_list ap; __builtin_va_start(ap,font_height); vsnprintf(tmp,sizeof(tmp),text,ap); __builtin_va_end(ap); > return draw_text(x0,y0,"%s",(tc*)0,background_color,opacity,font_height,tmp); > } > > template<typename tc1, typename tc2, typename t> > CImg<T>& _draw_text(const int x0, const int y0, > const char *const text, > const tc1 *const foreground_color, const tc2 *const background_color, > const float opacity, const CImgList<t>& font, > const bool is_native_font) { > if (!text) return *this; > if (!font) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_text(): Empty specified font.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int text_length = (unsigned int)std::strlen(text); > const bool _is_empty = is_empty(); > if (_is_empty) { > > int x = 0, y = 0, w = 0; > unsigned char c = 0; > for (unsigned int i = 0; i<text_length; ++i) { > c = text[i]; > switch (c) { > case '\n' : y+=font[0]._height; if (x>w) w = x; x = 0; break; > case '\t' : x+=4*font[' ']._width; break; > default : if (c<font._width) x+=font[c]._width; > } > } > if (x!=0 || c=='\n') { > if (x>w) w=x; > y+=font[0]._height; > } > assign(x0+w,y0+y,1,is_native_font?1:font[0]._spectrum,0); > } > > int x = x0, y = y0; > for (unsigned int i = 0; i<text_length; ++i) { > const unsigned char c = text[i]; > switch (c) { > case '\n' : y+=font[0]._height; x = x0; break; > case '\t' : x+=4*font[' ']._width; break; > default : if (c<font._width) { > CImg<T> letter = font[c]; > if (letter) { > if (is_native_font && _spectrum>letter._spectrum) letter.resize(-100,-100,1,_spectrum,0,2); > const unsigned int cmin = cimg::min(_spectrum,letter._spectrum); > if (foreground_color) for (unsigned int c = 0; c<cmin; ++c) if (foreground_color[c]!=1) letter.get_shared_channel(c)*=foreground_color[c]; > if (c+256<font.width()) { > if (background_color) for (unsigned int c = 0; c<cmin; ++c) draw_rectangle(x,y,0,c,x+letter._width-1,y+letter._height-1,0,c,background_color[c],opacity); > draw_image(x,y,letter,font[c+256],opacity,(T)255); > } else draw_image(x,y,letter,opacity); > x+=letter._width; > } > } > } > } > return *this; > } ># 33318 "./CImg.h" > template<typename t1, typename t2> > CImg<T>& draw_quiver(const CImg<t1>& flow, > const t2 *const color, const float opacity=1, > const unsigned int sampling=25, const float factor=-20, > const bool is_arrow=true, const unsigned int pattern=~0U) { > return draw_quiver(flow,CImg<t2>(color,_spectrum,1,1,1,true),opacity,sampling,factor,is_arrow,pattern); > } ># 33337 "./CImg.h" > template<typename t1, typename t2> > CImg<T>& draw_quiver(const CImg<t1>& flow, > const CImg<t2>& color, const float opacity=1, > const unsigned int sampling=25, const float factor=-20, > const bool is_arrow=true, const unsigned int pattern=~0U) { > if (is_empty()) return *this; > if (!flow || flow._spectrum!=2) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_quiver(): Invalid dimensions of specified flow (%u,%u,%u,%u,%p).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > flow._width,flow._height,flow._depth,flow._spectrum,flow._data); > if (sampling<=0) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_quiver(): Invalid sampling value %g " > "(should be >0)", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > sampling); > const bool colorfield = (color._width==flow._width && color._height==flow._height && color._depth==1 && color._spectrum==_spectrum); > if (is_overlapped(flow)) return draw_quiver(+flow,color,opacity,sampling,factor,is_arrow,pattern); > float vmax,fact; > if (factor<=0) { > float m, M = (float)flow.get_norm(2).max_min(m); > vmax = (float)cimg::max(cimg::abs(m),cimg::abs(M)); > if (!vmax) vmax = 1; > fact = -factor; > } else { fact = factor; vmax = 1; } > > for (unsigned int y = sampling/2; y<_height; y+=sampling) > for (unsigned int x = sampling/2; x<_width; x+=sampling) { > const unsigned int X = x*flow._width/_width, Y = y*flow._height/_height; > float u = (float)flow(X,Y,0,0)*fact/vmax, v = (float)flow(X,Y,0,1)*fact/vmax; > if (is_arrow) { > const int xx = x+(int)u, yy = y+(int)v; > if (colorfield) draw_arrow(x,y,xx,yy,color.get_vector_at(X,Y)._data,opacity,45,sampling/5.0f,pattern); > else draw_arrow(x,y,xx,yy,color._data,opacity,45,sampling/5.0f,pattern); > } else { > if (colorfield) draw_line((int)(x-0.5*u),(int)(y-0.5*v),(int)(x+0.5*u),(int)(y+0.5*v),color.get_vector_at(X,Y)._data,opacity,pattern); > else draw_line((int)(x-0.5*u),(int)(y-0.5*v),(int)(x+0.5*u),(int)(y+0.5*v),color._data,opacity,pattern); > } > } > > return *this; > } ># 33391 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_axis(const CImg<t>& values_x, const int y, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const unsigned int font_height=13, > const bool allow_zero=true) { > if (is_empty()) return *this; > const int yt = (y+3+font_height)<_height?(y+3):(y-2-font_height); > const int siz = (int)values_x.size()-1; > char txt[32] = { 0 }; > CImg<T> label; > if (siz<=0) { > draw_line(0,y,_width-1,y,color,opacity,pattern); > if (!siz) { > snprintf(txt,sizeof(txt),"%g",(double)*values_x); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > _xt = (width() - label.width())/2, > xt = _xt<3?3:_xt+label.width()>=width()-2?width()-3-label.width():_xt; > draw_point(width()/2,y-1,color,opacity).draw_point(width()/2,y+1,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } else { > if (values_x[0]<values_x[siz]) draw_arrow(0,y,_width-1,y,color,opacity,30,5,pattern); > else draw_arrow(_width-1,y,0,y,color,opacity,30,5,pattern); > for (unsigned long x = 0, _maxx = (values_x).size(); x<_maxx; ++x) { > snprintf(txt,sizeof(txt),"%g",(double)values_x(x)); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > xi = (int)(x*(_width-1)/siz), > _xt = xi - label.width()/2, > xt = _xt<3?3:_xt+label.width()>=width()-2?width()-3-label.width():_xt; > draw_point(xi,y-1,color,opacity).draw_point(xi,y+1,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } > return *this; > } ># 33441 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_axis(const int x, const CImg<t>& values_y, > const tc *const color, const float opacity=1, > const unsigned int pattern=~0U, const unsigned int font_height=13, > const bool allow_zero=true) { > if (is_empty()) return *this; > int siz = (int)values_y.size()-1; > char txt[32] = { 0 }; > CImg<T> label; > if (siz<=0) { > draw_line(x,0,x,_height-1,color,opacity,pattern); > if (!siz) { > snprintf(txt,sizeof(txt),"%g",(double)*values_y); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > _yt = (height() - label.height())/2, > yt = _yt<0?0:_yt+label.height()>=height()?height()-1-label.height():_yt, > _xt = x - 2 - label.width(), > xt = _xt>=0?_xt:x+3; > draw_point(x-1,height()/2,color,opacity).draw_point(x+1,height()/2,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } else { > if (values_y[0]<values_y[siz]) draw_arrow(x,0,x,_height-1,color,opacity,30,5,pattern); > else draw_arrow(x,_height-1,x,0,color,opacity,30,5,pattern); > for (unsigned long y = 0, _maxy = (values_y).size(); y<_maxy; ++y) { > snprintf(txt,sizeof(txt),"%g",(double)values_y(y)); > label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); > const int > yi = (int)(y*(_height-1)/siz), > _yt = yi - label.height()/2, > yt = _yt<0?0:_yt+label.height()>=height()?height()-1-label.height():_yt, > _xt = x - 2 - label.width(), > xt = _xt>=0?_xt:x+3; > draw_point(x-1,yi,color,opacity).draw_point(x+1,yi,color,opacity); > if (allow_zero || txt[0]!='0' || txt[1]!=0) > draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); > } > } > return *this; > } ># 33495 "./CImg.h" > template<typename tx, typename ty, typename tc> > CImg<T>& draw_axes(const CImg<tx>& values_x, const CImg<ty>& values_y, > const tc *const color, const float opacity=1, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, > const unsigned int font_height=13, const bool allow_zero=true) { > if (is_empty()) return *this; > const CImg<tx> nvalues_x(values_x._data,values_x.size(),1,1,1,true); > const int sizx = (int)values_x.size()-1, wm1 = width()-1; > if (sizx>=0) { > float ox = (float)*nvalues_x; > for (unsigned int x = sizx?1:0; x<_width; ++x) { > const float nx = (float)nvalues_x._linear_atX((float)x*sizx/wm1); > if (nx*ox<=0) { draw_axis(nx==0?x:x-1,values_y,color,opacity,pattern_y,font_height,allow_zero); break; } > ox = nx; > } > } > const CImg<ty> nvalues_y(values_y._data,values_y.size(),1,1,1,true); > const int sizy = (int)values_y.size()-1, hm1 = height()-1; > if (sizy>0) { > float oy = (float)nvalues_y[0]; > for (unsigned int y = sizy?1:0; y<_height; ++y) { > const float ny = (float)nvalues_y._linear_atX((float)y*sizy/hm1); > if (ny*oy<=0) { draw_axis(values_x,ny==0?y:y-1,color,opacity,pattern_x,font_height,allow_zero); break; } > oy = ny; > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_axes(const float x0, const float x1, const float y0, const float y1, > const tc *const color, const float opacity=1, > const int subdivisionx=-60, const int subdivisiony=-60, > const float precisionx=0, const float precisiony=0, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, > const unsigned int font_height=13) { > if (is_empty()) return *this; > const bool allow_zero = (x0*x1>0) || (y0*y1>0); > const float > dx = cimg::abs(x1-x0), dy = cimg::abs(y1-y0), > px = dx<=0?1:precisionx==0?(float)std::pow(10.0,(int)std::log10(dx)-2.0):precisionx, > py = dy<=0?1:precisiony==0?(float)std::pow(10.0,(int)std::log10(dy)-2.0):precisiony; > if (x0!=x1 && y0!=y1) > draw_axes(CImg<floatT>::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px), > CImg<floatT>::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), > color,opacity,pattern_x,pattern_y,font_height,allow_zero); > else if (x0==x1 && y0!=y1) > draw_axis((int)x0,CImg<floatT>::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), > color,opacity,pattern_y,font_height); > else if (x0!=x1 && y0==y1) > draw_axis(CImg<floatT>::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px),(int)y0, > color,opacity,pattern_x,font_height); > return *this; > } ># 33560 "./CImg.h" > template<typename tx, typename ty, typename tc> > CImg<T>& draw_grid(const CImg<tx>& values_x, const CImg<ty>& values_y, > const tc *const color, const float opacity=1, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { > if (is_empty()) return *this; > if (values_x) for (unsigned long x = 0, _maxx = (values_x).size(); x<_maxx; ++x) { > const int xi = (int)values_x[x]; > if (xi>=0 && xi<width()) draw_line(xi,0,xi,_height-1,color,opacity,pattern_x); > } > if (values_y) for (unsigned long y = 0, _maxy = (values_y).size(); y<_maxy; ++y) { > const int yi = (int)values_y[y]; > if (yi>=0 && yi<height()) draw_line(0,yi,_width-1,yi,color,opacity,pattern_y); > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_grid(const float delta_x, const float delta_y, > const float offsetx, const float offsety, > const bool invertx, const bool inverty, > const tc *const color, const float opacity=1, > const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { > if (is_empty()) return *this; > CImg<uintT> seqx, seqy; > if (delta_x!=0) { > const float dx = delta_x>0?delta_x:_width*-delta_x/100; > const unsigned int nx = (unsigned int)(_width/dx); > seqx = CImg<uintT>::sequence(1+nx,0,(unsigned int)(dx*nx)); > if (offsetx) for (unsigned long x = 0, _maxx = (seqx).size(); x<_maxx; ++x) seqx(x) = (unsigned int)cimg::mod(seqx(x)+offsetx,(float)_width); > if (invertx) for (unsigned long x = 0, _maxx = (seqx).size(); x<_maxx; ++x) seqx(x) = _width - 1 - seqx(x); > } > if (delta_y!=0) { > const float dy = delta_y>0?delta_y:_height*-delta_y/100; > const unsigned int ny = (unsigned int)(_height/dy); > seqy = CImg<uintT>::sequence(1+ny,0,(unsigned int)(dy*ny)); > if (offsety) for (unsigned long y = 0, _maxy = (seqy).size(); y<_maxy; ++y) seqy(y) = (unsigned int)cimg::mod(seqy(y)+offsety,(float)_height); > if (inverty) for (unsigned long y = 0, _maxy = (seqy).size(); y<_maxy; ++y) seqy(y) = _height - 1 - seqy(y); > } > return draw_grid(seqx,seqy,color,opacity,pattern_x,pattern_y); > } ># 33628 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_graph(const CImg<t>& data, > const tc *const color, const float opacity=1, > const unsigned int plot_type=1, const int vertex_type=1, > const double ymin=0, const double ymax=0, const unsigned int pattern=~0U) { > if (is_empty() || _height<=1) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_graph(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > CImg<tc> color1, color2; > if (plot_type==3) { > color1.assign(_spectrum); color2.assign(_spectrum); > for (int c = 0; c<(int)((*this)._spectrum); ++c) { color1[c] = (tc)cimg::min((float)cimg::type<tc>::max(),color[c]*1.2f); color2[c] = (tc)(color[c]*0.4f); } > } > > > const unsigned long > siz = data.size(), > _siz1 = siz - (plot_type!=3?1:0), > siz1 = _siz1?_siz1:1; > const unsigned int > _width1 = _width - (plot_type!=3?1:0), > width1 = _width1?_width1:1; > double m = ymin, M = ymax; > if (ymin==ymax) m = (double)data.max_min(M); > if (m==M) { --m; ++M; } > const float ca = (float)(M-m)/(_height-1); > bool init_hatch = true; > > > switch (plot_type%4) { > case 1 : { > int oX = 0, oY = (int)((data[0]-m)/ca); > const float fx = (float)_width1/siz1; > if (siz==1) { > const int Y = (int)((*data-m)/ca); > draw_line(0,Y,width()-1,Y,color,opacity,pattern); > } else for (unsigned long off = 1; off<siz; ++off) { > const int > X = (int)(off*fx), > Y = (int)((data[off]-m)/ca); > draw_line(oX,oY,X,Y,color,opacity,pattern,init_hatch); > oX = X; oY = Y; > init_hatch = false; > } > } break; > case 2 : { > const CImg<t> ndata(data._data,siz,1,1,1,true); > int oY = (int)((data[0]-m)/ca); > for (int x = 0; x<(int)((*this)._width); ++x) { > const int Y = (int)((ndata._cubic_atX((float)x*siz1/width1)-m)/ca); > if (x>0) draw_line(x,oY,x+1,Y,color,opacity,pattern,init_hatch); > init_hatch = false; > oY = Y; > } > } break; > case 3 : { > const int Y0 = (int)(-m/ca); > const float fx = (float)_width/(siz-1); > int oX = 0; > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)((off+1)*fx), > Y = (int)((data[off]-m)/ca); > draw_rectangle(oX,Y0,X,Y,color,opacity). > draw_line(oX,Y,oX,Y0,color2.data(),opacity). > draw_line(oX,Y0,X,Y0,Y<=Y0?color2.data():color1.data(),opacity). > draw_line(X,Y,X,Y0,color1.data(),opacity). > draw_line(oX,Y,X,Y,Y<=Y0?color1.data():color2.data(),opacity); > oX = X+1; > } > } break; > default : break; > } > > > const unsigned int wb2 = plot_type==3?_width1/(2*siz):0; > const float fx = (float)_width1/siz1; > switch (vertex_type%8) { > case 1 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_point(X,Y,color,opacity); > } > } break; > case 2 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_line(X-3,Y,X+3,Y,color,opacity).draw_line(X,Y-3,X,Y+3,color,opacity); > } > } break; > case 3 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_line(X-3,Y-3,X+3,Y+3,color,opacity).draw_line(X-3,Y+3,X+3,Y-3,color,opacity); > } > } break; > case 4 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_circle(X,Y,3,color,opacity); > } > } break; > case 5 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_circle(X,Y,3,color,opacity,0U); > } > } break; > case 6 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_rectangle(X-3,Y-3,X+3,Y+3,color,opacity,~0U); > } > } break; > case 7 : { > for (unsigned long off = 0, _maxoff = (data).size(); off<_maxoff; ++off) { > const int > X = (int)(off*fx) + wb2, > Y = (int)((data[off]-m)/ca); > draw_line(X,Y-4,X+4,Y,color,opacity). > draw_line(X+4,Y,X,Y+4,color,opacity). > draw_line(X,Y+4,X-4,Y,color,opacity). > draw_line(X-4,Y,X,Y-4,color,opacity); > } > } break; > default : break; > } > return *this; > } ># 33786 "./CImg.h" > template<typename tc, typename t> > CImg<T>& draw_fill(const int x, const int y, const int z, > const tc *const color, const float opacity, > CImg<t>& region, const float sigma=0, > const bool is_high_connexity=false) { ># 33817 "./CImg.h" > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_fill(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > region.assign(_width,_height,_depth,1,(t)0); > if (x>=0 && x<width() && y>=0 && y<height() && z>=0 && z<depth()) { > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth, siz = (unsigned long)_spectrum*whd; > const unsigned int W1 = _width-1, H1 = _height-1, D1 = _depth-1; > const bool is_3d = (_depth>1); > const CImg<T> reference_color = get_vector_at(x,y,z); > CImg<uintT> remaining(3,512,1,1,0); > remaining(0,0) = x; remaining(1,0) = y; remaining(2,0) = z; > unsigned int posr0 = 0, posr1 = 1; > region(x,y,z) = (t)1; > const t noregion = ((t)1==(t)2)?(t)0:(t)(-1); > if (is_3d) do { > const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++), zc = *(pcurr++); > if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } > bool cont, res; > unsigned int nxc = xc; > do { > { const tc *col = color; T *ptrd = data(nxc,yc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = nxc, ty = yc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = nxc, ty = yc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (nxc) { --nxc; if (region(nxc,yc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,zc) = (t)(cont?1:noregion); }; } else cont = false; > } while (cont); > nxc = xc; > do { > if ((++nxc)<=W1) { if (region(nxc,yc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,zc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(nxc,yc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = nxc, ty = yc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = nxc, ty = yc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > unsigned int nyc = yc; > do { > if (nyc) { --nyc; if (region(xc,nyc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,zc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = xc, ty = nyc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = xc, ty = nyc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > nyc = yc; > do { > if ((++nyc)<=H1) { if (region(xc,nyc,zc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,zc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,zc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = zc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc!=0) { const unsigned int tx = xc, ty = nyc, tz = zc-1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (zc<D1) { const unsigned int tx = xc, ty = nyc, tz = zc+1; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > unsigned int nzc = zc; > do { > if (nzc) { --nzc; if (region(xc,yc,nzc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,yc,nzc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,yc,nzc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,yc,nzc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc!=0) { const unsigned int tx = xc, ty = yc-1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = xc, ty = yc+1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > nzc = zc; > do { > if ((++nzc)<=D1) { if (region(xc,yc,nzc)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,yc,nzc) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,yc,nzc) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,zc); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = yc, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc!=0) { const unsigned int tx = xc, ty = yc-1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = xc, ty = yc+1, tz = nzc; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } while (cont); > } while (posr1>posr0); > else do { > const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++); > if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } > bool cont, res; > unsigned int nxc = xc; > do { > { const tc *col = color; T *ptrd = data(nxc,yc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((nxc!=0 && yc!=0)) { const unsigned int tx = nxc-1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc!=0)) { const unsigned int tx = nxc+1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc!=0 && yc<H1)) { const unsigned int tx = nxc-1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc<H1)) { const unsigned int tx = nxc+1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > if (nxc) { --nxc; if (region(nxc,yc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,0) = (t)(cont?1:noregion); }; } else cont = false; > } while (cont); > nxc = xc; > do { > if ((++nxc)<=W1) { if (region(nxc,yc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(nxc,yc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(nxc,yc,0) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(nxc,yc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (yc!=0) { const unsigned int tx = nxc, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (yc<H1) { const unsigned int tx = nxc, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((nxc!=0 && yc!=0)) { const unsigned int tx = nxc-1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc!=0)) { const unsigned int tx = nxc+1, ty = yc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc!=0 && yc<H1)) { const unsigned int tx = nxc-1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((nxc<W1 && yc<H1)) { const unsigned int tx = nxc+1, ty = yc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } > } while (cont); > unsigned int nyc = yc; > do { > if (nyc) { --nyc; if (region(xc,nyc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,0) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((xc!=0 && nyc!=0)) { const unsigned int tx = xc-1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc!=0)) { const unsigned int tx = xc+1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc!=0 && nyc<H1)) { const unsigned int tx = xc-1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc<H1)) { const unsigned int tx = xc+1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } > } while (cont); > nyc = yc; > do { > if ((++nyc)<=H1) { if (region(xc,nyc,0)) cont = false; else { cont = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(xc,nyc,0) + siz; for (unsigned int i = _spectrum; cont && i; --i) { ptrs-=whd; cont = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(xc,nyc,0) = (t)(cont?1:noregion); }; } else cont = false; > if (cont) { > { const tc *col = color; T *ptrd = data(xc,nyc,0); if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)*(col++); ptrd+=whd; } else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } }; > if (xc!=0) { const unsigned int tx = xc-1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (xc<W1) { const unsigned int tx = xc+1, ty = nyc, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if (is_high_connexity) { > if ((xc!=0 && nyc!=0)) { const unsigned int tx = xc-1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc!=0)) { const unsigned int tx = xc+1, ty = nyc-1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc!=0 && nyc<H1)) { const unsigned int tx = xc-1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > if ((xc<W1 && nyc<H1)) { const unsigned int tx = xc+1, ty = nyc+1, tz = 0; if (region(tx,ty,tz)) res = false; else { res = true; const T *reference_col = reference_color._data + _spectrum, *ptrs = data(tx,ty,tz) + siz; for (unsigned int i = _spectrum; res && i; --i) { ptrs-=whd; res = (cimg::abs(*ptrs - *(--reference_col))<=sigma); } region(tx,ty,tz) = (t)(res?1:noregion); }; if (res) { if (posr1>=remaining._height) remaining.resize(3,remaining._height<<1,1,1,0); unsigned int *ptrr = remaining.data(0,posr1); *(ptrr++) = tx; *(ptrr++) = ty; *(ptrr++) = tz; ++posr1; }; }; > } > } > } while (cont); > } while (posr1>posr0); > if (noregion) for (t *ptrd = (region)._data, *_maxptrd = (region)._data + (region).size(); ptrd<_maxptrd; ++ptrd) if (*ptrd==noregion) *ptrd = (t)0; > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_fill(const int x, const int y, const int z, > const tc *const color, const float opacity=1, > const float sigma=0, const bool is_high_connexity=false) { > CImg<boolT> tmp; > return draw_fill(x,y,z,color,opacity,tmp,sigma,is_high_connexity); > } > > > template<typename tc> > CImg<T>& draw_fill(const int x, const int y, > const tc *const color, const float opacity=1, > const float sigma=0, const bool is_high_connexity=false) { > CImg<boolT> tmp; > return draw_fill(x,y,0,color,opacity,tmp,sigma,is_high_connexity); > } ># 33996 "./CImg.h" > CImg<T>& draw_plasma(const float alpha=1, const float beta=0, const unsigned int scale=8) { > if (is_empty()) return *this; > const int w = width(), h = height(); > const Tfloat m = (Tfloat)cimg::type<T>::min(), M = (Tfloat)cimg::type<T>::max(); > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) { > CImg<T> ref = get_shared_slice(z,c); > for (int delta = 1<<cimg::min(scale,31U); delta>1; delta>>=1) { > const int delta2 = delta>>1; > const float r = alpha*delta + beta; > > > for (int y0 = 0; y0<h; y0+=delta) > for (int x0 = 0; x0<w; x0+=delta) { > const int x1 = (x0 + delta)%w, y1 = (y0 + delta)%h, xc = (x0 + delta2)%w, yc = (y0 + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(x0,y0) + ref(x0,y1) + ref(x0,y1) + ref(x1,y1)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > > > for (int y = -delta2; y<h; y+=delta) > for (int x0=0; x0<w; x0+=delta) { > const int y0 = cimg::mod(y,h), x1 = (x0 + delta)%w, y1 = (y + delta)%h, xc = (x0 + delta2)%w, yc = (y + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(xc,y0) + ref(x0,yc) + ref(xc,y1) + ref(x1,yc)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > for (int y0 = 0; y0<h; y0+=delta) > for (int x = -delta2; x<w; x+=delta) { > const int x0 = cimg::mod(x,w), x1 = (x + delta)%w, y1 = (y0 + delta)%h, xc = (x + delta2)%w, yc = (y0 + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(xc,y0) + ref(x0,yc) + ref(xc,y1) + ref(x1,yc)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > for (int y = -delta2; y<h; y+=delta) > for (int x = -delta2; x<w; x+=delta) { > const int x0 = cimg::mod(x,w), y0 = cimg::mod(y,h), x1 = (x + delta)%w, y1 = (y + delta)%h, xc = (x + delta2)%w, yc = (y + delta2)%h; > const Tfloat val = (Tfloat)(0.25f*(ref(xc,y0) + ref(x0,yc) + ref(xc,y1) + ref(x1,yc)) + r*cimg::crand()); > ref(xc,yc) = (T)(val<m?m:val>M?M:val); > } > } > } > return *this; > } ># 34057 "./CImg.h" > template<typename tc> > CImg<T>& draw_mandelbrot(const int x0, const int y0, const int x1, const int y1, > const CImg<tc>& colormap, const float opacity=1, > const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, > const unsigned int iteration_max=255, > const bool is_normalized_iteration=false, > const bool is_julia_set=false, > const double param_r=0, const double param_i=0) { > if (is_empty()) return *this; > CImg<tc> palette; > if (colormap) palette.assign(colormap._data,colormap.size()/colormap._spectrum,1,1,colormap._spectrum,true); > if (palette && palette._spectrum!=_spectrum) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_mandelbrot(): Instance and specified colormap (%u,%u,%u,%u,%p) have incompatible dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); > > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), ln2 = (float)std::log(2.0); > const int > _x0 = x0<0?0:x0>=width()?width()-1:x0, > _y0 = y0<0?0:y0>=height()?height()-1:y0, > _x1 = x1<0?1:x1>=width()?width()-1:x1, > _y1 = y1<0?1:y1>=height()?height()-1:y1; > > ># 34081 "./CImg.h" >#pragma omp parallel for collapse(2) if ((1+_x1-_x0)*(1+_y1-_y0)>=2048) ># 34081 "./CImg.h" > > > for (int q = _y0; q<=_y1; ++q) > for (int p = _x0; p<=_x1; ++p) { > unsigned int iteration = 0; > const double x = z0r + p*(z1r-z0r)/_width, y = z0i + q*(z1i-z0i)/_height; > double zr, zi, cr, ci; > if (is_julia_set) { zr = x; zi = y; cr = param_r; ci = param_i; } > else { zr = param_r; zi = param_i; cr = x; ci = y; } > for (iteration=1; zr*zr + zi*zi<=4 && iteration<=iteration_max; ++iteration) { > const double temp = zr*zr - zi*zi + cr; > zi = 2*zr*zi + ci; > zr = temp; > } > if (iteration>iteration_max) { > if (palette) { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)palette(0,c); > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(palette(0,c)*nopacity + (*this)(p,q,0,c)*copacity); > } else { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)0; > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)((*this)(p,q,0,c)*copacity); > } > } else if (is_normalized_iteration) { > const float > normz = (float)cimg::abs(zr*zr+zi*zi), > niteration = (float)(iteration + 1 - std::log(std::log(normz))/ln2); > if (palette) { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)palette._linear_atX(niteration,c); > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(palette._linear_atX(niteration,c)*nopacity + (*this)(p,q,0,c)*copacity); > } else { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)niteration; > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(niteration*nopacity + (*this)(p,q,0,c)*copacity); > } > } else { > if (palette) { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)palette._atX(iteration,c); > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(palette(iteration,c)*nopacity + (*this)(p,q,0,c)*copacity); > } else { > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)iteration; > else for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(p,q,0,c) = (T)(iteration*nopacity + (*this)(p,q,0,c)*copacity); > } > } > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_mandelbrot(const CImg<tc>& colormap, const float opacity=1, > const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, > const unsigned int iteration_max=255, > const bool is_normalized_iteration=false, > const bool is_julia_set=false, > const double param_r=0, const double param_i=0) { > return draw_mandelbrot(0,0,_width-1,_height-1,colormap,opacity, > z0r,z0i,z1r,z1i,iteration_max,is_normalized_iteration,is_julia_set,param_r,param_i); > } ># 34146 "./CImg.h" > template<typename tc> > CImg<T>& draw_gaussian(const float xc, const float sigma, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > const float sigma2 = 2*sigma*sigma, nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const tc *col = color; > for (int x = 0; x<(int)((*this)._width); ++x) { > const float dx = (x - xc), val = (float)std::exp(-dx*dx/sigma2); > T *ptrd = data(x,0,0,0); > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } > col-=_spectrum; > } > return *this; > } ># 34175 "./CImg.h" > template<typename t, typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const CImg<t>& tensor, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > if (tensor._width!=2 || tensor._height!=2 || tensor._depth!=1 || tensor._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 2x2 matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); > if (!color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified color is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > typedef typename CImg<t>::Tfloat tfloat; > const CImg<tfloat> invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); > const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = invT2(1,1); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const tc *col = color; > float dy = -yc; > for (int y = 0; y<(int)((*this)._height); ++y) { > float dx = -xc; > for (int x = 0; x<(int)((*this)._width); ++x) { > const float val = (float)std::exp(a*dx*dx + b*dx*dy + c*dy*dy); > T *ptrd = data(x,y,0,0); > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } > col-=_spectrum; > ++dx; > } > ++dy; > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_gaussian(const int xc, const int yc, const float r1, const float r2, const float ru, const float rv, > const tc *const color, const float opacity=1) { > const double > a = r1*ru*ru + r2*rv*rv, > b = (r1-r2)*ru*rv, > c = r1*rv*rv + r2*ru*ru; > const CImg<Tfloat> tensor(2,2,1,1, a,b,b,c); > return draw_gaussian(xc,yc,tensor,color,opacity); > } > > > template<typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const float sigma, > const tc *const color, const float opacity=1) { > return draw_gaussian(xc,yc,CImg<floatT>::diagonal(sigma,sigma),color,opacity); > } > > > template<typename t, typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const float zc, const CImg<t>& tensor, > const tc *const color, const float opacity=1) { > if (is_empty()) return *this; > typedef typename CImg<t>::Tfloat tfloat; > if (tensor._width!=3 || tensor._height!=3 || tensor._depth!=1 || tensor._spectrum!=1) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 3x3 matrix.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); > > const CImg<tfloat> invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); > const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = 2*invT2(2,0), d = invT2(1,1), e = 2*invT2(2,1), f = invT2(2,2); > const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0); > const unsigned long whd = (unsigned long)_width*_height*_depth; > const tc *col = color; > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > const float > dx = (x - xc), dy = (y - yc), dz = (z - zc), > val = (float)std::exp(a*dx*dx + b*dx*dy + c*dx*dz + d*dy*dy + e*dy*dz + f*dz*dz); > T *ptrd = data(x,y,z,0); > if (opacity>=1) for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } > else for (int c = 0; c<(int)((*this)._spectrum); ++c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } > col-=_spectrum; > } > return *this; > } > > > template<typename tc> > CImg<T>& draw_gaussian(const float xc, const float yc, const float zc, const float sigma, > const tc *const color, const float opacity=1) { > return draw_gaussian(xc,yc,zc,CImg<floatT>::diagonal(sigma,sigma,sigma),color,opacity); > } ># 34283 "./CImg.h" > template<typename tp, typename tf, typename tc, typename to> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImg<to>& opacities, > const unsigned int render_type=4, > const bool is_double_sided=false, const float focale=700, > const float lightx=0, const float lighty=0, const float lightz=-5e8, > const float specular_lightness=0.2f, const float specular_shininess=0.1f) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, > specular_lightness,specular_shininess,CImg<floatT>::empty()); > } > > > template<typename tp, typename tf, typename tc, typename to, typename tz> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImg<to>& opacities, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > CImg<tz>& zbuffer) { > return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); > } ># 34339 "./CImg.h" > template<typename tp, typename tf, typename tc, typename to> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImgList<to>& opacities, > const unsigned int render_type=4, > const bool is_double_sided=false, const float focale=700, > const float lightx=0, const float lighty=0, const float lightz=-5e8, > const float specular_lightness=0.2f, const float specular_shininess=0.1f) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type,is_double_sided,focale,lightx,lighty,lightz, > specular_lightness,specular_shininess,CImg<floatT>::empty()); > } > > > template<typename tp, typename tf, typename tc, typename to, typename tz> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, const CImgList<to>& opacities, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > CImg<tz>& zbuffer) { > return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,1); > } ># 34395 "./CImg.h" > template<typename tp, typename tf, typename tc> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const unsigned int render_type=4, > const bool is_double_sided=false, const float focale=700, > const float lightx=0, const float lighty=0, const float lightz=-5e8, > const float specular_lightness=0.2f, const float specular_shininess=0.1f) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg<floatT>::empty(), > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,CImg<floatT>::empty()); > } > > > template<typename tp, typename tf, typename tc, typename tz> > CImg<T>& draw_object3d(const float x0, const float y0, const float z0, > const CImg<tp>& vertices, const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > CImg<tz>& zbuffer) { > return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg<floatT>::empty(), > render_type,is_double_sided,focale,lightx,lighty,lightz,specular_lightness,specular_shininess,zbuffer); > } ># 34450 "./CImg.h" > template<typename t, typename to> > static float __draw_object3d(const CImgList<t>& opacities, const unsigned int n_primitive, CImg<to>& opacity) { > if (n_primitive>=opacities._width || opacities[n_primitive].is_empty()) { opacity.assign(); return 1; } > if (opacities[n_primitive].size()==1) { opacity.assign(); return opacities(n_primitive,0); } > opacity.assign(opacities[n_primitive],true); > return 1.0f; > } > > template<typename t, typename to> > static float __draw_object3d(const CImg<t>& opacities, const unsigned int n_primitive, CImg<to>& opacity) { > opacity.assign(); > return n_primitive>=opacities._width?1.0f:(float)opacities[n_primitive]; > } > > template<typename tz, typename tp, typename tf, typename tc, typename to> > CImg<T>& _draw_object3d(void *const pboard, CImg<tz>& zbuffer, > const float X, const float Y, const float Z, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const unsigned int render_type, > const bool is_double_sided, const float focale, > const float lightx, const float lighty, const float lightz, > const float specular_lightness, const float specular_shininess, > const float sprite_scale) { > typedef typename cimg::superset2<tp,tz,float>::type tpfloat; > if (is_empty() || !vertices || !primitives) return *this; > char error_message[1024] = { 0 }; > if (!vertices.is_object3d(primitives,colors,opacities,false,error_message)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Invalid specified 3d object (%u,%u) (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),vertices._width,primitives._width,error_message); > if (render_type==5) cimg::mutex(10); > > > if (pboard) return *this; > > const float > nspec = 1 - (specular_lightness<0.0f?0.0f:(specular_lightness>1.0f?1.0f:specular_lightness)), > nspec2 = 1 + (specular_shininess<0.0f?0.0f:specular_shininess), > nsl1 = (nspec2 - 1)/cimg::sqr(nspec - 1), > nsl2 = 1 - 2*nsl1*nspec, > nsl3 = nspec2 - nsl1 - nsl2; > > > CImg<floatT> light_texture; > if (render_type==5) { > if (colors._width>primitives._width) { > static CImg<floatT> default_light_texture; > static const tc *lptr = 0; > static tc ref_values[64] = { 0 }; > const CImg<tc>& img = colors.back(); > bool is_same_texture = (lptr==img._data); > if (is_same_texture) > for (unsigned int r = 0, j = 0; j<8; ++j) > for (unsigned int i = 0; i<8; ++i) > if (ref_values[r++]!=img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum)) { is_same_texture = false; break; } > if (!is_same_texture || default_light_texture._spectrum<_spectrum) { > (default_light_texture.assign(img,false)/=255).resize(-100,-100,1,_spectrum); > lptr = colors.back().data(); > for (unsigned int r = 0, j = 0; j<8; ++j) > for (unsigned int i = 0; i<8; ++i) > ref_values[r++] = img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum); > } > light_texture.assign(default_light_texture,true); > } else { > static CImg<floatT> default_light_texture; > static float olightx = 0, olighty = 0, olightz = 0, ospecular_shininess = 0; > if (!default_light_texture || > lightx!=olightx || lighty!=olighty || lightz!=olightz || > specular_shininess!=ospecular_shininess || default_light_texture._spectrum<_spectrum) { > default_light_texture.assign(512,512); > const float > dlx = lightx - X, > dly = lighty - Y, > dlz = lightz - Z, > nl = (float)std::sqrt(dlx*dlx + dly*dly + dlz*dlz), > nlx = (default_light_texture._width - 1)/2*(1 + dlx/nl), > nly = (default_light_texture._height - 1)/2*(1 + dly/nl), > white[] = { 1 }; > default_light_texture.draw_gaussian(nlx,nly,default_light_texture._width/3.0f,white); > for (int y = 0; y<(int)((default_light_texture)._height); ++y) for (int x = 0; x<(int)((default_light_texture)._width); ++x) { > const float factor = default_light_texture(x,y); > if (factor>nspec) default_light_texture(x,y) = cimg::min(2,nsl1*factor*factor + nsl2*factor + nsl3); > } > default_light_texture.resize(-100,-100,1,_spectrum); > olightx = lightx; olighty = lighty; olightz = lightz; ospecular_shininess = specular_shininess; > } > light_texture.assign(default_light_texture,true); > } > } > > > CImg<tpfloat> projections(vertices._width,2); > tpfloat parallzmin = cimg::type<tpfloat>::max(); > const float absfocale = focale?cimg::abs(focale):0; > if (absfocale) { > > ># 34549 "./CImg.h" >#pragma omp parallel for if (projections.size()>4096) ># 34549 "./CImg.h" > > > for (int l = 0; l<(int)((projections)._width); ++l) { > const tpfloat > x = (tpfloat)vertices(l,0), > y = (tpfloat)vertices(l,1), > z = (tpfloat)vertices(l,2); > const tpfloat projectedz = z + Z + absfocale; > projections(l,1) = Y + absfocale*y/projectedz; > projections(l,0) = X + absfocale*x/projectedz; > } > > } else { > > ># 34563 "./CImg.h" >#pragma omp parallel for if (projections.size()>4096) ># 34563 "./CImg.h" > > > for (int l = 0; l<(int)((projections)._width); ++l) { > const tpfloat > x = (tpfloat)vertices(l,0), > y = (tpfloat)vertices(l,1), > z = (tpfloat)vertices(l,2); > if (z<parallzmin) parallzmin = z; > projections(l,1) = Y + y; > projections(l,0) = X + x; > } > } > const float _focale = absfocale?absfocale:(1e5f-parallzmin); > > > CImg<uintT> visibles(primitives._width,1,1,1,~0U); > CImg<tpfloat> zrange(primitives._width); > const tpfloat zmin = absfocale?(tpfloat)(1.5f - absfocale):cimg::type<tpfloat>::min(); > > > ># 34583 "./CImg.h" >#pragma omp parallel for if (primitives.size()>4096) ># 34583 "./CImg.h" > > > for (int l = 0; l<(int)(primitives)._width; ++l) { > const CImg<tf>& primitive = primitives[l]; > switch (primitive.size()) { > case 1 : { > const unsigned int i0 = (unsigned int)primitive(0); > const tpfloat z0 = Z + vertices(i0,2); > if (z0>zmin) { > visibles(l) = (unsigned int)l; > zrange(l) = z0; > } > } break; > case 5 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > const tpfloat > Xc = 0.5f*((float)vertices(i0,0) + (float)vertices(i1,0)), > Yc = 0.5f*((float)vertices(i0,1) + (float)vertices(i1,1)), > Zc = 0.5f*((float)vertices(i0,2) + (float)vertices(i1,2)), > _zc = Z + Zc, > zc = _zc + _focale, > xc = X + Xc*(absfocale?absfocale/zc:1), > yc = Y + Yc*(absfocale?absfocale/zc:1), > radius = 0.5f*std::sqrt(cimg::sqr(vertices(i1,0) - vertices(i0,0)) + > cimg::sqr(vertices(i1,1) - vertices(i0,1)) + > cimg::sqr(vertices(i1,2) - vertices(i0,2)))*(absfocale?absfocale/zc:1), > xm = xc - radius, > ym = yc - radius, > xM = xc + radius, > yM = yc + radius; > if (xM>=0 && xm<_width && yM>=0 && ym<_height && _zc>zmin) { > visibles(l) = (unsigned int)l; > zrange(l) = _zc; > } > } break; > case 2 : > case 6 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1); > const tpfloat > x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), > x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2); > tpfloat xm, xM, ym, yM; > if (x0<x1) { xm = x0; xM = x1; } else { xm = x1; xM = x0; } > if (y0<y1) { ym = y0; yM = y1; } else { ym = y1; yM = y0; } > if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin) { > visibles(l) = (unsigned int)l; > zrange(l) = (z0 + z1)/2; > } > } break; > case 3 : > case 9 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2); > const tpfloat > x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), > x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), > x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2); > tpfloat xm, xM, ym, yM; > if (x0<x1) { xm = x0; xM = x1; } else { xm = x1; xM = x0; } > if (x2<xm) xm = x2; > if (x2>xM) xM = x2; > if (y0<y1) { ym = y0; yM = y1; } else { ym = y1; yM = y0; } > if (y2<ym) ym = y2; > if (y2>yM) yM = y2; > if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { > const tpfloat d = (x1-x0)*(y2-y0) - (x2-x0)*(y1-y0); > if (is_double_sided || d<0) { > visibles(l) = (unsigned int)l; > zrange(l) = (z0 + z1 + z2)/3; > } > } > } break; > case 4 : > case 12 : { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2), > i3 = (unsigned int)primitive(3); > const tpfloat > x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), > x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), > x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2), > x3 = projections(i3,0), y3 = projections(i3,1), z3 = Z + vertices(i3,2); > tpfloat xm, xM, ym, yM; > if (x0<x1) { xm = x0; xM = x1; } else { xm = x1; xM = x0; } > if (x2<xm) xm = x2; > if (x2>xM) xM = x2; > if (x3<xm) xm = x3; > if (x3>xM) xM = x3; > if (y0<y1) { ym = y0; yM = y1; } else { ym = y1; yM = y0; } > if (y2<ym) ym = y2; > if (y2>yM) yM = y2; > if (y3<ym) ym = y3; > if (y3>yM) yM = y3; > if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { > const float d = (x1 - x0)*(y2 - y0) - (x2 - x0)*(y1 - y0); > if (is_double_sided || d<0) { > visibles(l) = (unsigned int)l; > zrange(l) = (z0 + z1 + z2 + z3)/4; > } > } > } break; > default : > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Invalid primitive[%u] with size %u " > "(should have size 1,2,3,4,5,6,9 or 12).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > l,primitive.size()); > } > } > > > unsigned int *p_visibles = visibles._data; > float *p_zrange = zrange._data; > const float *ptrz = p_zrange; > for (unsigned int *ptr = (visibles)._data, *_maxptr = (visibles)._data + (visibles).size(); ptr<_maxptr; ++ptr) { > if (*ptr!=~0U) { *(p_visibles++) = *ptr; *(p_zrange++) = *ptrz; } > ++ptrz; > } > const unsigned int nb_visibles = p_zrange - zrange._data; > if (!nb_visibles) return *this; > CImg<uintT> permutations; > CImg<tpfloat>(zrange._data,nb_visibles,1,1,1,true).sort(permutations,false); > > > CImg<floatT> lightprops; > switch (render_type) { > case 3 : { > lightprops.assign(nb_visibles); > > ># 34720 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34720 "./CImg.h" > > > for (int l = 0; l<(int)((lightprops)._width); ++l) { > const CImg<tf>& primitive = primitives(visibles(permutations(l))); > const unsigned int psize = primitive.size(); > if (psize==3 || psize==4 || psize==9 || psize==12) { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2); > const tpfloat > x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), > x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), > x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), > dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, > dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, > nx = dy1*dz2 - dz1*dy2, > ny = dz1*dx2 - dx1*dz2, > nz = dx1*dy2 - dy1*dx2, > norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), > lx = X + (x0 + x1 + x2)/3 - lightx, > ly = Y + (y0 + y1 + y2)/3 - lighty, > lz = Z + (z0 + z1 + z2)/3 - lightz, > nl = (tpfloat)std::sqrt(1e-5f + lx*lx + ly*ly + lz*lz), > factor = cimg::max(cimg::abs(-lx*nx-ly*ny-lz*nz)/(norm*nl),0); > lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); > } else lightprops[l] = 1; > } > } break; > > case 4 : > case 5 : { > CImg<tpfloat> vertices_normals(vertices._width,3,1,1,0); > > ># 34754 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34754 "./CImg.h" > > > for (unsigned int l = 0; l<nb_visibles; ++l) { > const CImg<tf>& primitive = primitives[visibles(l)]; > const unsigned int psize = primitive.size(); > const bool > triangle_flag = (psize==3) || (psize==9), > rectangle_flag = (psize==4) || (psize==12); > if (triangle_flag || rectangle_flag) { > const unsigned int > i0 = (unsigned int)primitive(0), > i1 = (unsigned int)primitive(1), > i2 = (unsigned int)primitive(2), > i3 = rectangle_flag?(unsigned int)primitive(3):0; > const tpfloat > x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), > x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), > x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), > dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, > dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, > nnx = dy1*dz2 - dz1*dy2, > nny = dz1*dx2 - dx1*dz2, > nnz = dx1*dy2 - dy1*dx2, > norm = (tpfloat)(1e-5f + std::sqrt(nnx*nnx + nny*nny + nnz*nnz)), > nx = nnx/norm, > ny = nny/norm, > nz = nnz/norm; > vertices_normals(i0,0)+=nx; vertices_normals(i0,1)+=ny; vertices_normals(i0,2)+=nz; > vertices_normals(i1,0)+=nx; vertices_normals(i1,1)+=ny; vertices_normals(i1,2)+=nz; > vertices_normals(i2,0)+=nx; vertices_normals(i2,1)+=ny; vertices_normals(i2,2)+=nz; > if (rectangle_flag) { vertices_normals(i3,0)+=nx; vertices_normals(i3,1)+=ny; vertices_normals(i3,2)+=nz; } > } > } > > if (is_double_sided) for (int p = 0; p<(int)((vertices_normals)._width); ++p) if (vertices_normals(p,2)>0) { > vertices_normals(p,0) = -vertices_normals(p,0); > vertices_normals(p,1) = -vertices_normals(p,1); > vertices_normals(p,2) = -vertices_normals(p,2); > } > > if (render_type==4) { > lightprops.assign(vertices._width); > > ># 34797 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34797 "./CImg.h" > > > for (int l = 0; l<(int)((lightprops)._width); ++l) { > const tpfloat > nx = vertices_normals(l,0), > ny = vertices_normals(l,1), > nz = vertices_normals(l,2), > norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), > lx = X + vertices(l,0) - lightx, > ly = Y + vertices(l,1) - lighty, > lz = Z + vertices(l,2) - lightz, > nl = (tpfloat)std::sqrt(1e-5f + lx*lx + ly*ly + lz*lz), > factor = cimg::max((-lx*nx-ly*ny-lz*nz)/(norm*nl),0); > lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); > } > } else { > const unsigned int > lw2 = light_texture._width/2 - 1, > lh2 = light_texture._height/2 - 1; > lightprops.assign(vertices._width,2); > > ># 34818 "./CImg.h" >#pragma omp parallel for if (nb_visibles>4096) ># 34818 "./CImg.h" > > > for (int l = 0; l<(int)((lightprops)._width); ++l) { > const tpfloat > nx = vertices_normals(l,0), > ny = vertices_normals(l,1), > nz = vertices_normals(l,2), > norm = (tpfloat)std::sqrt(1e-5f + nx*nx + ny*ny + nz*nz), > nnx = nx/norm, > nny = ny/norm; > lightprops(l,0) = lw2*(1 + nnx); > lightprops(l,1) = lh2*(1 + nny); > } > } > } break; > } > > > const CImg<tc> default_color(1,_spectrum,1,1,(tc)200); > typedef typename to::value_type _to; > CImg<_to> _opacity; > > for (unsigned int l = 0; l<nb_visibles; ++l) { > const unsigned int n_primitive = visibles(permutations(l)); > const CImg<tf>& primitive = primitives[n_primitive]; > const CImg<tc> > &__color = n_primitive<colors._width?colors[n_primitive]:CImg<tc>(), > _color = (__color && __color.size()!=_spectrum && __color._spectrum<_spectrum)?__color.get_resize(-100,-100,-100,_spectrum,0):CImg<tc>(), > &color = _color?_color:(__color?__color:default_color); > const tc *const pcolor = color._data; > const float opacity = __draw_object3d(opacities,n_primitive,_opacity); > > > > > > switch (primitive.size()) { > case 1 : { > const unsigned int n0 = (unsigned int)primitive[0]; > const int x0 = (int)projections(n0,0), y0 = (int)projections(n0,1); > > if (_opacity.is_empty()) { > > if (color.size()==_spectrum) { > draw_point(x0,y0,pcolor,opacity); > > > > > > > } else { > const tpfloat z = Z + vertices(n0,2); > const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); > const unsigned int > _sw = (unsigned int)(color._width*factor), > _sh = (unsigned int)(color._height*factor), > sw = _sw?_sw:1, sh = _sh?_sh:1; > const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; > if (sw<=3*_width/2 && sh<=3*_height/2 && (nx0+(int)sw/2>=0 || nx0-(int)sw/2<width() || ny0+(int)sh/2>=0 || ny0-(int)sh/2<height())) { > const CImg<tc> > _sprite = (sw!=color._width || sh!=color._height)?color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<tc>(), > &sprite = _sprite?_sprite:color; > draw_image(nx0,ny0,sprite,opacity); > > > > > > > > } > } > } else { > const tpfloat z = Z + vertices(n0,2); > const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); > const unsigned int > _sw = (unsigned int)(cimg::max(color._width,_opacity._width)*factor), > _sh = (unsigned int)(cimg::max(color._height,_opacity._height)*factor), > sw = _sw?_sw:1, sh = _sh?_sh:1; > const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; > if (sw<=3*_width/2 && sh<=3*_height/2 && (nx0+(int)sw/2>=0 || nx0-(int)sw/2<width() || ny0+(int)sh/2>=0 || ny0-(int)sh/2<height())) { > const CImg<tc> > _sprite = (sw!=color._width || sh!=color._height)?color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<tc>(), > &sprite = _sprite?_sprite:color; > const CImg<_to> > _nopacity = (sw!=_opacity._width || sh!=_opacity._height)?_opacity.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<_to>(), > &nopacity = _nopacity?_nopacity:_opacity; > draw_image(nx0,ny0,sprite,nopacity); > > > > > > > > } > } > } break; > case 2 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale; > if (render_type) { > if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity); > else draw_line(x0,y0,x1,y1,pcolor,opacity); > > > > > > > } else { > draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity); > > > > > > > > } > } break; > case 5 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > is_wireframe = (unsigned int)primitive[2]; > const float > Xc = 0.5f*((float)vertices(n0,0) + (float)vertices(n1,0)), > Yc = 0.5f*((float)vertices(n0,1) + (float)vertices(n1,1)), > Zc = 0.5f*((float)vertices(n0,2) + (float)vertices(n1,2)), > zc = Z + Zc + _focale, > xc = X + Xc*(absfocale?absfocale/zc:1), > yc = Y + Yc*(absfocale?absfocale/zc:1), > radius = 0.5f*std::sqrt(cimg::sqr(vertices(n1,0) - vertices(n0,0)) + > cimg::sqr(vertices(n1,1) - vertices(n0,1)) + > cimg::sqr(vertices(n1,2) - vertices(n0,2)))*(absfocale?absfocale/zc:1); > switch (render_type) { > case 0 : > draw_point((int)xc,(int)yc,pcolor,opacity); > > > > > > > break; > case 1 : > draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); > > > > > > > > break; > default : > if (is_wireframe) draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); > else draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity); ># 34995 "./CImg.h" > break; > } > } break; > case 6 : { > if (!__color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Undefined texture for line primitive [%u].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),n_primitive); > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > tx0 = (unsigned int)primitive[2], > ty0 = (unsigned int)primitive[3], > tx1 = (unsigned int)primitive[4], > ty1 = (unsigned int)primitive[5]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale; > if (render_type) { > if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity); > else draw_line(x0,y0,x1,y1,color,tx0,ty0,tx1,ty1,opacity); > > > > > > > } else { > draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). > draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity); > > > > > > > > } > } break; > case 3 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale; > switch (render_type) { > case 0 : > draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity).draw_point(x2,y2,pcolor,opacity); ># 35061 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x0,y0,z0,x2,y2,z2,pcolor,opacity). > draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity); > else > draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x0,y0,x2,y2,pcolor,opacity). > draw_line(x1,y1,x2,y2,pcolor,opacity); ># 35077 "./CImg.h" > break; > case 2 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity); > else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity); > > > > > > > break; > case 3 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)); > else _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)); ># 35101 "./CImg.h" > break; > case 4 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); > else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); ># 35116 "./CImg.h" > break; > case 5 : { > const unsigned int > lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), > lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), > lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1); > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); > else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); ># 35139 "./CImg.h" > } break; > } > } break; > case 4 : { > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2], > n3 = (unsigned int)primitive[3]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), > x3 = (int)projections(n3,0), y3 = (int)projections(n3,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale, > z3 = vertices(n3,2) + Z + _focale; > > switch (render_type) { > case 0 : > draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity). > draw_point(x2,y2,pcolor,opacity).draw_point(x3,y3,pcolor,opacity); ># 35172 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity). > draw_line(zbuffer,x2,y2,z2,x3,y3,z3,pcolor,opacity).draw_line(zbuffer,x3,y3,z3,x0,y0,z0,pcolor,opacity); > else > draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x1,y1,x2,y2,pcolor,opacity). > draw_line(x2,y2,x3,y3,pcolor,opacity).draw_line(x3,y3,x0,y0,pcolor,opacity); ># 35189 "./CImg.h" > break; > case 2 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity).draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity); > else > draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity).draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity); > > > > > > > > break; > case 3 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity,lightprops(l)); > else > _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)). > _draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity,lightprops(l)); ># 35220 "./CImg.h" > break; > case 4 : { > const float > lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), > lightprop2 = lightprops(n2), lightprop3 = lightprops(n3); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,lightprop0,lightprop2,lightprop3,opacity); > else > draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,lightprop0,lightprop2,lightprop3,opacity); ># 35245 "./CImg.h" > } break; > case 5 : { > const unsigned int > lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), > lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), > lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), > lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); > else > draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); ># 35277 "./CImg.h" > } break; > } > } break; > case 9 : { > if (!__color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Undefined texture for triangle primitive [%u].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),n_primitive); > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2], > tx0 = (unsigned int)primitive[3], > ty0 = (unsigned int)primitive[4], > tx1 = (unsigned int)primitive[5], > ty1 = (unsigned int)primitive[6], > tx2 = (unsigned int)primitive[7], > ty2 = (unsigned int)primitive[8]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale; > switch (render_type) { > case 0 : > draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). > draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity). > draw_point(x2,y2,color.get_vector_at(tx2,ty2)._data,opacity); ># 35316 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(zbuffer,x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). > draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); > else > draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). > draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); ># 35334 "./CImg.h" > break; > case 2 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); > else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); > > > > > > > break; > case 3 : > if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); > else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); ># 35358 "./CImg.h" > break; > case 4 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprops(n0),lightprops(n1),lightprops(n2),opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprops(n0),lightprops(n1),lightprops(n2),opacity); ># 35372 "./CImg.h" > break; > case 5 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, > (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), > (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), > (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), > opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, > (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), > (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), > (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), > opacity); ># 35396 "./CImg.h" > break; > } > } break; > case 12 : { > if (!__color) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "draw_object3d(): Undefined texture for quadrangle primitive [%u].", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),n_primitive); > const unsigned int > n0 = (unsigned int)primitive[0], > n1 = (unsigned int)primitive[1], > n2 = (unsigned int)primitive[2], > n3 = (unsigned int)primitive[3], > tx0 = (unsigned int)primitive[4], > ty0 = (unsigned int)primitive[5], > tx1 = (unsigned int)primitive[6], > ty1 = (unsigned int)primitive[7], > tx2 = (unsigned int)primitive[8], > ty2 = (unsigned int)primitive[9], > tx3 = (unsigned int)primitive[10], > ty3 = (unsigned int)primitive[11]; > const int > x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), > x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), > x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), > x3 = (int)projections(n3,0), y3 = (int)projections(n3,1); > const float > z0 = vertices(n0,2) + Z + _focale, > z1 = vertices(n1,2) + Z + _focale, > z2 = vertices(n2,2) + Z + _focale, > z3 = vertices(n3,2) + Z + _focale; > > switch (render_type) { > case 0 : > draw_point(x0,y0,color.get_vector_at(tx0,ty0)._data,opacity). > draw_point(x1,y1,color.get_vector_at(tx1,ty1)._data,opacity). > draw_point(x2,y2,color.get_vector_at(tx2,ty2)._data,opacity). > draw_point(x3,y3,color.get_vector_at(tx3,ty3)._data,opacity); ># 35443 "./CImg.h" > break; > case 1 : > if (zbuffer) > draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). > draw_line(zbuffer,x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). > draw_line(zbuffer,x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); > else > draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). > draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). > draw_line(x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). > draw_line(x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); ># 35464 "./CImg.h" > break; > case 2 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); > > > > > > > > break; > case 3 : > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); ># 35498 "./CImg.h" > break; > case 4 : { > const float > lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), > lightprop2 = lightprops(n2), lightprop3 = lightprops(n3); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,lightprop0,lightprop2,lightprop3,opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,lightprop0,lightprop1,lightprop2,opacity). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,lightprop0,lightprop2,lightprop3,opacity); ># 35520 "./CImg.h" > } break; > case 5 : { > const unsigned int > lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), > lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), > lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), > lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1); > if (zbuffer) > draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); > else > draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity). > draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,light_texture,lx0,ly0,lx2,ly2,lx3,ly3,opacity); ># 35549 "./CImg.h" > } break; > } > } break; > } > } > > if (render_type==5) cimg::mutex(10,0); > return *this; > } ># 35572 "./CImg.h" > CImg<T>& select(CImgDisplay &disp, > const unsigned int feature_type=2, unsigned int *const XYZ=0) { > return get_select(disp,feature_type,XYZ).move_to(*this); > } > > > CImg<T>& select(const char *const title, > const unsigned int feature_type=2, unsigned int *const XYZ=0) { > return get_select(title,feature_type,XYZ).move_to(*this); > } > > > CImg<intT> get_select(CImgDisplay &disp, > const unsigned int feature_type=2, unsigned int *const XYZ=0) const { > return _get_select(disp,0,feature_type,XYZ,0,0,0,true,false); > } > > > CImg<intT> get_select(const char *const title, > const unsigned int feature_type=2, unsigned int *const XYZ=0) const { > CImgDisplay disp; > return _get_select(disp,title,feature_type,XYZ,0,0,0,true,false); > } > > CImg<intT> _get_select(CImgDisplay &disp, const char *const title, > const unsigned int feature_type, unsigned int *const XYZ, > const int origX, const int origY, const int origZ, > const bool reset_view3d, > const bool force_display_z_coord) const { > if (is_empty()) return CImg<intT>(1,feature_type==0?3:6,1,1,-1); > if (!disp) { > disp.assign(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),title?title:0,1); > if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); > } else if (title) disp.set_title("%s",title); > > const unsigned int old_normalization = disp.normalization(); > bool old_is_resized = disp.is_resized(); > disp._normalization = 0; > disp.show().set_key(0).set_wheel().show_mouse(); > > unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; > > int area = 0, starting_area = 0, clicked_area = 0, phase = 0, > X0 = (int)((XYZ?XYZ[0]:(_width-1)/2)%_width), > Y0 = (int)((XYZ?XYZ[1]:(_height-1)/2)%_height), > Z0 = (int)((XYZ?XYZ[2]:(_depth-1)/2)%_depth), > X1 =-1, Y1 = -1, Z1 = -1, > X3d = -1, Y3d = -1, > oX3d = X3d, oY3d = -1, > omx = -1, omy = -1; > float X = -1, Y = -1, Z = -1; > unsigned int old_button = 0, key = 0; > > bool shape_selected = false, text_down = false, visible_cursor = true; > static CImg<floatT> pose3d; > static bool is_view3d = false, is_axes = true; > if (reset_view3d) { pose3d.assign(); is_view3d = false; } > CImg<floatT> points3d, opacities3d, sel_opacities3d; > CImgList<uintT> primitives3d, sel_primitives3d; > CImgList<ucharT> colors3d, sel_colors3d; > CImg<ucharT> visu, visu0, view3d; > char text[1024] = { 0 }; > > while (!key && !disp.is_closed() && !shape_selected) { > > > int > mx = disp.mouse_x(), > my = disp.mouse_y(); > > const float > mX = mx<0?-1.0f:(float)mx*(width()+(depth()>1?depth():0))/disp.width(), > mY = my<0?-1.0f:(float)my*(height()+(depth()>1?depth():0))/disp.height(); > > area = 0; > if (mX>=0 && mY>=0 && mX<width() && mY<height()) { area = 1; X = mX; Y = mY; Z = (float)(phase?Z1:Z0); } > if (mX>=0 && mX<width() && mY>=height()) { area = 2; X = mX; Z = mY - _height; Y = (float)(phase?Y1:Y0); } > if (mY>=0 && mX>=width() && mY<height()) { area = 3; Y = mY; Z = mX - _width; X = (float)(phase?X1:X0); } > if (mX>=width() && mY>=height()) area = 4; > if (disp.button()) { if (!clicked_area) clicked_area = area; } else clicked_area = 0; > > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case 0 : case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyPAGEUP : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(1); key = 0; } break; > case cimg::keyPAGEDOWN : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(-1); key = 0; } break; > case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > is_axes = !is_axes; disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > is_view3d = !is_view3d; disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"gmic" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > if (visu0) { > (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); > visu0.save(filename); > (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > } > disp.set_key(key,false); key = 0; > } break; > case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > snprintf(filename,sizeof(filename),"gmic" "_%.4u.cimgz",snap_number++); > > > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); > save(filename); > (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; > } > > switch (area) { > > case 0 : > mx = my = -1; X = Y = Z = -1; > break; > > case 1 : case 2 : case 3 : > if (disp.button()&1 && phase<2 && clicked_area==area) { > if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); > X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; > } > if (!(disp.button()&1) && phase>=2 && clicked_area!=area) { > switch (starting_area) { > case 1 : if (Z1!=(int)Z) visu0.assign(); Z1 = (int)Z; break; > case 2 : if (Y1!=(int)Y) visu0.assign(); Y1 = (int)Y; break; > case 3 : if (X1!=(int)X) visu0.assign(); X1 = (int)X; break; > } > } > if (disp.button()&2 && clicked_area==area) { > if (phase) { > if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); > X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; > } else { > if (_depth>1 && (X0!=(int)X || Y0!=(int)Y || Z0!=(int)Z)) visu0.assign(); > X0 = (int)X; Y0 = (int)Y; Z0 = (int)Z; > } > } > if (disp.button()&4) { > X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = area = clicked_area = starting_area = 0; visu0.assign(); > } > if (disp.wheel()) { > if (_depth>1 && !disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT() && !disp.is_keySHIFTLEFT() && !disp.is_keySHIFTRIGHT() && > !disp.is_keyALT() && !disp.is_keyALTGR()) { > switch (area) { > case 1 : > if (phase) Z = (float)(Z1+=disp.wheel()); else Z = (float)(Z0+=disp.wheel()); > visu0.assign(); break; > case 2 : > if (phase) Y = (float)(Y1+=disp.wheel()); else Y = (float)(Y0+=disp.wheel()); > visu0.assign(); break; > case 3 : > if (phase) X = (float)(X1+=disp.wheel()); else X = (float)(X0+=disp.wheel()); > visu0.assign(); break; > } > disp.set_wheel(); > } else key = ~0U; > } > if ((disp.button()&1)!=old_button) { > switch (phase) { > case 0 : > if (area==clicked_area) { > X0 = X1 = (int)X; Y0 = Y1 = (int)Y; Z0 = Z1 = (int)Z; starting_area = area; ++phase; > } break; > case 1 : > if (area==starting_area) { > X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; ++phase; > } else if (!(disp.button()&1)) { X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = 0; visu0.assign(); } > break; > case 2 : ++phase; break; > } > old_button = disp.button()&1; > } > break; > > case 4 : > if (is_view3d && points3d) { > X3d = mx - _width*disp.width()/(_width+(_depth>1?_depth:0)); > Y3d = my - _height*disp.height()/(_height+(_depth>1?_depth:0)); > if (oX3d<0) { oX3d = X3d; oY3d = Y3d; } > if ((disp.button()&3)==3) { pose3d.assign(); view3d.assign(); oX3d = oY3d = X3d = Y3d = -1; } > else if (disp.button()&1 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { > const float > R = 0.45f*cimg::min(view3d._width,view3d._height), > R2 = R*R, > u0 = (float)(oX3d-view3d.width()/2), > v0 = (float)(oY3d-view3d.height()/2), > u1 = (float)(X3d-view3d.width()/2), > v1 = (float)(Y3d-view3d.height()/2), > n0 = (float)std::sqrt(u0*u0+v0*v0), > n1 = (float)std::sqrt(u1*u1+v1*v1), > nu0 = n0>R?(u0*R/n0):u0, > nv0 = n0>R?(v0*R/n0):v0, > nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), > nu1 = n1>R?(u1*R/n1):u1, > nv1 = n1>R?(v1*R/n1):v1, > nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), > u = nv0*nw1 - nw0*nv1, > v = nw0*nu1 - nu0*nw1, > w = nv0*nu1 - nu0*nv1, > n = (float)std::sqrt(u*u+v*v+w*w), > alpha = (float)std::asin(n/R2); > pose3d.draw_image(CImg<floatT>::rotation_matrix(u,v,w,alpha)*pose3d.get_crop(0,0,2,2)); > view3d.assign(); > } else if (disp.button()&2 && pose3d && oY3d!=Y3d) { > pose3d(3,2)-=(oY3d - Y3d)*1.5f; view3d.assign(); > } > if (disp.wheel()) { > pose3d(3,2)-=disp.wheel()*15; view3d.assign(); disp.set_wheel(); > } > if (disp.button()&4 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { > pose3d(3,0)-=oX3d - X3d; pose3d(3,1)-=oY3d - Y3d; view3d.assign(); > } > oX3d = X3d; oY3d = Y3d; > } > mx = my = -1; X = Y = Z = -1; > break; > } > > if (phase) { > if (!feature_type) shape_selected = phase?true:false; > else { > if (_depth>1) shape_selected = (phase==3)?true:false; > else shape_selected = (phase==2)?true:false; > } > } > > if (X0<0) X0 = 0; if (X0>=width()) X0 = width() - 1; > if (Y0<0) Y0 = 0; if (Y0>=height()) Y0 = height() - 1; > if (Z0<0) Z0 = 0; if (Z0>=depth()) Z0 = depth() - 1; > if (X1<1) X1 = 0; if (X1>=width()) X1 = width() - 1; > if (Y1<0) Y1 = 0; if (Y1>=height()) Y1 = height() - 1; > if (Z1<0) Z1 = 0; if (Z1>=depth()) Z1 = depth() - 1; > > > if (mx!=omx || my!=omy || !visu0 || (_depth>1 && !view3d)) { > > if (!visu0) { > __get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0).resize(disp); > view3d.assign(); > points3d.assign(); > } > > if (is_view3d && _depth>1 && !view3d) { > const unsigned int > _x3d = (unsigned int)cimg::round((float)_width*visu0._width/(_width+_depth),1,1), > _y3d = (unsigned int)cimg::round((float)_height*visu0._height/(_height+_depth),1,1), > x3d = _x3d>=visu0._width?visu0._width-1:_x3d, > y3d = _y3d>=visu0._height?visu0._height-1:_y3d; > CImg<ucharT>(1,2,1,1,64,128).resize(visu0._width-x3d,visu0._height-y3d,1,visu0._spectrum,3).move_to(view3d); > if (!points3d) { > get_projections3d(primitives3d,colors3d,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0,true).move_to(points3d); > points3d.append(CImg<floatT>(8,3,1,1, > 0,_width-1,_width-1,0,0,_width-1,_width-1,0, > 0,0,_height-1,_height-1,0,0,_height-1,_height-1, > 0,0,0,0,_depth-1,_depth-1,_depth-1,_depth-1),'x'); > CImg<uintT>::vector(12,13).move_to(primitives3d); CImg<uintT>::vector(13,14).move_to(primitives3d); > CImg<uintT>::vector(14,15).move_to(primitives3d); CImg<uintT>::vector(15,12).move_to(primitives3d); > CImg<uintT>::vector(16,17).move_to(primitives3d); CImg<uintT>::vector(17,18).move_to(primitives3d); > CImg<uintT>::vector(18,19).move_to(primitives3d); CImg<uintT>::vector(19,16).move_to(primitives3d); > CImg<uintT>::vector(12,16).move_to(primitives3d); CImg<uintT>::vector(13,17).move_to(primitives3d); > CImg<uintT>::vector(14,18).move_to(primitives3d); CImg<uintT>::vector(15,19).move_to(primitives3d); > colors3d.insert(12,CImg<ucharT>::vector(255,255,255)); > opacities3d.assign(primitives3d.width(),1,1,1,0.5f); > if (!phase) { > opacities3d[0] = opacities3d[1] = opacities3d[2] = 0.8f; > sel_primitives3d.assign(); > sel_colors3d.assign(); > sel_opacities3d.assign(); > } else { > if (feature_type==2) { > points3d.append(CImg<floatT>(8,3,1,1, > X0,X1,X1,X0,X0,X1,X1,X0, > Y0,Y0,Y1,Y1,Y0,Y0,Y1,Y1, > Z0,Z0,Z0,Z0,Z1,Z1,Z1,Z1),'x'); > sel_primitives3d.assign(); > CImg<uintT>::vector(20,21).move_to(sel_primitives3d); CImg<uintT>::vector(21,22).move_to(sel_primitives3d); > CImg<uintT>::vector(22,23).move_to(sel_primitives3d); CImg<uintT>::vector(23,20).move_to(sel_primitives3d); > CImg<uintT>::vector(24,25).move_to(sel_primitives3d); CImg<uintT>::vector(25,26).move_to(sel_primitives3d); > CImg<uintT>::vector(26,27).move_to(sel_primitives3d); CImg<uintT>::vector(27,24).move_to(sel_primitives3d); > CImg<uintT>::vector(20,24).move_to(sel_primitives3d); CImg<uintT>::vector(21,25).move_to(sel_primitives3d); > CImg<uintT>::vector(22,26).move_to(sel_primitives3d); CImg<uintT>::vector(23,27).move_to(sel_primitives3d); > } else { > points3d.append(CImg<floatT>(2,3,1,1, > X0,X1, > Y0,Y1, > Z0,Z1),'x'); > sel_primitives3d.assign(CImg<uintT>::vector(20,21)); > } > sel_colors3d.assign(sel_primitives3d._width,CImg<ucharT>::vector(255,255,255)); > sel_opacities3d.assign(sel_primitives3d._width,1,1,1,0.8f); > } > points3d.shift_object3d(-0.5f*(_width-1),-0.5f*(_height-1),-0.5f*(_depth-1)).resize_object3d(); > points3d*=0.75f*cimg::min(view3d._width,view3d._height); > } > > if (!pose3d) CImg<floatT>(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose3d); > CImg<floatT> zbuffer3d(view3d._width,view3d._height,1,1,0); > const CImg<floatT> rotated_points3d = pose3d.get_crop(0,0,2,2)*points3d; > if (sel_primitives3d) > view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, > pose3d(3,1) + 0.5f*view3d._height, > pose3d(3,2), > rotated_points3d,sel_primitives3d,sel_colors3d,sel_opacities3d, > 2,true,500,0,0,0,0,0,zbuffer3d); > view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, > pose3d(3,1) + 0.5f*view3d._height, > pose3d(3,2), > rotated_points3d,primitives3d,colors3d,opacities3d, > 2,true,500,0,0,0,0,0,zbuffer3d); > visu0.draw_image(x3d,y3d,view3d); > } > visu = visu0; > > if (X<0 || Y<0 || Z<0) { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} > else { > if (is_axes) { if (visible_cursor) { disp.hide_mouse(); visible_cursor = false; }} > else { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} > const int d = (_depth>1)?_depth:0; > int > w = disp.width(), W = width() + d, > h = disp.height(), H = height() + d, > _xp = (int)X*w/W, xp = _xp + (_xp*W/w!=(int)X?1:0), > _yp = (int)Y*h/H, yp = _yp + (_yp*H/h!=(int)Y?1:0), > _xn = (int)(X+1)*w/W-1, xn = _xn + ((_xn+1)*W/w!=(int)X+1?1:0), > _yn = (int)(Y+1)*h/H-1, yn = _yn + ((_yn+1)*H/h!=(int)Y+1?1:0), > _zxp = ((int)Z+width())*w/W, zxp = _zxp + (_zxp*W/w!=(int)Z+width()?1:0), > _zyp = ((int)Z+height())*h/H, zyp = _zyp + (_zyp*H/h!=(int)Z+height()?1:0), > _zxn = ((int)Z+width()+1)*w/W-1, zxn = _zxn + ((_zxn+1)*W/w!=(int)Z+width()+1?1:0), > _zyn = ((int)Z+height()+1)*h/H-1, zyn = _zyn + ((_zyn+1)*H/h!=(int)Z+height()+1?1:0), > _xM = width()*w/W-1, xM = _xM + ((_xM+1)*W/w!=width()?1:0), > _yM = height()*h/H-1, yM = _yM + ((_yM+1)*H/h!=height()?1:0), > xc = (xp + xn)/2, > yc = (yp + yn)/2, > zxc = (zxp + zxn)/2, > zyc = (zyp + zyn)/2, > xf = (int)(X*w/W), > yf = (int)(Y*h/H), > zxf = (int)((Z+width())*w/W), > zyf = (int)((Z+height())*h/H); > > if (is_axes) { > visu.draw_line(0,yf,visu.width()-1,yf,foreground_color,0.7f,0xFF00FF00). > draw_line(0,yf,visu.width()-1,yf,background_color,0.7f,0x00FF00FF). > draw_line(xf,0,xf,visu.height()-1,foreground_color,0.7f,0xFF00FF00). > draw_line(xf,0,xf,visu.height()-1,background_color,0.7f,0x00FF00FF); > if (_depth>1) > visu.draw_line(zxf,0,zxf,yM,foreground_color,0.7f,0xFF00FF00). > draw_line(zxf,0,zxf,yM,background_color,0.7f,0x00FF00FF). > draw_line(0,zyf,xM,zyf,foreground_color,0.7f,0xFF00FF00). > draw_line(0,zyf,xM,zyf,background_color,0.7f,0x00FF00FF); > } > > > if (xn-xp>=4 && yn-yp>=4) visu.draw_rectangle(xp,yp,xn,yn,foreground_color,0.2f). > draw_rectangle(xp,yp,xn,yn,foreground_color,1,0xAAAAAAAA). > draw_rectangle(xp,yp,xn,yn,background_color,1,0x55555555); > if (_depth>1) { > if (yn-yp>=4 && zxn-zxp>=4) visu.draw_rectangle(zxp,yp,zxn,yn,background_color,0.2f). > draw_rectangle(zxp,yp,zxn,yn,foreground_color,1,0xAAAAAAAA). > draw_rectangle(zxp,yp,zxn,yn,background_color,1,0x55555555); > if (xn-xp>=4 && zyn-zyp>=4) visu.draw_rectangle(xp,zyp,xn,zyn,background_color,0.2f). > draw_rectangle(xp,zyp,xn,zyn,foreground_color,1,0xAAAAAAAA). > draw_rectangle(xp,zyp,xn,zyn,background_color,1,0x55555555); > } > > > if (phase) { > const int > _xp0 = X0*w/W, xp0 = _xp0 + (_xp0*W/w!=X0?1:0), > _yp0 = Y0*h/H, yp0 = _yp0 + (_yp0*H/h!=Y0?1:0), > _xn0 = (X0+1)*w/W-1, xn0 = _xn0 + ((_xn0+1)*W/w!=X0+1?1:0), > _yn0 = (Y0+1)*h/H-1, yn0 = _yn0 + ((_yn0+1)*H/h!=Y0+1?1:0), > _zxp0 = (Z0+width())*w/W, zxp0 = _zxp0 + (_zxp0*W/w!=Z0+width()?1:0), > _zyp0 = (Z0+height())*h/H, zyp0 = _zyp0 + (_zyp0*H/h!=Z0+height()?1:0), > _zxn0 = (Z0+width()+1)*w/W-1, zxn0 = _zxn0 + ((_zxn0+1)*W/w!=Z0+width()+1?1:0), > _zyn0 = (Z0+height()+1)*h/H-1, zyn0 = _zyn0 + ((_zyn0+1)*H/h!=Z0+height()+1?1:0), > xc0 = (xp0 + xn0)/2, > yc0 = (yp0 + yn0)/2, > zxc0 = (zxp0 + zxn0)/2, > zyc0 = (zyp0 + zyn0)/2; > > switch (feature_type) { > case 1 : { > visu.draw_arrow(xc0,yc0,xc,yc,background_color,0.9f,30,5,0x55555555). > draw_arrow(xc0,yc0,xc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA); > if (d) { > visu.draw_arrow(zxc0,yc0,zxc,yc,background_color,0.9f,30,5,0x55555555). > draw_arrow(zxc0,yc0,zxc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA). > draw_arrow(xc0,zyc0,xc,zyc,background_color,0.9f,30,5,0x55555555). > draw_arrow(xc0,zyc0,xc,zyc,foreground_color,0.9f,30,5,0xAAAAAAAA); > } > } break; > case 2 : { > visu.draw_rectangle(X0<X1?xp0:xp,Y0<Y1?yp0:yp,X0<X1?xn:xn0,Y0<Y1?yn:yn0,background_color,0.2f). > draw_rectangle(X0<X1?xp0:xp,Y0<Y1?yp0:yp,X0<X1?xn:xn0,Y0<Y1?yn:yn0,foreground_color,0.9f,0xAAAAAAAA). > draw_rectangle(X0<X1?xp0:xp,Y0<Y1?yp0:yp,X0<X1?xn:xn0,Y0<Y1?yn:yn0,background_color,0.9f,0x55555555); > if (d) { > visu.draw_rectangle(Z0<Z1?zxp0:zxp,Y0<Y1?yp0:yp,Z0<Z1?zxn:zxn0,Y0<Y1?yn:yn0,background_color,0.2f). > draw_rectangle(Z0<Z1?zxp0:zxp,Y0<Y1?yp0:yp,Z0<Z1?zxn:zxn0,Y0<Y1?yn:yn0,foreground_color,0.9f,0xAAAAAAAA). > draw_rectangle(Z0<Z1?zxp0:zxp,Y0<Y1?yp0:yp,Z0<Z1?zxn:zxn0,Y0<Y1?yn:yn0,background_color,0.9f,0x55555555). > draw_rectangle(X0<X1?xp0:xp,Z0<Z1?zyp0:zyp,X0<X1?xn:xn0,Z0<Z1?zyn:zyn0,background_color,0.2f). > draw_rectangle(X0<X1?xp0:xp,Z0<Z1?zyp0:zyp,X0<X1?xn:xn0,Z0<Z1?zyn:zyn0,foreground_color,0.9f,0xAAAAAAAA). > draw_rectangle(X0<X1?xp0:xp,Z0<Z1?zyp0:zyp,X0<X1?xn:xn0,Z0<Z1?zyn:zyn0,background_color,0.9f,0x55555555); > } > } break; > case 3 : { > visu.draw_ellipse(xc0,yc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(yc-yc0),0,background_color,0.2f). > draw_ellipse(xc0,yc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(yc-yc0),0,foreground_color,0.9f,~0U). > draw_point(xc0,yc0,foreground_color,0.9f); > if (d) { > visu.draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc-zxc0),(float)cimg::abs(yc-yc0),0,background_color,0.2f). > draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc-zxc0),(float)cimg::abs(yc-yc0),0,foreground_color,0.9f,~0U). > draw_point(zxc0,yc0,foreground_color,0.9f). > draw_ellipse(xc0,zyc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(zyc-zyc0),0,background_color,0.2f). > draw_ellipse(xc0,zyc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(zyc-zyc0),0,foreground_color,0.9f,~0U). > draw_point(xc0,zyc0,foreground_color,0.9f); > } > } break; > } > } > > > if (my>=0 && my<13) text_down = true; else if (my>=visu.height()-13) text_down = false; > if (!feature_type || !phase) { > if (X>=0 && Y>=0 && Z>=0 && X<width() && Y<height() && Z<depth()) { > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Point (%d,%d,%d) = [ ",origX+(int)X,origY+(int)Y,origZ+(int)Z); > else snprintf(text,sizeof(text)," Point (%d,%d) = [ ",origX+(int)X,origY+(int)Y); > char *ctext = text + std::strlen(text), *const ltext = text + 512; > for (unsigned int c = 0; c<_spectrum && ctext<ltext; ++c) { > snprintf(ctext,sizeof(text)/2,cimg::type<T>::format(),cimg::type<T>::format((*this)((int)X,(int)Y,(int)Z,c))); > ctext = text + std::strlen(text); > *(ctext++) = ' '; *ctext = 0; > } > std::strcpy(text + std::strlen(text),"] "); > } > } else switch (feature_type) { > case 1 : { > const double dX = (double)(X0 - X1), dY = (double)(Y0 - Y1), dZ = (double)(Z0 - Z1), norm = std::sqrt(dX*dX+dY*dY+dZ*dZ); > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Vect (%d,%d,%d)-(%d,%d,%d), Norm = %g ", > origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1,norm); > else snprintf(text,sizeof(text)," Vect (%d,%d)-(%d,%d), Norm = %g ", > origX+X0,origY+Y0,origX+X1,origY+Y1,norm); > } break; > case 2 : > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Box (%d,%d,%d)-(%d,%d,%d), Size = (%d,%d,%d) ", > origX+(X0<X1?X0:X1),origY+(Y0<Y1?Y0:Y1),origZ+(Z0<Z1?Z0:Z1), > origX+(X0<X1?X1:X0),origY+(Y0<Y1?Y1:Y0),origZ+(Z0<Z1?Z1:Z0), > 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1),1+cimg::abs(Z0-Z1)); > else snprintf(text,sizeof(text)," Box (%d,%d)-(%d,%d), Size = (%d,%d) ", > origX+(X0<X1?X0:X1),origY+(Y0<Y1?Y0:Y1),origX+(X0<X1?X1:X0),origY+(Y0<Y1?Y1:Y0), > 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1)); > break; > default : > if (_depth>1 || force_display_z_coord) snprintf(text,sizeof(text)," Ellipse (%d,%d,%d)-(%d,%d,%d), Radii = (%d,%d,%d) ", > origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1, > 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1),1+cimg::abs(Z0-Z1)); > else snprintf(text,sizeof(text)," Ellipse (%d,%d)-(%d,%d), Radii = (%d,%d) ", > origX+X0,origY+Y0,origX+X1,origY+Y1,1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1)); > } > if (phase || (mx>=0 && my>=0)) visu.draw_text(0,text_down?visu.height()-13:0,text,foreground_color,background_color,0.7f,13); > } > > disp.display(visu).wait(); > } else if (!shape_selected) disp.wait(); > if (disp.is_resized()) { disp.resize(false)._is_resized = false; old_is_resized = true; visu0.assign(); } > omx = mx; omy = my; > } > > > CImg<intT> res(1,feature_type==0?3:6,1,1,-1); > if (XYZ) { XYZ[0] = (unsigned int)X0; XYZ[1] = (unsigned int)Y0; XYZ[2] = (unsigned int)Z0; } > if (shape_selected) { > if (feature_type==2) { > if (X0>X1) cimg::swap(X0,X1); > if (Y0>Y1) cimg::swap(Y0,Y1); > if (Z0>Z1) cimg::swap(Z0,Z1); > } > if (X1<0 || Y1<0 || Z1<0) X0 = Y0 = Z0 = X1 = Y1 = Z1 = -1; > switch (feature_type) { > case 1 : case 2 : res[0] = X0; res[1] = Y0; res[2] = Z0; res[3] = X1; res[4] = Y1; res[5] = Z1; break; > case 3 : res[3] = cimg::abs(X1-X0); res[4] = cimg::abs(Y1-Y0); res[5] = cimg::abs(Z1-Z0); > default : res[0] = X0; res[1] = Y0; res[2] = Z0; > } > } > disp.set_button(); > if (!visible_cursor) disp.show_mouse(); > disp._normalization = old_normalization; > disp._is_resized = old_is_resized; > if (key!=~0U) disp.set_key(key); > return res; > } > > > CImg<ucharT> __get_select(const CImgDisplay& disp, const int normalization, const int x, const int y, const int z) const { > if (is_empty()) return CImg<ucharT>(1,1,1,1,0); > const CImg<T> crop = get_shared_channels(0,cimg::min(2,spectrum()-1)); > CImg<Tuchar> img2d; > if (_depth>1) crop.get_projections2d(x,y,z).move_to(img2d); > else CImg<Tuchar>(crop,false).move_to(img2d); > > if (cimg::type<T>::is_float()) { > bool is_inf = false, is_nan = false; > for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) > if (cimg::type<T>::is_inf(*ptr)) { is_inf = true; break; } > else if (cimg::type<T>::is_nan(*ptr)) { is_nan = true; break; } > if (is_inf || is_nan) { > T m0 = cimg::type<T>::max(), M0 = cimg::type<T>::min(); > if (!normalization) { m0 = 0; M0 = 255; } > else if (normalization==2) { m0 = (T)disp._min; M0 = (T)disp._max; } > else for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) if (!cimg::type<T>::is_inf(*ptr) && !cimg::type<T>::is_nan(*ptr)) { if (*ptr<m0) m0 = *ptr; if (*ptr>M0) M0 = *ptr; } > const T > val_minf = (normalization==1 || normalization==3)?m0-(M0-m0)*20-1:m0, > val_pinf = (normalization==1 || normalization==3)?M0+(M0-m0)*20+1:M0; > if (is_nan) for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) if (cimg::type<T>::is_nan(*ptr)) *ptr = val_minf; > if (is_inf) for (Tuchar *ptr = (img2d)._data, *_maxptr = (img2d)._data + (img2d).size(); ptr<_maxptr; ++ptr) if (cimg::type<T>::is_inf(*ptr)) *ptr = (float)*ptr<0?val_minf:val_pinf; > } > } > > switch (normalization) { > case 1 : img2d.normalize(0,255); break; > case 2 : { > const float m = disp._min, M = disp._max; > (img2d-=m)*=255.0f/(M-m>0?M-m:1); > } break; > case 3 : > if (cimg::type<T>::is_float()) img2d.normalize(0,255); > else { > const float m = (float)cimg::type<T>::min(), M = (float)cimg::type<T>::max(); > (img2d-=m)*=255.0f/(M-m>0?M-m:1); > } break; > } > > if (img2d.spectrum()==2) img2d.channels(0,2); > return img2d; > } > > > CImg<intT> get_select_graph(CImgDisplay &disp, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "select_graph(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!disp) disp.assign(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),0,0). > set_title("CImg<%s>",pixel_type()); > const unsigned long siz = (unsigned long)_width*_height*_depth; > const unsigned int old_normalization = disp.normalization(); > disp.show().set_button().set_wheel()._normalization = 0; > > double nymin = ymin, nymax = ymax, nxmin = xmin, nxmax = xmax; > if (nymin==nymax) { nymin = (Tfloat)min_max(nymax); const double dy = nymax - nymin; nymin-=dy/20; nymax+=dy/20; } > if (nymin==nymax) { --nymin; ++nymax; } > if (nxmin==nxmax && nxmin==0) { nxmin = 0; nxmax = siz - 1.0; } > > const unsigned char black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }, gray[] = { 220, 220, 220 }; > const unsigned char gray2[] = { 110, 110, 110 }, ngray[] = { 35, 35, 35 }; > static unsigned int odimv = 0; > static CImg<ucharT> colormap; > if (odimv!=_spectrum) { > odimv = _spectrum; > colormap = CImg<ucharT>(3,_spectrum,1,1,120).noise(70,1); > if (_spectrum==1) { colormap[0] = colormap[1] = 120; colormap[2] = 200; } > else { > colormap(0,0) = 220; colormap(1,0) = 10; colormap(2,0) = 10; > if (_spectrum>1) { colormap(0,1) = 10; colormap(1,1) = 220; colormap(2,1) = 10; } > if (_spectrum>2) { colormap(0,2) = 10; colormap(1,2) = 10; colormap(2,2) = 220; } > } > } > > CImg<ucharT> visu0, visu, graph, text, axes; > int x0 = -1, x1 = -1, y0 = -1, y1 = -1, omouse_x = -2, omouse_y = -2; > const unsigned int one = plot_type==3?0:1; > unsigned int okey = 0, obutton = 0; > char message[1024] = { 0 }; > unsigned char I[9]; unsigned char& Ipp = I[0]; unsigned char& Icp = I[1]; unsigned char& Inp = I[2]; unsigned char& Ipc = I[3]; unsigned char& Icc = I[4]; unsigned char& Inc = I[5]; unsigned char& Ipn = I[6]; unsigned char& Icn = I[7]; unsigned char& Inn = I[8]; Ipp = Icp = Inp = Ipc = Icc = Inc = Ipn = Icn = Inn = 0; > > for (bool selected = false; !selected && !disp.is_closed() && !okey && !disp.wheel(); ) { > const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); > const unsigned int key = disp.key(), button = disp.button(); > > > if (!visu0) { > visu0.assign(disp.width(),disp.height(),1,3,220); > const int gdimx = disp.width() - 32, gdimy = disp.height() - 32; > if (gdimx>0 && gdimy>0) { > graph.assign(gdimx,gdimy,1,3,255); > if (siz<32) { if (siz>1) graph.draw_grid(gdimx/(float)(siz - one),gdimy/(float)(siz - one),0,0,false,true,black,0.2f,0x33333333,0x33333333); } > else graph.draw_grid(-10,-10,0,0,false,true,black,0.2f,0x33333333,0x33333333); > for (int c = 0; c<(int)((*this)._spectrum); ++c) graph.draw_graph(get_shared_channel(c),&colormap(0,c),(plot_type!=3 || _spectrum==1)?1:0.6f, > plot_type,vertex_type,nymax,nymin); > > axes.assign(gdimx,gdimy,1,1,0); > const float > dx = (float)cimg::abs(nxmax-nxmin), dy = (float)cimg::abs(nymax-nymin), > px = (float)std::pow(10.0,(int)std::log10(dx?dx:1)-2.0), > py = (float)std::pow(10.0,(int)std::log10(dy?dy:1)-2.0); > const CImg<Tdouble> > seqx = dx<=0?CImg<Tdouble>::vector(nxmin):CImg<Tdouble>::sequence(1 + gdimx/60,nxmin,one?nxmax:nxmin+(nxmax-nxmin)*(siz+1)/siz).round(px), > seqy = CImg<Tdouble>::sequence(1 + gdimy/60,nymax,nymin).round(py); > > const bool allow_zero = (nxmin*nxmax>0) || (nymin*nymax>0); > axes.draw_axes(seqx,seqy,white,1,~0U,~0U,13,allow_zero); > if (nymin>0) axes.draw_axis(seqx,gdimy-1,gray,1,~0U,13,allow_zero); > if (nymax<0) axes.draw_axis(seqx,0,gray,1,~0U,13,allow_zero); > if (nxmin>0) axes.draw_axis(0,seqy,gray,1,~0U,13,allow_zero); > if (nxmax<0) axes.draw_axis(gdimx-1,seqy,gray,1,~0U,13,allow_zero); > > for (int y = 0, _p1y = 0, _n1y = 1>=((axes)._height)?(int)((axes)._height)-1:1; _n1y<(int)((axes)._height) || y==--_n1y; _p1y = y++, ++_n1y) for (int x = 0, _p1x = 0, _n1x = (int)( (I[0] = I[1] = (unsigned char)(axes)(_p1x,_p1y,0,0)), (I[3] = I[4] = (unsigned char)(axes)(0,y,0,0)), (I[6] = I[7] = (unsigned char)(axes)(0,_n1y,0,0)), 1>=(axes)._width?(axes).width()-1:1); (_n1x<(axes).width() && ( (I[2] = (unsigned char)(axes)(_n1x,_p1y,0,0)), (I[5] = (unsigned char)(axes)(_n1x,y,0,0)), (I[8] = (unsigned char)(axes)(_n1x,_n1y,0,0)),1)) || x==--_n1x; I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], _p1x = x++, ++_n1x) > if (Icc) { > if (Icc==255) for (int c = 0; c<(int)((graph)._spectrum); ++c) graph(x,y,c) = 0; > else for (int c = 0; c<(int)((graph)._spectrum); ++c) graph(x,y,c) = (unsigned char)(2*graph(x,y,c)/3); > } > else if (Ipc || Inc || Icp || Icn || Ipp || Inn || Ipn || Inp) for (int c = 0; c<(int)((graph)._spectrum); ++c) graph(x,y,c) = (graph(x,y,c)+511)/3; > > visu0.draw_image(16,16,graph); > visu0.draw_line(15,15,16+gdimx,15,gray2).draw_line(16+gdimx,15,16+gdimx,16+gdimy,gray2). > draw_line(16+gdimx,16+gdimy,15,16+gdimy,white).draw_line(15,16+gdimy,15,15,white); > } else graph.assign(); > text.assign().draw_text(0,0,labelx?labelx:"X-axis",white,ngray,1,13).resize(-100,-100,1,3); > visu0.draw_image((visu0.width()-text.width())/2,visu0.height()-14,~text); > text.assign().draw_text(0,0,labely?labely:"Y-axis",white,ngray,1,13).rotate(-90).resize(-100,-100,1,3); > visu0.draw_image(1,(visu0.height()-text.height())/2,~text); > visu.assign(); > } > > > if (!visu) { > visu.assign(visu0); > if (graph && x0>=0 && x1>=0) { > const int > nx0 = x0<=x1?x0:x1, > nx1 = x0<=x1?x1:x0, > ny0 = y0<=y1?y0:y1, > ny1 = y0<=y1?y1:y0, > sx0 = 16 + nx0*(visu.width()-32)/cimg::max(1U,siz-one), > sx1 = 15 + (nx1+1)*(visu.width()-32)/cimg::max(1U,siz-one), > sy0 = 16 + ny0, > sy1 = 16 + ny1; > if (y0>=0 && y1>=0) > visu.draw_rectangle(sx0,sy0,sx1,sy1,gray,0.5f).draw_rectangle(sx0,sy0,sx1,sy1,black,0.5f,0xCCCCCCCCU); > else visu.draw_rectangle(sx0,0,sx1,visu.height()-17,gray,0.5f). > draw_line(sx0,16,sx0,visu.height()-17,black,0.5f,0xCCCCCCCCU). > draw_line(sx1,16,sx1,visu.height()-17,black,0.5f,0xCCCCCCCCU); > } > if (mouse_x>=16 && mouse_y>=16 && mouse_x<visu.width()-16 && mouse_y<visu.height()-16) { > if (graph) visu.draw_line(mouse_x,16,mouse_x,visu.height()-17,black,0.5f,0x55555555U); > const unsigned int x = (unsigned int)cimg::round((mouse_x-16.0f)*(siz-one)/(disp.width()-32),1,one?0:-1); > const double cx = nxmin + x*(nxmax-nxmin)/cimg::max(1U,siz-1); > if (_spectrum>=7) > snprintf(message,sizeof(message),"Value[%u:%g] = ( %g %g %g ... %g %g %g )",x,cx, > (double)(*this)(x,0,0,0),(double)(*this)(x,0,0,1),(double)(*this)(x,0,0,2), > (double)(*this)(x,0,0,_spectrum-4),(double)(*this)(x,0,0,_spectrum-3),(double)(*this)(x,0,0,_spectrum-1)); > else { > snprintf(message,sizeof(message),"Value[%u:%g] = ( ",x,cx); > for (int c = 0; c<(int)((*this)._spectrum); ++c) std::sprintf(message + std::strlen(message),"%g ",(double)(*this)(x,0,0,c)); > std::sprintf(message + std::strlen(message),")"); > } > if (x0>=0 && x1>=0) { > const unsigned int > nx0 = x0<=x1?x0:x1, > nx1 = x0<=x1?x1:x0, > ny0 = y0<=y1?y0:y1, > ny1 = y0<=y1?y1:y0; > const double > cx0 = nxmin + nx0*(nxmax-nxmin)/cimg::max(1U,siz-1), > cx1 = nxmin + (nx1+one)*(nxmax-nxmin)/cimg::max(1U,siz-1), > cy0 = nymax - ny0*(nymax-nymin)/(visu._height-32), > cy1 = nymax - ny1*(nymax-nymin)/(visu._height-32); > if (y0>=0 && y1>=0) > std::sprintf(message + std::strlen(message)," - Range ( %u:%g, %g ) - ( %u:%g, %g )",x0,cx0,cy0,x1+one,cx1,cy1); > else > std::sprintf(message + std::strlen(message)," - Range [ %u:%g - %u:%g ]",x0,cx0,x1+one,cx1); > } > text.assign().draw_text(0,0,message,white,ngray,1,13).resize(-100,-100,1,3); > visu.draw_image((visu.width()-text.width())/2,1,~text); > } > visu.display(disp); > } > > > switch (okey = key) { > > case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : > > case cimg::keyCTRLLEFT : case cimg::keySHIFTLEFT : okey = 0; break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > if (visu || visu0) { > CImg<ucharT> &screen = visu?visu:visu0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"gmic" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+screen).draw_text(0,0," Saving snapshot... ",black,gray,1,13).display(disp); > screen.save(filename); > (+screen).draw_text(0,0," Snapshot '%s' saved. ",black,gray,1,13,filename).display(disp); > } > disp.set_key(key,false); okey = 0; > } break; > case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > if (visu || visu0) { > CImg<ucharT> &screen = visu?visu:visu0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > snprintf(filename,sizeof(filename),"gmic" "_%.4u.cimgz",snap_number++); > > > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+screen).draw_text(0,0," Saving instance... ",black,gray,1,13).display(disp); > save(filename); > (+screen).draw_text(0,0," Instance '%s' saved. ",black,gray,1,13,filename).display(disp); > } > disp.set_key(key,false); okey = 0; > } break; > } > > > if (obutton!=button || omouse_x!=mouse_x || omouse_y!=mouse_y) { > visu.assign(); > if (disp.mouse_x()>=0 && disp.mouse_y()>=0) { > const int > mx = (mouse_x -16)*(int)(siz-one)/(disp.width()-32), > cx = mx<0?0:(mx>=(int)(siz-one)?(int)(siz-1-one):mx), > my = mouse_y - 16, > cy = my<=0?0:(my>=(disp.height()-32)?(disp.height()-32):my); > if (button&1) { > if (!obutton) { x0 = cx; y0 = -1; } else { x1 = cx; y1 = -1; } > } > else if (button&2) { > if (!obutton) { x0 = cx; y0 = cy; } else { x1 = cx; y1 = cy; } > } > else if (obutton) { x1 = x1>=0?cx:-1; y1 = y1>=0?cy:-1; selected = true; } > } else if (!button && obutton) selected = true; > obutton = button; omouse_x = mouse_x; omouse_y = mouse_y; > } > if (disp.is_resized()) { disp.resize(false); visu0.assign(); } > if (visu && visu0) disp.wait(); > } > > disp._normalization = old_normalization; > if (x1>=0 && x1<x0) cimg::swap(x0,x1); > if (y1<y0) cimg::swap(y0,y1); > disp.set_key(okey); > return CImg<intT>(4,1,1,1,x0,y0,x1>=0?x1+(int)one:-1,y1); > } > > > > > > > > CImg<T>& load(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { > char filename_local[1024] = { 0 }; > load(cimg::load_network_external(filename,filename_local)); > std::remove(filename_local); > return *this; > } > > const char *const ext = cimg::split_filename(filename); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { ># 36432 "./CImg.h" > if (!cimg::strcasecmp(ext,"asc")) load_ascii(filename); > else if (!cimg::strcasecmp(ext,"dlm") || > !cimg::strcasecmp(ext,"txt")) load_dlm(filename); > > > else if (!cimg::strcasecmp(ext,"bmp")) load_bmp(filename); > else if (!cimg::strcasecmp(ext,"jpg") || > !cimg::strcasecmp(ext,"jpeg") || > !cimg::strcasecmp(ext,"jpe") || > !cimg::strcasecmp(ext,"jfif") || > !cimg::strcasecmp(ext,"jif")) load_jpeg(filename); > else if (!cimg::strcasecmp(ext,"png")) load_png(filename); > else if (!cimg::strcasecmp(ext,"ppm") || > !cimg::strcasecmp(ext,"pgm") || > !cimg::strcasecmp(ext,"pnm") || > !cimg::strcasecmp(ext,"pbm") || > !cimg::strcasecmp(ext,"pnk")) load_pnm(filename); > else if (!cimg::strcasecmp(ext,"pfm")) load_pfm(filename); > else if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); > else if (!cimg::strcasecmp(ext,"exr")) load_exr(filename); > else if (!cimg::strcasecmp(ext,"cr2") || > !cimg::strcasecmp(ext,"crw") || > !cimg::strcasecmp(ext,"dcr") || > !cimg::strcasecmp(ext,"mrw") || > !cimg::strcasecmp(ext,"nef") || > !cimg::strcasecmp(ext,"orf") || > !cimg::strcasecmp(ext,"pix") || > !cimg::strcasecmp(ext,"ptx") || > !cimg::strcasecmp(ext,"raf") || > !cimg::strcasecmp(ext,"srf")) load_dcraw_external(filename); > else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); > > > else if (!cimg::strcasecmp(ext,"dcm") || > !cimg::strcasecmp(ext,"dicom")) load_medcon_external(filename); > else if (!cimg::strcasecmp(ext,"hdr") || > !cimg::strcasecmp(ext,"nii")) load_analyze(filename); > else if (!cimg::strcasecmp(ext,"par") || > !cimg::strcasecmp(ext,"rec")) load_parrec(filename); > else if (!cimg::strcasecmp(ext,"mnc")) load_minc2(filename); > else if (!cimg::strcasecmp(ext,"inr")) load_inr(filename); > else if (!cimg::strcasecmp(ext,"pan")) load_pandore(filename); > else if (!cimg::strcasecmp(ext,"cimg") || > !cimg::strcasecmp(ext,"cimgz") || > !*ext) return load_cimg(filename); > > > else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); > > > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) load_ffmpeg(filename); > else throw CImgIOException("CImg<%s>::load()", > pixel_type()); > } catch (CImgIOException&) { > std::FILE *file = 0; > try { > file = cimg::fopen(filename,"rb"); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load(): Failed to open file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > > try { > const char *const f_type = cimg::file_type(file,filename); > std::fclose(file); > if (!cimg::strcasecmp(f_type,"pnm")) load_pnm(filename); > else if (!cimg::strcasecmp(f_type,"pfm")) load_pfm(filename); > else if (!cimg::strcasecmp(f_type,"bmp")) load_bmp(filename); > else if (!cimg::strcasecmp(f_type,"jpg")) load_jpeg(filename); > else if (!cimg::strcasecmp(f_type,"pan")) load_pandore(filename); > else if (!cimg::strcasecmp(f_type,"png")) load_png(filename); > else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); > else if (!cimg::strcasecmp(f_type,"inr")) load_inr(filename); > else if (!cimg::strcasecmp(f_type,"dcm")) load_medcon_external(filename); > else throw CImgIOException("CImg<%s>::load()", > pixel_type()); > } catch (CImgIOException&) { > try { > load_other(filename); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load(): Failed to recognize format of file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImg<T> get_load(const char *const filename) { > return CImg<T>().load(filename); > } > > > > > > CImg<T>& load_ascii(const char *const filename) { > return _load_ascii(0,filename); > } > > > static CImg<T> get_load_ascii(const char *const filename) { > return CImg<T>().load_ascii(filename); > } > > > CImg<T>& load_ascii(std::FILE *const file) { > return _load_ascii(file,0); > } > > > static CImg<T> get_load_ascii(std::FILE *const file) { > return CImg<T>().load_ascii(file); > } > > CImg<T>& _load_ascii(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_ascii(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > char line[256] = { 0 }; > int err = std::fscanf(nfile,"%255[^\n]",line); > unsigned int dx = 0, dy = 1, dz = 1, dc = 1; > std::sscanf(line,"%u%*c%u%*c%u%*c%u",&dx,&dy,&dz,&dc); > err = std::fscanf(nfile,"%*[^0-9.eE+-]"); > if (!dx || !dy || !dz || !dc) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_ascii(): Invalid ascii header in file '%s', image dimensions are set to (%u,%u,%u,%u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",dx,dy,dz,dc); > } > assign(dx,dy,dz,dc); > const unsigned long siz = size(); > unsigned long off = 0; > double val; > T *ptr = _data; > for (err = 1, off = 0; off<siz && err==1; ++off) { > err = std::fscanf(nfile,"%lf%*[^0-9.eE+-]",&val); > *(ptr++) = (T)val; > } > if (err!=1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_ascii(): Only %lu/%lu values read from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > off-1,siz,filename?filename:"(FILE*)"); > > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_dlm(const char *const filename) { > return _load_dlm(0,filename); > } > > > static CImg<T> get_load_dlm(const char *const filename) { > return CImg<T>().load_dlm(filename); > } > > > CImg<T>& load_dlm(std::FILE *const file) { > return _load_dlm(file,0); > } > > > static CImg<T> get_load_dlm(std::FILE *const file) { > return CImg<T>().load_dlm(file); > } > > CImg<T>& _load_dlm(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dlm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); > char delimiter[256] = { 0 }, tmp[256] = { 0 }; > unsigned int cdx = 0, dx = 0, dy = 0; > int err = 0; > double val; > assign(256,256); > while ((err = std::fscanf(nfile,"%lf%255[^0-9.+-]",&val,delimiter))>0) { > if (err>0) (*this)(cdx++,dy) = (T)val; > if (cdx>=_width) resize(3*_width/2,_height,1,1,0); > char c = 0; > if (!std::sscanf(delimiter,"%255[^\n]%c",tmp,&c) || c=='\n') { > dx = cimg::max(cdx,dx); > if (++dy>=_height) resize(_width,3*_height/2,1,1,0); > cdx = 0; > } > } > if (cdx && err==1) { dx = cdx; ++dy; } > if (!dx || !dy) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dlm(): Invalid DLM file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > resize(dx,dy,1,1,0); > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_bmp(const char *const filename) { > return _load_bmp(0,filename); > } > > > static CImg<T> get_load_bmp(const char *const filename) { > return CImg<T>().load_bmp(filename); > } > > > CImg<T>& load_bmp(std::FILE *const file) { > return _load_bmp(file,0); > } > > > static CImg<T> get_load_bmp(std::FILE *const file) { > return CImg<T>().load_bmp(file); > } > > CImg<T>& _load_bmp(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_bmp(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > unsigned char header[64] = { 0 }; > cimg::fread(header,54,nfile); > if (*header!='B' || header[1]!='M') { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_bmp(): Invalid BMP file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > > > int > file_size = header[0x02] + (header[0x03]<<8) + (header[0x04]<<16) + (header[0x05]<<24), > offset = header[0x0A] + (header[0x0B]<<8) + (header[0x0C]<<16) + (header[0x0D]<<24), > header_size = header[0x0E] + (header[0x0F]<<8) + (header[0x10]<<16) + (header[0x11]<<24), > dx = header[0x12] + (header[0x13]<<8) + (header[0x14]<<16) + (header[0x15]<<24), > dy = header[0x16] + (header[0x17]<<8) + (header[0x18]<<16) + (header[0x19]<<24), > compression = header[0x1E] + (header[0x1F]<<8) + (header[0x20]<<16) + (header[0x21]<<24), > nb_colors = header[0x2E] + (header[0x2F]<<8) + (header[0x30]<<16) + (header[0x31]<<24), > bpp = header[0x1C] + (header[0x1D]<<8); > > if (!file_size || file_size==offset) { > std::fseek(nfile,0,2); > file_size = (int)std::ftell(nfile); > std::fseek(nfile,54,0); > } > if (header_size>40) std::fseek(nfile, header_size - 40, 1); > > const int > cimg_iobuffer = 12*1024*1024, > dx_bytes = (bpp==1)?(dx/8+(dx%8?1:0)):((bpp==4)?(dx/2+(dx%2?1:0)):(dx*bpp/8)), > align_bytes = (4-dx_bytes%4)%4, > buf_size = cimg::min(cimg::abs(dy)*(dx_bytes + align_bytes),file_size - offset); > > CImg<intT> colormap; > if (bpp<16) { if (!nb_colors) nb_colors = 1<<bpp; } else nb_colors = 0; > if (nb_colors) { colormap.assign(nb_colors); cimg::fread(colormap._data,nb_colors,nfile); } > const int xoffset = offset - 14 - header_size - 4*nb_colors; > if (xoffset>0) std::fseek(nfile,xoffset,1); > > CImg<ucharT> buffer; > if (buf_size<cimg_iobuffer) { buffer.assign(buf_size); cimg::fread(buffer._data,buf_size,nfile); } > else buffer.assign(dx_bytes + align_bytes); > unsigned char *ptrs = buffer; > > > if (compression) { > if (file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_bmp(): Unable to load compressed data from '(*FILE)' inputs.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > else { > if (!file) cimg::fclose(nfile); > return load_other(filename); > } > } > > > assign(dx,cimg::abs(dy),1,3); > switch (bpp) { > case 1 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > unsigned char mask = 0x80, val = 0; > for (int x = 0; x<(int)((*this)._width); ++x) { > if (mask==0x80) val = *(ptrs++); > const unsigned char *col = (unsigned char*)(colormap._data + (val&mask?1:0)); > (*this)(x,y,2) = (T)*(col++); > (*this)(x,y,1) = (T)*(col++); > (*this)(x,y,0) = (T)*(col++); > mask = cimg::ror(mask); > } > ptrs+=align_bytes; > } > } break; > case 4 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > unsigned char mask = 0xF0, val = 0; > for (int x = 0; x<(int)((*this)._width); ++x) { > if (mask==0xF0) val = *(ptrs++); > const unsigned char color = (unsigned char)((mask<16)?(val&mask):((val&mask)>>4)); > const unsigned char *col = (unsigned char*)(colormap._data + color); > (*this)(x,y,2) = (T)*(col++); > (*this)(x,y,1) = (T)*(col++); > (*this)(x,y,0) = (T)*(col++); > mask = cimg::ror(mask,4); > } > ptrs+=align_bytes; > } > } break; > case 8 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > const unsigned char *col = (unsigned char*)(colormap._data + *(ptrs++)); > (*this)(x,y,2) = (T)*(col++); > (*this)(x,y,1) = (T)*(col++); > (*this)(x,y,0) = (T)*(col++); > } > ptrs+=align_bytes; > } > } break; > case 16 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > const unsigned char c1 = *(ptrs++), c2 = *(ptrs++); > const unsigned short col = (unsigned short)(c1|(c2<<8)); > (*this)(x,y,2) = (T)(col&0x1F); > (*this)(x,y,1) = (T)((col>>5)&0x1F); > (*this)(x,y,0) = (T)((col>>10)&0x1F); > } > ptrs+=align_bytes; > } > } break; > case 24 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > (*this)(x,y,2) = (T)*(ptrs++); > (*this)(x,y,1) = (T)*(ptrs++); > (*this)(x,y,0) = (T)*(ptrs++); > } > ptrs+=align_bytes; > } > } break; > case 32 : { > for (int y = height()-1; y>=0; --y) { > if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,1); } > for (int x = 0; x<(int)((*this)._width); ++x) { > (*this)(x,y,2) = (T)*(ptrs++); > (*this)(x,y,1) = (T)*(ptrs++); > (*this)(x,y,0) = (T)*(ptrs++); > ++ptrs; > } > ptrs+=align_bytes; > } > } break; > } > if (dy<0) mirror('y'); > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_jpeg(const char *const filename) { > return _load_jpeg(0,filename); > } > > > static CImg<T> get_load_jpeg(const char *const filename) { > return CImg<T>().load_jpeg(filename); > } > > > CImg<T>& load_jpeg(std::FILE *const file) { > return _load_jpeg(file,0); > } > > > static CImg<T> get_load_jpeg(std::FILE *const file) { > return CImg<T>().load_jpeg(file); > } > > > > struct _cimg_error_mgr { > struct jpeg_error_mgr original; > jmp_buf setjmp_buffer; > char message[200]; > }; > > typedef struct _cimg_error_mgr *_cimg_error_ptr; > > static void _cimg_jpeg_error_exit(j_common_ptr cinfo) { > _cimg_error_ptr c_err = (_cimg_error_ptr) cinfo->err; > (*cinfo->err->format_message)(cinfo,c_err->message); > jpeg_destroy(cinfo); > longjmp(c_err->setjmp_buffer,1); > } > > > CImg<T>& _load_jpeg(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_jpeg(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 36904 "./CImg.h" > struct jpeg_decompress_struct cinfo; > struct _cimg_error_mgr jerr; > cinfo.err = jpeg_std_error(&jerr.original); > jerr.original.error_exit = _cimg_jpeg_error_exit; > > if (_setjmp (jerr.setjmp_buffer)) { > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_jpeg(): Error message returned by libjpeg: %s.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),jerr.message); > } > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > jpeg_CreateDecompress((&cinfo), 62, (size_t) sizeof(struct jpeg_decompress_struct)); > jpeg_stdio_src(&cinfo,nfile); > jpeg_read_header(&cinfo,1); > jpeg_start_decompress(&cinfo); > > if (cinfo.output_components!=1 && cinfo.output_components!=3 && cinfo.output_components!=4) { > if (!file) { > cimg::fclose(nfile); > return load_other(filename); > } else > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_jpeg(): Failed to load JPEG data from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),filename?filename:"(FILE*)"); > } > CImg<ucharT> buffer(cinfo.output_width*cinfo.output_components); > JSAMPROW row_pointer[1]; > assign(cinfo.output_width,cinfo.output_height,1,cinfo.output_components); > T *ptr_r = _data, *ptr_g = _data + 1UL*_width*_height, *ptr_b = _data + 2UL*_width*_height, *ptr_a = _data + 3UL*_width*_height; > while (cinfo.output_scanline<cinfo.output_height) { > *row_pointer = buffer._data; > if (jpeg_read_scanlines(&cinfo,row_pointer,1)!=1) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_jpeg(): Incomplete data in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),filename?filename:"(FILE*)"); > break; > } > const unsigned char *ptrs = buffer._data; > switch (_spectrum) { > case 1 : { > for (int x = 0; x<(int)((*this)._width); ++x) *(ptr_r++) = (T)*(ptrs++); > } break; > case 3 : { > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } break; > case 4 : { > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > *(ptr_a++) = (T)*(ptrs++); > } > } break; > } > } > jpeg_finish_decompress(&cinfo); > jpeg_destroy_decompress(&cinfo); > if (!file) cimg::fclose(nfile); > return *this; > > } > > > > > > > > CImg<T>& load_magick(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_magick(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 37034 "./CImg.h" > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_magick(): Unable to load file '%s' unless libMagick++ is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > return *this; > } > > > static CImg<T> get_load_magick(const char *const filename) { > return CImg<T>().load_magick(filename); > } > > > > > > CImg<T>& load_png(const char *const filename) { > return _load_png(0,filename); > } > > > static CImg<T> get_load_png(const char *const filename) { > return CImg<T>().load_png(filename); > } > > > CImg<T>& load_png(std::FILE *const file) { > return _load_png(file,0); > } > > > static CImg<T> get_load_png(std::FILE *const file) { > return CImg<T>().load_png(file); > } > > > CImg<T>& _load_png(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); ># 37086 "./CImg.h" > const char *volatile nfilename = filename; > std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"rb"); > > unsigned char pngCheck[8] = { 0 }; > cimg::fread(pngCheck,8,(std::FILE*)nfile); > if (png_sig_cmp(pngCheck,0,8)) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Invalid PNG file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > > > png_voidp user_error_ptr = 0; > png_error_ptr user_error_fn = 0, user_warning_fn = 0; > png_structp png_ptr = png_create_read_struct("1.6.6",user_error_ptr,user_error_fn,user_warning_fn); > if (!png_ptr) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Failed to initialize 'png_ptr' structure for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > png_infop info_ptr = png_create_info_struct(png_ptr); > if (!info_ptr) { > if (!file) cimg::fclose(nfile); > png_destroy_read_struct(&png_ptr,(png_infopp)0,(png_infopp)0); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Failed to initialize 'info_ptr' structure for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > png_infop end_info = png_create_info_struct(png_ptr); > if (!end_info) { > if (!file) cimg::fclose(nfile); > png_destroy_read_struct(&png_ptr,&info_ptr,(png_infopp)0); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Failed to initialize 'end_info' structure for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > > > if (_setjmp ((*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))))) { > if (!file) cimg::fclose((std::FILE*)nfile); > png_destroy_read_struct(&png_ptr, &end_info, (png_infopp)0); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Encountered unknown fatal error in libpng for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > png_init_io(png_ptr, nfile); > png_set_sig_bytes(png_ptr, 8); > > > png_read_info(png_ptr,info_ptr); > png_uint_32 W, H; > int bit_depth, color_type, interlace_type; > bool is_gray = false; > png_get_IHDR(png_ptr,info_ptr,&W,&H,&bit_depth,&color_type,&interlace_type,(int*)0,(int*)0); > > > if (color_type==(2 | 1)) { > png_set_palette_to_rgb(png_ptr); > color_type = (2); > bit_depth = 8; > } > if (color_type==0 && bit_depth<8) { > png_set_expand_gray_1_2_4_to_8(png_ptr); > is_gray = true; > bit_depth = 8; > } > if (png_get_valid(png_ptr,info_ptr,0x0010)) { > png_set_tRNS_to_alpha(png_ptr); > color_type |= 4; > } > if (color_type==0 || color_type==(4)) { > png_set_gray_to_rgb(png_ptr); > color_type |= 2; > is_gray = true; > } > if (color_type==(2)) > png_set_filler(png_ptr,0xffffU,1); > > png_read_update_info(png_ptr,info_ptr); > if (bit_depth!=8 && bit_depth!=16) { > if (!file) cimg::fclose(nfile); > png_destroy_read_struct(&png_ptr,&end_info,(png_infopp)0); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Invalid bit depth %u in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > bit_depth,nfilename?nfilename:"(FILE*)"); > } > const int byte_depth = bit_depth>>3; > > > png_bytep *const imgData = new png_bytep[H]; > for (unsigned int row = 0; row<H; ++row) imgData[row] = new png_byte[byte_depth*4*W]; > png_read_image(png_ptr,imgData); > png_read_end(png_ptr,end_info); > > > if (color_type!=(2) && color_type!=(2 | 4)) { > if (!file) cimg::fclose(nfile); > png_destroy_read_struct(&png_ptr,&end_info,(png_infopp)0); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_png(): Invalid color coding type %u in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > color_type,nfilename?nfilename:"(FILE*)"); > } > const bool is_alpha = (color_type==(2 | 4)); > assign(W,H,1,(is_gray?1:3) + (is_alpha?1:0)); > T > *ptr_r = data(0,0,0,0), > *ptr_g = is_gray?0:data(0,0,0,1), > *ptr_b = is_gray?0:data(0,0,0,2), > *ptr_a = !is_alpha?0:data(0,0,0,is_gray?1:3); > switch (bit_depth) { > case 8 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned char *ptrs = (unsigned char*)imgData[y]; > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)*(ptrs++); > if (ptr_g) *(ptr_g++) = (T)*(ptrs++); else ++ptrs; > if (ptr_b) *(ptr_b++) = (T)*(ptrs++); else ++ptrs; > if (ptr_a) *(ptr_a++) = (T)*(ptrs++); else ++ptrs; > } > } > } break; > case 16 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > const unsigned short *ptrs = (unsigned short*)(imgData[y]); > if (!cimg::endianness()) cimg::invert_endianness(ptrs,4*_width); > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)*(ptrs++); > if (ptr_g) *(ptr_g++) = (T)*(ptrs++); else ++ptrs; > if (ptr_b) *(ptr_b++) = (T)*(ptrs++); else ++ptrs; > if (ptr_a) *(ptr_a++) = (T)*(ptrs++); else ++ptrs; > } > } > } break; > } > png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); > > > for (int n = 0; n<(int)((*this)._height); ++n) delete[] imgData[n]; > delete[] imgData; > if (!file) cimg::fclose(nfile); > return *this; > > } > > > > > > CImg<T>& load_pnm(const char *const filename) { > return _load_pnm(0,filename); > } > > > static CImg<T> get_load_pnm(const char *const filename) { > return CImg<T>().load_pnm(filename); > } > > > CImg<T>& load_pnm(std::FILE *const file) { > return _load_pnm(file,0); > } > > > static CImg<T> get_load_pnm(std::FILE *const file) { > return CImg<T>().load_pnm(file); > } > > CImg<T>& _load_pnm(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > unsigned int ppm_type, W, H, D = 1, colormax = 255; > CImg<charT> item(16384,1,1,1,0); > int err, rval, gval, bval; > const long cimg_iobuffer = 12*1024*1024; > while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item," P%u",&ppm_type)!=1) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): PNM header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if ((err=std::sscanf(item," %u %u %u %u",&W,&H,&D,&colormax))<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): WIDTH and HEIGHT fields undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > if (ppm_type!=1 && ppm_type!=4) { > if (err==2 || (err==3 && (ppm_type==5 || ppm_type==7 || ppm_type==8 || ppm_type==9))) { > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item,"%u",&colormax)!=1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): COLORMAX field is undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } else { colormax = D; D = 1; } > } > std::fgetc(nfile); > > switch (ppm_type) { > case 1 : { > assign(W,H,1,1); > T* ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)(rval?0:255); else break; } > } break; > case 2 : { > assign(W,H,1,1); > T* ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)rval; else break; } > } break; > case 3 : { > assign(W,H,1,3); > T *ptrd = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > if (std::fscanf(nfile,"%d %d %d",&rval,&gval,&bval)==3) { *(ptrd++) = (T)rval; *(ptr_g++) = (T)gval; *(ptr_b++) = (T)bval; } > else break; > } > } break; > case 4 : { > CImg<ucharT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > unsigned int w = 0, h = 0, d = 0; > for (long to_read = (long)((W/8 + (W%8?1:0))*H*D); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > unsigned char mask = 0, val = 0; > for (unsigned long off = (unsigned long)raw._width; off || mask; mask>>=1) { > if (!mask) { if (off--) val = *(ptrs++); mask = 128; } > *(ptrd++) = (T)((val&mask)?0:255); > if (++w==W) { w = 0; mask = 0; if (++h==H) { h = 0; if (++d==D) break; }} > } > } > } break; > case 5 : case 7 : { > if (colormax<256) { > CImg<ucharT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } else { > CImg<ushortT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer/2)); > cimg::fread(raw._data,raw._width,nfile); > if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); > to_read-=raw._width; > const unsigned short *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } > } break; > case 6 : { > if (colormax<256) { > CImg<ucharT> raw; > assign(W,H,1,3); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width/3; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > } else { > CImg<ushortT> raw; > assign(W,H,1,3); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2); > for (long to_read = (int)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer/2)); > cimg::fread(raw._data,raw._width,nfile); > if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); > to_read-=raw._width; > const unsigned short *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width/3; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > } > } break; > case 8 : { > CImg<intT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const int *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } break; > case 9 : { > CImg<floatT> raw; > assign(W,H,D,1); > T *ptrd = data(0,0,0,0); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const float *ptrs = raw._data; > for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); > } > } break; > default : > assign(); > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pnm(): PNM type 'P%d' found, but type is not supported.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",ppm_type); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_pfm(const char *const filename) { > return _load_pfm(0,filename); > } > > > static CImg<T> get_load_pfm(const char *const filename) { > return CImg<T>().load_pfm(filename); > } > > > CImg<T>& load_pfm(std::FILE *const file) { > return _load_pfm(file,0); > } > > > static CImg<T> get_load_pfm(std::FILE *const file) { > return CImg<T>().load_pfm(file); > } > > CImg<T>& _load_pfm(std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > char pfm_type; > CImg<charT> item(16384,1,1,1,0); > int W = 0, H = 0, err = 0; > double scale = 0; > while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item," P%c",&pfm_type)!=1) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): PFM header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if ((err=std::sscanf(item," %d %d",&W,&H))<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): WIDTH and HEIGHT fields are undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > if (err==2) { > while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=(-1) && (*item=='#' || !err)) std::fgetc(nfile); > if (std::sscanf(item,"%lf",&scale)!=1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pfm(): SCALE field is undefined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > std::fgetc(nfile); > const bool is_color = (pfm_type=='F'), is_inverted = (scale>0)!=cimg::endianness(); > if (is_color) { > assign(W,H,1,3,0); > CImg<floatT> buf(3*W); > T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); > for (int y = 0; y<(int)((*this)._height); ++y) { > cimg::fread(buf._data,3*W,nfile); > if (is_inverted) cimg::invert_endianness(buf._data,3*W); > const float *ptrs = buf._data; > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > } else { > assign(W,H,1,1,0); > CImg<floatT> buf(W); > T *ptrd = data(0,0,0,0); > for (int y = 0; y<(int)((*this)._height); ++y) { > cimg::fread(buf._data,W,nfile); > if (is_inverted) cimg::invert_endianness(buf._data,W); > const float *ptrs = buf._data; > for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (T)*(ptrs++); > } > } > if (!file) cimg::fclose(nfile); > return mirror('y'); > } > > > > > > > > CImg<T>& load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgb(0,filename,dimw,dimh); > } > > > static CImg<T> get_load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgb(filename,dimw,dimh); > } > > > CImg<T>& load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgb(file,0,dimw,dimh); > } > > > static CImg<T> get_load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgb(file,dimw,dimh); > } > > CImg<T>& _load_rgb(std::FILE *const file, const char *const filename, const unsigned int dimw, const unsigned int dimh) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_rgb(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (!dimw || !dimh) return assign(); > const long cimg_iobuffer = 12*1024*1024; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > CImg<ucharT> raw; > assign(dimw,dimh,1,3); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = raw._width/3UL; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > > CImg<T>& load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgba(0,filename,dimw,dimh); > } > > > static CImg<T> get_load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgba(filename,dimw,dimh); > } > > > CImg<T>& load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return _load_rgba(file,0,dimw,dimh); > } > > > static CImg<T> get_load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { > return CImg<T>().load_rgba(file,dimw,dimh); > } > > CImg<T>& _load_rgba(std::FILE *const file, const char *const filename, const unsigned int dimw, const unsigned int dimh) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_rgba(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > if (!dimw || !dimh) return assign(); > const long cimg_iobuffer = 12*1024*1024; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > CImg<ucharT> raw; > assign(dimw,dimh,1,4); > T > *ptr_r = data(0,0,0,0), > *ptr_g = data(0,0,0,1), > *ptr_b = data(0,0,0,2), > *ptr_a = data(0,0,0,3); > for (long to_read = (long)size(); to_read>0; ) { > raw.assign(cimg::min(to_read,cimg_iobuffer)); > cimg::fread(raw._data,raw._width,nfile); > to_read-=raw._width; > const unsigned char *ptrs = raw._data; > for (unsigned long off = raw._width/4UL; off; --off) { > *(ptr_r++) = (T)*(ptrs++); > *(ptr_g++) = (T)*(ptrs++); > *(ptr_b++) = (T)*(ptrs++); > *(ptr_a++) = (T)*(ptrs++); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 37656 "./CImg.h" > CImg<T>& load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nstep_frame = step_frame?step_frame:1; > unsigned int nlast_frame = first_frame<last_frame?last_frame:first_frame; ># 37677 "./CImg.h" > TIFF *tif = TIFFOpen(filename,"r"); > if (tif) { > unsigned int nb_images = 0; > do ++nb_images; while (TIFFReadDirectory(tif)); > if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): File '%s' contains %u image(s) while specified frame range is [%u,%u] (step %u).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename,nb_images,nfirst_frame,nlast_frame,nstep_frame); > > if (nfirst_frame>=nb_images) return assign(); > if (nlast_frame>=nb_images) nlast_frame = nb_images-1; > TIFFSetDirectory(tif,0); > CImg<T> frame; > for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) { > frame._load_tiff(tif,l); > if (l==nfirst_frame) assign(frame._width,frame._height,1+(nlast_frame-nfirst_frame)/nstep_frame,frame._spectrum); > if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum) > resize(cimg::max(frame._width,_width),cimg::max(frame._height,_height),-100,cimg::max(frame._spectrum,_spectrum),0); > draw_image(0,0,(l-nfirst_frame)/nstep_frame,frame); > } > TIFFClose(tif); > } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Failed to open file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > return *this; > > } > > > static CImg<T> get_load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > return CImg<T>().load_tiff(filename,first_frame,last_frame,step_frame); > } > > > > template<typename t> > void _load_tiff_tiled_contig(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny, const uint32 tw, const uint32 th) { > t *const buf = (t*)_TIFFmalloc(TIFFTileSize(tif)); > if (buf) { > for (unsigned int row = 0; row<ny; row+=th) > for (unsigned int col = 0; col<nx; col+=tw) { > if (TIFFReadTile(tif,buf,col,row,0,0)<0) { > _TIFFfree(buf); TIFFClose(tif); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Invalid tile in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > TIFFFileName(tif)); > } > const t *ptr = buf; > for (unsigned int rr = row; rr<cimg::min((unsigned int)(row+th),(unsigned int)ny); ++rr) > for (unsigned int cc = col; cc<cimg::min((unsigned int)(col+tw),(unsigned int)nx); ++cc) > for (unsigned int vv = 0; vv<samplesperpixel; ++vv) > (*this)(cc,rr,vv) = (T)(ptr[(rr-row)*th*samplesperpixel + (cc-col)*samplesperpixel + vv]); > } > _TIFFfree(buf); > } > } > > template<typename t> > void _load_tiff_tiled_separate(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny, const uint32 tw, const uint32 th) { > t *const buf = (t*)_TIFFmalloc(TIFFTileSize(tif)); > if (buf) { > for (unsigned int vv = 0; vv<samplesperpixel; ++vv) > for (unsigned int row = 0; row<ny; row+=th) > for (unsigned int col = 0; col<nx; col+=tw) { > if (TIFFReadTile(tif,buf,col,row,0,vv)<0) { > _TIFFfree(buf); TIFFClose(tif); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Invalid tile in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > TIFFFileName(tif)); > } > const t *ptr = buf; > for (unsigned int rr = row; rr<cimg::min((unsigned int)(row+th),(unsigned int)ny); ++rr) > for (unsigned int cc = col; cc<cimg::min((unsigned int)(col+tw),(unsigned int)nx); ++cc) > (*this)(cc,rr,vv) = (T)*(ptr++); > } > _TIFFfree(buf); > } > } > > template<typename t> > void _load_tiff_contig(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny) { > t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); > if (buf) { > uint32 row, rowsperstrip = (uint32)-1; > TIFFGetField(tif,278,&rowsperstrip); > for (row = 0; row<ny; row+= rowsperstrip) { > uint32 nrow = (row+rowsperstrip>ny?ny-row:rowsperstrip); > tstrip_t strip = TIFFComputeStrip(tif, row, 0); > if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { > _TIFFfree(buf); TIFFClose(tif); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Invalid strip in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > TIFFFileName(tif)); > } > const t *ptr = buf; > for (unsigned int rr = 0; rr<nrow; ++rr) > for (unsigned int cc = 0; cc<nx; ++cc) > for (unsigned int vv = 0; vv<samplesperpixel; ++vv) (*this)(cc,row+rr,vv) = (T)*(ptr++); > } > _TIFFfree(buf); > } > } > > template<typename t> > void _load_tiff_separate(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny) { > t *buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); > if (buf) { > uint32 row, rowsperstrip = (uint32)-1; > TIFFGetField(tif,278,&rowsperstrip); > for (unsigned int vv = 0; vv<samplesperpixel; ++vv) > for (row = 0; row<ny; row+= rowsperstrip) { > uint32 nrow = (row+rowsperstrip>ny?ny-row:rowsperstrip); > tstrip_t strip = TIFFComputeStrip(tif, row, vv); > if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { > _TIFFfree(buf); TIFFClose(tif); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Invalid strip in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > TIFFFileName(tif)); > } > const t *ptr = buf; > for (unsigned int rr = 0;rr<nrow; ++rr) > for (unsigned int cc = 0; cc<nx; ++cc) > (*this)(cc,row+rr,vv) = (T)*(ptr++); > } > _TIFFfree(buf); > } > } > > CImg<T>& _load_tiff(TIFF *const tif, const unsigned int directory) { > if (!TIFFSetDirectory(tif,directory)) return assign(); > uint16 samplesperpixel = 1, bitspersample = 8, photo = 0; > uint16 sampleformat = 1; > uint32 nx = 1, ny = 1; > const char *const filename = TIFFFileName(tif); > const bool is_spp = (bool)TIFFGetField(tif,277,&samplesperpixel); > TIFFGetField(tif,256,&nx); > TIFFGetField(tif,257,&ny); > TIFFGetField(tif, 339, &sampleformat); > TIFFGetFieldDefaulted(tif,258,&bitspersample); > TIFFGetField(tif,262,&photo); > > const unsigned int spectrum = is_spp?samplesperpixel:photo==3?3:1; > assign(nx,ny,1,spectrum); > > if (photo>=3 && sampleformat==1 && bitspersample==8 && (samplesperpixel==3 || samplesperpixel==4)) { > uint32 *const raster = (uint32*)_TIFFmalloc(nx*ny*sizeof(uint32)); > if (!raster) { > _TIFFfree(raster); TIFFClose(tif); > throw CImgException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_tiff(): Failed to allocate memory (%s) for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > cimg::strbuffersize(nx*ny*sizeof(uint32)),filename); > } > TIFFReadRGBAImage(tif,nx,ny,raster,0); > switch (spectrum) { > case 1 : { > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) (*this)(x,y) = (T)(float)((raster[nx*(ny-1-y)+x] + 128)/257); > } break; > case 3 : { > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > (*this)(x,y,0) = (T)(float)((raster[nx*(ny-1-y)+x]) & 0xff); > (*this)(x,y,1) = (T)(float)(((raster[nx*(ny-1-y)+x]) >> 8) & 0xff); > (*this)(x,y,2) = (T)(float)(((raster[nx*(ny-1-y)+x]) >> 16) & 0xff); > } > } break; > case 4 : { > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > (*this)(x,y,0) = (T)(float)((raster[nx*(ny-1-y)+x]) & 0xff); > (*this)(x,y,1) = (T)(float)(((raster[nx*(ny-1-y)+x]) >> 8) & 0xff); > (*this)(x,y,2) = (T)(float)(((raster[nx*(ny-1-y)+x]) >> 16) & 0xff); > (*this)(x,y,3) = (T)(float)(((raster[nx*(ny-1-y)+x]) >> 24) & 0xff); > } > } break; > } > _TIFFfree(raster); > } else { > uint16 config; > TIFFGetField(tif,284,&config); > if (TIFFIsTiled(tif)) { > uint32 tw = 1, th = 1; > TIFFGetField(tif,322,&tw); > TIFFGetField(tif,323,&th); > if (config==1) switch (bitspersample) { > case 8 : { > if (sampleformat==1) _load_tiff_tiled_contig<unsigned char>(tif,samplesperpixel,nx,ny,tw,th); > else _load_tiff_tiled_contig<signed char>(tif,samplesperpixel,nx,ny,tw,th); > } break; > case 16 : > if (sampleformat==1) _load_tiff_tiled_contig<unsigned short>(tif,samplesperpixel,nx,ny,tw,th); > else _load_tiff_tiled_contig<short>(tif,samplesperpixel,nx,ny,tw,th); > break; > case 32 : > if (sampleformat==1) _load_tiff_tiled_contig<unsigned int>(tif,samplesperpixel,nx,ny,tw,th); > else if (sampleformat==2) _load_tiff_tiled_contig<int>(tif,samplesperpixel,nx,ny,tw,th); > else _load_tiff_tiled_contig<float>(tif,samplesperpixel,nx,ny,tw,th); > break; > } else switch (bitspersample) { > case 8 : > if (sampleformat==1) _load_tiff_tiled_separate<unsigned char>(tif,samplesperpixel,nx,ny,tw,th); > else _load_tiff_tiled_separate<signed char>(tif,samplesperpixel,nx,ny,tw,th); > break; > case 16 : > if (sampleformat==1) _load_tiff_tiled_separate<unsigned short>(tif,samplesperpixel,nx,ny,tw,th); > else _load_tiff_tiled_separate<short>(tif,samplesperpixel,nx,ny,tw,th); > break; > case 32 : > if (sampleformat==1) _load_tiff_tiled_separate<unsigned int>(tif,samplesperpixel,nx,ny,tw,th); > else if (sampleformat==2) _load_tiff_tiled_separate<int>(tif,samplesperpixel,nx,ny,tw,th); > else _load_tiff_tiled_separate<float>(tif,samplesperpixel,nx,ny,tw,th); > break; > } > } else { > if (config==1) switch (bitspersample) { > case 8 : > if (sampleformat==1) _load_tiff_contig<unsigned char>(tif,samplesperpixel,nx,ny); > else _load_tiff_contig<signed char>(tif,samplesperpixel,nx,ny); > break; > case 16 : > if (sampleformat==1) _load_tiff_contig<unsigned short>(tif,samplesperpixel,nx,ny); > else _load_tiff_contig<short>(tif,samplesperpixel,nx,ny); > break; > case 32 : > if (sampleformat==1) _load_tiff_contig<unsigned int>(tif,samplesperpixel,nx,ny); > else if (sampleformat==2) _load_tiff_contig<int>(tif,samplesperpixel,nx,ny); > else _load_tiff_contig<float>(tif,samplesperpixel,nx,ny); > break; > } else switch (bitspersample) { > case 8 : > if (sampleformat==1) _load_tiff_separate<unsigned char>(tif,samplesperpixel,nx,ny); > else _load_tiff_separate<signed char>(tif,samplesperpixel,nx,ny); > break; > case 16 : > if (sampleformat==1) _load_tiff_separate<unsigned short>(tif,samplesperpixel,nx,ny); > else _load_tiff_separate<short>(tif,samplesperpixel,nx,ny); > break; > case 32 : > if (sampleformat==1) _load_tiff_separate<unsigned int>(tif,samplesperpixel,nx,ny); > else if (sampleformat==2) _load_tiff_separate<int>(tif,samplesperpixel,nx,ny); > else _load_tiff_separate<float>(tif,samplesperpixel,nx,ny); > break; > } > } > } > return *this; > } > > > > > > > > CImg<T>& load_minc2(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_minc2(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return load_other(filename); ># 37962 "./CImg.h" > } > > > static CImg<T> get_load_minc2(const char *const filename) { > return CImg<T>().load_analyze(filename); > } > > > > > > > CImg<T>& load_analyze(const char *const filename, float *const voxel_size=0) { > return _load_analyze(0,filename,voxel_size); > } > > > static CImg<T> get_load_analyze(const char *const filename, float *const voxel_size=0) { > return CImg<T>().load_analyze(filename,voxel_size); > } > > > CImg<T>& load_analyze(std::FILE *const file, float *const voxel_size=0) { > return _load_analyze(file,0,voxel_size); > } > > > static CImg<T> get_load_analyze(std::FILE *const file, float *const voxel_size=0) { > return CImg<T>().load_analyze(file,voxel_size); > } > > CImg<T>& _load_analyze(std::FILE *const file, const char *const filename, float *const voxel_size=0) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *nfile_header = 0, *nfile = 0; > if (!file) { > char body[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename,body); > if (!cimg::strcasecmp(ext,"hdr")) { > nfile_header = cimg::fopen(filename,"rb"); > std::sprintf(body + std::strlen(body),".img"); > nfile = cimg::fopen(body,"rb"); > } else if (!cimg::strcasecmp(ext,"img")) { > nfile = cimg::fopen(filename,"rb"); > std::sprintf(body + std::strlen(body),".hdr"); > nfile_header = cimg::fopen(body,"rb"); > } else nfile_header = nfile = cimg::fopen(filename,"rb"); > } else nfile_header = nfile = file; > if (!nfile || !nfile_header) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Invalid Analyze7.5 or NIFTI header in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > > bool endian = false; > unsigned int header_size; > cimg::fread(&header_size,1,nfile_header); > if (!header_size) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Invalid zero-sized header in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > if (header_size>=4096) { endian = true; cimg::invert_endianness(header_size); } > unsigned char *const header = new unsigned char[header_size]; > cimg::fread(header+4,header_size-4,nfile_header); > if (!file && nfile_header!=nfile) cimg::fclose(nfile_header); > if (endian) { > cimg::invert_endianness((short*)(header+40),5); > cimg::invert_endianness((short*)(header+70),1); > cimg::invert_endianness((short*)(header+72),1); > cimg::invert_endianness((float*)(header+76),4); > cimg::invert_endianness((float*)(header+112),1); > } > unsigned short *dim = (unsigned short*)(header+40), dimx = 1, dimy = 1, dimz = 1, dimv = 1; > if (!dim[0]) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): File '%s' defines an image with zero dimensions.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > if (dim[0]>4) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): File '%s' defines an image with %u dimensions, reading only the 4 first.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",dim[0]); > > if (dim[0]>=1) dimx = dim[1]; > if (dim[0]>=2) dimy = dim[2]; > if (dim[0]>=3) dimz = dim[3]; > if (dim[0]>=4) dimv = dim[4]; > float scalefactor = *(float*)(header+112); if (scalefactor==0) scalefactor=1; > const unsigned short datatype = *(short*)(header+70); > if (voxel_size) { > const float *vsize = (float*)(header+76); > voxel_size[0] = vsize[1]; voxel_size[1] = vsize[2]; voxel_size[2] = vsize[3]; > } > delete[] header; > > > assign(dimx,dimy,dimz,dimv); > switch (datatype) { > case 2 : { > unsigned char *const buffer = new unsigned char[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 4 : { > short *const buffer = new short[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 8 : { > int *const buffer = new int[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 16 : { > float *const buffer = new float[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > case 64 : { > double *const buffer = new double[dimx*dimy*dimz*dimv]; > cimg::fread(buffer,dimx*dimy*dimz*dimv,nfile); > if (endian) cimg::invert_endianness(buffer,dimx*dimy*dimz*dimv); > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) _data[off] = (T)(buffer[off]*scalefactor); > delete[] buffer; > } break; > default : > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_analyze(): Unable to load datatype %d in file '%s'", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > datatype,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > > CImg<T>& load_cimg(const char *const filename, const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(filename); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(const char *const filename, const char axis='z', const float align=0) { > return CImg<T>().load_cimg(filename,axis,align); > } > > > CImg<T>& load_cimg(std::FILE *const file, const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(file); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(std::FILE *const file, const char axis='z', const float align=0) { > return CImg<T>().load_cimg(file,axis,align); > } ># 38160 "./CImg.h" > CImg<T>& load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > return CImg<T>().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); > } > > > CImg<T>& load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > CImgList<T> list; > list.load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1, > const char axis='z', const float align=0) { > return CImg<T>().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); > } > > > > > > > CImg<T>& load_inr(const char *const filename, float *const voxel_size=0) { > return _load_inr(0,filename,voxel_size); > } > > > static CImg<T> get_load_inr(const char *const filename, float *const voxel_size=0) { > return CImg<T>().load_inr(filename,voxel_size); > } > > > CImg<T>& load_inr(std::FILE *const file, float *const voxel_size=0) { > return _load_inr(file,0,voxel_size); > } > > > static CImg<T> get_load_inr(std::FILE *const file, float *voxel_size=0) { > return CImg<T>().load_inr(file,voxel_size); > } > > static void _load_inr_header(std::FILE *file, int out[8], float *const voxel_size) { > char item[1024] = { 0 }, tmp1[64] = { 0 }, tmp2[64] = { 0 }; > out[0] = std::fscanf(file,"%63s",item); > out[0] = out[1] = out[2] = out[3] = out[5] = 1; out[4] = out[6] = out[7] = -1; > if(cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) > throw CImgIOException("CImg<%s>::load_inr(): INRIMAGE-4 header not found.", > pixel_type()); > > while (std::fscanf(file," %63[^\n]%*c",item)!=(-1) && std::strncmp(item,"##}",3)) { > std::sscanf(item," XDIM%*[^0-9]%d",out); > std::sscanf(item," YDIM%*[^0-9]%d",out+1); > std::sscanf(item," ZDIM%*[^0-9]%d",out+2); > std::sscanf(item," VDIM%*[^0-9]%d",out+3); > std::sscanf(item," PIXSIZE%*[^0-9]%d",out+6); > if (voxel_size) { > std::sscanf(item," VX%*[^0-9.+-]%f",voxel_size); > std::sscanf(item," VY%*[^0-9.+-]%f",voxel_size+1); > std::sscanf(item," VZ%*[^0-9.+-]%f",voxel_size+2); > } > if (std::sscanf(item," CPU%*[ =]%s",tmp1)) out[7]=cimg::strncasecmp(tmp1,"sun",3)?0:1; > switch (std::sscanf(item," TYPE%*[ =]%s %s",tmp1,tmp2)) { > case 0 : break; > case 2 : out[5] = cimg::strncasecmp(tmp1,"unsigned",8)?1:0; std::strncpy(tmp1,tmp2,sizeof(tmp1)-1); > case 1 : > if (!cimg::strncasecmp(tmp1,"int",3) || !cimg::strncasecmp(tmp1,"fixed",5)) out[4] = 0; > if (!cimg::strncasecmp(tmp1,"float",5) || !cimg::strncasecmp(tmp1,"double",6)) out[4] = 1; > if (!cimg::strncasecmp(tmp1,"packed",6)) out[4] = 2; > if (out[4]>=0) break; > default : > throw CImgIOException("CImg<%s>::load_inr(): Invalid pixel type '%s' defined in header.", > pixel_type(), > tmp2); > } > } > if(out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) > throw CImgIOException("CImg<%s>::load_inr(): Invalid dimensions (%d,%d,%d,%d) defined in header.", > pixel_type(), > out[0],out[1],out[2],out[3]); > if(out[4]<0 || out[5]<0) > throw CImgIOException("CImg<%s>::load_inr(): Incomplete pixel type defined in header.", > pixel_type()); > if(out[6]<0) > throw CImgIOException("CImg<%s>::load_inr(): Incomplete PIXSIZE field defined in header.", > pixel_type()); > if(out[7]<0) > throw CImgIOException("CImg<%s>::load_inr(): Big/Little Endian coding type undefined in header.", > pixel_type()); > } > > CImg<T>& _load_inr(std::FILE *const file, const char *const filename, float *const voxel_size) { ># 38287 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_inr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > int fopt[8], endian=cimg::endianness()?1:0; > bool loaded = false; > if (voxel_size) voxel_size[0] = voxel_size[1] = voxel_size[2] = 1; > _load_inr_header(nfile,fopt,voxel_size); > assign(fopt[0],fopt[1],fopt[2],fopt[3]); > if (!loaded && fopt[6]==8 && fopt[4]==0 && fopt[5]==0) { unsigned char *xval, *const val = new unsigned char[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==8 && fopt[4]==0 && fopt[5]==1) { char *xval, *const val = new char[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==16 && fopt[4]==0 && fopt[5]==0) { unsigned short *xval, *const val = new unsigned short[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==16 && fopt[4]==0 && fopt[5]==1) { short *xval, *const val = new short[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==0 && fopt[5]==0) { unsigned int *xval, *const val = new unsigned int[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==0 && fopt[5]==1) { int *xval, *const val = new int[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==1 && fopt[5]==0) { float *xval, *const val = new float[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==32 && fopt[4]==1 && fopt[5]==1) { float *xval, *const val = new float[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==64 && fopt[4]==1 && fopt[5]==0) { double *xval, *const val = new double[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded && fopt[6]==64 && fopt[4]==1 && fopt[5]==1) { double *xval, *const val = new double[fopt[0]*fopt[3]]; for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { cimg::fread(val,fopt[0]*fopt[3],nfile); if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); xval = val; for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) (*this)(x,y,z,c) = (T)*(xval++); } delete[] val; loaded = true; }; > if (!loaded) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_inr(): Unknown pixel type defined in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImg<T>& load_exr(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_exr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > > > > Imf::RgbaInputFile file(filename); > Imath::Box2i dw = file.dataWindow(); > const int > inwidth = dw.max.x - dw.min.x + 1, > inheight = dw.max.y - dw.min.y + 1; > Imf::Array2D<Imf::Rgba> pixels; > pixels.resizeErase(inheight,inwidth); > file.setFrameBuffer(&pixels[0][0] - dw.min.x - dw.min.y*inwidth, 1, inwidth); > file.readPixels(dw.min.y, dw.max.y); > assign(inwidth,inheight,1,4); > T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); > for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptr_r++) = (T)pixels[y][x].r; > *(ptr_g++) = (T)pixels[y][x].g; > *(ptr_b++) = (T)pixels[y][x].b; > *(ptr_a++) = (T)pixels[y][x].a; > } > return *this; > > } > > > static CImg<T> get_load_exr(const char *const filename) { > return CImg<T>().load_exr(filename); > } > > > > > > CImg<T>& load_pandore(const char *const filename) { > return _load_pandore(0,filename); > } > > > static CImg<T> get_load_pandore(const char *const filename) { > return CImg<T>().load_pandore(filename); > } > > > CImg<T>& load_pandore(std::FILE *const file) { > return _load_pandore(file,0); > } > > > static CImg<T> get_load_pandore(std::FILE *const file) { > return CImg<T>().load_pandore(file); > } > > CImg<T>& _load_pandore(std::FILE *const file, const char *const filename) { ># 38404 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pandore(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > char header[32] = { 0 }; > cimg::fread(header,12,nfile); > if (cimg::strncasecmp("PANDORE",header,7)) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pandore(): PANDORE header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > unsigned int imageid, dims[8] = { 0 }; > cimg::fread(&imageid,1,nfile); > const bool endian = (imageid>255); > if (endian) cimg::invert_endianness(imageid); > cimg::fread(header,20,nfile); > > switch (imageid) { > case 2: { if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 3: { if (sizeof(long)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 4: { if (sizeof(double)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 5: { if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 6: { if (sizeof(long)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 7: { if (sizeof(double)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 8: { if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 9: { if (sizeof(long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 10: { if (sizeof(double)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],1); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 11 : { > cimg::fread(dims,3,nfile); > if (endian) cimg::invert_endianness(dims,3); > assign(dims[1],1,1,1); > const unsigned siz = size(); > if (dims[2]<256) { > unsigned char *buffer = new unsigned char[siz]; > cimg::fread(buffer,siz,nfile); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > if (dims[2]<65536) { > unsigned short *buffer = new unsigned short[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > unsigned int *buffer = new unsigned int[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } > } > } > break; > case 12 : { > cimg::fread(dims,4,nfile); > if (endian) cimg::invert_endianness(dims,4); > assign(dims[2],dims[1],1,1); > const unsigned int siz = size(); > if (dims[3]<256) { > unsigned char *buffer = new unsigned char[siz]; > cimg::fread(buffer,siz,nfile); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > if (dims[3]<65536) { > unsigned short *buffer = new unsigned short[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > unsigned long *buffer = new unsigned long[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } > } > } > break; > case 13 : { > cimg::fread(dims,5,nfile); > if (endian) cimg::invert_endianness(dims,5); > assign(dims[3],dims[2],dims[1],1); > const unsigned int siz = size(); > if (dims[4]<256) { > unsigned char *buffer = new unsigned char[siz]; > cimg::fread(buffer,siz,nfile); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > if (dims[4]<65536) { > unsigned short *buffer = new unsigned short[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } else { > unsigned int *buffer = new unsigned int[siz]; > cimg::fread(buffer,siz,nfile); > if (endian) cimg::invert_endianness(buffer,siz); > T *ptrd = _data; > for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); > buffer-=siz; > delete[] buffer; > } > } > } > break; > case 16: { if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 17: { if (sizeof(long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 18: { if (sizeof(double)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[2],dims[1],1,3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 19: { if (sizeof(unsigned char)==1) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 20: { if (sizeof(long)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 21: { if (sizeof(double)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,5,nfile); if (endian) cimg::invert_endianness(dims,5); assign(dims[3],dims[2],dims[1],3); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 22: { if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 23: { if (sizeof(long)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; > case 24: { if (sizeof(unsigned long)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned long *buffer = new unsigned long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned int)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned int *buffer = new unsigned int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned short)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); unsigned short *buffer = new unsigned short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 25: { if (sizeof(double)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,2,nfile); if (endian) cimg::invert_endianness(dims,2); assign(dims[1],1,1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 26: { if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 27: { if (sizeof(long)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 28: { if (sizeof(unsigned long)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned long *buffer = new unsigned long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned int)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned int *buffer = new unsigned int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned short)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); unsigned short *buffer = new unsigned short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 29: { if (sizeof(double)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,3,nfile); if (endian) cimg::invert_endianness(dims,3); assign(dims[2],dims[1],1,dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 30: { if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned char)==1) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned char *buffer = new unsigned char[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 31: { if (sizeof(long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); long *buffer = new long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); int *buffer = new int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); short *buffer = new short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 32: { if (sizeof(unsigned long)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned long *buffer = new unsigned long[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned int)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned int *buffer = new unsigned int[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(unsigned short)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); unsigned short *buffer = new unsigned short[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 33: { if (sizeof(double)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); double *buffer = new double[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else if (sizeof(float)==4) { cimg::fread(dims,4,nfile); if (endian) cimg::invert_endianness(dims,4); assign(dims[3],dims[2],dims[1],dims[0]); const unsigned int siz = size(); float *buffer = new float[siz]; cimg::fread(buffer,siz,nfile); if (endian) cimg::invert_endianness(buffer,siz); T *ptrd = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(ptrd++) = (T)*(buffer++); buffer-=siz; delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "load_pandore(): Unknown pixel datatype in file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); }; break; > case 34 : { > int ptbuf[4] = { 0 }; > cimg::fread(ptbuf,1,nfile); > if (endian) cimg::invert_endianness(ptbuf,1); > assign(1); (*this)(0) = (T)ptbuf[0]; > } break; > case 35 : { > int ptbuf[4] = { 0 }; > cimg::fread(ptbuf,2,nfile); > if (endian) cimg::invert_endianness(ptbuf,2); > assign(2); (*this)(0) = (T)ptbuf[1]; (*this)(1) = (T)ptbuf[0]; > } break; > case 36 : { > int ptbuf[4] = { 0 }; > cimg::fread(ptbuf,3,nfile); > if (endian) cimg::invert_endianness(ptbuf,3); > assign(3); (*this)(0) = (T)ptbuf[2]; (*this)(1) = (T)ptbuf[1]; (*this)(2) = (T)ptbuf[0]; > } break; > default : > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_pandore(): Unable to load data with ID_type %u in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > imageid,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > > CImg<T>& load_parrec(const char *const filename, const char axis='c', const float align=0) { > CImgList<T> list; > list.load_parrec(filename); > if (list._width==1) return list[0].move_to(*this); > return assign(list.get_append(axis,align)); > } > > > static CImg<T> get_load_parrec(const char *const filename, const char axis='c', const float align=0) { > return CImg<T>().load_parrec(filename,axis,align); > } ># 38610 "./CImg.h" > CImg<T>& load_raw(const char *const filename, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return _load_raw(0,filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > > static CImg<T> get_load_raw(const char *const filename, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return CImg<T>().load_raw(filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > > CImg<T>& load_raw(std::FILE *const file, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return _load_raw(file,0,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > > static CImg<T> get_load_raw(std::FILE *const file, > const unsigned int size_x=0, const unsigned int size_y=1, > const unsigned int size_z=1, const unsigned int size_c=1, > const bool is_multiplexed=false, const bool invert_endianness=false, > const unsigned long offset=0) { > return CImg<T>().load_raw(file,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); > } > > CImg<T>& _load_raw(std::FILE *const file, const char *const filename, > const unsigned int size_x, const unsigned int size_y, > const unsigned int size_z, const unsigned int size_c, > const bool is_multiplexed, const bool invert_endianness, > const unsigned long offset) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_raw(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > unsigned int siz = size_x*size_y*size_z*size_c, _size_x = size_x, _size_y = size_y, _size_z = size_z, _size_c = size_c; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > if (!siz) { > const long fpos = std::ftell(nfile); > if (fpos<0) throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_raw(): Cannot determine size of input file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),filename?filename:"(FILE*)"); > std::fseek(nfile,0,2); > siz = _size_y = (unsigned int)std::ftell(nfile)/sizeof(T); > _size_x = _size_z = _size_c = 1; > std::fseek(nfile,fpos,0); > } > std::fseek(nfile,(long)offset,0); > assign(_size_x,_size_y,_size_z,_size_c,0); > if (!is_multiplexed || size_c==1) { > cimg::fread(_data,siz,nfile); > if (invert_endianness) cimg::invert_endianness(_data,siz); > } else { > CImg<T> buf(1,1,1,_size_c); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > cimg::fread(buf._data,_size_c,nfile); > if (invert_endianness) cimg::invert_endianness(buf._data,_size_c); > set_vector_at(buf,x,y,z); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 38694 "./CImg.h" > CImg<T>& load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false, > const char axis='z', const float align=0) { > return get_load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format,resume,axis,align).move_to(*this); > } > > > static CImg<T> get_load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false, > const char axis='z', const float align=0) { > return CImgList<T>().load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format,resume).get_append(axis,align); > } ># 38718 "./CImg.h" > CImg<T>& load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return get_load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); > } > > > static CImg<T> get_load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return CImgList<T>().load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); > } > > > CImg<T>& load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return get_load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); > } > > > static CImg<T> get_load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { > return CImgList<T>().load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); > } > > > > > > > > template<typename tf, typename tc> > CImg<T>& load_off(CImgList<tf>& primitives, CImgList<tc>& colors, const char *const filename) { > return _load_off(primitives,colors,0,filename); > } > > > template<typename tf, typename tc> > static CImg<T> get_load_off(CImgList<tf>& primitives, CImgList<tc>& colors, const char *const filename) { > return CImg<T>().load_off(primitives,colors,filename); > } > > > template<typename tf, typename tc> > CImg<T>& load_off(CImgList<tf>& primitives, CImgList<tc>& colors, std::FILE *const file) { > return _load_off(primitives,colors,file,0); > } > > > template<typename tf, typename tc> > static CImg<T> get_load_off(CImgList<tf>& primitives, CImgList<tc>& colors, std::FILE *const file) { > return CImg<T>().load_off(primitives,colors,file); > } > > template<typename tf, typename tc> > CImg<T>& _load_off(CImgList<tf>& primitives, CImgList<tc>& colors, > std::FILE *const file, const char *const filename) { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); > unsigned int nb_points = 0, nb_primitives = 0, nb_read = 0; > char line[256] = { 0 }; > int err; > > > do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); > if (cimg::strncasecmp(line,"OFF",3) && cimg::strncasecmp(line,"COFF",4)) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): OFF header not found in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); > if ((err = std::sscanf(line,"%u%u%*[^\n] ",&nb_points,&nb_primitives))!=2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Invalid number of vertices or primitives specified in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > > > assign(nb_points,3); > float X = 0, Y = 0, Z = 0; > for (int l = 0; l<(int)((*this)._width); ++l) { > do { err = std::fscanf(nfile,"%255[^\n] ",line); } while (!err || (err==1 && *line=='#')); > if ((err = std::sscanf(line,"%f%f%f%*[^\n] ",&X,&Y,&Z))!=3) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read vertex %u/%u in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > l+1,nb_points,filename?filename:"(FILE*)"); > } > (*this)(l,0) = (T)X; (*this)(l,1) = (T)Y; (*this)(l,2) = (T)Z; > } > > > primitives.assign(); > colors.assign(); > bool stop_flag = false; > while (!stop_flag) { > float c0 = 0.7f, c1 = 0.7f, c2 = 0.7f; > unsigned int prim = 0, i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0; > *line = 0; > if ((err = std::fscanf(nfile,"%u",&prim))!=1) stop_flag = true; > else { > ++nb_read; > switch (prim) { > case 1 : { > if ((err = std::fscanf(nfile,"%u%255[^\n] ",&i0,line))<2) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 2 : { > if ((err = std::fscanf(nfile,"%u%u%255[^\n] ",&i0,&i1,line))<2) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i1).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 3 : { > if ((err = std::fscanf(nfile,"%u%u%u%255[^\n] ",&i0,&i1,&i2,line))<3) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i2,i1).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 4 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,line))<4) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); > } > } break; > case 5 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,line))<5) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tf>::vector(i0,i4,i3).move_to(primitives); > colors.insert(2,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++nb_primitives; > } > } break; > case 6 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,line))<6) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tf>::vector(i0,i5,i4,i3).move_to(primitives); > colors.insert(2,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++nb_primitives; > } > } break; > case 7 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,line))<7) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i4,i3,i1).move_to(primitives); > CImg<tf>::vector(i0,i6,i5,i4).move_to(primitives); > CImg<tf>::vector(i3,i2,i1).move_to(primitives); > colors.insert(3,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++(++nb_primitives); > } > } break; > case 8 : { > if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,&i7,line))<7) { > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } else { > err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); > CImg<tf>::vector(i0,i3,i2,i1).move_to(primitives); > CImg<tf>::vector(i0,i5,i4,i3).move_to(primitives); > CImg<tf>::vector(i0,i7,i6,i5).move_to(primitives); > colors.insert(3,CImg<tc>::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); > ++(++nb_primitives); > } > } break; > default : > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Failed to read primitive %u/%u (%u vertices) from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nb_read,nb_primitives,prim,filename?filename:"(FILE*)"); > > err = std::fscanf(nfile,"%*[^\n] "); > } > } > } > if (!file) cimg::fclose(nfile); > if (primitives._width!=nb_primitives) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_off(): Only %u/%u primitives read from file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > primitives._width,nb_primitives,filename?filename:"(FILE*)"); > return *this; > } > > > > > > > > CImg<T>& load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { > return get_load_ffmpeg_external(filename,axis,align).move_to(*this); > } > > > static CImg<T> get_load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { > return CImgList<T>().load_ffmpeg_external(filename).get_append(axis,align); > } ># 38999 "./CImg.h" > CImg<T>& load_gif_external(const char *const filename, > const char axis='z', const float align=0) { > return get_load_gif_external(filename,axis,align).move_to(*this); > } > > > static CImg<T> get_load_gif_external(const char *const filename, > const char axis='z', const float align=0) { > return CImgList<T>().load_gif_external(filename).get_append(axis,align); > } > > > > > > CImg<T>& load_graphicsmagick_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_graphicsmagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > const CImg<charT> s_filename = CImg<charT>::string(filename)._system_strescape(); > > snprintf(command,sizeof(command),"%s convert \"%s\" pnm:-", > cimg::graphicsmagick_path(),s_filename.data()); > file = popen(command,"r"); > if (file) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_pnm(file); } catch (...) { > pclose(file); > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > pclose(file); > return *this; > } > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.pnm",cimg::temporary_path(),'/',cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s convert \"%s\" \"%s\"", > cimg::graphicsmagick_path(),s_filename.data(),CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command,cimg::graphicsmagick_path()); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load_pnm(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_graphicsmagick_external(const char *const filename) { > return CImg<T>().load_graphicsmagick_external(filename); > } > > > > > > CImg<T>& load_gzip_external(const char *const filename) { > if (!filename) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_gzip_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *const ext = cimg::split_filename(filename,body), > *const ext2 = cimg::split_filename(body,0); > > std::FILE *file = 0; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gunzip_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_gzip_external(): Failed to load file '%s' with external command 'gunzip'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_gzip_external(const char *const filename) { > return CImg<T>().load_gzip_external(filename); > } > > > > > > CImg<T>& load_imagemagick_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_imagemagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > const CImg<charT> s_filename = CImg<charT>::string(filename)._system_strescape(); > > snprintf(command,sizeof(command),"%s%s \"%s\" pnm:-", > cimg::imagemagick_path(), > !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", > s_filename.data()); > file = popen(command,"r"); > if (file) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_pnm(file); } catch (...) { > pclose(file); > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_imagemagick_external(): Failed to load file '%s' with external command 'convert'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > pclose(file); > return *this; > } > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.pnm",cimg::temporary_path(),'/',cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s%s \"%s\" \"%s\"", > cimg::imagemagick_path(), > !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", > s_filename.data(),CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command,cimg::imagemagick_path()); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_imagemagick_external(): Failed to load file '%s' with external command 'convert'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load_pnm(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_imagemagick_external(const char *const filename) { > return CImg<T>().load_imagemagick_external(filename); > } > > > > > > CImg<T>& load_medcon_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_medcon_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > cimg::fclose(cimg::fopen(filename,"r")); > std::FILE *file = 0; > do { > snprintf(filetmp,sizeof(filetmp),"%s.hdr",cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -w -c anlz -o \"%s\" -f \"%s\"", > cimg::medcon_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > cimg::split_filename(filetmp,body); > > snprintf(command,sizeof(command),"%s.hdr",body); > file = std::fopen(command,"rb"); > if (!file) { > snprintf(command,sizeof(command),"m000-%s.hdr",body); > file = std::fopen(command,"rb"); > if (!file) { > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_medcon_external(): Failed to load file '%s' with external command 'medcon'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > cimg::fclose(file); > load_analyze(command); > std::remove(command); > cimg::split_filename(command,body); > snprintf(command,sizeof(command),"%s.img",body); > std::remove(command); > return *this; > } > > > static CImg<T> get_load_medcon_external(const char *const filename) { > return CImg<T>().load_medcon_external(filename); > } > > > > > > CImg<T>& load_dcraw_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dcraw_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file = 0; > const CImg<charT> s_filename = CImg<charT>::string(filename)._system_strescape(); > > snprintf(command,sizeof(command),"%s -w -4 -c \"%s\"", > cimg::dcraw_path(),s_filename.data()); > file = popen(command,"r"); > if (file) { > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_pnm(file); } catch (...) { > pclose(file); > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > pclose(file); > return *this; > } > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.ppm",cimg::temporary_path(),'/',cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -w -4 -c \"%s\" > \"%s\"", > cimg::dcraw_path(),s_filename.data(),CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command,cimg::dcraw_path()); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > } else cimg::fclose(file); > load_pnm(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImg<T> get_load_dcraw_external(const char *const filename) { > return CImg<T>().load_dcraw_external(filename); > } > > > > > > > > CImg<T>& load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, const bool release_camera=true, > const unsigned int capture_width=0, const unsigned int capture_height=0) { ># 39331 "./CImg.h" > cimg::unused(camera_index,skip_frames,release_camera,capture_width,capture_height); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_camera(): This function requires the OpenCV library to run " > "(macro 'cimg_use_opencv' must be defined).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > return *this; > } > > > static CImg<T> get_load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, const bool release_camera=true, > const unsigned int capture_width=0, const unsigned int capture_height=0) { > return CImg<T>().load_camera(camera_index,skip_frames,release_camera,capture_width,capture_height); > } > > > > > > CImg<T>& load_other(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_other(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { load_magick(filename); } > catch (CImgException&) { > try { load_imagemagick_external(filename); } > catch (CImgException&) { > try { load_graphicsmagick_external(filename); } > catch (CImgException&) { > try { load_cimg(filename); } > catch (CImgException&) { > try { > std::fclose(cimg::fopen(filename,"rb")); > } catch (CImgException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_other(): Failed to open file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "load_other(): Failed to recognize format of file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImg<T> get_load_other(const char *const filename) { > return CImg<T>().load_other(filename); > } ># 39405 "./CImg.h" > const CImg<T>& print(const char *const title=0, const bool display_stats=true) const { > int xm = 0, ym = 0, zm = 0, vm = 0, xM = 0, yM = 0, zM = 0, vM = 0; > CImg<doubleT> st; > if (!is_empty() && display_stats) { > st = get_stats(); > xm = (int)st[4]; ym = (int)st[5], zm = (int)st[6], vm = (int)st[7]; > xM = (int)st[8]; yM = (int)st[9], zM = (int)st[10], vM = (int)st[11]; > } > const unsigned long siz = size(), msiz = siz*sizeof(T), siz1 = siz-1, mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2), width1 = _width-1; > > char _title[64] = { 0 }; > if (!title) snprintf(_title,sizeof(_title),"CImg<%s>",pixel_type()); > > std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = (%u,%u,%u,%u) [%lu %s], %sdata%s = (%s*)%p", > cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, > cimg::t_bold,cimg::t_normal,(void*)this, > cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, > mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), > mdisp==0?"b":(mdisp==1?"Kio":"Mio"), > cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); > if (_data) std::fprintf(cimg::output(),"..%p (%s) = [ ",(void*)((char*)end()-1),_is_shared?"shared":"non-shared"); > else std::fprintf(cimg::output()," (%s) = [ ",_is_shared?"shared":"non-shared"); > > if (!is_empty()) for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) { > std::fprintf(cimg::output(),cimg::type<T>::format(),cimg::type<T>::format(_data[off])); > if (off!=siz1) std::fprintf(cimg::output(),"%s",off%_width==width1?" ; ":" "); > if (off==7 && siz>16) { off = siz1-8; std::fprintf(cimg::output(),"... "); } > } > if (!is_empty() && display_stats) > std::fprintf(cimg::output()," ], %smin%s = %g, %smax%s = %g, %smean%s = %g, %sstd%s = %g, %scoords_min%s = (%u,%u,%u,%u), %scoords_max%s = (%u,%u,%u,%u).\n", > cimg::t_bold,cimg::t_normal,st[0], > cimg::t_bold,cimg::t_normal,st[1], > cimg::t_bold,cimg::t_normal,st[2], > cimg::t_bold,cimg::t_normal,std::sqrt(st[3]), > cimg::t_bold,cimg::t_normal,xm,ym,zm,vm, > cimg::t_bold,cimg::t_normal,xM,yM,zM,vM); > else std::fprintf(cimg::output(),"%s].\n",is_empty()?"":" "); > std::fflush(cimg::output()); > return *this; > } > > > > > > const CImg<T>& display(CImgDisplay& disp) const { > disp.display(*this); > return *this; > } > > > > > > > const CImg<T>& display(CImgDisplay &disp, const bool display_info, unsigned int *const XYZ=0) const { > return _display(disp,0,display_info,XYZ,false); > } > > > > > > > const CImg<T>& display(const char *const title=0, const bool display_info=true, unsigned int *const XYZ=0) const { > CImgDisplay disp; > return _display(disp,title,display_info,XYZ,false); > } > > const CImg<T>& _display(CImgDisplay &disp, const char *const title, > const bool display_info, unsigned int *const XYZ, > const bool exit_on_simpleclick) const { > unsigned int oldw = 0, oldh = 0, _XYZ[3] = { 0 }, key = 0; > int x0 = 0, y0 = 0, z0 = 0, x1 = width()-1, y1 = height()-1, z1 = depth()-1; > > if (!disp) { > disp.assign(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),title?title:0,1); > if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); > else disp.set_title("%s",title); > } else if (title) disp.set_title("%s",title); > disp.show().flush(); > > const CImg<char> dtitle = CImg<char>::string(disp.title()); > if (display_info) print(dtitle); > > CImg<T> zoom; > for (bool reset_view = true, resize_disp = false, is_first_select = true; !key && !disp.is_closed(); ) { > if (reset_view) { > if (XYZ) { _XYZ[0] = XYZ[0]; _XYZ[1] = XYZ[1]; _XYZ[2] = XYZ[2]; } > else { _XYZ[0] = (x0 + x1)/2; _XYZ[1] = (y0 + y1)/2; _XYZ[2] = (z0 + z1)/2; } > x0 = 0; y0 = 0; z0 = 0; x1 = width()-1; y1 = height()-1; z1 = depth()-1; > oldw = disp.width(); oldh = disp.height(); > reset_view = false; > } > if (!x0 && !y0 && !z0 && x1==width()-1 && y1==height()-1 && z1==depth()-1) { if (is_empty()) zoom.assign(1,1,1,1,0); else zoom.assign(); } > else zoom = get_crop(x0,y0,z0,x1,y1,z1); > > const unsigned int > dx = 1 + x1 - x0, dy = 1 + y1 - y0, dz = 1 + z1 - z0, > tw = dx + (dz>1?dz:0), th = dy + (dz>1?dz:0); > if (!is_empty() && !disp.is_fullscreen() && resize_disp) { > const unsigned int > ttw = tw*disp.width()/oldw, tth = th*disp.height()/oldh, > dM = cimg::max(ttw,tth), diM = (unsigned int)cimg::max(disp.width(),disp.height()), > imgw = cimg::max(16U,ttw*diM/dM), imgh = cimg::max(16U,tth*diM/dM); > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(imgw,imgh,1,128,-85,false),CImgDisplay::_fitscreen(imgw,imgh,1,128,-85,true),false); > resize_disp = false; > } > oldw = tw; oldh = th; > > bool > go_up = false, go_down = false, go_left = false, go_right = false, > go_inc = false, go_dec = false, go_in = false, go_out = false, > go_in_center = false; > const CImg<T>& visu = zoom?zoom:*this; > > disp.set_title("%s",dtitle._data); > if (_width>1 && visu._width==1) disp.set_title("%s | x=%u",disp._title,x0); > if (_height>1 && visu._height==1) disp.set_title("%s | y=%u",disp._title,y0); > if (_depth>1 && visu._depth==1) disp.set_title("%s | z=%u",disp._title,z0); > > if (!is_first_select) { _XYZ[0] = (x1-x0)/2; _XYZ[1] = (y1-y0)/2; _XYZ[2] = (z1-z0)/2; } > const CImg<intT> selection = visu._get_select(disp,0,2,_XYZ,x0,y0,z0,is_first_select,_depth>1); > is_first_select = false; > > if (disp.wheel()) { > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { go_out = !(go_in = disp.wheel()>0); go_in_center = false; } > else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) { go_right = !(go_left = disp.wheel()>0); } > else if (disp.is_keyALT() || disp.is_keyALTGR() || _depth==1) { go_down = !(go_up = disp.wheel()>0); } > disp.set_wheel(); > } > > const int > sx0 = selection(0), sy0 = selection(1), sz0 = selection(2), > sx1 = selection(3), sy1 = selection(4), sz1 = selection(5); > if (sx0>=0 && sy0>=0 && sz0>=0 && sx1>=0 && sy1>=0 && sz1>=0) { > x1 = x0 + sx1; y1 = y0 + sy1; z1 = z0 + sz1; > x0+=sx0; y0+=sy0; z0+=sz0; > if (sx0==sx1 && sy0==sy1 && sz0==sz1) { > if (exit_on_simpleclick && (!zoom || is_empty())) break; else reset_view = true; > } > resize_disp = true; > } else switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : > > case 0 : case cimg::keyCTRLLEFT : case cimg::keyPAD5 : case cimg::keySHIFTLEFT : > > case cimg::keyALTGR : > > case cimg::keyALT : key = 0; break; > case cimg::keyP : if (visu._depth>1 && (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT())) { > const unsigned int > w1 = visu._width*disp.width()/(visu._width+(visu._depth>1?visu._depth:0)), > h1 = visu._height*disp.height()/(visu._height+(visu._depth>1?visu._depth:0)); > float frame_timing = 5; > bool is_stopped = false; > disp.set_key(key,false).set_wheel().resize(CImgDisplay::_fitscreen(w1,h1,1,128,-85,false),CImgDisplay::_fitscreen(w1,h1,1,128,-85,true),false); key = 0; > for (unsigned int timer = 0; !key && !disp.is_closed() && !disp.button(); ) { > if (disp.is_resized()) disp.resize(false); > if (!timer) { > visu.get_slice((int)_XYZ[2]).display(disp.set_title("%s | z=%d",dtitle.data(),_XYZ[2])); > (++_XYZ[2])%=visu._depth; > } > if (!is_stopped) { if (++timer>(unsigned int)frame_timing) timer = 0; } else timer = ~0U; > if (disp.wheel()) { frame_timing-=disp.wheel()/3.0f; disp.set_wheel(); } > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyPAGEUP : frame_timing-=0.3f; key = 0; break; > case cimg::keyPAGEDOWN : frame_timing+=0.3f; key = 0; break; > case cimg::keySPACE : is_stopped = !is_stopped; disp.set_key(key,false); key = 0; break; > case cimg::keyARROWLEFT : case cimg::keyARROWUP : is_stopped = true; timer = 0; key = 0; break; > case cimg::keyARROWRIGHT : case cimg::keyARROWDOWN : is_stopped = true; (_XYZ[2]+=visu._depth-2)%=visu._depth; timer = 0; key = 0; break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false); > disp.set_key(key,false); key = 0; > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false).set_key(key,false); key = 0; > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),false).set_key(key,false); key = 0; > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen().set_key(key,false); key = 0; > } break; > } > frame_timing = frame_timing<1?1:(frame_timing>39?39:frame_timing); > disp.wait(20); > } > const unsigned int > w2 = (visu._width + (visu._depth>1?visu._depth:0))*disp.width()/visu._width, > h2 = (visu._height + (visu._depth>1?visu._depth:0))*disp.height()/visu._height; > disp.resize(CImgDisplay::_fitscreen(w2,h2,1,128,-85,false),CImgDisplay::_fitscreen(w2,h2,1,128,-85,true),false).set_title(dtitle.data()).set_key().set_button().set_wheel(); > key = 0; > } break; > case cimg::keyHOME : reset_view = resize_disp = true; key = 0; break; > case cimg::keyPADADD : go_in = true; go_in_center = true; key = 0; break; > case cimg::keyPADSUB : go_out = true; key = 0; break; > case cimg::keyARROWLEFT : case cimg::keyPAD4: go_left = true; key = 0; break; > case cimg::keyARROWRIGHT : case cimg::keyPAD6: go_right = true; key = 0; break; > case cimg::keyARROWUP : case cimg::keyPAD8: go_up = true; key = 0; break; > case cimg::keyARROWDOWN : case cimg::keyPAD2: go_down = true; key = 0; break; > case cimg::keyPAD7 : go_up = go_left = true; key = 0; break; > case cimg::keyPAD9 : go_up = go_right = true; key = 0; break; > case cimg::keyPAD1 : go_down = go_left = true; key = 0; break; > case cimg::keyPAD3 : go_down = go_right = true; key = 0; break; > case cimg::keyPAGEUP : go_inc = true; key = 0; break; > case cimg::keyPAGEDOWN : go_dec = true; key = 0; break; > } > if (go_in) { > const int > mx = go_in_center?disp.width()/2:disp.mouse_x(), > my = go_in_center?disp.height()/2:disp.mouse_y(), > mX = mx*(_width+(_depth>1?_depth:0))/disp.width(), > mY = my*(_height+(_depth>1?_depth:0))/disp.height(); > int X = _XYZ[0], Y = _XYZ[1], Z = _XYZ[2]; > if (mX<width() && mY<height()) { X = x0 + mX*(1+x1-x0)/_width; Y = y0 + mY*(1+y1-y0)/_height; Z = _XYZ[2]; } > if (mX<width() && mY>=height()) { X = x0 + mX*(1+x1-x0)/_width; Z = z0 + (mY-_height)*(1+z1-z0)/_depth; Y = _XYZ[1]; } > if (mX>=width() && mY<height()) { Y = y0 + mY*(1+y1-y0)/_height; Z = z0 + (mX-_width)*(1+z1-z0)/_depth; X = _XYZ[0]; } > if (x1-x0>4) { x0 = X - 7*(X-x0)/8; x1 = X + 7*(x1-X)/8; } > if (y1-y0>4) { y0 = Y - 7*(Y-y0)/8; y1 = Y + 7*(y1-Y)/8; } > if (z1-z0>4) { z0 = Z - 7*(Z-z0)/8; z1 = Z + 7*(z1-Z)/8; } > } > if (go_out) { > const int > delta_x = (x1-x0)/8, delta_y = (y1-y0)/8, delta_z = (z1-z0)/8, > ndelta_x = delta_x?delta_x:(_width>1?1:0), > ndelta_y = delta_y?delta_y:(_height>1?1:0), > ndelta_z = delta_z?delta_z:(_depth>1?1:0); > x0-=ndelta_x; y0-=ndelta_y; z0-=ndelta_z; > x1+=ndelta_x; y1+=ndelta_y; z1+=ndelta_z; > if (x0<0) { x1-=x0; x0 = 0; if (x1>=width()) x1 = width() - 1; } > if (y0<0) { y1-=y0; y0 = 0; if (y1>=height()) y1 = height() - 1; } > if (z0<0) { z1-=z0; z0 = 0; if (z1>=depth()) z1 = depth() - 1; } > if (x1>=width()) { x0-=(x1-width()+1); x1 = width()-1; if (x0<0) x0 = 0; } > if (y1>=height()) { y0-=(y1-height()+1); y1 = height()-1; if (y0<0) y0 = 0; } > if (z1>=depth()) { z0-=(z1-depth()+1); z1 = depth()-1; if (z0<0) z0 = 0; } > } > if (go_left) { > const int delta = (x1-x0)/5, ndelta = delta?delta:(_width>1?1:0); > if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } > else { x1-=x0; x0 = 0; } > } > if (go_right) { > const int delta = (x1-x0)/5, ndelta = delta?delta:(_width>1?1:0); > if (x1+ndelta<width()) { x0+=ndelta; x1+=ndelta; } > else { x0+=(width()-1-x1); x1 = width()-1; } > } > if (go_up) { > const int delta = (y1-y0)/5, ndelta = delta?delta:(_height>1?1:0); > if (y0-ndelta>=0) { y0-=ndelta; y1-=ndelta; } > else { y1-=y0; y0 = 0; } > } > if (go_down) { > const int delta = (y1-y0)/5, ndelta = delta?delta:(_height>1?1:0); > if (y1+ndelta<height()) { y0+=ndelta; y1+=ndelta; } > else { y0+=(height()-1-y1); y1 = height()-1; } > } > if (go_inc) { > const int delta = (z1-z0)/5, ndelta = delta?delta:(_depth>1?1:0); > if (z0-ndelta>=0) { z0-=ndelta; z1-=ndelta; } > else { z1-=z0; z0 = 0; } > } > if (go_dec) { > const int delta = (z1-z0)/5, ndelta = delta?delta:(_depth>1?1:0); > if (z1+ndelta<depth()) { z0+=ndelta; z1+=ndelta; } > else { z0+=(depth()-1-z1); z1 = depth()-1; } > } > disp.wait(100); > } > disp.set_key(key); > if (XYZ) { XYZ[0] = _XYZ[0]; XYZ[1] = _XYZ[1]; XYZ[2] = _XYZ[2]; } > return *this; > } ># 39705 "./CImg.h" > template<typename tp, typename tf, typename tc, typename to> > const CImg<T>& display_object3d(CImgDisplay& disp, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return _display_object3d(disp,0,vertices,primitives,colors,opacities,centering,render_static, > render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf, typename tc, typename to> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > CImgDisplay disp; > return _display_object3d(disp,title,vertices,primitives,colors,opacities,centering,render_static, > render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf, typename tc> > const CImg<T>& display_object3d(CImgDisplay &disp, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(disp,vertices,primitives,colors,CImgList<floatT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf, typename tc> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(title,vertices,primitives,colors,CImgList<floatT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp, typename tf> > const CImg<T>& display_object3d(CImgDisplay &disp, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(disp,vertices,primitives,CImgList<T>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > > template<typename tp, typename tf> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(title,vertices,primitives,CImgList<T>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp> > const CImg<T>& display_object3d(CImgDisplay &disp, > const CImg<tp>& vertices, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(disp,vertices,CImgList<uintT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > > template<typename tp> > const CImg<T>& display_object3d(const char *const title, > const CImg<tp>& vertices, > const bool centering=true, > const int render_static=4, const int render_motion=1, > const bool is_double_sided=true, const float focale=700, > const float light_x=0, const float light_y=0, const float light_z=-5e8f, > const float specular_lightness=0.2f, const float specular_shininess=0.1f, > const bool display_axes=true, float *const pose_matrix=0) const { > return display_object3d(title,vertices,CImgList<uintT>(),centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > > template<typename tp, typename tf, typename tc, typename to> > const CImg<T>& _display_object3d(CImgDisplay& disp, const char *const title, > const CImg<tp>& vertices, > const CImgList<tf>& primitives, > const CImgList<tc>& colors, > const to& opacities, > const bool centering, > const int render_static, const int render_motion, > const bool is_double_sided, const float focale, > const float light_x, const float light_y, const float light_z, > const float specular_lightness, const float specular_shininess, > const bool display_axes, float *const pose_matrix) const { > typedef typename cimg::superset<tp,float>::type tpfloat; > > > if (is_empty()) { > if (disp) return CImg<T>(disp.width(),disp.height(),1,(colors && colors[0].size()==1)?1:3,0). > _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > else return CImg<T>(1,2,1,1,64,128).resize(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true), > 1,(colors && colors[0].size()==1)?1:3,3). > _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } else { if (disp) disp.resize(*this,false); } > char error_message[1024] = { 0 }; > if (!vertices.is_object3d(primitives,colors,opacities,true,error_message)) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "display_object3d(): Invalid specified 3d object (%u,%u) (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(),vertices._width,primitives._width,error_message); > if (vertices._width && !primitives) { > CImgList<tf> nprimitives(vertices._width,1,1,1,1); > for (int l = 0; l<(int)(nprimitives)._width; ++l) nprimitives(l,0) = l; > return _display_object3d(disp,title,vertices,nprimitives,colors,opacities,centering, > render_static,render_motion,is_double_sided,focale, > light_x,light_y,light_z,specular_lightness,specular_shininess, > display_axes,pose_matrix); > } > if (!disp) { > disp.assign(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),title?title:0,3); > if (!title) disp.set_title("CImg<%s> (%u vertices, %u primitives)",pixel_type(),vertices._width,primitives._width); > } else if (title) disp.set_title("%s",title); > > > CImg<floatT> > pose, > rotated_vertices(vertices._width,3), > bbox_vertices, rotated_bbox_vertices, > axes_vertices, rotated_axes_vertices, > bbox_opacities, axes_opacities; > CImgList<uintT> bbox_primitives, axes_primitives; > CImgList<tf> reverse_primitives; > CImgList<T> bbox_colors, bbox_colors2, axes_colors; > unsigned int ns_width = 0, ns_height = 0; > int _is_double_sided = (int)is_double_sided; > bool ndisplay_axes = display_axes; > const CImg<T> > background_color(1,1,1,_spectrum,0), > foreground_color(1,1,1,_spectrum,255); > float > Xoff = 0, Yoff = 0, Zoff = 0, sprite_scale = 1, > xm = 0, xM = vertices?vertices.get_shared_row(0).max_min(xm):0, > ym = 0, yM = vertices?vertices.get_shared_row(1).max_min(ym):0, > zm = 0, zM = vertices?vertices.get_shared_row(2).max_min(zm):0; > const float delta = cimg::max(xM-xm,yM-ym,zM-zm); > > rotated_bbox_vertices = bbox_vertices.assign(8,3,1,1, > xm,xM,xM,xm,xm,xM,xM,xm, > ym,ym,yM,yM,ym,ym,yM,yM, > zm,zm,zm,zm,zM,zM,zM,zM); > bbox_primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 1,2,6,5, 0,4,7,3, 0,1,5,4, 2,3,7,6); > bbox_colors.assign(6,_spectrum,1,1,1,background_color[0]); > bbox_colors2.assign(6,_spectrum,1,1,1,foreground_color[0]); > bbox_opacities.assign(bbox_colors._width,1,1,1,0.3f); > > rotated_axes_vertices = axes_vertices.assign(7,3,1,1, > 0,20,0,0,22,-6,-6, > 0,0,20,0,-6,22,-6, > 0,0,0,20,0,0,22); > axes_opacities.assign(3,1,1,1,1); > axes_colors.assign(3,_spectrum,1,1,1,foreground_color[0]); > axes_primitives.assign(3,1,2,1,1, 0,1, 0,2, 0,3); > > > CImg<T> visu0(*this), visu; > CImg<tpfloat> zbuffer(visu0.width(),visu0.height(),1,1,0); > bool init_pose = true, clicked = false, redraw = true; > unsigned int key = 0; > int > x0 = 0, y0 = 0, x1 = 0, y1 = 0, > nrender_static = render_static, > nrender_motion = render_motion; > disp.show().flush(); > > while (!disp.is_closed() && !key) { > > > if (init_pose) { > const float > ratio = delta>0?(2.0f*cimg::min(disp.width(),disp.height())/(3.0f*delta)):1, > dx = (xM + xm)/2, dy = (yM + ym)/2, dz = (zM + zm)/2; > if (centering) > CImg<floatT>(4,3,1,1, ratio,0.,0.,-ratio*dx, 0.,ratio,0.,-ratio*dy, 0.,0.,ratio,-ratio*dz).move_to(pose); > else CImg<floatT>(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose); > if (pose_matrix) { > CImg<floatT> pose0(pose_matrix,4,3,1,1,false); > pose0.resize(4,4,1,1,0); pose.resize(4,4,1,1,0); > pose0(3,3) = pose(3,3) = 1; > (pose0*pose).get_crop(0,0,3,2).move_to(pose); > Xoff = pose_matrix[12]; Yoff = pose_matrix[13]; Zoff = pose_matrix[14]; sprite_scale = pose_matrix[15]; > } else { Xoff = Yoff = Zoff = 0; sprite_scale = 1; } > init_pose = false; > redraw = true; > } > > > if (redraw) { > const float > r00 = pose(0,0), r10 = pose(1,0), r20 = pose(2,0), r30 = pose(3,0), > r01 = pose(0,1), r11 = pose(1,1), r21 = pose(2,1), r31 = pose(3,1), > r02 = pose(0,2), r12 = pose(1,2), r22 = pose(2,2), r32 = pose(3,2); > if ((clicked && nrender_motion>=0) || (!clicked && nrender_static>=0)) > for (int l = 0; l<(int)((vertices)._width); ++l) { > const float x = (float)vertices(l,0), y = (float)vertices(l,1), z = (float)vertices(l,2); > rotated_vertices(l,0) = r00*x + r10*y + r20*z + r30; > rotated_vertices(l,1) = r01*x + r11*y + r21*z + r31; > rotated_vertices(l,2) = r02*x + r12*y + r22*z + r32; > } > else for (int l = 0; l<(int)((bbox_vertices)._width); ++l) { > const float x = bbox_vertices(l,0), y = bbox_vertices(l,1), z = bbox_vertices(l,2); > rotated_bbox_vertices(l,0) = r00*x + r10*y + r20*z + r30; > rotated_bbox_vertices(l,1) = r01*x + r11*y + r21*z + r31; > rotated_bbox_vertices(l,2) = r02*x + r12*y + r22*z + r32; > } > > > > const bool render_with_zbuffer = true; > > > > visu = visu0; > if ((clicked && nrender_motion<0) || (!clicked && nrender_static<0)) > visu.draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, > rotated_bbox_vertices,bbox_primitives,bbox_colors,bbox_opacities,2,false,focale). > draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, > rotated_bbox_vertices,bbox_primitives,bbox_colors2,1,false,focale); > else visu._draw_object3d((void*)0,render_with_zbuffer?zbuffer.fill(0):CImg<tpfloat>::empty(), > Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, > rotated_vertices,reverse_primitives?reverse_primitives:primitives, > colors,opacities,clicked?nrender_motion:nrender_static,_is_double_sided==1,focale, > width()/2.0f+light_x,height()/2.0f+light_y,light_z+Zoff,specular_lightness,specular_shininess, > sprite_scale); > > if (ndisplay_axes) { > const float > n = (float)std::sqrt(1e-8 + r00*r00 + r01*r01 + r02*r02), > _r00 = r00/n, _r10 = r10/n, _r20 = r20/n, > _r01 = r01/n, _r11 = r11/n, _r21 = r21/n, > _r02 = r01/n, _r12 = r12/n, _r22 = r22/n, > Xaxes = 25, Yaxes = visu._height - 38.0f; > for (int l = 0; l<(int)((axes_vertices)._width); ++l) { > const float > x = axes_vertices(l,0), > y = axes_vertices(l,1), > z = axes_vertices(l,2); > rotated_axes_vertices(l,0) = _r00*x + _r10*y + _r20*z; > rotated_axes_vertices(l,1) = _r01*x + _r11*y + _r21*z; > rotated_axes_vertices(l,2) = _r02*x + _r12*y + _r22*z; > } > axes_opacities(0,0) = (rotated_axes_vertices(1,2)>0)?0.5f:1.0f; > axes_opacities(1,0) = (rotated_axes_vertices(2,2)>0)?0.5f:1.0f; > axes_opacities(2,0) = (rotated_axes_vertices(3,2)>0)?0.5f:1.0f; > visu.draw_object3d(Xaxes,Yaxes,0,rotated_axes_vertices,axes_primitives,axes_colors,axes_opacities,1,false,focale). > draw_text((int)(Xaxes+rotated_axes_vertices(4,0)), > (int)(Yaxes+rotated_axes_vertices(4,1)), > "X",axes_colors[0]._data,0,axes_opacities(0,0),13). > draw_text((int)(Xaxes+rotated_axes_vertices(5,0)), > (int)(Yaxes+rotated_axes_vertices(5,1)), > "Y",axes_colors[1]._data,0,axes_opacities(1,0),13). > draw_text((int)(Xaxes+rotated_axes_vertices(6,0)), > (int)(Yaxes+rotated_axes_vertices(6,1)), > "Z",axes_colors[2]._data,0,axes_opacities(2,0),13); > } > visu.display(disp); > if (!clicked || nrender_motion==nrender_static) redraw = false; > } > > > disp.wait(); > if ((disp.button() || disp.wheel()) && disp.mouse_x()>=0 && disp.mouse_y()>=0) { > redraw = true; > if (!clicked) { x0 = x1 = disp.mouse_x(); y0 = y1 = disp.mouse_y(); if (!disp.wheel()) clicked = true; } > else { x1 = disp.mouse_x(); y1 = disp.mouse_y(); } > if (disp.button()&1) { > const float > R = 0.45f*cimg::min(disp.width(),disp.height()), > R2 = R*R, > u0 = (float)(x0-disp.width()/2), > v0 = (float)(y0-disp.height()/2), > u1 = (float)(x1-disp.width()/2), > v1 = (float)(y1-disp.height()/2), > n0 = (float)std::sqrt(u0*u0+v0*v0), > n1 = (float)std::sqrt(u1*u1+v1*v1), > nu0 = n0>R?(u0*R/n0):u0, > nv0 = n0>R?(v0*R/n0):v0, > nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), > nu1 = n1>R?(u1*R/n1):u1, > nv1 = n1>R?(v1*R/n1):v1, > nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), > u = nv0*nw1-nw0*nv1, > v = nw0*nu1-nu0*nw1, > w = nv0*nu1-nu0*nv1, > n = (float)std::sqrt(u*u+v*v+w*w), > alpha = (float)std::asin(n/R2); > (CImg<floatT>::rotation_matrix(u,v,w,alpha)*pose).move_to(pose); > x0 = x1; y0 = y1; > } > if (disp.button()&2) { > if (focale>0) Zoff-=(y0-y1)*focale/400; > else { const float s = std::exp((y0-y1)/400.0f); pose*=s; sprite_scale*=s; } > x0 = x1; y0 = y1; > } > if (disp.wheel()) { > if (focale>0) Zoff-=disp.wheel()*focale/20; > else { const float s = std::exp(disp.wheel()/20.0f); pose*=s; sprite_scale*=s; } > disp.set_wheel(); > } > if (disp.button()&4) { Xoff+=(x1-x0); Yoff+=(y1-y0); x0 = x1; y0 = y1; } > if ((disp.button()&1) && (disp.button()&2)) { > init_pose = true; disp.set_button(); x0 = x1; y0 = y1; > pose = CImg<floatT>(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0); > } > } else if (clicked) { x0 = x1; y0 = y1; clicked = false; redraw = true; } > > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case 0 : case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyD: if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,false),CImgDisplay::_fitscreen(_width,_height,_depth,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > if (!ns_width || !ns_height || > ns_width>(unsigned int)disp.screen_width() || ns_height>(unsigned int)disp.screen_height()) { > ns_width = disp.screen_width()*3U/4; > ns_height = disp.screen_height()*3U/4; > } > if (disp.is_fullscreen()) disp.resize(ns_width,ns_height,false); > else { > ns_width = (unsigned int)disp.width(); ns_height = disp.height(); > disp.resize(disp.screen_width(),disp.screen_height(),false); > } > disp.toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); key = 0; > } break; > case cimg::keyT : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > if (--_is_double_sided==-2) _is_double_sided = 1; > if (_is_double_sided>=0) reverse_primitives.assign(); > else primitives.get_reverse_object3d().move_to(reverse_primitives); > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyZ : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > if (zbuffer) zbuffer.assign(); > else zbuffer.assign(visu0.width(),visu0.height(),1,1,0); > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > ndisplay_axes = !ndisplay_axes; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF1 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==0 && nrender_motion!=0)?0:-1; nrender_static = 0; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF2 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==1 && nrender_motion!=1)?1:-1; nrender_static = 1; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF3 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==2 && nrender_motion!=2)?2:-1; nrender_static = 2; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF4 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==3 && nrender_motion!=3)?3:-1; nrender_static = 3; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF5 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==4 && nrender_motion!=4)?4:-1; nrender_static = 4; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyF6 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > nrender_motion = (nrender_static==5 && nrender_motion!=5)?5:-1; nrender_static = 5; > disp.set_key(key,false); key = 0; redraw = true; > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"gmic" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu).draw_text(0,0," Saving snapshot... ",foreground_color._data,background_color._data,0.7f,13).display(disp); > visu.save(filename); > (+visu).draw_text(0,0," Snapshot '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; > case cimg::keyG : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"gmic" "_%.4u.off",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu).draw_text(0,0," Saving object... ",foreground_color._data,background_color._data,0.7f,13).display(disp); > vertices.save_off(reverse_primitives?reverse_primitives:primitives,colors,filename); > (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; > case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > snprintf(filename,sizeof(filename),"gmic" "_%.4u.cimgz",snap_number++); > > > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu).draw_text(0,0," Saving object... ",foreground_color._data,background_color._data,0.7f,13).display(disp); > vertices.get_object3dtoCImg3d(reverse_primitives?reverse_primitives:primitives,colors,opacities).save(filename); > (+visu).draw_text(0,0," Object '%s' saved. ",foreground_color._data,background_color._data,0.7f,13,filename).display(disp); > disp.set_key(key,false); key = 0; > } break; ># 40243 "./CImg.h" > } > if (disp.is_resized()) { > disp.resize(false); visu0 = get_resize(disp,1); > if (zbuffer) zbuffer.assign(disp.width(),disp.height()); > redraw = true; > } > } > if (pose_matrix) { > std::memcpy(pose_matrix,pose._data,12*sizeof(float)); > pose_matrix[12] = Xoff; pose_matrix[13] = Yoff; pose_matrix[14] = Zoff; pose_matrix[15] = sprite_scale; > } > disp.set_button().set_key(key); > return *this; > } ># 40270 "./CImg.h" > const CImg<T>& display_graph(CImgDisplay &disp, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > return _display_graph(disp,0,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); > } > > > const CImg<T>& display_graph(const char *const title=0, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > CImgDisplay disp; > return _display_graph(disp,title,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); > } > > const CImg<T>& _display_graph(CImgDisplay &disp, const char *const title=0, > const unsigned int plot_type=1, const unsigned int vertex_type=1, > const char *const labelx=0, const double xmin=0, const double xmax=0, > const char *const labely=0, const double ymin=0, const double ymax=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "display_graph(): Empty instance.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!disp) disp.assign(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),0,0). > set_title(title?"%s":"CImg<%s>",title?title:pixel_type()); > const unsigned long siz = (unsigned long)_width*_height*_depth, siz1 = cimg::max(1U,siz-1); > const unsigned int old_normalization = disp.normalization(); > disp.show().flush()._normalization = 0; > > double y0 = ymin, y1 = ymax, nxmin = xmin, nxmax = xmax; > if (nxmin==nxmax) { nxmin = 0; nxmax = siz1; } > int x0 = 0, x1 = width()*height()*depth() - 1, key = 0; > > for (bool reset_view = true, resize_disp = false; !key && !disp.is_closed(); ) { > if (reset_view) { x0 = 0; x1 = width()*height()*depth()-1; y0 = ymin; y1 = ymax; reset_view = false; } > CImg<T> zoom(x1-x0+1,1,1,spectrum()); > for (int c = 0; c<(int)((*this)._spectrum); ++c) zoom.get_shared_channel(c) = CImg<T>(data(x0,0,0,c),x1-x0+1,1,1,1,true); > > if (y0==y1) { y0 = zoom.min_max(y1); const double dy = y1 - y0; y0-=dy/20; y1+=dy/20; } > if (y0==y1) { --y0; ++y1; } > const CImg<intT> selection = zoom.get_select_graph(disp,plot_type,vertex_type, > labelx, > nxmin + x0*(nxmax-nxmin)/siz1, > nxmin + x1*(nxmax-nxmin)/siz1, > labely,y0,y1); > const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); > if (selection[0]>=0) { > if (selection[2]<0) reset_view = true; > else { > x1 = x0 + selection[2]; x0+=selection[0]; > if (selection[1]>=0 && selection[3]>=0) { > y0 = y1 - selection[3]*(y1-y0)/(disp.height()-32); > y1-=selection[1]*(y1-y0)/(disp.height()-32); > } > } > } else { > bool go_in = false, go_out = false, go_left = false, go_right = false, go_up = false, go_down = false; > switch (key = disp.key()) { > case cimg::keyHOME : reset_view = resize_disp = true; key = 0; disp.set_key(); break; > case cimg::keyPADADD : go_in = true; go_out = false; key = 0; disp.set_key(); break; > case cimg::keyPADSUB : go_out = true; go_in = false; key = 0; disp.set_key(); break; > case cimg::keyARROWLEFT : case cimg::keyPAD4 : go_left = true; go_right = false; key = 0; disp.set_key(); break; > case cimg::keyARROWRIGHT : case cimg::keyPAD6 : go_right = true; go_left = false; key = 0; disp.set_key(); break; > case cimg::keyARROWUP : case cimg::keyPAD8 : go_up = true; go_down = false; key = 0; disp.set_key(); break; > case cimg::keyARROWDOWN : case cimg::keyPAD2 : go_down = true; go_up = false; key = 0; disp.set_key(); break; > case cimg::keyPAD7 : go_left = true; go_up = true; key = 0; disp.set_key(); break; > case cimg::keyPAD9 : go_right = true; go_up = true; key = 0; disp.set_key(); break; > case cimg::keyPAD1 : go_left = true; go_down = true; key = 0; disp.set_key(); break; > case cimg::keyPAD3 : go_right = true; go_down = true; key = 0; disp.set_key(); break; > } > if (disp.wheel()) { > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) go_out = !(go_in = disp.wheel()>0); > else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) go_left = !(go_right = disp.wheel()>0); > else go_up = !(go_down = disp.wheel()<0); > key = 0; > } > > if (go_in) { > const int > xsiz = x1 - x0, > mx = (mouse_x-16)*xsiz/(disp.width()-32), > cx = x0 + (mx<0?0:(mx>=xsiz?xsiz:mx)); > if (x1-x0>4) { > x0 = cx - 7*(cx-x0)/8; x1 = cx + 7*(x1-cx)/8; > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > const double > ysiz = y1 - y0, > my = (mouse_y-16)*ysiz/(disp.height()-32), > cy = y1 - (my<0?0:(my>=ysiz?ysiz:my)); > y0 = cy - 7*(cy-y0)/8; y1 = cy + 7*(y1-cy)/8; > } else y0 = y1 = 0; > } > } > if (go_out) { > if (x0>0 || x1<(int)siz1) { > const int delta_x = (x1-x0)/8, ndelta_x = delta_x?delta_x:(siz>1?1:0); > const double ndelta_y = (y1-y0)/8; > x0-=ndelta_x; x1+=ndelta_x; > y0-=ndelta_y; y1+=ndelta_y; > if (x0<0) { x1-=x0; x0 = 0; if (x1>=(int)siz) x1 = (int)siz1; } > if (x1>=(int)siz) { x0-=(x1-siz1); x1 = (int)siz1; if (x0<0) x0 = 0; } > } > } > if (go_left) { > const int delta = (x1-x0)/5, ndelta = delta?delta:1; > if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } > else { x1-=x0; x0 = 0; } > go_left = false; > } > if (go_right) { > const int delta = (x1-x0)/5, ndelta = delta?delta:1; > if (x1+ndelta<(int)siz) { x0+=ndelta; x1+=ndelta; } > else { x0+=(siz1-x1); x1 = siz1; } > go_right = false; > } > if (go_up) { > const double delta = (y1-y0)/10, ndelta = delta?delta:1; > y0+=ndelta; y1+=ndelta; > go_up = false; > } > if (go_down) { > const double delta = (y1-y0)/10, ndelta = delta?delta:1; > y0-=ndelta; y1-=ndelta; > go_down = false; > } > } > } > disp._normalization = old_normalization; > return *this; > } ># 40412 "./CImg.h" > const CImg<T>& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > > const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); > const char *const ext = cimg::split_filename(filename); > char nfilename[1024] = { 0 }; > const char *const fn = is_stdout?filename:(number>=0)?cimg::number_filename(filename,number,digits,nfilename):filename; ># 40451 "./CImg.h" > if (!cimg::strcasecmp(ext,"asc")) return save_ascii(fn); > else if (!cimg::strcasecmp(ext,"dlm") || > !cimg::strcasecmp(ext,"txt")) return save_dlm(fn); > else if (!cimg::strcasecmp(ext,"cpp") || > !cimg::strcasecmp(ext,"hpp") || > !cimg::strcasecmp(ext,"h") || > !cimg::strcasecmp(ext,"c")) return save_cpp(fn); > > > else if (!cimg::strcasecmp(ext,"bmp")) return save_bmp(fn); > else if (!cimg::strcasecmp(ext,"jpg") || > !cimg::strcasecmp(ext,"jpeg") || > !cimg::strcasecmp(ext,"jpe") || > !cimg::strcasecmp(ext,"jfif") || > !cimg::strcasecmp(ext,"jif")) return save_jpeg(fn); > else if (!cimg::strcasecmp(ext,"rgb")) return save_rgb(fn); > else if (!cimg::strcasecmp(ext,"rgba")) return save_rgba(fn); > else if (!cimg::strcasecmp(ext,"png")) return save_png(fn); > else if (!cimg::strcasecmp(ext,"pgm") || > !cimg::strcasecmp(ext,"ppm") || > !cimg::strcasecmp(ext,"pnm")) return save_pnm(fn); > else if (!cimg::strcasecmp(ext,"pnk")) return save_pnk(fn); > else if (!cimg::strcasecmp(ext,"pfm")) return save_pfm(fn); > else if (!cimg::strcasecmp(ext,"exr")) return save_exr(fn); > else if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); > > > else if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); > else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); > else if (!cimg::strcasecmp(ext,"dcm")) return save_medcon_external(fn); > else if (!cimg::strcasecmp(ext,"hdr") || > !cimg::strcasecmp(ext,"nii")) return save_analyze(fn); > else if (!cimg::strcasecmp(ext,"inr")) return save_inr(fn); > else if (!cimg::strcasecmp(ext,"mnc")) return save_minc2(fn); > else if (!cimg::strcasecmp(ext,"pan")) return save_pandore(fn); > else if (!cimg::strcasecmp(ext,"raw")) return save_raw(fn); > > > else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); > > > else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,true); > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) return save_ffmpeg(fn); > return save_other(fn); > } > > > > > > const CImg<T>& save_ascii(const char *const filename) const { > return _save_ascii(0,filename); > } > > > const CImg<T>& save_ascii(std::FILE *const file) const { > return _save_ascii(file,0); > } > > const CImg<T>& _save_ascii(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ascii(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > std::fprintf(nfile,"%u %u %u %u\n",_width,_height,_depth,_spectrum); > const T* ptrs = _data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) std::fprintf(nfile,"%.16g ",(double)*(ptrs++)); > std::fputc('\n',nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_cpp(const char *const filename) const { > return _save_cpp(0,filename); > } > > > const CImg<T>& save_cpp(std::FILE *const file) const { > return _save_cpp(file,0); > } > > const CImg<T>& _save_cpp(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_cpp(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > char varname[1024] = { 0 }; > if (filename) std::sscanf(cimg::basename(filename),"%1023[a-zA-Z0-9_]",varname); > if (!*varname) snprintf(varname,sizeof(varname),"unnamed"); > std::fprintf(nfile, > "/* Define image '%s' of size %ux%ux%ux%u and type '%s' */\n" > "%s data_%s[] = { %s\n ", > varname,_width,_height,_depth,_spectrum,pixel_type(),pixel_type(),varname, > is_empty()?"};":""); > if (!is_empty()) for (unsigned long off = 0, siz = size()-1; off<=siz; ++off) { > std::fprintf(nfile,cimg::type<T>::format(),cimg::type<T>::format((*this)[off])); > if (off==siz) std::fprintf(nfile," };\n"); > else if (!((off+1)%16)) std::fprintf(nfile,",\n "); > else std::fprintf(nfile,", "); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_dlm(const char *const filename) const { > return _save_dlm(0,filename); > } > > > const CImg<T>& save_dlm(std::FILE *const file) const { > return _save_dlm(file,0); > } > > const CImg<T>& _save_dlm(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_dlm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_dlm(): Instance is volumetric, values along Z will be unrolled in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_dlm(): Instance is multispectral, values along C will be unrolled in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > const T* ptrs = _data; > for (int c = 0; c<(int)((*this)._spectrum); ++c) for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) std::fprintf(nfile,"%.16g%s",(double)*(ptrs++),(x==width()-1)?"":","); > std::fputc('\n',nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_bmp(const char *const filename) const { > return _save_bmp(0,filename); > } > > > const CImg<T>& save_bmp(std::FILE *const file) const { > return _save_bmp(file,0); > } > > const CImg<T>& _save_bmp(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_bmp(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_bmp(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_bmp(): Instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > unsigned char header[54] = { 0 }, align_buf[4] = { 0 }; > const unsigned int > align = (4 - (3*_width)%4)%4, > buf_size = (3*_width + align)*height(), > file_size = 54 + buf_size; > header[0] = 'B'; header[1] = 'M'; > header[0x02] = file_size&0xFF; > header[0x03] = (file_size>>8)&0xFF; > header[0x04] = (file_size>>16)&0xFF; > header[0x05] = (file_size>>24)&0xFF; > header[0x0A] = 0x36; > header[0x0E] = 0x28; > header[0x12] = _width&0xFF; > header[0x13] = (_width>>8)&0xFF; > header[0x14] = (_width>>16)&0xFF; > header[0x15] = (_width>>24)&0xFF; > header[0x16] = _height&0xFF; > header[0x17] = (_height>>8)&0xFF; > header[0x18] = (_height>>16)&0xFF; > header[0x19] = (_height>>24)&0xFF; > header[0x1A] = 1; > header[0x1B] = 0; > header[0x1C] = 24; > header[0x1D] = 0; > header[0x22] = buf_size&0xFF; > header[0x23] = (buf_size>>8)&0xFF; > header[0x24] = (buf_size>>16)&0xFF; > header[0x25] = (buf_size>>24)&0xFF; > header[0x27] = 0x1; > header[0x2B] = 0x1; > cimg::fwrite(header,54,nfile); > > const T > *ptr_r = data(0,_height-1,0,0), > *ptr_g = (_spectrum>=2)?data(0,_height-1,0,1):0, > *ptr_b = (_spectrum>=3)?data(0,_height-1,0,2):0; > > switch (_spectrum) { > case 1 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) { > const unsigned char val = (unsigned char)*(ptr_r++); > std::fputc(val,nfile); std::fputc(val,nfile); std::fputc(val,nfile); > } > cimg::fwrite(align_buf,align,nfile); > ptr_r-=2*_width; > } > } break; > case 2 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) { > std::fputc(0,nfile); > std::fputc((unsigned char)(*(ptr_g++)),nfile); > std::fputc((unsigned char)(*(ptr_r++)),nfile); > } > cimg::fwrite(align_buf,align,nfile); > ptr_r-=2*_width; ptr_g-=2*_width; > } > } break; > default : { > for (int y = 0; y<(int)((*this)._height); ++y) { > for (int x = 0; x<(int)((*this)._width); ++x) { > std::fputc((unsigned char)(*(ptr_b++)),nfile); > std::fputc((unsigned char)(*(ptr_g++)),nfile); > std::fputc((unsigned char)(*(ptr_r++)),nfile); > } > cimg::fwrite(align_buf,align,nfile); > ptr_r-=2*_width; ptr_g-=2*_width; ptr_b-=2*_width; > } > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImg<T>& save_jpeg(const char *const filename, const unsigned int quality=100) const { > return _save_jpeg(0,filename,quality); > } > > > const CImg<T>& save_jpeg(std::FILE *const file, const unsigned int quality=100) const { > return _save_jpeg(file,0,quality); > } > > const CImg<T>& _save_jpeg(std::FILE *const file, const char *const filename, const unsigned int quality) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_jpeg(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_jpeg(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > > > > > > > unsigned int dimbuf = 0; > J_COLOR_SPACE colortype = JCS_RGB; > > switch(_spectrum) { > case 1 : dimbuf = 1; colortype = JCS_GRAYSCALE; break; > case 2 : dimbuf = 3; colortype = JCS_RGB; break; > case 3 : dimbuf = 3; colortype = JCS_RGB; break; > default : dimbuf = 4; colortype = JCS_CMYK; break; > } > > > struct jpeg_compress_struct cinfo; > struct jpeg_error_mgr jerr; > cinfo.err = jpeg_std_error(&jerr); > jpeg_CreateCompress((&cinfo), 62, (size_t) sizeof(struct jpeg_compress_struct)); > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > jpeg_stdio_dest(&cinfo,nfile); > cinfo.image_width = _width; > cinfo.image_height = _height; > cinfo.input_components = dimbuf; > cinfo.in_color_space = colortype; > jpeg_set_defaults(&cinfo); > jpeg_set_quality(&cinfo,quality<100?quality:100,1); > jpeg_start_compress(&cinfo,1); > > JSAMPROW row_pointer[1]; > CImg<ucharT> buffer((unsigned long)_width*dimbuf); > > while (cinfo.next_scanline<cinfo.image_height) { > unsigned char *ptrd = buffer._data; > > > switch (_spectrum) { > case 1 : { > const T *ptr_g = data(0, cinfo.next_scanline); > for(unsigned int b = 0; b < cinfo.image_width; b++) > *(ptrd++) = (unsigned char)*(ptr_g++); > } break; > case 2 : { > const T *ptr_r = data(0,cinfo.next_scanline,0,0), > *ptr_g = data(0,cinfo.next_scanline,0,1); > for(unsigned int b = 0; b < cinfo.image_width; ++b) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = 0; > } > } break; > case 3 : { > const T *ptr_r = data(0,cinfo.next_scanline,0,0), > *ptr_g = data(0,cinfo.next_scanline,0,1), > *ptr_b = data(0,cinfo.next_scanline,0,2); > for(unsigned int b = 0; b < cinfo.image_width; ++b) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = (unsigned char)*(ptr_b++); > } > } break; > default : { > const T *ptr_r = data(0,cinfo.next_scanline,0,0), > *ptr_g = data(0,cinfo.next_scanline,0,1), > *ptr_b = data(0,cinfo.next_scanline,0,2), > *ptr_a = data(0,cinfo.next_scanline,0,3); > for(unsigned int b = 0; b < cinfo.image_width; ++b) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = (unsigned char)*(ptr_b++); > *(ptrd++) = (unsigned char)*(ptr_a++); > } > } > } > *row_pointer = buffer._data; > jpeg_write_scanlines(&cinfo,row_pointer,1); > } > jpeg_finish_compress(&cinfo); > if (!file) cimg::fclose(nfile); > jpeg_destroy_compress(&cinfo); > return *this; > > } > > > > > > > const CImg<T>& save_magick(const char *const filename, const unsigned int bytes_per_pixel=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_magick(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 40909 "./CImg.h" > cimg::unused(bytes_per_pixel); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_magick(): Unable to save file '%s' unless libMagick++ is enabled.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > return *this; > } > > > > > > > const CImg<T>& save_png(const char *const filename, const unsigned int bytes_per_pixel=0) const { > return _save_png(0,filename,bytes_per_pixel); > } > > > const CImg<T>& save_png(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { > return _save_png(file,0,bytes_per_pixel); > } > > const CImg<T>& _save_png(std::FILE *const file, const char *const filename, const unsigned int bytes_per_pixel=0) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } ># 40946 "./CImg.h" > const char *volatile nfilename = filename; > std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"wb"); > > double stmin, stmax = (double)max_min(stmin); > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > if (_spectrum>4) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename,stmin,stmax); > > > png_voidp user_error_ptr = 0; > png_error_ptr user_error_fn = 0, user_warning_fn = 0; > png_structp png_ptr = png_create_write_struct("1.6.6",user_error_ptr, user_error_fn, user_warning_fn); > if(!png_ptr){ > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Failed to initialize 'png_ptr' structure when saving file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > png_infop info_ptr = png_create_info_struct(png_ptr); > if (!info_ptr) { > png_destroy_write_struct(&png_ptr,(png_infopp)0); > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Failed to initialize 'info_ptr' structure when saving file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > if (_setjmp ((*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))))) { > png_destroy_write_struct(&png_ptr, &info_ptr); > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Encountered unknown fatal error in libpng when saving file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > png_init_io(png_ptr, nfile); > const int bit_depth = bytes_per_pixel?(bytes_per_pixel*8):(stmax>=256?16:8); > int color_type; > switch (spectrum()) { > case 1 : color_type = 0; break; > case 2 : color_type = (4); break; > case 3 : color_type = (2); break; > default : color_type = (2 | 4); > } > const int interlace_type = 0; > const int compression_type = 0; > const int filter_method = 0; > png_set_IHDR(png_ptr,info_ptr,_width,_height,bit_depth,color_type,interlace_type,compression_type,filter_method); > png_write_info(png_ptr,info_ptr); > const int byte_depth = bit_depth>>3; > const int numChan = spectrum()>4?4:spectrum(); > const int pixel_bit_depth_flag = numChan * (bit_depth-1); > > > png_bytep *const imgData = new png_byte*[_height]; > for (unsigned int row = 0; row<_height; ++row) imgData[row] = new png_byte[byte_depth*numChan*_width]; > const T *pC0 = data(0,0,0,0); > switch (pixel_bit_depth_flag) { > case 7 : { > for (int y = 0; y<(int)((*this)._height); ++y) { > unsigned char *ptrd = imgData[y]; > for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (unsigned char)*(pC0++); > } > } break; > case 14 : { > const T *pC1 = data(0,0,0,1); > for (int y = 0; y<(int)((*this)._height); ++y) { > unsigned char *ptrd = imgData[y]; > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptrd++) = (unsigned char)*(pC0++); > *(ptrd++) = (unsigned char)*(pC1++); > } > } > } break; > case 21 : { > const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2); > for (int y = 0; y<(int)((*this)._height); ++y) { > unsigned char *ptrd = imgData[y]; > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptrd++) = (unsigned char)*(pC0++); > *(ptrd++) = (unsigned char)*(pC1++); > *(ptrd++) = (unsigned char)*(pC2++); > } > } > } break; > case 28 : { > const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2), *pC3 = data(0,0,0,3); > for (int y = 0; y<(int)((*this)._height); ++y){ > unsigned char *ptrd = imgData[y]; > for (int x = 0; x<(int)((*this)._width); ++x){ > *(ptrd++) = (unsigned char)*(pC0++); > *(ptrd++) = (unsigned char)*(pC1++); > *(ptrd++) = (unsigned char)*(pC2++); > *(ptrd++) = (unsigned char)*(pC3++); > } > } > } break; > case 15 : { > for (int y = 0; y<(int)((*this)._height); ++y){ > unsigned short *ptrd = (unsigned short*)(imgData[y]); > for (int x = 0; x<(int)((*this)._width); ++x) *(ptrd++) = (unsigned short)*(pC0++); > if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],_width); > } > } break; > case 30 : { > const T *pC1 = data(0,0,0,1); > for (int y = 0; y<(int)((*this)._height); ++y){ > unsigned short *ptrd = (unsigned short*)(imgData[y]); > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptrd++) = (unsigned short)*(pC0++); > *(ptrd++) = (unsigned short)*(pC1++); > } > if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],2*_width); > } > } break; > case 45 : { > const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2); > for (int y = 0; y<(int)((*this)._height); ++y) { > unsigned short *ptrd = (unsigned short*)(imgData[y]); > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptrd++) = (unsigned short)*(pC0++); > *(ptrd++) = (unsigned short)*(pC1++); > *(ptrd++) = (unsigned short)*(pC2++); > } > if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],3*_width); > } > } break; > case 60 : { > const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2), *pC3 = data(0,0,0,3); > for (int y = 0; y<(int)((*this)._height); ++y) { > unsigned short *ptrd = (unsigned short*)(imgData[y]); > for (int x = 0; x<(int)((*this)._width); ++x) { > *(ptrd++) = (unsigned short)*(pC0++); > *(ptrd++) = (unsigned short)*(pC1++); > *(ptrd++) = (unsigned short)*(pC2++); > *(ptrd++) = (unsigned short)*(pC3++); > } > if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],4*_width); > } > } break; > default : > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_png(): Encountered unknown fatal error in libpng when saving file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > nfilename?nfilename:"(FILE*)"); > } > png_write_image(png_ptr,imgData); > png_write_end(png_ptr,info_ptr); > png_destroy_write_struct(&png_ptr, &info_ptr); > > > for (int n = 0; n<(int)((*this)._height); ++n) delete[] imgData[n]; > delete[] imgData; > if (!file) cimg::fclose(nfile); > return *this; > > } > > > > > > > const CImg<T>& save_pnm(const char *const filename, const unsigned int bytes_per_pixel=0) const { > return _save_pnm(0,filename,bytes_per_pixel); > } > > > const CImg<T>& save_pnm(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { > return _save_pnm(file,0,bytes_per_pixel); > } > > const CImg<T>& _save_pnm(std::FILE *const file, const char *const filename, const unsigned int bytes_per_pixel=0) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > double stmin, stmax = (double)max_min(stmin); > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnm(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > stmin,stmax,filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const T > *ptr_r = data(0,0,0,0), > *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, > *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; > const unsigned long buf_size = cimg::min(1024*1024UL,_width*_height*(_spectrum==1?1UL:3UL)); > > std::fprintf(nfile,"P%c\n%u %u\n%u\n", > (_spectrum==1?'5':'6'),_width,_height,stmax<256?255:(stmax<4096?4095:65535)); > > switch (_spectrum) { > case 1 : { > if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr_r++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } else { > CImg<ushortT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > unsigned short *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned short)*(ptr_r++); > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } > } break; > case 2 : { > if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = 0; > } > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } else { > CImg<ushortT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned short *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned short)*(ptr_r++); > *(ptrd++) = (unsigned short)*(ptr_g++); > *(ptrd++) = 0; > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } > } break; > default : { > if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned char)*(ptr_r++); > *(ptrd++) = (unsigned char)*(ptr_g++); > *(ptrd++) = (unsigned char)*(ptr_b++); > } > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } else { > CImg<ushortT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size/3); > unsigned short *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (unsigned short)*(ptr_r++); > *(ptrd++) = (unsigned short)*(ptr_g++); > *(ptrd++) = (unsigned short)*(ptr_b++); > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_pnk(const char *const filename) const { > return _save_pnk(0,filename); > } > > > const CImg<T>& save_pnk(std::FILE *const file) const { > return _save_pnk(file,0); > } > > const CImg<T>& _save_pnk(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnk(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_spectrum>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pnk(): Instance is multispectral, only the first channel will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > const unsigned long buf_size = cimg::min(1024*1024LU,_width*_height*_depth); > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const T *ptr = data(0,0,0,0); > > if (!cimg::type<T>::is_float() && sizeof(T)==1 && _depth<2) _save_pnm(file,filename,0); > else if (!cimg::type<T>::is_float() && sizeof(T)==1) { > std::fprintf(nfile,"P5\n%u %u %u\n255\n",_width,_height,_depth); > CImg<ucharT> buf(buf_size); > for (long to_write = (long)_width*_height*_depth; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > unsigned char *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } else if (!cimg::type<T>::is_float()) { > if (_depth>1) std::fprintf(nfile,"P8\n%u %u %u\n%d\n",_width,_height,_depth,(int)max()); > else std::fprintf(nfile,"P8\n%u %u\n%d\n",_width,_height,(int)max()); > CImg<intT> buf(buf_size); > for (long to_write = (long)_width*_height*_depth; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > int *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (int)*(ptr++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } else { > if (_depth>1) std::fprintf(nfile,"P9\n%u %u %u\n%g\n",_width,_height,_depth,(double)max()); > else std::fprintf(nfile,"P9\n%u %u\n%g\n",_width,_height,(double)max()); > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height*_depth; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (float)*(ptr++); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } > > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_pfm(const char *const filename) const { > return get_mirror('y')._save_pfm(0,filename); > } > > > const CImg<T>& save_pfm(std::FILE *const file) const { > return get_mirror('y')._save_pfm(file,0); > } > > const CImg<T>& _save_pfm(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pfm(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pfm(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > if (_spectrum>3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pfm(): image instance is multispectral, only the three first channels will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const T > *ptr_r = data(0,0,0,0), > *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, > *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; > const unsigned int buf_size = cimg::min(1024*1024U,_width*_height*(_spectrum==1?1:3)); > > std::fprintf(nfile,"P%c\n%u %u\n1.0\n", > (_spectrum==1?'f':'F'),_width,_height); > > switch (_spectrum) { > case 1 : { > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned long N = cimg::min((unsigned long)to_write,buf_size); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) *(ptrd++) = (float)*(ptr_r++); > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,N,nfile); > to_write-=N; > } > } break; > case 2 : { > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned int N = cimg::min((unsigned int)to_write,buf_size/3); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (float)*(ptr_r++); > *(ptrd++) = (float)*(ptr_g++); > *(ptrd++) = 0; > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } break; > default : { > CImg<floatT> buf(buf_size); > for (long to_write = (long)_width*_height; to_write>0; ) { > const unsigned int N = cimg::min((unsigned int)to_write,buf_size/3); > float *ptrd = buf._data; > for (unsigned long i = N; i>0; --i) { > *(ptrd++) = (float)*(ptr_r++); > *(ptrd++) = (float)*(ptr_g++); > *(ptrd++) = (float)*(ptr_b++); > } > if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); > cimg::fwrite(buf._data,3*N,nfile); > to_write-=N; > } > } > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > const CImg<T>& save_rgb(const char *const filename) const { > return _save_rgb(0,filename); > } > > > const CImg<T>& save_rgb(std::FILE *const file) const { > return _save_rgb(file,0); > } > > const CImg<T>& _save_rgb(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgb(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_spectrum!=3) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgb(): image instance has not exactly 3 channels, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const unsigned long wh = (unsigned long)_width*_height; > unsigned char *const buffer = new unsigned char[3*wh], *nbuffer = buffer; > const T > *ptr1 = data(0,0,0,0), > *ptr2 = _spectrum>1?data(0,0,0,1):0, > *ptr3 = _spectrum>2?data(0,0,0,2):0; > switch (_spectrum) { > case 1 : { > for (unsigned long k = 0; k<wh; ++k) { > const unsigned char val = (unsigned char)*(ptr1++); > *(nbuffer++) = val; > *(nbuffer++) = val; > *(nbuffer++) = val; > } > } break; > case 2 : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = 0; > } > } break; > default : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = (unsigned char)(*(ptr3++)); > } > } > } > cimg::fwrite(buffer,3*wh,nfile); > if (!file) cimg::fclose(nfile); > delete[] buffer; > return *this; > } > > > > > > const CImg<T>& save_rgba(const char *const filename) const { > return _save_rgba(0,filename); > } > > > const CImg<T>& save_rgba(std::FILE *const file) const { > return _save_rgba(file,0); > } > > const CImg<T>& _save_rgba(std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgba(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if (_spectrum!=4) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_rgba(): image instance has not exactly 4 channels, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const unsigned long wh = (unsigned long)_width*_height; > unsigned char *const buffer = new unsigned char[4*wh], *nbuffer = buffer; > const T > *ptr1 = data(0,0,0,0), > *ptr2 = _spectrum>1?data(0,0,0,1):0, > *ptr3 = _spectrum>2?data(0,0,0,2):0, > *ptr4 = _spectrum>3?data(0,0,0,3):0; > switch (_spectrum) { > case 1 : { > for (unsigned long k = 0; k<wh; ++k) { > const unsigned char val = (unsigned char)*(ptr1++); > *(nbuffer++) = val; > *(nbuffer++) = val; > *(nbuffer++) = val; > *(nbuffer++) = 255; > } > } break; > case 2 : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = 0; > *(nbuffer++) = 255; > } > } break; > case 3 : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = (unsigned char)(*(ptr3++)); > *(nbuffer++) = 255; > } > } break; > default : { > for (unsigned long k = 0; k<wh; ++k) { > *(nbuffer++) = (unsigned char)(*(ptr1++)); > *(nbuffer++) = (unsigned char)(*(ptr2++)); > *(nbuffer++) = (unsigned char)(*(ptr3++)); > *(nbuffer++) = (unsigned char)(*(ptr4++)); > } > } > } > cimg::fwrite(buffer,4*wh,nfile); > if (!file) cimg::fclose(nfile); > delete[] buffer; > return *this; > } ># 41560 "./CImg.h" > const CImg<T>& save_tiff(const char *const filename, const unsigned int compression_type=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_tiff(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > > TIFF *tif = TIFFOpen(filename,"w"); > if (tif) { > for (int z = 0; z<(int)((*this)._depth); ++z) get_slice(z)._save_tiff(tif,z,compression_type); > TIFFClose(tif); > } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_tiff(): Failed to open file '%s' for writing.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > > > > return *this; > } > > > > > > > > template<typename t> > const CImg<T>& _save_tiff(TIFF *tif, const unsigned int directory, const t& pixel_t, const unsigned int compression_type) const { > if (is_empty() || !tif || pixel_t) return *this; > const char *const filename = TIFFFileName(tif); > uint32 rowsperstrip = (uint32)-1; > uint16 spp = _spectrum, bpp = sizeof(t)*8, photometric; > if (spp==3 || spp==4) photometric = 2; > else photometric = 1; > TIFFSetDirectory(tif,directory); > TIFFSetField(tif,256,_width); > TIFFSetField(tif,257,_height); > TIFFSetField(tif,274,1); > TIFFSetField(tif,277,spp); > if (cimg::type<t>::is_float()) TIFFSetField(tif,339,3); > else if (cimg::type<t>::min()==0) TIFFSetField(tif,339,1); > else TIFFSetField(tif,339,2); > TIFFSetField(tif,258,bpp); > TIFFSetField(tif,284,1); > TIFFSetField(tif,262,photometric); > TIFFSetField(tif,259,compression_type?(compression_type-1):1); > rowsperstrip = TIFFDefaultStripSize(tif,rowsperstrip); > TIFFSetField(tif,278,rowsperstrip); > TIFFSetField(tif,266,1); > TIFFSetField(tif,305,"CImg"); > t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); > if (buf) { > for (unsigned int row = 0; row<_height; row+=rowsperstrip) { > uint32 nrow = (row + rowsperstrip>_height?_height-row:rowsperstrip); > tstrip_t strip = TIFFComputeStrip(tif,row,0); > tsize_t i = 0; > for (unsigned int rr = 0; rr<nrow; ++rr) > for (unsigned int cc = 0; cc<_width; ++cc) > for (unsigned int vv = 0; vv<spp; ++vv) > buf[i++] = (t)(*this)(cc,row + rr,0,vv); > if (TIFFWriteEncodedStrip(tif,strip,buf,i*sizeof(t))<0) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_tiff(): Invalid strip writing when saving file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > } > _TIFFfree(buf); > } > TIFFWriteDirectory(tif); > return (*this); > } > > const CImg<T>& _save_tiff(TIFF *tif, const unsigned int directory, const unsigned int compression_type) const { > if (!std::strcmp("bool",pixel_type())) { const unsigned char foo = (unsigned char)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("char",pixel_type())) { const char foo = (char)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("unsigned char",pixel_type())) { const unsigned char foo = (unsigned char)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("short",pixel_type())) { const short foo = (short)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("unsigned short",pixel_type())) { const unsigned short foo = (unsigned short)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("int",pixel_type())) { const int foo = (int)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("unsigned int",pixel_type())) { const unsigned int foo = (unsigned int)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("long",pixel_type())) { const int foo = (int)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("unsigned long",pixel_type())) { const unsigned int foo = (unsigned int)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("float",pixel_type())) { const float foo = (float)0; return _save_tiff(tif,directory,foo,compression_type); }; > if (!std::strcmp("double",pixel_type())) { const float foo = (float)0; return _save_tiff(tif,directory,foo,compression_type); }; > const char *const filename = TIFFFileName(tif); > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_tiff(): Unsupported pixel type '%s' for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > pixel_type(),filename?filename:"(FILE*)"); > return *this; > } > > > > > > > > const CImg<T>& save_minc2(const char *const filename, > const char *const imitate_file=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_minc2(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > > cimg::unused(imitate_file); > return save_other(filename); ># 41695 "./CImg.h" > } > > > > > > > const CImg<T>& save_analyze(const char *const filename, const float *const voxel_size=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_analyze(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > std::FILE *file; > char header[348] = { 0 }, hname[1024] = { 0 }, iname[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename); > short datatype=-1; > std::memset(header,0,348); > if (!*ext) { snprintf(hname,sizeof(hname),"%s.hdr",filename); snprintf(iname,sizeof(iname),"%s.img",filename); } > if (!cimg::strncasecmp(ext,"hdr",3)) { > std::strcpy(hname,filename); std::strncpy(iname,filename,sizeof(iname)-1); std::sprintf(iname + std::strlen(iname)-3,"img"); > } > if (!cimg::strncasecmp(ext,"img",3)) { > std::strcpy(hname,filename); std::strncpy(iname,filename,sizeof(iname)-1); std::sprintf(hname + std::strlen(iname)-3,"hdr"); > } > if (!cimg::strncasecmp(ext,"nii",3)) { > std::strncpy(hname,filename,sizeof(hname)-1); *iname = 0; > } > int *const iheader = (int*)header; > *iheader = 348; > std::strcpy(header + 4,"CImg"); > std::strcpy(header + 14," "); > ((short*)(header + 36))[0] = 4096; > ((char*)(header + 38))[0] = 114; > ((short*)(header + 40))[0] = 4; > ((short*)(header + 40))[1] = _width; > ((short*)(header + 40))[2] = _height; > ((short*)(header + 40))[3] = _depth; > ((short*)(header + 40))[4] = _spectrum; > if (!cimg::strcasecmp(pixel_type(),"bool")) datatype = 2; > if (!cimg::strcasecmp(pixel_type(),"unsigned char")) datatype = 2; > if (!cimg::strcasecmp(pixel_type(),"char")) datatype = 2; > if (!cimg::strcasecmp(pixel_type(),"unsigned short")) datatype = 4; > if (!cimg::strcasecmp(pixel_type(),"short")) datatype = 4; > if (!cimg::strcasecmp(pixel_type(),"unsigned int")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"int")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"unsigned long")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"long")) datatype = 8; > if (!cimg::strcasecmp(pixel_type(),"float")) datatype = 16; > if (!cimg::strcasecmp(pixel_type(),"double")) datatype = 64; > if (datatype<0) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_analyze(): Unsupported pixel type '%s' for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > pixel_type(),filename); > > ((short*)(header+70))[0] = datatype; > ((short*)(header+72))[0] = sizeof(T); > ((float*)(header+112))[0] = 1; > ((float*)(header+76))[0] = 0; > if (voxel_size) { > ((float*)(header+76))[1] = voxel_size[0]; > ((float*)(header+76))[2] = voxel_size[1]; > ((float*)(header+76))[3] = voxel_size[2]; > } else ((float*)(header+76))[1] = ((float*)(header+76))[2] = ((float*)(header+76))[3] = 1; > file = cimg::fopen(hname,"wb"); > cimg::fwrite(header,348,file); > if (*iname) { cimg::fclose(file); file = cimg::fopen(iname,"wb"); } > cimg::fwrite(_data,size(),file); > cimg::fclose(file); > return *this; > } > > > > > > > const CImg<T>& save_cimg(const char *const filename, const bool is_compressed=false) const { > CImgList<T>(*this,true).save_cimg(filename,is_compressed); > return *this; > } > > > const CImg<T>& save_cimg(std::FILE *const file, const bool is_compressed=false) const { > CImgList<T>(*this,true).save_cimg(file,is_compressed); > return *this; > } ># 41794 "./CImg.h" > const CImg<T>& save_cimg(const char *const filename, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > CImgList<T>(*this,true).save_cimg(filename,n0,x0,y0,z0,c0); > return *this; > } > > > const CImg<T>& save_cimg(std::FILE *const file, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > CImgList<T>(*this,true).save_cimg(file,n0,x0,y0,z0,c0); > return *this; > } ># 41822 "./CImg.h" > static void save_empty_cimg(const char *const filename, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return CImgList<T>::save_empty_cimg(filename,1,dx,dy,dz,dc); > } > > > > > > > static void save_empty_cimg(std::FILE *const file, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return CImgList<T>::save_empty_cimg(file,1,dx,dy,dz,dc); > } > > > > > > > const CImg<T>& save_inr(const char *const filename, const float *const voxel_size=0) const { > return _save_inr(0,filename,voxel_size); > } > > > const CImg<T>& save_inr(std::FILE *const file, const float *const voxel_size=0) const { > return _save_inr(file,0,voxel_size); > } > > const CImg<T>& _save_inr(std::FILE *const file, const char *const filename, const float *const voxel_size) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_inr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > int inrpixsize=-1; > const char *inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; > if (!cimg::strcasecmp(pixel_type(),"unsigned char")) { inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; } > if (!cimg::strcasecmp(pixel_type(),"char")) { inrtype = "fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; } > if (!cimg::strcasecmp(pixel_type(),"unsigned short")) { inrtype = "unsigned fixed\nPIXSIZE=16 bits\nSCALE=2**0";inrpixsize = 2; } > if (!cimg::strcasecmp(pixel_type(),"short")) { inrtype = "fixed\nPIXSIZE=16 bits\nSCALE=2**0"; inrpixsize = 2; } > if (!cimg::strcasecmp(pixel_type(),"unsigned int")) { inrtype = "unsigned fixed\nPIXSIZE=32 bits\nSCALE=2**0";inrpixsize = 4; } > if (!cimg::strcasecmp(pixel_type(),"int")) { inrtype = "fixed\nPIXSIZE=32 bits\nSCALE=2**0"; inrpixsize = 4; } > if (!cimg::strcasecmp(pixel_type(),"float")) { inrtype = "float\nPIXSIZE=32 bits"; inrpixsize = 4; } > if (!cimg::strcasecmp(pixel_type(),"double")) { inrtype = "float\nPIXSIZE=64 bits"; inrpixsize = 8; } > if (inrpixsize<=0) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_inr(): Unsupported pixel type '%s' for file '%s'", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > pixel_type(),filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > char header[257] = { 0 }; > int err = snprintf(header,sizeof(header),"#INRIMAGE-4#{\nXDIM=%u\nYDIM=%u\nZDIM=%u\nVDIM=%u\n",_width,_height,_depth,_spectrum); > if (voxel_size) err+=std::sprintf(header + err,"VX=%g\nVY=%g\nVZ=%g\n",voxel_size[0],voxel_size[1],voxel_size[2]); > err+=std::sprintf(header + err,"TYPE=%s\nCPU=%s\n",inrtype,cimg::endianness()?"sun":"decm"); > std::memset(header + err,'\n',252 - err); > std::memcpy(header + 252,"##}\n",4); > cimg::fwrite(header,256,nfile); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) for (int c = 0; c<(int)((*this)._spectrum); ++c) cimg::fwrite(&((*this)(x,y,z,c)),1,nfile); > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImg<T>& save_exr(const char *const filename) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_exr(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > if (_depth>1) > cimg::warn("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_exr(): Instance is volumetric, only the first slice will be saved in file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > > > > Imf::Rgba *const ptrd0 = new Imf::Rgba[(unsigned long)_width*_height], *ptrd = ptrd0, rgba; > switch (_spectrum) { > case 1 : { > for (const T *ptr_r = data(), *const ptr_e = ptr_r + (unsigned long)_width*_height; ptr_r<ptr_e;) { > rgba.r = rgba.g = rgba.b = (half)(*(ptr_r++)); > rgba.a = (half)1; > *(ptrd++) = rgba; > } > } break; > case 2 : { > for (const T *ptr_r = data(), *ptr_g = data(0,0,0,1), *const ptr_e = ptr_r + (unsigned long)_width*_height; ptr_r<ptr_e; ) { > rgba.r = (half)(*(ptr_r++)); > rgba.g = (half)(*(ptr_g++)); > rgba.b = (half)0; > rgba.a = (half)1; > *(ptrd++) = rgba; > } > } break; > case 3 : { > for (const T *ptr_r = data(), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *const ptr_e = ptr_r + (unsigned long)_width*_height; ptr_r<ptr_e;) { > rgba.r = (half)(*(ptr_r++)); > rgba.g = (half)(*(ptr_g++)); > rgba.b = (half)(*(ptr_b++)); > rgba.a = (half)1; > *(ptrd++) = rgba; > } > } break; > default : { > for (const T *ptr_r = data(), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3), > *const ptr_e = ptr_r + (unsigned long)_width*_height; ptr_r<ptr_e;) { > rgba.r = (half)(*(ptr_r++)); > rgba.g = (half)(*(ptr_g++)); > rgba.b = (half)(*(ptr_b++)); > rgba.a = (half)(*(ptr_a++)); > *(ptrd++) = rgba; > } > } break; > } > Imf::RgbaOutputFile outFile(filename,_width,_height, > _spectrum==1?Imf::WRITE_Y:_spectrum==2?Imf::WRITE_YA:_spectrum==3?Imf::WRITE_RGB:Imf::WRITE_RGBA); > outFile.setFrameBuffer(ptrd0,1,_width); > outFile.writePixels(_height); > delete[] ptrd0; > return *this; > > } > > > > > > > > const CImg<T>& save_pandore(const char *const filename, const unsigned int colorspace=0) const { > return _save_pandore(0,filename,colorspace); > } > > > > > > > const CImg<T>& save_pandore(std::FILE *const file, const unsigned int colorspace=0) const { > return _save_pandore(file,0,colorspace); > } > > unsigned int _save_pandore_header_length(unsigned int id, unsigned int *dims, const unsigned int colorspace) const { > unsigned int nbdims = 0; > if (id==2 || id==3 || id==4) { dims[0] = 1; dims[1] = _width; nbdims = 2; } > if (id==5 || id==6 || id==7) { dims[0] = 1; dims[1] = _height; dims[2] = _width; nbdims=3; } > if (id==8 || id==9 || id==10) { dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } > if (id==16 || id==17 || id==18) { dims[0] = 3; dims[1] = _height; dims[2] = _width; dims[3] = colorspace; nbdims = 4; } > if (id==19 || id==20 || id==21) { dims[0] = 3; dims[1] = _depth; dims[2] = _height; dims[3] = _width; dims[4] = colorspace; nbdims = 5; } > if (id==22 || id==23 || id==25) { dims[0] = _spectrum; dims[1] = _width; nbdims = 2; } > if (id==26 || id==27 || id==29) { dims[0] = _spectrum; dims[1] = _height; dims[2] = _width; nbdims=3; } > if (id==30 || id==31 || id==33) { dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } > return nbdims; > } > > const CImg<T>& _save_pandore(std::FILE *const file, const char *const filename, const unsigned int colorspace) const { ># 42031 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_pandore(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > unsigned char header[36] = { 'P','A','N','D','O','R','E','0','4',0,0,0, > 0,0,0,0,'C','I','m','g',0,0,0,0,0,'N','o',' ','d','a','t','e',0,0,0,0 }; > unsigned int nbdims, dims[5] = { 0 }; > bool saved = false; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=2),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (2==2 || 2==5 || 2==8 || 2==16 || 2==19 || 2==22 || 2==26 || 2==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (2==3 || 2==6 || 2==9 || 2==17 || 2==20 || 2==23 || 2==27 || 2==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (2==4 || 2==7 || 2==10 || 2==18 || 2==21 || 2==25 || 2==29 || 2==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=4),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (4==2 || 4==5 || 4==8 || 4==16 || 4==19 || 4==22 || 4==26 || 4==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (4==3 || 4==6 || 4==9 || 4==17 || 4==20 || 4==23 || 4==27 || 4==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (4==4 || 4==7 || 4==10 || 4==18 || 4==21 || 4==25 || 4==29 || 4==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=3),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (3==2 || 3==5 || 3==8 || 3==16 || 3==19 || 3==22 || 3==26 || 3==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (3==3 || 3==6 || 3==9 || 3==17 || 3==20 || 3==23 || 3==27 || 3==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (3==4 || 3==7 || 3==10 || 3==18 || 3==21 || 3==25 || 3==29 || 3==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=4),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (4==2 || 4==5 || 4==8 || 4==16 || 4==19 || 4==22 || 4==26 || 4==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (4==3 || 4==6 || 4==9 || 4==17 || 4==20 || 4==23 || 4==27 || 4==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (4==4 || 4==7 || 4==10 || 4==18 || 4==21 || 4==25 || 4==29 || 4==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=4),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (4==2 || 4==5 || 4==8 || 4==16 || 4==19 || 4==22 || 4==26 || 4==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (4==3 || 4==6 || 4==9 || 4==17 || 4==20 || 4==23 || 4==27 || 4==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (4==4 || 4==7 || 4==10 || 4==18 || 4==21 || 4==25 || 4==29 || 4==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=5),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (5==2 || 5==5 || 5==8 || 5==16 || 5==19 || 5==22 || 5==26 || 5==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (5==3 || 5==6 || 5==9 || 5==17 || 5==20 || 5==23 || 5==27 || 5==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (5==4 || 5==7 || 5==10 || 5==18 || 5==21 || 5==25 || 5==29 || 5==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=7),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (7==2 || 7==5 || 7==8 || 7==16 || 7==19 || 7==22 || 7==26 || 7==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (7==3 || 7==6 || 7==9 || 7==17 || 7==20 || 7==23 || 7==27 || 7==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (7==4 || 7==7 || 7==10 || 7==18 || 7==21 || 7==25 || 7==29 || 7==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=6),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (6==2 || 6==5 || 6==8 || 6==16 || 6==19 || 6==22 || 6==26 || 6==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (6==3 || 6==6 || 6==9 || 6==17 || 6==20 || 6==23 || 6==27 || 6==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (6==4 || 6==7 || 6==10 || 6==18 || 6==21 || 6==25 || 6==29 || 6==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=7),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (7==2 || 7==5 || 7==8 || 7==16 || 7==19 || 7==22 || 7==26 || 7==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (7==3 || 7==6 || 7==9 || 7==17 || 7==20 || 7==23 || 7==27 || 7==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (7==4 || 7==7 || 7==10 || 7==18 || 7==21 || 7==25 || 7==29 || 7==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=7),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (7==2 || 7==5 || 7==8 || 7==16 || 7==19 || 7==22 || 7==26 || 7==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (7==3 || 7==6 || 7==9 || 7==17 || 7==20 || 7==23 || 7==27 || 7==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (7==4 || 7==7 || 7==10 || 7==18 || 7==21 || 7==25 || 7==29 || 7==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=8),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (8==2 || 8==5 || 8==8 || 8==16 || 8==19 || 8==22 || 8==26 || 8==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (8==3 || 8==6 || 8==9 || 8==17 || 8==20 || 8==23 || 8==27 || 8==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (8==4 || 8==7 || 8==10 || 8==18 || 8==21 || 8==25 || 8==29 || 8==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=10),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (10==2 || 10==5 || 10==8 || 10==16 || 10==19 || 10==22 || 10==26 || 10==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (10==3 || 10==6 || 10==9 || 10==17 || 10==20 || 10==23 || 10==27 || 10==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (10==4 || 10==7 || 10==10 || 10==18 || 10==21 || 10==25 || 10==29 || 10==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=9),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (9==2 || 9==5 || 9==8 || 9==16 || 9==19 || 9==22 || 9==26 || 9==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (9==3 || 9==6 || 9==9 || 9==17 || 9==20 || 9==23 || 9==27 || 9==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (9==4 || 9==7 || 9==10 || 9==18 || 9==21 || 9==25 || 9==29 || 9==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=10),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (10==2 || 10==5 || 10==8 || 10==16 || 10==19 || 10==22 || 10==26 || 10==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (10==3 || 10==6 || 10==9 || 10==17 || 10==20 || 10==23 || 10==27 || 10==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (10==4 || 10==7 || 10==10 || 10==18 || 10==21 || 10==25 || 10==29 || 10==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (1?(1==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=10),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (10==2 || 10==5 || 10==8 || 10==16 || 10==19 || 10==22 || 10==26 || 10==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (10==3 || 10==6 || 10==9 || 10==17 || 10==20 || 10==23 || 10==27 || 10==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (10==4 || 10==7 || 10==10 || 10==18 || 10==21 || 10==25 || 10==29 || 10==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=16),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (16==2 || 16==5 || 16==8 || 16==16 || 16==19 || 16==22 || 16==26 || 16==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (16==3 || 16==6 || 16==9 || 16==17 || 16==20 || 16==23 || 16==27 || 16==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (16==4 || 16==7 || 16==10 || 16==18 || 16==21 || 16==25 || 16==29 || 16==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=18),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (18==2 || 18==5 || 18==8 || 18==16 || 18==19 || 18==22 || 18==26 || 18==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (18==3 || 18==6 || 18==9 || 18==17 || 18==20 || 18==23 || 18==27 || 18==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (18==4 || 18==7 || 18==10 || 18==18 || 18==21 || 18==25 || 18==29 || 18==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=17),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (17==2 || 17==5 || 17==8 || 17==16 || 17==19 || 17==22 || 17==26 || 17==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (17==3 || 17==6 || 17==9 || 17==17 || 17==20 || 17==23 || 17==27 || 17==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (17==4 || 17==7 || 17==10 || 17==18 || 17==21 || 17==25 || 17==29 || 17==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=18),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (18==2 || 18==5 || 18==8 || 18==16 || 18==19 || 18==22 || 18==26 || 18==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (18==3 || 18==6 || 18==9 || 18==17 || 18==20 || 18==23 || 18==27 || 18==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (18==4 || 18==7 || 18==10 || 18==18 || 18==21 || 18==25 || 18==29 || 18==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=18),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (18==2 || 18==5 || 18==8 || 18==16 || 18==19 || 18==22 || 18==26 || 18==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (18==3 || 18==6 || 18==9 || 18==17 || 18==20 || 18==23 || 18==27 || 18==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (18==4 || 18==7 || 18==10 || 18==18 || 18==21 || 18==25 || 18==29 || 18==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=19),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (19==2 || 19==5 || 19==8 || 19==16 || 19==19 || 19==22 || 19==26 || 19==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (19==3 || 19==6 || 19==9 || 19==17 || 19==20 || 19==23 || 19==27 || 19==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (19==4 || 19==7 || 19==10 || 19==18 || 19==21 || 19==25 || 19==29 || 19==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=21),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (21==2 || 21==5 || 21==8 || 21==16 || 21==19 || 21==22 || 21==26 || 21==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (21==3 || 21==6 || 21==9 || 21==17 || 21==20 || 21==23 || 21==27 || 21==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (21==4 || 21==7 || 21==10 || 21==18 || 21==21 || 21==25 || 21==29 || 21==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=20),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (20==2 || 20==5 || 20==8 || 20==16 || 20==19 || 20==22 || 20==26 || 20==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (20==3 || 20==6 || 20==9 || 20==17 || 20==20 || 20==23 || 20==27 || 20==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (20==4 || 20==7 || 20==10 || 20==18 || 20==21 || 20==25 || 20==29 || 20==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=21),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (21==2 || 21==5 || 21==8 || 21==16 || 21==19 || 21==22 || 21==26 || 21==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (21==3 || 21==6 || 21==9 || 21==17 || 21==20 || 21==23 || 21==27 || 21==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (21==4 || 21==7 || 21==10 || 21==18 || 21==21 || 21==25 || 21==29 || 21==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (3?(3==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=21),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (21==2 || 21==5 || 21==8 || 21==16 || 21==19 || 21==22 || 21==26 || 21==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (21==3 || 21==6 || 21==9 || 21==17 || 21==20 || 21==23 || 21==27 || 21==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (21==4 || 21==7 || 21==10 || 21==18 || 21==21 || 21==25 || 21==29 || 21==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=22),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (22==2 || 22==5 || 22==8 || 22==16 || 22==19 || 22==22 || 22==26 || 22==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (22==3 || 22==6 || 22==9 || 22==17 || 22==20 || 22==23 || 22==27 || 22==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (22==4 || 22==7 || 22==10 || 22==18 || 22==21 || 22==25 || 22==29 || 22==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=25),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (25==2 || 25==5 || 25==8 || 25==16 || 25==19 || 25==22 || 25==26 || 25==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (25==3 || 25==6 || 25==9 || 25==17 || 25==20 || 25==23 || 25==27 || 25==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (25==4 || 25==7 || 25==10 || 25==18 || 25==21 || 25==25 || 25==29 || 25==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=23),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (23==2 || 23==5 || 23==8 || 23==16 || 23==19 || 23==22 || 23==26 || 23==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (23==3 || 23==6 || 23==9 || 23==17 || 23==20 || 23==23 || 23==27 || 23==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (23==4 || 23==7 || 23==10 || 23==18 || 23==21 || 23==25 || 23==29 || 23==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=25),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (25==2 || 25==5 || 25==8 || 25==16 || 25==19 || 25==22 || 25==26 || 25==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (25==3 || 25==6 || 25==9 || 25==17 || 25==20 || 25==23 || 25==27 || 25==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (25==4 || 25==7 || 25==10 || 25==18 || 25==21 || 25==25 || 25==29 || 25==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (1?(1==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=25),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (25==2 || 25==5 || 25==8 || 25==16 || 25==19 || 25==22 || 25==26 || 25==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (25==3 || 25==6 || 25==9 || 25==17 || 25==20 || 25==23 || 25==27 || 25==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (25==4 || 25==7 || 25==10 || 25==18 || 25==21 || 25==25 || 25==29 || 25==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=26),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (26==2 || 26==5 || 26==8 || 26==16 || 26==19 || 26==22 || 26==26 || 26==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (26==3 || 26==6 || 26==9 || 26==17 || 26==20 || 26==23 || 26==27 || 26==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (26==4 || 26==7 || 26==10 || 26==18 || 26==21 || 26==25 || 26==29 || 26==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=29),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (29==2 || 29==5 || 29==8 || 29==16 || 29==19 || 29==22 || 29==26 || 29==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (29==3 || 29==6 || 29==9 || 29==17 || 29==20 || 29==23 || 29==27 || 29==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (29==4 || 29==7 || 29==10 || 29==18 || 29==21 || 29==25 || 29==29 || 29==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=27),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (27==2 || 27==5 || 27==8 || 27==16 || 27==19 || 27==22 || 27==26 || 27==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (27==3 || 27==6 || 27==9 || 27==17 || 27==20 || 27==23 || 27==27 || 27==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (27==4 || 27==7 || 27==10 || 27==18 || 27==21 || 27==25 || 27==29 || 27==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=29),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (29==2 || 29==5 || 29==8 || 29==16 || 29==19 || 29==22 || 29==26 || 29==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (29==3 || 29==6 || 29==9 || 29==17 || 29==20 || 29==23 || 29==27 || 29==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (29==4 || 29==7 || 29==10 || 29==18 || 29==21 || 29==25 || 29==29 || 29==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (1?(1==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=29),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (29==2 || 29==5 || 29==8 || 29==16 || 29==19 || 29==22 || 29==26 || 29==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (29==3 || 29==6 || 29==9 || 29==17 || 29==20 || 29==23 || 29==27 || 29==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (29==4 || 29==7 || 29==10 || 29==18 || 29==21 || 29==25 || 29==29 || 29==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=30),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (30==2 || 30==5 || 30==8 || 30==16 || 30==19 || 30==22 || 30==26 || 30==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (30==3 || 30==6 || 30==9 || 30==17 || 30==20 || 30==23 || 30==27 || 30==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (30==4 || 30==7 || 30==10 || 30==18 || 30==21 || 30==25 || 30==29 || 30==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("char",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned short",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("int",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("unsigned long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=33),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (33==2 || 33==5 || 33==8 || 33==16 || 33==19 || 33==22 || 33==26 || 33==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (33==3 || 33==6 || 33==9 || 33==17 || 33==20 || 33==23 || 33==27 || 33==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (33==4 || 33==7 || 33==10 || 33==18 || 33==21 || 33==25 || 33==29 || 33==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("long",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=31),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (31==2 || 31==5 || 31==8 || 31==16 || 31==19 || 31==22 || 31==26 || 31==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (31==3 || 31==6 || 31==9 || 31==17 || 31==20 || 31==23 || 31==27 || 31==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (31==4 || 31==7 || 31==10 || 31==18 || 31==21 || 31==25 || 31==29 || 31==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("float",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=33),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (33==2 || 33==5 || 33==8 || 33==16 || 33==19 || 33==22 || 33==26 || 33==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (33==3 || 33==6 || 33==9 || 33==17 || 33==20 || 33==23 || 33==27 || 33==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (33==4 || 33==7 || 33==10 || 33==18 || 33==21 || 33==25 || 33==29 || 33==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > if (!saved && (0?(0==_height):true) && (0?(0==_depth):true) && (0?(0==_spectrum):true) && !std::strcmp("double",pixel_type())) { unsigned int *iheader = (unsigned int*)(header+12); nbdims = _save_pandore_header_length((*iheader=33),dims,colorspace); cimg::fwrite(header,36,nfile); if (sizeof(unsigned long)==4) { unsigned long ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned int)==4) { unsigned int ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else if (sizeof(unsigned short)==4) { unsigned short ndims[5] = { 0 }; for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims,nbdims,nfile); } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); if (33==2 || 33==5 || 33==8 || 33==16 || 33==19 || 33==22 || 33==26 || 33==30) { unsigned char *buffer = new unsigned char[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned char)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (33==3 || 33==6 || 33==9 || 33==17 || 33==20 || 33==23 || 33==27 || 33==31) { if (sizeof(unsigned long)==4) { unsigned long *buffer = new unsigned long[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned long)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned int)==4) { unsigned int *buffer = new unsigned int[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned int)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(unsigned short)==4) { unsigned short *buffer = new unsigned short[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (unsigned short)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } else if (33==4 || 33==7 || 33==10 || 33==18 || 33==21 || 33==25 || 33==29 || 33==33) { if (sizeof(double)==4) { double *buffer = new double[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (double)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else if (sizeof(float)==4) { float *buffer = new float[size()]; const T *ptrs = _data; for (unsigned long off = 0, _maxoff = (*this).size(); off<_maxoff; ++off) *(buffer++) = (float)(*(ptrs++)); buffer-=size(); cimg::fwrite(buffer,size(),nfile); delete[] buffer; } else throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" "save_pandore(): Unsupported datatype for file '%s'.", _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), filename?filename:"(FILE*)"); } saved = true; }; > > if (!file) cimg::fclose(nfile); > return *this; > } ># 42141 "./CImg.h" > const CImg<T>& save_raw(const char *const filename, const bool is_multiplexed=false) const { > return _save_raw(0,filename,is_multiplexed); > } > > > > > > > const CImg<T>& save_raw(std::FILE *const file, const bool is_multiplexed=false) const { > return _save_raw(file,0,is_multiplexed); > } > > const CImg<T>& _save_raw(std::FILE *const file, const char *const filename, const bool is_multiplexed) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_raw(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > if (!is_multiplexed) cimg::fwrite(_data,size(),nfile); > else { > CImg<T> buf(_spectrum); > for (int z = 0; z<(int)((*this)._depth); ++z) for (int y = 0; y<(int)((*this)._height); ++y) for (int x = 0; x<(int)((*this)._width); ++x) { > for (int c = 0; c<(int)((*this)._spectrum); ++c) buf[c] = (*this)(x,y,z,c); > cimg::fwrite(buf._data,_spectrum,nfile); > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 42185 "./CImg.h" > const CImg<T>& save_ffmpeg(const char *const filename, const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ffmpeg(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (!fps) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ffmpeg(): Invalid specified framerate 0, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > > return save_ffmpeg_external(filename,0,fps,bitrate); > > > > > > return *this; > } > > > > > > > > const CImg<T>& save_yuv(const char *const filename, const bool is_rgb=true) const { > get_split('z').save_yuv(filename,is_rgb); > return *this; > } > > > > > > > const CImg<T>& save_yuv(std::FILE *const file, const bool is_rgb=true) const { > get_split('z').save_yuv(file,is_rgb); > return *this; > } ># 42239 "./CImg.h" > template<typename tf, typename tc> > const CImg<T>& save_off(const CImgList<tf>& primitives, const CImgList<tc>& colors, > const char *const filename) const { > return _save_off(primitives,colors,0,filename); > } > > > > > > > template<typename tf, typename tc> > const CImg<T>& save_off(const CImgList<tf>& primitives, const CImgList<tc>& colors, > std::FILE *const file) const { > return _save_off(primitives,colors,file,0); > } > > template<typename tf, typename tc> > const CImg<T>& _save_off(const CImgList<tf>& primitives, const CImgList<tc>& colors, > std::FILE *const file, const char *const filename) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_off(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_off(): Empty instance, for file '%s'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)"); > > CImgList<T> opacities; > char error_message[1024] = { 0 }; > if (!is_object3d(primitives,colors,opacities,true,error_message)) > throw CImgInstanceException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_off(): Invalid specified 3d object, for file '%s' (%s).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename?filename:"(FILE*)",error_message); > > const CImg<tc> default_color(1,3,1,1,200); > std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); > unsigned int supported_primitives = 0; > for (int l = 0; l<(int)(primitives)._width; ++l) if (primitives[l].size()!=5) ++supported_primitives; > std::fprintf(nfile,"OFF\n%u %u %u\n",_width,supported_primitives,3*primitives._width); > for (int i = 0; i<(int)((*this)._width); ++i) std::fprintf(nfile,"%f %f %f\n",(float)((*this)(i,0)),(float)((*this)(i,1)),(float)((*this)(i,2))); > for (int l = 0; l<(int)(primitives)._width; ++l) { > const CImg<tc>& color = l<colors.width()?colors[l]:default_color; > const unsigned int psiz = primitives[l].size(), csiz = color.size(); > const float r = color[0]/255.0f, g = (csiz>1?color[1]:r)/255.0f, b = (csiz>2?color[2]:g)/255.0f; > switch (psiz) { > case 1 : std::fprintf(nfile,"1 %u %f %f %f\n",(unsigned int)primitives(l,0),r,g,b); break; > case 2 : std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; > case 3 : std::fprintf(nfile,"3 %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2), > (unsigned int)primitives(l,1),r,g,b); break; > case 4 : std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3), > (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),r,g,b); break; > case 5 : std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; > case 6 : { > const unsigned int xt = (unsigned int)primitives(l,2), yt = (unsigned int)primitives(l,3); > const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; > std::fprintf(nfile,"2 %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,1),rt,gt,bt); > } break; > case 9 : { > const unsigned int xt = (unsigned int)primitives(l,3), yt = (unsigned int)primitives(l,4); > const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; > std::fprintf(nfile,"3 %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,2), > (unsigned int)primitives(l,1),rt,gt,bt); > } break; > case 12 : { > const unsigned int xt = (unsigned int)primitives(l,4), yt = (unsigned int)primitives(l,5); > const float rt = color.atXY(xt,yt,0)/255.0f, gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; > std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n",(unsigned int)primitives(l,0),(unsigned int)primitives(l,3), > (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),rt,gt,bt); > } break; > } > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 42329 "./CImg.h" > const CImg<T>& save_ffmpeg_external(const char *const filename, const char *const codec=0, > const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_ffmpeg_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > CImgList<T> list; > get_split('z').move_to(list); > list.save_ffmpeg_external(filename,codec,fps,bitrate); > return *this; > } > > > > > > > > const CImg<T>& save_gzip_external(const char *const filename) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_gzip_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *ext = cimg::split_filename(filename,body), > *ext2 = cimg::split_filename(body,0); > std::FILE *file; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > save(filetmp); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gzip_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > else cimg::fclose(file); > std::remove(filetmp); > return *this; > } ># 42396 "./CImg.h" > const CImg<T>& save_graphicsmagick_external(const char *const filename, const unsigned int quality=100) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_graphicsmagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 42410 "./CImg.h" > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),_spectrum==1?"png":"png"); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > > save_png(filetmp); > > > > snprintf(command,sizeof(command),"%s convert -quality %u \"%s\" \"%s\"", > cimg::graphicsmagick_path(),quality, > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_graphicsmagick_external(): Failed to save file '%s' with external command 'gm'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > if (file) cimg::fclose(file); > std::remove(filetmp); > return *this; > } ># 42445 "./CImg.h" > const CImg<T>& save_imagemagick_external(const char *const filename, const unsigned int quality=100) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_imagemagick_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 42459 "./CImg.h" > char command[1024] = { 0 }, filetmp[512] = { 0 }; > std::FILE *file; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),_spectrum==1?"png":"png"); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > > save_png(filetmp); > > > > snprintf(command,sizeof(command),"%s -quality %u \"%s\" \"%s\"", > cimg::imagemagick_path(),quality, > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_imagemagick_external(): Failed to save file '%s' with external command 'convert'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > > if (file) cimg::fclose(file); > std::remove(filetmp); > return *this; > } > > > > > > > > const CImg<T>& save_medcon_external(const char *const filename) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_medcon_external(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > std::FILE *file; > do { > snprintf(filetmp,sizeof(filetmp),"%s.hdr",cimg::filenamerand()); > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > save_analyze(filetmp); > snprintf(command,sizeof(command),"%s -w -c dicom -o \"%s\" -f \"%s\"", > cimg::medcon_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command); > std::remove(filetmp); > cimg::split_filename(filetmp,body); > snprintf(filetmp,sizeof(filetmp),"%s.img",body); > std::remove(filetmp); > > file = std::fopen(filename,"rb"); > if (!file) { > snprintf(command,sizeof(command),"m000-%s",filename); > file = std::fopen(command,"rb"); > if (!file) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_medcon_external(): Failed to save file '%s' with external command 'medcon'.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > } > } > cimg::fclose(file); > std::rename(command,filename); > return *this; > } ># 42545 "./CImg.h" > const CImg<T>& save_other(const char *const filename, const unsigned int quality=100) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_other(): Specified filename is (null).", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > const unsigned int omode = cimg::exception_mode(); > bool is_saved = true; > cimg::exception_mode() = 0; > try { save_magick(filename); } > catch (CImgException&) { > try { save_imagemagick_external(filename,quality); } > catch (CImgException&) { > try { save_graphicsmagick_external(filename,quality); } > catch (CImgException&) { > is_saved = false; > } > } > } > cimg::exception_mode() = omode; > if (!is_saved) > throw CImgIOException("[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" > "save_other(): Failed to save file '%s'. Format is not natively supported, and no external commands succeeded.", > _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type(), > filename); > return *this; > } > > > static CImg<T> _logo40x38() { > CImg<T> res(40,38,1,3); > const unsigned char *ptrs = cimg::logo40x38; > T *ptr1 = res.data(0,0,0,0), *ptr2 = res.data(0,0,0,1), *ptr3 = res.data(0,0,0,2); > for (unsigned long off = 0; off<(unsigned long)res._width*res._height;) { > const unsigned char n = *(ptrs++), r = *(ptrs++), g = *(ptrs++), b = *(ptrs++); > for (unsigned int l = 0; l<n; ++off, ++l) { *(ptr1++) = (T)r; *(ptr2++) = (T)g; *(ptr3++) = (T)b; } > } > return res; > } > > > }; ># 42601 "./CImg.h" > template<typename T> > struct CImgList { > unsigned int _width, _allocated_width; > CImg<T> *_data; ># 42620 "./CImg.h" > typedef CImg<T>* iterator; > > > > > > > > typedef const CImg<T>* const_iterator; ># 42638 "./CImg.h" > typedef T value_type; > > > typedef typename cimg::superset<T,bool>::type Tbool; > typedef typename cimg::superset<T,unsigned char>::type Tuchar; > typedef typename cimg::superset<T,char>::type Tchar; > typedef typename cimg::superset<T,unsigned short>::type Tushort; > typedef typename cimg::superset<T,short>::type Tshort; > typedef typename cimg::superset<T,unsigned int>::type Tuint; > typedef typename cimg::superset<T,int>::type Tint; > typedef typename cimg::superset<T,unsigned long>::type Tulong; > typedef typename cimg::superset<T,long>::type Tlong; > typedef typename cimg::superset<T,float>::type Tfloat; > typedef typename cimg::superset<T,double>::type Tdouble; > typedef typename cimg::last<T,bool>::type boolT; > typedef typename cimg::last<T,unsigned char>::type ucharT; > typedef typename cimg::last<T,char>::type charT; > typedef typename cimg::last<T,unsigned short>::type ushortT; > typedef typename cimg::last<T,short>::type shortT; > typedef typename cimg::last<T,unsigned int>::type uintT; > typedef typename cimg::last<T,int>::type intT; > typedef typename cimg::last<T,unsigned long>::type ulongT; > typedef typename cimg::last<T,long>::type longT; > typedef typename cimg::last<T,float>::type floatT; > typedef typename cimg::last<T,double>::type doubleT; ># 42712 "./CImg.h" > ~CImgList() { > delete[] _data; > } ># 42723 "./CImg.h" > CImgList(): > _width(0),_allocated_width(0),_data(0) {} ># 42733 "./CImg.h" > explicit CImgList(const unsigned int n):_width(n) { > if (n) _data = new CImg<T>[_allocated_width = cimg::max(16UL,cimg::nearest_pow2(n))]; > else { _allocated_width = 0; _data = 0; } > } ># 42747 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height=1, > const unsigned int depth=1, const unsigned int spectrum=1): > _width(0),_allocated_width(0),_data(0) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum); > } ># 42763 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const T val): > _width(0),_allocated_width(0),_data(0) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum,val); > } ># 42781 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...): > _width(0),_allocated_width(0),_data(0) { ># 42796 "./CImg.h" > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,int))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > } ># 42810 "./CImg.h" > CImgList(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...): > _width(0),_allocated_width(0),_data(0) { > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,double))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > } > > > > > > > > template<typename t> > CImgList(const unsigned int n, const CImg<t>& img, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(img,is_shared); > } > > > > > > > template<typename t> > explicit CImgList(const CImg<t>& img, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(1); > _data[0].assign(img,is_shared); > } > > > > > > > > template<typename t1, typename t2> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(2); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); > } ># 42861 "./CImg.h" > template<typename t1, typename t2, typename t3> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(3); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); > } ># 42876 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(4); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > } ># 42892 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(5); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); > } ># 42911 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(6); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); > } ># 42931 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(7); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); > } ># 42952 "./CImg.h" > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7, typename t8> > CImgList(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const CImg<t8>& img8, const bool is_shared=false): > _width(0),_allocated_width(0),_data(0) { > assign(8); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); > } > > > > > > > template<typename t> > CImgList(const CImgList<t>& list):_width(0),_allocated_width(0),_data(0) { > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],false); > } > > > CImgList(const CImgList<T>& list):_width(0),_allocated_width(0),_data(0) { > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],list[l]._is_shared); > } > > > > > > > template<typename t> > CImgList(const CImgList<t>& list, const bool is_shared):_width(0),_allocated_width(0),_data(0) { > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],is_shared); > } > > > > > > explicit CImgList(const char *const filename):_width(0),_allocated_width(0),_data(0) { > assign(filename); > } > > > > > > > explicit CImgList(const CImgDisplay& disp):_width(0),_allocated_width(0),_data(0) { > assign(disp); > } > > > > > > CImgList<T> get_shared() { > CImgList<T> res(_width); > for (int l = 0; l<(int)(*this)._width; ++l) res[l].assign(_data[l],true); > return res; > } > > > const CImgList<T> get_shared() const { > CImgList<T> res(_width); > for (int l = 0; l<(int)(*this)._width; ++l) res[l].assign(_data[l],true); > return res; > } > > > > > > CImgList<T>& assign() { > delete[] _data; > _width = _allocated_width = 0; > _data = 0; > return *this; > } > > > > > > > CImgList<T>& clear() { > return assign(); > } > > > > > > CImgList<T>& assign(const unsigned int n) { > if (!n) return assign(); > if (_allocated_width<n || _allocated_width>(n<<2)) { > delete[] _data; > _data = new CImg<T>[_allocated_width=cimg::max(16UL,cimg::nearest_pow2(n))]; > } > _width = n; > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height=1, > const unsigned int depth=1, const unsigned int spectrum=1) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum); > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const T val) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(width,height,depth,spectrum,val); > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...) { > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,int))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > return *this; > } > > > > > > CImgList<T>& assign(const unsigned int n, const unsigned int width, const unsigned int height, > const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...) { > { assign(n,width,height,depth,spectrum); const unsigned long siz = (unsigned long)width*height*depth*spectrum, nsiz = siz*n; T *ptrd = _data->_data; va_list ap; __builtin_va_start(ap,val1); for (unsigned long l = 0, s = 0, i = 0; i<nsiz; ++i) { *(ptrd++) = (T)(i==0?val0:(i==1?val1:__builtin_va_arg(ap,double))); if ((++s)==siz) { ptrd = _data[++l]._data; s = 0; } } __builtin_va_end(ap); }; > return *this; > } > > > > > > template<typename t> > CImgList<T>& assign(const unsigned int n, const CImg<t>& img, const bool is_shared=false) { > assign(n); > for (int __assign = 0; __assign<(int)(*this)._width; ++__assign) (*this)[__assign].assign(img,is_shared); > return *this; > } > > > > > > template<typename t> > CImgList<T>& assign(const CImg<t>& img, const bool is_shared=false) { > assign(1); > _data[0].assign(img,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const bool is_shared=false) { > assign(2); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const bool is_shared=false) { > assign(3); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const bool is_shared=false) { > assign(4); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const bool is_shared=false) { > assign(5); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const bool is_shared=false) { > assign(6); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const bool is_shared=false) { > assign(7); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); > return *this; > } > > > > > > template<typename t1, typename t2, typename t3, typename t4, typename t5, typename t6, typename t7, typename t8> > CImgList<T>& assign(const CImg<t1>& img1, const CImg<t2>& img2, const CImg<t3>& img3, const CImg<t4>& img4, > const CImg<t5>& img5, const CImg<t6>& img6, const CImg<t7>& img7, const CImg<t8>& img8, > const bool is_shared=false) { > assign(8); > _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); _data[3].assign(img4,is_shared); > _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); > return *this; > } > > > > > > template<typename t> > CImgList<T>& assign(const CImgList<t>& list, const bool is_shared=false) { > cimg::unused(is_shared); > assign(list._width); > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].assign(list[l],false); > return *this; > } > > > CImgList<T>& assign(const CImgList<T>& list, const bool is_shared=false) { > if (this==&list) return *this; > CImgList<T> res(list._width); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(list[l],is_shared); > return res.move_to(*this); > } > > > > > > CImgList<T>& assign(const char *const filename) { > return load(filename); > } > > > > > > CImgList<T>& assign(const CImgDisplay &disp) { > return assign(CImg<T>(disp)); > } > > > > > > > template<typename t> > CImgList<t>& move_to(CImgList<t>& list) { > list.assign(_width); > bool is_one_shared_element = false; > for (int l = 0; l<(int)(*this)._width; ++l) is_one_shared_element|=_data[l]._is_shared; > if (is_one_shared_element) for (int l = 0; l<(int)(*this)._width; ++l) list[l].assign(_data[l]); > else for (int l = 0; l<(int)(*this)._width; ++l) _data[l].move_to(list[l]); > assign(); > return list; > } ># 43267 "./CImg.h" > template<typename t> > CImgList<t>& move_to(CImgList<t>& list, const unsigned int pos) { > if (is_empty()) return list; > const unsigned int npos = pos>list._width?list._width:pos; > list.insert(_width,npos); > bool is_one_shared_element = false; > for (int l = 0; l<(int)(*this)._width; ++l) is_one_shared_element|=_data[l]._is_shared; > if (is_one_shared_element) for (int l = 0; l<(int)(*this)._width; ++l) list[npos+l].assign(_data[l]); > else for (int l = 0; l<(int)(*this)._width; ++l) _data[l].move_to(list[npos+l]); > assign(); > return list; > } > > > > > > > CImgList<T>& swap(CImgList<T>& list) { > cimg::swap(_width,list._width); > cimg::swap(_allocated_width,list._allocated_width); > cimg::swap(_data,list._data); > return list; > } ># 43299 "./CImg.h" > static CImgList<T>& empty() { > static CImgList<T> _empty; > return _empty.assign(); > } ># 43315 "./CImg.h" > CImg<T>& operator()(const unsigned int pos) { ># 43325 "./CImg.h" > return _data[pos]; > } > > > > > > const CImg<T>& operator()(const unsigned int pos) const { > return const_cast<CImgList<T>*>(this)->operator()(pos); > } ># 43345 "./CImg.h" > T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, > const unsigned int z=0, const unsigned int c=0) { > return (*this)[pos](x,y,z,c); > } > > > const T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, > const unsigned int z=0, const unsigned int c=0) const { > return (*this)[pos](x,y,z,c); > } > > > > > > operator CImg<T>*() { > return _data; > } > > > operator const CImg<T>*() const { > return _data; > } > > > > > > > template<typename t> > CImgList<T>& operator=(const CImg<t>& img) { > return assign(img); > } > > > > > > > template<typename t> > CImgList<T>& operator=(const CImgList<t>& list) { > return assign(list); > } > > > CImgList<T>& operator=(const CImgList<T>& list) { > return assign(list); > } > > > > > > CImgList<T>& operator=(const char *const filename) { > return assign(filename); > } > > > > > > CImgList<T>& operator=(const CImgDisplay& disp) { > return assign(disp); > } > > > > > > CImgList<T> operator+() const { > return CImgList<T>(*this,false); > } ># 43426 "./CImg.h" > template<typename t> > CImgList<T>& operator,(const CImg<t>& img) { > return insert(img); > } > > > template<typename t> > CImgList<T> operator,(const CImg<t>& img) const { > return (+*this).insert(img); > } > > > > > > template<typename t> > CImgList<T>& operator,(const CImgList<t>& list) { > return insert(list); > } > > > template<typename t> > CImgList<T>& operator,(const CImgList<t>& list) const { > return (+*this).insert(list); > } > > > > > > > CImg<T> operator>(const char axis) const { > return get_append(axis,0); > } > > > > > > > CImgList<T> operator<(const char axis) const { > return get_split(axis); > } ># 43485 "./CImg.h" > static const char* pixel_type() { > return cimg::type<T>::string(); > } > > > > > > int width() const { > return (int)_width; > } > > > > > > unsigned int size() const { > return _width; > } > > > > > > CImg<T> *data() { > return _data; > } > > > const CImg<T> *data() const { > return _data; > } ># 43537 "./CImg.h" > CImg<T> *data(const unsigned int l) { > return _data + l; > } > > > const CImg<T> *data(const unsigned int l) const { > return _data + l; > } > > > > > > iterator begin() { > return _data; > } > > > const_iterator begin() const { > return _data; > } > > > > > iterator end() { > return _data + _width; > } > > > const_iterator end() const { > return _data + _width; > } > > > > > CImg<T>& front() { > return *_data; > } > > > const CImg<T>& front() const { > return *_data; > } > > > > > const CImg<T>& back() const { > return *(_data + _width - 1); > } > > > CImg<T>& back() { > return *(_data + _width - 1); > } > > > > > > CImg<T>& at(const int pos) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "at(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _data[pos<0?0:pos>=(int)_width?(int)_width-1:pos]; > } ># 43618 "./CImg.h" > T& atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZC(x,y,z,c,out_value); > } > > > T atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZC(x,y,z,c,out_value); > } ># 43636 "./CImg.h" > T& atNXYZC(const int pos, const int x, const int y, const int z, const int c) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZC(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZC(pos,x,y,z,c); > } > > > T atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZC(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZC(pos,x,y,z,c); > } > > T& _atNXYZC(const int pos, const int x, const int y, const int z, const int c) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); > } > > T _atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); > } ># 43673 "./CImg.h" > T& atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZ(x,y,z,c,out_value); > } > > > T atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZ(x,y,z,c,out_value); > } ># 43691 "./CImg.h" > T& atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZ(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZ(pos,x,y,z,c); > } > > > T atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXYZ(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXYZ(pos,x,y,z,c); > } > > T& _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); > } > > T _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); > } ># 43728 "./CImg.h" > T& atNXY(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXY(x,y,z,c,out_value); > } > > > T atNXY(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXY(x,y,z,c,out_value); > } ># 43746 "./CImg.h" > T& atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXY(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXY(pos,x,y,z,c); > } > > > T atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNXY(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNXY(pos,x,y,z,c); > } > > T& _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); > } > > T _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); > } ># 43783 "./CImg.h" > T& atNX(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atX(x,y,z,c,out_value); > } > > > T atNX(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atX(x,y,z,c,out_value); > } ># 43801 "./CImg.h" > T& atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNX(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNX(pos,x,y,z,c); > } > > > T atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atNX(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > return _atNX(pos,x,y,z,c); > } > > T& _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); > } > > T _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); > } ># 43838 "./CImg.h" > T& atN(const int pos, const int x, const int y, const int z, const int c, const T out_value) { > return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):(*this)(pos,x,y,z,c); > } > > > T atN(const int pos, const int x, const int y, const int z, const int c, const T out_value) const { > return (pos<0 || pos>=(int)_width)?out_value:(*this)(pos,x,y,z,c); > } ># 43856 "./CImg.h" > T& atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atN(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > return _atN(pos,x,y,z,c); > } > > > T atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "atN(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > return _atN(pos,x,y,z,c); > } > > T& _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); > } > > T _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { > return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); > } > > > > > > > > CImg<charT> value_string(const char separator=',', const unsigned int max_size=0) const { > if (is_empty()) return CImg<ucharT>(1,1,1,1,0); > CImgList<charT> items; > for (unsigned int l = 0; l<_width-1; ++l) { > CImg<charT> item = _data[l].value_string(separator,0); > item.back() = separator; > item.move_to(items); > } > _data[_width-1].value_string(separator,0).move_to(items); > CImg<charT> res; (items>'x').move_to(res); > if (max_size) { res.crop(0,max_size); res(max_size) = 0; } > return res; > } ># 43911 "./CImg.h" > bool is_empty() const { > return (!_data || !_width); > } > > > > > > bool is_sameN(const unsigned int size_n) const { > return _width==size_n; > } > > > > > > template<typename t> > bool is_sameN(const CImgList<t>& list) const { > return is_sameN(list._width); > } ># 43973 "./CImg.h" > template<typename t> bool is_sameXY(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXY(img); return res; } template<typename t> bool is_sameXY(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXY(list[l]); return res; } template<typename t> bool is_sameNXY(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXY(img)); } template<typename t> bool is_sameNXY(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXY(list)); } > template<typename t> bool is_sameXZ(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXZ(img); return res; } template<typename t> bool is_sameXZ(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXZ(list[l]); return res; } template<typename t> bool is_sameNXZ(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXZ(img)); } template<typename t> bool is_sameNXZ(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXZ(list)); } > template<typename t> bool is_sameXC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXC(img); return res; } template<typename t> bool is_sameXC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXC(list[l]); return res; } template<typename t> bool is_sameNXC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXC(img)); } template<typename t> bool is_sameNXC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXC(list)); } > template<typename t> bool is_sameYZ(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZ(img); return res; } template<typename t> bool is_sameYZ(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameYZ(list[l]); return res; } template<typename t> bool is_sameNYZ(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameYZ(img)); } template<typename t> bool is_sameNYZ(const CImgList<t>& list) const { return (is_sameN(list) && is_sameYZ(list)); } > template<typename t> bool is_sameYC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYC(img); return res; } template<typename t> bool is_sameYC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameYC(list[l]); return res; } template<typename t> bool is_sameNYC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameYC(img)); } template<typename t> bool is_sameNYC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameYC(list)); } > template<typename t> bool is_sameXYZ(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZ(img); return res; } template<typename t> bool is_sameXYZ(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXYZ(list[l]); return res; } template<typename t> bool is_sameNXYZ(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXYZ(img)); } template<typename t> bool is_sameNXYZ(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXYZ(list)); } > template<typename t> bool is_sameXYC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYC(img); return res; } template<typename t> bool is_sameXYC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXYC(list[l]); return res; } template<typename t> bool is_sameNXYC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXYC(img)); } template<typename t> bool is_sameNXYC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXYC(list)); } > template<typename t> bool is_sameYZC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZC(img); return res; } template<typename t> bool is_sameYZC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameYZC(list[l]); return res; } template<typename t> bool is_sameNYZC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameYZC(img)); } template<typename t> bool is_sameNYZC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameYZC(list)); } > template<typename t> bool is_sameXYZC(const CImg<t>& img) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZC(img); return res; } template<typename t> bool is_sameXYZC(const CImgList<t>& list) const { const unsigned int lmin = cimg::min(_width,list._width); bool res = true; for (unsigned int l = 0; l<lmin && res; ++l) res = _data[l].is_sameXYZC(list[l]); return res; } template<typename t> bool is_sameNXYZC(const unsigned int n, const CImg<t>& img) const { return (is_sameN(n) && is_sameXYZC(img)); } template<typename t> bool is_sameNXYZC(const CImgList<t>& list) const { return (is_sameN(list) && is_sameXYZC(list)); } > bool is_sameX(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameX(val); return res; } bool is_sameNX(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameX(val); } > bool is_sameY(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameY(val); return res; } bool is_sameNY(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameY(val); } > bool is_sameZ(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameZ(val); return res; } bool is_sameNZ(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameZ(val); } > bool is_sameC(const unsigned int val) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameC(val); return res; } bool is_sameNC(const unsigned int n, const unsigned int val) const { return is_sameN(n) && is_sameC(val); } > bool is_sameXY(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXY(val1,val2); return res; } bool is_sameNXY(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameXY(val1,val2); } > bool is_sameXZ(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXZ(val1,val2); return res; } bool is_sameNXZ(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameXZ(val1,val2); } > bool is_sameXC(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXC(val1,val2); return res; } bool is_sameNXC(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameXC(val1,val2); } > bool is_sameYZ(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZ(val1,val2); return res; } bool is_sameNYZ(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameYZ(val1,val2); } > bool is_sameYC(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYC(val1,val2); return res; } bool is_sameNYC(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameYC(val1,val2); } > bool is_sameZC(const unsigned int val1, const unsigned int val2) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameZC(val1,val2); return res; } bool is_sameNZC(const unsigned int n, const unsigned int val1, const unsigned int val2) const { return is_sameN(n) && is_sameZC(val1,val2); } > bool is_sameXYZ(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZ(val1,val2,val3); return res; } bool is_sameNXYZ(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameXYZ(val1,val2,val3); } > bool is_sameXYC(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYC(val1,val2,val3); return res; } bool is_sameNXYC(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameXYC(val1,val2,val3); } > bool is_sameXZC(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXZC(val1,val2,val3); return res; } bool is_sameNXZC(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameXZC(val1,val2,val3); } > bool is_sameYZC(const unsigned int val1, const unsigned int val2, const unsigned int val3) const { bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameYZC(val1,val2,val3); return res; } bool is_sameNYZC(const unsigned int n, const unsigned int val1, const unsigned int val2, const unsigned int val3) const { return is_sameN(n) && is_sameYZC(val1,val2,val3); } ># 44004 "./CImg.h" > bool is_sameXYZC(const unsigned int dx, const unsigned int dy, const unsigned int dz, const unsigned int dc) const { > bool res = true; > for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZC(dx,dy,dz,dc); > return res; > } ># 44018 "./CImg.h" > bool is_sameNXYZC(const unsigned int n, const unsigned int dx, const unsigned int dy, const unsigned int dz, const unsigned int dc) const { > return is_sameN(n) && is_sameXYZC(dx,dy,dz,dc); > } ># 44030 "./CImg.h" > bool containsNXYZC(const int n, const int x=0, const int y=0, const int z=0, const int c=0) const { > if (is_empty()) return false; > return n>=0 && n<(int)_width && x>=0 && x<_data[n].width() && y>=0 && y<_data[n].height() && > z>=0 && z<_data[n].depth() && c>=0 && c<_data[n].spectrum(); > } > > > > > > bool containsN(const int n) const { > if (is_empty()) return false; > return n>=0 && n<(int)_width; > } ># 44055 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x, t&y, t& z, t& c) const { > if (is_empty()) return false; > for (int l = 0; l<(int)(*this)._width; ++l) if (_data[l].contains(pixel,x,y,z,c)) { n = (t)l; return true; } > return false; > } ># 44071 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x, t&y, t& z) const { > t c; > return contains(pixel,n,x,y,z,c); > } ># 44085 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x, t&y) const { > t z, c; > return contains(pixel,n,x,y,z,c); > } ># 44098 "./CImg.h" > template<typename t> > bool contains(const T& pixel, t& n, t& x) const { > t y, z, c; > return contains(pixel,n,x,y,z,c); > } > > > > > > > > template<typename t> > bool contains(const T& pixel, t& n) const { > t x, y, z, c; > return contains(pixel,n,x,y,z,c); > } > > > > > > bool contains(const T& pixel) const { > unsigned int n, x, y, z, c; > return contains(pixel,n,x,y,z,c); > } > > > > > > > > template<typename t> > bool contains(const CImg<T>& img, t& n) const { > if (is_empty()) return false; > const CImg<T> *const ptr = &img; > for (int i = 0; i<(int)(*this)._width; ++i) if (_data+i==ptr) { n = (t)i; return true; } > return false; > } > > > > > > bool contains(const CImg<T>& img) const { > unsigned int n; > return contains(img,n); > } ># 44158 "./CImg.h" > T& min() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_min = _data->_data; > T min_value = *ptr_min; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > } > return *ptr_min; > } > > > const T& min() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_min = _data->_data; > T min_value = *ptr_min; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs<min_value) min_value = *(ptr_min=ptrs); > } > return *ptr_min; > } > > > > > T& max() { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_max = _data->_data; > T max_value = *ptr_max; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > } > return *ptr_max; > } > > > const T& max() const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_max = _data->_data; > T max_value = *ptr_max; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); > } > return *ptr_max; > } > > > > > > template<typename t> > T& min_max(t& max_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min_max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_min = _data->_data; > T min_value = *ptr_min, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > } > max_val = (t)max_value; > return *ptr_min; > } > > > > > > template<typename t> > const T& min_max(t& max_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "min_max(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_min = _data->_data; > T min_value = *ptr_min, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val<min_value) { min_value = val; ptr_min = ptrs; } > if (val>max_value) max_value = val; > } > } > max_val = (t)max_value; > return *ptr_min; > } > > > > > > template<typename t> > T& max_min(t& min_val) { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max_min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > T *ptr_max = _data->_data; > T min_value = *ptr_max, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > } > min_val = (t)min_value; > return *ptr_max; > } > > > template<typename t> > const T& max_min(t& min_val) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "max_min(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > const T *ptr_max = _data->_data; > T min_value = *ptr_max, max_value = min_value; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > for (T *ptrs = (img)._data, *_maxptrs = (img)._data + (img).size(); ptrs<_maxptrs; ++ptrs) { > const T val = *ptrs; > if (val>max_value) { max_value = val; ptr_max = ptrs; } > if (val<min_value) min_value = val; > } > } > min_val = (t)min_value; > return *ptr_max; > } ># 44325 "./CImg.h" > template<typename t> > CImgList<T>& insert(const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) { > const unsigned int npos = pos==~0U?_width:pos; > if (npos>_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) at position %u.", > _width,_allocated_width,_data,pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data,npos); > if (is_shared) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "insert(): Invalid insertion request of specified shared image CImg<%s>(%u,%u,%u,%u,%p) at position %u " > "(pixel types are different).", > _width,_allocated_width,_data,pixel_type(), > img.pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data,npos); > > CImg<T> *const new_data = (++_width>_allocated_width)?new CImg<T>[_allocated_width?(_allocated_width<<=1):(_allocated_width=16)]:0; > if (!_data) { > _data = new_data; > *_data = img; > } else { > if (new_data) { > if (npos) std::memcpy(new_data,_data,sizeof(CImg<T>)*npos); > if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > std::memset(_data,0,sizeof(CImg<T>)*(_width-1)); > delete[] _data; > _data = new_data; > } else if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; > _data[npos] = img; > } > return *this; > } > > > CImgList<T>& insert(const CImg<T>& img, const unsigned int pos=~0U, const bool is_shared=false) { > const unsigned int npos = pos==~0U?_width:pos; > if (npos>_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) at position %u.", > _width,_allocated_width,_data,pixel_type(), > img._width,img._height,img._depth,img._spectrum,img._data,npos); > CImg<T> *const new_data = (++_width>_allocated_width)?new CImg<T>[_allocated_width?(_allocated_width<<=1):(_allocated_width=16)]:0; > if (!_data) { > _data = new_data; > if (is_shared && img) { > _data->_width = img._width; _data->_height = img._height; _data->_depth = img._depth; _data->_spectrum = img._spectrum; > _data->_is_shared = true; _data->_data = img._data; > } else *_data = img; > } > else { > if (new_data) { > if (npos) std::memcpy(new_data,_data,sizeof(CImg<T>)*npos); > if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > if (is_shared && img) { > new_data[npos]._width = img._width; new_data[npos]._height = img._height; new_data[npos]._depth = img._depth; > new_data[npos]._spectrum = img._spectrum; new_data[npos]._is_shared = true; new_data[npos]._data = img._data; > } else { > new_data[npos]._width = new_data[npos]._height = new_data[npos]._depth = new_data[npos]._spectrum = 0; new_data[npos]._data = 0; > new_data[npos] = img; > } > std::memset(_data,0,sizeof(CImg<T>)*(_width-1)); > delete[] _data; > _data = new_data; > } else { > if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg<T>)*(_width-1-npos)); > if (is_shared && img) { > _data[npos]._width = img._width; _data[npos]._height = img._height; _data[npos]._depth = img._depth; _data[npos]._spectrum = img._spectrum; > _data[npos]._is_shared = true; _data[npos]._data = img._data; > } else { > _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; > _data[npos] = img; > } > } > } > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(img,pos,is_shared); > } > > > > > > > CImgList<T>& insert(const unsigned int n, const unsigned int pos=~0U) { > CImg<T> empty; > if (!n) return *this; > const unsigned int npos = pos==~0U?_width:pos; > for (unsigned int i = 0; i<n; ++i) insert(empty,npos+i); > return *this; > } > > > CImgList<T> get_insert(const unsigned int n, const unsigned int pos=~0U) const { > return (+*this).insert(n,pos); > } ># 44433 "./CImg.h" > template<typename t> > CImgList<T>& insert(const unsigned int n, const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) { > if (!n) return *this; > const unsigned int npos = pos==~0U?_width:pos; > insert(img,npos,is_shared); > for (unsigned int i = 1; i<n; ++i) insert(_data[npos],npos+i,is_shared); > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const unsigned int n, const CImg<t>& img, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(n,img,pos,is_shared); > } > > > > > > > > template<typename t> > CImgList<T>& insert(const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) { > const unsigned int npos = pos==~0U?_width:pos; > if ((void*)this!=(void*)&list) for (int l = 0; l<(int)(list)._width; ++l) insert(list[l],npos+l,is_shared); > else insert(CImgList<T>(list),npos,is_shared); > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(list,pos,is_shared); > } ># 44475 "./CImg.h" > template<typename t> > CImgList<T>& insert(const unsigned int n, const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) { > if (!n) return *this; > const unsigned int npos = pos==~0U?_width:pos; > for (unsigned int i = 0; i<n; ++i) insert(list,npos,is_shared); > return *this; > } > > > template<typename t> > CImgList<T> get_insert(const unsigned int n, const CImgList<t>& list, const unsigned int pos=~0U, const bool is_shared=false) const { > return (+*this).insert(n,list,pos,is_shared); > } > > > > > > > CImgList<T>& remove(const unsigned int pos1, const unsigned int pos2) { > const unsigned int > npos1 = pos1<pos2?pos1:pos2, > tpos2 = pos1<pos2?pos2:pos1, > npos2 = tpos2<_width?tpos2:_width-1; > if (npos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "remove(): Invalid remove request at positions %u->%u.", > _width,_allocated_width,_data,pixel_type(), > npos1,tpos2); > else { > if (tpos2>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "remove(): Invalid remove request at positions %u->%u.", > _width,_allocated_width,_data,pixel_type(), > npos1,tpos2); > > for (unsigned int k = npos1; k<=npos2; ++k) _data[k].assign(); > const unsigned int nb = 1 + npos2 - npos1; > if (!(_width-=nb)) return assign(); > if (_width>(_allocated_width>>2) || _allocated_width<=16) { > if (npos1!=_width) std::memmove(_data+npos1,_data+npos2+1,sizeof(CImg<T>)*(_width - npos1)); > std::memset(_data + _width,0,sizeof(CImg<T>)*nb); > } else { > _allocated_width>>=2; > while (_allocated_width>16 && _width<(_allocated_width>>1)) _allocated_width>>=1; > CImg<T> *const new_data = new CImg<T>[_allocated_width]; > if (npos1) std::memcpy(new_data,_data,sizeof(CImg<T>)*npos1); > if (npos1!=_width) std::memcpy(new_data+npos1,_data+npos2+1,sizeof(CImg<T>)*(_width-npos1)); > if (_width!=_allocated_width) std::memset(new_data+_width,0,sizeof(_allocated_width - _width)); > std::memset(_data,0,sizeof(CImg<T>)*(_width+nb)); > delete[] _data; > _data = new_data; > } > } > return *this; > } > > > CImgList<T> get_remove(const unsigned int pos1, const unsigned int pos2) const { > return (+*this).remove(pos1,pos2); > } > > > > > > CImgList<T>& remove(const unsigned int pos) { > return remove(pos,pos); > } > > > CImgList<T> get_remove(const unsigned int pos) const { > return (+*this).remove(pos); > } > > > > > CImgList<T>& remove() { > return remove(_width-1); > } > > > CImgList<T> get_remove() const { > return (+*this).remove(); > } > > > CImgList<T>& reverse() { > for (unsigned int l = 0; l<_width/2; ++l) (*this)[l].swap((*this)[_width-1-l]); > return *this; > } > > > CImgList<T> get_reverse() const { > return (+*this).reverse(); > } > > > > > > > CImgList<T>& images(const unsigned int pos0, const unsigned int pos1) { > return get_images(pos0,pos1).move_to(*this); > } > > > CImgList<T> get_images(const unsigned int pos0, const unsigned int pos1) const { > if (pos0>pos1 || pos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "images(): Specified sub-list indices (%u->%u) are out of bounds.", > _width,_allocated_width,_data,pixel_type(), > pos0,pos1); > CImgList<T> res(pos1-pos0+1); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(_data[pos0+l]); > return res; > } > > > > > > > CImgList<T> get_shared_images(const unsigned int pos0, const unsigned int pos1) { > if (pos0>pos1 || pos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", > _width,_allocated_width,_data,pixel_type(), > pos0,pos1); > CImgList<T> res(pos1-pos0+1); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); > return res; > } > > > const CImgList<T> get_shared_images(const unsigned int pos0, const unsigned int pos1) const { > if (pos0>pos1 || pos1>=_width) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", > _width,_allocated_width,_data,pixel_type(), > pos0,pos1); > CImgList<T> res(pos1-pos0+1); > for (int l = 0; l<(int)(res)._width; ++l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); > return res; > } > > > > > > > CImg<T> get_append(const char axis, const float align=0) const { > if (is_empty()) return CImg<T>(); > if (_width==1) return +((*this)[0]); > unsigned int dx = 0, dy = 0, dz = 0, dc = 0, pos = 0; > CImg<T> res; > switch (cimg::uncase(axis)) { > case 'x' : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx+=img._width; dy = cimg::max(dy,img._height); dz = cimg::max(dz,img._depth); dc = cimg::max(dc,img._spectrum); } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image(pos, > (int)(align*(dy-img._height)), > (int)(align*(dz-img._depth)), > (int)(align*(dc-img._spectrum)), > img); > pos+=img._width; > } > } break; > case 'y' : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx = cimg::max(dx,img._width); dy+=img._height; dz = cimg::max(dz,img._depth); dc = cimg::max(dc,img._spectrum); } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image((int)(align*(dx-img._width)), > pos, > (int)(align*(dz-img._depth)), > (int)(align*(dc-img._spectrum)), > img); > pos+=img._height; > } > } break; > case 'z' : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx = cimg::max(dx,img._width); dy = cimg::max(dy,img._height); dz+=img._depth; dc = cimg::max(dc,img._spectrum); } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image((int)(align*(dx-img._width)), > (int)(align*(dy-img._height)), > pos, > (int)(align*(dc-img._spectrum)), > img); > pos+=img._depth; > } > } break; > default : { > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { dx = cimg::max(dx,img._width); dy = cimg::max(dy,img._height); dz = cimg::max(dz,img._depth); dc+=img._spectrum; } > } > res.assign(dx,dy,dz,dc,0); > if (res) for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) res.draw_image((int)(align*(dx-img._width)), > (int)(align*(dy-img._height)), > (int)(align*(dz-img._depth)), > pos, > img); > pos+=img._spectrum; > } > } > } > return res; > } > > > > > > > CImgList<T>& split(const char axis, const int nb=0) { > return get_split(axis,nb).move_to(*this); > } > > > CImgList<T> get_split(const char axis, const int nb=0) const { > CImgList<T> res; > for (int l = 0; l<(int)(*this)._width; ++l) _data[l].get_split(axis,nb).move_to(res,~0U); > return res; > } > > > > > > template<typename t> > CImgList<T>& push_back(const CImg<t>& img) { > return insert(img); > } > > > > > > template<typename t> > CImgList<T>& push_front(const CImg<t>& img) { > return insert(img,0); > } > > > > > > template<typename t> > CImgList<T>& push_back(const CImgList<t>& list) { > return insert(list); > } > > > > > > template<typename t> > CImgList<T>& push_front(const CImgList<t>& list) { > return insert(list,0); > } > > > > > CImgList<T>& pop_back() { > return remove(_width-1); > } > > > > > CImgList<T>& pop_front() { > return remove(0); > } > > > > > > CImgList<T>& erase(const iterator iter) { > return remove(iter-_data); > } ># 44790 "./CImg.h" > CImg<intT> get_select(CImgDisplay &disp, const bool feature_type=true, > const char axis='x', const float align=0) const { > return _get_select(disp,0,feature_type,axis,align,0,false,false,false); > } ># 44803 "./CImg.h" > CImg<intT> get_select(const char *const title, const bool feature_type=true, > const char axis='x', const float align=0) const { > CImgDisplay disp; > return _get_select(disp,title,feature_type,axis,align,0,false,false,false); > } > > CImg<intT> _get_select(CImgDisplay &disp, const char *const title, const bool feature_type, > const char axis, const float align, > const unsigned int orig, const bool resize_disp, > const bool exit_on_rightbutton, const bool exit_on_wheel) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "select(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > > > CImgList<uintT> _indices; > unsigned int max_width = 0, max_height = 0, sum_width = 0, sum_height = 0; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > const unsigned int > w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), > h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); > if (w>max_width) max_width = w; > if (h>max_height) max_height = h; > sum_width+=w; sum_height+=h; > if (axis=='x') CImg<uintT>(w,1,1,1,(unsigned int)l).move_to(_indices); > else CImg<uintT>(h,1,1,1,(unsigned int)l).move_to(_indices); > } > const CImg<uintT> indices0 = _indices>'x'; > > > if (!disp) { > if (axis=='x') disp.assign(CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,false),CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,true),title?title:0,1); > else disp.assign(CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,false),CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,true),title?title:0,1); > if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); > } else if (title) disp.set_title("%s",title); > if (resize_disp) { > if (axis=='x') disp.resize(CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,false),CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,true),false); > else disp.resize(CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,false),CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,true),false); > } > > const unsigned int old_normalization = disp.normalization(); > bool old_is_resized = disp.is_resized(); > disp._normalization = 0; > disp.show().set_key(0); > const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; > > > CImg<ucharT> visu0, visu; > CImg<uintT> indices; > CImg<intT> positions(_width,4,1,1,-1); > int oindice0 = -1, oindice1 = -1, indice0 = -1, indice1 = -1; > bool is_clicked = false, is_selected = false, text_down = false, update_display = true; > unsigned int key = 0; > while (!is_selected && !disp.is_closed() && !key) { > > > if (!visu0) { > visu0.assign(disp._width,disp._height,1,3,0); visu.assign(); > (indices0.get_resize(axis=='x'?visu0._width:visu0._height,1)).move_to(indices); > unsigned int ind = 0; > if (axis=='x') for (unsigned int x = 0; x<visu0._width; ) { > const unsigned int x0 = x; > ind = indices[x]; > while (x<indices._width && indices[x++]==ind) {} > const CImg<T> > onexone(1,1,1,1,0), > &src = _data[ind]?_data[ind]:onexone; > CImg<ucharT> res; > src.__get_select(disp,old_normalization,(src._width-1)/2,(src._height-1)/2,(src._depth-1)/2).move_to(res); > const unsigned int h = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,true); > res.resize(x - x0,cimg::max(32U,h*disp._height/max_height),1,res._spectrum==1?3:-100); > positions(ind,0) = positions(ind,2) = (int)x0; > positions(ind,1) = positions(ind,3) = (int)(align*(visu0.height()-res.height())); > positions(ind,2)+=res._width; > positions(ind,3)+=res._height - 1; > visu0.draw_image(positions(ind,0),positions(ind,1),res); > } else for (unsigned int y = 0; y<visu0._height; ) { > const unsigned int y0 = y; > ind = indices[y]; > while (y<visu0._height && indices[++y]==ind) {} > const CImg<T> > &src = _data[ind], > _img2d = src._depth>1?src.get_projections2d((src._width-1)/2,(src._height-1)/2,(src._depth-1)/2):CImg<T>(), > &img2d = _img2d?_img2d:src; > CImg<ucharT> res = old_normalization==1 || (old_normalization==3 && cimg::type<T>::string()!=cimg::type<unsigned char>::string())? > CImg<ucharT>(img2d.get_normalize(0,255)): > CImg<ucharT>(img2d); > if (res._spectrum>3) res.channels(0,2); > const unsigned int w = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,false); > res.resize(cimg::max(32U,w*disp._width/max_width),y - y0,1,res._spectrum==1?3:-100); > positions(ind,0) = positions(ind,2) = (int)(align*(visu0.width()-res.width())); > positions(ind,1) = positions(ind,3) = (int)y0; > positions(ind,2)+=res._width - 1; > positions(ind,3)+=res._height; > visu0.draw_image(positions(ind,0),positions(ind,1),res); > } > if (axis=='x') --positions(ind,2); else --positions(ind,3); > update_display = true; > } > > if (!visu || oindice0!=indice0 || oindice1!=indice1) { > if (indice0>=0 && indice1>=0) { > visu.assign(visu0,false); > const int indm = cimg::min(indice0,indice1), indM = cimg::max(indice0,indice1); > for (int ind = indm; ind<=indM; ++ind) if (positions(ind,0)>=0) { > visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3),background_color,0.2f); > if ((axis=='x' && positions(ind,2) - positions(ind,0)>=8) || > (axis!='x' && positions(ind,3) - positions(ind,1)>=8)) > visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3),foreground_color,0.9f,0xAAAAAAAA); > } > const int yt = (int)text_down?visu.height()-13:0; > if (is_clicked) visu.draw_text(0,yt," Images #%u - #%u, Size = %u",foreground_color,background_color,0.7f,13, > orig + indm,orig + indM,indM - indm + 1); > else visu.draw_text(0,yt," Image #%u (%u,%u,%u,%u)",foreground_color,background_color,0.7f,13, > orig + indice0, > _data[orig+indice0]._width, > _data[orig+indice0]._height, > _data[orig+indice0]._depth, > _data[orig+indice0]._spectrum); > update_display = true; > } else visu.assign(); > } > if (!visu) { visu.assign(visu0,true); update_display = true; } > if (update_display) { visu.display(disp); update_display = false; } > disp.wait(); > > > const int xm = disp.mouse_x(), ym = disp.mouse_y(); > int indice = -1; > > if (xm>=0) { > indice = (int)indices(axis=='x'?xm:ym); > if (disp.button()&1) { > if (!is_clicked) { is_clicked = true; oindice0 = indice0; indice0 = indice; } > oindice1 = indice1; indice1 = indice; > if (!feature_type) is_selected = true; > } else { > if (!is_clicked) { oindice0 = oindice1 = indice0; indice0 = indice1 = indice; } > else is_selected = true; > } > } else { > if (is_clicked) { > if (!(disp.button()&1)) { is_clicked = is_selected = false; indice0 = indice1 = -1; } > else indice1 = -1; > } else indice0 = indice1 = -1; > } > > if (disp.button()&4) { is_clicked = is_selected = false; indice0 = indice1 = -1; } > if (disp.button()&2 && exit_on_rightbutton) { is_selected = true; indice1 = indice0 = -1; } > if (disp.wheel() && exit_on_wheel) is_selected = true; > > switch (key = disp.key()) { > > case cimg::keyCTRLRIGHT : > > case 0 : case cimg::keyCTRLLEFT : key = 0; break; > case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), > CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). > _is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.set_fullscreen(false).resize(CImgDisplay::_fitscreen(axis=='x'?sum_width:max_width,axis=='x'?max_height:sum_height,1,128,-85,false),CImgDisplay::_fitscreen(axis=='x'?sum_width:max_width,axis=='x'?max_height:sum_height,1,128,-85,true),false)._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; > disp.set_key(key,false); key = 0; visu0.assign(); > } break; > case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > snprintf(filename,sizeof(filename),"gmic" "_%.4u.bmp",snap_number++); > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > if (visu0) { > (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); > visu0.save(filename); > (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > } > disp.set_key(key,false).wait(); key = 0; > } break; > case cimg::keyO : > if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { > static unsigned int snap_number = 0; > char filename[32] = { 0 }; > std::FILE *file; > do { > > snprintf(filename,sizeof(filename),"gmic" "_%.4u.cimgz",snap_number++); > > > > if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); > } while (file); > (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); > save(filename); > (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename).display(disp); > disp.set_key(key,false).wait(); key = 0; > } break; > } > if (disp.is_resized()) { disp.resize(false); visu0.assign(); } > if (ym>=0 && ym<13) { if (!text_down) { visu.assign(); text_down = true; }} > else if (ym>=visu.height()-13) { if(text_down) { visu.assign(); text_down = false; }} > } > CImg<intT> res(1,2,1,1,-1); > if (is_selected) { if (feature_type) res.fill(cimg::min(indice0,indice1),cimg::max(indice0,indice1)); else res.fill(indice0); } > if (!(disp.button()&2)) disp.set_button(); > disp._normalization = old_normalization; > disp._is_resized = old_is_resized; > disp.set_key(key); > return res; > } > > > > > > CImgList<T>& load(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { > char filename_local[1024] = { 0 }; > load(cimg::load_network_external(filename,filename_local)); > std::remove(filename_local); > return *this; > } > > const char *const ext = cimg::split_filename(filename); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > try { ># 45074 "./CImg.h" > if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); > else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); > else if (!cimg::strcasecmp(ext,"cimg") || > !cimg::strcasecmp(ext,"cimgz") || > !*ext) load_cimg(filename); > else if (!cimg::strcasecmp(ext,"rec") || > !cimg::strcasecmp(ext,"par")) load_parrec(filename); > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) load_ffmpeg(filename); > else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); > else throw CImgIOException("CImgList<%s>::load()", > pixel_type()); > } catch (CImgIOException&) { > try { > cimg::fclose(cimg::fopen(filename,"rb")); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > } > assign(1); > try { > _data->load(filename); > } catch (CImgIOException&) { > cimg::exception_mode() = omode; > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load(): Failed to recognize format of file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImgList<T> get_load(const char *const filename) { > return CImgList<T>().load(filename); > } > > > > > > CImgList<T>& load_cimg(const char *const filename) { > return _load_cimg(0,filename); > } > > > static CImgList<T> get_load_cimg(const char *const filename) { > return CImgList<T>().load_cimg(filename); > } > > > > > > CImgList<T>& load_cimg(std::FILE *const file) { > return _load_cimg(file,0); > } > > > static CImgList<T> get_load_cimg(std::FILE *const file) { > return CImgList<T>().load_cimg(file); > } > > CImgList<T>& _load_cimg(std::FILE *const file, const char *const filename) { ># 45213 "./CImg.h" > if (!filename && !file) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > const int cimg_iobuffer = 12*1024*1024; > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > bool loaded = false, endian = cimg::endianness(); > char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; > unsigned int j, err, N = 0, W, H, D, C, csiz; > int i; > do { > j = 0; while ((i=std::fgetc(nfile))!='\n' && i!=(-1) && j<256) tmp[j++] = (char)i; tmp[j] = 0; > } while (*tmp=='#' && i!=(-1)); > err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); > if (err<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): CImg header not found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > } > if (!cimg::strncasecmp("little",str_endian,6)) endian = false; > else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; > assign(N); > if (!loaded && !cimg::strcasecmp("bool",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<bool> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(bool); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const bool *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const bool *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_char",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned char> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned char); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned char *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned char *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uchar",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned char> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned char); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned char *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned char *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("char",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<char> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(char); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const char *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const char *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_short",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned short> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned short); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned short *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned short *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ushort",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned short> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned short); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned short *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned short *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("short",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<short> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(short); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const short *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const short *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_int",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned int> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned int); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned int *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned int *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uint",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned int> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned int); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned int *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned int *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("int",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<int> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(int); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const int *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const int *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_long",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned long> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned long); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned long *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned long *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ulong",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<unsigned long> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(unsigned long); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const unsigned long *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const unsigned long *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("long",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<long> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(long); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const long *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const long *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("float",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<float> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(float); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const float *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const float *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("double",str_pixeltype)) { for (unsigned int l = 0; l<N; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; csiz = 0; if ((err = std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:("(FILE*)")); if (W*H*D*C>0) { CImg<double> raw; CImg<T> &img = _data[l]; img.assign(W,H,D,C); T *ptrd = img._data; if (err==5) { Bytef *const cbuf = new Bytef[csiz]; cimg::fread(cbuf,csiz,nfile); raw.assign(W,H,D,C); unsigned long destlen = (unsigned long)raw.size()*sizeof(double); uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); delete[] cbuf; const double *ptrs = raw._data; for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); } else for (long to_read = (long)img.size(); to_read>0; ) { raw.assign(cimg::min(to_read,cimg_iobuffer)); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); to_read-=raw._width; const double *ptrs = raw._data; for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); } } } loaded = true; }; > if (!loaded) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Unsupported pixel type '%s' for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > str_pixeltype,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 45278 "./CImg.h" > CImgList<T>& load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return _load_cimg(0,filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > > static CImgList<T> get_load_cimg(const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return CImgList<T>().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > > CImgList<T>& load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return _load_cimg(file,0,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > > static CImgList<T> get_load_cimg(std::FILE *const file, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { > return CImgList<T>().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); > } > > CImgList<T>& _load_cimg(std::FILE *const file, const char *const filename, > const unsigned int n0, const unsigned int n1, > const unsigned int x0, const unsigned int y0, const unsigned int z0, const unsigned int c0, > const unsigned int x1, const unsigned int y1, const unsigned int z1, const unsigned int c1) { ># 45373 "./CImg.h" > if (!filename && !file) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > unsigned int > nn0 = cimg::min(n0,n1), nn1 = cimg::max(n0,n1), > nx0 = cimg::min(x0,x1), nx1 = cimg::max(x0,x1), > ny0 = cimg::min(y0,y1), ny1 = cimg::max(y0,y1), > nz0 = cimg::min(z0,z1), nz1 = cimg::max(z0,z1), > nc0 = cimg::min(c0,c1), nc1 = cimg::max(c0,c1); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > bool loaded = false, endian = cimg::endianness(); > char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; > unsigned int j, err, N, W, H, D, C; > int i; > j = 0; while((i=std::fgetc(nfile))!='\n' && i!=(-1) && j<256) tmp[j++] = (char)i; tmp[j] = 0; > err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); > if (err<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): CImg header not found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > } > if (!cimg::strncasecmp("little",str_endian,6)) endian = false; > else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; > nn1 = n1==~0U?N-1:n1; > if (nn1>=N) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " > "because file '%s' contains only %u images.", > _width,_allocated_width,_data,pixel_type(), > n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,filename?filename:"(FILE*)",N); > assign(1+nn1-n0); > if (!loaded && !cimg::strcasecmp("bool",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(bool),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<bool> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(bool); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(bool); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(bool); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(bool); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const bool *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(bool); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(bool); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(bool); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(bool); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_char",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned char> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned char *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uchar",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned char> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned char *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("char",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(char),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<char> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(char); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const char *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(char); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_short",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned short> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned short *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ushort",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned short> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned short *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("short",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(short),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<short> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(short); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const short *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(short); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_int",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned int> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned int *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("uint",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned int> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned int *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("int",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(int),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<int> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(int); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const int *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(int); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("unsigned_long",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned long> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned long *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("ulong",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<unsigned long> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const unsigned long *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("long",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(long),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<long> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(long); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const long *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(long); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("float",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(float),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<float> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(float); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(float); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(float); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(float); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const float *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(float); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(float); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(float); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(float); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded && !cimg::strcasecmp("double",str_pixeltype)) { for (unsigned int l = 0; l<=nn1; ++l) { j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<nn0 || nx0>=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(double),1); else { const unsigned int _nx1 = nx1==~0U?W-1:nx1, _ny1 = ny1==~0U?H-1:ny1, _nz1 = nz1==~0U?D-1:nz1, _nc1 = nc1==~0U?C-1:nc1; if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because image [%u] in file '%s' has size (%u,%u,%u,%u).", _width,_allocated_width,_data,pixel_type(), n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); CImg<double> raw(1 + _nx1 - nx0); CImg<T> &img = _data[l - nn0]; img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); T *ptrd = img._data; const unsigned int skipvb = nc0*W*H*D*sizeof(double); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int c = 1 + _nc1 - nc0; c; --c) { const unsigned int skipzb = nz0*W*H*sizeof(double); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + _nz1 - nz0; z; --z) { const unsigned int skipyb = ny0*W*sizeof(double); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + _ny1 - ny0; y; --y) { const unsigned int skipxb = nx0*sizeof(double); if (skipxb) std::fseek(nfile,skipxb,1); cimg::fread(raw._data,raw._width,nfile); if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); const double *ptrs = raw._data; for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); const unsigned int skipxe = (W-1-_nx1)*sizeof(double); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H-1-_ny1)*W*sizeof(double); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(double); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(double); if (skipve) std::fseek(nfile,skipve,1); } } } loaded = true; }; > if (!loaded) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_cimg(): Unsupported pixel type '%s' for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > str_pixeltype,filename?filename:"(FILE*)"); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > CImgList<T>& load_parrec(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_parrec(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > char body[1024] = { 0 }, filenamepar[1024] = { 0 }, filenamerec[1024] = { 0 }; > const char *const ext = cimg::split_filename(filename,body); > if (!std::strcmp(ext,"par")) { std::strncpy(filenamepar,filename,sizeof(filenamepar)-1); snprintf(filenamerec,sizeof(filenamerec),"%s.rec",body); } > if (!std::strcmp(ext,"PAR")) { std::strncpy(filenamepar,filename,sizeof(filenamepar)-1); snprintf(filenamerec,sizeof(filenamerec),"%s.REC",body); } > if (!std::strcmp(ext,"rec")) { std::strncpy(filenamerec,filename,sizeof(filenamerec)-1); snprintf(filenamepar,sizeof(filenamepar),"%s.par",body); } > if (!std::strcmp(ext,"REC")) { std::strncpy(filenamerec,filename,sizeof(filenamerec)-1); snprintf(filenamepar,sizeof(filenamepar),"%s.PAR",body); } > std::FILE *file = cimg::fopen(filenamepar,"r"); > > > CImgList<floatT> st_slices; > CImgList<uintT> st_global; > int err; > char line[256] = { 0 }; > do { err=std::fscanf(file,"%255[^\n]%*c",line); } while (err!=(-1) && (*line=='#' || *line=='.')); > do { > unsigned int sn,size_x,size_y,pixsize; > float rs,ri,ss; > err = std::fscanf(file,"%u%*u%*u%*u%*u%*u%*u%u%*u%u%u%g%g%g%*[^\n]",&sn,&pixsize,&size_x,&size_y,&ri,&rs,&ss); > if (err==7) { > CImg<floatT>::vector((float)sn,(float)pixsize,(float)size_x,(float)size_y,ri,rs,ss,0).move_to(st_slices); > unsigned int i; for (i = 0; i<st_global._width && sn<=st_global[i][2]; ++i) {} > if (i==st_global._width) CImg<uintT>::vector(size_x,size_y,sn).move_to(st_global); > else { > CImg<uintT> &vec = st_global[i]; > if (size_x>vec[0]) vec[0] = size_x; > if (size_y>vec[1]) vec[1] = size_y; > vec[2] = sn; > } > st_slices[st_slices._width-1][7] = (float)i; > } > } while (err==7); > > > std::FILE *file2 = cimg::fopen(filenamerec,"rb"); > for (int l = 0; l<(int)(st_global)._width; ++l) { > const CImg<uintT>& vec = st_global[l]; > CImg<T>(vec[0],vec[1],vec[2]).move_to(*this); > } > > for (int l = 0; l<(int)(st_slices)._width; ++l) { > const CImg<floatT>& vec = st_slices[l]; > const unsigned int > sn = (unsigned int)vec[0] - 1, > pixsize = (unsigned int)vec[1], > size_x = (unsigned int)vec[2], > size_y = (unsigned int)vec[3], > imn = (unsigned int)vec[7]; > const float ri = vec[4], rs = vec[5], ss = vec[6]; > switch (pixsize) { > case 8 : { > CImg<ucharT> buf(size_x,size_y); > cimg::fread(buf._data,size_x*size_y,file2); > if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); > CImg<T>& img = (*this)[imn]; > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); > } break; > case 16 : { > CImg<ushortT> buf(size_x,size_y); > cimg::fread(buf._data,size_x*size_y,file2); > if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); > CImg<T>& img = (*this)[imn]; > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); > } break; > case 32 : { > CImg<uintT> buf(size_x,size_y); > cimg::fread(buf._data,size_x*size_y,file2); > if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); > CImg<T>& img = (*this)[imn]; > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); > } break; > default : > cimg::fclose(file); > cimg::fclose(file2); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_parrec(): Unsupported %d-bits pixel type for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > pixsize,filename); > } > } > cimg::fclose(file); > cimg::fclose(file2); > if (!_width) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_parrec(): Failed to recognize valid PAR-REC data in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > return *this; > } > > > static CImgList<T> get_load_parrec(const char *const filename) { > return CImgList<T>().load_parrec(filename); > } ># 45548 "./CImg.h" > CImgList<T>& load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return _load_yuv(0,filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > > static CImgList<T> get_load_yuv(const char *const filename, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return CImgList<T>().load_yuv(filename,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > > CImgList<T>& load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return _load_yuv(file,0,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > > static CImgList<T> get_load_yuv(std::FILE *const file, > const unsigned int size_x, const unsigned int size_y=1, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool yuv2rgb=true) { > return CImgList<T>().load_yuv(file,size_x,size_y,first_frame,last_frame,step_frame,yuv2rgb); > } > > CImgList<T>& _load_yuv(std::FILE *const file, const char *const filename, > const unsigned int size_x, const unsigned int size_y, > const unsigned int first_frame, const unsigned int last_frame, > const unsigned int step_frame, const bool yuv2rgb) { > if (!filename && !file) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (size_x%2 || size_y%2) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Invalid odd XY dimensions %ux%u in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > size_x,size_y,filename?filename:"(FILE*)"); > if (!size_x || !size_y) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Invalid sequence size (%u,%u) in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > size_x,size_y,filename?filename:"(FILE*)"); > > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nlast_frame = first_frame<last_frame?last_frame:first_frame, > nstep_frame = step_frame?step_frame:1; > > CImg<ucharT> tmp(size_x,size_y,1,3), UV(size_x/2,size_y/2,1,2); > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); > bool stop_flag = false; > int err; > if (nfirst_frame) { > err = std::fseek(nfile,nfirst_frame*(size_x*size_y + size_x*size_y/2),1); > if (err) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): File '%s' doesn't contain frame number %u.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",nfirst_frame); > } > } > unsigned int frame; > for (frame = nfirst_frame; !stop_flag && frame<=nlast_frame; frame+=nstep_frame) { > tmp.fill(0); > > err = (int)std::fread((void*)(tmp._data),1,(unsigned long)tmp._width*tmp._height,nfile); > if (err!=(int)(tmp._width*tmp._height)) { > stop_flag = true; > if (err>0) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): File '%s' contains incomplete data or given image dimensions (%u,%u) are incorrect.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",size_x,size_y); > } else { > UV.fill(0); > > err = (int)std::fread((void*)(UV._data),1,(size_t)(UV.size()),nfile); > if (err!=(int)(UV.size())) { > stop_flag = true; > if (err>0) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): File '%s' contains incomplete data or given image dimensions (%u,%u) are incorrect.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",size_x,size_y); > } else { > for (int y = 0; y<(int)((UV)._height); ++y) for (int x = 0; x<(int)((UV)._width); ++x) { > const int x2 = x*2, y2 = y*2; > tmp(x2,y2,1) = tmp(x2+1,y2,1) = tmp(x2,y2+1,1) = tmp(x2+1,y2+1,1) = UV(x,y,0); > tmp(x2,y2,2) = tmp(x2+1,y2,2) = tmp(x2,y2+1,2) = tmp(x2+1,y2+1,2) = UV(x,y,1); > } > if (yuv2rgb) tmp.YCbCrtoRGB(); > insert(tmp); > if (nstep_frame>1) std::fseek(nfile,(nstep_frame-1)*(size_x*size_y + size_x*size_y/2),1); > } > } > } > if (stop_flag && nlast_frame!=~0U && frame!=nlast_frame) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_yuv(): Frame %d not reached since only %u frames were found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > nlast_frame,frame-1,filename?filename:"(FILE*)"); > > if (!file) cimg::fclose(nfile); > return *this; > } ># 45673 "./CImg.h" > CImgList<T>& load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true, const bool resume=false) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nlast_frame = first_frame<last_frame?last_frame:first_frame, > nstep_frame = step_frame?step_frame:1; > assign(); > > > if ((nfirst_frame || nlast_frame!=~0U || nstep_frame>1) || (resume && (pixel_format || !pixel_format))) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg(): Unable to load sub-frames from file '%s' unless libffmpeg is enabled.", > _width,_allocated_width,_data,pixel_type(), > filename); > > return load_ffmpeg_external(filename); ># 45816 "./CImg.h" > return *this; > } > > > static CImgList<T> get_load_ffmpeg(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1, const bool pixel_format=true) { > return CImgList<T>().load_ffmpeg(filename,first_frame,last_frame,step_frame,pixel_format); > } > > > > > > CImgList<T>& load_ffmpeg_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > std::FILE *file = 0; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > snprintf(filetmp2,sizeof(filetmp2),"%s_000001.ppm",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(filetmp2,sizeof(filetmp2),"%s_%%6d.ppm",filetmp); > > snprintf(command,sizeof(command),"%s -i \"%s\" \"%s\" >/dev/null 2>&1", > cimg::ffmpeg_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp2)._system_strescape().data()); > > > > > > > cimg::system(command,0); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > assign(); > unsigned int i = 1; > for (bool stop_flag = false; !stop_flag; ++i) { > snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u.ppm",filetmp,i); > CImg<T> img; > try { img.load_pnm(filetmp2); } > catch (CImgException&) { stop_flag = true; } > if (img) { img.move_to(*this); std::remove(filetmp2); } > } > cimg::exception_mode() = omode; > if (is_empty()) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_ffmpeg_external(): Failed to open file '%s' with external command 'ffmpeg'.", > _width,_allocated_width,_data,pixel_type(), > filename); > return *this; > } > > > static CImgList<T> get_load_ffmpeg_external(const char *const filename) { > return CImgList<T>().load_ffmpeg_external(filename); > } > > > > > > > CImgList<T>& load_gif_external(const char *const filename) { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gif_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > if (!_load_gif_external(filename,false)) > if (!_load_gif_external(filename,true)) > try { assign(CImg<T>().load_other(filename)); } catch (CImgException&) { assign(); } > if (is_empty()) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gif_external(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(),filename); > return *this; > } > > CImgList<T>& _load_gif_external(const char *const filename, const bool use_graphicsmagick=false) { > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > std::FILE *file = 0; > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > if (use_graphicsmagick) snprintf(filetmp2,sizeof(filetmp2),"%s.png.0",filetmp); > else snprintf(filetmp2,sizeof(filetmp2),"%s-0.png",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > > if (use_graphicsmagick) snprintf(command,sizeof(command),"%s convert \"%s\" \"%s.png\" >/dev/null 2>&1", > cimg::graphicsmagick_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > else snprintf(command,sizeof(command),"%s \"%s\" \"%s.png\" >/dev/null 2>&1", > cimg::imagemagick_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); ># 45929 "./CImg.h" > cimg::system(command,0); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > assign(); > > > snprintf(filetmp2,sizeof(filetmp2),"%s.png",filetmp); > CImg<T> img; > try { img.load_png(filetmp2); } > catch (CImgException&) { } > if (img) { img.move_to(*this); std::remove(filetmp2); } > else { > unsigned int i = 0; > for (bool stop_flag = false; !stop_flag; ++i) { > if (use_graphicsmagick) snprintf(filetmp2,sizeof(filetmp2),"%s.png.%u",filetmp,i); > else snprintf(filetmp2,sizeof(filetmp2),"%s-%u.png",filetmp,i); > CImg<T> img; > try { img.load_png(filetmp2); } > catch (CImgException&) { stop_flag = true; } > if (img) { img.move_to(*this); std::remove(filetmp2); } > } > } > cimg::exception_mode() = omode; > return *this; > } > > > static CImgList<T> get_load_gif_external(const char *const filename) { > return CImgList<T>().load_gif_external(filename); > } > > > > > > CImgList<T>& load_gzip_external(const char *const filename) { > if (!filename) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gzip_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > std::fclose(cimg::fopen(filename,"rb")); > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *ext = cimg::split_filename(filename,body), > *ext2 = cimg::split_filename(body,0); > std::FILE *file = 0; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gunzip_path(), > CImg<charT>::string(filename)._system_strescape().data(), > CImg<charT>::string(filetmp)._system_strescape().data()); > cimg::system(command); > if (!(file = std::fopen(filetmp,"rb"))) { > cimg::fclose(cimg::fopen(filename,"r")); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_gzip_external(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > > } else cimg::fclose(file); > load(filetmp); > std::remove(filetmp); > return *this; > } > > > static CImgList<T> get_load_gzip_external(const char *const filename) { > return CImgList<T>().load_gzip_external(filename); > } ># 46015 "./CImg.h" > template<typename tf, typename tc> > CImgList<T>& load_off(const char *const filename, > CImgList<tf>& primitives, CImgList<tc>& colors) { > return get_load_off(filename,primitives,colors).move_to(*this); > } > > > template<typename tf, typename tc> > static CImgList<T> get_load_off(const char *const filename, > CImgList<tf>& primitives, CImgList<tc>& colors) { > return CImg<T>().load_off(filename,primitives,colors)<'x'; > } ># 46035 "./CImg.h" > CImgList<T>& load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > const unsigned int > nfirst_frame = first_frame<last_frame?first_frame:last_frame, > nstep_frame = step_frame?step_frame:1; > unsigned int nlast_frame = first_frame<last_frame?last_frame:first_frame; ># 46051 "./CImg.h" > TIFF *tif = TIFFOpen(filename,"r"); > if (tif) { > unsigned int nb_images = 0; > do ++nb_images; while (TIFFReadDirectory(tif)); > if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "load_tiff(): Invalid specified frame range is [%u,%u] (step %u) since file '%s' contains %u image(s).", > _width,_allocated_width,_data,pixel_type(), > nfirst_frame,nlast_frame,nstep_frame,filename,nb_images); > > if (nfirst_frame>=nb_images) return assign(); > if (nlast_frame>=nb_images) nlast_frame = nb_images-1; > assign(1+(nlast_frame-nfirst_frame)/nstep_frame); > TIFFSetDirectory(tif,0); > > > > > for (int l = 0; l<(int)(*this)._width; ++l) _data[l]._load_tiff(tif,nfirst_frame + l*nstep_frame); > TIFFClose(tif); > } else throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "load_tiff(): Failed to open file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > return *this; > > } > > > static CImgList<T> get_load_tiff(const char *const filename, > const unsigned int first_frame=0, const unsigned int last_frame=~0U, > const unsigned int step_frame=1) { > return CImgList<T>().load_tiff(filename,first_frame,last_frame,step_frame); > } ># 46098 "./CImg.h" > const CImgList<T>& print(const char *const title=0, const bool display_stats=true) const { > unsigned int msiz = 0; > for (int l = 0; l<(int)(*this)._width; ++l) msiz+=_data[l].size(); > msiz*=sizeof(T); > const unsigned int mdisp = msiz<8*1024?0:(msiz<8*1024*1024?1:2); > char _title[64] = { 0 }; > if (!title) snprintf(_title,sizeof(_title),"CImgList<%s>",pixel_type()); > std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = %u/%u [%u %s], %sdata%s = (CImg<%s>*)%p", > cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, > cimg::t_bold,cimg::t_normal,(void*)this, > cimg::t_bold,cimg::t_normal,_width,_allocated_width, > mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), > mdisp==0?"b":(mdisp==1?"Kio":"Mio"), > cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); > if (_data) std::fprintf(cimg::output(),"..%p.\n",(void*)((char*)end()-1)); > else std::fprintf(cimg::output(),".\n"); > > char tmp[16] = { 0 }; > for (int ll = 0; ll<(int)(*this)._width; ++ll) { > snprintf(tmp,sizeof(tmp),"[%d]",ll); > std::fprintf(cimg::output()," "); > _data[ll].print(tmp,display_stats); > if (ll==3 && _width>8) { ll = _width-5; std::fprintf(cimg::output()," ...\n"); } > } > std::fflush(cimg::output()); > return *this; > } ># 46135 "./CImg.h" > const CImgList<T>& display(CImgDisplay &disp, const char axis='x', const float align=0) const { > disp.display(*this,axis,align); > return *this; > } ># 46150 "./CImg.h" > const CImgList<T>& display(CImgDisplay &disp, const bool display_info, > const char axis='x', const float align=0, > unsigned int *const XYZ=0) const { > bool is_exit = false; > return _display(disp,0,display_info,axis,align,XYZ,0,true,is_exit); > } ># 46164 "./CImg.h" > const CImgList<T>& display(const char *const title=0, const bool display_info=true, > const char axis='x', const float align=0, > unsigned int *const XYZ=0) const { > CImgDisplay disp; > bool is_exit = false; > return _display(disp,title,display_info,axis,align,XYZ,0,true,is_exit); > } > > const CImgList<T>& _display(CImgDisplay &disp, const char *const title, const bool display_info, > const char axis, const float align, unsigned int *const XYZ, > const unsigned int orig, const bool is_first_call, bool &is_exit) const { > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "display(): Empty instance.", > _width,_allocated_width,_data,pixel_type()); > if (!disp) { > if (axis=='x') { > unsigned int sum_width = 0, max_height = 0; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T> &img = _data[l]; > const unsigned int > w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), > h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); > sum_width+=w; > if (h>max_height) max_height = h; > } > disp.assign(CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,false),CImgDisplay::_fitscreen(sum_width,max_height,1,128,-85,true),title?title:0,1); > } else { > unsigned int max_width = 0, sum_height = 0; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T> &img = _data[l]; > const unsigned int > w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), > h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); > if (w>max_width) max_width = w; > sum_height+=h; > } > disp.assign(CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,false),CImgDisplay::_fitscreen(max_width,sum_height,1,128,-85,true),title?title:0,1); > } > if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); > } else if (title) disp.set_title("%s",title); > const CImg<char> dtitle = CImg<char>::string(disp.title()); > if (display_info) print(disp.title()); > disp.show().flush(); > > if (_width==1) { > const unsigned int dw = disp._width, dh = disp._height; > if (!is_first_call) > disp.resize(CImgDisplay::_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth,128,-85,false),CImgDisplay::_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth,128,-85,true),false). > set_title("%s (%ux%ux%ux%u)",dtitle.data(),_data[0]._width,_data[0]._height,_data[0]._depth,_data[0]._spectrum); > _data[0]._display(disp,0,false,XYZ,!is_first_call); > if (disp.key()) is_exit = true; > disp.resize(CImgDisplay::_fitscreen(dw,dh,1,128,-85,false),CImgDisplay::_fitscreen(dw,dh,1,128,-85,true),false).set_title("%s",dtitle.data()); > } else { > bool disp_resize = !is_first_call; > while (!disp.is_closed() && !is_exit) { > const CImg<intT> s = _get_select(disp,0,true,axis,align,orig,disp_resize,!is_first_call,true); > disp_resize = true; > if (s[0]<0) { > if (disp.button()&2) { disp.flush(); break; } > is_exit = true; > } else if (disp.wheel()) { > const int wheel = disp.wheel(); > disp.set_wheel(); > if (!is_first_call && wheel<0) break; > if (wheel>0 && _width>=4) { > const unsigned int > delta = cimg::max(1U,(unsigned int)cimg::round(0.3*_width)), > ind0 = (unsigned int)cimg::max(0,s[0] - (int)delta), > ind1 = (unsigned int)cimg::min(width() - 1,s[0] + (int)delta); > if ((ind0!=0 || ind1!=_width-1) && ind1 - ind0>=3) get_shared_images(ind0,ind1)._display(disp,0,false,axis,align,XYZ,orig + ind0,false,is_exit); > } > } else if (s[0]!=0 || s[1]!=width()-1) get_shared_images(s[0],s[1])._display(disp,0,false,axis,align,XYZ,orig+s[0],false,is_exit); > } > } > return *this; > } > > > > > > > > const CImgList<T>& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); > const char *const ext = cimg::split_filename(filename); > char nfilename[1024] = { 0 }; > const char *const fn = is_stdout?filename:number>=0?cimg::number_filename(filename,number,digits,nfilename):filename; ># 46286 "./CImg.h" > if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); > else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); > else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,true); > else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) return save_ffmpeg(fn); > > else if (!cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); > > else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); > else { > if (_width==1) _data[0].save(fn,-1); > else for (int l = 0; l<(int)(*this)._width; ++l) { _data[l].save(fn,is_stdout?-1:l); std::fputc((-1),stdout); } > } > return *this; > } > > > > > > > static bool is_saveable(const char *const filename) { > const char *const ext = cimg::split_filename(filename); > if (!cimg::strcasecmp(ext,"cimgz") || > > !cimg::strcasecmp(ext,"tif") || > !cimg::strcasecmp(ext,"tiff") || > > !cimg::strcasecmp(ext,"yuv") || > !cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mp4") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"ogv") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) return true; > return false; > } > > > > > > > > const CImgList<T>& save_gif_external(const char *const filename, const unsigned int fps=25, const unsigned int nb_loops=0) { > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > CImgList<charT> filenames; > std::FILE *file = 0; > > > > > > > > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > snprintf(filetmp2,sizeof(filetmp2),"%s_000001." "png",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > for (int l = 0; l<(int)(*this)._width; ++l) { > snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u." "png",filetmp,l+1); > CImg<charT>::string(filetmp2).move_to(filenames); > if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save(filetmp2); > else _data[l].save(filetmp2); > } > > > snprintf(command,sizeof(command),"%s -delay 1x%u -loop %u", > cimg::imagemagick_path(),fps,nb_loops); > CImg<ucharT>::string(command).move_to(filenames,0); > snprintf(command,sizeof(command),"\"%s\" >/dev/null 2>&1", > CImg<charT>::string(filename)._system_strescape().data()); > CImg<ucharT>::string(command).move_to(filenames); ># 46407 "./CImg.h" > CImg<charT> _command = filenames>'x'; > for (char *p = (_command)._data, *_maxp = (_command)._data + (_command).size(); p<_maxp; ++p) if (!*p) *p = ' '; > _command.back() = 0; > > cimg::system(_command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_gif_external(): Failed to save file '%s' with external command 'convert'.", > _width,_allocated_width,_data,pixel_type(), > filename); > else cimg::fclose(file); > for (int l = (int)(1)<0?0:(int)(1), _maxl = (unsigned int)filenames._width-1<(*this)._width?(int)(filenames._width-1):(int)(*this)._width-1; l<=_maxl; ++l) std::remove(filenames[l]); > return *this; > } ># 46430 "./CImg.h" > const CImgList<T>& save_ffmpeg(const char *const filename, const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (!fps) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg(): Invalid specified framerate 0, for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > for (int l = 0; l<(int)(*this)._width; ++l) if (!_data[l].is_sameXYZ(_data[0])) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg(): Invalid instance dimensions, for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > > > return save_ffmpeg_external(filename,0,fps,bitrate); ># 46720 "./CImg.h" > return *this; > } > > const CImgList<T>& _save_yuv(std::FILE *const file, const char *const filename, const bool is_rgb) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_yuv(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) { cimg::fempty(file,filename); return *this; } > if ((*this)[0].width()%2 || (*this)[0].height()%2) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_yuv(): Invalid odd instance dimensions (%u,%u) for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > (*this)[0].width(),(*this)[0].height(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > for (int l = 0; l<(int)(*this)._width; ++l) { > CImg<ucharT> YCbCr((*this)[l]); > if (is_rgb) YCbCr.RGBtoYCbCr(); > cimg::fwrite(YCbCr._data,(unsigned long)YCbCr._width*YCbCr._height,nfile); > cimg::fwrite(YCbCr.get_resize(YCbCr._width/2, YCbCr._height/2,1,3,3).data(0,0,0,1), > (unsigned long)YCbCr._width*YCbCr._height/2,nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImgList<T>& save_yuv(const char *const filename=0, const bool is_rgb=true) const { > return _save_yuv(0,filename,is_rgb); > } > > > > > > > const CImgList<T>& save_yuv(std::FILE *const file, const bool is_rgb=true) const { > return _save_yuv(file,0,is_rgb); > } > > const CImgList<T>& _save_cimg(std::FILE *const file, const char *const filename, const bool is_compressed) const { > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > > > > > > > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; > if (std::strstr(ptype,"unsigned")==ptype) std::fprintf(nfile,"%u unsigned_%s %s_endian\n",_width,ptype+9,etype); > else std::fprintf(nfile,"%u %s %s_endian\n",_width,ptype,etype); > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& img = _data[l]; > std::fprintf(nfile,"%u %u %u %u",img._width,img._height,img._depth,img._spectrum); > if (img._data) { > CImg<T> tmp; > if (cimg::endianness()) { tmp = img; cimg::invert_endianness(tmp._data,tmp.size()); } > const CImg<T>& ref = cimg::endianness()?tmp:img; > bool failed_to_compress = true; > if (is_compressed) { > > const unsigned long siz = sizeof(T)*ref.size(); > unsigned long csiz = siz + siz/100 + 16; > Bytef *const cbuf = new Bytef[csiz]; > if (compress(cbuf,&csiz,(Bytef*)ref._data,siz)) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Failed to save compressed data for file '%s', saving them uncompressed.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > else { > std::fprintf(nfile," #%lu\n",csiz); > cimg::fwrite(cbuf,csiz,nfile); > delete[] cbuf; > failed_to_compress = false; > } > > } > if (failed_to_compress) { > std::fputc('\n',nfile); > cimg::fwrite(ref._data,ref.size(),nfile); > } > } else std::fputc('\n',nfile); > } > if (!file) cimg::fclose(nfile); > return *this; > } > > > > > > > const CImgList<T>& save_cimg(const char *const filename, const bool is_compressed=false) const { > return _save_cimg(0,filename,is_compressed); > } > > > > > > > const CImgList<T>& save_cimg(std::FILE *file, const bool is_compressed=false) const { > return _save_cimg(file,0,is_compressed); > } > > const CImgList<T>& _save_cimg(std::FILE *const file, const char *const filename, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { ># 46897 "./CImg.h" > if (!file && !filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Empty instance, for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > > std::FILE *const nfile = file?file:cimg::fopen(filename,"rb+"); > bool saved = false, endian = cimg::endianness(); > char tmp[256] = { 0 }, str_pixeltype[256] = { 0 }, str_endian[256] = { 0 }; > unsigned int j, err, N, W, H, D, C; > int i; > j = 0; while((i=std::fgetc(nfile))!='\n' && i!=(-1) && j<256) tmp[j++] = (char)i; tmp[j] = 0; > err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype,str_endian); > if (err<2) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): CImg header not found in file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)"); > } > if (!cimg::strncasecmp("little",str_endian,6)) endian = false; > else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; > const unsigned int lmax = cimg::min(N,n0+_width); > if (!saved && !cimg::strcasecmp("bool",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(bool),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<bool> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(bool); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(bool); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(bool); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(bool); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(bool); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(bool); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(bool); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(bool); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_char",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned char> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("uchar",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned char),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned char> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned char); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned char); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("char",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(char),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<char> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(char); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(char); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(char); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(char); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(char); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(char); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(char); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(char); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_short",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned short> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("ushort",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned short),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned short> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned short); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned short); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("short",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(short),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<short> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(short); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(short); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(short); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(short); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(short); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(short); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(short); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(short); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_int",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned int> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("uint",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned int),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned int> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned int); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned int); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("int",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(int),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<int> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(int); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(int); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(int); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(int); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(int); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(int); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(int); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(int); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("unsigned_long",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned long> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("ulong",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(unsigned long),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<unsigned long> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(unsigned long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(unsigned long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(unsigned long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(unsigned long); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(unsigned long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(unsigned long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(unsigned long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(unsigned long); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("long",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(long),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<long> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(long); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(long); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(long); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(long); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(long); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(long); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(long); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(long); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("float",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(float),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<float> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(float); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(float); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(float); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(float); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(float); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(float); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(float); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(float); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved && !cimg::strcasecmp("double",str_pixeltype)) { for (unsigned int l = 0; l<lmax; ++l) { j = 0; while((i=std::fgetc(nfile))!='\n') tmp[j++]=(char)i; tmp[j] = 0; W = H = D = C = 0; if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" "save_cimg(): Invalid size (%u,%u,%u,%u) of image[%u], for file '%s'.", _width,_allocated_width,_data,pixel_type(), W,H,D,C,l,filename?filename:"(FILE*)"); if (W*H*D*C>0) { if (l<n0 || x0>=W || y0>=H || z0>=D || c0>=D) std::fseek(nfile,W*H*D*C*sizeof(double),1); else { const CImg<T>& img = (*this)[l - n0]; const T *ptrs = img._data; const unsigned int x1 = x0 + img._width - 1, y1 = y0 + img._height - 1, z1 = z0 + img._depth - 1, c1 = c0 + img._spectrum - 1, nx1 = x1>=W?W-1:x1, ny1 = y1>=H?H-1:y1, nz1 = z1>=D?D-1:z1, nc1 = c1>=C?C-1:c1; CImg<double> raw(1+nx1-x0); const unsigned int skipvb = c0*W*H*D*sizeof(double); if (skipvb) std::fseek(nfile,skipvb,1); for (unsigned int v = 1 + nc1 - c0; v; --v) { const unsigned int skipzb = z0*W*H*sizeof(double); if (skipzb) std::fseek(nfile,skipzb,1); for (unsigned int z = 1 + nz1 - z0; z; --z) { const unsigned int skipyb = y0*W*sizeof(double); if (skipyb) std::fseek(nfile,skipyb,1); for (unsigned int y = 1 + ny1 - y0; y; --y) { const unsigned int skipxb = x0*sizeof(double); if (skipxb) std::fseek(nfile,skipxb,1); raw.assign(ptrs, raw._width); ptrs+=img._width; if (endian) cimg::invert_endianness(raw._data,raw._width); cimg::fwrite(raw._data,raw._width,nfile); const unsigned int skipxe = (W - 1 - nx1)*sizeof(double); if (skipxe) std::fseek(nfile,skipxe,1); } const unsigned int skipye = (H - 1 - ny1)*W*sizeof(double); if (skipye) std::fseek(nfile,skipye,1); } const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(double); if (skipze) std::fseek(nfile,skipze,1); } const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(double); if (skipve) std::fseek(nfile,skipve,1); } } } saved = true; }; > if (!saved) { > if (!file) cimg::fclose(nfile); > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_cimg(): Unsupported data type '%s' for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename?filename:"(FILE*)",str_pixeltype); > } > if (!file) cimg::fclose(nfile); > return *this; > } ># 46959 "./CImg.h" > const CImgList<T>& save_cimg(const char *const filename, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > return _save_cimg(0,filename,n0,x0,y0,z0,c0); > } ># 46975 "./CImg.h" > const CImgList<T>& save_cimg(std::FILE *const file, > const unsigned int n0, > const unsigned int x0, const unsigned int y0, > const unsigned int z0, const unsigned int c0) const { > return _save_cimg(file,0,n0,x0,y0,z0,c0); > } > > static void _save_empty_cimg(std::FILE *const file, const char *const filename, > const unsigned int nb, > const unsigned int dx, const unsigned int dy, > const unsigned int dz, const unsigned int dc) { > std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); > const unsigned long siz = (unsigned long)dx*dy*dz*dc*sizeof(T); > std::fprintf(nfile,"%u %s\n",nb,pixel_type()); > for (unsigned int i=nb; i; --i) { > std::fprintf(nfile,"%u %u %u %u\n",dx,dy,dz,dc); > for (unsigned long off=siz; off; --off) std::fputc(0,nfile); > } > if (!file) cimg::fclose(nfile); > } ># 47005 "./CImg.h" > static void save_empty_cimg(const char *const filename, > const unsigned int nb, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return _save_empty_cimg(0,filename,nb,dx,dy,dz,dc); > } ># 47021 "./CImg.h" > static void save_empty_cimg(std::FILE *const file, > const unsigned int nb, > const unsigned int dx, const unsigned int dy=1, > const unsigned int dz=1, const unsigned int dc=1) { > return _save_empty_cimg(file,0,nb,dx,dy,dz,dc); > } > > > > > > > const CImgList<T>& save_tiff(const char *const filename, const unsigned int compression_type=0) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_tiff(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } ># 47048 "./CImg.h" > TIFF *tif = TIFFOpen(filename,"w"); > if (tif) { > for (unsigned int dir = 0, l = 0; l<_width; ++l) { > const CImg<T>& img = (*this)[l]; > if (img) { > if (img._depth==1) img._save_tiff(tif,dir++,compression_type); > else for (int z = 0; z<(int)((img)._depth); ++z) img.get_slice(z)._save_tiff(tif,dir++,compression_type); > } > } > TIFFClose(tif); > } else > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_tiff(): Failed to open stream for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > > return *this; > } > > > > > > > const CImgList<T>& save_gzip_external(const char *const filename) const { > if (!filename) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_gzip_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > > char command[1024] = { 0 }, filetmp[512] = { 0 }, body[512] = { 0 }; > const char > *ext = cimg::split_filename(filename,body), > *ext2 = cimg::split_filename(body,0); > std::FILE *file; > do { > if (!cimg::strcasecmp(ext,"gz")) { > if (*ext2) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext2); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } else { > if (*ext) snprintf(filetmp,sizeof(filetmp),"%s%c%s.%s",cimg::temporary_path(),'/',cimg::filenamerand(),ext); > else snprintf(filetmp,sizeof(filetmp),"%s%c%s.cimg",cimg::temporary_path(),'/',cimg::filenamerand()); > } > if ((file=std::fopen(filetmp,"rb"))!=0) cimg::fclose(file); > } while (file); > > if (is_saveable(body)) { > save(filetmp); > snprintf(command,sizeof(command),"%s -c \"%s\" > \"%s\"", > cimg::gzip_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > CImg<charT>::string(filename)._system_strescape().data()); > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", > _width,_allocated_width,_data,pixel_type(), > filename); > else cimg::fclose(file); > std::remove(filetmp); > } else { > char nfilename[1024] = { 0 }; > for (int l = 0; l<(int)(*this)._width; ++l) { > cimg::number_filename(body,l,6,nfilename); > if (*ext) std::sprintf(nfilename + std::strlen(nfilename),".%s",ext); > _data[l].save_gzip_external(nfilename); > } > } > return *this; > } ># 47127 "./CImg.h" > const CImgList<T>& save_ffmpeg_external(const char *const filename, const char *const codec=0, > const unsigned int fps=25, const unsigned int bitrate=2048) const { > if (!filename) > throw CImgArgumentException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg_external(): Specified filename is (null).", > _width,_allocated_width,_data,pixel_type()); > if (is_empty()) { cimg::fempty(0,filename); return *this; } > > const char > *const ext = cimg::split_filename(filename), > *const _codec = codec?codec:!cimg::strcasecmp(ext,"flv")?"flv":"mpeg2video"; > > char command[1024] = { 0 }, filetmp[512] = { 0 }, filetmp2[512] = { 0 }; > CImgList<charT> filenames; > std::FILE *file = 0; > for (int l = 0; l<(int)(*this)._width; ++l) if (!_data[l].is_sameXYZ(_data[0])) > throw CImgInstanceException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg_external(): Invalid instance dimensions for file '%s'.", > _width,_allocated_width,_data,pixel_type(), > filename); > do { > snprintf(filetmp,sizeof(filetmp),"%s%c%s",cimg::temporary_path(),'/',cimg::filenamerand()); > snprintf(filetmp2,sizeof(filetmp2),"%s_000001.ppm",filetmp); > if ((file=std::fopen(filetmp2,"rb"))!=0) cimg::fclose(file); > } while (file); > for (int l = 0; l<(int)(*this)._width; ++l) { > snprintf(filetmp2,sizeof(filetmp2),"%s_%.6u.ppm",filetmp,l+1); > CImg<charT>::string(filetmp2).move_to(filenames); > if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save_pnm(filetmp2); > else _data[l].save_pnm(filetmp2); > } > > snprintf(command,sizeof(command),"%s -i \"%s_%%6d.ppm\" -vcodec %s -b %uk -r %u -y \"%s\" >/dev/null 2>&1", > cimg::ffmpeg_path(), > CImg<charT>::string(filetmp)._system_strescape().data(), > _codec,bitrate,fps, > CImg<charT>::string(filename)._system_strescape().data()); > > > > > > > > cimg::system(command); > file = std::fopen(filename,"rb"); > if (!file) > throw CImgIOException("[instance(%u,%u,%p)] CImgList<%s>::" > "save_ffmpeg_external(): Failed to save file '%s' with external command 'ffmpeg'.", > _width,_allocated_width,_data,pixel_type(), > filename); > else cimg::fclose(file); > for (int l = 0; l<(int)(*this)._width; ++l) std::remove(filenames[l]); > return *this; > } ># 47193 "./CImg.h" > CImgList<T>& crop_font() { > return get_crop_font().move_to(*this); > } > > > > > CImgList<T> get_crop_font() const { > CImgList<T> res; > for (int l = 0; l<(int)(*this)._width; ++l) { > const CImg<T>& letter = (*this)[l]; > int xmin = letter._width, xmax = 0; > for (int y = 0; y<(int)((letter)._height); ++y) for (int x = 0; x<(int)((letter)._width); ++x) if (letter(x,y)) { if (x<xmin) xmin = x; if (x>xmax) xmax = x; } > if (xmin>xmax) CImg<T>(letter._width,letter._height,1,letter._spectrum,0).move_to(res); > else letter.get_crop(xmin,0,xmax,letter._height-1).move_to(res); > } > res[' '].resize(res['f']._width,-100,-100,-100,0); > if (' '+256<res.size()) res[' '+256].resize(res['f']._width,-100,-100,-100,0); > return res; > } > > > > > > > static const CImgList<ucharT>& font(const unsigned int font_height, const bool is_variable_width=true) { > if (!font_height) return CImgList<ucharT>::empty(); > cimg::mutex(11); > > > const char *data_fonts[] = { cimg::data_font12x13, cimg::data_font20x23, cimg::data_font47x53, 0 }; > const unsigned int data_widths[] = { 12,20,47,90 }, data_heights[] = { 13,23,53,103 }, data_Ms[] = { 86,79,57,47 }; > const unsigned int data_ind = font_height<=13?0:font_height<=23?1:font_height<=53?2:3; > static CImg<ucharT> base_fonts[4]; > CImg<ucharT> &base_font = base_fonts[data_ind]; > if (!base_font) { > const unsigned int w = data_widths[data_ind], h = data_heights[data_ind], M = data_Ms[data_ind]; > base_font.assign(256*w,h); > const char *data_font = data_fonts[data_ind]; > unsigned char *ptrd = base_font; > const unsigned char *const ptrde = base_font.end(); > > > CImg<char> data90x103; > if (!data_font) { > ((CImg<char>(cimg::_data_font90x103[0],(unsigned int)std::strlen(cimg::_data_font90x103[0]),1,1,1,true), > CImg<char>(cimg::_data_font90x103[1],(unsigned int)std::strlen(cimg::_data_font90x103[1])+1,1,1,1,true))>'x').move_to(data90x103); > data_font = data90x103.data(); > } > > > for (const char *ptrs = data_font; *ptrs; ++ptrs) { > const int c = *ptrs-M-32, v = c>=0?255:0, n = c>=0?c:-c; > if (ptrd+n<=ptrde) { std::memset(ptrd,v,n); ptrd+=n; } > else { std::memset(ptrd,v,ptrde-ptrd); break; } > } > } > > > static CImgList<ucharT> fonts[16]; > static bool is_variable_widths[16] = { 0 }; > unsigned int ind = ~0U; > for (int i = 0; i<16; ++i) > if (!fonts[i] || (is_variable_widths[i]==is_variable_width && font_height==fonts[i][0]._height)) { ind = i; break; } > if (ind==~0U) { > std::memmove(fonts,fonts+1,15*sizeof(CImgList<ucharT>)); > std::memmove(is_variable_widths,is_variable_widths+1,15*sizeof(bool)); > std::memset(fonts+(ind=15),0,sizeof(CImgList<ucharT>)); > } > CImgList<ucharT> &font = fonts[ind]; > > > if (!font) { > const unsigned int padding_x = font_height<33?1:font_height<53?2:font_height<103?3:4; > is_variable_widths[ind] = is_variable_width; > font = base_font.get_split('x',256); > if (font_height!=font[0]._height) > for (int l = 0; l<(int)(font)._width; ++l) > font[l].resize(cimg::max(1U,font[l]._width*font_height/font[l]._height),font_height,-100,-100, > font[0]._height>font_height?2:5); > if (is_variable_width) font.crop_font(); > for (int l = 0; l<(int)(font)._width; ++l) font[l].resize(font[l]._width + padding_x,-100,1,1,0,0,0.5); > font.insert(256,0); > for (int l = (int)(0)<0?0:(int)(0), _maxl = (unsigned int)255<(font)._width?(int)(255):(int)(font)._width-1; l<=_maxl; ++l) font[l].assign(font[l+256]._width,font[l+256]._height,1,3,1); > } > cimg::mutex(11,0); > return font; > } > > > > > > > CImgList<T>& FFT(const char axis, const bool invert=false) { > if (is_empty()) return *this; > if (_width==1) insert(1); > if (_width>2) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "FFT(): Instance has more than 2 images", > _width,_allocated_width,_data,pixel_type()); > > CImg<T>::FFT(_data[0],_data[1],axis,invert); > return *this; > } > > > CImgList<Tfloat> get_FFT(const char axis, const bool invert=false) const { > return CImgList<Tfloat>(*this,false).FFT(axis,invert); > } > > > > > > CImgList<T>& FFT(const bool invert=false) { > if (is_empty()) return *this; > if (_width==1) insert(1); > if (_width>2) > cimg::warn("[instance(%u,%u,%p)] CImgList<%s>::" > "FFT(): Instance has more than 2 images", > _width,_allocated_width,_data,pixel_type()); > > CImg<T>::FFT(_data[0],_data[1],invert); > return *this; > } > > > CImgList<Tfloat> get_FFT(const bool invert=false) const { > return CImgList<Tfloat>(*this,false).FFT(invert); > } > > > > > CImgList<T>& reverse_object3d() { > for (int l = 0; l<(int)(*this)._width; ++l) { > CImg<T>& p = _data[l]; > switch (p.size()) { > case 2: case 3: cimg::swap(p[0],p[1]); break; > case 6: cimg::swap(p[0],p[1],p[2],p[4],p[3],p[5]); break; > case 9: cimg::swap(p[0],p[1],p[3],p[5],p[4],p[6]); break; > case 4: cimg::swap(p[0],p[1],p[2],p[3]); break; > case 12: cimg::swap(p[0],p[1],p[2],p[3],p[4],p[6],p[5],p[7],p[8],p[10],p[9],p[11]); break; > } > } > return *this; > } > > > CImgList<T> get_reverse_object3d() const { > return (+*this).reverse_object3d(); > } > > > }; ># 47359 "./CImg.h" >namespace cimg { > > > inline unsigned long tictoc(const bool is_tic) { > cimg::mutex(2); > static CImg<unsigned long> times(64); > static unsigned int pos = 0; > const unsigned long t1 = cimg::time(); > if (is_tic) { > times[pos++] = t1; > if (pos>=times._width) > throw CImgArgumentException("cimg::tic(): Too much calls to 'cimg::tic()' without calls to 'cimg::toc()'."); > cimg::mutex(2,0); > return t1; > } > > if (!pos) > throw CImgArgumentException("cimg::toc(): No previous call to 'cimg::tic()' has been made."); > const unsigned long > t0 = times[--pos], > dt = t1>=t0?(t1-t0):cimg::type<unsigned long>::max(); > const unsigned int > edays = (unsigned int)(dt/86400000.0), > ehours = (unsigned int)((dt - edays*86400000.0)/3600000.0), > emin = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0)/60000.0), > esec = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0)/1000.0), > ems = (unsigned int)(dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0 - esec*1000.0); > if (!edays && !ehours && !emin && !esec) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u ms%s\n",cimg::t_red,1+2*pos,"",ems,cimg::t_normal); > else { > if (!edays && !ehours && !emin) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",esec,ems,cimg::t_normal); > else { > if (!edays && !ehours) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",emin,esec,ems,cimg::t_normal); > else{ > if (!edays) > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u hours %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",ehours,emin,esec,ems,cimg::t_normal); > else{ > std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u days %u hours %u min %u sec %u ms%s\n",cimg::t_red,1+2*pos,"",edays,ehours,emin,esec,ems,cimg::t_normal); > } > } > } > } > cimg::mutex(2,0); > return dt; > } ># 47425 "./CImg.h" > template<typename t> > inline int dialog(const char *const title, const char *const msg, > const char *const button1_label, const char *const button2_label, > const char *const button3_label, const char *const button4_label, > const char *const button5_label, const char *const button6_label, > const CImg<t>& logo, const bool is_centered = false) { > > > > > const unsigned char > black[] = { 0,0,0 }, white[] = { 255,255,255 }, gray[] = { 200,200,200 }, gray2[] = { 150,150,150 }; > > > CImgList<unsigned char> buttons, cbuttons, sbuttons; > if (button1_label) { CImg<unsigned char>().draw_text(0,0,button1_label,black,gray,1,13).move_to(buttons); > if (button2_label) { CImg<unsigned char>().draw_text(0,0,button2_label,black,gray,1,13).move_to(buttons); > if (button3_label) { CImg<unsigned char>().draw_text(0,0,button3_label,black,gray,1,13).move_to(buttons); > if (button4_label) { CImg<unsigned char>().draw_text(0,0,button4_label,black,gray,1,13).move_to(buttons); > if (button5_label) { CImg<unsigned char>().draw_text(0,0,button5_label,black,gray,1,13).move_to(buttons); > if (button6_label) { CImg<unsigned char>().draw_text(0,0,button6_label,black,gray,1,13).move_to(buttons); > }}}}}} > if (!buttons._width) > throw CImgArgumentException("cimg::dialog(): No buttons have been defined."); > for (int l = 0; l<(int)(buttons)._width; ++l) buttons[l].resize(-100,-100,1,3); > > unsigned int bw = 0, bh = 0; > for (int l = 0; l<(int)(buttons)._width; ++l) { bw = cimg::max(bw,buttons[l]._width); bh = cimg::max(bh,buttons[l]._height); } > bw+=8; bh+=8; > if (bw<64) bw = 64; > if (bw>128) bw = 128; > if (bh<24) bh = 24; > if (bh>48) bh = 48; > > CImg<unsigned char> button(bw,bh,1,3); > button.draw_rectangle(0,0,bw-1,bh-1,gray); > button.draw_line(0,0,bw-1,0,white).draw_line(0,bh-1,0,0,white); > button.draw_line(bw-1,0,bw-1,bh-1,black).draw_line(bw-1,bh-1,0,bh-1,black); > button.draw_line(1,bh-2,bw-2,bh-2,gray2).draw_line(bw-2,bh-2,bw-2,1,gray2); > CImg<unsigned char> sbutton(bw,bh,1,3); > sbutton.draw_rectangle(0,0,bw-1,bh-1,gray); > sbutton.draw_line(0,0,bw-1,0,black).draw_line(bw-1,0,bw-1,bh-1,black); > sbutton.draw_line(bw-1,bh-1,0,bh-1,black).draw_line(0,bh-1,0,0,black); > sbutton.draw_line(1,1,bw-2,1,white).draw_line(1,bh-2,1,1,white); > sbutton.draw_line(bw-2,1,bw-2,bh-2,black).draw_line(bw-2,bh-2,1,bh-2,black); > sbutton.draw_line(2,bh-3,bw-3,bh-3,gray2).draw_line(bw-3,bh-3,bw-3,2,gray2); > sbutton.draw_line(4,4,bw-5,4,black,1,0xAAAAAAAA,true).draw_line(bw-5,4,bw-5,bh-5,black,1,0xAAAAAAAA,false); > sbutton.draw_line(bw-5,bh-5,4,bh-5,black,1,0xAAAAAAAA,false).draw_line(4,bh-5,4,4,black,1,0xAAAAAAAA,false); > CImg<unsigned char> cbutton(bw,bh,1,3); > cbutton.draw_rectangle(0,0,bw-1,bh-1,black).draw_rectangle(1,1,bw-2,bh-2,gray2).draw_rectangle(2,2,bw-3,bh-3,gray); > cbutton.draw_line(4,4,bw-5,4,black,1,0xAAAAAAAA,true).draw_line(bw-5,4,bw-5,bh-5,black,1,0xAAAAAAAA,false); > cbutton.draw_line(bw-5,bh-5,4,bh-5,black,1,0xAAAAAAAA,false).draw_line(4,bh-5,4,4,black,1,0xAAAAAAAA,false); > > for (int ll = 0; ll<(int)(buttons)._width; ++ll) { > CImg<unsigned char>(cbutton).draw_image(1+(bw-buttons[ll].width())/2,1+(bh-buttons[ll].height())/2,buttons[ll]). > move_to(cbuttons); > CImg<unsigned char>(sbutton).draw_image((bw-buttons[ll].width())/2,(bh-buttons[ll].height())/2,buttons[ll]). > move_to(sbuttons); > CImg<unsigned char>(button).draw_image((bw-buttons[ll].width())/2,(bh-buttons[ll].height())/2,buttons[ll]). > move_to(buttons[ll]); > } > > CImg<unsigned char> canvas; > if (msg) ((CImg<unsigned char>().draw_text(0,0,"%s",gray,0,1,13,msg)*=-1)+=200).resize(-100,-100,1,3).move_to(canvas); > > const unsigned int > bwall = (buttons._width-1)*(12+bw) + bw, > w = cimg::max(196U,36+logo._width+canvas._width,24+bwall), > h = cimg::max(96U,36+canvas._height+bh,36+logo._height+bh), > lx = 12 + (canvas._data?0:((w-24-logo._width)/2)), > ly = (h-12-bh-logo._height)/2, > tx = lx+logo._width+12, > ty = (h-12-bh-canvas._height)/2, > bx = (w-bwall)/2, > by = h-12-bh; > > if (canvas._data) > canvas = CImg<unsigned char>(w,h,1,3). > draw_rectangle(0,0,w-1,h-1,gray). > draw_line(0,0,w-1,0,white).draw_line(0,h-1,0,0,white). > draw_line(w-1,0,w-1,h-1,black).draw_line(w-1,h-1,0,h-1,black). > draw_image(tx,ty,canvas); > else > canvas = CImg<unsigned char>(w,h,1,3). > draw_rectangle(0,0,w-1,h-1,gray). > draw_line(0,0,w-1,0,white).draw_line(0,h-1,0,0,white). > draw_line(w-1,0,w-1,h-1,black).draw_line(w-1,h-1,0,h-1,black); > if (logo._data) canvas.draw_image(lx,ly,logo); > > unsigned int xbuttons[6] = { 0 }; > for (int lll = 0; lll<(int)(buttons)._width; ++lll) { xbuttons[lll] = bx+(bw+12)*lll; canvas.draw_image(xbuttons[lll],by,buttons[lll]); } > > > CImgDisplay disp(canvas,title?title:" ",0,false,is_centered?true:false); > if (is_centered) disp.move((CImgDisplay::screen_width() - disp.width())/2, > (CImgDisplay::screen_height() - disp.height())/2); > bool stop_flag = false, refresh = false; > int oselected = -1, oclicked = -1, selected = -1, clicked = -1; > while (!disp.is_closed() && !stop_flag) { > if (refresh) { > if (clicked>=0) CImg<unsigned char>(canvas).draw_image(xbuttons[clicked],by,cbuttons[clicked]).display(disp); > else { > if (selected>=0) CImg<unsigned char>(canvas).draw_image(xbuttons[selected],by,sbuttons[selected]).display(disp); > else canvas.display(disp); > } > refresh = false; > } > disp.wait(15); > if (disp.is_resized()) disp.resize(disp,false); > > if (disp.button()&1) { > oclicked = clicked; > clicked = -1; > for (int l = 0; l<(int)(buttons)._width; ++l) > if (disp.mouse_y()>=(int)by && disp.mouse_y()<(int)(by+bh) && > disp.mouse_x()>=(int)xbuttons[l] && disp.mouse_x()<(int)(xbuttons[l]+bw)) { > clicked = selected = l; > refresh = true; > } > if (clicked!=oclicked) refresh = true; > } else if (clicked>=0) stop_flag = true; > > if (disp.key()) { > oselected = selected; > switch (disp.key()) { > case cimg::keyESC : selected=-1; stop_flag = true; break; > case cimg::keyENTER : if (selected<0) selected = 0; stop_flag = true; break; > case cimg::keyTAB : > case cimg::keyARROWRIGHT : > case cimg::keyARROWDOWN : selected = (selected+1)%buttons._width; break; > case cimg::keyARROWLEFT : > case cimg::keyARROWUP : selected = (selected+buttons._width-1)%buttons._width; break; > } > disp.set_key(); > if (selected!=oselected) refresh = true; > } > } > if (!disp) selected = -1; > return selected; > > } > > > inline int dialog(const char *const title, const char *const msg, > const char *const button1_label, const char *const button2_label, const char *const button3_label, > const char *const button4_label, const char *const button5_label, const char *const button6_label, > const bool is_centered) { > return dialog(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label, > CImg<unsigned char>::_logo40x38(),is_centered); > } ># 47592 "./CImg.h" > inline double eval(const char *const expression, const double x, const double y, const double z, const double c) { > static const CImg<float> empty; > return empty.eval(expression,x,y,z,c); > } > > template<typename t> > inline CImg<typename cimg::superset<double,t>::type> eval(const char *const expression, const CImg<t>& xyzc) { > static const CImg<float> empty; > return empty.eval(expression,xyzc); > } > > >} > > >} > > >namespace cil = cimg_library; ># 71 "gmic.h" 2 > > > > > > ># 1 "/usr/include/c++/4.8.2/cerrno" 1 3 ># 39 "/usr/include/c++/4.8.2/cerrno" 3 > ># 40 "/usr/include/c++/4.8.2/cerrno" 3 > ># 1 "/usr/include/errno.h" 1 3 4 ># 31 "/usr/include/errno.h" 3 4 >extern "C" { > > > ># 1 "/usr/include/bits/errno.h" 1 3 4 ># 24 "/usr/include/bits/errno.h" 3 4 ># 1 "/usr/include/linux/errno.h" 1 3 4 ># 1 "/usr/include/asm/errno.h" 1 3 4 ># 1 "/usr/include/asm-generic/errno.h" 1 3 4 > > > ># 1 "/usr/include/asm-generic/errno-base.h" 1 3 4 ># 5 "/usr/include/asm-generic/errno.h" 2 3 4 ># 1 "/usr/include/asm/errno.h" 2 3 4 ># 1 "/usr/include/linux/errno.h" 2 3 4 ># 25 "/usr/include/bits/errno.h" 2 3 4 ># 50 "/usr/include/bits/errno.h" 3 4 >extern int *__errno_location (void) throw () __attribute__ ((__const__)); ># 36 "/usr/include/errno.h" 2 3 4 ># 54 "/usr/include/errno.h" 3 4 >extern char *program_invocation_name, *program_invocation_short_name; > > > >} ># 68 "/usr/include/errno.h" 3 4 >typedef int error_t; ># 42 "/usr/include/c++/4.8.2/cerrno" 2 3 ># 78 "gmic.h" 2 ># 1 "/usr/include/sys/resource.h" 1 3 4 ># 24 "/usr/include/sys/resource.h" 3 4 ># 1 "/usr/include/bits/resource.h" 1 3 4 ># 31 "/usr/include/bits/resource.h" 3 4 >enum __rlimit_resource >{ > > RLIMIT_CPU = 0, > > > > RLIMIT_FSIZE = 1, > > > > RLIMIT_DATA = 2, > > > > RLIMIT_STACK = 3, > > > > RLIMIT_CORE = 4, > > > > > > > __RLIMIT_RSS = 5, > > > > RLIMIT_NOFILE = 7, > __RLIMIT_OFILE = RLIMIT_NOFILE, > > > > > RLIMIT_AS = 9, > > > > __RLIMIT_NPROC = 6, > > > > __RLIMIT_MEMLOCK = 8, > > > > __RLIMIT_LOCKS = 10, > > > > __RLIMIT_SIGPENDING = 11, > > > > __RLIMIT_MSGQUEUE = 12, > > > > > > __RLIMIT_NICE = 13, > > > > > __RLIMIT_RTPRIO = 14, > > > > > > __RLIMIT_RTTIME = 15, > > > __RLIMIT_NLIMITS = 16, > __RLIM_NLIMITS = __RLIMIT_NLIMITS > > >}; ># 131 "/usr/include/bits/resource.h" 3 4 >typedef __rlim_t rlim_t; > > > > >typedef __rlim64_t rlim64_t; > > >struct rlimit > { > > rlim_t rlim_cur; > > rlim_t rlim_max; > }; > > >struct rlimit64 > { > > rlim64_t rlim_cur; > > rlim64_t rlim_max; > }; > > > >enum __rusage_who >{ > > RUSAGE_SELF = 0, > > > > RUSAGE_CHILDREN = -1 > > > > , > > RUSAGE_THREAD = 1 > > > > >}; > > ># 1 "/usr/include/bits/time.h" 1 3 4 ># 180 "/usr/include/bits/resource.h" 2 3 4 > > > > > > > >struct rusage > { > > struct timeval ru_utime; > > struct timeval ru_stime; > > __extension__ union > { > long int ru_maxrss; > __syscall_slong_t __ru_maxrss_word; > }; > > > > __extension__ union > { > long int ru_ixrss; > __syscall_slong_t __ru_ixrss_word; > }; > > __extension__ union > { > long int ru_idrss; > __syscall_slong_t __ru_idrss_word; > }; > > __extension__ union > { > long int ru_isrss; > __syscall_slong_t __ru_isrss_word; > }; > > > __extension__ union > { > long int ru_minflt; > __syscall_slong_t __ru_minflt_word; > }; > > __extension__ union > { > long int ru_majflt; > __syscall_slong_t __ru_majflt_word; > }; > > __extension__ union > { > long int ru_nswap; > __syscall_slong_t __ru_nswap_word; > }; > > > __extension__ union > { > long int ru_inblock; > __syscall_slong_t __ru_inblock_word; > }; > > __extension__ union > { > long int ru_oublock; > __syscall_slong_t __ru_oublock_word; > }; > > __extension__ union > { > long int ru_msgsnd; > __syscall_slong_t __ru_msgsnd_word; > }; > > __extension__ union > { > long int ru_msgrcv; > __syscall_slong_t __ru_msgrcv_word; > }; > > __extension__ union > { > long int ru_nsignals; > __syscall_slong_t __ru_nsignals_word; > }; > > > > __extension__ union > { > long int ru_nvcsw; > __syscall_slong_t __ru_nvcsw_word; > }; > > > __extension__ union > { > long int ru_nivcsw; > __syscall_slong_t __ru_nivcsw_word; > }; > }; > > > > > > > >enum __priority_which >{ > PRIO_PROCESS = 0, > > PRIO_PGRP = 1, > > PRIO_USER = 2 > >}; > > >extern "C" { > > > > >extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource, > const struct rlimit *__new_limit, > struct rlimit *__old_limit) throw (); ># 322 "/usr/include/bits/resource.h" 3 4 >extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource, > const struct rlimit64 *__new_limit, > struct rlimit64 *__old_limit) throw (); > > > >} ># 25 "/usr/include/sys/resource.h" 2 3 4 > > > > > > >extern "C" { ># 42 "/usr/include/sys/resource.h" 3 4 >typedef int __rlimit_resource_t; >typedef int __rusage_who_t; >typedef int __priority_which_t; > > > > > >extern int getrlimit (__rlimit_resource_t __resource, > struct rlimit *__rlimits) throw (); ># 61 "/usr/include/sys/resource.h" 3 4 >extern int getrlimit64 (__rlimit_resource_t __resource, > struct rlimit64 *__rlimits) throw (); > > > > > > >extern int setrlimit (__rlimit_resource_t __resource, > const struct rlimit *__rlimits) throw (); ># 81 "/usr/include/sys/resource.h" 3 4 >extern int setrlimit64 (__rlimit_resource_t __resource, > const struct rlimit64 *__rlimits) throw (); > > > > >extern int getrusage (__rusage_who_t __who, struct rusage *__usage) throw (); > > > > > >extern int getpriority (__priority_which_t __which, id_t __who) throw (); > > > >extern int setpriority (__priority_which_t __which, id_t __who, int __prio) > throw (); > >} ># 79 "gmic.h" 2 >static struct gmic_increase_stack { > gmic_increase_stack() { > const rlim_t requested_stack_size = 16777216; > struct rlimit rl; > const int result = getrlimit(RLIMIT_STACK,&rl); > if (!result && rl.rlim_cur<requested_stack_size) { > rl.rlim_cur = requested_stack_size; > setrlimit(RLIMIT_STACK,&rl); > } > } >} _gmic_increase_stack; > > > >const char _dollar = 23, _lbrace = 24, _rbrace = 25, _comma = 26, _dquote = 28, _arobace = 29, > _newline = 30; > > >inline char *gmic_strreplace(char *const str) { > for (char *s = str ; *s; ++s) { > const char c = *s; > if (c<' ') > *s = c==_dollar?'$':c==_lbrace?'{':c==_rbrace?'}':c==_comma?',': > c==_dquote?'\"':c==_arobace?'@':c; > } > return str; >} ># 156 "gmic.h" >struct gmic_exception { > cimg_library::CImg<char> _command_help, _message; > > gmic_exception() {} > > gmic_exception(const char *const command, const char *const message) { > if (command) { > _command_help.assign(std::strlen(command)+1,1,1,1); > std::strcpy(_command_help._data,command); > } > if (message) { > _message.assign(std::strlen(message)+1,1,1,1); > std::strcpy(_message._data,message); > } > } > > const char *what() const { > return _message._data?_message._data:""; > } > const char *command_help() const { > return _command_help._data?_command_help._data:""; > } >}; > > > >struct gmic { ># 191 "gmic.h" > ~gmic(); > > > gmic(); > > gmic(const char *const commands_line, const char *const custom_commands=0, > const bool include_default_commands=true, float *const p_progress=0, int *const p_cancel=0); > > template<typename T> > gmic(const int argc, const char *const *const argv, cimg_library::CImgList<T>& images, > cimg_library::CImgList<char>& images_names, > const char *const custom_commands=0, const bool include_default_commands=true, > float *const p_progress=0, int *const p_cancel=0); > > template<typename T> > gmic(const char *const commands_line, cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > const char *const custom_commands=0, const bool include_default_commands=true, > float *const p_progress=0, int *const p_cancel=0); > > > template<typename T> > gmic& parse(const char *const commands_line, > cimg_library::CImgList<T> &images, cimg_library::CImgList<char> &images_names) { > return parse(commands_line_to_CImgList(commands_line),images,images_names); > } > > > > > > template<typename T> > void _gmic(const char *const commands_line, cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > const char *const custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel); > > gmic& add_commands(const char *const data_commands, > cimg_library::CImgList<char> commands_names[256], > cimg_library::CImgList<char> commands[256], > cimg_library::CImgList<char> commands_has_arguments[256], > const char *const commands_file=0); > gmic& add_commands(std::FILE *const file, > const char *const filename, > cimg_library::CImgList<char> commands_names[256], > cimg_library::CImgList<char> commands[256], > cimg_library::CImgList<char> commands_has_arguments[256], > const bool add_debug_infos=false); > cimg_library::CImg<char> scope2string() const; > cimg_library::CImg<char> scope2string(const cimg_library::CImg<unsigned int>& scope_selection) const; > cimg_library::CImg<char> scope2string(const cimg_library::CImg<unsigned int>* scope_selection) const; > > cimg_library::CImg<unsigned int> selection2cimg(const char *const string, const unsigned int indice_max, > const cimg_library::CImgList<char>& names, > const char *const command, const bool is_selection, > const bool allow_new_name, cimg_library::CImg<char>& new_name); > > cimg_library::CImg<char> selection2string(const cimg_library::CImg<unsigned int>& selection, > const cimg_library::CImgList<char>& images_names, > const bool display_selection) const; > > cimg_library::CImgList<char> commands_line_to_CImgList(const char *const commands_line); > > template<typename T> > cimg_library::CImg<char> substitute_item(const char *const source, > cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > unsigned int variables_sizes[256]); > > gmic& print(const char *format, ...); > gmic& error(const char *format, ...); > gmic& debug(const char *format, ...); > > template<typename T> > gmic& print(const cimg_library::CImgList<T>& list, const cimg_library::CImg<unsigned int> *const scope_selection, > const char *format, ...); > > template<typename T> > gmic& warn(const cimg_library::CImgList<T>& list, const cimg_library::CImg<unsigned int> *const scope_selection, > const char *format, ...); > > template<typename T> > gmic& error(const cimg_library::CImgList<T>& list, const cimg_library::CImg<unsigned int> *const scope_selection, > const char *const command, const char *format, ...); > > template<typename T> > gmic& debug(const cimg_library::CImgList<T>& list, const char *format, ...); > > template<typename T> > gmic& print_images(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > const bool is_header=true); > template<typename T> > gmic& display_images(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > unsigned int *const XYZ); > template<typename T> > gmic& display_plots(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > const unsigned int plot_type, const unsigned int vertex_type, > const double xmin, const double xmax, > const double ymin, const double ymax); > template<typename T> > gmic& display_objects3d(const cimg_library::CImgList<T>& images, > const cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection); > template<typename T> > cimg_library::CImg<T>& check_image(const cimg_library::CImgList<T>& list, cimg_library::CImg<T>& img); > template<typename T> > const cimg_library::CImg<T>& check_image(const cimg_library::CImgList<T>& list, const cimg_library::CImg<T>& img); > > template<typename T> > gmic& remove_images(cimg_library::CImgList<T>& images, cimg_library::CImgList<char>& images_names, > const cimg_library::CImg<unsigned int>& selection, > const unsigned int start, const unsigned int end); > > template<typename T> > gmic& parse(const cimg_library::CImgList<char>& commands_line, > cimg_library::CImgList<T> &images, cimg_library::CImgList<char> &images_names) { > unsigned int variables_sizes[256] = { 0 }; > unsigned int position = 0; > setlocale(1,"C"); > scope.assign(1U); > scope._data[0].assign(2,1,1,1); > scope._data[0]._data[0] = '.'; > scope._data[0]._data[1] = 0; > dowhiles.assign(0U); > repeatdones.assign(0U); > status.assign(0U); > is_start = true; > is_quit = false; > is_return = false; > is_default_type = true; > *progress = -1; > return _parse(commands_line,position,images,images_names,variables_sizes); > } > > template<typename T> > gmic& _parse(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<T> &images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_bool(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<bool>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_uchar(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<unsigned char>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_char(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<char>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_ushort(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<unsigned short>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_short(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<short>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_uint(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<unsigned int>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_int(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<int>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_float(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<float>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > gmic& _parse_double(const cimg_library::CImgList<char>& commands_line, unsigned int& position, > cimg_library::CImgList<double>& images, cimg_library::CImgList<char> &images_names, > unsigned int variables_sizes[256]); > > > > cimg_library::CImgDisplay instant_window[10]; > > cimg_library::CImgList<char> *const commands, *const commands_names, *const commands_has_arguments, > *const _variables, *const _variables_names, **const variables, **const variables_names, > commands_files, scope; > cimg_library::CImgList<unsigned int> dowhiles, repeatdones; > cimg_library::CImg<unsigned char> background3d, light3d; > cimg_library::CImg<float> pose3d; > cimg_library::CImg<char> status; > float focale3d, light3d_x, light3d_y, light3d_z, specular_lightness3d, specular_shininess3d, > _progress, *progress; > bool is_released, is_debug, is_start, is_quit, is_return, is_double3d, is_default_type, > is_debug_infos, check_elif; > int verbosity, render3d, renderd3d; > volatile int _cancel, *cancel; > unsigned int nb_carriages, debug_filename, debug_line; > unsigned long reference_time; > >}; ># 1880 "gmic.cpp" 2 > ># 1 "gmic_def.h" 1 > > >char data_gmic_def[] = { > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 71, 108, 111, 98, 97, 108, > 32, 111, 112, 116, 105, 111, 110, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 101, 98, 117, 103, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 99, 116, 105, 118, 97, 116, 101, 32, 100, 101, > 98, 117, 103, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 87, 104, 101, 110, 32, 97, 99, 116, 105, 118, 97, 116, 101, > 100, 44, 32, 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 105, 110, 116, > 101, 114, 112, 114, 101, 116, 101, 114, 32, 98, 101, 99, 111, 109, 101, 115, > 32, 118, 101, 114, 121, 32, 118, 101, 114, 98, 111, 115, 101, 32, 97, 110, > 100, 32, 111, 117, 116, 112, 117, 116, 115, 32, 97, 100, 100, 105, 116, 105, > 111, 110, 110, 97, 108, 32, 108, 111, 103, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 109, 101, 115, 115, 97, 103, 101, 115, 32, 97, 98, 111, 117, > 116, 32, 105, 116, 115, 32, 105, 110, 116, 101, 114, 110, 97, 108, 32, 115, > 116, 97, 116, 101, 32, 111, 110, 32, 116, 104, 101, 32, 115, 116, 97, 110, > 100, 97, 114, 100, 32, 111, 117, 116, 112, 117, 116, 32, 40, 115, 116, 100, > 111, 117, 116, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, > 104, 105, 115, 32, 111, 112, 116, 105, 111, 110, 32, 99, 97, 110, 32, 98, > 101, 32, 117, 115, 101, 102, 117, 108, 32, 119, 104, 101, 110, 32, 100, 101, > 98, 117, 103, 103, 105, 110, 103, 32, 116, 104, 101, 32, 101, 120, 101, 99, > 117, 116, 105, 111, 110, 32, 111, 102, 32, 97, 32, 99, 117, 115, 116, 111, > 109, 32, 99, 111, 109, 109, 97, 110, 100, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 104, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 104, > 101, 108, 112, 39, 46, 32, 58, 32, 40, 42, 41, 10, 104, 32, 58, 10, > 45, 104, 101, 108, 112, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, > 104, 101, 108, 112, 32, 58, 32, 95, 99, 111, 109, 109, 97, 110, 100, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, > 97, 121, 32, 104, 101, 108, 112, 32, 40, 111, 112, 116, 105, 111, 110, 97, > 108, 108, 121, 32, 102, 111, 114, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, 108, 121, 41, 32, > 97, 110, 100, 32, 101, 120, 105, 116, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 104, 39, 41, > 46, 10, 104, 101, 108, 112, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 34, 34, 125, 44, 36, 123, 50, 61, 49, 125, 10, 45, 105, > 102, 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 121, 32, 45, 97, 32, 121, 10, 45, > 45, 95, 104, 101, 108, 112, 32, 36, 49, 44, 36, 50, 32, 45, 107, 91, > 48, 93, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 64, 123, 125, > 41, 125, 32, 45, 95, 104, 101, 108, 112, 91, 48, 93, 32, 64, 123, 125, > 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 10, 95, 104, > 101, 108, 112, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 34, 34, 125, 10, 45, 118, 32, 45, 49, 10, 45, 105, 102, 32, 123, 33, > 110, 97, 114, 103, 40, 34, 36, 49, 34, 41, 125, 32, 95, 105, 115, 95, > 101, 120, 97, 109, 112, 108, 101, 61, 48, 32, 45, 95, 95, 104, 101, 108, > 112, 32, 97, 115, 99, 105, 105, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 34, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 32, 45, 117, > 32, 34, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 45, 39, > 125, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 49, 48, 48, 37, > 125, 61, 61, 123, 39, 93, 39, 125, 34, 32, 38, 38, 32, 34, 105, 33, > 61, 123, 39, 91, 39, 125, 125, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 32, 45, 44, 123, 39, 91, 39, 125, 32, 45, 107, 91, 48, 93, 32, > 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 99, 111, 109, > 109, 97, 110, 100, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 107, 115, 48, 61, 34, 48, 34, 32, 107, 115, 49, > 61, 34, 45, 107, 91, 48, 93, 34, 10, 45, 105, 102, 32, 36, 50, 32, > 45, 95, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, 97, > 115, 99, 105, 105, 91, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 32, 49, 44, 123, 104, 43, 49, 125, 44, 49, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 49, 10, 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, > 109, 105, 99, 32, 34, 36, 99, 111, 109, 109, 97, 110, 100, 34, 32, 58, > 34, 39, 125, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, > 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, 109, 105, 99, 32, 34, > 36, 99, 111, 109, 109, 97, 110, 100, 34, 58, 34, 39, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, > 32, 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, 109, 105, 99, 32, > 34, 36, 99, 111, 109, 109, 97, 110, 100, 34, 92, 110, 34, 39, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 49, 125, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, > 91, 103, 109, 105, 99, 93, 32, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 34, 36, 99, 111, 109, 109, 97, 110, 100, 34, 39, 32, 104, 97, 115, 32, > 110, 111, 32, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 46, 32, > 84, 114, 121, 32, 39, 103, 109, 105, 99, 32, 45, 104, 39, 32, 102, 111, > 114, 32, 103, 108, 111, 98, 97, 108, 32, 104, 101, 108, 112, 46, 92, 110, > 92, 110, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 32, 45, 117, 32, > 34, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 97, 32, 121, 32, 45, 115, > 32, 45, 44, 49, 48, 10, 115, 116, 111, 112, 102, 108, 97, 103, 61, 48, > 10, 95, 105, 115, 95, 101, 120, 97, 109, 112, 108, 101, 61, 48, 10, 45, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, > 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, 91, 93, 32, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 105, 102, 32, 123, 104, 62, 55, 34, 32, 38, 38, 32, 34, > 123, 64, 123, 45, 49, 44, 48, 45, 53, 125, 39, 61, 61, 39, 123, 39, > 34, 35, 64, 103, 109, 105, 99, 34, 39, 125, 125, 125, 10, 45, 114, 111, > 119, 115, 32, 55, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, > 123, 105, 33, 61, 123, 39, 58, 39, 125, 125, 10, 45, 115, 32, 45, 44, > 123, 39, 34, 58, 32, 34, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, > 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 36, 99, 111, 109, 109, 97, > 110, 100, 125, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, > 97, 115, 99, 105, 105, 10, 45, 105, 102, 32, 36, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, > 92, 110, 32, 32, 32, 32, 45, 34, 36, 99, 111, 109, 109, 97, 110, 100, > 34, 58, 32, 69, 113, 117, 105, 118, 97, 108, 101, 110, 116, 32, 116, 111, > 32, 39, 34, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, > 107, 48, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 117, 32, 36, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, 48, 32, 45, > 114, 101, 116, 117, 114, 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 115, 101, 32, 115, 116, 111, 112, 102, 108, 97, 103, 61, 49, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 114, 111, 119, > 115, 32, 49, 44, 49, 48, 48, 37, 10, 45, 105, 102, 32, 123, 105, 61, > 61, 123, 39, 58, 39, 125, 125, 32, 115, 116, 111, 112, 102, 108, 97, 103, > 61, 49, 10, 45, 101, 108, 115, 101, 10, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, > 105, 61, 61, 123, 39, 36, 39, 125, 125, 10, 45, 114, 111, 119, 115, 32, > 49, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 36, 95, 105, > 115, 95, 101, 120, 97, 109, 112, 108, 101, 32, 45, 105, 91, 48, 93, 32, > 40, 123, 39, 34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 34, 39, 125, 41, 10, 45, 101, 108, 115, 101, 32, 45, 105, 91, 48, 93, > 32, 40, 123, 39, 34, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 69, > 120, 97, 109, 112, 108, 101, 40, 115, 41, 58, 32, 34, 39, 125, 41, 32, > 95, 105, 115, 95, 101, 120, 97, 109, 112, 108, 101, 61, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 121, 91, 48, 93, 32, 45, 97, 32, 121, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, > 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, 116, 105, > 111, 110, 95, 97, 115, 99, 105, 105, 32, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 115, > 116, 111, 112, 102, 108, 97, 103, 61, 49, 32, 45, 101, 110, 100, 105, 102, > 32, 36, 123, 107, 115, 123, 64, 35, 33, 61, 48, 125, 125, 32, 45, 101, > 110, 100, 108, 32, 45, 105, 102, 32, 36, 115, 116, 111, 112, 102, 108, 97, > 103, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 92, 110, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 10, 45, 117, > 32, 34, 34, 10, 95, 95, 104, 101, 108, 112, 32, 58, 10, 45, 109, 32, > 34, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 58, > 32, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 95, > 36, 49, 32, 92, 34, 36, 34, 34, 49, 92, 34, 34, 10, 45, 109, 32, > 34, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, > 32, 58, 32, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, > 97, 112, 104, 95, 36, 49, 32, 92, 34, 36, 34, 34, 49, 92, 34, 34, > 10, 45, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, 36, > 49, 91, 93, 10, 45, 95, 104, 101, 108, 112, 95, 117, 115, 97, 103, 101, > 91, 93, 10, 45, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, > 99, 32, 36, 49, 44, 34, 105, 109, 103, 47, 34, 44, 48, 10, 45, 95, > 104, 101, 108, 112, 95, 101, 120, 97, 109, 112, 108, 101, 115, 91, 93, 10, > 45, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, 101, 114, 95, 36, 49, > 91, 93, 10, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, > 108, 97, 116, 101, 120, 32, 58, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 36, 95, 103, 109, 105, 99, 95, 105, 115, 95, 98, 101, 116, 97, > 41, 125, 32, 115, 116, 114, 98, 101, 116, 97, 61, 34, 32, 40, 98, 101, > 116, 97, 41, 34, 32, 45, 101, 108, 115, 101, 32, 115, 116, 114, 98, 101, > 116, 97, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, 95, 118, 101, > 114, 115, 105, 111, 110, 41, 125, 32, 115, 116, 114, 118, 101, 114, 61, 36, > 95, 103, 109, 105, 99, 95, 118, 101, 114, 115, 105, 111, 110, 32, 45, 101, > 108, 115, 101, 32, 115, 116, 114, 118, 101, 114, 61, 64, 123, 45, 115, 116, > 114, 118, 101, 114, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 34, 92, 92, 100, 111, 99, 117, 109, 101, > 110, 116, 99, 108, 97, 115, 115, 91, 97, 52, 112, 97, 112, 101, 114, 44, > 49, 49, 112, 116, 44, 116, 119, 111, 115, 105, 100, 101, 93, 123, 98, 111, > 111, 107, 125, 10, 92, 110, 92, 92, 117, 115, 101, 112, 97, 99, 107, 97, > 103, 101, 123, 104, 121, 112, 101, 114, 114, 101, 102, 44, 102, 97, 110, 99, > 121, 104, 100, 114, 44, 103, 114, 97, 112, 104, 105, 99, 120, 44, 97, 109, > 115, 115, 121, 109, 98, 44, 97, 109, 115, 109, 97, 116, 104, 44, 116, 105, > 109, 101, 115, 44, 109, 97, 107, 101, 105, 100, 120, 44, 108, 105, 115, 116, > 105, 110, 103, 115, 125, 10, 92, 110, 92, 92, 103, 114, 97, 112, 104, 105, > 99, 115, 112, 97, 116, 104, 123, 123, 105, 109, 103, 47, 125, 125, 10, 92, > 110, 92, 92, 112, 97, 103, 101, 115, 116, 121, 108, 101, 123, 102, 97, 110, > 99, 121, 112, 108, 97, 105, 110, 125, 10, 92, 110, 92, 92, 108, 104, 101, > 97, 100, 91, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, > 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, 92, 92, 116, 104, 101, 112, > 97, 103, 101, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, > 105, 110, 123, 125, 123, 92, 92, 114, 105, 103, 104, 116, 109, 97, 114, 107, > 125, 125, 10, 92, 110, 92, 92, 114, 104, 101, 97, 100, 91, 92, 92, 102, > 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 108, 101, > 102, 116, 109, 97, 114, 107, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, > 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, > 92, 92, 116, 104, 101, 112, 97, 103, 101, 125, 125, 10, 92, 110, 92, 92, > 99, 102, 111, 111, 116, 123, 125, 10, 92, 110, 92, 92, 115, 101, 116, 108, > 101, 110, 103, 116, 104, 123, 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, > 104, 125, 123, 53, 46, 56, 55, 53, 105, 110, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 112, 97, 114, 105, > 110, 100, 101, 110, 116, 125, 123, 48, 112, 99, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 104, 111, 102, 102, > 115, 101, 116, 125, 123, 45, 48, 46, 56, 99, 109, 125, 10, 92, 110, 92, > 92, 115, 101, 116, 99, 111, 117, 110, 116, 101, 114, 123, 116, 111, 99, 100, > 101, 112, 116, 104, 125, 123, 49, 125, 10, 92, 110, 92, 92, 115, 108, 111, > 112, 112, 121, 123, 125, 10, 92, 110, 92, 92, 116, 105, 116, 108, 101, 123, > 92, 92, 102, 98, 111, 120, 123, 92, 92, 112, 97, 114, 98, 111, 120, 123, > 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, 104, 125, 123, 92, 92, 98, > 101, 103, 105, 110, 123, 99, 101, 110, 116, 101, 114, 125, 92, 92, 118, 115, > 112, 97, 99, 101, 42, 123, 50, 99, 109, 125, 92, 92, 105, 110, 99, 108, > 117, 100, 101, 103, 114, 97, 112, 104, 105, 99, 115, 91, 119, 105, 100, 116, > 104, 61, 49, 50, 99, 109, 93, 123, 108, 111, 103, 111, 51, 46, 106, 112, > 103, 125, 92, 92, 92, 92, 92, 92, 118, 115, 112, 97, 99, 101, 42, 123, > 49, 99, 109, 125, 123, 92, 92, 72, 117, 103, 101, 32, 92, 92, 116, 101, > 120, 116, 98, 102, 123, 84, 104, 101, 32, 72, 97, 110, 100, 98, 111, 111, > 107, 125, 92, 92, 92, 92, 123, 92, 92, 115, 109, 97, 108, 108, 32, 86, > 101, 114, 115, 105, 111, 110, 32, 34, 36, 115, 116, 114, 118, 101, 114, 36, > 115, 116, 114, 98, 101, 116, 97, 34, 125, 92, 92, 92, 92, 92, 92, 118, > 115, 112, 97, 99, 101, 42, 123, 49, 99, 109, 125, 125, 92, 92, 101, 110, > 100, 123, 99, 101, 110, 116, 101, 114, 125, 125, 125, 125, 10, 92, 110, 92, > 92, 97, 117, 116, 104, 111, 114, 123, 92, 92, 76, 97, 114, 103, 101, 32, > 92, 92, 98, 102, 32, 68, 97, 118, 105, 100, 32, 84, 115, 99, 104, 117, > 109, 112, 101, 114, 108, 92, 92, 39, 101, 125, 10, 92, 110, 92, 92, 114, > 101, 110, 101, 119, 99, 111, 109, 109, 97, 110, 100, 92, 92, 105, 110, 100, > 101, 120, 110, 97, 109, 101, 123, 73, 110, 100, 101, 120, 32, 111, 102, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 125, 10, 92, 110, 92, 92, 109, 97, > 107, 101, 105, 110, 100, 101, 120, 10, 92, 110, 92, 92, 108, 115, 116, 115, > 101, 116, 123, 99, 111, 108, 117, 109, 110, 115, 61, 102, 117, 108, 108, 102, > 108, 101, 120, 105, 98, 108, 101, 44, 98, 97, 115, 105, 99, 115, 116, 121, > 108, 101, 61, 92, 92, 110, 111, 114, 109, 97, 108, 102, 111, 110, 116, 125, > 10, 92, 110, 92, 92, 98, 101, 103, 105, 110, 123, 100, 111, 99, 117, 109, > 101, 110, 116, 125, 10, 92, 110, 92, 92, 109, 97, 107, 101, 116, 105, 116, > 108, 101, 10, 92, 110, 92, 92, 116, 97, 98, 108, 101, 111, 102, 99, 111, > 110, 116, 101, 110, 116, 115, 10, 92, 110, 92, 92, 99, 104, 97, 112, 116, > 101, 114, 42, 123, 80, 114, 101, 97, 109, 98, 108, 101, 125, 10, 92, 110, > 92, 92, 115, 101, 99, 116, 105, 111, 110, 42, 123, 76, 105, 99, 101, 110, > 115, 101, 125, 10, 92, 110, 84, 104, 105, 115, 32, 100, 111, 99, 117, 109, > 101, 110, 116, 32, 105, 115, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, > 101, 100, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 92, 92, 116, > 101, 120, 116, 98, 102, 123, 71, 78, 85, 32, 70, 114, 101, 101, 32, 68, > 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 76, 105, 99, > 101, 110, 115, 101, 125, 44, 32, 118, 101, 114, 115, 105, 111, 110, 32, 49, > 46, 51, 46, 92, 92, 92, 92, 10, 92, 110, 82, 101, 97, 100, 32, 116, > 104, 101, 32, 102, 117, 108, 108, 32, 108, 105, 99, 101, 110, 115, 101, 32, > 116, 101, 114, 109, 115, 32, 97, 116, 32, 92, 92, 116, 101, 120, 116, 116, > 116, 123, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 103, 110, 117, > 46, 111, 114, 103, 47, 108, 105, 99, 101, 110, 115, 101, 115, 47, 102, 100, > 108, 45, 49, 46, 51, 46, 116, 120, 116, 125, 46, 92, 92, 92, 92, 126, > 92, 92, 92, 92, 10, 92, 110, 65, 110, 32, 111, 110, 108, 105, 110, 101, > 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, 105, 115, > 32, 100, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 105, > 115, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 97, 116, 58, 92, > 92, 92, 92, 92, 92, 116, 101, 120, 116, 116, 116, 123, 104, 116, 116, 112, > 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 47, 114, 101, 102, 101, 114, 101, 110, 99, > 101, 46, 115, 104, 116, 109, 108, 125, 46, 10, 92, 110, 92, 92, 115, 101, > 99, 116, 105, 111, 110, 42, 123, 77, 111, 116, 105, 118, 97, 116, 105, 111, > 110, 115, 125, 10, 92, 110, 71, 92, 52, 55, 77, 73, 67, 32, 105, 115, > 32, 97, 110, 32, 111, 112, 101, 110, 32, 97, 110, 100, 32, 102, 117, 108, > 108, 45, 102, 101, 97, 116, 117, 114, 101, 100, 32, 102, 114, 97, 109, 101, > 119, 111, 114, 107, 32, 102, 111, 114, 32, 105, 109, 97, 103, 101, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 44, 32, 112, 114, 111, 118, 105, > 100, 105, 110, 103, 32, 115, 101, 118, 101, 114, 97, 108, 32, 100, 105, 102, > 102, 101, 114, 101, 110, 116, 32, 117, 115, 101, 114, 32, 105, 110, 116, 101, > 114, 102, 97, 99, 101, 115, 32, 116, 111, 10, 92, 110, 99, 111, 110, 118, > 101, 114, 116, 47, 109, 97, 110, 105, 112, 117, 108, 97, 116, 101, 47, 102, > 105, 108, 116, 101, 114, 47, 118, 105, 115, 117, 97, 108, 105, 122, 101, 32, > 103, 101, 110, 101, 114, 105, 99, 32, 105, 109, 97, 103, 101, 32, 100, 97, > 116, 97, 115, 101, 116, 115, 44, 32, 102, 114, 111, 109, 32, 49, 100, 32, > 115, 99, 97, 108, 97, 114, 32, 115, 105, 103, 110, 97, 108, 101, 115, 32, > 116, 111, 32, 51, 100, 43, 116, 32, 115, 101, 113, 117, 101, 110, 99, 101, > 115, 32, 111, 102, 32, 109, 117, 108, 116, 105, 45, 115, 112, 101, 99, 116, > 114, 97, 108, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 92, 110, 84, 101, 99, 104, 110, 105, 99, > 97, 108, 108, 121, 32, 115, 112, 101, 97, 107, 105, 110, 103, 44, 32, 119, > 104, 97, 116, 32, 105, 116, 32, 100, 111, 101, 115, 32, 105, 115, 58, 10, > 92, 110, 92, 92, 98, 101, 103, 105, 110, 123, 105, 116, 101, 109, 105, 122, > 101, 125, 10, 92, 110, 92, 92, 105, 116, 101, 109, 32, 68, 101, 102, 105, > 110, 101, 32, 97, 32, 108, 105, 103, 104, 116, 119, 101, 105, 103, 104, 116, > 32, 98, 117, 116, 32, 112, 111, 119, 101, 114, 102, 117, 108, 32, 115, 99, > 114, 105, 112, 116, 32, 108, 97, 110, 103, 117, 97, 103, 101, 32, 40, 116, > 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 108, 97, 110, 103, 117, > 97, 103, 101, 41, 32, 100, 101, 100, 105, 99, 97, 116, 101, 100, 32, 116, > 111, 32, 116, 104, 101, 32, 100, 101, 115, 105, 103, 110, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, > 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 46, 10, 92, 110, 92, 92, > 105, 116, 101, 109, 32, 80, 114, 111, 118, 105, 100, 101, 32, 115, 101, 118, > 101, 114, 97, 108, 32, 117, 115, 101, 114, 32, 105, 110, 116, 101, 114, 102, > 97, 99, 101, 115, 32, 101, 109, 98, 101, 100, 100, 105, 110, 103, 32, 116, > 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, > 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 58, 10, 92, 110, > 92, 92, 98, 101, 103, 105, 110, 123, 105, 116, 101, 109, 105, 122, 101, 125, > 10, 92, 110, 92, 92, 105, 116, 101, 109, 32, 65, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 108, 105, 110, 101, 32, 101, 120, 101, 99, 117, 116, 97, > 98, 108, 101, 32, 39, 103, 109, 105, 99, 39, 44, 32, 116, 111, 32, 117, > 115, 101, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 102, > 114, 97, 109, 101, 119, 111, 114, 107, 32, 102, 114, 111, 109, 32, 97, 32, > 115, 104, 101, 108, 108, 46, 10, 92, 110, 73, 110, 32, 116, 104, 105, 115, > 32, 115, 101, 116, 116, 105, 110, 103, 44, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 109, 97, 121, 32, 98, 101, 32, 115, 101, 101, 110, 32, 97, 115, > 32, 97, 32, 100, 105, 114, 101, 99, 116, 32, 40, 97, 110, 100, 32, 102, > 114, 105, 101, 110, 100, 108, 121, 41, 32, 99, 111, 109, 112, 101, 116, 105, > 116, 111, 114, 32, 111, 102, 32, 116, 104, 101, 32, 73, 109, 97, 103, 101, > 77, 97, 103, 105, 99, 107, 32, 111, 114, 32, 71, 114, 97, 112, 104, 105, > 99, 115, 77, 97, 103, 105, 99, 107, 32, 115, 111, 102, 116, 119, 97, 114, > 101, 32, 115, 117, 105, 116, 101, 115, 46, 10, 92, 110, 92, 92, 105, 116, > 101, 109, 32, 65, 32, 112, 108, 117, 103, 45, 105, 110, 32, 39, 103, 109, > 105, 99, 92, 92, 95, 103, 105, 109, 112, 39, 44, 32, 116, 111, 32, 98, > 114, 105, 110, 103, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 97, 112, > 97, 98, 105, 108, 105, 116, 105, 101, 115, 32, 116, 111, 32, 116, 104, 101, > 32, 71, 73, 77, 80, 32, 105, 109, 97, 103, 101, 32, 114, 101, 116, 111, > 117, 99, 104, 105, 110, 103, 32, 115, 111, 102, 116, 119, 97, 114, 101, 46, > 10, 92, 110, 92, 92, 105, 116, 101, 109, 32, 65, 32, 119, 101, 98, 45, > 115, 101, 114, 118, 105, 99, 101, 32, 39, 71, 92, 52, 55, 77, 73, 67, > 32, 79, 110, 108, 105, 110, 101, 39, 44, 32, 116, 111, 32, 97, 108, 108, > 111, 119, 32, 117, 115, 101, 114, 115, 32, 97, 112, 112, 108, 121, 105, 110, > 103, 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 115, 32, 100, 105, > 114, 101, 99, 116, 108, 121, 32, 105, 110, 32, 97, 32, 119, 101, 98, 32, > 98, 114, 111, 119, 101, 114, 46, 10, 92, 110, 92, 92, 105, 116, 101, 109, > 32, 65, 32, 81, 116, 45, 98, 97, 115, 101, 100, 32, 105, 110, 116, 101, > 114, 102, 97, 99, 101, 32, 39, 90, 65, 114, 116, 39, 44, 32, 102, 111, > 114, 32, 114, 101, 97, 108, 45, 116, 105, 109, 101, 32, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 111, 110, 32, 111, 102, 32, 119, 101, 98, 99, > 97, 109, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 92, 92, 105, > 116, 101, 109, 32, 65, 32, 67, 43, 43, 32, 108, 105, 98, 114, 97, 114, > 121, 32, 39, 108, 105, 98, 103, 109, 105, 99, 39, 44, 32, 116, 111, 32, > 98, 101, 32, 108, 105, 110, 107, 101, 100, 32, 119, 105, 116, 104, 32, 116, > 104, 105, 114, 100, 45, 112, 97, 114, 116, 121, 32, 97, 112, 112, 108, 105, > 99, 97, 116, 105, 111, 110, 115, 46, 10, 92, 110, 92, 92, 101, 110, 100, > 123, 105, 116, 101, 109, 105, 122, 101, 125, 10, 92, 110, 92, 92, 101, 110, > 100, 123, 105, 116, 101, 109, 105, 122, 101, 125, 10, 92, 110, 71, 92, 52, > 55, 77, 73, 67, 32, 105, 115, 32, 102, 111, 99, 117, 115, 101, 100, 32, > 111, 110, 32, 116, 104, 101, 32, 100, 101, 115, 105, 103, 110, 32, 111, 102, > 32, 112, 111, 115, 115, 105, 98, 108, 121, 32, 99, 111, 109, 112, 108, 101, > 120, 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 32, 102, 111, 114, 32, > 99, 111, 110, 118, 101, 114, 116, 105, 110, 103, 44, 32, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 110, 103, 44, 32, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 32, 97, 110, 100, 32, 118, 105, 115, 117, 97, 108, 105, 122, > 105, 110, 103, 32, 103, 101, 110, 101, 114, 105, 99, 32, 49, 100, 47, 50, > 100, 47, 51, 100, 32, 109, 117, 108, 116, 105, 45, 115, 112, 101, 99, 116, > 114, 97, 108, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, 115, 101, > 116, 115, 46, 32, 84, 104, 105, 115, 32, 105, 110, 99, 108, 117, 100, 101, > 115, 32, 111, 102, 32, 99, 111, 117, 114, 115, 101, 32, 99, 111, 108, 111, > 114, 32, 105, 109, 97, 103, 101, 115, 44, 32, 98, 117, 116, 32, 97, 108, > 115, 111, 32, 109, 111, 114, 101, 32, 99, 111, 109, 112, 108, 101, 120, 32, > 100, 97, 116, 97, 32, 97, 115, 32, 105, 109, 97, 103, 101, 32, 115, 101, > 113, 117, 101, 110, 99, 101, 115, 32, 111, 114, 32, 51, 100, 40, 43, 116, > 41, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 102, 108, 111, > 97, 116, 45, 118, 97, 108, 117, 101, 100, 32, 100, 97, 116, 97, 115, 101, > 116, 115, 46, 92, 92, 92, 92, 10, 92, 110, 10, 92, 110, 71, 92, 52, > 55, 77, 73, 67, 32, 105, 115, 32, 97, 110, 32, 111, 112, 101, 110, 32, > 102, 114, 97, 109, 101, 119, 111, 114, 107, 58, 32, 116, 104, 101, 32, 100, > 101, 102, 97, 117, 108, 116, 32, 108, 97, 110, 103, 117, 97, 103, 101, 32, > 99, 97, 110, 32, 98, 101, 32, 101, 120, 116, 101, 110, 100, 101, 100, 32, > 119, 105, 116, 104, 32, 99, 117, 115, 116, 111, 109, 32, 71, 92, 52, 55, > 77, 73, 67, 45, 119, 114, 105, 116, 116, 101, 110, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 44, 32, 100, 101, 102, 105, 110, 105, 110, 103, 32, 116, > 104, 117, 115, 32, 110, 101, 119, 32, 97, 118, 97, 105, 108, 97, 98, 108, > 101, 32, 105, 109, 97, 103, 101, 32, 102, 105, 108, 116, 101, 114, 115, 32, > 111, 114, 32, 101, 102, 102, 101, 99, 116, 115, 46, 32, 66, 121, 32, 116, > 104, 101, 32, 119, 97, 121, 44, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 97, 108, 114, 101, 97, 100, 121, 32, 99, 111, 110, 116, 97, 105, 110, 115, > 32, 97, 32, 115, 117, 98, 115, 116, 97, 110, 116, 105, 97, 108, 32, 115, > 101, 116, 32, 111, 102, 32, 112, 114, 101, 45, 100, 101, 102, 105, 110, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 115, 32, 97, 110, > 100, 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 32, 40, 109, 111, 114, > 101, 32, 116, 104, 97, 110, 32, 49, 48, 48, 48, 41, 46, 92, 92, 92, > 92, 10, 92, 110, 10, 92, 110, 71, 92, 52, 55, 77, 73, 67, 32, 104, > 97, 115, 32, 98, 101, 101, 110, 32, 100, 101, 115, 105, 103, 110, 101, 100, > 32, 119, 105, 116, 104, 32, 112, 111, 114, 116, 97, 98, 105, 108, 105, 116, > 121, 32, 105, 110, 32, 109, 105, 110, 100, 32, 97, 110, 100, 32, 114, 117, > 110, 115, 32, 111, 110, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, > 112, 108, 97, 116, 102, 111, 114, 109, 115, 32, 40, 87, 105, 110, 100, 111, > 119, 115, 44, 32, 85, 110, 105, 120, 44, 32, 77, 97, 99, 79, 83, 88, > 41, 46, 32, 73, 116, 32, 105, 115, 32, 100, 105, 115, 116, 114, 105, 98, > 117, 116, 101, 100, 32, 117, 110, 100, 101, 114, 32, 116, 104, 101, 32, 67, > 101, 67, 73, 76, 76, 32, 108, 105, 99, 101, 110, 115, 101, 32, 40, 71, > 80, 76, 45, 99, 111, 109, 112, 97, 116, 105, 98, 108, 101, 41, 46, 32, > 83, 105, 110, 99, 101, 32, 50, 48, 48, 56, 44, 32, 105, 116, 32, 105, > 115, 32, 100, 101, 118, 101, 108, 111, 112, 101, 100, 32, 105, 110, 32, 116, > 104, 101, 32, 73, 109, 97, 103, 101, 32, 84, 101, 97, 109, 32, 111, 102, > 32, 116, 104, 101, 32, 71, 82, 69, 89, 67, 32, 108, 97, 98, 111, 114, > 97, 116, 111, 114, 121, 44, 32, 105, 110, 32, 67, 97, 101, 110, 47, 70, > 114, 97, 110, 99, 101, 44, 32, 98, 121, 32, 112, 101, 114, 109, 97, 110, > 101, 110, 116, 32, 114, 101, 115, 101, 97, 114, 99, 104, 101, 114, 115, 32, > 119, 111, 114, 107, 105, 110, 103, 32, 105, 110, 32, 116, 104, 101, 32, 102, > 105, 101, 108, 100, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 112, 114, > 111, 99, 101, 115, 115, 105, 110, 103, 32, 111, 110, 32, 97, 32, 100, 97, > 105, 108, 121, 32, 98, 97, 115, 105, 115, 46, 10, 92, 110, 92, 92, 115, > 101, 99, 116, 105, 111, 110, 42, 123, 86, 101, 114, 115, 105, 111, 110, 125, > 10, 92, 110, 10, 92, 110, 32, 103, 109, 105, 99, 58, 32, 71, 82, 69, > 89, 67, 39, 115, 32, 77, 97, 103, 105, 99, 32, 102, 111, 114, 32, 73, > 109, 97, 103, 101, 32, 67, 111, 109, 112, 117, 116, 105, 110, 103, 46, 10, > 92, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 86, 101, 114, > 115, 105, 111, 110, 32, 34, 36, 115, 116, 114, 118, 101, 114, 36, 115, 116, > 114, 98, 101, 116, 97, 34, 44, 32, 67, 111, 112, 121, 114, 105, 103, 104, > 116, 32, 40, 99, 41, 32, 50, 48, 48, 56, 45, 50, 48, 49, 52, 44, > 32, 68, 97, 118, 105, 100, 32, 84, 115, 99, 104, 117, 109, 112, 101, 114, > 108, 92, 92, 39, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 40, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, > 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 41, 10, 92, 110, > 92, 92, 99, 104, 97, 112, 116, 101, 114, 123, 85, 115, 97, 103, 101, 125, > 10, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 115, 101, > 99, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 49, 34, 10, 45, 118, 32, 43, 10, 45, 101, > 91, 93, 32, 34, 92, 92, 115, 101, 99, 116, 105, 111, 110, 123, 36, 49, > 125, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 112, 97, > 114, 97, 103, 114, 97, 112, 104, 95, 108, 97, 116, 101, 120, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 34, 36, 49, 34, 10, 45, 118, 32, 43, 10, > 45, 101, 91, 93, 32, 34, 92, 92, 115, 109, 97, 108, 108, 34, 10, 45, > 101, 91, 93, 32, 34, 92, 92, 98, 101, 103, 105, 110, 123, 108, 115, 116, > 108, 105, 115, 116, 105, 110, 103, 125, 34, 10, 45, 101, 91, 93, 32, 34, > 36, 49, 34, 10, 45, 101, 91, 93, 32, 34, 92, 92, 101, 110, 100, 123, > 108, 115, 116, 108, 105, 115, 116, 105, 110, 103, 125, 34, 10, 45, 101, 91, > 93, 32, 34, 92, 92, 110, 111, 114, 109, 97, 108, 115, 105, 122, 101, 34, > 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, > 101, 114, 95, 108, 97, 116, 101, 120, 32, 58, 10, 45, 118, 32, 43, 10, > 45, 101, 91, 93, 32, 34, 10, 92, 110, 92, 92, 112, 114, 105, 110, 116, > 105, 110, 100, 101, 120, 10, 92, 110, 126, 92, 92, 92, 92, 36, 92, 92, > 115, 113, 117, 97, 114, 101, 36, 126, 69, 110, 100, 32, 111, 102, 32, 100, > 111, 99, 117, 109, 101, 110, 116, 46, 10, 92, 110, 92, 110, 92, 92, 101, > 110, 100, 123, 100, 111, 99, 117, 109, 101, 110, 116, 125, 34, 10, 45, 118, > 32, 45, 10, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, > 104, 116, 109, 108, 32, 58, 10, 95, 115, 101, 99, 116, 105, 111, 110, 61, > 48, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, > 105, 99, 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 32, 115, 116, 114, > 98, 101, 116, 97, 61, 34, 32, 40, 98, 101, 116, 97, 41, 34, 32, 45, > 101, 108, 115, 101, 32, 115, 116, 114, 98, 101, 116, 97, 61, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, > 40, 36, 95, 103, 109, 105, 99, 95, 118, 101, 114, 115, 105, 111, 110, 41, > 125, 32, 115, 116, 114, 118, 101, 114, 61, 36, 95, 103, 109, 105, 99, 95, > 118, 101, 114, 115, 105, 111, 110, 32, 45, 101, 108, 115, 101, 32, 115, 116, > 114, 118, 101, 114, 61, 64, 123, 45, 115, 116, 114, 118, 101, 114, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, > 32, 34, 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, > 32, 80, 85, 66, 76, 73, 67, 32, 92, 34, 45, 47, 47, 87, 51, 67, > 47, 47, 68, 84, 68, 32, 88, 72, 84, 77, 76, 32, 49, 46, 48, 32, > 84, 114, 97, 110, 115, 105, 116, 105, 111, 110, 97, 108, 47, 47, 69, 78, > 92, 34, 32, 92, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, > 119, 51, 46, 111, 114, 103, 47, 84, 82, 47, 120, 104, 116, 109, 108, 49, > 47, 68, 84, 68, 47, 120, 104, 116, 109, 108, 49, 45, 116, 114, 97, 110, > 115, 105, 116, 105, 111, 110, 97, 108, 46, 100, 116, 100, 92, 34, 62, 10, > 92, 110, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, 32, 102, > 105, 108, 101, 61, 92, 34, 104, 101, 97, 100, 101, 114, 46, 104, 116, 109, > 108, 92, 34, 32, 45, 45, 62, 10, 92, 110, 60, 108, 105, 110, 107, 32, > 104, 114, 101, 102, 61, 92, 34, 115, 116, 121, 108, 101, 46, 99, 115, 115, > 92, 34, 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, 115, 104, > 101, 101, 116, 92, 34, 32, 116, 121, 112, 101, 61, 92, 34, 116, 101, 120, > 116, 47, 99, 115, 115, 92, 34, 62, 10, 92, 110, 60, 100, 105, 118, 32, > 105, 100, 61, 92, 34, 98, 108, 111, 99, 95, 111, 112, 116, 105, 111, 110, > 92, 34, 62, 10, 92, 110, 60, 100, 105, 118, 32, 105, 100, 61, 92, 34, > 116, 111, 112, 95, 114, 111, 117, 103, 101, 92, 34, 62, 60, 100, 105, 118, > 32, 105, 100, 61, 92, 34, 116, 101, 120, 116, 95, 116, 111, 112, 92, 34, > 62, 82, 101, 102, 101, 114, 101, 110, 99, 101, 60, 47, 100, 105, 118, 62, > 60, 47, 100, 105, 118, 62, 10, 92, 110, 60, 100, 105, 118, 32, 105, 100, > 61, 92, 34, 99, 101, 110, 116, 101, 114, 92, 34, 62, 60, 100, 105, 118, > 32, 105, 100, 61, 92, 34, 116, 101, 120, 116, 95, 99, 101, 110, 116, 114, > 101, 95, 105, 110, 116, 114, 111, 92, 34, 62, 10, 92, 110, 60, 104, 50, > 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, > 114, 111, 119, 110, 92, 34, 62, 60, 117, 62, 80, 114, 101, 97, 109, 98, > 108, 101, 60, 47, 117, 62, 60, 47, 102, 111, 110, 116, 62, 60, 47, 104, > 50, 62, 10, 92, 110, 60, 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, > 84, 104, 105, 115, 32, 100, 111, 99, 117, 109, 101, 110, 116, 32, 105, 115, > 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 101, 100, 32, 117, 110, 100, > 101, 114, 32, 116, 104, 101, 32, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 103, 110, 117, 46, > 111, 114, 103, 47, 108, 105, 99, 101, 110, 115, 101, 115, 47, 102, 100, 108, > 45, 49, 46, 51, 46, 116, 120, 116, 92, 34, 62, 71, 78, 85, 32, 70, > 114, 101, 101, 32, 68, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 76, 105, 99, 101, 110, 115, 101, 60, 47, 97, 62, 44, 32, 118, > 101, 114, 115, 105, 111, 110, 32, 49, 46, 51, 46, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 65, 32, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 103, 109, 105, 99, 95, 114, 101, 102, 101, 114, 101, 110, 99, > 101, 46, 112, 100, 102, 92, 34, 62, 46, 112, 100, 102, 32, 118, 101, 114, > 115, 105, 111, 110, 60, 47, 97, 62, 32, 111, 102, 32, 116, 104, 105, 115, > 32, 100, 111, 99, 117, 109, 101, 110, 116, 32, 105, 115, 32, 97, 118, 97, > 105, 108, 97, 98, 108, 101, 46, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 108, 105, 62, 87, 101, 32, 97, 108, 115, 111, 32, 115, 117, 103, 103, 101, > 115, 116, 32, 121, 111, 117, 32, 114, 101, 97, 100, 32, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 116, 117, 116, 111, 114, 105, 97, 108, 47, 105, > 110, 100, 101, 120, 46, 115, 104, 116, 109, 108, 92, 34, 62, 116, 104, 101, > 115, 101, 32, 116, 117, 116, 111, 114, 105, 97, 108, 32, 112, 97, 103, 101, > 115, 60, 47, 97, 62, 32, 119, 104, 105, 99, 104, 32, 112, 114, 111, 118, > 105, 100, 101, 32, 97, 32, 109, 111, 114, 101, 32, 117, 115, 101, 114, 45, > 102, 114, 105, 101, 110, 100, 108, 121, 32, 101, 120, 112, 108, 97, 110, 97, > 116, 105, 111, 110, 32, 111, 102, 32, 109, 111, 115, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 98, 97, 115, 105, > 99, 115, 46, 60, 47, 108, 105, 62, 10, 92, 110, 60, 47, 117, 108, 62, > 10, 92, 110, 60, 104, 50, 62, 60, 97, 32, 105, 100, 61, 92, 34, 116, > 111, 99, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, > 61, 92, 34, 98, 114, 111, 119, 110, 92, 34, 62, 60, 117, 62, 84, 97, > 98, 108, 101, 32, 111, 102, 32, 99, 111, 110, 116, 101, 110, 116, 115, 60, > 47, 117, 62, 60, 47, 102, 111, 110, 116, 62, 60, 47, 97, 62, 60, 47, > 104, 50, 62, 10, 92, 110, 60, 117, 108, 62, 10, 92, 110, 60, 108, 105, > 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, > 105, 111, 110, 48, 92, 34, 62, 86, 101, 114, 115, 105, 111, 110, 60, 47, > 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, > 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, > 49, 92, 34, 62, 85, 115, 97, 103, 101, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, > 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, > 111, 110, 50, 92, 34, 62, 79, 118, 101, 114, 97, 108, 108, 32, 99, 111, > 110, 116, 101, 120, 116, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, > 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, > 115, 101, 99, 116, 105, 111, 110, 51, 92, 34, 62, 73, 109, 97, 103, 101, > 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 97, 110, 100, 32, > 116, 101, 114, 109, 105, 110, 111, 108, 111, 103, 121, 60, 47, 97, 62, 60, > 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, > 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 52, 92, 34, > 62, 73, 116, 101, 109, 115, 32, 111, 102, 32, 97, 32, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, 110, 101, 60, > 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, > 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, > 110, 53, 92, 34, 62, 73, 110, 112, 117, 116, 32, 100, 97, 116, 97, 32, > 105, 116, 101, 109, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, > 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, > 115, 101, 99, 116, 105, 111, 110, 54, 92, 34, 62, 67, 111, 109, 109, 97, > 110, 100, 32, 105, 116, 101, 109, 115, 32, 97, 110, 100, 32, 115, 101, 108, > 101, 99, 116, 105, 111, 110, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 101, 99, 116, 105, 111, 110, 55, 92, 34, 62, 73, 110, 112, > 117, 116, 47, 111, 117, 116, 112, 117, 116, 32, 112, 114, 111, 112, 101, 114, > 116, 105, 101, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, > 101, 99, 116, 105, 111, 110, 56, 92, 34, 62, 83, 117, 98, 115, 116, 105, > 116, 117, 116, 105, 111, 110, 32, 114, 117, 108, 101, 115, 60, 47, 97, 62, > 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 57, 92, > 34, 62, 77, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 60, 47, 97, 62, 60, 47, > 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, > 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 48, 92, 34, > 62, 73, 109, 97, 103, 101, 32, 97, 110, 100, 32, 100, 97, 116, 97, 32, > 118, 105, 101, 119, 101, 114, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 49, 92, 34, 62, 65, 100, > 100, 105, 110, 103, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 47, 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 50, > 92, 34, 62, 76, 105, 115, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, > 110, 100, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 117, 108, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, > 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, > 92, 34, 62, 71, 108, 111, 98, 97, 108, 32, 111, 112, 116, 105, 111, 110, > 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, > 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 50, 92, 34, 62, 73, 110, 112, 117, 116, 115, > 47, 111, 117, 116, 112, 117, 116, 115, 60, 47, 97, 62, 60, 47, 108, 105, > 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, > 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 51, 92, 34, > 62, 76, 105, 115, 116, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, > 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, > 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, > 115, 101, 99, 116, 105, 111, 110, 52, 92, 34, 62, 77, 97, 116, 104, 101, > 109, 97, 116, 105, 99, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, 114, > 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, > 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 53, 92, 34, 62, 86, 97, 108, 117, 101, 115, > 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 60, 47, 97, > 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, > 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, > 111, 110, 54, 92, 34, 62, 67, 111, 108, 111, 114, 115, 32, 109, 97, 110, > 105, 112, 117, 108, 97, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 55, 92, > 34, 62, 71, 101, 111, 109, 101, 116, 114, 121, 32, 109, 97, 110, 105, 112, > 117, 108, 97, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 56, 92, 34, 62, > 70, 105, 108, 116, 101, 114, 105, 110, 103, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 57, 92, > 34, 62, 70, 101, 97, 116, 117, 114, 101, 115, 32, 101, 120, 116, 114, 97, > 99, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, > 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, > 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 48, 92, 34, 62, 73, > 109, 97, 103, 101, 32, 100, 114, 97, 119, 105, 110, 103, 60, 47, 97, 62, > 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, > 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, > 110, 49, 49, 92, 34, 62, 77, 97, 116, 114, 105, 120, 32, 99, 111, 109, > 112, 117, 116, 97, 116, 105, 111, 110, 60, 47, 97, 62, 60, 47, 108, 105, > 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, > 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 50, 92, > 34, 62, 51, 100, 32, 114, 101, 110, 100, 101, 114, 105, 110, 103, 60, 47, > 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, > 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, > 105, 111, 110, 49, 51, 92, 34, 62, 80, 114, 111, 103, 114, 97, 109, 32, > 99, 111, 110, 116, 114, 111, 108, 115, 60, 47, 97, 62, 60, 47, 108, 105, > 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, > 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 52, 92, > 34, 62, 65, 114, 114, 97, 121, 115, 44, 116, 105, 108, 101, 115, 32, 97, > 110, 100, 32, 102, 114, 97, 109, 101, 115, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 49, 53, > 92, 34, 62, 65, 114, 116, 105, 115, 116, 105, 99, 60, 47, 97, 62, 60, > 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, > 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, > 49, 54, 92, 34, 62, 87, 97, 114, 112, 105, 110, 103, 115, 60, 47, 97, > 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, > 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, > 111, 110, 49, 55, 92, 34, 62, 68, 101, 103, 114, 97, 100, 97, 116, 105, > 111, 110, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 49, 56, 92, 34, 62, 66, 108, 101, > 110, 100, 105, 110, 103, 32, 97, 110, 100, 32, 102, 97, 100, 105, 110, 103, > 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 108, 105, 62, > 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 49, 57, 92, 34, 62, 73, 109, 97, 103, 101, 32, > 115, 101, 113, 117, 101, 110, 99, 101, 115, 60, 47, 97, 62, 60, 47, 108, > 105, 62, 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, > 61, 92, 34, 35, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 50, 48, > 92, 34, 62, 73, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 100, > 101, 109, 111, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, > 117, 98, 115, 101, 99, 116, 105, 111, 110, 50, 49, 92, 34, 62, 80, 73, > 78, 75, 45, 108, 105, 98, 114, 97, 114, 121, 32, 111, 112, 101, 114, 97, > 116, 111, 114, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, > 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, > 117, 98, 115, 101, 99, 116, 105, 111, 110, 50, 50, 92, 34, 62, 67, 111, > 110, 118, 101, 110, 105, 101, 110, 99, 101, 32, 102, 117, 110, 99, 116, 105, > 111, 110, 115, 60, 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, > 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 35, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 50, 51, 92, 34, 62, 67, 111, 109, > 109, 97, 110, 100, 115, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, 60, > 47, 97, 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 47, 117, 108, 62, > 10, 92, 110, 60, 108, 105, 62, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 115, 101, 99, 116, 105, 111, 110, 49, 51, 92, 34, 62, 69, 120, > 97, 109, 112, 108, 101, 115, 32, 111, 102, 32, 117, 115, 101, 60, 47, 97, > 62, 60, 47, 108, 105, 62, 10, 92, 110, 60, 47, 117, 108, 62, 10, 92, > 110, 60, 97, 32, 105, 100, 61, 92, 34, 115, 101, 99, 116, 105, 111, 110, > 48, 92, 34, 62, 60, 104, 50, 62, 60, 102, 111, 110, 116, 32, 99, 111, > 108, 111, 114, 61, 92, 34, 98, 114, 111, 119, 110, 92, 34, 62, 60, 117, > 62, 86, 101, 114, 115, 105, 111, 110, 60, 47, 117, 62, 60, 47, 102, 111, > 110, 116, 62, 60, 47, 104, 50, 62, 60, 47, 97, 62, 10, 92, 110, 60, > 112, 114, 101, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, > 92, 34, 98, 108, 117, 101, 92, 34, 62, 103, 109, 105, 99, 60, 47, 102, > 111, 110, 116, 62, 58, 32, 71, 82, 69, 89, 67, 39, 115, 32, 77, 97, > 103, 105, 99, 32, 102, 111, 114, 32, 73, 109, 97, 103, 101, 32, 67, 111, > 109, 112, 117, 116, 105, 110, 103, 46, 10, 92, 110, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 86, 101, 114, 115, 105, 111, 110, 32, 34, 36, 115, > 116, 114, 118, 101, 114, 36, 115, 116, 114, 98, 101, 116, 97, 34, 44, 32, > 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, > 48, 56, 45, 50, 48, 49, 52, 44, 32, 68, 97, 118, 105, 100, 32, 84, > 115, 99, 104, 117, 109, 112, 101, 114, 108, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 40, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 104, > 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, > 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 92, 34, 62, 104, 116, 116, > 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, > 111, 114, 103, 101, 46, 110, 101, 116, 60, 47, 97, 62, 41, 10, 92, 110, > 60, 47, 112, 114, 101, 62, 10, 34, 10, 45, 118, 32, 45, 10, 45, 95, > 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 85, 115, > 97, 103, 101, 34, 10, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, > 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, 95, 115, 101, 99, 116, 105, > 111, 110, 61, 123, 36, 95, 115, 101, 99, 116, 105, 111, 110, 43, 49, 125, > 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 60, 104, 50, 62, > 60, 97, 32, 105, 100, 61, 92, 34, 115, 101, 99, 116, 105, 111, 110, 34, > 36, 95, 115, 101, 99, 116, 105, 111, 110, 34, 92, 34, 62, 60, 102, 111, > 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, 114, 111, 119, 110, > 92, 34, 62, 60, 117, 62, 36, 49, 60, 47, 117, 62, 60, 47, 102, 111, > 110, 116, 62, 60, 47, 97, 62, 34, 92, 10, 34, 38, 110, 98, 115, 112, > 59, 38, 110, 98, 115, 112, 59, 60, 97, 32, 104, 114, 101, 102, 61, 92, > 34, 35, 116, 111, 99, 92, 34, 62, 60, 105, 109, 103, 32, 115, 114, 99, > 61, 92, 34, 105, 109, 103, 47, 98, 97, 99, 107, 95, 116, 111, 112, 46, > 112, 110, 103, 92, 34, 62, 60, 47, 105, 109, 103, 62, 60, 47, 97, 62, > 60, 47, 104, 50, 62, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, > 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 95, 104, 116, 109, 108, > 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 60, 112, > 114, 101, 62, 36, 42, 60, 47, 112, 114, 101, 62, 34, 10, 45, 118, 32, > 45, 10, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, 101, 114, 95, 104, > 116, 109, 108, 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, > 34, 10, 92, 110, 60, 98, 114, 47, 62, 60, 98, 62, 60, 102, 111, 110, > 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, 114, 111, 119, 110, 92, > 34, 62, 42, 42, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 101, 115, 32, 119, 105, 116, 104, 32, 65, 66, 83, 79, 76, 85, 84, 69, > 76, 89, 32, 78, 79, 32, 87, 65, 82, 82, 65, 78, 84, 89, 59, 32, > 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, 32, 118, 105, 115, 105, > 116, 32, 60, 97, 32, 104, 114, 101, 102, 61, 92, 34, 104, 116, 116, 112, > 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 92, 34, 62, 104, 116, 116, 112, 58, 47, > 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, > 101, 46, 110, 101, 116, 32, 42, 42, 60, 47, 97, 62, 60, 47, 102, 111, > 110, 116, 62, 60, 47, 98, 62, 10, 92, 110, 60, 47, 116, 116, 62, 10, > 92, 110, 60, 47, 100, 105, 118, 62, 10, 92, 110, 60, 47, 100, 105, 118, > 62, 10, 92, 110, 60, 100, 105, 118, 32, 105, 100, 61, 92, 34, 102, 111, > 111, 116, 101, 114, 92, 34, 62, 60, 105, 109, 103, 32, 115, 114, 99, 61, > 92, 34, 105, 109, 97, 103, 101, 115, 47, 102, 111, 111, 116, 101, 114, 46, > 106, 112, 103, 92, 34, 32, 47, 62, 60, 47, 100, 105, 118, 62, 10, 92, > 110, 60, 47, 100, 105, 118, 62, 10, 92, 110, 60, 33, 45, 45, 35, 105, > 110, 99, 108, 117, 100, 101, 32, 102, 105, 108, 101, 61, 92, 34, 99, 111, > 112, 121, 114, 105, 103, 104, 116, 46, 104, 116, 109, 108, 92, 34, 32, 45, > 45, 62, 10, 92, 110, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, > 101, 32, 102, 105, 108, 101, 61, 92, 34, 102, 111, 111, 116, 101, 114, 46, > 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, 10, 34, 10, 45, 118, 32, > 45, 10, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, 101, 114, 95, 97, > 115, 99, 105, 105, 32, 58, 10, 45, 95, 95, 104, 101, 108, 112, 95, 104, > 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, 10, 95, 115, 101, 99, > 116, 105, 111, 110, 61, 48, 32, 95, 115, 112, 97, 99, 101, 49, 61, 34, > 34, 32, 95, 115, 112, 97, 99, 101, 50, 61, 34, 32, 34, 10, 45, 95, > 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 85, 115, > 97, 103, 101, 34, 10, 95, 95, 104, 101, 108, 112, 95, 104, 101, 97, 100, > 101, 114, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 105, 102, 32, 123, > 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, 95, 105, 115, 95, 98, > 101, 116, 97, 41, 125, 32, 115, 116, 114, 98, 101, 116, 97, 61, 34, 32, > 40, 98, 101, 116, 97, 41, 34, 32, 45, 101, 108, 115, 101, 32, 115, 116, > 114, 98, 101, 116, 97, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, > 95, 118, 101, 114, 115, 105, 111, 110, 41, 125, 32, 115, 116, 114, 118, 101, > 114, 61, 36, 95, 103, 109, 105, 99, 95, 118, 101, 114, 115, 105, 111, 110, > 32, 45, 101, 108, 115, 101, 32, 115, 116, 114, 118, 101, 114, 61, 64, 123, > 45, 115, 116, 114, 118, 101, 114, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 10, 92, 110, 32, 103, > 109, 105, 99, 58, 32, 71, 82, 69, 89, 67, 39, 115, 32, 77, 97, 103, > 105, 99, 32, 102, 111, 114, 32, 73, 109, 97, 103, 101, 32, 67, 111, 109, > 112, 117, 116, 105, 110, 103, 46, 10, 92, 110, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 86, 101, 114, 115, 105, 111, 110, 32, 34, 36, 115, > 116, 114, 118, 101, 114, 36, 115, 116, 114, 98, 101, 116, 97, 34, 44, 32, > 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, > 48, 56, 45, 50, 48, 49, 52, 44, 32, 68, 97, 118, 105, 100, 32, 84, > 115, 99, 104, 117, 109, 112, 101, 114, 108, 101, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 40, 104, 116, 116, 112, 58, 47, 47, 103, 109, > 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, > 101, 116, 41, 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, > 115, 101, 99, 116, 105, 111, 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, > 95, 115, 101, 99, 116, 105, 111, 110, 61, 123, 36, 95, 115, 101, 99, 116, > 105, 111, 110, 43, 49, 125, 10, 123, 110, 97, 114, 103, 40, 123, 39, 34, > 36, 49, 34, 39, 125, 41, 125, 44, 49, 44, 49, 44, 49, 44, 123, 39, > 45, 39, 125, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, > 110, 32, 34, 36, 95, 115, 101, 99, 116, 105, 111, 110, 34, 46, 32, 36, > 49, 34, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 34, 36, 123, > 95, 115, 112, 97, 99, 101, 123, 110, 97, 114, 103, 40, 123, 39, 36, 95, > 115, 101, 99, 116, 105, 111, 110, 39, 125, 41, 125, 125, 64, 123, 45, 49, > 44, 116, 125, 34, 92, 110, 34, 10, 45, 118, 32, 45, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, > 114, 97, 112, 104, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 118, 32, > 43, 10, 45, 101, 91, 93, 32, 34, 36, 42, 34, 10, 45, 118, 32, 45, > 10, 95, 104, 101, 108, 112, 95, 102, 111, 111, 116, 101, 114, 95, 97, 115, > 99, 105, 105, 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, > 34, 32, 42, 42, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 101, 115, 32, 119, 105, 116, 104, 32, 65, 66, 83, 79, 76, 85, 84, 69, > 76, 89, 32, 78, 79, 32, 87, 65, 82, 82, 65, 78, 84, 89, 59, 32, > 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, 32, 118, 105, 115, 105, > 116, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, > 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 32, 42, 42, > 34, 10, 45, 118, 32, 45, 10, 95, 104, 101, 108, 112, 95, 117, 115, 97, > 103, 101, 32, 58, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, > 103, 114, 97, 112, 104, 32, 34, 32, 103, 109, 105, 99, 32, 91, 99, 111, > 109, 109, 97, 110, 100, 49, 32, 91, 97, 114, 103, 49, 95, 49, 44, 97, > 114, 103, 49, 95, 50, 44, 46, 46, 93, 93, 32, 46, 46, 32, 91, 99, > 111, 109, 109, 97, 110, 100, 78, 32, 91, 97, 114, 103, 78, 95, 49, 44, > 97, 114, 103, 78, 95, 50, 44, 46, 46, 93, 93, 10, 92, 110, 10, 92, > 110, 32, 39, 103, 109, 105, 99, 39, 32, 105, 115, 32, 97, 110, 32, 111, > 112, 101, 110, 45, 115, 111, 117, 114, 99, 101, 32, 105, 110, 116, 101, 114, > 112, 114, 101, 116, 101, 114, 32, 111, 102, 32, 116, 104, 101, 32, 71, 92, > 52, 55, 77, 73, 67, 32, 108, 97, 110, 103, 117, 97, 103, 101, 44, 32, > 97, 32, 115, 99, 114, 105, 112, 116, 45, 98, 97, 115, 101, 100, 32, 112, > 114, 111, 103, 114, 97, 109, 109, 105, 110, 103, 10, 92, 110, 32, 32, 108, > 97, 110, 103, 117, 97, 103, 101, 32, 100, 101, 100, 105, 99, 97, 116, 101, > 100, 32, 116, 111, 32, 100, 101, 115, 105, 103, 110, 32, 105, 109, 97, 103, > 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, > 101, 108, 105, 110, 101, 115, 46, 32, 73, 116, 32, 99, 97, 110, 32, 98, > 101, 32, 117, 115, 101, 100, 32, 116, 111, 32, 99, 111, 110, 118, 101, 114, > 116, 44, 10, 92, 110, 32, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, > 101, 44, 32, 102, 105, 108, 116, 101, 114, 32, 97, 110, 100, 32, 118, 105, > 115, 117, 97, 108, 105, 122, 101, 32, 100, 97, 116, 97, 115, 101, 116, 115, > 32, 109, 97, 100, 101, 32, 111, 102, 32, 111, 110, 101, 32, 111, 114, 32, > 115, 101, 118, 101, 114, 97, 108, 32, 49, 100, 47, 50, 100, 32, 111, 114, > 32, 51, 100, 32, 109, 117, 108, 116, 105, 45, 10, 92, 110, 32, 32, 115, > 112, 101, 99, 116, 114, 97, 108, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 92, 110, 10, 92, 110, 32, 84, 104, 105, 115, 32, 100, 111, 99, 117, 109, > 101, 110, 116, 97, 116, 105, 111, 110, 32, 112, 114, 111, 112, 111, 115, 101, > 115, 32, 97, 32, 99, 111, 109, 112, 108, 101, 116, 101, 32, 100, 101, 115, > 99, 114, 105, 112, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, > 71, 92, 52, 55, 77, 73, 67, 32, 108, 97, 110, 103, 117, 97, 103, 101, > 32, 98, 97, 115, 105, 99, 115, 32, 97, 110, 100, 32, 114, 117, 108, 101, > 115, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, > 111, 110, 32, 34, 79, 118, 101, 114, 97, 108, 108, 32, 99, 111, 110, 116, > 101, 120, 116, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, > 103, 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 65, 116, 32, 97, 110, > 121, 32, 116, 105, 109, 101, 44, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 109, 97, 110, 97, 103, 101, 115, 32, 111, 110, 101, 32, 108, 105, 115, 116, > 32, 111, 102, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 40, 97, 110, > 100, 32, 111, 112, 116, 105, 111, 110, 97, 108, 108, 121, 32, 110, 97, 109, > 101, 100, 41, 32, 112, 105, 120, 101, 108, 45, 98, 97, 115, 101, 100, 10, > 92, 110, 32, 32, 32, 32, 32, 105, 109, 97, 103, 101, 115, 44, 32, 101, > 110, 116, 105, 114, 101, 108, 121, 32, 115, 116, 111, 114, 101, 100, 32, 105, > 110, 32, 99, 111, 109, 112, 117, 116, 101, 114, 32, 109, 101, 109, 111, 114, > 121, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, 32, 102, 105, 114, > 115, 116, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 105, 115, 116, 32, 104, 97, 115, 32, 105, 110, 100, 105, 99, 101, 32, > 39, 48, 39, 32, 97, 110, 100, 32, 105, 115, 32, 100, 101, 110, 111, 116, > 101, 100, 32, 98, 121, 32, 39, 91, 48, 93, 39, 46, 32, 84, 104, 101, > 32, 115, 101, 99, 111, 110, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, > 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, 32, 108, 105, 115, 116, > 32, 105, 115, 32, 100, 101, 110, 111, 116, 101, 100, 32, 98, 121, 32, 39, > 91, 49, 93, 39, 44, 32, 116, 104, 101, 32, 116, 104, 105, 114, 100, 32, > 98, 121, 32, 39, 91, 50, 93, 39, 32, 97, 110, 100, 32, 115, 111, 32, > 111, 110, 46, 10, 92, 110, 32, 32, 45, 32, 78, 101, 103, 97, 116, 105, > 118, 101, 32, 105, 110, 100, 105, 99, 101, 115, 32, 97, 114, 101, 32, 116, > 114, 101, 97, 116, 101, 100, 32, 105, 110, 32, 97, 32, 112, 101, 114, 105, > 111, 100, 105, 99, 32, 119, 97, 121, 58, 32, 39, 91, 45, 49, 93, 39, > 32, 114, 101, 102, 101, 114, 115, 32, 116, 111, 32, 116, 104, 101, 32, 108, > 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 108, 105, 115, 116, 44, 32, 39, 91, > 45, 50, 93, 39, 32, 116, 111, 32, 116, 104, 101, 32, 112, 101, 110, 117, > 108, 116, 105, 109, 97, 116, 101, 32, 111, 110, 101, 44, 32, 101, 116, 99, > 46, 32, 84, 104, 117, 115, 44, 32, 105, 102, 32, 116, 104, 101, 32, 108, > 105, 115, 116, 32, 104, 97, 115, 32, 52, 32, 105, 109, 97, 103, 101, 115, > 44, 32, 39, 91, 49, 93, 39, 32, 97, 110, 100, 32, 39, 91, 45, 51, > 93, 39, 10, 92, 110, 32, 32, 32, 32, 32, 98, 111, 116, 104, 32, 100, > 101, 115, 105, 103, 110, 97, 116, 101, 32, 116, 104, 101, 32, 115, 101, 99, > 111, 110, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 45, 32, 65, 32, 110, > 97, 109, 101, 100, 32, 105, 109, 97, 103, 101, 32, 109, 97, 121, 32, 98, > 101, 32, 100, 101, 110, 111, 116, 101, 100, 32, 98, 121, 32, 39, 91, 110, > 97, 109, 101, 93, 39, 32, 105, 102, 32, 39, 110, 97, 109, 101, 39, 32, > 117, 115, 101, 115, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, > 115, 101, 116, 32, 91, 97, 45, 122, 65, 45, 90, 48, 45, 57, 95, 93, > 32, 97, 110, 100, 10, 92, 110, 32, 32, 32, 32, 32, 100, 111, 101, 115, > 32, 110, 111, 116, 32, 115, 116, 97, 114, 116, 32, 119, 105, 116, 104, 32, > 97, 32, 110, 117, 109, 98, 101, 114, 46, 32, 73, 109, 97, 103, 101, 32, > 110, 97, 109, 101, 115, 32, 99, 97, 110, 32, 98, 101, 32, 115, 101, 116, > 32, 111, 114, 32, 114, 101, 97, 115, 115, 105, 103, 110, 101, 100, 32, 97, > 116, 32, 97, 110, 121, 32, 109, 111, 109, 101, 110, 116, 32, 100, 117, 114, > 105, 110, 103, 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 32, 40, 115, 101, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, > 32, 39, 45, 110, 97, 109, 101, 39, 32, 97, 110, 100, 32, 39, 45, 105, > 110, 112, 117, 116, 39, 41, 46, 10, 92, 110, 32, 32, 45, 32, 71, 92, > 52, 55, 77, 73, 67, 32, 100, 101, 102, 105, 110, 101, 115, 32, 97, 32, > 115, 101, 116, 32, 111, 102, 32, 118, 97, 114, 105, 111, 117, 115, 32, 99, > 111, 109, 109, 97, 110, 100, 115, 32, 97, 110, 100, 32, 115, 117, 98, 115, > 116, 105, 116, 117, 116, 105, 111, 110, 32, 109, 101, 99, 104, 97, 110, 105, > 115, 109, 115, 32, 116, 111, 32, 97, 108, 108, 111, 119, 32, 116, 104, 101, > 32, 100, 101, 115, 105, 103, 110, 10, 92, 110, 32, 32, 32, 32, 32, 111, > 102, 32, 99, 111, 109, 112, 108, 101, 120, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 115, 32, 109, 97, 110, 97, 103, 105, 110, 103, 32, 116, 104, 105, > 115, 32, 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, > 44, 32, 105, 110, 32, 97, 32, 118, 101, 114, 121, 32, 102, 108, 101, 120, > 105, 98, 108, 101, 32, 119, 97, 121, 58, 10, 92, 110, 32, 32, 32, 32, > 32, 89, 111, 117, 32, 99, 97, 110, 32, 105, 110, 115, 101, 114, 116, 32, > 111, 114, 32, 114, 101, 109, 111, 118, 101, 32, 105, 109, 97, 103, 101, 115, > 32, 105, 110, 32, 116, 104, 101, 32, 108, 105, 115, 116, 44, 32, 114, 101, > 97, 114, 114, 97, 110, 103, 101, 32, 105, 109, 97, 103, 101, 32, 105, 110, > 100, 105, 99, 101, 115, 44, 32, 112, 114, 111, 99, 101, 115, 115, 32, 105, > 109, 97, 103, 101, 115, 10, 92, 110, 32, 32, 32, 32, 32, 40, 105, 110, > 100, 105, 118, 105, 100, 117, 97, 108, 108, 121, 32, 111, 114, 32, 97, 115, > 32, 97, 32, 103, 114, 111, 117, 112, 41, 44, 32, 109, 101, 114, 103, 101, > 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, 32, 116, 111, 103, 101, > 116, 104, 101, 114, 32, 97, 110, 100, 32, 111, 117, 116, 112, 117, 116, 32, > 105, 109, 97, 103, 101, 32, 102, 105, 108, 101, 115, 46, 10, 92, 110, 32, > 32, 45, 32, 83, 117, 99, 104, 32, 97, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 32, 99, 97, 110, 32, 98, 101, 32, 119, 114, 105, 116, 116, 101, > 110, 32, 105, 116, 115, 101, 108, 102, 32, 97, 115, 32, 97, 32, 99, 117, > 115, 116, 111, 109, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 115, 116, 111, 114, 97, 98, 108, 101, 32, 105, 110, > 32, 97, 32, 99, 117, 115, 116, 111, 109, 10, 92, 110, 32, 32, 32, 32, > 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, 105, 108, 101, 44, 32, > 119, 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 114, 101, 45, > 117, 115, 101, 100, 32, 97, 102, 116, 101, 114, 119, 97, 114, 100, 115, 32, > 105, 110, 32, 97, 110, 111, 116, 104, 101, 114, 32, 98, 105, 103, 103, 101, > 114, 32, 112, 105, 112, 101, 108, 105, 110, 101, 32, 105, 102, 32, 110, 101, > 99, 101, 115, 115, 97, 114, 121, 46, 34, 10, 45, 95, 104, 101, 108, 112, > 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 109, 97, 103, 101, 32, > 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 97, 110, 100, 32, 116, > 101, 114, 109, 105, 110, 111, 108, 111, 103, 121, 34, 10, 45, 95, 104, 101, > 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, 32, 32, > 45, 32, 73, 110, 32, 71, 92, 52, 55, 77, 73, 67, 44, 32, 97, 110, > 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 109, 111, 100, 101, 108, 101, > 100, 32, 97, 115, 32, 97, 32, 49, 100, 44, 32, 50, 100, 44, 32, 51, > 100, 32, 111, 114, 32, 52, 100, 32, 97, 114, 114, 97, 121, 32, 111, 102, > 32, 115, 99, 97, 108, 97, 114, 32, 118, 97, 108, 117, 101, 115, 44, 32, > 117, 110, 105, 102, 111, 114, 109, 108, 121, 10, 92, 110, 32, 32, 32, 32, > 32, 100, 105, 115, 99, 114, 101, 116, 105, 122, 101, 100, 32, 111, 110, 32, > 97, 32, 114, 101, 99, 116, 97, 110, 103, 117, 108, 97, 114, 47, 112, 97, > 114, 97, 108, 108, 101, 108, 101, 112, 105, 112, 101, 100, 105, 99, 32, 100, > 111, 109, 97, 105, 110, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, > 32, 102, 111, 117, 114, 32, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, > 32, 111, 102, 32, 116, 104, 101, 115, 101, 32, 97, 114, 114, 97, 121, 115, > 32, 97, 114, 101, 32, 114, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, > 121, 32, 100, 101, 110, 111, 116, 101, 100, 32, 98, 121, 58, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 119, 105, 100, 116, 104, 39, 44, 32, 116, > 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 32, 99, 111, 108, 117, 109, 110, 115, 32, 40, 115, 105, 122, 101, > 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 39, 120, 39, 45, 97, > 120, 105, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 104, > 101, 105, 103, 104, 116, 39, 44, 32, 116, 104, 101, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 114, 111, 119, 115, > 32, 40, 115, 105, 122, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, > 32, 39, 121, 39, 45, 97, 120, 105, 115, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 100, 101, 112, 116, 104, 39, 44, 32, 116, 104, 101, > 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 32, 115, 108, 105, 99, 101, 115, 32, 40, 115, 105, 122, 101, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 39, 122, 39, 45, 97, 120, 105, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, 104, 101, > 32, 100, 101, 112, 116, 104, 32, 105, 115, 32, 101, 113, 117, 97, 108, 32, > 116, 111, 32, 49, 32, 102, 111, 114, 32, 117, 115, 117, 97, 108, 32, 50, > 100, 32, 99, 111, 108, 111, 114, 32, 111, 114, 32, 103, 114, 97, 121, 115, > 99, 97, 108, 101, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 39, 115, 112, 101, 99, 116, 114, 117, 109, 39, 44, > 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 40, 115, > 105, 122, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 39, 99, > 39, 45, 97, 120, 105, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 84, 104, 101, 32, 115, 112, 101, 99, 116, 114, 117, 109, 32, > 105, 115, 32, 114, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, 121, 32, > 101, 113, 117, 97, 108, 32, 116, 111, 32, 51, 32, 97, 110, 100, 32, 52, > 32, 102, 111, 114, 32, 117, 115, 117, 97, 108, 32, 82, 71, 66, 32, 97, > 110, 100, 32, 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, 114, > 101, 32, 97, 114, 101, 32, 110, 111, 32, 115, 105, 122, 101, 32, 108, 105, > 109, 105, 116, 97, 116, 105, 111, 110, 115, 32, 111, 110, 32, 101, 97, 99, > 104, 32, 105, 109, 97, 103, 101, 32, 100, 105, 109, 101, 110, 115, 105, 111, > 110, 115, 46, 32, 80, 97, 114, 116, 105, 99, 117, 108, 97, 114, 108, 121, > 44, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, 32, 32, 115, 108, 105, > 99, 101, 115, 32, 111, 114, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 99, 97, 110, 32, 98, 101, 32, 111, 102, 32, 97, 114, 98, 105, 116, 114, > 97, 114, 121, 32, 115, 105, 122, 101, 32, 119, 105, 116, 104, 105, 110, 32, > 116, 104, 101, 32, 108, 105, 109, 105, 116, 115, 32, 111, 102, 32, 97, 118, > 97, 105, 108, 97, 98, 108, 101, 32, 109, 101, 109, 111, 114, 121, 46, 10, > 92, 110, 32, 32, 45, 32, 84, 104, 101, 32, 119, 105, 100, 116, 104, 44, > 32, 104, 101, 105, 103, 104, 116, 32, 97, 110, 100, 32, 100, 101, 112, 116, > 104, 32, 111, 102, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 97, 114, > 101, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 32, 97, 115, 32, > 39, 115, 112, 97, 116, 105, 97, 108, 39, 32, 100, 105, 109, 101, 110, 115, > 105, 111, 110, 115, 44, 32, 119, 104, 105, 108, 101, 32, 116, 104, 101, 10, > 92, 110, 32, 32, 32, 32, 32, 115, 112, 101, 99, 116, 114, 117, 109, 32, > 104, 97, 115, 32, 97, 32, 39, 109, 117, 108, 116, 105, 45, 115, 112, 101, > 99, 116, 114, 97, 108, 39, 32, 109, 101, 97, 110, 105, 110, 103, 46, 32, > 84, 104, 117, 115, 44, 32, 97, 32, 52, 100, 32, 105, 109, 97, 103, 101, > 32, 105, 110, 32, 71, 92, 52, 55, 77, 73, 67, 32, 115, 104, 111, 117, > 108, 100, 32, 98, 101, 32, 109, 111, 115, 116, 32, 111, 102, 116, 101, 110, > 10, 92, 110, 32, 32, 32, 32, 32, 114, 101, 103, 97, 114, 100, 101, 100, > 32, 97, 115, 32, 97, 32, 51, 100, 32, 100, 97, 116, 97, 115, 101, 116, > 32, 111, 102, 32, 109, 117, 108, 116, 105, 45, 115, 112, 101, 99, 116, 114, > 97, 108, 32, 118, 111, 120, 101, 108, 115, 46, 32, 77, 111, 115, 116, 32, > 111, 102, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, > 111, 109, 109, 97, 110, 100, 115, 32, 119, 105, 108, 108, 32, 115, 116, 105, > 99, 107, 10, 92, 110, 32, 32, 32, 32, 32, 119, 105, 116, 104, 32, 116, > 104, 105, 115, 32, 105, 100, 101, 97, 32, 40, 101, 46, 103, 46, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 98, 108, 117, 114, 39, 32, 119, > 105, 108, 108, 32, 98, 108, 117, 114, 32, 105, 109, 97, 103, 101, 115, 32, > 111, 110, 108, 121, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 39, > 120, 121, 122, 39, 32, 97, 120, 101, 115, 41, 46, 10, 92, 110, 32, 32, > 45, 32, 65, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, > 101, 115, 32, 111, 102, 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, > 32, 111, 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, 104, 97, 118, > 101, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 100, 97, 116, 97, 116, > 121, 112, 101, 46, 32, 73, 116, 32, 99, 97, 110, 32, 98, 101, 32, 111, > 110, 101, 32, 97, 109, 111, 110, 103, 58, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 98, 111, 111, 108, 39, 58, 32, 83, 116, 97, 110, 100, 115, > 32, 102, 111, 114, 32, 39, 98, 111, 111, 108, 101, 97, 110, 39, 46, 32, > 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 123, > 32, 48, 61, 102, 97, 108, 115, 101, 32, 124, 32, 49, 61, 116, 114, 117, > 101, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 117, 99, > 104, 97, 114, 39, 58, 32, 83, 116, 97, 110, 100, 115, 32, 102, 111, 114, > 32, 39, 117, 110, 115, 105, 103, 110, 101, 100, 32, 99, 104, 97, 114, 39, > 46, 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, > 32, 91, 48, 44, 50, 53, 53, 93, 32, 40, 56, 98, 105, 116, 115, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, 104, 105, 115, > 32, 116, 121, 112, 101, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 99, > 111, 100, 105, 110, 103, 32, 105, 115, 32, 99, 111, 109, 109, 111, 110, 108, > 121, 32, 117, 115, 101, 100, 32, 116, 111, 32, 115, 116, 111, 114, 101, 32, > 56, 98, 105, 116, 115, 47, 99, 104, 97, 110, 110, 101, 108, 115, 32, 82, > 71, 66, 91, 65, 93, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 99, 104, 97, 114, 39, 58, 32, 86, 97, > 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 91, 45, 49, > 50, 56, 44, 49, 50, 55, 93, 32, 40, 56, 98, 105, 116, 115, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 117, 115, 104, 111, 114, 116, > 39, 58, 32, 83, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 39, 117, > 110, 115, 105, 103, 110, 101, 100, 32, 115, 104, 111, 114, 116, 39, 46, 32, > 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 91, > 48, 44, 54, 53, 53, 51, 53, 93, 32, 40, 49, 54, 98, 105, 116, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, 104, 105, > 115, 32, 116, 121, 112, 101, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, > 99, 111, 100, 105, 110, 103, 32, 105, 115, 32, 99, 111, 109, 109, 111, 110, > 108, 121, 32, 117, 115, 101, 100, 32, 116, 111, 32, 115, 116, 111, 114, 101, > 32, 49, 54, 98, 105, 116, 115, 47, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 82, 71, 66, 91, 65, 93, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 115, 104, 111, 114, 116, 39, 58, > 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, > 91, 45, 51, 50, 55, 54, 56, 44, 51, 50, 55, 54, 55, 93, 32, 40, > 49, 54, 98, 105, 116, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 117, 105, 110, 116, 39, 58, 32, 83, 116, 97, 110, 100, 115, 32, > 102, 111, 114, 32, 39, 117, 110, 115, 105, 103, 110, 101, 100, 32, 105, 110, > 116, 39, 46, 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, > 105, 115, 32, 91, 48, 44, 50, 94, 51, 50, 45, 49, 93, 32, 40, 51, > 50, 98, 105, 116, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 39, 105, 110, 116, 39, 58, 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, > 103, 101, 32, 105, 115, 32, 91, 45, 50, 94, 51, 49, 44, 50, 94, 51, > 49, 45, 49, 93, 32, 40, 51, 50, 32, 98, 105, 116, 115, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 102, 108, 111, 97, 116, 39, 58, > 32, 86, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, > 91, 45, 51, 46, 52, 69, 51, 56, 44, 43, 51, 46, 52, 69, 51, 56, > 93, 32, 40, 51, 50, 98, 105, 116, 115, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 84, 104, 105, 115, 32, 116, 121, 112, 101, 32, > 111, 102, 32, 99, 111, 100, 105, 110, 103, 32, 105, 115, 32, 97, 98, 108, > 101, 32, 116, 111, 32, 115, 116, 111, 114, 101, 32, 112, 105, 120, 101, 108, > 115, 32, 97, 115, 32, 51, 50, 32, 98, 105, 116, 115, 32, 102, 108, 111, > 97, 116, 45, 118, 97, 108, 117, 101, 100, 32, 110, 117, 109, 98, 101, 114, > 115, 46, 32, 84, 104, 105, 115, 32, 105, 115, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 116, 104, 101, 32, 100, 101, 102, 97, 117, 108, 116, > 32, 100, 97, 116, 97, 116, 121, 112, 101, 32, 117, 115, 101, 100, 32, 98, > 121, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 109, 97, 103, 101, 32, > 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 111, 112, 101, 114, 97, > 116, 105, 111, 110, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 100, 111, 117, 98, 108, 101, 39, 58, 32, 86, 97, 108, 117, 101, 32, 114, > 97, 110, 103, 101, 32, 105, 115, 32, 91, 45, 49, 46, 55, 69, 51, 48, > 56, 44, 49, 46, 55, 69, 51, 48, 56, 93, 32, 40, 54, 52, 98, 105, > 116, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 84, > 104, 105, 115, 32, 116, 121, 112, 101, 32, 111, 102, 32, 99, 111, 100, 105, > 110, 103, 32, 105, 115, 32, 97, 98, 108, 101, 32, 116, 111, 32, 115, 116, > 111, 114, 101, 32, 112, 105, 120, 101, 108, 115, 32, 97, 115, 32, 54, 52, > 32, 98, 105, 116, 115, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, > 101, 100, 32, 110, 117, 109, 98, 101, 114, 115, 46, 10, 92, 110, 32, 32, > 45, 32, 67, 111, 110, 115, 105, 100, 101, 114, 105, 110, 103, 32, 112, 105, > 120, 101, 108, 32, 100, 97, 116, 97, 116, 121, 112, 101, 115, 32, 100, 105, > 102, 102, 101, 114, 101, 110, 116, 32, 116, 104, 97, 110, 32, 39, 102, 108, > 111, 97, 116, 39, 32, 105, 115, 32, 103, 101, 110, 101, 114, 97, 108, 108, > 121, 32, 117, 115, 101, 108, 101, 115, 115, 44, 32, 101, 120, 99, 101, 112, > 116, 32, 116, 111, 32, 102, 111, 114, 99, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 47, 111, 117, 116, 112, > 117, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, > 32, 116, 111, 32, 97, 32, 112, 114, 101, 115, 99, 114, 105, 98, 101, 100, > 32, 98, 105, 110, 97, 114, 121, 32, 102, 111, 114, 109, 97, 116, 46, 32, > 72, 101, 110, 99, 101, 44, 32, 109, 111, 115, 116, 32, 71, 92, 52, 55, > 77, 73, 67, 32, 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, 32, > 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, > 103, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 97, 114, 101, 32, 97, > 118, 97, 105, 108, 97, 98, 108, 101, 32, 111, 110, 108, 121, 32, 102, 111, > 114, 32, 116, 104, 101, 32, 100, 101, 102, 97, 117, 108, 116, 32, 39, 102, > 108, 111, 97, 116, 39, 32, 112, 105, 120, 101, 108, 32, 100, 97, 116, 97, > 116, 121, 112, 101, 10, 92, 110, 32, 32, 32, 32, 32, 40, 115, 101, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 121, 112, 101, 39, > 32, 105, 102, 32, 121, 111, 117, 32, 110, 101, 101, 100, 32, 116, 111, 32, > 115, 119, 105, 116, 99, 104, 32, 116, 111, 32, 97, 110, 111, 116, 104, 101, > 114, 32, 112, 105, 120, 101, 108, 32, 100, 97, 116, 97, 116, 121, 112, 101, > 41, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, > 111, 110, 32, 34, 73, 116, 101, 109, 115, 32, 111, 102, 32, 97, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, > 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 73, 110, 32, 71, 92, 52, > 55, 77, 73, 67, 44, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 112, > 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, > 110, 101, 32, 105, 115, 32, 100, 101, 115, 99, 114, 105, 98, 101, 100, 32, > 97, 115, 32, 97, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, > 32, 105, 116, 101, 109, 115, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, > 32, 98, 121, 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, 32, 115, > 112, 97, 99, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 32, 39, > 32, 39, 46, 32, 83, 117, 99, 104, 32, 105, 116, 101, 109, 115, 32, 97, > 114, 101, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 100, 32, 97, > 110, 100, 32, 101, 120, 101, 99, 117, 116, 101, 100, 32, 102, 114, 111, 109, > 32, 116, 104, 101, 32, 108, 101, 102, 116, 32, 116, 111, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 114, 105, 103, 104, 116, 46, 32, 70, > 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 116, 104, 101, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 58, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 39, 105, 110, 112, 117, 116, 46, 106, 112, 103, > 32, 45, 98, 108, 117, 114, 32, 51, 44, 48, 32, 45, 115, 104, 97, 114, > 112, 101, 110, 32, 49, 48, 32, 45, 114, 101, 115, 105, 122, 101, 32, 50, > 48, 48, 37, 44, 50, 48, 48, 37, 32, 45, 111, 117, 116, 112, 117, 116, > 32, 111, 117, 116, 112, 117, 116, 46, 106, 112, 103, 39, 10, 92, 110, 32, > 32, 32, 32, 32, 100, 101, 102, 105, 110, 101, 115, 32, 97, 32, 118, 97, > 108, 105, 100, 32, 112, 105, 112, 101, 108, 105, 110, 101, 32, 99, 111, 109, > 112, 111, 115, 101, 100, 32, 111, 102, 32, 110, 105, 110, 101, 32, 71, 92, > 52, 55, 77, 73, 67, 32, 105, 116, 101, 109, 115, 46, 10, 92, 110, 32, > 32, 45, 32, 65, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, > 109, 32, 105, 115, 32, 97, 32, 115, 116, 114, 105, 110, 103, 32, 119, 104, > 105, 99, 104, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 115, 32, 101, > 105, 116, 104, 101, 114, 32, 97, 32, 99, 111, 109, 109, 97, 110, 100, 44, > 32, 97, 32, 115, 101, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 10, 92, 110, 32, > 32, 32, 32, 32, 97, 32, 102, 105, 108, 101, 110, 97, 109, 101, 44, 32, > 111, 114, 32, 97, 32, 115, 112, 101, 99, 105, 97, 108, 32, 105, 110, 112, > 117, 116, 32, 115, 116, 114, 105, 110, 103, 46, 10, 92, 110, 32, 32, 45, > 32, 69, 115, 99, 97, 112, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, > 114, 115, 32, 39, 92, 92, 39, 32, 97, 110, 100, 32, 100, 111, 117, 98, > 108, 101, 32, 113, 117, 111, 116, 101, 115, 32, 39, 92, 34, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 40, 97, 115, 32, 117, > 115, 117, 97, 108, 41, 32, 116, 111, 32, 100, 101, 102, 105, 110, 101, 32, > 105, 116, 101, 109, 115, 10, 92, 110, 32, 32, 32, 32, 32, 99, 111, 110, > 116, 97, 105, 110, 105, 110, 103, 32, 115, 112, 97, 99, 101, 115, 44, 32, > 111, 114, 32, 97, 110, 121, 32, 111, 116, 104, 101, 114, 32, 99, 104, 97, > 114, 97, 99, 116, 101, 114, 32, 115, 101, 113, 117, 101, 110, 99, 101, 115, > 46, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, > 116, 104, 101, 32, 115, 116, 114, 105, 110, 103, 115, 10, 92, 110, 32, 32, > 32, 32, 32, 39, 115, 105, 110, 103, 108, 101, 92, 92, 32, 105, 116, 101, > 109, 39, 32, 97, 110, 100, 32, 39, 92, 34, 115, 105, 110, 103, 108, 101, > 32, 105, 116, 101, 109, 92, 34, 39, 32, 100, 101, 102, 105, 110, 101, 32, > 116, 104, 101, 32, 115, 97, 109, 101, 32, 115, 116, 114, 105, 110, 103, 32, > 105, 116, 101, 109, 44, 32, 119, 105, 116, 104, 32, 97, 32, 115, 112, 97, > 99, 101, 32, 105, 110, 32, 105, 116, 46, 34, 10, 45, 95, 104, 101, 108, > 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 110, 112, 117, 116, > 32, 100, 97, 116, 97, 32, 105, 116, 101, 109, 115, 34, 10, 45, 95, 104, > 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, 32, > 32, 45, 32, 73, 102, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, 109, 32, 97, > 112, 112, 101, 97, 114, 115, 32, 116, 111, 32, 98, 101, 32, 97, 110, 32, > 101, 120, 105, 115, 116, 105, 110, 103, 32, 102, 105, 108, 101, 110, 97, 109, > 101, 44, 32, 116, 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, > 100, 105, 110, 103, 32, 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 100, 97, 116, 97, 32, 97, 114, 101, 32, 108, 111, 97, 100, 101, > 100, 32, 97, 110, 100, 32, 105, 110, 115, 101, 114, 116, 101, 100, 32, 97, > 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, 116, 104, 101, > 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, > 32, 45, 32, 83, 112, 101, 99, 105, 97, 108, 32, 102, 105, 108, 101, 110, > 97, 109, 101, 115, 32, 39, 45, 39, 32, 97, 110, 100, 32, 39, 45, 46, > 101, 120, 116, 39, 32, 115, 116, 97, 110, 100, 32, 102, 111, 114, 32, 116, > 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 105, 110, 112, 117, > 116, 47, 111, 117, 116, 112, 117, 116, 32, 115, 116, 114, 101, 97, 109, 115, > 44, 32, 111, 112, 116, 105, 111, 110, 97, 108, 108, 121, 10, 92, 110, 32, > 32, 32, 32, 32, 102, 111, 114, 99, 101, 100, 32, 116, 111, 32, 98, 101, > 32, 105, 110, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 39, > 101, 120, 116, 39, 32, 102, 105, 108, 101, 32, 102, 111, 114, 109, 97, 116, > 32, 40, 101, 46, 103, 46, 32, 39, 45, 46, 106, 112, 103, 39, 32, 111, > 114, 32, 39, 45, 46, 112, 110, 103, 39, 41, 46, 10, 92, 110, 32, 32, > 45, 32, 84, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, > 115, 112, 101, 99, 105, 97, 108, 32, 105, 110, 112, 117, 116, 32, 115, 116, > 114, 105, 110, 103, 115, 32, 109, 97, 121, 32, 98, 101, 32, 117, 115, 101, > 100, 32, 97, 115, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, > 109, 115, 32, 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 97, 110, 100, > 32, 105, 110, 115, 101, 114, 116, 32, 110, 101, 119, 10, 92, 110, 32, 32, > 32, 32, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 112, > 114, 101, 115, 99, 114, 105, 98, 101, 100, 32, 118, 97, 108, 117, 101, 115, > 44, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, 58, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 91, 115, 101, 108, 101, 99, 116, > 105, 111, 110, 93, 39, 32, 111, 114, 32, 39, 91, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 93, 120, 78, 39, 58, 32, 73, 110, 115, 101, 114, 116, > 32, 49, 32, 111, 114, 32, 78, 32, 99, 111, 112, 105, 101, 115, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 101, 120, 105, 115, 116, > 105, 110, 103, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 39, 115, 101, 108, 101, 99, 116, 105, 111, 110, 39, > 32, 109, 97, 121, 32, 99, 111, 110, 116, 97, 105, 110, 32, 111, 110, 101, > 32, 111, 114, 32, 115, 101, 118, 101, 114, 97, 108, 32, 105, 109, 97, 103, > 101, 115, 32, 40, 115, 101, 101, 32, 110, 101, 120, 116, 32, 115, 101, 99, > 116, 105, 111, 110, 32, 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 119, 105, 100, 116, > 104, 91, 37, 93, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, 44, > 95, 100, 101, 112, 116, 104, 91, 37, 93, 44, 95, 115, 112, 101, 99, 116, > 114, 117, 109, 91, 37, 93, 44, 95, 118, 97, 108, 117, 101, 115, 39, 58, > 32, 73, 110, 115, 101, 114, 116, 32, 97, 32, 110, 101, 119, 32, 105, 109, > 97, 103, 101, 32, 119, 105, 116, 104, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, > 32, 97, 110, 100, 32, 118, 97, 108, 117, 101, 115, 32, 40, 97, 100, 100, > 105, 110, 103, 32, 39, 37, 39, 32, 116, 111, 32, 97, 32, 100, 105, 109, > 101, 110, 115, 105, 111, 110, 32, 109, 101, 97, 110, 115, 32, 39, 112, 101, > 114, 99, 101, 110, 116, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 105, 122, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, 120, 105, > 115, 44, 32, 116, 97, 107, 101, 110, 32, 102, 114, 111, 109, 32, 116, 104, > 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 39, 91, 45, > 49, 93, 39, 39, 41, 46, 32, 65, 110, 121, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 105, 109, 101, 110, 115, 105, 111, 110, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 99, 97, 110, 32, 98, 101, 32, 97, > 108, 115, 111, 32, 119, 114, 105, 116, 116, 101, 110, 32, 97, 115, 32, 39, > 91, 105, 109, 97, 103, 101, 93, 39, 44, 32, 97, 110, 100, 32, 105, 115, > 32, 116, 104, 101, 110, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, > 32, 115, 105, 122, 101, 32, 40, 97, 108, 111, 110, 103, 32, 116, 104, 101, > 32, 115, 97, 109, 101, 32, 97, 120, 105, 115, 41, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 111, 102, 32, 116, 104, 101, 32, 101, 120, 105, 115, > 116, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 91, 105, 109, 97, 103, 101, 93, 46, 32, 39, 118, > 97, 108, 117, 101, 115, 39, 32, 99, 97, 110, 32, 98, 101, 32, 101, 105, > 116, 104, 101, 114, 32, 97, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, > 111, 102, 32, 110, 117, 109, 98, 101, 114, 115, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, > 32, 99, 111, 109, 109, 97, 115, 32, 39, 44, 39, 44, 32, 111, 114, 32, > 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 97, 115, 32, 101, 46, > 103, 46, 32, 105, 110, 32, 105, 110, 112, 117, 116, 32, 105, 116, 101, 109, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 50, 53, 54, 44, 50, > 53, 54, 44, 49, 44, 51, 44, 105, 102, 40, 99, 61, 61, 48, 44, 120, > 44, 105, 102, 40, 99, 61, 61, 49, 44, 121, 44, 48, 41, 41, 39, 32, > 119, 104, 105, 99, 104, 32, 99, 114, 101, 97, 116, 101, 115, 32, 97, 32, > 50, 53, 54, 120, 50, 53, 54, 32, 82, 71, 66, 32, 99, 111, 108, 111, > 114, 32, 105, 109, 97, 103, 101, 32, 119, 105, 116, 104, 32, 97, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 115, 112, 97, 116, 105, 97, 108, 32, > 115, 104, 97, 100, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 114, > 101, 100, 32, 97, 110, 100, 32, 103, 114, 101, 101, 110, 32, 99, 104, 97, > 110, 110, 101, 108, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 40, 118, 49, 44, 118, 50, 44, 46, 46, 41, 39, 58, 32, 73, 110, 115, > 101, 114, 116, 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, > 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 112, > 114, 101, 115, 99, 114, 105, 98, 101, 100, 32, 118, 97, 108, 117, 101, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 86, 97, 108, 117, 101, > 32, 115, 101, 112, 97, 114, 97, 116, 111, 114, 32, 105, 110, 115, 105, 100, > 101, 32, 112, 97, 114, 101, 110, 116, 104, 101, 115, 101, 115, 32, 99, 97, > 110, 32, 98, 101, 32, 39, 44, 39, 32, 40, 99, 111, 108, 117, 109, 110, > 32, 115, 101, 112, 97, 114, 97, 116, 111, 114, 46, 41, 44, 32, 39, 59, > 39, 32, 40, 114, 111, 119, 32, 115, 101, 112, 46, 41, 44, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 39, 47, 39, 32, 40, 115, 108, 105, 99, > 101, 32, 115, 101, 112, 46, 41, 32, 111, 114, 32, 39, 94, 39, 32, 40, > 99, 104, 97, 110, 110, 101, 108, 32, 115, 101, 112, 46, 41, 46, 32, 70, > 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 39, 40, 49, 44, 50, 44, 51, 59, 52, 44, 53, 44, 54, 59, 55, > 44, 56, 44, 57, 41, 39, 32, 99, 114, 101, 97, 116, 101, 115, 32, 97, > 32, 51, 120, 51, 32, 109, 97, 116, 114, 105, 120, 32, 40, 115, 99, 97, > 108, 97, 114, 32, 105, 109, 97, 103, 101, 41, 44, 32, 119, 105, 116, 104, > 32, 118, 97, 108, 117, 101, 115, 32, 102, 114, 111, 109, 32, 49, 32, 116, > 111, 32, 57, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 48, 39, > 58, 32, 73, 110, 115, 101, 114, 116, 32, 97, 32, 110, 101, 119, 32, 39, > 101, 109, 112, 116, 121, 39, 32, 105, 109, 97, 103, 101, 44, 32, 99, 111, > 110, 116, 97, 105, 110, 105, 110, 103, 32, 110, 111, 32, 112, 105, 120, 101, > 108, 32, 100, 97, 116, 97, 46, 32, 69, 109, 112, 116, 121, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 114, 101, 32, 117, 115, 101, 100, 32, 111, 110, > 108, 121, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 105, 110, 32, 114, > 97, 114, 101, 32, 111, 99, 99, 97, 115, 105, 111, 110, 115, 46, 10, 92, > 110, 32, 32, 45, 32, 73, 110, 112, 117, 116, 32, 105, 116, 101, 109, 32, > 39, 110, 97, 109, 101, 61, 118, 97, 108, 117, 101, 39, 32, 100, 101, 99, > 108, 97, 114, 101, 115, 32, 97, 32, 110, 101, 119, 32, 108, 111, 99, 97, > 108, 32, 111, 114, 32, 103, 108, 111, 98, 97, 108, 32, 118, 97, 114, 105, > 97, 98, 108, 101, 32, 39, 110, 97, 109, 101, 39, 44, 32, 111, 114, 32, > 97, 115, 115, 105, 103, 110, 32, 97, 32, 110, 101, 119, 10, 92, 110, 32, > 32, 32, 32, 32, 118, 97, 108, 117, 101, 32, 116, 111, 32, 97, 110, 32, > 101, 120, 105, 115, 116, 105, 110, 103, 32, 118, 97, 114, 105, 97, 98, 108, > 101, 46, 32, 86, 97, 114, 105, 97, 98, 108, 101, 32, 110, 97, 109, 101, > 115, 32, 117, 115, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, > 32, 115, 101, 116, 32, 91, 97, 45, 122, 65, 45, 90, 48, 45, 57, 95, > 93, 32, 97, 110, 100, 32, 99, 97, 110, 110, 111, 116, 10, 92, 110, 32, > 32, 32, 32, 32, 115, 116, 97, 114, 116, 32, 119, 105, 116, 104, 32, 97, > 32, 110, 117, 109, 98, 101, 114, 46, 32, 65, 32, 118, 97, 114, 105, 97, > 98, 108, 101, 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 105, > 115, 32, 97, 108, 119, 97, 121, 115, 32, 108, 111, 99, 97, 108, 32, 116, > 111, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 101, 120, 99, 101, 112, 116, 10, 92, 110, 32, > 32, 32, 32, 32, 119, 104, 101, 110, 32, 105, 116, 32, 115, 116, 97, 114, > 116, 115, 32, 98, 121, 32, 116, 104, 101, 32, 117, 110, 100, 101, 114, 115, > 99, 111, 114, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 32, 39, > 95, 39, 46, 32, 73, 110, 32, 116, 104, 97, 116, 32, 99, 97, 115, 101, > 44, 32, 105, 116, 32, 98, 101, 99, 111, 109, 101, 115, 32, 97, 108, 115, > 111, 32, 97, 99, 99, 101, 115, 115, 105, 98, 108, 101, 10, 92, 110, 32, > 32, 32, 32, 32, 98, 121, 32, 97, 110, 121, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 105, 110, 118, 111, 107, 101, 100, 32, 111, 117, 116, 115, 105, > 100, 101, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 115, 99, 111, 112, 101, 46, 34, 10, 45, > 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 67, > 111, 109, 109, 97, 110, 100, 32, 105, 116, 101, 109, 115, 32, 97, 110, 100, > 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, 115, 34, 10, 45, 95, 104, > 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, 32, > 32, 45, 32, 65, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 116, 101, > 109, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 98, 121, 32, 39, 45, > 39, 32, 100, 101, 115, 105, 103, 110, 97, 116, 101, 115, 32, 97, 32, 99, > 111, 109, 109, 97, 110, 100, 44, 32, 109, 111, 115, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 116, 105, 109, 101, 46, 32, 71, 101, 110, 101, 114, 97, > 108, 108, 121, 44, 32, 99, 111, 109, 109, 97, 110, 100, 115, 10, 92, 110, > 32, 32, 32, 32, 32, 112, 101, 114, 102, 111, 114, 109, 32, 105, 109, 97, > 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 111, 112, > 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 110, 32, 111, 110, 101, 32, > 111, 114, 32, 115, 101, 118, 101, 114, 97, 108, 32, 97, 118, 97, 105, 108, > 97, 98, 108, 101, 32, 105, 109, 97, 103, 101, 115, 32, 111, 102, 32, 116, > 104, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 45, 32, 67, > 111, 109, 109, 111, 110, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 104, > 97, 118, 101, 32, 116, 119, 111, 32, 101, 113, 117, 105, 118, 97, 108, 101, > 110, 116, 32, 110, 97, 109, 101, 115, 32, 40, 114, 101, 103, 117, 108, 97, > 114, 32, 97, 110, 100, 32, 115, 104, 111, 114, 116, 41, 46, 32, 70, 111, > 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 99, 111, 109, 109, > 97, 110, 100, 10, 92, 110, 32, 32, 32, 32, 32, 110, 97, 109, 101, 115, > 32, 39, 45, 114, 101, 115, 105, 122, 101, 39, 32, 97, 110, 100, 32, 39, > 45, 114, 39, 32, 114, 101, 102, 101, 114, 32, 116, 111, 32, 116, 104, 101, > 32, 115, 97, 109, 101, 32, 105, 109, 97, 103, 101, 32, 114, 101, 115, 105, > 122, 105, 110, 103, 32, 97, 99, 116, 105, 111, 110, 46, 10, 92, 110, 32, > 32, 45, 32, 65, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 109, 97, 121, 32, 104, 97, 118, 101, 32, 109, 97, > 110, 100, 97, 116, 111, 114, 121, 32, 111, 114, 32, 111, 112, 116, 105, 111, > 110, 97, 108, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, 32, 67, > 111, 109, 109, 97, 110, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, > 32, 109, 117, 115, 116, 32, 98, 101, 10, 92, 110, 32, 32, 32, 32, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 110, 32, 116, 104, 101, > 32, 110, 101, 120, 116, 32, 105, 116, 101, 109, 32, 111, 110, 32, 116, 104, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, 46, 32, > 67, 111, 109, 109, 97, 115, 32, 39, 44, 39, 32, 97, 114, 101, 32, 117, > 115, 101, 100, 32, 116, 111, 32, 115, 101, 112, 97, 114, 97, 116, 101, 32, > 109, 117, 108, 116, 105, 112, 108, 101, 10, 92, 110, 32, 32, 32, 32, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 32, 105, 102, 32, 97, 110, > 121, 32, 114, 101, 113, 117, 105, 114, 101, 100, 46, 10, 92, 110, 32, 32, > 45, 32, 84, 104, 101, 32, 101, 120, 101, 99, 117, 116, 105, 111, 110, 32, > 111, 102, 32, 97, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 109, 97, 121, 32, 98, 101, 32, 114, 101, 115, 116, > 114, 105, 99, 116, 101, 100, 32, 111, 110, 108, 121, 32, 116, 111, 32, 97, > 32, 115, 117, 98, 115, 101, 116, 32, 111, 102, 32, 116, 104, 101, 32, 105, > 109, 97, 103, 101, 32, 108, 105, 115, 116, 44, 32, 98, 121, 10, 92, 110, > 32, 32, 32, 32, 32, 97, 112, 112, 101, 110, 100, 105, 110, 103, 32, 39, > 91, 115, 117, 98, 115, 101, 116, 93, 39, 32, 116, 111, 32, 116, 104, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 110, 97, 109, 101, 46, 32, 69, > 120, 97, 109, 112, 108, 101, 115, 32, 111, 102, 32, 118, 97, 108, 105, 100, > 32, 115, 121, 110, 116, 97, 120, 101, 115, 32, 102, 111, 114, 32, 39, 115, > 117, 98, 115, 101, 116, 39, 32, 97, 114, 101, 58, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 48, 44, 49, 44, 51, 93, > 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, 103, 101, 115, 32, > 91, 48, 93, 44, 91, 49, 93, 32, 97, 110, 100, 32, 91, 51, 93, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 51, > 45, 53, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 115, 32, 91, 51, 93, 32, 116, 111, 32, 91, 53, 93, 32, 40, 105, > 46, 101, 44, 32, 91, 51, 93, 44, 91, 52, 93, 32, 97, 110, 100, 32, > 91, 53, 93, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, > 99, 111, 109, 91, 53, 48, 37, 45, 49, 48, 48, 37, 93, 39, 58, 32, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, > 108, 121, 32, 111, 110, 32, 116, 104, 101, 32, 115, 101, 99, 111, 110, 100, > 32, 104, 97, 108, 102, 32, 111, 102, 32, 116, 104, 101, 32, 105, 109, 97, > 103, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 45, 99, 111, 109, 91, 48, 44, 45, 52, 45, 45, 49, 93, 39, > 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 111, 110, 108, 121, 32, 111, 110, 32, 116, 104, 101, 32, 102, 105, 114, 115, > 116, 32, 97, 110, 100, 32, 116, 104, 101, 32, 102, 111, 117, 114, 32, 108, > 97, 116, 101, 115, 116, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 48, 45, 57, 58, > 51, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 115, 32, 91, 48, 93, 32, 116, 111, 32, 91, 57, 93, 44, 32, 119, 105, > 116, 104, 32, 97, 32, 115, 116, 101, 112, 32, 111, 102, 32, 51, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 40, 105, 46, 101, 46, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 115, 32, 91, 48, 93, 44, 32, 91, 51, 93, 44, > 32, 91, 54, 93, 32, 97, 110, 100, 32, 91, 57, 93, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, 48, 45, 45, > 49, 58, 50, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 111, 110, 108, 121, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, > 119, 105, 116, 104, 32, 101, 118, 101, 110, 32, 105, 110, 100, 105, 99, 101, > 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, > 91, 48, 44, 50, 45, 52, 44, 53, 48, 37, 45, 45, 49, 93, 39, 58, > 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, > 110, 32, 105, 109, 97, 103, 101, 115, 32, 91, 48, 93, 44, 91, 50, 93, > 44, 91, 51, 93, 44, 91, 52, 93, 32, 97, 110, 100, 32, 111, 110, 32, > 116, 104, 101, 32, 115, 101, 99, 111, 110, 100, 32, 104, 97, 108, 102, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, > 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 45, 99, 111, 109, 91, > 94, 48, 44, 49, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 111, 110, 32, 97, 108, 108, 32, 105, 109, 97, > 103, 101, 115, 32, 101, 120, 99, 101, 112, 116, 32, 116, 104, 101, 32, 102, > 105, 114, 115, 116, 32, 116, 119, 111, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 45, 99, 111, 109, 91, 110, 97, 109, 101, 49, 44, 110, 97, > 109, 101, 50, 93, 39, 58, 32, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 111, 110, 32, 110, 97, 109, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 39, 110, 97, 109, 101, 49, 39, 32, 97, 110, 100, > 32, 39, 110, 97, 109, 101, 50, 39, 46, 10, 92, 110, 32, 32, 45, 32, > 73, 110, 100, 105, 99, 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 115, 32, 97, 114, 101, 32, 97, 108, 119, 97, 121, 115, > 32, 115, 111, 114, 116, 101, 100, 32, 105, 110, 32, 105, 110, 99, 114, 101, > 97, 115, 105, 110, 103, 32, 111, 114, 100, 101, 114, 44, 32, 97, 110, 100, > 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 32, 105, 110, 100, 105, 99, > 101, 115, 32, 97, 114, 101, 10, 92, 110, 32, 32, 32, 32, 32, 100, 105, > 115, 99, 97, 114, 100, 101, 100, 46, 32, 70, 111, 114, 32, 105, 110, 115, > 116, 97, 110, 99, 101, 44, 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, > 115, 32, 39, 91, 51, 45, 49, 44, 49, 45, 51, 93, 39, 32, 97, 110, > 100, 32, 39, 91, 49, 44, 49, 44, 49, 44, 51, 44, 50, 93, 39, 32, > 97, 114, 101, 32, 98, 111, 116, 104, 32, 101, 113, 117, 105, 118, 97, 108, > 101, 110, 116, 32, 116, 111, 10, 92, 110, 32, 32, 32, 32, 32, 39, 91, > 49, 45, 51, 93, 39, 46, 32, 73, 102, 32, 121, 111, 117, 32, 119, 97, > 110, 116, 32, 116, 111, 32, 114, 101, 112, 101, 97, 116, 32, 97, 32, 115, > 105, 110, 103, 108, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 109, 117, > 108, 116, 105, 112, 108, 101, 32, 116, 105, 109, 101, 115, 32, 111, 110, 32, > 97, 110, 32, 105, 109, 97, 103, 101, 44, 32, 117, 115, 101, 32, 97, 10, > 92, 110, 32, 32, 32, 32, 32, 39, 45, 114, 101, 112, 101, 97, 116, 46, > 46, 45, 100, 111, 110, 101, 39, 32, 108, 111, 111, 112, 46, 32, 73, 110, > 118, 101, 114, 116, 105, 110, 103, 32, 116, 104, 101, 32, 111, 114, 100, 101, > 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 97, > 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, 32, 99, 97, 110, 32, 98, > 101, 32, 97, 99, 104, 105, 101, 118, 101, 100, 32, 98, 121, 10, 92, 110, > 32, 32, 32, 32, 32, 105, 110, 118, 101, 114, 116, 105, 110, 103, 32, 102, > 105, 114, 115, 116, 32, 116, 104, 101, 32, 111, 114, 100, 101, 114, 32, 111, > 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, > 116, 104, 101, 32, 108, 105, 115, 116, 44, 32, 119, 105, 116, 104, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 114, 101, 118, 101, 114, 115, 101, > 91, 115, 101, 108, 101, 99, 116, 105, 111, 110, 93, 39, 46, 10, 92, 110, > 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 32, 105, 110, 118, 111, 107, 101, 100, 32, 119, 105, 116, > 104, 111, 117, 116, 32, 39, 91, 115, 117, 98, 115, 101, 116, 93, 39, 32, > 97, 114, 101, 32, 97, 112, 112, 108, 105, 101, 100, 32, 111, 110, 32, 97, > 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, > 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 45, 32, 65, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, 109, 97, 110, 100, 32, 115, > 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 45, 45, > 39, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 39, 45, 39, > 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 97, 99, 116, 32, 39, 105, > 110, 45, 112, 108, 97, 99, 101, 39, 32, 98, 117, 116, 32, 105, 110, 115, > 101, 114, 116, 115, 32, 105, 116, 115, 10, 92, 110, 32, 32, 32, 32, 32, > 114, 101, 115, 117, 108, 116, 32, 97, 115, 32, 111, 110, 101, 32, 111, 114, > 32, 115, 101, 118, 101, 114, 97, 108, 32, 110, 101, 119, 32, 105, 109, 97, > 103, 101, 115, 32, 97, 116, 32, 116, 104, 101, 32, 101, 110, 100, 32, 111, > 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, > 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, 114, 101, 32, 97, 114, > 101, 32, 116, 119, 111, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, > 116, 121, 112, 101, 115, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, > 115, 32, 116, 104, 97, 116, 32, 99, 97, 110, 32, 98, 101, 32, 114, 117, > 110, 32, 98, 121, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 58, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 78, 97, 116, 105, 118, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 115, 44, 32, 97, 114, 101, 32, 104, 97, 114, 100, 45, > 99, 111, 100, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 97, 108, > 105, 116, 105, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 105, 110, 116, > 101, 114, 112, 114, 101, 116, 101, 114, 32, 99, 111, 114, 101, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 84, 104, 101, 121, 32, 97, 114, 101, > 32, 116, 104, 117, 115, 32, 99, 111, 109, 112, 105, 108, 101, 100, 32, 97, > 115, 32, 109, 97, 99, 104, 105, 110, 101, 32, 99, 111, 100, 101, 32, 97, > 110, 100, 32, 114, 117, 110, 32, 113, 117, 105, 99, 107, 108, 121, 44, 32, > 109, 111, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 116, 105, 109, 101, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 79, 109, 105, 116, 116, > 105, 110, 103, 32, 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, > 119, 104, 101, 110, 32, 105, 110, 118, 111, 107, 105, 110, 103, 32, 97, 32, > 110, 97, 116, 105, 118, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, > 115, 32, 110, 111, 116, 32, 112, 101, 114, 109, 105, 116, 116, 101, 100, 44, > 32, 101, 120, 99, 101, 112, 116, 32, 105, 102, 32, 97, 108, 108, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 102, 111, 108, 108, 111, 119, 105, 110, > 103, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 97, 114, 101, 32, > 97, 108, 115, 111, 32, 111, 109, 105, 116, 116, 101, 100, 46, 32, 70, 111, > 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 99, 97, 108, 108, > 32, 116, 111, 32, 39, 45, 112, 108, 97, 115, 109, 97, 32, 49, 48, 44, > 44, 53, 39, 32, 105, 115, 32, 105, 110, 118, 97, 108, 105, 100, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 98, 117, 116, 32, 39, 45, 112, 108, > 97, 115, 109, 97, 32, 49, 48, 39, 32, 105, 115, 32, 99, 111, 114, 114, > 101, 99, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 117, 115, > 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 44, 32, 97, 114, > 101, 32, 100, 101, 102, 105, 110, 101, 100, 32, 97, 115, 32, 71, 92, 52, > 55, 77, 73, 67, 32, 112, 105, 112, 101, 108, 105, 110, 101, 115, 32, 111, > 102, 32, 110, 97, 116, 105, 118, 101, 32, 111, 114, 32, 99, 117, 115, 116, > 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 84, 104, 101, 121, 32, 97, 114, 101, 32, 105, > 110, 116, 101, 114, 112, 114, 101, 116, 101, 100, 32, 98, 121, 32, 116, 104, > 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 110, 116, 101, 114, 112, > 114, 101, 116, 101, 114, 44, 32, 97, 110, 100, 32, 114, 117, 110, 32, 115, > 108, 111, 119, 101, 114, 32, 116, 104, 97, 110, 32, 110, 97, 116, 105, 118, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 66, 117, 116, 32, 111, 109, 105, 116, 116, 105, 110, > 103, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 119, 104, 101, 110, > 32, 105, 110, 118, 111, 107, 105, 110, 103, 32, 97, 32, 99, 117, 115, 116, > 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, 115, 32, 112, 101, > 114, 109, 105, 116, 116, 101, 100, 46, 32, 70, 111, 114, 32, 105, 110, 115, > 116, 97, 110, 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 39, 45, 102, 108, > 111, 119, 101, 114, 32, 44, 44, 44, 49, 48, 48, 44, 44, 50, 39, 32, > 111, 114, 32, 39, 45, 102, 108, 111, 119, 101, 114, 32, 44, 39, 32, 97, > 114, 101, 32, 99, 111, 114, 114, 101, 99, 116, 46, 10, 92, 110, 32, 32, > 45, 32, 65, 32, 117, 115, 101, 114, 32, 109, 97, 121, 32, 101, 97, 115, > 105, 108, 121, 32, 97, 100, 100, 32, 105, 116, 115, 32, 111, 119, 110, 32, > 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, > 116, 111, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, > 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 32, 40, 115, 101, 101, 32, > 115, 101, 99, 116, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, 39, > 65, 100, 100, 105, 110, 103, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, > 109, 109, 97, 110, 100, 115, 39, 41, 46, 32, 78, 97, 116, 105, 118, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 99, 97, 110, 110, 111, 116, > 32, 98, 101, 32, 97, 100, 100, 101, 100, 32, 117, 110, 108, 101, 115, 115, > 32, 121, 111, 117, 32, 109, 111, 100, 105, 102, 121, 32, 116, 104, 101, 32, > 71, 92, 52, 55, 77, 73, 67, 10, 92, 110, 32, 32, 32, 32, 32, 105, > 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 32, 115, 111, 117, 114, 99, > 101, 32, 99, 111, 100, 101, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, > 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 110, 112, 117, 116, 115, 47, > 111, 117, 116, 112, 117, 116, 115, 32, 112, 114, 111, 112, 101, 114, 116, 105, > 101, 115, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, > 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 105, 115, 32, 97, 98, 108, 101, 32, 116, 111, 32, 114, 101, 97, > 100, 47, 119, 114, 105, 116, 101, 32, 109, 111, 115, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 108, 97, 115, 115, 105, 99, 97, 108, 32, 105, 109, > 97, 103, 101, 32, 102, 105, 108, 101, 32, 102, 111, 114, 109, 97, 116, 115, > 44, 32, 105, 110, 99, 108, 117, 100, 105, 110, 103, 58, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 50, 100, 32, 103, 114, 97, 121, 115, 99, 97, 108, > 101, 47, 99, 111, 108, 111, 114, 32, 102, 105, 108, 101, 115, 58, 32, 46, > 112, 110, 103, 44, 32, 46, 106, 112, 101, 103, 44, 32, 46, 103, 105, 102, > 44, 32, 46, 112, 110, 109, 44, 32, 46, 116, 105, 102, 44, 32, 46, 98, > 109, 112, 44, 32, 46, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 51, > 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 102, 105, 108, > 101, 115, 58, 32, 46, 100, 99, 109, 44, 32, 46, 104, 100, 114, 44, 32, > 46, 110, 105, 105, 44, 32, 46, 112, 97, 110, 44, 32, 46, 105, 110, 114, > 44, 32, 46, 112, 110, 107, 44, 32, 46, 46, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 73, 109, 97, 103, 101, 32, 115, 101, 113, 117, 101, 110, 99, > 101, 115, 58, 32, 46, 109, 112, 101, 103, 44, 32, 46, 97, 118, 105, 44, > 32, 46, 109, 111, 118, 44, 32, 46, 111, 103, 103, 44, 32, 46, 102, 108, > 118, 44, 32, 46, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 71, 101, > 110, 101, 114, 105, 99, 32, 97, 115, 99, 105, 105, 32, 111, 114, 32, 98, > 105, 110, 97, 114, 121, 32, 100, 97, 116, 97, 32, 102, 105, 108, 101, 115, > 58, 32, 46, 99, 105, 109, 103, 44, 32, 46, 99, 105, 109, 103, 122, 44, > 32, 46, 100, 108, 109, 44, 32, 46, 97, 115, 99, 44, 32, 46, 112, 102, > 109, 44, 32, 46, 114, 97, 119, 44, 32, 46, 116, 120, 116, 44, 32, 46, > 104, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 32, 102, 105, 108, 101, 115, 58, 32, 46, 111, 102, 102, > 46, 10, 92, 110, 32, 32, 45, 32, 87, 104, 101, 110, 32, 100, 101, 97, > 108, 105, 110, 103, 32, 119, 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 103, 101, 110, 101, 114, 97, 108, 108, 121, 32, 114, 101, 97, 100, 115, 44, > 32, 119, 114, 105, 116, 101, 115, 32, 97, 110, 100, 32, 100, 105, 115, 112, > 108, 97, 121, 115, 32, 100, 97, 116, 97, 32, 117, 115, 105, 110, 103, 32, > 116, 104, 101, 10, 92, 110, 32, 32, 32, 32, 32, 117, 115, 117, 97, 108, > 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 115, 112, 97, 99, 101, > 46, 10, 92, 110, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 105, 115, 32, 97, 98, 108, 101, 32, 116, 111, 32, 109, 97, 110, 97, 103, > 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, 104, 97, > 116, 32, 109, 97, 121, 32, 98, 101, 32, 114, 101, 97, 100, 32, 102, 114, > 111, 109, 32, 102, 105, 108, 101, 115, 32, 111, 114, 32, 103, 101, 110, 101, > 114, 97, 116, 101, 100, 32, 98, 121, 32, 71, 92, 52, 55, 77, 73, 67, > 10, 92, 110, 32, 32, 32, 32, 32, 99, 111, 109, 109, 97, 110, 100, 115, > 46, 32, 84, 104, 101, 121, 32, 97, 114, 101, 32, 115, 116, 111, 114, 101, > 100, 32, 97, 115, 32, 111, 110, 101, 45, 99, 111, 108, 117, 109, 110, 32, > 115, 99, 97, 108, 97, 114, 32, 105, 109, 97, 103, 101, 115, 32, 99, 111, > 110, 116, 97, 105, 110, 105, 110, 103, 32, 116, 104, 101, 32, 111, 98, 106, > 101, 99, 116, 32, 100, 97, 116, 97, 44, 32, 105, 110, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 102, 111, 108, 108, 111, 119, 105, 110, > 103, 32, 111, 114, 100, 101, 114, 58, 32, 123, 32, 109, 97, 103, 105, 99, > 95, 110, 117, 109, 98, 101, 114, 59, 32, 115, 105, 122, 101, 115, 59, 32, > 118, 101, 114, 116, 105, 99, 101, 115, 59, 32, 112, 114, 105, 109, 105, 116, > 105, 118, 101, 115, 59, 32, 99, 111, 108, 111, 114, 115, 59, 32, 111, 112, > 97, 99, 105, 116, 105, 101, 115, 32, 125, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 84, 104, 101, 115, 101, 32, 51, 100, 32, 114, 101, 112, 114, 101, > 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 98, > 101, 32, 112, 114, 111, 99, 101, 115, 115, 101, 100, 32, 97, 115, 32, 114, > 101, 103, 117, 108, 97, 114, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, > 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 40, 115, 101, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 39, 45, 115, 112, 108, 105, 116, 51, 100, 39, 32, 102, 111, 114, 32, 97, > 99, 99, 101, 115, 115, 105, 110, 103, 32, 101, 97, 99, 104, 32, 111, 102, > 32, 116, 104, 101, 115, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 100, 97, 116, 97, 32, 115, 101, 112, 97, 114, 97, 116, 101, 108, 121, > 41, 46, 10, 92, 110, 32, 32, 45, 32, 66, 101, 32, 97, 119, 97, 114, > 101, 32, 116, 104, 97, 116, 32, 117, 115, 117, 97, 108, 32, 102, 105, 108, > 101, 32, 102, 111, 114, 109, 97, 116, 115, 32, 109, 97, 121, 32, 98, 101, > 32, 115, 111, 109, 101, 116, 105, 109, 101, 115, 32, 110, 111, 116, 32, 97, > 100, 97, 112, 116, 101, 100, 32, 116, 111, 32, 115, 116, 111, 114, 101, 32, > 97, 108, 108, 32, 116, 104, 101, 32, 97, 118, 97, 105, 108, 97, 98, 108, > 101, 10, 92, 110, 32, 32, 32, 32, 32, 105, 109, 97, 103, 101, 32, 100, > 97, 116, 97, 44, 32, 115, 105, 110, 99, 101, 32, 71, 92, 52, 55, 77, > 73, 67, 32, 117, 115, 101, 115, 32, 102, 108, 111, 97, 116, 45, 118, 97, > 108, 117, 101, 100, 32, 99, 111, 100, 105, 110, 103, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 32, 112, 105, 120, 101, 108, 115, 46, 32, 70, 111, 114, > 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 115, 97, 118, 105, 110, > 103, 10, 92, 110, 32, 32, 32, 32, 32, 97, 110, 32, 105, 109, 97, 103, > 101, 32, 116, 104, 97, 116, 32, 119, 97, 115, 32, 105, 110, 105, 116, 105, > 97, 108, 108, 121, 32, 108, 111, 97, 100, 101, 100, 32, 97, 115, 32, 97, > 32, 49, 54, 98, 105, 116, 115, 47, 99, 104, 97, 110, 110, 101, 108, 32, > 105, 109, 97, 103, 101, 44, 32, 97, 115, 32, 97, 32, 46, 106, 112, 103, > 32, 102, 105, 108, 101, 32, 119, 105, 108, 108, 32, 114, 101, 115, 117, 108, > 116, 10, 92, 110, 32, 32, 32, 32, 32, 105, 110, 32, 108, 111, 115, 115, > 32, 111, 102, 32, 105, 110, 102, 111, 114, 109, 97, 116, 105, 111, 110, 46, > 32, 85, 115, 101, 32, 116, 104, 101, 32, 46, 99, 105, 109, 103, 32, 102, > 105, 108, 101, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 32, 40, 111, > 114, 32, 46, 99, 105, 109, 103, 122, 44, 32, 105, 116, 115, 32, 99, 111, > 109, 112, 114, 101, 115, 115, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, > 118, 101, 114, 115, 105, 111, 110, 41, 32, 116, 111, 32, 101, 110, 115, 117, > 114, 101, 32, 116, 104, 97, 116, 32, 97, 108, 108, 32, 100, 97, 116, 97, > 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, 119, 105, 108, 108, 32, > 98, 101, 32, 112, 114, 101, 115, 101, 114, 118, 101, 100, 32, 119, 104, 101, > 110, 32, 115, 97, 118, 105, 110, 103, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 92, 110, 32, 32, 45, 32, 70, 105, 108, 101, 32, 111, 112, 116, 105, > 111, 110, 115, 32, 99, 97, 110, 47, 109, 117, 115, 116, 32, 98, 101, 32, > 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, 101, 115, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 99, 32, 102, 105, 108, 101, 32, 102, 111, 114, 109, > 97, 116, 115, 58, 10, 92, 110, 32, 32, 32, 32, 46, 32, 86, 105, 100, > 101, 111, 32, 102, 105, 108, 101, 115, 58, 32, 79, 110, 108, 121, 32, 115, > 117, 98, 45, 102, 114, 97, 109, 101, 115, 32, 111, 102, 32, 97, 110, 32, > 105, 109, 97, 103, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 109, > 97, 121, 32, 98, 101, 32, 108, 111, 97, 100, 101, 100, 44, 32, 117, 115, > 105, 110, 103, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 101, 120, 116, 44, > 91, 102, 105, 114, 115, 116, 95, 102, 114, 97, 109, 101, 91, 37, 93, 91, > 44, 108, 97, 115, 116, 95, 102, 114, 97, 109, 101, 91, 37, 93, 91, 44, > 115, 116, 101, 112, 93, 93, 93, 39, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 79, 117, 116, 112, 117, 116, 32, 102, 114, 97, 109, 101, 114, > 97, 116, 101, 32, 97, 110, 100, 32, 98, 105, 116, 114, 97, 116, 101, 32, > 40, 105, 110, 32, 75, 98, 47, 115, 41, 32, 99, 97, 110, 32, 98, 101, > 32, 97, 108, 115, 111, 32, 115, 101, 116, 32, 98, 121, 32, 117, 115, 105, > 110, 103, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 109, 112, 103, 44, > 95, 102, 112, 115, 44, 95, 98, 105, 116, 114, 97, 116, 101, 39, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 46, 99, 105, 109, 103, 91, 122, 93, > 32, 102, 105, 108, 101, 115, 32, 58, 32, 79, 110, 108, 121, 32, 99, 114, > 111, 112, 115, 32, 97, 110, 100, 32, 115, 117, 98, 45, 105, 109, 97, 103, > 101, 115, 32, 111, 102, 32, 46, 99, 105, 109, 103, 32, 102, 105, 108, 101, > 115, 32, 99, 97, 110, 32, 98, 101, 32, 108, 111, 97, 100, 101, 100, 44, > 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 105, 110, 112, 117, 116, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 115, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, > 105, 109, 103, 44, 78, 48, 44, 78, 49, 39, 44, 32, 39, 102, 105, 108, > 101, 110, 97, 109, 101, 46, 99, 105, 109, 103, 44, 78, 48, 44, 78, 49, > 44, 120, 48, 44, 120, 49, 39, 44, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, 105, 109, 103, 44, > 78, 48, 44, 78, 49, 44, 120, 48, 44, 121, 48, 44, 120, 49, 44, 121, > 49, 39, 44, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, 105, > 109, 103, 44, 78, 48, 44, 78, 49, 44, 120, 48, 44, 121, 48, 44, 122, > 48, 44, 120, 49, 44, 121, 49, 44, 122, 49, 39, 44, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, > 105, 109, 103, 44, 78, 48, 44, 78, 49, 44, 120, 48, 44, 121, 48, 44, > 122, 48, 44, 99, 48, 44, 120, 49, 44, 121, 49, 44, 122, 49, 44, 99, > 49, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 83, 112, 101, 99, > 105, 102, 121, 105, 110, 103, 32, 39, 45, 49, 39, 32, 102, 111, 114, 32, > 111, 110, 101, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, > 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 116, 104, 101, 32, 109, > 97, 120, 105, 109, 117, 109, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, > 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 79, > 117, 116, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 99, 105, 109, 103, 91, > 122, 93, 91, 44, 100, 97, 116, 97, 116, 121, 112, 101, 93, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 116, 111, 32, 102, 111, > 114, 99, 101, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 32, 112, > 105, 120, 101, 108, 32, 116, 121, 112, 101, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 39, 100, 97, 116, 97, 116, 121, 112, 101, 39, 32, 99, 97, > 110, 32, 98, 101, 32, 123, 32, 98, 111, 111, 108, 32, 124, 32, 117, 99, > 104, 97, 114, 32, 124, 32, 99, 104, 97, 114, 32, 124, 32, 117, 115, 104, > 111, 114, 116, 32, 124, 32, 115, 104, 111, 114, 116, 32, 124, 32, 117, 105, > 110, 116, 32, 124, 32, 105, 110, 116, 32, 124, 32, 117, 108, 111, 110, 103, > 32, 124, 32, 108, 111, 110, 103, 32, 124, 32, 102, 108, 111, 97, 116, 32, > 124, 32, 100, 111, 117, 98, 108, 101, 32, 125, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 46, 114, 97, 119, 32, 98, 105, 110, 97, 114, 121, 32, > 102, 105, 108, 101, 115, 58, 32, 73, 109, 97, 103, 101, 32, 100, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 32, 97, 110, 100, 32, 105, 110, 112, 117, > 116, 32, 112, 105, 120, 101, 108, 32, 116, 121, 112, 101, 32, 109, 97, 121, > 32, 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 119, 104, > 101, 110, 32, 108, 111, 97, 100, 105, 110, 103, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 46, 114, 97, 119, 32, 102, 105, 108, 101, 115, 32, 119, > 105, 116, 104, 32, 105, 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, > 115, 115, 105, 111, 110, 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, > 114, 97, 119, 91, 44, 100, 97, 116, 97, 116, 121, 112, 101, 93, 91, 44, > 119, 105, 100, 116, 104, 93, 91, 44, 104, 101, 105, 103, 104, 116, 91, 44, > 100, 101, 112, 116, 104, 91, 44, 100, 105, 109, 93, 93, 93, 93, 39, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 73, 102, 32, 110, 111, 32, > 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 97, 114, 101, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 116, 104, 101, 32, 114, 101, > 115, 117, 108, 116, 105, 110, 103, 32, 105, 109, 97, 103, 101, 32, 105, 115, > 32, 97, 32, 111, 110, 101, 45, 99, 111, 108, 117, 109, 110, 32, 118, 101, > 99, 116, 111, 114, 32, 119, 105, 116, 104, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 109, 97, 120, 105, 109, 117, 109, 32, 112, 111, 115, 115, 105, > 98, 108, 101, 32, 104, 101, 105, 103, 104, 116, 46, 32, 80, 105, 120, 101, > 108, 32, 116, 121, 112, 101, 32, 99, 97, 110, 32, 97, 108, 115, 111, 32, > 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 119, 105, 116, > 104, 32, 116, 104, 101, 32, 111, 117, 116, 112, 117, 116, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 32, 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 114, 97, 119, 91, 44, > 100, 97, 116, 97, 116, 121, 112, 101, 93, 39, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 39, 100, 97, 116, 97, 116, 121, 112, 101, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 98, 111, 111, 108, 32, 124, 32, > 117, 99, 104, 97, 114, 32, 124, 32, 99, 104, 97, 114, 32, 124, 32, 117, > 115, 104, 111, 114, 116, 32, 124, 32, 115, 104, 111, 114, 116, 32, 124, 32, > 117, 105, 110, 116, 32, 124, 32, 105, 110, 116, 32, 124, 32, 117, 108, 111, > 110, 103, 32, 124, 32, 108, 111, 110, 103, 32, 124, 32, 102, 108, 111, 97, > 116, 32, 124, 32, 100, 111, 117, 98, 108, 101, 32, 125, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 46, 121, 117, 118, 32, 102, 105, 108, 101, 115, > 58, 32, 73, 109, 97, 103, 101, 32, 100, 105, 109, 101, 110, 115, 105, 111, > 110, 115, 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 44, 32, 97, 110, 100, 32, 111, 110, 108, 121, 32, 115, > 117, 98, 45, 102, 114, 97, 109, 101, 115, 32, 111, 102, 32, 97, 110, 32, > 105, 109, 97, 103, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, > 101, 113, 117, 101, 110, 99, 101, 32, 109, 97, 121, 32, 98, 101, 32, 108, > 111, 97, 100, 101, 100, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, > 32, 105, 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, 110, > 97, 109, 101, 46, 121, 117, 118, 44, 119, 105, 100, 116, 104, 44, 104, 101, > 105, 103, 104, 116, 91, 44, 102, 105, 114, 115, 116, 95, 102, 114, 97, 109, > 101, 91, 44, 108, 97, 115, 116, 95, 102, 114, 97, 109, 101, 91, 44, 115, > 116, 101, 112, 93, 93, 93, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 46, 116, 105, 102, 102, 32, 102, 105, 108, 101, 115, 58, 32, 79, 110, > 108, 121, 32, 115, 117, 98, 45, 105, 109, 97, 103, 101, 115, 32, 111, 102, > 32, 109, 117, 108, 116, 105, 45, 112, 97, 103, 101, 115, 32, 116, 105, 102, > 102, 32, 102, 105, 108, 101, 115, 32, 99, 97, 110, 32, 98, 101, 32, 108, > 111, 97, 100, 101, 100, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, > 32, 105, 110, 112, 117, 116, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 102, 105, 108, 101, > 110, 97, 109, 101, 46, 116, 105, 102, 44, 91, 102, 105, 114, 115, 116, 95, > 102, 114, 97, 109, 101, 44, 91, 108, 97, 115, 116, 95, 102, 114, 97, 109, > 101, 44, 91, 115, 116, 101, 112, 93, 93, 93, 39, 46, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 79, 117, 116, 112, 117, 116, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 32, 39, 102, 105, 108, 101, 110, 97, 109, > 101, 46, 116, 105, 102, 102, 44, 91, 100, 97, 116, 97, 116, 121, 112, 101, > 91, 44, 99, 111, 109, 112, 114, 101, 115, 115, 105, 111, 110, 93, 93, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 116, 111, 32, > 115, 112, 101, 99, 105, 102, 121, 32, 116, 104, 101, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 111, 117, 116, 112, 117, 116, 32, 112, 105, 120, 101, > 108, 32, 116, 121, 112, 101, 44, 32, 97, 115, 32, 119, 101, 108, 108, 32, > 97, 115, 32, 116, 104, 101, 32, 99, 111, 109, 112, 114, 101, 115, 115, 105, > 111, 110, 32, 109, 101, 116, 104, 111, 100, 46, 32, 39, 99, 111, 109, 112, > 114, 101, 115, 115, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 123, 32, 48, 61, 110, 111, 110, > 101, 32, 124, 32, 49, 61, 67, 67, 73, 84, 84, 82, 76, 69, 32, 124, > 32, 50, 61, 67, 67, 73, 84, 84, 52, 32, 124, 32, 51, 61, 67, 67, > 73, 84, 84, 54, 32, 124, 32, 52, 61, 76, 90, 87, 32, 124, 32, 53, > 61, 74, 80, 69, 71, 49, 32, 124, 32, 54, 61, 74, 80, 69, 71, 50, > 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 100, 97, 116, > 97, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 98, 111, 111, 108, 32, 124, 32, 117, 99, 104, 97, 114, 32, 124, 32, 99, > 104, 97, 114, 32, 124, 32, 117, 115, 104, 111, 114, 116, 32, 124, 32, 115, > 104, 111, 114, 116, 32, 124, 32, 117, 105, 110, 116, 32, 124, 32, 105, 110, > 116, 32, 124, 32, 117, 108, 111, 110, 103, 32, 124, 32, 108, 111, 110, 103, > 32, 124, 32, 102, 108, 111, 97, 116, 32, 124, 32, 100, 111, 117, 98, 108, > 101, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 103, 105, > 102, 32, 102, 105, 108, 101, 115, 58, 32, 65, 110, 105, 109, 97, 116, 101, > 100, 32, 103, 105, 102, 32, 102, 105, 108, 101, 115, 32, 99, 97, 110, 32, > 98, 101, 32, 115, 97, 118, 101, 100, 44, 32, 117, 115, 105, 110, 103, 32, > 116, 104, 101, 32, 105, 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 102, 105, > 108, 101, 110, 97, 109, 101, 46, 103, 105, 102, 44, 102, 112, 115, 44, 110, > 98, 95, 108, 111, 111, 112, 115, 39, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 83, 112, 101, 99, 105, 102, 121, 32, 39, 110, 98, 95, 108, 111, > 111, 112, 115, 61, 48, 39, 32, 116, 111, 32, 103, 101, 116, 32, 97, 110, > 32, 105, 110, 102, 105, 110, 105, 116, 101, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 97, 110, 105, 109, 97, 116, 105, 111, 110, 32, 108, 111, > 111, 112, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 106, 112, > 101, 103, 32, 102, 105, 108, 101, 115, 58, 32, 84, 104, 101, 32, 111, 117, > 116, 112, 117, 116, 32, 113, 117, 97, 108, 105, 116, 121, 32, 109, 97, 121, > 32, 98, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 40, 105, > 110, 32, 37, 41, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, > 111, 117, 116, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, > 110, 97, 109, 101, 46, 106, 112, 103, 44, 51, 48, 39, 32, 40, 104, 101, > 114, 101, 44, 32, 116, 111, 32, 103, 101, 116, 32, 97, 32, 51, 48, 37, > 32, 113, 117, 97, 108, 105, 116, 121, 32, 111, 117, 116, 112, 117, 116, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 109, 110, 99, 32, 102, > 105, 108, 101, 115, 58, 32, 84, 104, 101, 32, 111, 117, 116, 112, 117, 116, > 32, 104, 101, 97, 100, 101, 114, 32, 99, 97, 110, 32, 115, 101, 116, 32, > 102, 114, 111, 109, 32, 97, 110, 111, 116, 104, 101, 114, 32, 102, 105, 108, > 101, 44, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 111, 117, 116, > 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, 110, 97, 109, > 101, 46, 109, 110, 99, 44, 104, 101, 97, 100, 101, 114, 95, 116, 101, 109, > 112, 108, 97, 116, 101, 46, 109, 110, 99, 39, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 46, 112, 97, 110, 44, 32, 46, 99, 112, 112, 44, 32, > 46, 104, 112, 112, 44, 32, 46, 99, 32, 97, 110, 100, 32, 46, 104, 32, > 102, 105, 108, 101, 115, 58, 32, 84, 104, 101, 32, 111, 117, 116, 112, 117, > 116, 32, 100, 97, 116, 97, 116, 121, 112, 101, 32, 99, 97, 110, 32, 98, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 119, 105, 116, 104, 32, > 111, 117, 116, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 102, 105, 108, 101, > 110, 97, 109, 101, 91, 44, 100, 97, 116, 97, 116, 121, 112, 101, 93, 39, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 39, 100, 97, 116, 97, 116, > 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 98, 111, > 111, 108, 32, 124, 32, 117, 99, 104, 97, 114, 32, 124, 32, 99, 104, 97, > 114, 32, 124, 32, 117, 115, 104, 111, 114, 116, 32, 124, 32, 115, 104, 111, > 114, 116, 32, 124, 32, 117, 105, 110, 116, 32, 124, 32, 105, 110, 116, 32, > 124, 32, 117, 108, 111, 110, 103, 32, 124, 32, 108, 111, 110, 103, 32, 124, > 32, 102, 108, 111, 97, 116, 32, 124, 32, 100, 111, 117, 98, 108, 101, 32, > 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 46, 103, 109, 105, 99, > 32, 102, 105, 108, 101, 115, 58, 32, 84, 104, 101, 115, 101, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 115, 32, 97, 114, 101, 32, 97, 115, 115, 117, > 109, 101, 100, 32, 116, 111, 32, 98, 101, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, > 115, 32, 102, 105, 108, 101, 115, 46, 32, 76, 111, 97, 100, 105, 110, 103, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, 117, 99, 104, 32, 97, > 32, 102, 105, 108, 101, 32, 119, 105, 108, 108, 32, 97, 100, 100, 32, 116, > 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 105, 116, 32, 100, > 101, 102, 105, 110, 101, 115, 32, 116, 111, 32, 116, 104, 101, 32, 105, 110, > 116, 101, 114, 112, 114, 101, 116, 101, 114, 46, 32, 68, 101, 98, 117, 103, > 32, 105, 110, 102, 111, 115, 32, 99, 97, 110, 32, 98, 101, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 101, 110, 97, 98, 108, 101, 100, 47, 100, > 105, 115, 97, 98, 108, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 105, > 110, 112, 117, 116, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, > 39, 102, 105, 108, 101, 110, 97, 109, 101, 46, 103, 109, 105, 99, 44, 97, > 100, 100, 95, 100, 101, 98, 117, 103, 95, 105, 110, 102, 111, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 39, 46, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 73, 110, 115, 101, 114, 116, 105, 110, 103, 32, 39, 101, 120, > 116, 58, 39, 32, 111, 110, 32, 116, 104, 101, 32, 98, 101, 103, 105, 110, > 110, 105, 110, 103, 32, 111, 102, 32, 97, 32, 102, 105, 108, 101, 110, 97, > 109, 101, 32, 40, 101, 46, 103, 46, 32, 39, 106, 112, 103, 58, 102, 105, > 108, 101, 110, 97, 109, 101, 39, 41, 32, 102, 111, 114, 99, 101, 115, 32, > 71, 92, 52, 55, 77, 73, 67, 32, 116, 111, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 114, 101, 97, 100, 47, 119, 114, 105, 116, 101, 32, 116, > 104, 101, 32, 102, 105, 108, 101, 32, 97, 115, 32, 105, 116, 32, 119, 111, > 117, 108, 100, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 32, 100, 111, > 110, 101, 32, 105, 102, 32, 105, 116, 32, 104, 97, 100, 32, 116, 104, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, 116, 101, 110, > 115, 105, 111, 110, 46, 10, 92, 110, 32, 32, 45, 32, 83, 111, 109, 101, > 32, 105, 110, 112, 117, 116, 47, 111, 117, 116, 112, 117, 116, 32, 102, 111, > 114, 109, 97, 116, 115, 32, 97, 110, 100, 32, 111, 112, 116, 105, 111, 110, > 115, 32, 109, 97, 121, 32, 110, 111, 116, 32, 98, 101, 32, 115, 117, 112, > 112, 111, 114, 116, 101, 100, 32, 98, 121, 32, 121, 111, 117, 114, 32, 99, > 117, 114, 114, 101, 110, 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, > 102, 10, 92, 110, 32, 32, 32, 32, 32, 39, 103, 109, 105, 99, 39, 44, > 32, 100, 101, 112, 101, 110, 100, 105, 110, 103, 32, 111, 110, 32, 116, 104, > 101, 32, 99, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, > 102, 108, 97, 103, 115, 32, 115, 101, 116, 32, 102, 111, 114, 32, 116, 104, > 101, 32, 98, 117, 105, 108, 100, 32, 111, 102, 32, 116, 104, 101, 32, 39, > 103, 109, 105, 99, 39, 32, 98, 105, 110, 97, 114, 105, 101, 115, 46, 34, > 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, > 34, 83, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 32, 114, 117, > 108, 101, 115, 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, > 103, 114, 97, 112, 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, > 73, 67, 32, 105, 116, 101, 109, 115, 32, 99, 111, 110, 116, 97, 105, 110, > 105, 110, 103, 32, 39, 64, 39, 44, 32, 39, 36, 39, 32, 111, 114, 32, > 39, 123, 125, 39, 32, 109, 97, 121, 32, 98, 101, 32, 115, 117, 98, 115, > 116, 105, 116, 117, 116, 101, 100, 32, 98, 101, 102, 111, 114, 101, 32, 98, > 101, 105, 110, 103, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 100, > 46, 32, 85, 115, 101, 10, 92, 110, 32, 32, 32, 32, 32, 116, 104, 101, > 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 110, 103, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 98, 101, 108, 111, 119, 32, > 116, 111, 32, 97, 99, 99, 101, 115, 115, 32, 100, 97, 116, 97, 32, 102, > 114, 111, 109, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 112, 114, 101, > 116, 101, 114, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, 58, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 35, 39, 32, 105, 115, > 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, > 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, > 116, 104, 101, 32, 108, 105, 115, 116, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 64, 42, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, > 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 110, 117, 109, > 98, 101, 114, 32, 111, 102, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, > 32, 99, 112, 117, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 64, 46, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, > 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, > 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 64, 94, 39, 32, 105, 115, 32, 115, 117, 98, 115, > 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, > 117, 114, 114, 101, 110, 116, 32, 118, 101, 114, 98, 111, 115, 105, 116, 121, > 32, 108, 101, 118, 101, 108, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 39, 64, 37, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 112, 105, 100, 32, 111, > 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, > 111, 99, 101, 115, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, > 64, 124, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, > 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, > 116, 32, 118, 97, 108, 117, 101, 32, 40, 101, 120, 112, 114, 101, 115, 115, > 101, 100, 32, 105, 110, 32, 115, 101, 99, 111, 110, 100, 115, 41, 32, 111, > 102, 32, 97, 32, 109, 105, 108, 108, 105, 115, 101, 99, 111, 110, 100, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 112, 114, 101, 99, 105, 115, 105, > 111, 110, 32, 116, 105, 109, 101, 114, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 39, 64, 63, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, > 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 117, 114, > 114, 101, 110, 116, 32, 100, 97, 116, 97, 32, 116, 121, 112, 101, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 32, 112, 105, 120, 101, 108, 115, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 47, 39, 32, 105, 115, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, > 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 110, 117, 109, 98, 101, > 114, 32, 111, 102, 32, 108, 101, 118, 101, 108, 115, 32, 105, 110, 32, 116, > 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 115, 99, 111, 112, 101, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 47, 125, 39, > 32, 111, 114, 32, 39, 64, 123, 47, 44, 115, 117, 98, 115, 101, 116, 125, > 39, 32, 97, 114, 101, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, > 100, 32, 98, 121, 32, 116, 104, 101, 32, 99, 111, 110, 116, 101, 110, 116, > 32, 111, 102, 32, 116, 104, 101, 32, 103, 108, 111, 98, 97, 108, 32, 115, > 99, 111, 112, 101, 44, 32, 111, 114, 32, 97, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 115, 117, 98, 115, 101, 116, 32, 111, 102, 32, 105, 116, > 46, 32, 73, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, > 117, 98, 115, 101, 116, 32, 114, 101, 102, 101, 114, 115, 32, 116, 111, 32, > 109, 117, 108, 116, 105, 112, 108, 101, 32, 115, 99, 111, 112, 101, 32, 105, > 116, 101, 109, 115, 44, 32, 116, 104, 101, 121, 32, 97, 114, 101, 32, 115, > 101, 112, 97, 114, 97, 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 98, 121, 32, 115, 108, 97, 115, 104, 101, 115, 32, 39, 47, 39, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 62, 39, 32, 97, > 110, 100, 32, 39, 64, 60, 39, 32, 97, 114, 101, 32, 101, 113, 117, 105, > 118, 97, 108, 101, 110, 116, 46, 32, 84, 104, 101, 121, 32, 97, 114, 101, > 32, 98, 111, 116, 104, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, > 100, 32, 98, 121, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, > 111, 102, 32, 110, 101, 115, 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 39, 114, 101, 112, 101, 97, 116, 45, 100, 111, 110, 101, 39, > 32, 108, 111, 111, 112, 115, 32, 116, 104, 97, 116, 32, 97, 114, 101, 32, > 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, 114, 117, 110, 110, 105, 110, > 103, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 62, 125, > 39, 32, 111, 114, 32, 39, 64, 123, 62, 44, 115, 117, 98, 115, 101, 116, > 125, 39, 32, 97, 114, 101, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, > 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 105, 110, 100, 105, 99, 101, > 32, 118, 97, 108, 117, 101, 115, 32, 40, 111, 114, 32, 97, 32, 115, 117, > 98, 115, 101, 116, 32, 111, 102, 32, 116, 104, 101, 109, 41, 32, 111, 102, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 116, 104, 101, 32, 114, 117, > 110, 110, 105, 110, 103, 32, 39, 114, 101, 112, 101, 97, 116, 45, 100, 111, > 110, 101, 39, 32, 108, 111, 111, 112, 115, 44, 32, 101, 120, 112, 114, 101, > 115, 115, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, 97, 115, 99, 101, > 110, 100, 105, 110, 103, 32, 111, 114, 100, 101, 114, 44, 32, 115, 116, 97, > 114, 116, 105, 110, 103, 32, 102, 114, 111, 109, 32, 48, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 73, 102, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 117, 98, 115, 101, 116, 32, 114, 101, 102, 101, 114, > 115, 32, 116, 111, 32, 109, 117, 108, 116, 105, 112, 108, 101, 32, 105, 110, > 100, 105, 99, 101, 115, 44, 32, 116, 104, 101, 121, 32, 97, 114, 101, 32, > 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, > 109, 97, 115, 32, 39, 44, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 64, 123, 60, 125, 39, 32, 111, 114, 32, 39, 64, 123, 60, 44, > 115, 117, 98, 115, 101, 116, 125, 39, 32, 100, 111, 32, 116, 104, 101, 32, > 115, 97, 109, 101, 32, 98, 117, 116, 32, 105, 110, 32, 100, 101, 115, 99, > 101, 110, 100, 105, 110, 103, 32, 111, 114, 100, 101, 114, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 39, 64, 105, 110, 100, 105, 99, 101, 39, 32, > 111, 114, 32, 39, 64, 123, 105, 110, 100, 105, 99, 101, 44, 102, 101, 97, > 116, 117, 114, 101, 125, 39, 32, 97, 114, 101, 32, 115, 117, 98, 115, 116, > 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 108, 105, > 115, 116, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, > 101, 115, 32, 111, 102, 32, 116, 104, 101, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 105, 109, 97, 103, 101, 32, 91, 105, 110, 100, 105, 99, 101, > 93, 32, 40, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, > 99, 111, 109, 109, 97, 115, 41, 44, 32, 111, 114, 32, 98, 121, 32, 97, > 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 102, 101, 97, 116, 117, 114, > 101, 32, 40, 111, 114, 32, 115, 117, 98, 115, 101, 116, 41, 32, 111, 102, > 32, 105, 116, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 39, 105, > 110, 100, 105, 99, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 97, 110, > 32, 105, 110, 100, 105, 99, 101, 32, 111, 114, 32, 97, 110, 32, 105, 109, > 97, 103, 101, 32, 110, 97, 109, 101, 46, 32, 82, 101, 113, 117, 101, 115, > 116, 101, 100, 32, 39, 102, 101, 97, 116, 117, 114, 101, 100, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 111, 110, 101, 32, 111, 102, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, 39, 58, 32, > 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, 104, 32, 40, 110, 117, 109, > 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 99, 111, 108, > 117, 109, 110, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 104, 39, 58, 32, 105, 109, 97, 103, 101, 32, 104, > 101, 105, 103, 104, 116, 32, 40, 110, 117, 109, 98, 101, 114, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 32, 114, 111, 119, 115, 41, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 100, 39, 58, 32, > 105, 109, 97, 103, 101, 32, 100, 101, 112, 116, 104, 32, 40, 110, 117, 109, > 98, 101, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 115, 108, 105, > 99, 101, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 115, 39, 58, 32, 105, 109, 97, 103, 101, 32, 115, 112, > 101, 99, 116, 114, 117, 109, 32, 40, 110, 117, 109, 98, 101, 114, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 32, 99, 104, 97, 110, 110, 101, 108, 115, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 119, 104, 39, 58, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, > 104, 32, 120, 32, 105, 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 119, 104, 100, 39, 58, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, > 104, 32, 120, 32, 105, 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, > 32, 120, 32, 105, 109, 97, 103, 101, 32, 100, 101, 112, 116, 104, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, 104, > 100, 115, 39, 58, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, 104, > 32, 120, 32, 105, 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, 32, > 120, 32, 105, 109, 97, 103, 101, 32, 100, 101, 112, 116, 104, 32, 120, 32, > 105, 109, 97, 103, 101, 32, 115, 112, 101, 99, 116, 114, 117, 109, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 40, 105, 46, 101, 46, 32, 110, 117, 109, 98, 101, > 114, 32, 111, 102, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 116, > 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, > 103, 101, 44, 32, 101, 113, 46, 32, 116, 111, 32, 39, 35, 39, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 114, > 39, 58, 32, 105, 109, 97, 103, 101, 32, 115, 104, 97, 114, 101, 100, 32, > 115, 116, 97, 116, 101, 32, 40, 49, 44, 32, 105, 102, 32, 116, 104, 101, > 32, 112, 105, 120, 101, 108, 32, 98, 117, 102, 102, 101, 114, 32, 105, 115, > 32, 115, 104, 97, 114, 101, 100, 44, 32, 48, 32, 111, 116, 104, 101, 114, > 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 110, 39, 58, 32, 105, 109, 97, 103, 101, 32, 110, > 97, 109, 101, 32, 111, 114, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, > 40, 105, 102, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 104, 97, > 115, 32, 98, 101, 101, 110, 32, 114, 101, 97, 100, 32, 102, 114, 111, 109, > 32, 97, 32, 102, 105, 108, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 98, 39, 58, 32, 105, 109, 97, 103, > 101, 32, 98, 97, 115, 101, 110, 97, 109, 101, 32, 40, 105, 46, 101, 46, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 119, 105, 116, 104, 111, 117, > 116, 32, 116, 104, 101, 32, 102, 111, 108, 100, 101, 114, 32, 112, 97, 116, > 104, 32, 110, 111, 114, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 120, 39, 58, 32, 105, 109, 97, 103, 101, 32, 101, 120, 116, 101, 110, 115, > 105, 111, 110, 32, 40, 105, 46, 101, 32, 108, 97, 115, 116, 32, 99, 104, > 97, 114, 97, 99, 116, 101, 114, 115, 32, 97, 102, 116, 101, 114, 32, 116, > 104, 101, 32, 108, 97, 115, 116, 32, 39, 46, 39, 32, 105, 110, 32, 116, > 104, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, 41, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 102, 39, 58, 32, > 105, 109, 97, 103, 101, 32, 102, 111, 108, 100, 101, 114, 32, 110, 97, 109, > 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 35, 39, 58, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 32, 118, 97, 108, 117, 101, 115, 32, 40, 105, 46, 101, > 46, 32, 119, 105, 100, 116, 104, 32, 120, 32, 104, 101, 105, 103, 104, 116, > 32, 120, 32, 100, 101, 112, 116, 104, 32, 120, 32, 115, 112, 101, 99, 116, > 114, 117, 109, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 43, 39, 58, 32, 115, 117, 109, 32, 111, 102, 32, 97, > 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 45, > 39, 58, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, > 32, 97, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, > 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 42, 39, 58, 32, 112, 114, 111, 100, 117, 99, 116, 32, 111, 102, 32, > 97, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 47, 39, 58, 32, 113, 117, 111, 116, 105, 101, 110, 116, 32, 111, 102, 32, > 97, 108, 108, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 109, 39, 58, 32, 109, 105, 110, 105, 109, 117, 109, 32, 112, 105, 120, 101, > 108, 32, 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 39, 77, 39, 58, 32, 109, 97, 120, 105, 109, > 117, 109, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 97, 39, > 58, 32, 97, 118, 101, 114, 97, 103, 101, 32, 112, 105, 120, 101, 108, 32, > 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 118, 39, 58, 32, 118, 97, 114, 105, 97, 110, 99, > 101, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, > 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 116, 39, 58, 32, 116, 101, 120, 116, 32, 115, 116, 114, 105, 110, 103, > 32, 98, 117, 105, 108, 116, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 118, 97, 108, 117, 101, 115, 44, 32, 114, 101, > 103, 97, 114, 100, 101, 100, 32, 97, 115, 32, 97, 115, 99, 105, 105, 32, > 99, 111, 100, 101, 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 99, 39, 58, 32, 40, 120, 44, 121, 44, 122, 44, > 99, 41, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, 111, > 102, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 117, 109, 32, 118, 97, > 108, 117, 101, 44, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, > 121, 32, 99, 111, 109, 109, 97, 115, 32, 39, 44, 39, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 67, 39, 58, 32, > 40, 120, 44, 121, 44, 122, 44, 99, 41, 32, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 109, 97, 120, > 105, 109, 117, 109, 32, 118, 97, 108, 117, 101, 44, 32, 115, 101, 112, 97, > 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, 109, 97, 115, 32, > 39, 44, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 46, 32, 39, 40, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, > 122, 91, 37, 93, 44, 95, 99, 91, 37, 93, 44, 95, 98, 111, 117, 110, > 100, 97, 114, 121, 41, 39, 58, 32, 112, 105, 120, 101, 108, 32, 118, 97, > 108, 117, 101, 32, 97, 116, 32, 40, 120, 91, 37, 93, 44, 121, 91, 37, > 93, 44, 122, 91, 37, 93, 44, 99, 91, 37, 93, 41, 44, 32, 119, 105, > 116, 104, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 111, 117, 110, 100, > 97, 114, 121, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 65, 110, 121, 32, 111, 116, 104, 101, 114, 32, > 39, 102, 101, 97, 116, 117, 114, 101, 39, 32, 105, 115, 32, 99, 111, 110, > 115, 105, 100, 101, 114, 101, 100, 32, 101, 105, 116, 104, 101, 114, 32, 97, > 115, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 117, > 98, 115, 101, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 118, 97, > 108, 117, 101, 115, 44, 32, 111, 114, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 97, 115, 32, 97, 32, 109, 97, 116, 104, > 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 32, 116, 111, 32, 101, 118, 97, 108, 117, 97, 116, 101, 32, > 40, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 116, 111, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70, 111, > 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 44, 32, 39, 64, 123, 45, > 49, 44, 48, 45, 53, 48, 37, 125, 39, 32, 105, 115, 32, 115, 117, 98, > 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, > 115, 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, 32, 110, 117, 109, 101, > 114, 105, 99, 97, 108, 32, 118, 97, 108, 117, 101, 115, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 109, 105, 110, > 103, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, > 32, 104, 97, 108, 102, 32, 100, 97, 116, 97, 32, 111, 102, 32, 116, 104, > 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 44, 32, 115, 101, > 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, 109, 97, > 115, 32, 39, 44, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, > 39, 64, 123, 48, 44, 119, 43, 104, 125, 39, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, > 32, 115, 117, 109, 32, 111, 102, 32, 116, 104, 101, 32, 119, 105, 100, 116, > 104, 32, 97, 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 111, 102, 32, > 116, 104, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 102, 105, 114, 115, 116, 32, 105, 109, 97, 103, 101, 46, 10, 92, > 110, 32, 32, 32, 32, 46, 32, 39, 64, 33, 39, 32, 105, 115, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, > 101, 32, 118, 105, 115, 105, 98, 105, 108, 105, 116, 121, 32, 115, 116, 97, > 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, > 116, 32, 100, 105, 115, 112, 108, 97, 121, 32, 119, 105, 110, 100, 111, 119, > 32, 91, 48, 93, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 40, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 99, 108, 111, 115, 101, 100, > 32, 124, 32, 49, 61, 118, 105, 115, 105, 98, 108, 101, 32, 125, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 33, 44, 102, 101, > 97, 116, 117, 114, 101, 125, 39, 32, 111, 114, 32, 39, 64, 123, 33, 105, > 110, 100, 105, 99, 101, 44, 102, 101, 97, 116, 117, 114, 101, 125, 39, 32, > 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, > 121, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, 102, 101, 97, > 116, 117, 114, 101, 32, 111, 102, 32, 116, 104, 101, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 105, 110, 115, 116, 97, 110, 116, 32, 100, 105, 115, > 112, 108, 97, 121, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, > 40, 111, 114, 32, 91, 105, 110, 100, 105, 99, 101, 93, 44, 32, 105, 102, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 41, 46, 32, 82, 101, 113, > 117, 101, 115, 116, 101, 100, 32, 39, 102, 101, 97, 116, 117, 114, 101, 39, > 32, 99, 97, 110, 32, 98, 101, 58, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 39, 119, 39, 58, 32, 100, 105, 115, 112, 108, > 97, 121, 32, 119, 105, 100, 116, 104, 32, 40, 105, 46, 101, 46, 32, 119, > 105, 100, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, 100, 105, 115, 112, > 108, 97, 121, 32, 97, 114, 101, 97, 32, 109, 97, 110, 97, 103, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 104, > 39, 58, 32, 100, 105, 115, 112, 108, 97, 121, 32, 104, 101, 105, 103, 104, > 116, 32, 40, 105, 46, 101, 46, 32, 104, 101, 105, 103, 104, 116, 32, 111, > 102, 32, 116, 104, 101, 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, 114, > 101, 97, 32, 109, 97, 110, 97, 103, 101, 100, 32, 98, 121, 32, 116, 104, > 101, 32, 119, 105, 110, 100, 111, 119, 41, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, 104, 39, 58, 32, 100, 105, > 115, 112, 108, 97, 121, 32, 119, 105, 100, 116, 104, 32, 120, 32, 100, 105, > 115, 112, 108, 97, 121, 32, 104, 101, 105, 103, 104, 116, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 100, 39, 58, 32, > 119, 105, 110, 100, 111, 119, 32, 119, 105, 100, 116, 104, 32, 40, 105, 46, > 101, 46, 32, 119, 105, 100, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, > 119, 105, 110, 100, 111, 119, 32, 119, 105, 100, 103, 101, 116, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 101, 39, > 58, 32, 119, 105, 110, 100, 111, 119, 32, 104, 101, 105, 103, 104, 116, 32, > 40, 105, 46, 101, 46, 32, 104, 101, 105, 103, 104, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, 100, 103, 101, > 116, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, > 32, 39, 100, 101, 39, 58, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, > 100, 116, 104, 32, 120, 32, 119, 105, 110, 100, 111, 119, 32, 104, 101, 105, > 103, 104, 116, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 46, 32, 39, 117, 39, 58, 32, 115, 99, 114, 101, 101, 110, 32, 119, 105, > 100, 116, 104, 32, 40, 97, 99, 116, 117, 97, 108, 108, 121, 32, 105, 110, > 100, 101, 112, 101, 110, 100, 101, 110, 116, 32, 111, 110, 32, 116, 104, 101, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 39, 32, 118, 39, 58, > 32, 115, 99, 114, 101, 101, 110, 32, 104, 101, 105, 103, 104, 116, 32, 40, > 97, 99, 116, 117, 97, 108, 108, 121, 32, 105, 110, 100, 101, 112, 101, 110, > 100, 101, 110, 116, 32, 111, 110, 32, 116, 104, 101, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 117, 118, 39, 58, 32, 115, 99, 114, > 101, 101, 110, 32, 119, 105, 100, 116, 104, 32, 120, 32, 115, 99, 114, 101, > 101, 110, 32, 104, 101, 105, 103, 104, 116, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 120, 39, 58, 32, 88, 45, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 109, 111, 117, 115, 101, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, > 40, 111, 114, 32, 45, 49, 44, 32, 105, 102, 32, 111, 117, 116, 115, 105, > 100, 101, 32, 116, 104, 101, 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, > 114, 101, 97, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 121, 39, 58, 32, 89, 45, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 117, 115, > 101, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 111, 114, 32, 45, > 49, 44, 32, 105, 102, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, > 101, 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, 114, 101, 97, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 98, > 39, 58, 32, 115, 116, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, 123, 32, > 49, 61, 108, 101, 102, 116, 45, 98, 117, 116, 46, 32, 124, 32, 50, 61, > 114, 105, 103, 104, 116, 45, 98, 117, 116, 46, 32, 124, 32, 52, 61, 109, > 105, 100, 100, 108, 101, 45, 98, 117, 116, 46, 32, 125, 46, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 111, 39, 58, 32, > 115, 116, 97, 116, 101, 32, 111, 102, 32, 116, 104, 101, 32, 109, 111, 117, > 115, 101, 32, 119, 104, 101, 101, 108, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 107, 39, 58, 32, 100, 101, 99, 105, > 109, 97, 108, 32, 99, 111, 100, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 112, 114, 101, 115, 115, 101, 100, 32, 107, 101, 121, 32, 105, 102, 32, 97, > 110, 121, 44, 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 110, > 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, 32, 111, 102, > 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 100, 105, 115, > 112, 108, 97, 121, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 99, 39, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 40, 48, 32, 111, 114, 32, 49, 41, 32, 116, 101, 108, 108, 105, 110, 103, > 32, 105, 102, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, > 100, 105, 115, 112, 108, 97, 121, 32, 104, 97, 115, 32, 98, 101, 101, 110, > 32, 99, 108, 111, 115, 101, 100, 32, 114, 101, 99, 101, 110, 116, 108, 121, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 114, 39, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, 116, 101, 108, 108, > 105, 110, 103, 32, 105, 102, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, > 110, 116, 32, 100, 105, 115, 112, 108, 97, 121, 32, 104, 97, 115, 32, 98, > 101, 101, 110, 32, 114, 101, 115, 105, 122, 101, 100, 32, 114, 101, 99, 101, > 110, 116, 108, 121, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 109, 39, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 116, 101, 108, 108, 105, 110, 103, 32, 105, 102, 32, 116, 104, 101, 32, 105, > 110, 115, 116, 97, 110, 116, 32, 100, 105, 115, 112, 108, 97, 121, 32, 104, > 97, 115, 32, 98, 101, 101, 110, 32, 109, 111, 118, 101, 100, 32, 114, 101, > 99, 101, 110, 116, 108, 121, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 46, 32, 65, 110, 121, 32, 111, 116, 104, 101, 114, 32, 39, > 102, 101, 97, 116, 117, 114, 101, 39, 32, 115, 116, 97, 110, 100, 115, 32, > 102, 111, 114, 32, 97, 32, 107, 101, 121, 99, 111, 100, 101, 32, 110, 97, > 109, 101, 32, 105, 110, 32, 99, 97, 112, 105, 116, 97, 108, 32, 108, 101, > 116, 116, 101, 114, 115, 44, 32, 97, 110, 100, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 45, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 100, 101, 115, 99, 114, 105, 98, 105, 110, > 103, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 107, 101, > 121, 32, 115, 116, 97, 116, 101, 32, 123, 32, 48, 61, 112, 114, 101, 115, > 115, 101, 100, 32, 124, 32, 49, 61, 114, 101, 108, 101, 97, 115, 101, 100, > 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 64, 123, 92, > 34, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, 92, 34, 125, > 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 115, 116, 97, 116, 117, 115, 32, 118, > 97, 108, 117, 101, 32, 115, 101, 116, 32, 98, 121, 32, 116, 104, 101, 32, > 101, 120, 101, 99, 117, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, > 32, 40, 115, 101, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 115, 116, 97, 116, 117, 115, 39, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 64, 123, > 125, 39, 32, 115, 116, 97, 110, 100, 115, 32, 116, 104, 117, 115, 32, 102, > 111, 114, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 115, > 116, 97, 116, 117, 115, 32, 118, 97, 108, 117, 101, 46, 10, 92, 110, 32, > 32, 45, 32, 39, 36, 110, 97, 109, 101, 39, 32, 97, 110, 100, 32, 39, > 36, 123, 110, 97, 109, 101, 125, 39, 32, 97, 114, 101, 32, 98, 111, 116, > 104, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 110, 97, 109, 101, > 100, 32, 118, 97, 114, 105, 97, 98, 108, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 40, 115, 101, 116, 32, 112, 114, 101, 118, 105, 111, 117, 115, 108, > 121, 32, 98, 121, 32, 105, 116, 101, 109, 32, 39, 110, 97, 109, 101, 61, > 118, 97, 108, 117, 101, 39, 41, 44, 32, 111, 114, 32, 98, 121, 32, 116, > 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 111, 115, 105, 116, > 105, 118, 101, 32, 105, 110, 100, 105, 99, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 110, 97, 109, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 105, > 109, 97, 103, 101, 32, 39, 91, 110, 97, 109, 101, 93, 39, 44, 32, 111, > 114, 32, 98, 121, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 110, 97, 109, 101, 100, 32, 79, 83, 32, 101, > 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, 32, 118, 97, 114, 105, 97, > 98, 108, 101, 32, 40, 105, 110, 32, 116, 104, 105, 115, 32, 111, 114, 100, > 101, 114, 41, 46, 10, 92, 110, 32, 32, 45, 32, 39, 36, 62, 39, 32, > 97, 110, 100, 32, 39, 36, 60, 39, 32, 40, 114, 101, 115, 112, 46, 32, > 39, 36, 123, 62, 125, 39, 32, 97, 110, 100, 32, 39, 36, 123, 60, 125, > 39, 41, 32, 97, 114, 101, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, > 32, 114, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, 121, 32, 102, 111, > 114, 32, 39, 64, 123, 62, 44, 45, 49, 125, 39, 32, 97, 110, 100, 10, > 92, 110, 32, 32, 32, 32, 32, 39, 64, 123, 60, 44, 45, 49, 125, 39, > 46, 32, 84, 104, 101, 121, 32, 114, 101, 102, 101, 114, 32, 116, 111, 32, > 116, 104, 101, 32, 105, 110, 99, 114, 101, 97, 115, 105, 110, 103, 47, 100, > 101, 99, 114, 101, 97, 115, 105, 110, 103, 32, 105, 110, 100, 105, 99, 101, > 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 40, > 99, 117, 114, 114, 101, 110, 116, 108, 121, 10, 92, 110, 32, 32, 32, 32, > 32, 114, 117, 110, 110, 105, 110, 103, 41, 32, 39, 114, 101, 112, 101, 97, > 116, 46, 46, 100, 111, 110, 101, 39, 32, 108, 111, 111, 112, 46, 10, 92, > 110, 32, 32, 45, 32, 65, 110, 121, 32, 111, 116, 104, 101, 114, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 105, 110, 115, 105, 100, 101, > 32, 98, 114, 97, 99, 101, 115, 32, 40, 97, 115, 32, 105, 110, 32, 39, > 123, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 125, 39, 41, 32, 105, > 115, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 32, 97, 115, 32, > 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 92, > 110, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 44, 32, 97, 110, 100, 32, 105, 115, 32, 101, 118, 97, 108, 117, 97, 116, > 101, 100, 44, 32, 101, 120, 99, 101, 112, 116, 32, 102, 111, 114, 32, 116, > 104, 101, 32, 116, 104, 114, 101, 101, 32, 102, 111, 108, 108, 111, 119, 105, > 110, 103, 32, 99, 97, 115, 101, 115, 58, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 73, 102, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, > 115, 116, 97, 114, 116, 115, 32, 97, 110, 100, 32, 101, 110, 100, 115, 32, > 98, 121, 32, 115, 105, 110, 103, 108, 101, 32, 113, 117, 111, 116, 101, 115, > 44, 32, 105, 116, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 115, 101, 113, 117, 101, > 110, 99, 101, 32, 111, 102, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 97, 115, 99, 105, 105, 32, 99, 111, 100, 101, 115, 32, 116, 104, 97, 116, > 32, 99, 111, 109, 112, 111, 115, 101, 115, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 44, 32, > 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, > 109, 97, 115, 32, 39, 44, 39, 46, 32, 70, 111, 114, 32, 105, 110, 115, > 116, 97, 110, 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 105, 116, 101, 109, 32, 39, 123, 39, 102, 111, 111, 39, 125, 39, 32, 105, > 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 39, 49, 48, 50, 44, 49, 49, 49, 44, 49, 49, 49, 39, 46, 10, > 92, 110, 32, 32, 32, 32, 46, 32, 73, 102, 32, 101, 120, 112, 114, 101, > 115, 115, 105, 111, 110, 32, 115, 116, 97, 114, 116, 115, 32, 97, 110, 100, > 32, 101, 110, 100, 115, 32, 119, 105, 116, 104, 32, 98, 97, 99, 107, 113, > 117, 111, 116, 101, 115, 32, 39, 96, 39, 44, 32, 105, 116, 32, 105, 115, > 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, > 116, 104, 101, 32, 115, 116, 114, 105, 110, 103, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 119, 104, 111, 115, 101, 32, 97, 115, 99, 105, 105, 32, > 99, 111, 100, 101, 115, 32, 97, 114, 101, 32, 103, 105, 118, 101, 110, 32, > 98, 121, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, 111, 102, 32, 118, > 97, 108, 117, 101, 115, 32, 105, 110, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 116, 104, 101, 32, 98, 97, 99, 107, 113, 117, 111, 116, 101, 115, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, 111, 114, 32, 105, 110, > 115, 116, 97, 110, 99, 101, 44, 32, 105, 116, 101, 109, 32, 39, 123, 96, > 49, 48, 50, 44, 49, 49, 49, 44, 49, 49, 49, 96, 125, 39, 32, 105, > 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 39, 102, 111, 111, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 73, 102, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 99, 111, > 110, 116, 97, 105, 110, 115, 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, > 39, 39, 61, 61, 39, 39, 32, 111, 114, 32, 39, 39, 33, 61, 39, 39, > 44, 32, 105, 116, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 32, 98, 121, 32, 48, 32, 111, 114, 32, 49, 44, 32, 119, > 104, 101, 116, 104, 101, 114, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 116, 104, 101, 32, 115, 116, 114, 105, 110, 103, 115, 32, 98, 101, 115, 105, > 100, 101, 32, 116, 104, 101, 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, > 97, 114, 101, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 111, 114, 32, > 110, 111, 116, 32, 40, 99, 97, 115, 101, 45, 115, 101, 110, 115, 105, 116, > 105, 118, 101, 41, 46, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, > 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 98, 111, 116, > 104, 32, 105, 116, 101, 109, 115, 32, 39, 123, 102, 111, 111, 39, 61, 61, > 39, 102, 111, 111, 125, 39, 32, 97, 110, 100, 32, 39, 123, 102, 111, 111, > 39, 33, 61, 39, 70, 79, 79, 125, 39, 32, 97, 114, 101, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 39, 49, 39, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 73, 102, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 32, 115, 116, 97, 114, 116, 115, 32, 119, > 105, 116, 104, 32, 97, 110, 32, 117, 110, 100, 101, 114, 115, 99, 111, 114, > 101, 32, 39, 95, 39, 44, 32, 105, 116, 32, 105, 115, 32, 115, 117, 98, > 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 101, 118, 97, 108, 117, 97, 116, 105, 111, 110, > 32, 111, 102, 32, 116, 104, 101, 32, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 44, 32, 116, 114, 117, 110, 99, 97, 116, 101, 100, 32, 116, 111, > 32, 97, 32, 114, 101, 97, 100, 97, 98, 108, 101, 32, 102, 111, 114, 109, > 97, 116, 46, 10, 92, 110, 32, 32, 45, 32, 73, 116, 101, 109, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 32, 105, 115, 32, 110, > 101, 118, 101, 114, 32, 100, 111, 110, 101, 32, 105, 110, 32, 105, 116, 101, > 109, 115, 32, 98, 101, 116, 119, 101, 101, 110, 32, 100, 111, 117, 98, 108, > 101, 32, 113, 117, 111, 116, 101, 115, 46, 32, 79, 110, 101, 32, 109, 117, > 115, 116, 32, 98, 114, 101, 97, 107, 32, 116, 104, 101, 32, 113, 117, 111, > 116, 101, 115, 10, 92, 110, 32, 32, 32, 32, 116, 111, 32, 101, 110, 97, > 98, 108, 101, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, > 32, 105, 102, 32, 110, 101, 101, 100, 101, 100, 44, 32, 97, 115, 32, 105, > 110, 32, 92, 34, 51, 43, 56, 32, 107, 103, 32, 61, 32, 92, 34, 123, > 51, 43, 56, 125, 92, 34, 32, 107, 103, 92, 34, 46, 32, 85, 115, 105, > 110, 103, 32, 100, 111, 117, 98, 108, 101, 32, 113, 117, 111, 116, 101, 115, > 10, 92, 110, 32, 32, 32, 32, 105, 115, 32, 116, 104, 101, 110, 32, 97, > 32, 99, 111, 110, 118, 101, 110, 105, 101, 110, 116, 32, 119, 97, 121, 32, > 116, 111, 32, 100, 105, 115, 97, 98, 108, 101, 32, 116, 104, 101, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 115, 32, 109, 101, 99, > 104, 97, 110, 105, 115, 109, 32, 105, 110, 32, 105, 116, 101, 109, 115, 44, > 32, 119, 104, 101, 110, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, 46, > 10, 92, 110, 32, 32, 45, 32, 79, 110, 101, 32, 99, 97, 110, 32, 97, > 108, 115, 111, 32, 100, 105, 115, 97, 98, 108, 101, 32, 116, 104, 101, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 32, 109, 101, 99, > 104, 97, 110, 105, 115, 109, 32, 111, 110, 32, 105, 116, 101, 109, 115, 32, > 111, 117, 116, 115, 105, 100, 101, 32, 100, 111, 117, 98, 108, 101, 32, 113, > 117, 111, 116, 101, 115, 44, 32, 98, 121, 10, 92, 110, 32, 32, 32, 32, > 32, 101, 115, 99, 97, 112, 105, 110, 103, 32, 116, 104, 101, 32, 39, 64, > 39, 44, 39, 123, 39, 44, 39, 125, 39, 32, 111, 114, 32, 39, 36, 39, > 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 44, 32, 97, 115, 32, > 105, 110, 32, 39, 92, 92, 123, 51, 43, 52, 92, 92, 125, 92, 92, 32, > 100, 111, 101, 115, 110, 92, 52, 55, 116, 92, 92, 32, 101, 118, 97, 108, > 117, 97, 116, 101, 39, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, > 101, 99, 116, 105, 111, 110, 32, 34, 77, 97, 116, 104, 101, 109, 97, 116, > 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, > 34, 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, > 112, 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 104, 97, 115, 32, 97, 110, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, 114, > 115, 101, 114, 46, 32, 73, 116, 32, 105, 115, 32, 117, 115, 101, 100, 32, > 116, 111, 32, 101, 118, 97, 108, 117, 97, 116, 101, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 115, 32, 105, 110, 115, 105, 100, 101, 10, 92, > 110, 32, 32, 32, 32, 32, 98, 114, 97, 99, 101, 115, 32, 39, 123, 125, > 39, 44, 32, 111, 114, 32, 102, 111, 114, 109, 117, 108, 97, 115, 32, 105, > 110, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 116, 104, 97, 116, 32, > 109, 97, 121, 32, 116, 97, 107, 101, 32, 111, 110, 101, 32, 97, 115, 32, > 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 40, 101, 46, 103, > 46, 32, 39, 45, 102, 105, 108, 108, 39, 41, 46, 10, 92, 110, 32, 32, > 45, 32, 87, 104, 101, 110, 32, 117, 115, 101, 100, 32, 105, 110, 32, 99, > 111, 109, 109, 97, 110, 100, 115, 44, 32, 97, 32, 102, 111, 114, 109, 117, > 108, 97, 32, 105, 115, 32, 101, 118, 97, 108, 117, 97, 116, 101, 100, 32, > 102, 111, 114, 32, 101, 97, 99, 104, 32, 112, 105, 120, 101, 108, 32, 111, > 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 92, 110, 32, 32, 45, 32, 84, 104, 101, > 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, > 114, 115, 101, 114, 32, 117, 110, 100, 101, 114, 115, 116, 97, 110, 100, 115, > 32, 116, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 115, > 101, 116, 32, 111, 102, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 44, > 32, 111, 112, 101, 114, 97, 116, 111, 114, 115, 32, 97, 110, 100, 32, 118, > 97, 114, 105, 97, 98, 108, 101, 115, 58, 10, 92, 110, 32, 32, 32, 32, > 95, 32, 85, 115, 117, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, 114, > 115, 58, 32, 124, 124, 32, 40, 108, 111, 103, 105, 99, 97, 108, 32, 111, > 114, 41, 44, 32, 38, 38, 32, 40, 108, 111, 103, 105, 99, 97, 108, 32, > 97, 110, 100, 41, 44, 32, 124, 32, 40, 98, 105, 116, 119, 105, 115, 101, > 32, 111, 114, 41, 44, 32, 38, 32, 40, 98, 105, 116, 119, 105, 115, 101, > 32, 97, 110, 100, 41, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 33, 61, 44, 32, 61, 61, 44, 32, 60, 61, 44, 32, 62, 61, 44, 32, > 60, 44, 32, 62, 44, 32, 60, 60, 32, 40, 108, 101, 102, 116, 32, 98, > 105, 116, 119, 105, 115, 101, 32, 115, 104, 105, 102, 116, 41, 44, 32, 62, > 62, 32, 40, 114, 105, 103, 104, 116, 32, 98, 105, 116, 119, 105, 115, 101, > 32, 115, 104, 105, 102, 116, 41, 44, 32, 45, 44, 32, 43, 44, 32, 42, > 44, 32, 47, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 37, 32, > 40, 109, 111, 100, 117, 108, 111, 41, 44, 32, 94, 32, 40, 112, 111, 119, > 101, 114, 41, 44, 32, 33, 32, 40, 108, 111, 103, 105, 99, 97, 108, 32, > 110, 111, 116, 41, 44, 32, 126, 32, 40, 98, 105, 116, 119, 105, 115, 101, > 32, 110, 111, 116, 41, 46, 10, 92, 110, 32, 32, 32, 32, 95, 32, 85, > 115, 117, 97, 108, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 58, 32, > 115, 105, 110, 40, 41, 44, 32, 99, 111, 115, 40, 41, 44, 32, 116, 97, > 110, 40, 41, 44, 32, 97, 115, 105, 110, 40, 41, 44, 32, 97, 99, 111, > 115, 40, 41, 44, 32, 97, 116, 97, 110, 40, 41, 44, 32, 115, 105, 110, > 104, 40, 41, 44, 32, 99, 111, 115, 104, 40, 41, 44, 32, 116, 97, 110, > 104, 40, 41, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 108, 111, > 103, 40, 41, 44, 32, 108, 111, 103, 50, 40, 41, 44, 32, 108, 111, 103, > 49, 48, 40, 41, 44, 32, 101, 120, 112, 40, 41, 44, 32, 115, 105, 103, > 110, 40, 41, 44, 32, 97, 98, 115, 40, 41, 44, 32, 97, 116, 97, 110, > 50, 40, 41, 44, 32, 114, 111, 117, 110, 100, 40, 41, 44, 32, 110, 97, > 114, 103, 40, 41, 44, 32, 97, 114, 103, 40, 41, 44, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 105, 115, 118, 97, 108, 40, 41, 44, 32, 105, > 115, 110, 97, 110, 40, 41, 44, 32, 105, 115, 105, 110, 102, 40, 41, 44, > 32, 105, 115, 105, 110, 116, 40, 41, 44, 32, 105, 115, 98, 111, 111, 108, > 40, 41, 44, 32, 114, 111, 108, 40, 41, 32, 40, 108, 101, 102, 116, 32, > 98, 105, 116, 32, 114, 111, 116, 97, 116, 105, 111, 110, 41, 44, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 114, 111, 114, 40, 41, 32, 40, 114, > 105, 103, 104, 116, 32, 98, 105, 116, 32, 114, 111, 116, 97, 116, 105, 111, > 110, 41, 44, 32, 109, 105, 110, 40, 41, 44, 32, 109, 97, 120, 40, 41, > 44, 32, 109, 101, 100, 40, 41, 44, 32, 107, 116, 104, 40, 41, 44, 32, > 115, 105, 110, 99, 40, 41, 44, 32, 105, 110, 116, 40, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 70, 117, 110, 99, 116, 105, 111, 110, > 32, 39, 97, 116, 97, 110, 50, 40, 41, 39, 32, 105, 115, 32, 116, 104, > 101, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 97, 116, 97, > 110, 40, 41, 32, 119, 105, 116, 104, 32, 116, 119, 111, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 39, 121, 44, 120, 39, 32, 40, 97, 115, > 32, 105, 110, 32, 67, 47, 67, 43, 43, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 70, 117, 110, 99, 116, 105, 111, 110, 32, 39, 110, > 97, 114, 103, 40, 41, 39, 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, > 104, 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, 117, 110, 99, 116, > 105, 111, 110, 32, 39, 97, 114, 103, 40, 105, 44, 97, 95, 49, 44, 46, > 46, 44, 97, 95, 110, 41, 39, 32, 114, 101, 116, 117, 114, 110, 115, 32, > 116, 104, 101, 32, 105, 116, 104, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 97, 95, 105, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, > 117, 110, 99, 116, 105, 111, 110, 115, 32, 39, 109, 105, 110, 40, 41, 39, > 44, 32, 39, 109, 97, 120, 40, 41, 39, 44, 32, 39, 109, 101, 100, 40, > 41, 39, 32, 97, 110, 100, 32, 39, 107, 116, 104, 40, 41, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 99, 97, 108, 108, 101, 100, 32, 119, 105, 116, > 104, 32, 97, 110, 32, 97, 114, 98, 105, 116, 114, 97, 114, 121, 32, 110, > 117, 109, 98, 101, 114, 32, 111, 102, 32, 97, 114, 103, 117, 109, 101, 110, > 116, 115, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 70, 117, 110, > 99, 116, 105, 111, 110, 115, 32, 39, 105, 115, 118, 97, 108, 40, 41, 39, > 44, 32, 39, 105, 115, 110, 97, 110, 40, 41, 39, 44, 32, 39, 105, 115, > 105, 110, 102, 40, 41, 39, 44, 32, 39, 105, 115, 98, 111, 111, 108, 40, > 41, 39, 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 116, > 111, 32, 116, 101, 115, 116, 32, 116, 104, 101, 32, 116, 121, 112, 101, 32, > 111, 102, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 97, 32, 103, 105, > 118, 101, 110, 32, 110, 117, 109, 98, 101, 114, 32, 111, 114, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 46, 10, 92, 110, 32, 32, 32, 32, > 95, 32, 84, 104, 101, 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 110, > 97, 109, 101, 115, 32, 98, 101, 108, 111, 119, 32, 97, 114, 101, 32, 112, > 114, 101, 45, 100, 101, 102, 105, 110, 101, 100, 46, 32, 84, 104, 101, 121, > 32, 99, 97, 110, 32, 98, 101, 32, 111, 118, 101, 114, 108, 111, 97, 100, > 101, 100, 32, 105, 102, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 119, > 39, 58, 32, 119, 105, 100, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, > 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, > 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 46, 32, 39, 104, 39, 58, 32, 104, 101, 105, 103, 104, 116, > 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, > 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 100, 39, > 58, 32, 100, 101, 112, 116, 104, 32, 111, 102, 32, 116, 104, 101, 32, 97, > 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, > 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, > 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 115, 39, 58, 32, 115, 112, 101, 99, 116, 114, 117, > 109, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, > 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 120, > 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, 101, > 115, 115, 101, 100, 32, 99, 111, 108, 117, 109, 110, 32, 111, 102, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, > 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 121, 39, 58, 32, 99, 117, 114, > 114, 101, 110, 116, 32, 112, 114, 111, 99, 101, 115, 115, 101, 100, 32, 114, > 111, 119, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, > 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, > 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 122, 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, > 101, 115, 115, 101, 100, 32, 115, 108, 105, 99, 101, 32, 111, 102, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, > 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 99, 39, 58, 32, 99, 117, 114, > 114, 101, 110, 116, 32, 112, 114, 111, 99, 101, 115, 115, 101, 100, 32, 99, > 104, 97, 110, 110, 101, 108, 32, 111, 102, 32, 116, 104, 101, 32, 97, 115, > 115, 111, 99, 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, > 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, > 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 32, 39, 101, 39, 58, 32, 118, 97, 108, 117, 101, 32, 111, 102, > 32, 101, 44, 32, 105, 46, 101, 46, 32, 50, 46, 55, 49, 56, 50, 56, > 46, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, > 39, 112, 105, 39, 58, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 112, > 105, 44, 32, 105, 46, 101, 46, 32, 51, 46, 49, 52, 49, 53, 57, 50, > 54, 46, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, > 32, 39, 63, 39, 32, 111, 114, 32, 39, 117, 39, 58, 32, 97, 32, 114, > 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 32, 98, 101, 116, 119, > 101, 101, 110, 32, 91, 48, 44, 49, 93, 44, 32, 102, 111, 108, 108, 111, > 119, 105, 110, 103, 32, 97, 32, 117, 110, 105, 102, 111, 114, 109, 32, 100, > 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 46, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 103, 39, 58, 32, 97, > 32, 114, 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 44, 32, 102, > 111, 108, 108, 111, 119, 105, 110, 103, 32, 97, 32, 103, 97, 117, 115, 115, > 105, 97, 110, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, > 32, 111, 102, 32, 118, 97, 114, 105, 97, 110, 99, 101, 32, 49, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 114, 111, > 117, 103, 104, 108, 121, 32, 105, 110, 32, 91, 45, 53, 44, 53, 93, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, > 105, 39, 58, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, > 101, 115, 115, 101, 100, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, > 101, 32, 40, 105, 46, 101, 46, 32, 118, 97, 108, 117, 101, 32, 108, 111, > 99, 97, 116, 101, 100, 32, 97, 116, 32, 40, 120, 44, 121, 44, 122, 44, > 99, 41, 41, 32, 111, 102, 32, 116, 104, 101, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 115, 115, 111, 99, 105, 97, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, > 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 105, > 109, 39, 44, 39, 105, 77, 39, 44, 39, 105, 97, 39, 44, 39, 105, 118, > 39, 58, 32, 82, 101, 115, 112, 101, 99, 116, 105, 118, 101, 108, 121, 32, > 116, 104, 101, 32, 109, 105, 110, 105, 109, 117, 109, 44, 32, 109, 97, 120, > 105, 109, 117, 109, 44, 32, 97, 118, 101, 114, 97, 103, 101, 32, 118, 97, > 108, 117, 101, 115, 32, 97, 110, 100, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 118, 97, 114, 105, 97, 110, 99, 101, 32, > 111, 102, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, > 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 120, 109, 39, > 44, 39, 121, 109, 39, 44, 39, 122, 109, 39, 44, 39, 99, 109, 39, 58, > 32, 84, 104, 101, 32, 112, 105, 120, 101, 108, 32, 99, 111, 111, 114, 100, > 105, 110, 97, 116, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 109, 105, > 110, 105, 109, 117, 109, 32, 118, 97, 108, 117, 101, 32, 105, 110, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 109, 97, 103, > 101, 44, 32, 105, 102, 32, 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, > 101, 114, 119, 105, 115, 101, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 46, 32, 39, 120, 77, 39, 44, 39, 121, 77, 39, 44, > 39, 122, 77, 39, 44, 39, 99, 77, 39, 58, 32, 84, 104, 101, 32, 112, > 105, 120, 101, 108, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 32, 111, 102, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 117, 109, 32, > 118, 97, 108, 117, 101, 32, 105, 110, 32, 116, 104, 101, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 115, 115, 111, 99, > 105, 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, > 97, 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 95, 32, 84, 104, 101, 115, 101, > 32, 115, 112, 101, 99, 105, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, > 114, 115, 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 58, 10, > 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 59, 39, > 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 115, 101, 112, > 97, 114, 97, 116, 111, 114, 46, 32, 84, 104, 101, 32, 114, 101, 116, 117, > 114, 110, 101, 100, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 97, 108, > 119, 97, 121, 115, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 101, 110, > 99, 111, 117, 110, 116, 101, 114, 101, 100, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 46, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 49, 59, 50, > 59, 112, 105, 39, 32, 105, 115, 32, 101, 118, 97, 108, 117, 97, 116, 101, > 100, 32, 97, 115, 32, 39, 112, 105, 39, 46, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 32, 39, 61, 39, 58, 32, 118, 97, 114, > 105, 97, 98, 108, 101, 32, 97, 115, 115, 105, 103, 110, 109, 101, 110, 116, > 46, 32, 86, 97, 114, 105, 97, 98, 108, 101, 115, 32, 105, 110, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, 114, 115, > 101, 114, 32, 99, 97, 110, 32, 111, 110, 108, 121, 32, 114, 101, 102, 101, > 114, 32, 116, 111, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 110, 117, 109, 101, 114, 105, 99, 97, 108, 32, 118, 97, > 108, 117, 101, 115, 46, 32, 86, 97, 114, 105, 97, 98, 108, 101, 32, 110, > 97, 109, 101, 115, 32, 97, 114, 101, 32, 99, 97, 115, 101, 45, 115, 101, > 110, 115, 105, 116, 105, 118, 101, 46, 32, 85, 115, 101, 32, 116, 104, 105, > 115, 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, 105, 110, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 106, > 117, 110, 99, 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 39, 59, 39, > 32, 116, 111, 32, 100, 101, 102, 105, 110, 101, 32, 99, 111, 109, 112, 108, > 101, 120, 32, 101, 118, 97, 108, 117, 97, 98, 108, 101, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 115, 44, 32, 115, 117, 99, 104, 32, 97, > 115, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 39, 116, 61, 99, 111, 115, 40, 120, 41, 59, 51, 42, 116, 94, 50, > 43, 50, 42, 116, 43, 49, 39, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 84, 104, 101, 115, 101, 32, 118, 97, 114, > 105, 97, 98, 108, 101, 115, 32, 114, 101, 109, 97, 105, 110, 32, 108, 111, > 99, 97, 108, 32, 116, 111, 32, 116, 104, 101, 32, 109, 97, 116, 104, 101, > 109, 97, 116, 105, 99, 97, 108, 32, 112, 97, 114, 115, 101, 114, 32, 97, > 110, 100, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 97, 99, 99, > 101, 115, 115, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 111, 117, 116, 115, 105, 100, 101, 32, 116, 104, 101, 32, > 101, 118, 97, 108, 117, 97, 116, 101, 100, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 46, 10, 92, 110, 32, 32, 32, 32, 95, 32, 84, 104, > 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 115, 112, 101, 99, > 105, 102, 105, 99, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 32, 97, > 114, 101, 32, 97, 108, 115, 111, 32, 100, 101, 102, 105, 110, 101, 100, 58, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 105, > 102, 40, 101, 120, 112, 114, 95, 99, 111, 110, 100, 44, 101, 120, 112, 114, > 95, 116, 104, 101, 110, 44, 101, 120, 112, 114, 95, 101, 108, 115, 101, 41, > 39, 58, 32, 114, 101, 116, 117, 114, 110, 32, 118, 97, 108, 117, 101, 32, > 111, 102, 32, 39, 101, 120, 112, 114, 95, 116, 104, 101, 110, 39, 32, 111, > 114, 32, 39, 101, 120, 112, 114, 95, 101, 108, 115, 101, 39, 44, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 100, 101, 112, > 101, 110, 100, 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 118, 97, > 108, 117, 101, 32, 111, 102, 32, 39, 101, 120, 112, 114, 95, 99, 111, 110, > 100, 39, 32, 40, 48, 61, 102, 97, 108, 115, 101, 44, 32, 111, 116, 104, > 101, 114, 61, 116, 114, 117, 101, 41, 46, 32, 70, 111, 114, 32, 105, 110, > 115, 116, 97, 110, 99, 101, 44, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 45, 102, 105, 108, 108, 32, 105, 102, 40, > 120, 37, 49, 48, 61, 61, 48, 44, 50, 53, 53, 44, 105, 41, 39, 32, > 119, 105, 108, 108, 32, 100, 114, 97, 119, 32, 98, 108, 97, 110, 107, 32, > 118, 101, 114, 116, 105, 99, 97, 108, 32, 108, 105, 110, 101, 115, 32, 111, > 110, 32, 101, 118, 101, 114, 121, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 49, 48, 116, 104, 32, 99, 111, 108, 117, 109, > 110, 32, 111, 102, 32, 97, 110, 32, 105, 109, 97, 103, 101, 46, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 63, 40, 109, > 97, 120, 41, 39, 32, 111, 114, 32, 39, 63, 40, 109, 105, 110, 44, 109, > 97, 120, 41, 39, 58, 32, 114, 101, 116, 117, 114, 110, 32, 97, 32, 114, > 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 32, 98, 101, 116, 119, > 101, 101, 110, 32, 91, 48, 44, 109, 97, 120, 93, 32, 111, 114, 32, 91, > 109, 105, 110, 44, 109, 97, 120, 93, 44, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 108, 108, 111, 119, 105, 110, > 103, 32, 97, 32, 117, 110, 105, 102, 111, 114, 109, 32, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 46, 32, 39, 117, 40, 109, 97, 120, > 41, 39, 32, 97, 110, 100, 32, 39, 117, 40, 48, 44, 109, 97, 120, 41, > 39, 32, 109, 101, 97, 110, 32, 116, 104, 101, 32, 115, 97, 109, 101, 46, > 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 32, 39, 105, > 40, 95, 97, 44, 95, 98, 44, 95, 99, 44, 95, 100, 44, 95, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 41, 39, 58, 32, 114, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 112, 105, 120, 101, 108, 32, 108, 111, 99, 97, 116, 101, 100, 10, 92, > 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 116, 32, > 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 97, 44, 98, 44, 99, 44, > 100, 41, 32, 105, 110, 32, 116, 104, 101, 32, 97, 115, 115, 111, 99, 105, > 97, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 105, 102, 32, 97, > 110, 121, 32, 40, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 73, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 112, 97, > 114, 97, 109, 101, 116, 101, 114, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 110, 101, 97, 114, 101, 115, 116, 32, 110, 101, 105, 103, 104, > 98, 111, 114, 32, 124, 32, 111, 116, 104, 101, 114, 61, 108, 105, 110, 101, > 97, 114, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 66, 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, 110, > 100, 105, 116, 105, 111, 110, 115, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 79, 109, 105, 116, 116, 101, 100, 32, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, 97, 114, 101, 32, 114, > 101, 112, 108, 97, 99, 101, 100, 32, 98, 121, 32, 116, 104, 101, 105, 114, > 32, 100, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 32, > 119, 104, 105, 99, 104, 32, 97, 114, 101, 32, 114, 101, 115, 112, 101, 99, > 116, 105, 118, 101, 108, 121, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 120, 44, 32, 121, 44, 32, 122, 44, 32, 99, 32, > 97, 110, 100, 32, 48, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 46, 32, 39, 106, 40, 95, 100, 120, 44, 95, 100, 121, 44, 95, > 100, 122, 44, 95, 100, 99, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 41, > 39, 58, 32, 100, 111, 101, 115, 32, 116, 104, 101, 32, 115, 97, 109, 101, > 32, 102, 111, 114, 32, 116, 104, 101, 32, 112, 105, 120, 101, 108, 32, 108, > 111, 99, 97, 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 97, 116, 32, 112, 111, 115, 105, 116, 105, 111, 110, > 32, 40, 120, 43, 100, 120, 44, 121, 43, 100, 121, 44, 122, 43, 100, 122, > 44, 99, 43, 100, 99, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 46, 32, 39, 105, 91, 111, 102, 102, 115, 101, 116, 93, 39, > 58, 32, 114, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 118, 97, 108, > 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, 112, 105, 120, 101, 108, 32, > 108, 111, 99, 97, 116, 101, 100, 32, 97, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 111, 102, 102, 115, 101, 116, 32, 105, 110, 32, 116, > 104, 101, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 109, 97, 103, > 101, 32, 98, 117, 102, 102, 101, 114, 46, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 46, 32, 39, 106, 91, 111, 102, 102, 115, 101, 116, > 93, 39, 58, 32, 100, 111, 101, 115, 32, 116, 104, 101, 32, 115, 97, 109, > 101, 32, 102, 111, 114, 32, 97, 110, 32, 111, 102, 102, 115, 101, 116, 32, > 114, 101, 108, 97, 116, 105, 118, 101, 32, 116, 111, 32, 116, 104, 101, 32, > 99, 117, 114, 114, 101, 110, 116, 32, 112, 105, 120, 101, 108, 32, 40, 120, > 44, 121, 44, 122, 44, 99, 41, 46, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, > 110, 99, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, 102, 105, > 108, 108, 32, 48, 46, 53, 42, 40, 105, 40, 120, 43, 49, 41, 45, 105, > 40, 120, 45, 49, 41, 41, 39, 32, 119, 105, 108, 108, 32, 101, 115, 116, > 105, 109, 97, 116, 101, 32, 116, 104, 101, 32, 88, 45, 100, 101, 114, 105, > 118, 97, 116, 105, 118, 101, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 111, 102, 32, 97, 110, 32, 105, 109, 97, 103, 101, > 32, 119, 105, 116, 104, 32, 97, 32, 99, 108, 97, 115, 115, 105, 99, 97, > 108, 32, 102, 105, 110, 105, 116, 101, 32, 100, 105, 102, 102, 101, 114, 101, > 110, 99, 101, 32, 115, 99, 104, 101, 109, 101, 46, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 46, 32, 73, 102, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 102, 111, 114, 109, 117, 108, 97, 32, 115, 116, > 97, 114, 116, 115, 32, 119, 105, 116, 104, 32, 39, 62, 39, 32, 111, 114, > 32, 39, 60, 39, 44, 32, 116, 104, 101, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 115, 32, 39, 105, 40, 46, 46, 41, 39, 32, 97, 110, 100, 32, > 39, 106, 40, 46, 46, 41, 39, 32, 119, 105, 108, 108, 32, 114, 101, 116, > 117, 114, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 99, 117, 114, 114, 101, 110, 116, 108, 121, 32, > 98, 101, 105, 110, 103, 32, 109, 111, 100, 105, 102, 105, 101, 100, 44, 32, > 105, 110, 32, 102, 111, 114, 119, 97, 114, 100, 32, 40, 39, 62, 39, 41, > 32, 111, 114, 32, 98, 97, 99, 107, 119, 97, 114, 100, 32, 40, 39, 60, > 39, 41, 32, 111, 114, 100, 101, 114, 46, 10, 92, 110, 32, 32, 45, 32, > 84, 104, 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 32, 105, 115, 32, 97, 108, > 119, 97, 121, 115, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, > 116, 111, 32, 116, 104, 101, 32, 101, 118, 97, 108, 117, 97, 116, 105, 111, > 110, 115, 32, 111, 102, 32, 39, 123, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 115, 125, 39, 44, 10, 92, 110, 32, 32, 32, 32, 32, 101, 46, > 103, 46, 32, 71, 92, 52, 55, 77, 73, 67, 32, 115, 101, 113, 117, 101, > 110, 99, 101, 32, 39, 50, 53, 54, 44, 49, 50, 56, 32, 45, 102, 32, > 123, 119, 125, 39, 32, 119, 105, 108, 108, 32, 99, 114, 101, 97, 116, 101, > 32, 97, 32, 50, 53, 54, 120, 49, 50, 56, 32, 105, 109, 97, 103, 101, > 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 118, 97, 108, > 117, 101, 32, 50, 53, 54, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, > 115, 101, 99, 116, 105, 111, 110, 32, 34, 73, 109, 97, 103, 101, 32, 97, > 110, 100, 32, 100, 97, 116, 97, 32, 118, 105, 101, 119, 101, 114, 115, 34, > 10, 45, 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, > 104, 32, 34, 32, 32, 45, 32, 71, 92, 52, 55, 77, 73, 67, 32, 104, > 97, 115, 32, 115, 111, 109, 101, 32, 118, 101, 114, 121, 32, 104, 97, 110, > 100, 121, 32, 101, 109, 98, 101, 100, 100, 101, 100, 32, 118, 105, 115, 117, > 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 109, 111, 100, 117, 108, 101, > 115, 44, 32, 102, 111, 114, 32, 49, 100, 32, 115, 105, 103, 110, 97, 108, > 115, 10, 92, 110, 32, 32, 32, 32, 32, 40, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 45, 112, 108, 111, 116, 39, 41, 44, 32, 49, 100, 47, 50, > 100, 47, 51, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 39, 41, > 32, 97, 110, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 10, > 92, 110, 32, 32, 32, 32, 32, 40, 99, 111, 109, 109, 97, 110, 100, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 51, 100, 39, 41, 46, 32, 73, > 116, 32, 101, 110, 97, 98, 108, 101, 115, 32, 97, 110, 32, 105, 110, 116, > 101, 114, 97, 99, 116, 105, 118, 101, 32, 118, 105, 101, 119, 32, 111, 102, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 32, 100, 97, 116, 97, 46, 10, 92, 110, 32, 32, 45, 32, > 84, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 107, 101, > 121, 98, 111, 97, 114, 100, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, > 32, 97, 114, 101, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 105, > 110, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, > 101, 32, 118, 105, 101, 119, 101, 114, 115, 58, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 67, 84, 82, 76, 43, 68, 58, 32, 73, 110, 99, 114, 101, > 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 67, 58, > 32, 68, 101, 99, 114, 101, 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, > 32, 115, 105, 122, 101, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, > 84, 82, 76, 43, 82, 58, 32, 82, 101, 115, 101, 116, 32, 119, 105, 110, > 100, 111, 119, 32, 115, 105, 122, 101, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 67, 84, 82, 76, 43, 70, 58, 32, 84, 111, 103, 103, 108, 101, > 32, 102, 117, 108, 108, 115, 99, 114, 101, 101, 110, 32, 109, 111, 100, 101, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 83, > 58, 32, 83, 97, 118, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 119, > 105, 110, 100, 111, 119, 32, 115, 110, 97, 112, 115, 104, 111, 116, 32, 97, > 115, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 102, 105, 108, 101, 32, > 39, 103, 109, 105, 99, 95, 120, 120, 120, 120, 46, 98, 109, 112, 39, 46, > 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 79, 58, > 32, 83, 97, 118, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 105, 110, > 115, 116, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 32, 118, 105, > 101, 119, 101, 100, 32, 100, 97, 116, 97, 44, 32, 97, 115, 32, 110, 117, > 109, 98, 101, 114, 101, 100, 32, 102, 105, 108, 101, 32, 39, 103, 109, 105, > 99, 95, 120, 120, 120, 120, 46, 99, 105, 109, 103, 122, 39, 46, 10, 92, > 110, 32, 32, 45, 32, 83, 104, 111, 114, 116, 99, 117, 116, 115, 32, 115, > 112, 101, 99, 105, 102, 105, 99, 32, 116, 111, 32, 116, 104, 101, 32, 49, > 100, 47, 50, 100, 47, 51, 100, 32, 105, 109, 97, 103, 101, 32, 118, 105, > 101, 119, 101, 114, 32, 97, 114, 101, 58, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 67, 84, 82, 76, 43, 65, 58, 32, 83, 119, 105, 116, 99, 104, > 32, 99, 117, 114, 115, 111, 114, 32, 109, 111, 100, 101, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 80, 58, 32, 80, 108, > 97, 121, 32, 122, 45, 115, 116, 97, 99, 107, 32, 111, 102, 32, 102, 114, > 97, 109, 101, 115, 32, 97, 115, 32, 97, 32, 109, 111, 118, 105, 101, 32, > 40, 102, 111, 114, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, > 51, 100, 32, 105, 109, 97, 103, 101, 115, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 67, 84, 82, 76, 43, 86, 58, 32, 83, 104, 111, 119, > 47, 104, 105, 100, 101, 32, 51, 68, 32, 118, 105, 101, 119, 32, 40, 102, > 111, 114, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 51, 100, > 32, 105, 109, 97, 103, 101, 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 67, 84, 82, 76, 43, 40, 109, 111, 117, 115, 101, 119, 104, 101, > 101, 108, 41, 58, 32, 90, 111, 111, 109, 32, 105, 110, 47, 111, 117, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 83, 72, 73, 70, 84, 43, > 40, 109, 111, 117, 115, 101, 119, 104, 101, 101, 108, 41, 58, 32, 71, 111, > 32, 108, 101, 102, 116, 47, 114, 105, 103, 104, 116, 46, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 65, 76, 84, 43, 40, 109, 111, 117, 115, 101, 119, > 104, 101, 101, 108, 41, 58, 32, 71, 111, 32, 117, 112, 47, 100, 111, 119, > 110, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 78, 117, 109, 101, 114, > 105, 99, 32, 80, 65, 68, 58, 32, 90, 111, 111, 109, 32, 105, 110, 47, > 111, 117, 116, 32, 40, 43, 47, 45, 41, 32, 97, 110, 100, 32, 109, 111, > 118, 101, 32, 116, 104, 114, 111, 117, 103, 104, 32, 122, 111, 111, 109, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 40, 100, 105, 103, 105, 116, 115, 41, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 66, 65, 67, 75, 83, 80, > 65, 67, 69, 58, 32, 82, 101, 115, 101, 116, 32, 122, 111, 111, 109, 32, > 115, 99, 97, 108, 101, 46, 10, 92, 110, 32, 32, 45, 32, 83, 104, 111, > 114, 116, 99, 117, 116, 115, 32, 115, 112, 101, 99, 105, 102, 105, 99, 32, > 116, 111, 32, 116, 104, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 118, 105, 101, 119, 101, 114, 32, 97, 114, 101, 58, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 40, 109, 111, 117, 115, 101, 41, 43, 40, 108, 101, > 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 41, > 58, 32, 82, 111, 116, 97, 116, 101, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 40, 109, 111, 117, > 115, 101, 41, 43, 40, 114, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 41, 58, 32, 90, 111, 111, 109, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 46, 10, 92, 110, 32, 32, 32, 32, > 46, 32, 40, 109, 111, 117, 115, 101, 41, 43, 40, 109, 105, 100, 100, 108, > 101, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 41, 58, > 32, 83, 104, 105, 102, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 40, 109, 111, 117, 115, 101, > 119, 104, 101, 101, 108, 41, 58, 32, 90, 111, 111, 109, 32, 105, 110, 47, > 111, 117, 116, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, > 76, 43, 70, 49, 32, 46, 46, 32, 67, 84, 82, 76, 43, 70, 54, 58, > 32, 83, 119, 105, 116, 99, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 51, 100, 32, 114, 101, 110, > 100, 101, 114, 105, 110, 103, 32, 109, 111, 100, 101, 115, 46, 10, 92, 110, > 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, 90, 58, 32, 69, 110, > 97, 98, 108, 101, 47, 100, 105, 115, 97, 98, 108, 101, 32, 122, 45, 98, > 117, 102, 102, 101, 114, 101, 100, 32, 114, 101, 110, 100, 101, 114, 105, 110, > 103, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, 82, 76, 43, > 65, 58, 32, 83, 104, 111, 119, 47, 104, 105, 100, 101, 32, 51, 100, 32, > 97, 120, 101, 115, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 67, 84, > 82, 76, 43, 71, 58, 32, 83, 97, 118, 101, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 44, 32, 97, 115, 32, 110, 117, 109, 98, 101, 114, 101, > 100, 32, 102, 105, 108, 101, 32, 39, 103, 109, 105, 99, 95, 120, 120, 120, > 120, 46, 111, 102, 102, 39, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, > 67, 84, 82, 76, 43, 84, 58, 32, 83, 119, 105, 116, 99, 104, 32, 98, > 101, 116, 119, 101, 101, 110, 32, 115, 105, 110, 103, 108, 101, 47, 100, 111, > 117, 98, 108, 101, 45, 115, 105, 100, 101, 100, 32, 51, 100, 32, 109, 111, > 100, 101, 115, 46, 34, 10, 45, 95, 104, 101, 108, 112, 95, 115, 101, 99, > 116, 105, 111, 110, 32, 34, 65, 100, 100, 105, 110, 103, 32, 99, 117, 115, > 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 34, 10, 45, 95, > 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, > 32, 32, 45, 32, 67, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, > 110, 100, 115, 32, 99, 97, 110, 32, 98, 101, 32, 100, 101, 102, 105, 110, > 101, 100, 32, 98, 121, 32, 97, 32, 117, 115, 101, 114, 44, 32, 116, 104, > 114, 111, 117, 103, 104, 32, 116, 104, 101, 32, 117, 115, 101, 32, 111, 102, > 32, 71, 92, 52, 55, 77, 73, 67, 32, 99, 117, 115, 116, 111, 109, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, 105, 108, 101, 115, 46, 10, > 92, 110, 32, 32, 45, 32, 65, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 102, 105, 108, 101, 32, 105, 115, 32, 97, 32, 115, 105, 109, 112, 108, 101, > 32, 97, 115, 99, 105, 105, 32, 116, 101, 120, 116, 32, 102, 105, 108, 101, > 44, 32, 119, 104, 101, 114, 101, 32, 101, 97, 99, 104, 32, 108, 105, 110, > 101, 32, 115, 116, 97, 114, 116, 115, 32, 101, 105, 116, 104, 101, 114, 32, > 98, 121, 10, 92, 110, 32, 32, 32, 32, 32, 39, 99, 111, 109, 109, 97, > 110, 100, 95, 110, 97, 109, 101, 58, 32, 99, 111, 109, 109, 97, 110, 100, > 95, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 39, 32, 111, 114, 32, > 39, 99, 111, 109, 109, 97, 110, 100, 95, 100, 101, 102, 105, 110, 105, 116, > 105, 111, 110, 32, 40, 99, 111, 110, 116, 105, 110, 117, 97, 116, 105, 111, > 110, 41, 39, 46, 10, 92, 110, 32, 32, 45, 32, 67, 117, 115, 116, 111, > 109, 32, 99, 111, 109, 109, 97, 110, 100, 32, 110, 97, 109, 101, 115, 32, > 109, 117, 115, 116, 32, 117, 115, 101, 32, 99, 104, 97, 114, 97, 99, 116, > 101, 114, 115, 32, 91, 97, 45, 122, 65, 45, 90, 48, 45, 57, 95, 93, > 32, 97, 110, 100, 32, 99, 97, 110, 110, 111, 116, 32, 115, 116, 97, 114, > 116, 32, 119, 105, 116, 104, 32, 97, 32, 110, 117, 109, 98, 101, 114, 46, > 10, 92, 110, 32, 32, 45, 32, 65, 110, 121, 32, 39, 32, 92, 35, 32, > 99, 111, 109, 109, 101, 110, 116, 39, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 32, 102, 111, 117, 110, 100, 32, 105, 110, 32, 97, 32, 99, > 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, > 105, 108, 101, 32, 105, 115, 32, 100, 105, 115, 99, 97, 114, 100, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 10, > 92, 110, 32, 32, 32, 32, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, > 101, 114, 44, 32, 119, 104, 101, 114, 101, 118, 101, 114, 32, 105, 116, 32, > 105, 115, 32, 108, 111, 99, 97, 116, 101, 100, 32, 105, 110, 32, 97, 32, > 108, 105, 110, 101, 46, 10, 92, 110, 32, 32, 45, 32, 73, 110, 32, 99, > 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 44, 32, > 116, 104, 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 36, 45, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 97, 114, 101, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 58, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 39, 36, 34, 34, 42, 39, 32, 105, 115, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, > 99, 111, 112, 121, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 111, 102, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, 10, 92, 110, 32, 32, 32, > 32, 46, 32, 39, 36, 92, 34, 42, 92, 34, 39, 32, 105, 115, 32, 115, > 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, > 99, 111, 112, 121, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 111, 102, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 115, 44, 32, 101, 97, 99, 104, 32, > 98, 101, 105, 110, 103, 32, 97, 114, 111, 117, 110, 100, 32, 100, 111, 117, > 98, 108, 101, 32, 113, 117, 111, 116, 101, 115, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 36, 34, 34, 35, 39, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, > 32, 109, 97, 120, 105, 109, 117, 109, 32, 105, 110, 100, 105, 99, 101, 32, > 111, 102, 32, 107, 110, 111, 119, 110, 32, 97, 114, 103, 117, 109, 101, 110, > 116, 115, 32, 40, 101, 105, 116, 104, 101, 114, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 98, 121, 32, 116, 104, 101, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 32, 117, 115, 101, 114, 32, 111, 114, 32, 115, 101, 116, > 32, 116, 111, 32, 97, 32, 100, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 32, 105, 110, 32, 116, 104, 101, 32, 99, 117, 115, 116, 111, > 109, 32, 99, 111, 109, 109, 97, 110, 100, 41, 46, 10, 92, 110, 32, 32, > 32, 32, 46, 32, 39, 36, 34, 34, 63, 39, 32, 105, 115, 32, 115, 117, > 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, 32, 115, > 116, 114, 105, 110, 103, 32, 116, 101, 108, 108, 105, 110, 103, 32, 97, 98, > 111, 117, 116, 32, 116, 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 115, 117, 98, 115, 101, 116, 32, 114, 101, 115, 116, 114, 105, 99, 116, 105, > 111, 110, 32, 40, 111, 110, 108, 121, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 117, 115, 101, 102, 117, 108, 32, 119, 104, 101, 110, 32, 99, 117, > 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 110, 101, > 101, 100, 32, 116, 111, 32, 111, 117, 116, 112, 117, 116, 32, 100, 101, 115, > 99, 114, 105, 112, 116, 105, 118, 101, 32, 109, 101, 115, 115, 97, 103, 101, > 115, 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 36, 105, 39, > 32, 97, 110, 100, 32, 39, 36, 123, 105, 125, 39, 32, 97, 114, 101, 32, > 98, 111, 116, 104, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, > 32, 98, 121, 32, 116, 104, 101, 32, 105, 45, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 46, > 32, 78, 101, 103, 97, 116, 105, 118, 101, 32, 105, 110, 100, 105, 99, 101, > 115, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 115, 117, 99, 104, 32, > 97, 115, 32, 39, 36, 123, 45, 106, 125, 39, 32, 97, 114, 101, 32, 97, > 108, 108, 111, 119, 101, 100, 32, 97, 110, 100, 32, 114, 101, 102, 101, 114, > 32, 116, 111, 32, 116, 104, 101, 32, 106, 94, 116, 104, 32, 108, 97, 116, > 101, 115, 116, 32, 97, 114, 103, 117, 109, 101, 110, 116, 46, 32, 39, 36, > 34, 34, 48, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 116, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 98, 121, 32, > 116, 104, 101, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 110, 97, 109, 101, 46, 10, 92, 110, 32, 32, 32, 32, 46, > 32, 39, 36, 123, 105, 61, 100, 101, 102, 97, 117, 108, 116, 125, 39, 32, > 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, > 121, 32, 116, 104, 101, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 36, > 105, 32, 40, 105, 102, 32, 100, 101, 102, 105, 110, 101, 100, 41, 32, 111, > 114, 32, 98, 121, 32, 105, 116, 115, 32, 110, 101, 119, 32, 118, 97, 108, > 117, 101, 32, 115, 101, 116, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 116, 111, 32, 39, 100, 101, 102, 97, 117, 108, 116, 39, 32, 111, 116, > 104, 101, 114, 119, 105, 115, 101, 32, 40, 39, 100, 101, 102, 97, 117, 108, > 116, 39, 32, 109, 97, 121, 32, 98, 101, 32, 97, 32, 36, 45, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 32, 97, 115, 32, 119, 101, 108, 108, > 41, 46, 10, 92, 110, 32, 32, 32, 32, 46, 32, 39, 36, 123, 115, 117, > 98, 115, 101, 116, 125, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, > 116, 117, 116, 101, 100, 32, 98, 121, 32, 116, 104, 101, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 118, 97, 108, 117, 101, 115, 32, 40, 115, > 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 99, 111, 109, 109, > 97, 115, 32, 39, 44, 39, 41, 32, 111, 102, 32, 97, 10, 92, 110, 32, > 32, 32, 32, 32, 32, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 97, 114, 103, 117, 109, 101, 110, 116, 32, 115, 117, 98, 115, 101, 116, 46, > 32, 70, 111, 114, 32, 105, 110, 115, 116, 97, 110, 99, 101, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 36, 34, 34, 123, 50, 45, > 45, 50, 125, 39, 32, 105, 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, > 101, 100, 32, 98, 121, 32, 97, 108, 108, 10, 92, 110, 32, 32, 32, 32, > 32, 32, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 101, 120, 99, 101, 112, 116, 32, 116, 104, > 101, 32, 102, 105, 114, 115, 116, 32, 97, 110, 100, 32, 116, 104, 101, 32, > 108, 97, 115, 116, 32, 111, 110, 101, 46, 32, 69, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 32, 39, 36, 34, 34, 123, 94, 48, 125, 39, 32, 105, > 115, 32, 116, 104, 101, 110, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, > 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, 32, 97, > 108, 108, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 110, 118, 111, 107, 101, 100, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 36, 34, 34, > 42, 39, 32, 105, 102, 32, 97, 108, 108, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 115, 32, 104, 97, 118, 101, 32, 105, 110, 100, 101, > 101, 100, 32, 97, 32, 118, 97, 108, 117, 101, 41, 46, 10, 92, 110, 32, > 32, 32, 32, 46, 32, 39, 36, 34, 34, 61, 118, 97, 114, 39, 32, 105, > 115, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 101, 100, 32, 98, 121, > 32, 116, 104, 101, 32, 115, 101, 116, 32, 111, 102, 32, 105, 110, 115, 116, > 114, 117, 99, 116, 105, 111, 110, 115, 32, 116, 104, 97, 116, 32, 119, 105, > 108, 108, 32, 97, 115, 115, 105, 103, 110, 32, 101, 97, 99, 104, 32, 97, > 114, 103, 117, 109, 101, 110, 116, 32, 36, 105, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 116, 111, 32, 116, 104, 101, 32, 110, 97, 109, 101, 100, > 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 39, 118, 97, 114, 36, 105, > 39, 32, 40, 102, 111, 114, 32, 105, 32, 105, 110, 32, 91, 48, 46, 46, > 36, 34, 34, 35, 93, 41, 46, 32, 84, 104, 105, 115, 32, 105, 115, 32, > 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 108, 121, 32, 117, 115, 101, > 102, 117, 108, 32, 119, 104, 101, 110, 32, 97, 10, 92, 110, 32, 32, 32, > 32, 32, 32, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 119, 97, 110, 116, 32, 116, 111, 32, 109, 97, 110, 97, 103, > 101, 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 110, 117, 109, 98, 101, > 114, 115, 32, 111, 102, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 46, > 32, 86, 97, 114, 105, 97, 98, 108, 101, 115, 32, 110, 97, 109, 101, 115, > 32, 109, 117, 115, 116, 10, 92, 110, 32, 32, 32, 32, 32, 32, 32, 117, > 115, 101, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, 91, 97, > 45, 122, 65, 45, 90, 48, 45, 57, 95, 93, 32, 97, 110, 100, 32, 99, > 97, 110, 110, 111, 116, 32, 115, 116, 97, 114, 116, 32, 119, 105, 116, 104, > 32, 97, 32, 110, 117, 109, 98, 101, 114, 46, 10, 92, 110, 32, 32, 45, > 32, 84, 104, 101, 115, 101, 32, 112, 97, 114, 116, 105, 99, 117, 108, 97, > 114, 32, 36, 45, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, > 97, 114, 101, 32, 97, 108, 119, 97, 121, 115, 32, 115, 117, 98, 115, 116, > 105, 116, 117, 116, 101, 100, 44, 32, 101, 118, 101, 110, 32, 105, 110, 32, > 100, 111, 117, 98, 108, 101, 32, 113, 117, 111, 116, 101, 100, 32, 105, 116, > 101, 109, 115, 32, 111, 114, 10, 92, 110, 32, 32, 32, 32, 32, 119, 104, > 101, 110, 32, 116, 104, 101, 32, 100, 111, 108, 108, 97, 114, 32, 115, 105, > 103, 110, 32, 39, 36, 39, 32, 105, 115, 32, 101, 115, 99, 97, 112, 101, > 100, 32, 119, 105, 116, 104, 32, 97, 32, 98, 97, 99, 107, 115, 108, 97, > 115, 104, 32, 39, 92, 92, 39, 46, 32, 84, 111, 32, 97, 118, 111, 105, > 100, 32, 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 44, 32, > 112, 108, 97, 99, 101, 10, 92, 110, 32, 32, 32, 32, 32, 97, 110, 32, > 101, 109, 112, 116, 121, 32, 100, 111, 117, 98, 108, 101, 32, 113, 117, 111, > 116, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 106, 117, 115, 116, 32, > 97, 102, 116, 101, 114, 32, 116, 104, 101, 32, 39, 36, 39, 32, 40, 97, > 115, 32, 105, 110, 32, 39, 36, 92, 34, 92, 34, 49, 39, 41, 46, 10, > 92, 110, 32, 32, 45, 32, 83, 112, 101, 99, 105, 102, 121, 105, 110, 103, > 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 109, 97, 121, 32, 98, > 101, 32, 115, 107, 105, 112, 112, 101, 100, 32, 119, 104, 101, 110, 32, 105, > 110, 118, 111, 107, 105, 110, 103, 32, 97, 32, 99, 117, 115, 116, 111, 109, > 32, 99, 111, 109, 109, 97, 110, 100, 44, 32, 98, 121, 32, 114, 101, 112, > 108, 97, 99, 105, 110, 103, 32, 116, 104, 101, 109, 32, 98, 121, 10, 92, > 110, 32, 32, 32, 32, 32, 99, 111, 109, 109, 97, 115, 32, 39, 44, 39, > 32, 97, 115, 32, 105, 110, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 32, 39, 45, 102, 108, 111, 119, 101, 114, 32, 44, 44, 51, 39, 46, > 32, 79, 109, 105, 116, 116, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, > 116, 115, 32, 97, 114, 101, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, > 101, 105, 114, 32, 100, 101, 102, 97, 117, 108, 116, 10, 92, 110, 32, 32, > 32, 32, 32, 118, 97, 108, 117, 101, 115, 44, 32, 119, 104, 105, 99, 104, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 116, 104, 117, 115, 32, 101, 120, > 112, 108, 105, 99, 105, 116, 108, 121, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 105, 110, 32, 116, 104, 101, 32, 99, 111, 100, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, > 103, 32, 99, 117, 115, 116, 111, 109, 10, 92, 110, 32, 32, 32, 32, 32, > 99, 111, 109, 109, 97, 110, 100, 32, 40, 117, 115, 105, 110, 103, 32, 100, > 101, 102, 97, 117, 108, 116, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 115, 32, 97, 115, 32, 39, > 36, 34, 34, 123, 49, 61, 100, 101, 102, 97, 117, 108, 116, 125, 39, 41, > 46, 10, 92, 110, 32, 32, 45, 32, 73, 102, 32, 111, 110, 101, 32, 110, > 117, 109, 98, 101, 114, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 114, 101, 113, 117, 101, 115, 116, 101, 100, 32, 105, 110, 32, 97, 32, > 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 32, 104, > 97, 115, 32, 110, 111, 32, 118, 97, 108, 117, 101, 44, 32, 97, 110, 32, > 101, 114, 114, 111, 114, 32, 105, 115, 32, 116, 104, 114, 111, 119, 110, 10, > 92, 110, 32, 32, 32, 32, 32, 98, 121, 32, 116, 104, 101, 32, 105, 110, > 116, 101, 114, 112, 114, 101, 116, 101, 114, 46, 34, 10, 45, 95, 104, 101, > 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 76, 105, 115, 116, > 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 34, 10, 45, 95, > 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, 34, > 32, 65, 108, 108, 32, 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, > 97, 114, 101, 32, 108, 105, 115, 116, 101, 100, 32, 98, 101, 108, 111, 119, > 44, 32, 99, 108, 97, 115, 115, 105, 102, 105, 101, 100, 32, 98, 121, 32, > 116, 104, 101, 109, 101, 115, 46, 10, 92, 110, 32, 87, 104, 101, 110, 32, > 115, 101, 118, 101, 114, 97, 108, 32, 99, 104, 111, 105, 99, 101, 115, 32, > 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 32, 97, 114, 103, 117, 109, > 101, 110, 116, 115, 32, 97, 114, 101, 32, 112, 111, 115, 115, 105, 98, 108, > 101, 44, 32, 116, 104, 101, 121, 32, 97, 112, 112, 101, 97, 114, 32, 115, > 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 39, 124, 39, 46, > 10, 92, 110, 32, 65, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 110, 115, 105, 100, 101, > 32, 39, 91, 93, 39, 32, 111, 114, 32, 115, 116, 97, 114, 116, 105, 110, > 103, 32, 98, 121, 32, 39, 95, 39, 32, 105, 115, 32, 111, 112, 116, 105, > 111, 110, 97, 108, 32, 101, 120, 99, 101, 112, 116, 32, 119, 104, 101, 110, > 32, 115, 116, 97, 110, 100, 105, 110, 103, 32, 102, 111, 114, 32, 97, 110, > 10, 92, 110, 32, 101, 120, 105, 115, 116, 105, 110, 103, 32, 105, 109, 97, > 103, 101, 32, 91, 105, 109, 97, 103, 101, 93, 44, 32, 119, 104, 101, 114, > 101, 32, 39, 105, 109, 97, 103, 101, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 101, 105, 116, 104, 101, 114, 32, 97, 110, 32, 105, 110, 100, 105, 99, > 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 114, 32, 97, 110, 32, 105, > 109, 97, 103, 101, 32, 110, 97, 109, 101, 46, 10, 92, 110, 32, 73, 110, > 32, 116, 104, 105, 115, 32, 99, 97, 115, 101, 44, 32, 116, 104, 101, 32, > 39, 91, 93, 39, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, > 97, 114, 101, 32, 109, 97, 110, 100, 97, 116, 111, 114, 121, 32, 119, 104, > 101, 110, 32, 119, 114, 105, 116, 105, 110, 103, 32, 116, 104, 101, 32, 105, > 116, 101, 109, 46, 32, 65, 32, 99, 111, 109, 109, 97, 110, 100, 32, 109, > 97, 114, 107, 101, 100, 32, 119, 105, 116, 104, 10, 92, 110, 32, 39, 40, > 42, 41, 39, 32, 111, 114, 32, 39, 40, 43, 41, 39, 32, 105, 115, 32, > 97, 32, 110, 97, 116, 105, 118, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 46, 32, 39, 40, 42, 41, 39, 32, 109, 101, 97, 110, 115, 32, 116, 104, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, 115, 32, 97, 118, 97, > 105, 108, 97, 98, 108, 101, 32, 102, 111, 114, 32, 97, 108, 108, 32, 112, > 105, 120, 101, 108, 32, 116, 121, 112, 101, 115, 44, 10, 92, 110, 32, 111, > 116, 104, 101, 114, 119, 105, 115, 101, 32, 111, 110, 108, 121, 32, 102, 111, > 114, 32, 116, 104, 101, 32, 100, 101, 102, 97, 117, 108, 116, 32, 39, 102, > 108, 111, 97, 116, 39, 32, 112, 105, 120, 101, 108, 32, 116, 121, 112, 101, > 46, 10, 92, 110, 32, 82, 101, 109, 101, 109, 98, 101, 114, 32, 116, 104, > 97, 116, 32, 110, 97, 116, 105, 118, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 32, 114, 117, 110, 32, 102, 97, 115, 116, 101, 114, 32, 116, 104, > 97, 110, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 44, 32, 115, 111, 32, 117, 115, 101, 32, 116, 104, 101, 110, 32, > 119, 104, 101, 110, 32, 112, 111, 115, 115, 105, 98, 108, 101, 46, 10, 92, > 110, 32, 78, 111, 116, 101, 32, 97, 108, 115, 111, 32, 116, 104, 97, 116, > 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 116, > 104, 105, 115, 32, 114, 101, 102, 101, 114, 101, 110, 99, 101, 32, 100, 111, > 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 97, 114, 101, 32, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 105, 110, 32, 91, 48, > 44, 50, 53, 53, 93, 32, 98, 101, 102, 111, 114, 101, 10, 92, 110, 32, > 98, 101, 105, 110, 103, 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, 46, > 32, 89, 111, 117, 32, 109, 97, 121, 32, 110, 101, 101, 100, 32, 116, 111, > 32, 100, 111, 32, 116, 104, 105, 115, 32, 109, 97, 110, 117, 97, 108, 108, > 121, 32, 40, 99, 111, 109, 109, 97, 110, 100, 32, 39, 45, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 39, 41, 32, 105, > 102, 32, 121, 111, 117, 32, 119, 97, 110, 116, 10, 92, 110, 32, 115, 97, > 118, 101, 32, 105, 109, 97, 103, 101, 32, 102, 105, 108, 101, 115, 32, 104, > 97, 118, 105, 110, 103, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 97, > 115, 112, 101, 99, 116, 32, 116, 104, 97, 110, 32, 116, 104, 111, 115, 101, > 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, 46, 34, 10, 95, 104, 101, > 108, 112, 95, 101, 120, 97, 109, 112, 108, 101, 115, 32, 58, 10, 45, 95, > 104, 101, 108, 112, 95, 115, 101, 99, 116, 105, 111, 110, 32, 34, 69, 120, > 97, 109, 112, 108, 101, 115, 32, 111, 102, 32, 117, 115, 101, 34, 10, 45, > 95, 104, 101, 108, 112, 95, 112, 97, 114, 97, 103, 114, 97, 112, 104, 32, > 34, 32, 39, 103, 109, 105, 99, 39, 32, 105, 115, 32, 97, 32, 103, 101, > 110, 101, 114, 105, 99, 32, 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 32, 116, 111, 111, 108, 32, 119, 104, 105, 99, > 104, 32, 99, 97, 110, 32, 98, 101, 32, 117, 115, 101, 100, 32, 105, 110, > 32, 97, 32, 119, 105, 100, 101, 32, 118, 97, 114, 105, 101, 116, 121, 32, > 111, 102, 32, 115, 105, 116, 117, 97, 116, 105, 111, 110, 115, 46, 10, 92, > 110, 32, 84, 104, 101, 32, 102, 101, 119, 32, 101, 120, 97, 109, 112, 108, > 101, 115, 32, 98, 101, 108, 111, 119, 32, 105, 108, 108, 117, 115, 116, 114, > 97, 116, 101, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 117, 115, 101, > 115, 32, 111, 102, 32, 116, 104, 105, 115, 32, 116, 111, 111, 108, 58, 10, > 92, 110, 10, 92, 110, 32, 32, 45, 32, 86, 105, 101, 119, 32, 97, 32, > 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 58, 10, > 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 102, 105, 108, 101, > 49, 46, 98, 109, 112, 32, 102, 105, 108, 101, 50, 46, 106, 112, 101, 103, > 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 67, 111, 110, 118, 101, 114, > 116, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 102, 105, 108, 101, 58, > 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 110, 112, > 117, 116, 46, 98, 109, 112, 32, 45, 111, 32, 111, 117, 116, 112, 117, 116, > 46, 106, 112, 103, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 67, 114, > 101, 97, 116, 101, 32, 97, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, > 99, 32, 105, 109, 97, 103, 101, 32, 102, 114, 111, 109, 32, 97, 32, 109, > 111, 118, 105, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, 58, 10, 92, > 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 110, 112, 117, 116, > 46, 109, 112, 103, 32, 45, 97, 32, 122, 32, 45, 111, 32, 111, 117, 116, > 112, 117, 116, 46, 104, 100, 114, 10, 92, 110, 10, 92, 110, 32, 32, 45, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 105, 109, 97, 103, 101, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 110, 111, 114, 109, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 110, 112, 117, 116, 46, > 98, 109, 112, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, > 114, 109, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 68, 101, 110, 111, > 105, 115, 101, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, > 101, 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 101, 110, 111, 105, 115, > 101, 32, 51, 48, 44, 49, 48, 32, 45, 111, 32, 100, 101, 110, 111, 105, > 115, 101, 100, 46, 106, 112, 103, 10, 92, 110, 10, 92, 110, 32, 32, 45, > 32, 67, 111, 109, 112, 111, 115, 101, 32, 116, 119, 111, 32, 105, 109, 97, > 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 111, 118, 101, 114, 108, 97, > 121, 32, 108, 97, 121, 101, 114, 32, 98, 108, 101, 110, 100, 105, 110, 103, > 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 105, 109, > 97, 103, 101, 49, 46, 106, 112, 103, 32, 105, 109, 97, 103, 101, 50, 46, > 106, 112, 103, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, 114, 108, > 97, 121, 32, 45, 111, 32, 98, 108, 101, 110, 100, 101, 100, 46, 106, 112, > 103, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 69, 118, 97, 108, 117, > 97, 116, 101, 32, 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, > 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 58, 10, 92, > 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 101, 32, 92, 34, > 99, 111, 115, 40, 112, 105, 47, 52, 41, 94, 50, 43, 115, 105, 110, 40, > 112, 105, 47, 52, 41, 94, 50, 61, 123, 99, 111, 115, 40, 112, 105, 47, > 52, 41, 94, 50, 43, 115, 105, 110, 40, 112, 105, 47, 52, 41, 94, 50, > 125, 92, 34, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 80, 108, 111, > 116, 32, 97, 32, 50, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 58, > 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 49, 48, 48, > 48, 44, 49, 44, 49, 44, 50, 32, 45, 102, 32, 92, 34, 88, 61, 51, > 42, 40, 120, 45, 53, 48, 48, 41, 47, 53, 48, 48, 59, 88, 94, 50, > 42, 115, 105, 110, 40, 51, 42, 88, 94, 50, 41, 43, 105, 102, 40, 99, > 61, 61, 48, 44, 117, 40, 48, 44, 45, 49, 41, 44, 99, 111, 115, 40, > 88, 42, 49, 48, 41, 41, 92, 34, 32, 45, 112, 108, 111, 116, 10, 92, > 110, 10, 92, 110, 32, 32, 45, 32, 80, 108, 111, 116, 32, 97, 32, 51, > 100, 32, 101, 108, 101, 118, 97, 116, 101, 100, 32, 102, 117, 110, 99, 116, > 105, 111, 110, 32, 105, 110, 32, 114, 97, 110, 100, 111, 109, 32, 99, 111, > 108, 111, 114, 115, 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, > 99, 32, 49, 50, 56, 44, 49, 50, 56, 44, 49, 44, 51, 44, 92, 34, > 63, 40, 48, 44, 50, 53, 53, 41, 92, 34, 32, 45, 112, 108, 97, 115, > 109, 97, 32, 49, 48, 44, 51, 32, 45, 98, 108, 117, 114, 32, 52, 32, > 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, 48, 48, 48, 48, 32, 92, > 92, 10, 92, 110, 32, 32, 32, 32, 32, 32, 45, 101, 108, 101, 118, 97, > 116, 105, 111, 110, 51, 100, 91, 45, 49, 93, 32, 92, 34, 39, 88, 61, > 40, 120, 45, 54, 52, 41, 47, 54, 59, 89, 61, 40, 121, 45, 54, 52, > 41, 47, 54, 59, 49, 48, 48, 42, 101, 120, 112, 40, 45, 40, 88, 94, > 50, 43, 89, 94, 50, 41, 47, 51, 48, 41, 42, 97, 98, 115, 40, 99, > 111, 115, 40, 88, 41, 42, 115, 105, 110, 40, 89, 41, 41, 39, 92, 34, > 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 80, 108, 111, 116, 32, 116, > 104, 101, 32, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 32, 111, 102, > 32, 97, 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 109, 51, 100, 32, 53, > 32, 45, 109, 100, 51, 100, 32, 53, 32, 45, 100, 98, 51, 100, 32, 48, > 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 92, > 34, 39, 120, 94, 50, 43, 121, 94, 50, 43, 97, 98, 115, 40, 122, 41, > 94, 97, 98, 115, 40, 52, 42, 99, 111, 115, 40, 120, 42, 121, 42, 122, > 42, 51, 41, 41, 39, 92, 34, 44, 51, 10, 92, 110, 10, 92, 110, 32, > 32, 45, 32, 82, 101, 110, 100, 101, 114, 32, 97, 32, 71, 92, 52, 55, > 77, 73, 67, 32, 51, 100, 32, 108, 111, 103, 111, 58, 10, 92, 110, 32, > 32, 32, 32, 32, 103, 109, 105, 99, 32, 49, 32, 45, 116, 101, 120, 116, > 32, 71, 92, 92, 92, 52, 55, 77, 73, 67, 44, 48, 44, 48, 44, 53, > 51, 44, 49, 44, 49, 44, 49, 44, 49, 32, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 32, 49, 48, 44, 48, 32, 45, 98, 108, 117, 114, 32, > 50, 32, 45, 110, 32, 48, 44, 49, 48, 48, 32, 45, 45, 112, 108, 97, > 115, 109, 97, 32, 48, 46, 52, 32, 45, 43, 32, 92, 92, 10, 92, 110, > 32, 32, 32, 32, 32, 32, 45, 98, 108, 117, 114, 32, 49, 32, 45, 101, > 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 45, 48, 46, 49, 32, > 45, 109, 100, 51, 100, 32, 52, 10, 92, 110, 10, 92, 110, 32, 32, 45, > 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 97, 32, 51, 100, 32, 114, > 105, 110, 103, 32, 111, 102, 32, 116, 111, 114, 105, 105, 58, 10, 92, 110, > 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 50, 48, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 53, > 44, 50, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 92, 34, > 123, 63, 40, 54, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 54, > 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 54, 48, 44, 50, 53, > 53, 41, 125, 92, 34, 32, 92, 92, 10, 92, 110, 32, 32, 32, 32, 32, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 48, 46, 53, 44, 49, 32, > 45, 105, 102, 32, 92, 34, 123, 36, 62, 37, 50, 125, 92, 34, 32, 45, > 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 57, 48, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 51, 100, 91, 45, 49, 93, > 32, 55, 48, 32, 45, 43, 51, 100, 32, 92, 92, 10, 92, 110, 32, 32, > 32, 32, 32, 32, 45, 114, 51, 100, 32, 48, 44, 48, 44, 49, 44, 49, > 56, 32, 45, 100, 111, 110, 101, 32, 45, 109, 100, 51, 100, 32, 51, 32, > 45, 109, 51, 100, 32, 53, 32, 45, 100, 98, 51, 100, 32, 48, 10, 92, > 110, 10, 92, 110, 32, 32, 45, 32, 67, 114, 101, 97, 116, 101, 32, 97, > 32, 118, 97, 115, 101, 32, 102, 114, 111, 109, 32, 97, 32, 51, 100, 32, > 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 58, 10, 92, 110, 32, 32, > 32, 32, 32, 103, 109, 105, 99, 32, 45, 109, 100, 51, 100, 32, 52, 32, > 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 92, 34, > 39, 120, 94, 50, 43, 50, 42, 97, 98, 115, 40, 121, 47, 50, 41, 42, > 115, 105, 110, 40, 50, 42, 121, 41, 94, 50, 43, 122, 94, 50, 45, 51, > 39, 44, 48, 92, 34, 32, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, > 49, 46, 53, 32, 92, 92, 10, 92, 110, 32, 32, 32, 32, 32, 32, 45, > 45, 51, 100, 91, 45, 49, 93, 32, 48, 44, 53, 32, 45, 112, 108, 97, > 110, 101, 51, 100, 32, 49, 53, 44, 49, 53, 32, 45, 114, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 99, 51, > 100, 91, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, > 44, 51, 46, 50, 32, 92, 92, 10, 92, 110, 32, 32, 32, 32, 32, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 56, 48, 44, 49, > 53, 48, 44, 50, 53, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 50, > 93, 32, 49, 50, 56, 44, 50, 53, 53, 44, 48, 32, 45, 99, 111, 108, > 51, 100, 91, 45, 51, 93, 32, 50, 53, 53, 44, 49, 50, 56, 44, 48, > 32, 45, 43, 51, 100, 10, 92, 110, 10, 92, 110, 32, 32, 45, 32, 68, > 105, 115, 112, 108, 97, 121, 32, 102, 105, 108, 116, 101, 114, 101, 100, 32, > 119, 101, 98, 99, 97, 109, 32, 115, 116, 114, 101, 97, 109, 58, 10, 92, > 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, 97, 112, 112, 108, > 121, 95, 99, 97, 109, 101, 114, 97, 32, 92, 92, 92, 34, 45, 45, 109, > 105, 114, 114, 111, 114, 32, 120, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 121, 32, 45, 43, 32, 45, 47, 32, 52, 92, 92, 92, 34, 10, 92, > 110, 10, 92, 110, 32, 32, 45, 32, 76, 97, 117, 110, 99, 104, 32, 97, > 32, 115, 101, 116, 32, 111, 102, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 100, 101, 109, 111, > 115, 58, 10, 92, 110, 32, 32, 32, 32, 32, 103, 109, 105, 99, 32, 45, > 100, 101, 109, 111, 10, 92, 110, 34, 10, 35, 64, 103, 109, 105, 99, 32, > 118, 101, 114, 115, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 105, 115, 112, 108, 97, 121, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 118, 101, 114, 115, 105, 111, 110, 32, 110, 117, 109, 98, 101, 114, 32, > 97, 110, 100, 32, 101, 120, 105, 116, 46, 10, 118, 101, 114, 115, 105, 111, > 110, 32, 58, 10, 45, 118, 32, 45, 32, 45, 95, 95, 104, 101, 108, 112, > 95, 104, 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, 91, 93, 32, > 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 34, 10, 118, 32, 58, > 10, 45, 118, 101, 114, 115, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 58, 32, 73, 110, 112, 117, 116, 115, 47, 111, 117, 116, 112, 117, > 116, 115, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, > 99, 97, 109, 101, 114, 97, 32, 58, 32, 95, 99, 111, 109, 109, 97, 110, > 100, 44, 95, 99, 97, 109, 101, 114, 97, 95, 105, 110, 100, 101, 120, 62, > 61, 48, 44, 95, 115, 107, 105, 112, 95, 102, 114, 97, 109, 101, 115, 62, > 61, 48, 44, 95, 111, 117, 116, 112, 117, 116, 95, 102, 105, 108, 101, 110, > 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 111, 110, 32, 108, 105, 118, 101, 32, 99, 97, 109, > 101, 114, 97, 32, 115, 116, 114, 101, 97, 109, 44, 32, 97, 110, 100, 32, > 100, 105, 115, 112, 108, 97, 121, 32, 105, 116, 32, 111, 110, 32, 100, 105, > 115, 112, 108, 97, 121, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 109, 109, > 97, 110, 100, 61, 34, 34, 39, 44, 32, 39, 99, 97, 109, 101, 114, 97, > 95, 105, 110, 100, 101, 120, 61, 48, 39, 32, 40, 100, 101, 102, 97, 117, > 108, 116, 32, 99, 97, 109, 101, 114, 97, 41, 44, 32, 39, 115, 107, 105, > 112, 95, 102, 114, 97, 109, 101, 115, 61, 48, 39, 32, 97, 110, 100, 32, > 39, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 39, 46, 10, 97, > 112, 112, 108, 121, 95, 99, 97, 109, 101, 114, 97, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 123, 49, 61, 125, 44, 36, 123, 52, 61, 125, > 34, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 125, 62, 61, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, > 32, 99, 97, 109, 101, 114, 97, 32, 115, 116, 114, 101, 97, 109, 32, 92, > 35, 36, 50, 44, 32, 119, 105, 116, 104, 32, 36, 51, 32, 102, 114, 97, > 109, 101, 115, 32, 115, 107, 105, 112, 32, 97, 110, 100, 32, 102, 105, 108, > 101, 110, 97, 109, 101, 32, 39, 36, 52, 39, 46, 34, 32, 45, 118, 32, > 45, 10, 45, 108, 91, 93, 32, 102, 114, 97, 109, 101, 61, 48, 32, 45, > 100, 111, 10, 45, 99, 97, 109, 101, 114, 97, 32, 36, 50, 44, 49, 44, > 36, 51, 32, 36, 49, 32, 45, 119, 91, 45, 49, 93, 32, 45, 49, 44, > 45, 49, 44, 34, 40, 67, 97, 109, 101, 114, 97, 32, 34, 36, 115, 116, > 114, 101, 97, 109, 34, 44, 32, 34, 123, 119, 125, 120, 123, 104, 125, 34, > 41, 34, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 52, > 34, 41, 125, 32, 45, 111, 91, 45, 49, 93, 32, 64, 123, 45, 102, 105, > 108, 101, 110, 97, 109, 101, 92, 32, 34, 36, 52, 34, 44, 36, 102, 114, > 97, 109, 101, 125, 32, 102, 114, 97, 109, 101, 61, 123, 36, 102, 114, 97, > 109, 101, 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 64, 123, 33, 44, 83, 125, 32, 45, 111, 91, 45, 49, 93, 32, 103, > 109, 105, 99, 95, 99, 97, 109, 101, 114, 97, 46, 112, 110, 103, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, > 38, 38, 32, 34, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 64, 123, 33, 44, 119, 125, 42, 49, 46, 53, 125, 44, 123, 64, > 123, 33, 44, 104, 125, 42, 49, 46, 53, 125, 32, 45, 119, 97, 105, 116, > 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, > 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 67, 125, 125, > 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, 47, 49, 46, > 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 47, 49, 46, 53, 125, 32, > 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, > 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, > 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, > 33, 44, 82, 125, 125, 32, 45, 119, 91, 93, 32, 64, 123, 48, 44, 119, > 125, 44, 64, 123, 48, 44, 104, 125, 32, 45, 119, 97, 105, 116, 32, 45, > 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, > 33, 64, 123, 33, 44, 81, 125, 125, 32, 45, 99, 97, 109, 101, 114, 97, > 32, 36, 50, 44, 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, 102, 105, > 108, 101, 115, 32, 58, 32, 34, 99, 111, 109, 109, 97, 110, 100, 34, 44, > 108, 105, 115, 116, 95, 111, 102, 95, 102, 105, 108, 101, 110, 97, 109, 101, > 115, 44, 95, 111, 117, 116, 112, 117, 116, 95, 112, 114, 101, 102, 105, 120, > 44, 95, 111, 117, 116, 112, 117, 116, 95, 101, 120, 116, 101, 110, 115, 105, > 111, 110, 44, 95, 118, 105, 101, 119, 95, 119, 105, 110, 100, 111, 119, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, 32, 97, 108, > 108, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 102, 105, 108, 101, 115, 44, 32, 98, 121, 32, 114, 101, 97, 100, > 105, 110, 103, 32, 116, 104, 101, 109, 32, 111, 110, 101, 32, 98, 121, 32, > 111, 110, 101, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 97, 110, > 100, 32, 115, 97, 118, 101, 32, 114, 101, 115, 117, 108, 116, 32, 98, 121, > 32, 97, 112, 112, 101, 110, 100, 105, 110, 103, 32, 39, 111, 117, 116, 112, > 117, 116, 95, 112, 114, 101, 102, 105, 120, 39, 32, 116, 111, 32, 101, 97, > 99, 104, 32, 111, 114, 105, 103, 105, 110, 97, 108, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 108, 105, 115, 116, 95, 111, 102, 95, 102, 105, 108, 101, 110, 97, 109, 101, > 115, 39, 32, 109, 117, 115, 116, 32, 98, 101, 32, 116, 104, 101, 32, 108, > 105, 115, 116, 32, 111, 102, 32, 102, 105, 108, 101, 110, 97, 109, 101, 115, > 44, 32, 115, 101, 112, 97, 114, 97, 116, 101, 100, 32, 98, 121, 32, 115, > 112, 97, 99, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, > 104, 117, 115, 44, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 99, 97, 110, 110, 111, 116, > 32, 99, 111, 110, 116, 97, 105, 110, 32, 97, 32, 115, 112, 97, 99, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, > 111, 117, 116, 112, 117, 116, 95, 101, 120, 116, 101, 110, 115, 105, 111, 110, > 39, 32, 105, 115, 32, 115, 101, 116, 44, 32, 116, 104, 101, 32, 111, 117, > 116, 112, 117, 116, 32, 102, 105, 108, 101, 115, 32, 97, 114, 101, 32, 119, > 114, 105, 116, 116, 101, 110, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, 116, 101, 110, > 115, 105, 111, 110, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, > 107, 101, 101, 112, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 116, 104, 101, 32, 111, 114, 105, 103, 105, 110, 97, 108, 32, 111, 110, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 111, 117, 116, 112, > 117, 116, 95, 112, 114, 101, 102, 105, 120, 61, 103, 109, 105, 99, 95, 39, > 44, 32, 39, 111, 117, 116, 112, 117, 116, 95, 101, 120, 116, 101, 110, 115, > 105, 111, 110, 61, 34, 34, 39, 32, 97, 110, 100, 32, 39, 118, 105, 101, > 119, 95, 119, 105, 110, 100, 111, 119, 61, 48, 39, 46, 10, 97, 112, 112, > 108, 121, 95, 102, 105, 108, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 51, 61, 103, 109, 105, 99, 95, 125, 34, 44, 34, 36, > 123, 52, 61, 125, 34, 44, 36, 123, 53, 61, 48, 125, 10, 45, 118, 32, > 45, 10, 40, 123, 39, 34, 36, 50, 34, 39, 125, 41, 32, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 50, 32, 45, 114, > 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, 51, 50, 44, 123, 39, > 44, 39, 125, 32, 102, 105, 108, 101, 115, 61, 64, 123, 45, 117, 92, 32, > 64, 123, 45, 49, 44, 116, 125, 125, 10, 45, 105, 102, 32, 123, 119, 62, > 49, 50, 56, 125, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 49, 50, > 55, 32, 115, 95, 102, 105, 108, 101, 115, 61, 64, 123, 45, 49, 44, 116, > 125, 46, 46, 46, 32, 45, 101, 108, 115, 101, 32, 115, 95, 102, 105, 108, > 101, 115, 61, 36, 102, 105, 108, 101, 115, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 32, 34, 95, 97, 112, > 112, 108, 121, 95, 102, 105, 108, 101, 115, 32, 58, 32, 36, 34, 34, 61, > 95, 102, 105, 108, 101, 32, 95, 110, 98, 95, 102, 105, 108, 101, 115, 61, > 36, 34, 34, 35, 34, 32, 45, 95, 97, 112, 112, 108, 121, 95, 102, 105, > 108, 101, 115, 32, 36, 102, 105, 108, 101, 115, 32, 45, 117, 110, 99, 111, > 109, 109, 97, 110, 100, 32, 95, 97, 112, 112, 108, 121, 95, 102, 105, 108, > 101, 115, 10, 45, 109, 32, 34, 95, 97, 112, 112, 108, 121, 95, 102, 105, > 108, 101, 115, 32, 58, 32, 36, 49, 34, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 102, 105, > 108, 101, 115, 32, 39, 34, 36, 115, 95, 102, 105, 108, 101, 115, 34, 39, > 32, 97, 110, 100, 32, 115, 97, 118, 101, 32, 114, 101, 115, 117, 108, 116, > 32, 119, 105, 116, 104, 32, 112, 114, 101, 102, 105, 120, 32, 39, 36, 51, > 39, 46, 92, 110, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 95, 110, 98, 95, 102, 105, 108, 101, 115, 32, 45, 108, > 91, 93, 10, 102, 105, 108, 101, 61, 36, 123, 95, 102, 105, 108, 101, 123, > 36, 62, 43, 49, 125, 125, 10, 95, 102, 105, 108, 101, 61, 64, 123, 45, > 98, 97, 115, 101, 110, 97, 109, 101, 92, 32, 36, 102, 105, 108, 101, 125, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 52, 34, 41, > 125, 32, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 95, 102, 105, > 108, 101, 32, 111, 117, 116, 112, 117, 116, 95, 102, 105, 108, 101, 61, 34, > 36, 51, 34, 64, 123, 45, 49, 44, 98, 125, 46, 34, 36, 52, 34, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 111, 117, > 116, 112, 117, 116, 95, 102, 105, 108, 101, 61, 34, 36, 51, 34, 36, 95, > 102, 105, 108, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 45, 32, 73, 109, 97, 103, > 101, 32, 34, 123, 49, 43, 36, 62, 125, 47, 36, 95, 110, 98, 95, 102, > 105, 108, 101, 115, 34, 32, 91, 34, 36, 95, 102, 105, 108, 101, 34, 93, > 32, 45, 62, 32, 91, 34, 36, 111, 117, 116, 112, 117, 116, 95, 102, 105, > 108, 101, 34, 93, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 34, 32, 45, 118, 32, 45, 10, 36, > 102, 105, 108, 101, 32, 45, 95, 97, 112, 112, 108, 121, 95, 102, 105, 108, > 101, 115, 10, 45, 111, 32, 36, 111, 117, 116, 112, 117, 116, 95, 102, 105, > 108, 101, 10, 45, 105, 102, 32, 36, 53, 32, 45, 119, 91, 45, 49, 93, > 32, 64, 123, 45, 102, 105, 116, 115, 99, 114, 101, 101, 110, 92, 32, 123, > 119, 125, 44, 123, 104, 125, 44, 123, 100, 125, 125, 44, 49, 44, 48, 44, > 45, 49, 44, 45, 49, 44, 36, 95, 102, 105, 108, 101, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 10, 45, 111, 110, 102, 97, 105, 108, 32, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, 45, 32, > 69, 114, 114, 111, 114, 32, 111, 99, 99, 117, 114, 101, 100, 32, 111, 110, > 32, 102, 105, 108, 101, 32, 39, 34, 36, 102, 105, 108, 101, 34, 39, 46, > 92, 110, 34, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, 32, > 95, 97, 112, 112, 108, 121, 95, 102, 105, 108, 101, 115, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 97, 109, 101, 114, 97, 32, > 58, 32, 95, 99, 97, 109, 101, 114, 97, 95, 105, 110, 100, 101, 120, 62, > 61, 48, 44, 95, 110, 98, 95, 102, 114, 97, 109, 101, 115, 62, 48, 44, > 95, 115, 107, 105, 112, 95, 102, 114, 97, 109, 101, 115, 62, 61, 48, 44, > 95, 99, 97, 112, 116, 117, 114, 101, 95, 119, 105, 100, 116, 104, 62, 61, > 48, 44, 95, 99, 97, 112, 116, 117, 114, 101, 95, 104, 101, 105, 103, 104, > 116, 62, 61, 48, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, 111, 110, 101, 32, 111, > 114, 32, 115, 101, 118, 101, 114, 97, 108, 32, 102, 114, 97, 109, 101, 115, > 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 97, 109, 101, 114, 97, 44, 32, 119, 105, 116, 104, 32, 99, 117, 115, > 116, 111, 109, 32, 100, 101, 108, 97, 121, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 102, 114, 97, 109, 101, 115, 32, 40, 105, 110, 32, 109, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 104, 101, 110, 32, > 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 61, 48, 39, 44, 32, > 116, 104, 101, 32, 99, 97, 109, 101, 114, 97, 32, 115, 116, 114, 101, 97, > 109, 32, 105, 115, 32, 114, 101, 108, 101, 97, 115, 101, 100, 32, 105, 110, > 115, 116, 101, 97, 100, 32, 111, 102, 32, 99, 97, 112, 116, 117, 114, 105, > 110, 103, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 97, 109, 101, 114, 97, 95, > 105, 110, 100, 101, 120, 61, 48, 39, 32, 40, 100, 101, 102, 97, 117, 108, > 116, 32, 99, 97, 109, 101, 114, 97, 41, 44, 32, 39, 110, 98, 95, 102, > 114, 97, 109, 101, 115, 61, 49, 39, 44, 32, 39, 115, 107, 105, 112, 95, > 102, 114, 97, 109, 101, 115, 61, 48, 39, 32, 97, 110, 100, 32, 39, 99, > 97, 112, 116, 117, 114, 101, 95, 119, 105, 100, 116, 104, 61, 99, 97, 112, > 116, 117, 114, 101, 95, 104, 101, 105, 103, 104, 116, 61, 48, 39, 32, 40, > 100, 101, 102, 97, 117, 108, 116, 32, 115, 105, 122, 101, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 109, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 99, 111, 109, 109, 97, 110, 100, 39, 46, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 58, 32, 95, 97, 100, 100, 95, 100, 101, 98, 117, 103, 95, 105, > 110, 102, 111, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 123, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 32, 124, 32, 104, 116, 116, 112, 91, > 115, 93, 58, 47, 47, 85, 82, 76, 32, 124, 32, 34, 115, 116, 114, 105, > 110, 103, 34, 32, 125, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 109, 112, 111, 114, 116, 32, 71, 39, 77, 73, > 67, 32, 99, 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, > 115, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 102, 105, 108, 101, 44, 32, 85, 82, 76, 32, 111, 114, 32, 115, 116, > 114, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 73, 109, 112, 111, 114, 116, 101, 100, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 32, 97, 114, 101, 32, 97, 118, 97, > 105, 108, 97, 98, 108, 101, 32, 100, 105, 114, 101, 99, 116, 108, 121, 32, > 97, 102, 116, 101, 114, 32, 116, 104, 101, 32, 39, 45, 99, 111, 109, 109, > 97, 110, 100, 39, 32, 105, 110, 118, 111, 99, 97, 116, 105, 111, 110, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 100, 100, 95, 100, 101, > 98, 117, 103, 95, 105, 110, 102, 111, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 99, 111, 109, 109, 97, 110, 100, 32, 34, 102, 111, 111, 32, > 58, 32, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 100, 101, 102, > 111, 114, 109, 32, 36, 34, 34, 49, 34, 32, 45, 45, 102, 111, 111, 91, > 48, 93, 32, 53, 32, 45, 45, 102, 111, 111, 91, 48, 93, 32, 49, 53, > 10, 117, 112, 100, 97, 116, 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, > 95, 104, 116, 109, 108, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 116, 117, 116, 111, 114, 105, 97, 108, 32, 102, 114, 111, 109, 32, 71, > 97, 114, 114, 121, 32, 79, 115, 103, 111, 111, 100, 92, 52, 55, 115, 32, > 98, 108, 111, 103, 32, 40, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, > 46, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, > 111, 109, 41, 44, 32, 102, 111, 114, 32, 116, 104, 101, 32, 71, 92, 52, > 55, 77, 73, 67, 32, 119, 101, 98, 32, 112, 97, 103, 101, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 109, 32, 45, 109, 32, 34, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 58, 32, 45, 95, 95, 117, 112, 100, 97, 116, > 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, 32, > 36, 34, 34, 42, 34, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, > 47, 44, 49, 55, 48, 48, 44, 105, 110, 100, 101, 120, 44, 95, 105, 110, > 100, 101, 120, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 97, > 115, 105, 99, 115, 44, 52, 48, 48, 48, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, > 111, 107, 98, 111, 111, 107, 44, 49, 48, 48, 48, 10, 45, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, > 99, 111, 111, 107, 98, 111, 111, 107, 47, 99, 97, 117, 108, 100, 114, 111, > 110, 44, 51, 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 114, 97, 109, 112, 115, 44, 49, 50, 48, 48, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, > 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, > 115, 47, 97, 112, 112, 108, 121, 105, 110, 103, 45, 97, 45, 99, 117, 114, > 118, 101, 44, 54, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, 98, 108, 117, 114, 114, 105, > 110, 103, 44, 54, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, 103, 101, 110, 101, 114, 97, > 108, 45, 114, 97, 109, 112, 115, 44, 50, 53, 48, 48, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, > 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, > 105, 110, 112, 117, 116, 45, 97, 110, 100, 45, 102, 105, 108, 108, 44, 49, > 50, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, > 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, > 47, 114, 97, 109, 112, 115, 47, 111, 110, 101, 45, 100, 105, 109, 101, 110, > 115, 105, 111, 110, 97, 108, 45, 102, 117, 110, 99, 116, 105, 111, 110, 115, > 44, 56, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, > 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, > 107, 47, 114, 97, 109, 112, 115, 47, 114, 101, 109, 97, 112, 112, 105, 110, > 103, 45, 115, 112, 97, 99, 101, 44, 50, 50, 48, 48, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, > 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, > 114, 101, 115, 105, 122, 105, 110, 103, 44, 54, 48, 48, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, > 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, 97, 109, 112, 115, 47, > 119, 97, 114, 112, 44, 56, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, > 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, > 111, 110, 44, 49, 48, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, > 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, > 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, > 110, 47, 103, 114, 97, 100, 117, 97, 116, 101, 100, 45, 98, 108, 117, 114, > 115, 44, 51, 56, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, > 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, 110, > 47, 118, 97, 114, 105, 97, 116, 105, 111, 110, 115, 45, 111, 110, 45, 97, > 45, 116, 104, 101, 109, 101, 44, 51, 56, 48, 48, 10, 45, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, > 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 47, 101, 105, 103, 101, 110, 118, 97, 108, 117, 101, > 115, 45, 97, 110, 100, 45, 101, 105, 103, 101, 110, 118, 101, 99, 116, 111, > 114, 115, 44, 50, 51, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, > 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, > 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, > 110, 47, 100, 105, 114, 101, 99, 116, 105, 111, 110, 97, 108, 45, 98, 108, > 117, 114, 114, 105, 110, 103, 44, 51, 53, 48, 48, 10, 45, 97, 100, 100, > 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, 114, 115, 45, > 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 47, 116, 101, 110, 115, 111, 114, 115, 45, 102, 111, > 114, 45, 116, 104, 101, 45, 116, 111, 110, 115, 111, 114, 105, 97, 108, 108, > 121, 45, 99, 104, 97, 108, 108, 101, 110, 103, 101, 100, 44, 56, 53, 48, > 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, > 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, > 121, 105, 100, 105, 102, 102, 117, 115, 105, 111, 110, 47, 101, 105, 103, 101, > 110, 45, 116, 104, 105, 110, 103, 121, 115, 44, 52, 56, 48, 48, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, 110, 101, > 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 100, 121, 105, 100, > 105, 102, 102, 117, 115, 105, 111, 110, 47, 102, 97, 107, 101, 45, 100, 101, > 112, 116, 104, 45, 111, 102, 45, 102, 105, 101, 108, 100, 44, 55, 54, 48, > 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, > 110, 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 114, > 111, 97, 100, 45, 115, 121, 115, 116, 101, 109, 115, 44, 50, 53, 48, 48, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 98, 101, 103, 105, 110, > 110, 101, 114, 115, 45, 99, 111, 111, 107, 98, 111, 111, 107, 47, 115, 116, > 97, 105, 110, 101, 100, 45, 103, 108, 97, 115, 115, 44, 52, 48, 48, 48, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, > 110, 100, 45, 100, 101, 99, 111, 114, 97, 116, 105, 111, 110, 115, 44, 51, > 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 105, 109, > 97, 103, 101, 115, 44, 49, 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 105, 109, 97, 103, 101, 115, 47, 99, 111, 110, 106, 117, > 114, 105, 110, 103, 45, 105, 109, 97, 103, 101, 115, 44, 49, 48, 48, 48, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 105, 109, 97, 103, 101, > 115, 47, 105, 109, 97, 103, 101, 115, 45, 97, 115, 45, 100, 97, 116, 97, > 115, 101, 116, 115, 44, 51, 53, 48, 48, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 105, 109, 97, 103, 101, 115, 47, 105, 109, 97, 103, 101, > 115, 45, 104, 97, 118, 101, 45, 101, 100, 103, 101, 115, 44, 49, 50, 48, > 48, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 103, 117, 105, 100, 101, 44, 53, 53, 48, 48, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 45, 103, 117, 105, 100, 101, 47, 45, 100, 105, 115, 112, 108, 97, 121, 44, > 50, 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, > 105, 110, 112, 117, 116, 115, 45, 111, 117, 116, 112, 117, 116, 115, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 45, 103, 117, 105, 100, 101, 47, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 116, 101, 110, 115, 111, 114, 115, 44, 49, 53, 48, 48, 44, 44, 44, 99, > 111, 109, 109, 97, 110, 100, 115, 45, 105, 110, 112, 117, 116, 115, 45, 111, > 117, 116, 112, 117, 116, 115, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, > 105, 110, 112, 117, 116, 44, 53, 53, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 105, 110, 112, 117, 116, 115, 45, 111, 117, 116, > 112, 117, 116, 115, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, > 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 116, 114, 105, > 103, 111, 109, 101, 116, 114, 105, 99, 45, 97, 110, 100, 45, 105, 110, 118, > 101, 114, 115, 101, 45, 116, 114, 105, 103, 111, 109, 101, 116, 114, 105, 99, > 45, 99, 111, 109, 109, 97, 110, 100, 115, 44, 50, 53, 48, 48, 44, 44, > 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, > 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, > 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, > 103, 117, 105, 100, 101, 47, 45, 101, 105, 103, 101, 110, 50, 116, 101, 110, > 115, 111, 114, 44, 49, 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, > 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, 45, 109, 97, 110, 105, 112, > 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, 103, > 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, > 45, 110, 111, 114, 109, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, > 97, 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, 45, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, > 47, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 44, 49, 55, 48, 48, > 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 118, 97, 108, 117, > 101, 115, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 44, 53, 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, > 97, 110, 100, 115, 45, 118, 97, 108, 117, 101, 115, 45, 109, 97, 110, 105, > 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, > 47, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 44, 49, 53, 48, 48, > 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 118, 97, 108, 117, > 101, 115, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 44, 49, 48, 48, 48, 44, 44, > 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 99, 111, 108, 111, 114, 115, > 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, > 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, > 103, 117, 105, 100, 101, 47, 45, 109, 105, 120, 95, 114, 103, 98, 44, 52, > 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 99, > 111, 108, 111, 114, 115, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, > 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 115, 101, 108, 101, > 99, 116, 95, 99, 111, 108, 111, 114, 44, 51, 48, 48, 48, 44, 44, 44, > 99, 111, 109, 109, 97, 110, 100, 115, 45, 99, 111, 108, 111, 114, 115, 45, > 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, > 117, 105, 100, 101, 47, 45, 119, 97, 114, 112, 44, 53, 48, 48, 48, 44, > 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 103, 101, 111, 109, 101, > 116, 114, 121, 45, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, > 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 97, 110, 100, 112, 97, > 115, 115, 44, 53, 48, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, > 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, > 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, > 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 44, 50, 48, 48, 48, 44, > 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, > 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, > 117, 114, 95, 97, 110, 103, 117, 108, 97, 114, 44, 55, 48, 48, 44, 44, > 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, > 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, > 114, 95, 108, 105, 110, 101, 97, 114, 44, 55, 48, 48, 44, 44, 44, 99, > 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, > 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, > 114, 97, 100, 105, 97, 108, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, 115, 101, > 108, 101, 99, 116, 105, 118, 101, 44, 51, 53, 48, 48, 44, 44, 44, 99, > 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, > 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, > 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, > 120, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, > 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, > 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, > 100, 101, 47, 45, 98, 108, 117, 114, 95, 120, 121, 44, 55, 48, 48, 44, > 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, > 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, > 117, 114, 95, 120, 121, 122, 44, 55, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, > 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 45, 103, 117, 105, 100, 101, 47, 45, 98, 108, 117, 114, 95, 121, 44, > 55, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, > 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, > 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, > 47, 45, 98, 108, 117, 114, 95, 122, 44, 50, 53, 48, 48, 44, 44, 44, > 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, > 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 44, 51, 53, 48, 48, 44, 44, 44, 99, 111, 109, 109, > 97, 110, 100, 115, 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, > 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 45, 103, 117, 105, 100, 101, 47, 45, 100, 101, 114, 105, 99, 104, 101, 44, > 49, 53, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, > 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, > 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, > 101, 47, 45, 103, 114, 97, 100, 105, 101, 110, 116, 44, 50, 48, 48, 48, > 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, 116, > 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, > 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 103, > 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 44, 49, 51, 48, > 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 105, 108, > 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, > 115, 116, 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, 111, 114, 115, > 44, 51, 51, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, > 45, 102, 105, 108, 116, 101, 114, 105, 110, 103, 10, 45, 97, 100, 100, 95, > 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, 110, 100, 45, 103, 117, 105, > 100, 101, 47, 45, 100, 105, 115, 116, 97, 110, 99, 101, 44, 57, 53, 48, > 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, 102, 101, 97, > 116, 117, 114, 101, 115, 45, 101, 120, 116, 114, 97, 99, 116, 105, 111, 110, > 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, 109, 109, 97, > 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 108, 97, 98, 101, 108, 44, > 49, 51, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, 110, 100, 115, 45, > 102, 101, 97, 116, 117, 114, 101, 115, 45, 101, 120, 116, 114, 97, 99, 116, > 105, 111, 110, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, > 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 103, 97, 117, > 115, 115, 105, 97, 110, 44, 50, 48, 48, 48, 44, 44, 44, 99, 111, 109, > 109, 97, 110, 100, 115, 45, 105, 109, 97, 103, 101, 45, 100, 114, 97, 119, > 105, 110, 103, 10, 45, 97, 100, 100, 95, 112, 97, 103, 101, 32, 99, 111, > 109, 109, 97, 110, 100, 45, 103, 117, 105, 100, 101, 47, 45, 112, 108, 97, > 115, 109, 97, 44, 52, 53, 48, 48, 44, 44, 44, 99, 111, 109, 109, 97, > 110, 100, 115, 45, 105, 109, 97, 103, 101, 45, 100, 114, 97, 119, 105, 110, > 103, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, > 32, 42, 32, 80, 114, 101, 112, 97, 114, 101, 32, 102, 111, 108, 100, 101, > 114, 32, 115, 116, 114, 117, 99, 116, 117, 114, 101, 46, 34, 32, 45, 118, > 32, 45, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, > 47, 116, 117, 116, 111, 114, 105, 97, 108, 46, 99, 115, 115, 32, 46, 34, > 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 99, > 111, 112, 121, 114, 105, 103, 104, 116, 46, 104, 116, 109, 108, 32, 46, 34, > 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 102, > 97, 118, 105, 99, 111, 110, 46, 105, 99, 111, 32, 46, 34, 10, 45, 120, > 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 102, 97, 118, 105, > 99, 111, 110, 46, 112, 110, 103, 32, 46, 34, 10, 45, 120, 32, 34, 108, > 110, 32, 45, 102, 115, 32, 46, 46, 47, 102, 111, 111, 116, 101, 114, 46, > 104, 116, 109, 108, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, > 102, 115, 32, 46, 46, 47, 104, 101, 97, 100, 101, 114, 46, 104, 116, 109, > 108, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, > 46, 46, 47, 104, 101, 97, 100, 101, 114, 46, 99, 115, 115, 32, 46, 34, > 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 106, > 113, 117, 101, 114, 121, 45, 49, 46, 49, 49, 46, 48, 46, 109, 105, 110, > 46, 106, 115, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, > 115, 32, 46, 46, 47, 105, 109, 97, 103, 101, 115, 32, 46, 34, 10, 45, > 120, 32, 34, 109, 107, 100, 105, 114, 32, 45, 112, 32, 105, 109, 103, 34, > 10, 45, 120, 32, 34, 99, 100, 32, 105, 109, 103, 32, 38, 38, 32, 108, > 110, 32, 45, 102, 115, 32, 46, 46, 47, 46, 46, 47, 105, 109, 103, 47, > 108, 111, 103, 111, 52, 46, 106, 112, 103, 32, 46, 34, 10, 45, 120, 32, > 34, 99, 100, 32, 105, 109, 103, 32, 38, 38, 32, 108, 110, 32, 45, 102, > 115, 32, 46, 46, 47, 46, 46, 47, 105, 109, 103, 47, 108, 111, 103, 111, > 115, 46, 106, 112, 103, 32, 46, 34, 10, 45, 120, 32, 34, 99, 100, 32, > 105, 109, 103, 32, 38, 38, 32, 108, 110, 32, 45, 102, 115, 32, 46, 46, > 47, 46, 46, 47, 105, 109, 103, 47, 114, 115, 115, 46, 112, 110, 103, 32, > 46, 34, 10, 45, 120, 32, 34, 99, 100, 32, 105, 109, 103, 32, 38, 38, > 32, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 46, 46, 47, 99, 111, > 110, 118, 101, 114, 116, 95, 114, 97, 119, 95, 105, 109, 103, 47, 42, 32, > 46, 34, 10, 45, 120, 32, 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, > 47, 99, 111, 110, 118, 101, 114, 116, 95, 114, 97, 119, 46, 104, 116, 109, > 108, 32, 46, 46, 47, 99, 111, 110, 118, 101, 114, 116, 95, 114, 97, 119, > 46, 115, 104, 116, 109, 108, 32, 46, 34, 10, 45, 120, 32, 34, 108, 110, > 32, 45, 102, 115, 32, 46, 46, 47, 116, 117, 116, 111, 114, 105, 97, 108, > 95, 116, 111, 99, 46, 104, 116, 109, 108, 32, 46, 34, 10, 45, 120, 32, > 34, 108, 110, 32, 45, 102, 115, 32, 46, 46, 47, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 32, 46, 34, 10, 49, 49, 44, 49, 49, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, > 44, 48, 32, 45, 108, 105, 110, 101, 32, 51, 44, 53, 48, 37, 44, 123, > 119, 45, 52, 125, 44, 53, 48, 37, 44, 49, 44, 48, 32, 45, 45, 108, > 105, 110, 101, 32, 53, 48, 37, 44, 51, 44, 53, 48, 37, 44, 123, 104, > 45, 52, 125, 44, 49, 44, 48, 10, 45, 97, 32, 120, 32, 45, 111, 32, > 105, 109, 103, 47, 116, 111, 99, 95, 98, 117, 116, 116, 111, 110, 115, 46, > 112, 110, 103, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 52, 32, 45, 102, 99, 91, 45, 49, 93, 32, 50, 52, 53, 44, 50, 52, > 53, 44, 50, 52, 53, 44, 48, 32, 45, 111, 91, 45, 49, 93, 32, 105, > 109, 103, 47, 116, 111, 99, 95, 118, 111, 105, 100, 46, 112, 110, 103, 10, > 45, 114, 109, 10, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, > 78, 10, 45, 111, 91, 45, 49, 93, 32, 36, 123, 95, 111, 117, 116, 112, > 117, 116, 95, 104, 116, 109, 108, 36, 62, 125, 32, 45, 111, 91, 45, 49, > 93, 32, 36, 123, 95, 111, 117, 116, 112, 117, 116, 95, 115, 104, 116, 109, > 108, 36, 62, 125, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 78, 10, 45, > 118, 32, 43, 32, 45, 95, 117, 112, 100, 97, 116, 101, 95, 116, 117, 116, > 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, 91, 93, 32, 36, 123, 95, > 105, 110, 112, 117, 116, 36, 62, 125, 44, 36, 123, 95, 104, 101, 105, 103, > 104, 116, 36, 62, 125, 44, 36, 123, 95, 111, 117, 116, 112, 117, 116, 95, > 115, 104, 116, 109, 108, 36, 62, 125, 44, 36, 123, 95, 111, 117, 116, 112, > 117, 116, 95, 104, 116, 109, 108, 36, 62, 125, 44, 36, 123, 95, 105, 109, > 103, 95, 112, 114, 101, 102, 105, 120, 36, 62, 125, 44, 36, 123, 95, 116, > 111, 99, 105, 100, 36, 62, 125, 32, 45, 118, 32, 45, 10, 45, 100, 111, > 110, 101, 10, 45, 120, 32, 34, 114, 109, 32, 45, 102, 32, 95, 95, 116, > 109, 112, 46, 104, 116, 109, 108, 34, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 32, 32, 42, 32, 65, 108, 108, 32, 100, 111, 110, 101, > 32, 33, 46, 92, 110, 92, 110, 34, 10, 95, 95, 117, 112, 100, 97, 116, > 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 34, 34, 125, 44, > 36, 123, 52, 61, 34, 34, 125, 44, 36, 123, 53, 61, 34, 34, 125, 10, > 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 95, 78, 41, 125, > 32, 95, 78, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 95, 105, 110, > 112, 117, 116, 36, 95, 78, 61, 36, 49, 32, 95, 104, 101, 105, 103, 104, > 116, 36, 95, 78, 61, 36, 50, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 34, 36, 53, 34, 41, 125, 32, 95, 116, 111, 99, 105, 100, 36, > 95, 78, 61, 34, 36, 53, 34, 10, 45, 101, 108, 115, 101, 10, 40, 123, > 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 115, 32, 45, 44, 123, 39, > 47, 39, 125, 32, 45, 105, 102, 32, 64, 35, 32, 95, 116, 111, 99, 105, > 100, 36, 95, 78, 61, 64, 123, 48, 44, 116, 125, 32, 45, 114, 109, 32, > 45, 101, 108, 115, 101, 32, 95, 116, 111, 99, 105, 100, 36, 95, 78, 61, > 105, 110, 100, 101, 120, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 105, 102, 10, 111, 117, 116, 112, 117, 116, 95, 98, 97, 115, 101, 61, > 64, 123, 34, 45, 98, 97, 115, 101, 110, 97, 109, 101, 32, 36, 49, 34, > 125, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 111, 117, 116, > 112, 117, 116, 95, 98, 97, 115, 101, 41, 125, 10, 40, 123, 39, 36, 111, > 117, 116, 112, 117, 116, 95, 98, 97, 115, 101, 39, 125, 41, 32, 45, 105, > 102, 32, 123, 105, 61, 61, 123, 39, 45, 39, 125, 125, 32, 45, 61, 91, > 45, 49, 93, 32, 123, 39, 95, 39, 125, 32, 111, 117, 116, 112, 117, 116, > 95, 98, 97, 115, 101, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, > 51, 34, 41, 125, 32, 95, 111, 117, 116, 112, 117, 116, 95, 115, 104, 116, > 109, 108, 36, 95, 78, 61, 34, 36, 51, 34, 46, 115, 104, 116, 109, 108, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 104, 116, 109, 108, 36, 95, 78, > 61, 34, 36, 51, 34, 46, 104, 116, 109, 108, 32, 95, 105, 109, 103, 95, > 112, 114, 101, 102, 105, 120, 36, 95, 78, 61, 34, 36, 51, 34, 10, 45, > 101, 108, 115, 101, 32, 95, 111, 117, 116, 112, 117, 116, 95, 115, 104, 116, > 109, 108, 36, 95, 78, 61, 36, 111, 117, 116, 112, 117, 116, 95, 98, 97, > 115, 101, 46, 115, 104, 116, 109, 108, 32, 95, 111, 117, 116, 112, 117, 116, > 95, 104, 116, 109, 108, 36, 95, 78, 61, 36, 111, 117, 116, 112, 117, 116, > 95, 98, 97, 115, 101, 46, 104, 116, 109, 108, 32, 95, 105, 109, 103, 95, > 112, 114, 101, 102, 105, 120, 36, 95, 78, 61, 36, 111, 117, 116, 112, 117, > 116, 95, 98, 97, 115, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 52, 34, 41, 125, 32, 95, > 111, 117, 116, 112, 117, 116, 95, 104, 116, 109, 108, 36, 95, 78, 61, 34, > 36, 52, 34, 46, 104, 116, 109, 108, 32, 45, 101, 110, 100, 105, 102, 10, > 95, 78, 61, 123, 36, 95, 78, 43, 49, 125, 10, 95, 117, 112, 100, 97, > 116, 101, 95, 116, 117, 116, 111, 114, 105, 97, 108, 95, 104, 116, 109, 108, > 32, 58, 10, 45, 118, 32, 45, 10, 117, 114, 108, 61, 34, 104, 116, 116, > 112, 58, 47, 47, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, > 116, 46, 99, 111, 109, 47, 116, 111, 111, 108, 115, 45, 97, 110, 100, 45, > 116, 111, 121, 115, 47, 103, 109, 105, 99, 47, 36, 49, 34, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, 32, 42, 32, 67, > 111, 110, 118, 101, 114, 116, 32, 116, 117, 116, 111, 114, 105, 97, 108, 32, > 112, 97, 103, 101, 32, 39, 34, 36, 117, 114, 108, 34, 39, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, > 32, 32, 32, 32, 62, 32, 82, 101, 116, 114, 105, 101, 118, 101, 32, 112, > 97, 103, 101, 32, 39, 34, 36, 117, 114, 108, 34, 39, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 120, 32, 34, 119, 103, 101, 116, 32, 45, 113, 32, > 34, 36, 117, 114, 108, 34, 32, 45, 79, 32, 95, 95, 116, 109, 112, 46, > 104, 116, 109, 108, 34, 10, 45, 105, 32, 114, 97, 119, 58, 95, 95, 116, > 109, 112, 46, 104, 116, 109, 108, 44, 99, 104, 97, 114, 10, 45, 100, 105, > 115, 99, 97, 114, 100, 32, 49, 51, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 99, 108, 97, 115, 115, 61, 92, 34, 105, > 110, 116, 101, 114, 110, 97, 108, 92, 34, 32, 34, 10, 45, 114, 101, 112, > 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 99, 108, 97, 115, 115, 61, > 92, 34, 101, 120, 116, 101, 114, 110, 97, 108, 92, 34, 32, 34, 10, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 100, 105, 114, > 61, 92, 34, 108, 116, 114, 92, 34, 32, 34, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 34, 98, 111, 114, 100, 101, 114, 58, > 32, 49, 112, 120, 34, 44, 34, 98, 111, 114, 100, 101, 114, 58, 32, 48, > 112, 120, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 32, 34, 71, 92, 49, 52, 48, 77, 73, 67, 34, 44, 34, 71, 92, 52, > 55, 77, 73, 67, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, > 116, 114, 32, 34, 67, 78, 84, 76, 34, 44, 34, 67, 84, 82, 76, 34, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 82, > 97, 115, 104, 105, 100, 34, 44, 34, 82, 97, 99, 104, 105, 100, 34, 10, > 45, 115, 32, 43, 44, 123, 39, 60, 104, 49, 39, 125, 10, 45, 105, 102, > 32, 123, 64, 35, 62, 49, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 101, 108, 115, 101, 10, 45, 115, 32, 43, 44, 123, 39, 60, 104, 50, 39, > 125, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 10, 45, 114, 109, > 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 97, 32, 121, 10, 45, 115, 32, 43, 44, 123, 39, 34, 32, > 32, 32, 60, 47, 100, 105, 118, 62, 92, 110, 60, 47, 100, 105, 118, 62, > 92, 110, 60, 102, 111, 111, 116, 101, 114, 62, 34, 39, 125, 32, 45, 107, > 91, 48, 93, 10, 45, 105, 91, 48, 93, 32, 40, 123, 39, 34, 60, 33, > 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 34, 92, 110, > 92, 10, 34, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 92, 34, > 101, 110, 45, 117, 115, 92, 34, 62, 60, 104, 101, 97, 100, 62, 60, 109, > 101, 116, 97, 32, 104, 116, 116, 112, 45, 101, 113, 117, 105, 118, 61, 92, > 34, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 92, 34, 32, > 99, 111, 110, 116, 101, 110, 116, 61, 92, 34, 116, 101, 120, 116, 47, 104, > 116, 109, 108, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 85, 84, 70, > 45, 56, 92, 34, 62, 34, 92, 110, 92, 10, 34, 60, 108, 105, 110, 107, > 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, > 116, 92, 34, 32, 104, 114, 101, 102, 61, 92, 34, 116, 117, 116, 111, 114, > 105, 97, 108, 46, 99, 115, 115, 92, 34, 62, 34, 92, 110, 92, 10, 34, > 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, 101, 61, 92, 34, 116, > 101, 120, 116, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 92, 34, > 32, 115, 114, 99, 61, 92, 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, > 47, 104, 105, 103, 104, 115, 108, 105, 100, 101, 46, 106, 115, 92, 34, 62, > 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 92, 110, 92, 10, 34, 60, > 108, 105, 110, 107, 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, > 115, 104, 101, 101, 116, 92, 34, 32, 116, 121, 112, 101, 61, 92, 34, 116, > 101, 120, 116, 47, 99, 115, 115, 92, 34, 32, 104, 114, 101, 102, 61, 92, > 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 47, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 46, 99, 115, 115, 92, 34, 32, 47, 62, 34, 92, 110, > 92, 10, 34, 60, 115, 99, 114, 105, 112, 116, 32, 116, 121, 112, 101, 61, > 92, 34, 116, 101, 120, 116, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, > 116, 92, 34, 62, 34, 92, 110, 92, 10, 34, 104, 115, 46, 103, 114, 97, > 112, 104, 105, 99, 115, 68, 105, 114, 32, 61, 32, 39, 104, 105, 103, 104, > 115, 108, 105, 100, 101, 47, 103, 114, 97, 112, 104, 105, 99, 115, 47, 39, > 59, 34, 92, 110, 92, 10, 34, 104, 115, 46, 119, 114, 97, 112, 112, 101, > 114, 67, 108, 97, 115, 115, 78, 97, 109, 101, 32, 61, 32, 39, 119, 105, > 100, 101, 45, 98, 111, 114, 100, 101, 114, 39, 59, 34, 92, 110, 92, 10, > 34, 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 92, 110, 92, 10, 34, > 60, 98, 111, 100, 121, 62, 34, 92, 110, 92, 110, 39, 125, 41, 10, 40, > 123, 39, 92, 110, 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, > 108, 62, 39, 125, 41, 10, 45, 121, 32, 45, 97, 32, 121, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 92, 34, 47, 115, > 116, 97, 116, 105, 99, 47, 109, 101, 100, 105, 97, 47, 117, 112, 108, 111, > 97, 100, 115, 47, 34, 44, 34, 92, 34, 104, 116, 116, 112, 58, 47, 47, > 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, 111, > 109, 47, 115, 116, 97, 116, 105, 99, 47, 109, 101, 100, 105, 97, 47, 117, > 112, 108, 111, 97, 100, 115, 47, 34, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 92, 34, 47, 116, 111, 111, 108, 115, 45, > 97, 110, 100, 45, 116, 111, 121, 115, 47, 103, 109, 105, 99, 47, 34, 44, > 34, 92, 34, 104, 116, 116, 112, 58, 47, 47, 112, 97, 114, 116, 105, 99, > 117, 108, 97, 114, 97, 114, 116, 46, 99, 111, 109, 47, 116, 111, 111, 108, > 115, 45, 97, 110, 100, 45, 116, 111, 121, 115, 47, 103, 109, 105, 99, 47, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 92, 34, 104, 116, 116, 112, 58, 47, 47, 112, 97, 114, 116, 105, 99, 117, > 108, 97, 114, 97, 114, 116, 46, 99, 111, 109, 47, 34, 44, 34, 92, 34, > 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 112, 97, 114, 116, 105, > 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, 111, 109, 47, 34, 10, 45, > 115, 32, 43, 44, 123, 39, 34, 60, 97, 32, 34, 39, 125, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 36, 62, > 62, 48, 34, 32, 38, 38, 32, 34, 123, 64, 123, 123, 36, 62, 45, 49, > 125, 44, 116, 125, 39, 61, 61, 39, 34, 60, 97, 32, 34, 125, 125, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 115, 32, 43, 44, 123, 39, 104, 114, > 101, 102, 61, 92, 34, 39, 125, 32, 45, 108, 91, 45, 49, 93, 10, 45, > 115, 32, 43, 44, 123, 39, 92, 34, 39, 125, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 48, 125, 10, 108, 105, 110, 107, 61, 64, 123, 48, 44, 116, > 125, 10, 40, 123, 39, 36, 108, 105, 110, 107, 39, 125, 41, 32, 45, 122, > 91, 45, 49, 93, 32, 48, 44, 52, 56, 32, 98, 97, 115, 101, 108, 105, > 110, 107, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 36, 98, 97, 115, 101, 108, 105, 110, > 107, 39, 61, 61, 39, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, > 46, 112, 97, 114, 116, 105, 99, 117, 108, 97, 114, 97, 114, 116, 46, 99, > 111, 109, 47, 116, 111, 111, 108, 115, 45, 97, 110, 100, 45, 116, 111, 121, > 115, 47, 103, 109, 105, 99, 47, 34, 125, 10, 45, 108, 91, 93, 32, 97, > 110, 99, 104, 111, 114, 61, 34, 34, 32, 40, 123, 39, 36, 108, 105, 110, > 107, 39, 125, 41, 32, 45, 115, 32, 43, 44, 123, 34, 39, 92, 35, 39, > 34, 125, 32, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 32, 97, 110, > 99, 104, 111, 114, 61, 35, 64, 123, 45, 49, 44, 116, 125, 32, 108, 105, > 110, 107, 61, 64, 123, 48, 44, 116, 125, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 10, 40, 123, 39, 36, 108, > 105, 110, 107, 39, 125, 41, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 91, 45, 49, 93, 32, 123, 39, 47, 39, 125, 10, 114, 101, 108, 105, 110, > 107, 61, 64, 123, 45, 98, 97, 115, 101, 110, 97, 109, 101, 92, 32, 64, > 123, 45, 49, 44, 116, 125, 125, 46, 115, 104, 116, 109, 108, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, > 39, 125, 41, 32, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 45, 39, > 125, 125, 32, 45, 61, 91, 45, 49, 93, 32, 123, 39, 95, 39, 125, 32, > 114, 101, 108, 105, 110, 107, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, > 102, 32, 36, 114, 101, 108, 105, 110, 107, 10, 114, 101, 108, 105, 110, 107, > 61, 36, 114, 101, 108, 105, 110, 107, 36, 97, 110, 99, 104, 111, 114, 10, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, > 32, 76, 111, 99, 97, 108, 32, 108, 105, 110, 107, 32, 39, 34, 36, 108, > 105, 110, 107, 36, 97, 110, 99, 104, 111, 114, 34, 39, 32, 114, 101, 108, > 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, 101, 108, 105, > 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 109, 91, > 48, 93, 32, 45, 105, 91, 48, 93, 32, 40, 123, 39, 36, 114, 101, 108, > 105, 110, 107, 39, 125, 41, 32, 45, 121, 91, 48, 93, 10, 45, 101, 108, > 115, 101, 10, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, 39, 125, 41, > 32, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 95, 39, 125, 125, 10, > 45, 108, 91, 45, 49, 93, 32, 45, 122, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 115, 32, 45, 44, 123, 39, 46, 39, 125, 32, 99, 111, 109, 109, > 97, 110, 100, 61, 64, 123, 45, 98, 97, 115, 101, 110, 97, 109, 101, 92, > 32, 64, 123, 48, 44, 116, 125, 125, 32, 45, 107, 91, 48, 93, 32, 45, > 101, 110, 100, 108, 10, 114, 101, 108, 105, 110, 107, 61, 34, 104, 116, 116, > 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, > 111, 114, 103, 101, 46, 110, 101, 116, 47, 114, 101, 102, 101, 114, 101, 110, > 99, 101, 46, 115, 104, 116, 109, 108, 35, 34, 36, 99, 111, 109, 109, 97, > 110, 100, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, > 32, 32, 62, 32, 76, 111, 99, 97, 108, 32, 108, 105, 110, 107, 32, 39, > 34, 36, 108, 105, 110, 107, 36, 97, 110, 99, 104, 111, 114, 34, 39, 32, > 114, 101, 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, > 101, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 114, 109, 91, 48, 93, 32, 45, 105, 91, 48, 93, 32, 40, 123, 39, 36, > 114, 101, 108, 105, 110, 107, 39, 125, 41, 32, 45, 121, 91, 48, 93, 10, > 45, 101, 108, 115, 101, 10, 114, 101, 108, 105, 110, 107, 61, 36, 108, 105, > 110, 107, 36, 97, 110, 99, 104, 111, 114, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, 76, 111, 99, 97, 108, > 32, 108, 105, 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 36, 97, 110, > 99, 104, 111, 114, 34, 39, 32, 114, 101, 108, 105, 110, 107, 101, 100, 32, > 116, 111, 32, 39, 34, 36, 114, 101, 108, 105, 110, 107, 34, 39, 46, 34, > 32, 45, 118, 32, 45, 10, 45, 114, 109, 91, 48, 93, 32, 45, 105, 91, > 48, 93, 32, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, 39, 125, 41, > 32, 45, 121, 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, > 115, 101, 32, 45, 108, 10, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, > 36, 108, 105, 110, 107, 32, 101, 120, 116, 61, 64, 123, 45, 49, 44, 120, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 110, > 97, 114, 103, 40, 36, 101, 120, 116, 41, 125, 32, 101, 120, 116, 61, 64, > 123, 45, 115, 116, 114, 117, 110, 99, 97, 115, 101, 92, 32, 36, 101, 120, > 116, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 123, > 36, 101, 120, 116, 39, 61, 61, 39, 112, 110, 103, 125, 124, 124, 123, 36, > 101, 120, 116, 39, 61, 61, 39, 106, 112, 103, 125, 124, 124, 123, 36, 101, > 120, 116, 39, 61, 61, 39, 106, 112, 101, 103, 125, 125, 10, 114, 101, 108, > 105, 110, 107, 61, 105, 109, 103, 47, 36, 53, 95, 64, 123, 45, 98, 97, > 115, 101, 110, 97, 109, 101, 92, 32, 36, 108, 105, 110, 107, 125, 32, 48, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 114, 101, 108, 105, 110, 107, > 32, 114, 101, 108, 105, 110, 107, 61, 64, 123, 45, 49, 44, 102, 125, 64, > 123, 45, 49, 44, 98, 125, 46, 106, 112, 103, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 36, 114, 101, 108, 105, 110, 107, 32, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, > 69, 120, 116, 101, 114, 110, 97, 108, 32, 105, 109, 97, 103, 101, 32, 108, > 105, 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 32, 114, 101, > 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, 101, 108, > 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 108, > 115, 101, 10, 45, 108, 91, 93, 32, 45, 105, 32, 36, 108, 105, 110, 107, > 32, 45, 107, 91, 48, 93, 32, 105, 115, 95, 111, 112, 97, 113, 117, 101, > 61, 48, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 34, 32, 124, 124, > 32, 34, 105, 97, 62, 50, 53, 48, 125, 32, 105, 115, 95, 111, 112, 97, > 113, 117, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, > 99, 10, 45, 105, 102, 32, 123, 36, 105, 115, 95, 111, 112, 97, 113, 117, > 101, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 101, 108, 115, 101, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 91, 48, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, > 99, 91, 48, 93, 32, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 111, 32, 36, 114, 101, 108, 105, 110, 107, 44, > 54, 48, 32, 45, 114, 109, 32, 45, 120, 32, 34, 103, 105, 116, 32, 97, > 100, 100, 32, 34, 36, 114, 101, 108, 105, 110, 107, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, 73, 109, 97, > 103, 101, 32, 108, 105, 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, > 39, 32, 99, 111, 110, 118, 101, 114, 116, 101, 100, 32, 97, 110, 100, 32, > 114, 101, 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, > 101, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 111, 110, 102, 97, 105, 108, 32, 114, 101, 108, 105, 110, 107, 61, 36, 108, > 105, 110, 107, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, > 32, 32, 32, 62, 32, 70, 97, 105, 108, 101, 100, 32, 116, 111, 32, 114, > 101, 116, 114, 105, 101, 118, 101, 32, 105, 109, 97, 103, 101, 32, 108, 105, > 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, > 118, 32, 45, 32, 45, 114, 109, 10, 45, 101, 110, 100, 108, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 105, 91, 48, > 93, 32, 40, 123, 39, 36, 114, 101, 108, 105, 110, 107, 39, 125, 41, 10, > 45, 105, 91, 50, 93, 32, 40, 123, 39, 34, 32, 99, 108, 97, 115, 115, > 61, 92, 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 92, 34, 32, 111, > 110, 99, 108, 105, 99, 107, 61, 92, 34, 114, 101, 116, 117, 114, 110, 32, > 104, 115, 46, 101, 120, 112, 97, 110, 100, 40, 116, 104, 105, 115, 41, 92, > 34, 34, 39, 125, 41, 10, 45, 121, 91, 48, 44, 50, 93, 10, 45, 101, > 108, 115, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, > 32, 32, 32, 62, 32, 69, 120, 116, 101, 114, 110, 97, 108, 32, 108, 105, > 110, 107, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 32, 102, 111, 117, > 110, 100, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 111, 110, 102, 97, 105, 108, 32, 45, 101, 110, 100, 108, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 121, 32, 45, 101, 110, > 100, 108, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, > 45, 97, 32, 121, 10, 45, 115, 32, 43, 44, 123, 39, 34, 60, 105, 109, > 103, 34, 39, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 105, 102, 32, 123, 36, 62, 62, 48, 34, 32, 38, 38, 32, 34, 123, > 64, 123, 123, 36, 62, 45, 49, 125, 44, 116, 125, 39, 61, 61, 39, 34, > 60, 105, 109, 103, 34, 125, 125, 10, 45, 108, 91, 36, 62, 93, 10, 45, > 115, 32, 43, 44, 123, 39, 34, 115, 114, 99, 61, 92, 34, 34, 39, 125, > 10, 45, 108, 91, 50, 93, 10, 45, 115, 32, 43, 44, 123, 39, 92, 34, > 39, 125, 32, 108, 105, 110, 107, 61, 64, 123, 48, 44, 116, 125, 10, 114, > 101, 108, 105, 110, 107, 61, 105, 109, 103, 47, 36, 53, 95, 64, 123, 45, > 98, 97, 115, 101, 110, 97, 109, 101, 92, 32, 36, 108, 105, 110, 107, 125, > 32, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 114, 101, 108, 105, > 110, 107, 32, 114, 101, 108, 105, 110, 107, 61, 64, 123, 45, 49, 44, 102, > 125, 64, 123, 45, 49, 44, 98, 125, 46, 106, 112, 103, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 114, 101, 108, 105, 110, 107, > 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 62, 32, 73, 109, 97, 103, 101, 32, 39, 34, 36, 108, 105, 110, 107, 34, > 39, 32, 114, 101, 108, 105, 110, 107, 101, 100, 32, 116, 111, 32, 39, 34, > 36, 114, 101, 108, 105, 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, > 10, 45, 101, 108, 115, 101, 10, 45, 108, 91, 93, 32, 45, 105, 32, 36, > 108, 105, 110, 107, 32, 45, 107, 91, 48, 93, 32, 105, 115, 95, 111, 112, > 97, 113, 117, 101, 61, 48, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, > 34, 32, 124, 124, 32, 34, 105, 97, 62, 50, 53, 48, 125, 32, 105, 115, > 95, 111, 112, 97, 113, 117, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 97, 32, 99, 10, 45, 105, 102, 32, 36, 105, 115, 95, 111, 112, > 97, 113, 117, 101, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 102, 114, > 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, > 32, 49, 48, 44, 49, 48, 44, 50, 52, 53, 10, 45, 101, 108, 115, 101, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 91, 48, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, > 99, 91, 48, 93, 32, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 111, 32, 36, 114, 101, 108, 105, 110, 107, 44, > 54, 48, 32, 45, 114, 109, 32, 45, 120, 32, 34, 103, 105, 116, 32, 97, > 100, 100, 32, 34, 36, 114, 101, 108, 105, 110, 107, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 62, 32, 73, 109, 97, > 103, 101, 32, 39, 34, 36, 108, 105, 110, 107, 34, 39, 32, 99, 111, 110, > 118, 101, 114, 116, 101, 100, 32, 97, 110, 100, 32, 114, 101, 108, 105, 110, > 107, 101, 100, 32, 116, 111, 32, 39, 34, 36, 114, 101, 108, 105, 110, 107, > 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 111, 110, 102, 97, 105, > 108, 32, 114, 101, 108, 105, 110, 107, 61, 36, 108, 105, 110, 107, 32, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 32, 32, > 62, 32, 70, 97, 105, 108, 101, 100, 32, 116, 111, 32, 114, 101, 116, 114, > 105, 101, 118, 101, 32, 105, 109, 97, 103, 101, 32, 39, 34, 36, 108, 105, > 110, 107, 34, 39, 46, 34, 32, 45, 118, 32, 45, 32, 45, 114, 109, 10, > 45, 101, 110, 100, 108, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 48, 93, 32, 45, 105, 91, 48, 93, 32, 40, 123, 39, 36, 114, 101, > 108, 105, 110, 107, 39, 125, 41, 32, 45, 121, 91, 48, 93, 10, 45, 101, > 110, 100, 108, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 10, 45, > 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, 121, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, > 116, 100, 62, 60, 105, 109, 103, 34, 44, 34, 60, 116, 100, 32, 119, 105, > 100, 116, 104, 61, 92, 34, 50, 53, 54, 92, 34, 62, 60, 105, 109, 103, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 60, 116, 100, 62, 92, 110, 60, 112, 62, 60, 105, 109, 103, 34, 44, 34, > 60, 116, 100, 32, 119, 105, 100, 116, 104, 61, 92, 34, 50, 53, 54, 92, > 34, 62, 60, 112, 62, 60, 105, 109, 103, 34, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, 97, 32, 34, 44, 34, 60, > 97, 32, 116, 97, 114, 103, 101, 116, 61, 92, 34, 95, 112, 97, 114, 101, > 110, 116, 92, 34, 32, 34, 10, 45, 111, 32, 114, 97, 119, 58, 36, 52, > 44, 99, 104, 97, 114, 10, 45, 120, 32, 34, 103, 105, 116, 32, 97, 100, > 100, 32, 36, 52, 34, 10, 45, 114, 109, 10, 40, 123, 39, 34, 60, 33, > 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 34, 92, 110, > 92, 10, 34, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 92, 34, > 101, 110, 45, 117, 115, 92, 34, 62, 60, 104, 101, 97, 100, 62, 60, 109, > 101, 116, 97, 32, 104, 116, 116, 112, 45, 101, 113, 117, 105, 118, 61, 92, > 34, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 92, 34, 32, > 99, 111, 110, 116, 101, 110, 116, 61, 92, 34, 116, 101, 120, 116, 47, 104, > 116, 109, 108, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 85, 84, 70, > 45, 56, 92, 34, 62, 34, 92, 110, 92, 10, 34, 60, 33, 45, 45, 35, > 105, 110, 99, 108, 117, 100, 101, 32, 102, 105, 108, 101, 61, 92, 34, 104, > 101, 97, 100, 101, 114, 46, 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, > 34, 92, 110, 92, 10, 34, 60, 108, 105, 110, 107, 32, 104, 114, 101, 102, > 61, 92, 34, 46, 46, 47, 115, 116, 121, 108, 101, 46, 99, 115, 115, 92, > 34, 32, 114, 101, 108, 61, 92, 34, 115, 116, 121, 108, 101, 115, 104, 101, > 101, 116, 92, 34, 32, 116, 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, > 47, 99, 115, 115, 92, 34, 62, 34, 92, 110, 92, 10, 34, 60, 100, 105, > 118, 32, 105, 100, 61, 92, 34, 98, 108, 111, 99, 95, 111, 112, 116, 105, > 111, 110, 92, 34, 62, 60, 100, 105, 118, 32, 105, 100, 61, 92, 34, 116, > 111, 112, 95, 118, 101, 114, 116, 92, 34, 62, 60, 100, 105, 118, 32, 105, > 100, 61, 92, 34, 116, 101, 120, 116, 95, 116, 111, 112, 92, 34, 62, 84, > 117, 116, 111, 114, 105, 97, 108, 60, 47, 100, 105, 118, 62, 60, 47, 100, > 105, 118, 62, 34, 92, 110, 92, 10, 34, 60, 100, 105, 118, 32, 105, 100, > 61, 92, 34, 99, 101, 110, 116, 101, 114, 92, 34, 62, 60, 100, 105, 118, > 32, 105, 100, 61, 92, 34, 116, 101, 120, 116, 95, 99, 101, 110, 116, 114, > 101, 95, 105, 110, 116, 114, 111, 92, 34, 62, 34, 92, 110, 92, 10, 34, > 60, 115, 99, 114, 105, 112, 116, 32, 108, 97, 110, 103, 117, 97, 103, 101, > 61, 92, 34, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 92, 34, 62, > 118, 97, 114, 32, 103, 70, 105, 108, 101, 110, 97, 109, 101, 32, 61, 32, > 39, 36, 54, 39, 59, 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 92, > 110, 92, 10, 34, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, > 32, 102, 105, 108, 101, 61, 92, 34, 116, 117, 116, 111, 114, 105, 97, 108, > 95, 116, 111, 99, 46, 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, 34, > 92, 110, 92, 10, 34, 60, 105, 102, 114, 97, 109, 101, 32, 119, 105, 100, > 116, 104, 61, 92, 34, 49, 48, 48, 37, 92, 34, 32, 104, 101, 105, 103, > 104, 116, 61, 92, 34, 36, 50, 92, 34, 32, 102, 114, 97, 109, 101, 98, > 111, 114, 100, 101, 114, 61, 92, 34, 48, 92, 34, 32, 115, 114, 99, 61, > 92, 34, 34, 36, 52, 34, 92, 34, 32, 115, 101, 97, 109, 108, 101, 115, > 115, 62, 60, 47, 105, 102, 114, 97, 109, 101, 62, 34, 92, 110, 92, 10, > 34, 60, 47, 100, 105, 118, 62, 60, 47, 100, 105, 118, 62, 60, 100, 105, > 118, 32, 105, 100, 61, 92, 34, 102, 111, 111, 116, 101, 114, 92, 34, 62, > 60, 105, 109, 103, 32, 115, 114, 99, 61, 92, 34, 105, 109, 97, 103, 101, > 115, 47, 102, 111, 111, 116, 101, 114, 46, 106, 112, 103, 92, 34, 32, 47, > 62, 60, 47, 100, 105, 118, 62, 60, 47, 100, 105, 118, 62, 34, 92, 110, > 92, 10, 34, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, 32, > 102, 105, 108, 101, 61, 92, 34, 99, 111, 112, 121, 114, 105, 103, 104, 116, > 46, 104, 116, 109, 108, 92, 34, 32, 45, 45, 62, 34, 92, 110, 92, 10, > 34, 60, 33, 45, 45, 35, 105, 110, 99, 108, 117, 100, 101, 32, 102, 105, > 108, 101, 61, 92, 34, 102, 111, 111, 116, 101, 114, 46, 104, 116, 109, 108, > 92, 34, 32, 45, 45, 62, 34, 92, 110, 39, 125, 41, 10, 45, 111, 32, > 114, 97, 119, 58, 36, 51, 44, 99, 104, 97, 114, 10, 45, 120, 32, 34, > 103, 105, 116, 32, 97, 100, 100, 32, 36, 51, 34, 10, 45, 114, 109, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 117, 112, 105, > 100, 32, 58, 32, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 99, 117, 112, 105, 100, > 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 32, 119, 105, 116, > 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 99, 117, > 112, 105, 100, 32, 44, 10, 99, 117, 112, 105, 100, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 56, 48, 125, 62, 61, > 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 36, 49, 120, 36, 49, 32, 99, 117, 112, 105, 100, 32, 98, 105, > 110, 97, 114, 121, 32, 109, 97, 115, 107, 46, 34, 32, 45, 118, 32, 45, > 10, 45, 108, 91, 93, 10, 40, 52, 56, 48, 44, 52, 56, 48, 44, 49, > 44, 49, 44, 49, 41, 10, 40, 123, 39, 34, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 87, 72, > 88, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 90, 76, 91, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 49, 92, 92, 78, 93, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 50, 107, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 50, 108, 32, 32, 32, 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, > 32, 32, 32, 32, 34, 92, 10, 34, 32, 32, 32, 52, 109, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, 32, 51, 108, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 51, 107, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 50, 107, 32, 32, 32, 32, 32, 32, 32, 32, 32, 49, 105, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 48, 105, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 47, 103, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 103, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, 101, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 43, 99, 32, 32, 32, 32, 32, 32, 32, 32, 32, 41, > 97, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 96, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 38, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 36, 92, 92, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 89, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 78, 87, 32, 32, 32, 32, 32, 32, > 32, 34, 92, 10, 34, 32, 32, 32, 76, 85, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 73, 81, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 92, 10, > 34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 58, 82, 62, 90, 32, 32, 32, 32, 32, 32, 32, 32, 32, 57, 90, > 68, 94, 32, 32, 32, 32, 32, 32, 56, 84, 32, 32, 42, 94, 71, 96, > 32, 32, 32, 32, 32, 32, 58, 88, 64, 81, 32, 32, 63, 96, 73, 98, > 32, 32, 32, 32, 32, 32, 59, 90, 67, 83, 32, 32, 65, 99, 77, 101, > 32, 32, 32, 32, 32, 32, 59, 91, 70, 84, 65, 81, 32, 92, 34, 123, > 32, 32, 32, 32, 32, 32, 59, 92, 92, 71, 84, 66, 83, 32, 36, 125, > 32, 32, 32, 32, 32, 32, 59, 92, 92, 74, 86, 66, 83, 32, 36, 125, > 32, 32, 32, 32, 32, 32, 59, 93, 76, 87, 66, 84, 32, 37, 125, 32, > 32, 32, 32, 32, 32, 59, 104, 66, 86, 32, 40, 126, 80, 32, 32, 32, > 32, 32, 32, 59, 103, 66, 88, 78, 84, 32, 48, 126, 80, 32, 32, 32, > 32, 32, 32, 59, 104, 67, 94, 32, 48, 126, 80, 32, 34, 92, 10, 34, > 32, 32, 32, 32, 32, 71, 81, 69, 104, 67, 94, 32, 48, 126, 80, 32, > 32, 32, 32, 32, 32, 75, 90, 75, 112, 75, 95, 32, 48, 126, 80, 32, > 32, 32, 32, 32, 32, 77, 126, 84, 77, 95, 32, 48, 126, 80, 32, 32, > 32, 32, 32, 32, 126, 104, 32, 48, 126, 80, 32, 32, 32, 32, 32, 33, > 126, 105, 32, 48, 126, 80, 32, 32, 32, 32, 32, 92, 34, 126, 106, 32, > 48, 126, 80, 32, 32, 32, 32, 32, 92, 35, 126, 107, 32, 48, 126, 32, > 32, 32, 32, 32, 92, 35, 126, 109, 32, 49, 126, 32, 32, 32, 32, 32, > 36, 126, 110, 32, 48, 125, 32, 32, 32, 32, 32, 37, 126, 111, 32, 48, > 124, 32, 32, 32, 32, 32, 37, 126, 113, 32, 49, 124, 32, 32, 32, 32, > 32, 38, 126, 114, 32, 48, 123, 32, 32, 32, 32, 32, 92, 52, 55, 126, > 116, 32, 49, 122, 32, 32, 32, 32, 32, 40, 126, 119, 32, 49, 121, 32, > 32, 32, 32, 32, 42, 126, 122, 32, 50, 120, 32, 32, 32, 32, 32, 43, > 126, 124, 32, 50, 119, 32, 32, 32, 32, 32, 43, 126, 126, 34, 92, 10, > 34, 32, 50, 118, 32, 32, 32, 32, 32, 44, 126, 126, 80, 32, 49, 116, > 32, 32, 32, 32, 32, 44, 126, 126, 92, 92, 32, 60, 116, 32, 32, 32, > 32, 32, 45, 126, 126, 95, 32, 61, 114, 32, 32, 32, 32, 32, 45, 126, > 126, 96, 32, 60, 112, 32, 32, 32, 32, 32, 46, 126, 126, 100, 32, 61, > 110, 32, 32, 32, 32, 32, 47, 126, 126, 102, 32, 61, 109, 32, 32, 32, > 32, 32, 48, 126, 126, 105, 32, 61, 108, 32, 32, 32, 32, 32, 48, 126, > 126, 105, 32, 60, 106, 32, 32, 32, 32, 32, 48, 126, 126, 106, 32, 59, > 104, 32, 32, 32, 32, 32, 48, 126, 126, 106, 32, 57, 102, 32, 32, 32, > 32, 32, 47, 126, 126, 97, 32, 47, 100, 32, 32, 32, 32, 32, 47, 126, > 126, 97, 32, 45, 98, 32, 32, 32, 52, 85, 32, 32, 126, 126, 96, 32, > 42, 95, 32, 32, 32, 51, 86, 32, 33, 126, 126, 95, 32, 40, 92, 92, > 32, 32, 32, 50, 88, 32, 92, 34, 126, 126, 94, 32, 38, 90, 32, 32, > 32, 49, 90, 32, 36, 126, 126, 94, 32, 37, 88, 32, 34, 92, 10, 34, > 32, 32, 48, 91, 32, 37, 126, 126, 94, 32, 92, 35, 85, 32, 32, 32, > 47, 92, 92, 32, 38, 126, 126, 94, 32, 32, 32, 32, 32, 44, 93, 32, > 92, 52, 55, 126, 126, 94, 32, 32, 32, 32, 32, 44, 94, 32, 40, 126, > 126, 95, 32, 32, 32, 32, 32, 45, 95, 32, 41, 126, 126, 95, 32, 32, > 32, 32, 32, 45, 96, 32, 42, 126, 126, 95, 32, 32, 32, 32, 32, 45, > 97, 32, 43, 126, 126, 96, 32, 32, 32, 32, 32, 45, 97, 32, 44, 126, > 126, 96, 32, 32, 32, 32, 32, 45, 99, 32, 46, 126, 126, 97, 32, 32, > 32, 32, 32, 45, 99, 32, 47, 126, 126, 97, 32, 32, 32, 32, 32, 45, > 100, 32, 48, 126, 126, 97, 32, 32, 32, 32, 32, 44, 101, 32, 50, 126, > 126, 98, 32, 32, 32, 32, 32, 45, 102, 32, 51, 126, 126, 98, 32, 32, > 32, 32, 32, 44, 102, 32, 52, 126, 126, 98, 32, 32, 32, 32, 32, 43, > 102, 32, 53, 126, 126, 98, 32, 32, 32, 32, 32, 43, 104, 32, 56, 126, > 126, 99, 32, 32, 32, 32, 32, 42, 105, 32, 59, 126, 34, 92, 10, 34, > 126, 100, 32, 32, 32, 32, 32, 42, 107, 32, 61, 126, 126, 100, 32, 32, > 32, 32, 32, 41, 108, 32, 64, 126, 126, 101, 32, 32, 32, 32, 32, 41, > 111, 32, 68, 126, 126, 102, 32, 32, 32, 32, 32, 40, 112, 32, 70, 126, > 126, 102, 32, 32, 32, 32, 32, 92, 52, 55, 113, 32, 73, 126, 126, 103, > 32, 32, 32, 32, 32, 38, 114, 32, 75, 126, 126, 103, 32, 32, 32, 32, > 32, 37, 116, 32, 78, 126, 126, 103, 32, 32, 32, 32, 32, 37, 119, 92, > 34, 126, 126, 103, 32, 32, 32, 32, 32, 36, 120, 36, 126, 126, 103, 32, > 32, 32, 32, 32, 46, 85, 74, 122, 92, 52, 55, 126, 126, 102, 32, 32, > 32, 32, 32, 46, 89, 76, 124, 42, 126, 126, 102, 32, 75, 80, 32, 32, > 32, 32, 51, 90, 76, 126, 45, 126, 126, 102, 32, 76, 82, 32, 32, 32, > 32, 53, 126, 98, 49, 126, 126, 102, 32, 77, 83, 32, 32, 32, 32, 53, > 126, 101, 52, 126, 126, 102, 32, 77, 82, 32, 32, 32, 32, 52, 126, 103, > 53, 126, 126, 100, 32, 77, 83, 32, 32, 32, 32, 52, 126, 34, 92, 10, > 34, 105, 56, 126, 126, 101, 32, 77, 83, 32, 32, 32, 32, 51, 126, 106, > 58, 126, 126, 101, 32, 77, 83, 32, 32, 32, 32, 51, 126, 107, 59, 126, > 126, 100, 32, 76, 83, 32, 32, 32, 32, 51, 126, 108, 60, 126, 126, 100, > 32, 76, 83, 32, 32, 32, 32, 50, 126, 108, 61, 126, 126, 99, 32, 75, > 83, 32, 32, 32, 32, 49, 126, 108, 62, 126, 126, 99, 32, 76, 85, 32, > 32, 32, 32, 50, 126, 109, 63, 126, 126, 98, 32, 75, 85, 32, 32, 32, > 32, 48, 126, 107, 63, 126, 126, 98, 32, 75, 86, 32, 32, 32, 32, 48, > 126, 107, 64, 126, 126, 98, 32, 75, 88, 32, 32, 32, 32, 50, 126, 108, > 64, 126, 126, 96, 32, 75, 90, 32, 32, 32, 32, 50, 126, 107, 64, 126, > 126, 96, 32, 75, 91, 32, 32, 32, 32, 49, 126, 106, 64, 126, 126, 95, > 32, 76, 84, 75, 85, 32, 32, 32, 50, 85, 38, 126, 105, 63, 126, 126, > 93, 32, 76, 83, 72, 85, 32, 32, 32, 52, 88, 92, 52, 55, 126, 105, > 64, 126, 126, 93, 32, 77, 84, 71, 84, 32, 32, 34, 92, 10, 34, 32, > 53, 91, 92, 52, 55, 126, 103, 64, 126, 126, 92, 92, 32, 77, 84, 69, > 84, 32, 32, 32, 54, 92, 92, 92, 52, 55, 126, 102, 63, 126, 126, 91, > 32, 77, 83, 67, 84, 32, 32, 32, 55, 93, 38, 126, 101, 64, 126, 126, > 90, 32, 77, 84, 67, 85, 32, 32, 32, 56, 95, 49, 86, 76, 126, 100, > 65, 126, 126, 90, 32, 77, 84, 65, 85, 32, 32, 32, 57, 97, 53, 126, > 112, 65, 126, 126, 90, 32, 78, 85, 64, 84, 32, 32, 32, 57, 99, 55, > 126, 112, 65, 126, 126, 89, 32, 77, 84, 62, 85, 32, 32, 32, 58, 100, > 58, 126, 113, 66, 126, 126, 89, 32, 76, 83, 61, 86, 32, 32, 32, 59, > 102, 60, 126, 114, 67, 126, 126, 89, 32, 77, 84, 60, 86, 32, 32, 32, > 60, 104, 62, 126, 114, 67, 126, 126, 89, 32, 78, 84, 58, 86, 32, 32, > 32, 60, 105, 64, 126, 114, 67, 126, 126, 89, 32, 85, 57, 86, 32, 32, > 32, 61, 106, 64, 126, 113, 67, 126, 126, 89, 32, 84, 56, 87, 32, 32, > 32, 61, 107, 66, 126, 113, 67, 126, 126, 90, 92, 34, 84, 54, 34, 92, > 10, 34, 86, 32, 32, 32, 60, 110, 68, 126, 111, 66, 126, 126, 89, 92, > 34, 84, 53, 86, 32, 32, 32, 61, 113, 70, 126, 111, 65, 126, 126, 88, > 36, 84, 51, 85, 32, 32, 32, 60, 115, 72, 126, 110, 61, 126, 126, 84, > 37, 84, 49, 85, 32, 32, 32, 59, 118, 75, 126, 108, 58, 126, 126, 82, > 92, 52, 55, 84, 47, 85, 32, 32, 32, 60, 126, 126, 104, 57, 126, 126, > 81, 40, 85, 46, 85, 32, 32, 32, 60, 126, 126, 103, 56, 126, 126, 80, > 40, 84, 45, 86, 32, 32, 32, 60, 126, 126, 103, 56, 126, 126, 80, 42, > 84, 43, 85, 32, 32, 32, 59, 126, 126, 102, 56, 126, 126, 80, 43, 85, > 42, 85, 32, 32, 32, 59, 126, 126, 101, 55, 126, 126, 43, 84, 40, 84, > 32, 32, 32, 59, 126, 126, 101, 54, 126, 124, 43, 84, 92, 52, 55, 85, > 32, 32, 32, 58, 126, 126, 100, 55, 126, 124, 43, 84, 38, 85, 32, 32, > 32, 58, 126, 126, 99, 55, 126, 124, 44, 84, 37, 86, 32, 32, 32, 59, > 126, 126, 99, 54, 126, 123, 44, 83, 92, 35, 85, 32, 32, 32, 57, 126, > 34, 92, 10, 34, 126, 98, 55, 126, 122, 45, 85, 92, 35, 86, 32, 32, > 32, 57, 126, 126, 97, 55, 126, 122, 45, 84, 33, 85, 32, 32, 32, 55, > 126, 126, 95, 55, 126, 121, 45, 85, 32, 84, 32, 32, 32, 53, 126, 126, > 94, 56, 126, 121, 46, 85, 32, 78, 85, 32, 32, 32, 63, 82, 72, 126, > 126, 93, 56, 126, 120, 45, 84, 32, 76, 85, 32, 32, 32, 66, 88, 75, > 126, 126, 92, 92, 57, 126, 121, 46, 85, 32, 76, 85, 32, 32, 32, 67, > 126, 126, 107, 58, 126, 121, 47, 85, 32, 74, 85, 32, 32, 32, 69, 126, > 126, 108, 59, 126, 121, 46, 84, 32, 73, 85, 32, 32, 32, 69, 126, 126, > 108, 60, 126, 121, 46, 85, 32, 72, 85, 32, 32, 32, 70, 126, 126, 109, > 62, 126, 122, 47, 85, 32, 71, 85, 32, 32, 32, 70, 126, 126, 109, 62, > 126, 121, 46, 84, 32, 70, 86, 32, 32, 32, 71, 126, 126, 109, 63, 126, > 121, 46, 84, 32, 68, 85, 32, 32, 32, 71, 126, 126, 109, 64, 126, 121, > 46, 85, 32, 68, 85, 32, 32, 32, 71, 126, 126, 110, 64, 126, 34, 92, > 10, 34, 119, 45, 84, 32, 66, 85, 32, 32, 32, 71, 126, 126, 109, 64, > 85, 72, 126, 105, 45, 84, 32, 65, 85, 32, 32, 32, 70, 126, 126, 109, > 42, 126, 94, 45, 85, 32, 65, 85, 32, 32, 32, 69, 126, 126, 108, 42, > 126, 93, 45, 85, 32, 63, 85, 32, 32, 32, 69, 126, 126, 108, 42, 126, > 90, 43, 84, 32, 62, 85, 32, 32, 32, 67, 126, 126, 108, 44, 126, 89, > 43, 85, 32, 62, 85, 32, 32, 32, 66, 126, 126, 116, 53, 126, 88, 43, > 85, 32, 61, 86, 32, 32, 32, 65, 126, 126, 118, 57, 126, 87, 43, 85, > 32, 59, 85, 32, 32, 32, 64, 126, 126, 119, 59, 126, 87, 43, 85, 32, > 59, 85, 32, 32, 32, 62, 126, 126, 121, 64, 126, 87, 43, 85, 32, 58, > 85, 32, 32, 32, 60, 126, 126, 122, 67, 126, 87, 43, 84, 32, 57, 86, > 32, 32, 32, 59, 126, 126, 122, 70, 126, 87, 43, 85, 32, 57, 86, 32, > 32, 32, 56, 126, 126, 121, 72, 126, 87, 44, 85, 32, 55, 85, 32, 32, > 32, 53, 126, 126, 120, 76, 126, 88, 43, 85, 34, 92, 10, 34, 32, 55, > 85, 32, 32, 32, 51, 126, 126, 126, 126, 83, 44, 85, 32, 54, 85, 32, > 32, 32, 63, 126, 126, 126, 126, 94, 44, 85, 32, 53, 85, 32, 32, 32, > 64, 126, 126, 126, 126, 94, 43, 85, 32, 53, 86, 32, 32, 32, 66, 126, > 126, 126, 126, 81, 73, 86, 43, 85, 32, 52, 86, 32, 32, 32, 67, 126, > 126, 126, 126, 81, 32, 77, 85, 32, 51, 86, 32, 32, 32, 67, 126, 126, > 126, 126, 80, 32, 76, 84, 32, 50, 86, 32, 32, 32, 67, 126, 126, 126, > 126, 32, 76, 85, 32, 50, 86, 32, 32, 32, 67, 126, 126, 126, 126, 32, > 77, 85, 32, 49, 86, 32, 32, 32, 67, 126, 126, 126, 125, 32, 77, 85, > 32, 48, 86, 32, 32, 32, 66, 126, 126, 126, 124, 32, 77, 84, 32, 47, > 86, 32, 32, 32, 65, 126, 126, 126, 123, 32, 78, 85, 32, 47, 86, 32, > 32, 32, 64, 126, 126, 126, 121, 32, 78, 85, 32, 47, 87, 32, 32, 32, > 62, 126, 126, 126, 119, 32, 78, 85, 32, 47, 86, 32, 32, 32, 58, 126, > 126, 126, 116, 32, 85, 32, 34, 92, 10, 34, 46, 86, 32, 32, 32, 56, > 126, 126, 126, 114, 33, 85, 32, 45, 86, 32, 32, 32, 52, 126, 126, 126, > 111, 92, 34, 85, 32, 45, 86, 32, 32, 32, 46, 126, 126, 126, 106, 36, > 85, 32, 45, 87, 32, 32, 32, 49, 126, 126, 126, 114, 42, 86, 32, 45, > 86, 32, 32, 32, 51, 126, 126, 126, 121, 47, 86, 32, 44, 86, 32, 32, > 32, 52, 126, 126, 126, 124, 49, 85, 32, 44, 87, 32, 32, 32, 53, 126, > 126, 126, 126, 51, 86, 32, 44, 87, 32, 32, 32, 54, 126, 126, 126, 126, > 82, 54, 86, 32, 43, 86, 32, 32, 32, 53, 126, 126, 126, 126, 84, 56, > 85, 32, 43, 87, 32, 32, 32, 52, 126, 126, 126, 126, 85, 58, 84, 32, > 42, 87, 32, 32, 32, 52, 126, 126, 126, 126, 90, 64, 85, 32, 43, 87, > 32, 32, 32, 51, 126, 126, 126, 126, 93, 68, 85, 32, 43, 87, 32, 32, > 32, 49, 126, 126, 126, 126, 94, 70, 84, 32, 42, 87, 32, 32, 32, 48, > 126, 126, 126, 126, 94, 72, 84, 32, 42, 87, 32, 32, 32, 45, 126, 126, > 126, 126, 94, 34, 92, 10, 34, 75, 84, 32, 42, 88, 32, 32, 32, 43, > 126, 126, 126, 126, 94, 78, 85, 32, 43, 88, 32, 32, 32, 92, 34, 126, > 126, 126, 126, 92, 92, 32, 43, 88, 32, 32, 32, 33, 126, 126, 126, 126, > 92, 92, 32, 44, 88, 32, 32, 32, 32, 126, 126, 126, 126, 91, 32, 43, > 87, 32, 32, 32, 32, 126, 126, 126, 126, 92, 92, 32, 44, 87, 32, 32, > 32, 32, 78, 126, 126, 126, 126, 92, 92, 32, 45, 87, 32, 32, 32, 32, > 78, 126, 126, 126, 126, 93, 32, 46, 88, 32, 32, 32, 32, 78, 126, 126, > 126, 126, 93, 32, 47, 88, 32, 32, 32, 32, 77, 126, 126, 126, 126, 93, > 32, 48, 89, 32, 32, 32, 32, 76, 126, 126, 126, 126, 93, 32, 49, 88, > 32, 32, 32, 32, 74, 126, 126, 126, 126, 92, 92, 32, 50, 88, 32, 32, > 32, 32, 71, 126, 126, 126, 126, 91, 32, 52, 88, 32, 32, 32, 32, 64, > 126, 126, 126, 126, 86, 32, 54, 89, 32, 32, 32, 32, 62, 126, 126, 126, > 126, 85, 32, 55, 88, 32, 32, 32, 32, 62, 126, 126, 126, 126, 88, 32, > 58, 88, 32, 32, 32, 34, 92, 10, 34, 32, 62, 126, 126, 126, 126, 90, > 32, 60, 89, 32, 32, 32, 32, 62, 126, 126, 126, 126, 93, 32, 64, 90, > 32, 32, 32, 32, 62, 126, 126, 126, 126, 116, 41, 90, 32, 32, 32, 32, > 62, 126, 126, 126, 126, 123, 48, 91, 32, 32, 32, 32, 61, 126, 126, 126, > 126, 125, 52, 92, 92, 32, 32, 32, 32, 61, 126, 126, 126, 126, 126, 81, > 57, 94, 32, 32, 32, 32, 59, 126, 126, 126, 126, 126, 82, 62, 97, 32, > 32, 32, 32, 52, 126, 126, 126, 126, 126, 70, 100, 32, 32, 32, 32, 52, > 126, 126, 126, 126, 126, 110, 32, 32, 32, 32, 53, 126, 126, 126, 126, 126, > 111, 42, 83, 32, 32, 32, 49, 126, 126, 126, 126, 126, 113, 45, 88, 32, > 32, 32, 52, 126, 126, 126, 126, 126, 121, 54, 90, 32, 32, 32, 53, 126, > 126, 126, 126, 126, 126, 85, 66, 93, 32, 32, 32, 55, 126, 126, 126, 126, > 126, 126, 91, 74, 96, 32, 32, 32, 54, 126, 126, 126, 126, 126, 126, 112, > 32, 32, 32, 47, 126, 126, 126, 126, 126, 104, 69, 117, 32, 32, 32, 47, > 126, 126, 34, 92, 10, 34, 126, 126, 126, 102, 61, 111, 32, 32, 32, 48, > 126, 126, 126, 126, 126, 102, 50, 100, 32, 32, 32, 47, 126, 126, 126, 126, > 126, 101, 49, 99, 32, 32, 32, 47, 126, 126, 126, 126, 126, 101, 48, 97, > 32, 32, 32, 44, 126, 126, 126, 126, 126, 99, 47, 94, 32, 32, 32, 92, > 35, 126, 126, 126, 126, 126, 92, 92, 46, 92, 92, 32, 32, 32, 33, 126, > 126, 126, 126, 126, 91, 45, 89, 32, 32, 32, 32, 78, 126, 126, 126, 126, > 126, 90, 42, 84, 32, 32, 32, 32, 75, 126, 126, 126, 126, 126, 90, 32, > 32, 32, 32, 33, 126, 126, 126, 126, 126, 90, 32, 32, 32, 32, 32, 126, > 126, 126, 126, 126, 88, 32, 32, 32, 32, 32, 75, 126, 126, 126, 126, 126, > 84, 32, 32, 32, 32, 32, 67, 126, 126, 126, 126, 123, 32, 32, 32, 32, > 32, 66, 126, 126, 126, 126, 121, 32, 32, 32, 32, 32, 64, 126, 126, 126, > 126, 120, 32, 32, 32, 32, 32, 62, 126, 126, 126, 126, 118, 32, 32, 32, > 32, 32, 61, 126, 126, 126, 126, 118, 32, 32, 32, 32, 32, 59, 126, 126, > 126, 34, 92, 10, 34, 126, 115, 32, 32, 32, 32, 32, 51, 126, 126, 126, > 126, 108, 32, 32, 32, 32, 32, 49, 126, 126, 126, 126, 91, 77, 92, 92, > 32, 32, 32, 32, 32, 48, 126, 126, 107, 75, 88, 58, 118, 71, 90, 32, > 32, 32, 32, 32, 46, 126, 126, 104, 72, 84, 52, 111, 68, 90, 32, 32, > 32, 32, 32, 44, 84, 75, 96, 76, 126, 120, 71, 82, 92, 52, 55, 95, > 63, 89, 32, 32, 32, 32, 32, 33, 93, 73, 126, 118, 71, 81, 32, 53, > 89, 32, 32, 32, 32, 32, 32, 90, 71, 126, 118, 70, 80, 32, 52, 89, > 32, 32, 32, 32, 32, 32, 78, 87, 70, 126, 118, 70, 80, 32, 52, 89, > 32, 32, 32, 32, 32, 32, 61, 126, 119, 71, 81, 32, 53, 89, 32, 32, > 32, 32, 32, 32, 61, 126, 119, 71, 81, 32, 53, 89, 32, 32, 32, 32, > 32, 32, 61, 126, 119, 71, 81, 32, 52, 88, 32, 32, 32, 32, 32, 32, > 62, 126, 120, 70, 80, 32, 52, 88, 32, 32, 32, 32, 32, 32, 63, 126, > 122, 71, 81, 32, 53, 88, 32, 32, 32, 32, 32, 32, 64, 126, 123, 71, > 34, 92, 10, 34, 81, 32, 53, 89, 32, 32, 32, 32, 32, 32, 68, 126, > 126, 71, 81, 32, 52, 88, 32, 32, 32, 32, 32, 32, 70, 126, 126, 81, > 71, 82, 32, 53, 88, 32, 32, 32, 32, 32, 32, 71, 126, 126, 82, 70, > 81, 32, 53, 88, 32, 32, 32, 32, 32, 32, 72, 126, 126, 83, 70, 81, > 32, 52, 88, 32, 32, 32, 32, 32, 32, 74, 126, 126, 84, 70, 82, 32, > 53, 88, 32, 32, 32, 32, 32, 32, 75, 126, 126, 85, 69, 81, 32, 52, > 87, 32, 32, 32, 32, 32, 32, 76, 126, 126, 86, 69, 81, 32, 52, 88, > 32, 32, 32, 32, 32, 32, 78, 126, 126, 87, 69, 81, 32, 52, 88, 32, > 32, 32, 32, 32, 32, 126, 126, 88, 69, 82, 32, 52, 87, 32, 32, 32, > 32, 32, 32, 126, 126, 88, 68, 81, 32, 52, 88, 32, 32, 32, 32, 32, > 92, 34, 126, 126, 89, 68, 81, 32, 52, 88, 32, 32, 32, 32, 32, 92, > 35, 126, 126, 90, 68, 81, 32, 51, 87, 32, 32, 32, 32, 32, 36, 126, > 126, 91, 68, 82, 32, 52, 88, 32, 32, 32, 32, 32, 37, 126, 34, 92, > 10, 34, 126, 91, 68, 82, 32, 52, 88, 32, 32, 32, 32, 32, 38, 126, > 126, 92, 92, 67, 81, 32, 52, 88, 32, 32, 32, 32, 32, 38, 126, 126, > 92, 92, 67, 81, 32, 52, 88, 32, 32, 32, 32, 32, 38, 126, 126, 92, > 92, 67, 81, 32, 52, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, 126, > 93, 67, 82, 32, 53, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, 126, > 93, 66, 81, 32, 53, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, 126, > 92, 92, 65, 81, 32, 53, 88, 32, 32, 32, 32, 32, 92, 52, 55, 126, > 126, 92, 92, 65, 81, 32, 53, 88, 32, 32, 32, 32, 32, 40, 126, 126, > 93, 65, 82, 32, 54, 88, 32, 32, 32, 32, 32, 40, 126, 126, 93, 64, > 81, 32, 54, 88, 32, 32, 32, 32, 32, 40, 126, 126, 93, 64, 81, 32, > 55, 89, 32, 32, 32, 32, 32, 41, 126, 126, 93, 63, 81, 32, 55, 88, > 32, 32, 32, 32, 76, 86, 32, 50, 126, 126, 93, 63, 82, 32, 56, 88, > 32, 32, 32, 33, 93, 32, 53, 126, 126, 93, 62, 81, 32, 56, 88, 32, > 32, 32, 92, 35, 97, 32, 55, 126, 34, 92, 10, 34, 126, 93, 62, 81, > 32, 57, 89, 32, 32, 32, 37, 100, 32, 56, 126, 126, 92, 92, 61, 82, > 32, 58, 88, 32, 32, 32, 38, 103, 32, 57, 126, 126, 92, 92, 61, 82, > 32, 58, 88, 32, 32, 32, 41, 107, 32, 58, 126, 126, 92, 92, 60, 81, > 32, 59, 89, 32, 32, 32, 55, 121, 32, 58, 126, 126, 92, 92, 60, 81, > 32, 59, 88, 32, 32, 32, 56, 124, 32, 59, 126, 126, 91, 59, 82, 32, > 60, 88, 32, 32, 32, 57, 125, 32, 59, 126, 126, 91, 59, 82, 32, 61, > 89, 32, 32, 32, 58, 126, 32, 59, 126, 126, 91, 59, 82, 32, 61, 88, > 32, 32, 32, 58, 126, 81, 32, 60, 126, 126, 90, 57, 81, 32, 62, 89, > 32, 32, 32, 59, 126, 82, 32, 60, 126, 126, 90, 57, 82, 32, 63, 88, > 32, 32, 32, 58, 126, 82, 32, 60, 126, 126, 89, 56, 82, 32, 64, 89, > 32, 32, 32, 59, 126, 83, 32, 60, 126, 126, 88, 54, 81, 32, 64, 88, > 32, 32, 32, 58, 126, 83, 32, 60, 126, 126, 88, 54, 81, 32, 65, 89, > 32, 32, 32, 59, 126, 84, 32, 61, 34, 92, 10, 34, 126, 126, 88, 53, > 82, 32, 66, 88, 32, 32, 32, 58, 126, 84, 32, 62, 126, 126, 88, 52, > 82, 32, 67, 88, 32, 32, 32, 57, 126, 85, 32, 66, 126, 126, 90, 50, > 81, 32, 67, 88, 32, 32, 32, 57, 126, 85, 32, 70, 126, 126, 93, 49, > 81, 32, 68, 88, 32, 32, 32, 56, 126, 86, 32, 73, 126, 126, 95, 49, > 81, 32, 69, 88, 32, 32, 32, 55, 126, 88, 32, 76, 126, 126, 94, 47, > 82, 32, 71, 89, 32, 32, 32, 55, 126, 100, 42, 126, 126, 95, 47, 82, > 32, 72, 89, 32, 32, 32, 53, 126, 102, 47, 126, 126, 97, 46, 81, 32, > 72, 88, 32, 32, 32, 52, 126, 104, 50, 126, 126, 97, 45, 81, 32, 73, > 88, 32, 32, 32, 49, 84, 74, 126, 95, 55, 126, 126, 99, 45, 82, 32, > 75, 89, 32, 32, 32, 36, 126, 94, 59, 126, 126, 101, 45, 82, 32, 76, > 89, 32, 32, 32, 92, 34, 126, 94, 61, 126, 126, 102, 44, 81, 32, 77, > 89, 32, 32, 32, 32, 126, 95, 64, 126, 126, 104, 45, 81, 32, 78, 89, > 32, 32, 32, 32, 75, 34, 92, 10, 34, 126, 93, 66, 126, 126, 105, 45, > 82, 33, 89, 32, 32, 32, 32, 72, 126, 91, 67, 126, 126, 107, 46, 82, > 92, 34, 89, 32, 32, 32, 32, 66, 126, 87, 69, 126, 126, 108, 45, 81, > 92, 35, 89, 32, 32, 32, 32, 61, 126, 84, 71, 126, 126, 109, 45, 82, > 37, 89, 32, 32, 32, 32, 59, 126, 84, 72, 126, 126, 110, 46, 82, 92, > 52, 55, 90, 32, 32, 32, 32, 57, 126, 84, 74, 126, 126, 112, 47, 82, > 40, 90, 32, 32, 32, 32, 55, 126, 84, 76, 126, 126, 113, 46, 81, 41, > 90, 32, 32, 32, 32, 53, 126, 126, 126, 120, 46, 82, 44, 91, 32, 32, > 32, 32, 51, 126, 126, 126, 120, 47, 82, 45, 91, 32, 32, 32, 32, 49, > 126, 126, 126, 119, 47, 82, 46, 90, 32, 32, 32, 32, 47, 126, 126, 126, > 119, 46, 81, 48, 91, 32, 32, 32, 32, 45, 126, 126, 126, 118, 46, 81, > 50, 92, 92, 32, 32, 32, 32, 43, 126, 126, 126, 118, 47, 82, 52, 91, > 32, 32, 32, 32, 40, 126, 126, 126, 117, 47, 82, 54, 91, 32, 32, 32, > 32, 38, 126, 126, 126, 117, 34, 92, 10, 34, 46, 81, 56, 92, 92, 32, > 32, 32, 32, 36, 126, 126, 126, 116, 46, 81, 57, 92, 92, 32, 32, 32, > 32, 92, 34, 126, 126, 126, 115, 46, 81, 59, 92, 92, 32, 32, 32, 32, > 32, 78, 126, 126, 126, 115, 47, 82, 62, 93, 32, 32, 32, 32, 32, 76, > 126, 126, 126, 114, 46, 81, 64, 93, 32, 32, 32, 32, 32, 73, 126, 126, > 126, 113, 46, 81, 66, 94, 32, 32, 32, 32, 32, 71, 126, 126, 126, 112, > 46, 81, 67, 93, 32, 32, 32, 32, 32, 68, 126, 126, 126, 112, 46, 81, > 70, 92, 92, 32, 32, 32, 32, 32, 64, 126, 126, 126, 111, 46, 81, 72, > 92, 92, 32, 32, 32, 32, 32, 61, 126, 126, 126, 110, 46, 82, 75, 92, > 92, 32, 32, 32, 32, 32, 58, 126, 126, 126, 109, 46, 98, 32, 32, 32, > 32, 32, 56, 126, 126, 126, 108, 46, 96, 32, 32, 32, 32, 32, 53, 126, > 126, 126, 107, 46, 93, 32, 32, 32, 32, 32, 49, 126, 126, 126, 106, 46, > 89, 32, 32, 32, 32, 32, 43, 126, 126, 126, 104, 46, 87, 32, 32, 32, > 32, 32, 40, 126, 126, 126, 103, 46, 85, 34, 92, 10, 34, 32, 32, 32, > 32, 32, 38, 126, 126, 126, 103, 46, 84, 32, 32, 32, 32, 32, 92, 35, > 126, 126, 126, 101, 46, 83, 32, 32, 32, 32, 32, 33, 126, 126, 86, 74, > 126, 88, 46, 83, 32, 32, 32, 32, 32, 32, 78, 126, 126, 82, 70, 126, > 86, 46, 82, 32, 32, 32, 32, 32, 32, 76, 126, 126, 80, 68, 126, 85, > 46, 82, 32, 32, 32, 32, 32, 32, 74, 126, 123, 65, 126, 85, 47, 81, > 32, 32, 32, 32, 32, 32, 71, 126, 119, 62, 126, 84, 32, 32, 32, 32, > 32, 32, 92, 35, 126, 115, 59, 126, 83, 32, 32, 32, 32, 32, 32, 33, > 126, 109, 54, 126, 82, 32, 32, 32, 32, 32, 32, 32, 78, 126, 105, 51, > 126, 81, 32, 32, 32, 32, 32, 32, 32, 74, 126, 97, 46, 126, 80, 32, > 32, 32, 32, 32, 32, 32, 71, 126, 90, 41, 126, 32, 32, 32, 32, 32, > 32, 32, 69, 126, 32, 77, 125, 32, 32, 32, 32, 32, 32, 32, 68, 115, > 32, 67, 124, 32, 32, 32, 32, 32, 32, 32, 67, 102, 32, 54, 123, 32, > 32, 32, 32, 32, 32, 32, 65, 34, 92, 10, 34, 97, 32, 50, 122, 32, > 32, 32, 32, 32, 32, 32, 64, 93, 32, 46, 122, 32, 32, 32, 32, 32, > 32, 32, 63, 89, 32, 43, 121, 32, 32, 32, 32, 32, 32, 32, 60, 83, > 32, 40, 121, 32, 32, 32, 32, 32, 32, 32, 32, 32, 67, 124, 32, 49, > 82, 32, 32, 32, 32, 32, 32, 32, 58, 126, 82, 32, 66, 86, 72, 88, > 32, 32, 32, 32, 32, 32, 32, 63, 126, 84, 32, 67, 89, 75, 90, 32, > 32, 32, 32, 32, 32, 32, 65, 126, 85, 32, 68, 91, 78, 93, 32, 32, > 32, 32, 32, 32, 32, 67, 126, 86, 32, 69, 108, 32, 32, 32, 32, 32, > 32, 32, 69, 126, 87, 32, 69, 108, 32, 32, 32, 32, 32, 32, 32, 71, > 126, 88, 32, 68, 108, 32, 32, 32, 32, 32, 32, 32, 72, 126, 89, 32, > 69, 110, 32, 32, 32, 32, 32, 32, 32, 74, 126, 90, 32, 69, 110, 32, > 32, 32, 32, 32, 32, 32, 74, 126, 89, 32, 68, 110, 32, 32, 32, 32, > 32, 32, 32, 76, 126, 91, 32, 68, 110, 32, 32, 32, 32, 32, 32, 32, > 76, 126, 90, 34, 92, 10, 34, 32, 67, 109, 32, 32, 32, 32, 32, 32, > 32, 76, 126, 90, 32, 65, 108, 32, 32, 32, 32, 32, 32, 32, 77, 126, > 90, 32, 64, 108, 32, 32, 32, 32, 32, 32, 32, 77, 126, 90, 32, 64, > 108, 32, 32, 32, 32, 32, 32, 32, 78, 126, 90, 32, 63, 107, 32, 32, > 32, 32, 32, 32, 32, 77, 126, 89, 32, 61, 106, 32, 32, 32, 32, 32, > 32, 32, 78, 126, 89, 32, 60, 105, 32, 32, 32, 32, 32, 32, 32, 77, > 126, 88, 32, 58, 104, 32, 32, 32, 32, 32, 32, 32, 78, 126, 87, 32, > 56, 103, 32, 32, 32, 32, 32, 32, 32, 77, 126, 86, 32, 54, 101, 32, > 32, 32, 32, 32, 32, 32, 77, 126, 86, 32, 52, 99, 32, 32, 32, 32, > 32, 32, 32, 77, 126, 85, 32, 49, 97, 32, 32, 32, 32, 32, 32, 32, > 76, 126, 84, 32, 48, 97, 32, 32, 32, 32, 32, 32, 32, 77, 126, 84, > 32, 46, 95, 32, 32, 32, 32, 32, 32, 32, 77, 126, 84, 32, 44, 93, > 32, 32, 32, 32, 32, 32, 32, 77, 126, 83, 32, 41, 91, 32, 32, 34, > 92, 10, 34, 32, 32, 32, 32, 32, 78, 126, 83, 32, 37, 87, 32, 32, > 32, 32, 32, 32, 32, 76, 126, 81, 32, 92, 34, 85, 32, 32, 32, 32, > 32, 32, 32, 78, 126, 83, 32, 32, 83, 32, 32, 32, 32, 32, 32, 32, > 126, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 126, 84, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 75, 126, 84, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 76, 126, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 75, > 126, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 74, 126, 83, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 74, 126, 81, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 71, 126, 80, 32, 32, 32, 32, 32, 32, 32, 32, 32, 71, > 126, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 124, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 67, 122, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 65, 120, 32, 32, 32, 32, 32, 32, 32, 32, 32, 63, 118, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 61, 116, 32, 32, 32, 32, 34, 92, 10, 34, > 32, 32, 32, 32, 32, 59, 114, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 57, 112, 32, 32, 32, 32, 32, 32, 32, 32, 32, 55, 112, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 54, 110, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 53, 110, 32, 32, 32, 32, 32, 32, 32, 32, 32, 52, 110, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 53, 110, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 52, 109, 32, 32, 32, 32, 32, 32, 32, 32, 32, 51, 108, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 50, 107, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 49, 106, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 105, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 103, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 45, 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 45, > 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 44, 101, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 44, 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 44, 102, 32, 32, 32, 32, 32, 32, 34, 92, 10, 34, 32, 32, 32, 45, > 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 44, 101, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 44, 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 45, 103, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 103, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 46, 104, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 46, 103, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 104, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 45, 102, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 45, 102, 32, 32, 32, 32, 32, 32, 32, 32, 32, 43, 99, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 92, 52, 55, 96, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 92, 35, 89, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 34, 92, 10, 34, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 50, 34, 39, 125, 41, 10, 45, 45, 91, > 45, 49, 93, 32, 123, 52, 55, 43, 51, 50, 125, 32, 45, 97, 32, 120, > 32, 45, 121, 32, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 114, 108, 101, 32, 45, 114, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, > 44, 53, 32, 45, 105, 102, 32, 123, 36, 49, 62, 52, 56, 48, 125, 32, > 45, 98, 91, 45, 49, 93, 32, 48, 46, 50, 37, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 103, 101, 32, 52, 48, 37, 10, 45, 110, 109, 32, 34, > 91, 67, 117, 112, 105, 100, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, > 115, 107, 93, 34, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 117, 114, 115, 111, 114, 32, 58, 32, > 95, 109, 111, 100, 101, 32, 61, 32, 123, 32, 48, 61, 104, 105, 100, 101, > 32, 124, 32, 49, 61, 115, 104, 111, 119, 32, 125, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 111, 119, 32, > 111, 114, 32, 104, 105, 100, 101, 32, 109, 111, 117, 115, 101, 32, 99, 117, > 114, 115, 111, 114, 32, 102, 111, 114, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 109, > 97, 110, 100, 32, 115, 117, 98, 115, 101, 116, 32, 40, 105, 102, 32, 97, > 110, 121, 41, 32, 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 105, > 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 105, 110, > 100, 105, 99, 101, 115, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 111, 100, 101, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 100, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 39, 46, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, > 112, 108, 97, 121, 32, 58, 32, 95, 88, 44, 95, 89, 44, 95, 90, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 105, 115, 112, 108, 97, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 97, 110, 32, 105, 110, 116, > 101, 114, 97, 99, 116, 105, 118, 101, 32, 118, 105, 101, 119, 101, 114, 32, > 40, 117, 115, 101, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, > 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, > 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 114, 103, 117, 109, 101, 110, 116, 115, 32, 39, 88, 39, 44, 39, > 89, 39, 44, 39, 90, 39, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, > 32, 116, 104, 101, 32, 105, 110, 105, 116, 105, 97, 108, 32, 115, 101, 108, > 101, 99, 116, 105, 111, 110, 32, 118, 105, 101, 119, 44, 32, 102, 111, 114, > 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 48, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 48, 39, 46, 10, 100, > 48, 32, 58, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 111, 117, 116, 32, 118, 97, 108, 117, 101, 32, 110, 111, > 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 100, 48, 39, 41, 46, 10, 100, 105, 115, 112, 108, 97, 121, 48, 32, 58, > 10, 45, 95, 36, 48, 10, 95, 100, 105, 115, 112, 108, 97, 121, 48, 32, > 58, 10, 45, 118, 32, 45, 10, 119, 61, 48, 32, 104, 61, 48, 32, 100, > 61, 48, 32, 115, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 119, 61, 123, 36, 119, 43, 119, > 125, 32, 104, 61, 123, 109, 97, 120, 40, 36, 104, 44, 104, 41, 125, 32, > 100, 61, 123, 109, 97, 120, 40, 36, 100, 44, 100, 41, 125, 32, 115, 61, > 123, 109, 97, 120, 40, 36, 115, 44, 115, 41, 125, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 64, 35, 61, > 61, 49, 125, 32, 45, 119, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, > 44, 45, 49, 44, 45, 49, 44, 64, 123, 48, 44, 110, 125, 92, 32, 40, > 36, 119, 120, 36, 104, 120, 36, 100, 120, 36, 115, 41, 10, 45, 101, 108, > 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 45, 119, 32, 45, 49, > 44, 45, 49, 44, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, > 48, 44, 110, 125, 44, 64, 123, 45, 49, 44, 110, 125, 92, 32, 40, 36, > 119, 120, 36, 104, 120, 36, 100, 120, 36, 115, 41, 10, 45, 101, 108, 115, > 101, 32, 45, 119, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, 44, 45, > 49, 44, 45, 49, 44, 64, 123, 48, 44, 110, 125, 44, 46, 46, 44, 64, > 123, 45, 49, 44, 110, 125, 92, 32, 40, 36, 119, 120, 36, 104, 120, 36, > 100, 120, 36, 115, 41, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 32, 45, 100, 10, 45, 118, 32, 45, 32, 45, 119, 91, 93, 32, 48, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, > 108, 97, 121, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 51, 100, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, > 115, 112, 108, 97, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 105, 110, 32, 97, 110, 32, > 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 118, 105, 101, 119, > 101, 114, 32, 40, 117, 115, 101, 32, 116, 104, 101, 32, 105, 110, 115, 116, > 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, > 102, 32, 111, 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 51, > 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 100, 97, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 97, 114, 114, 97, 121, 39, 46, 10, 100, 97, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, > 43, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, > 121, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, > 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, > 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 105, 110, 116, 101, 114, 97, > 99, 116, 105, 118, 101, 32, 119, 105, 110, 100, 111, 119, 115, 32, 119, 104, > 101, 114, 101, 32, 112, 105, 120, 101, 108, 32, 110, 101, 105, 103, 104, 98, > 111, 114, 104, 111, 111, 100, 115, 32, 99, 97, 110, 32, 98, 101, 32, 101, > 120, 112, 108, 111, 114, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 119, 105, 100, 116, 104, 61, 49, 51, 39, 32, 97, 110, 100, > 32, 39, 104, 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 46, > 10, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, 58, > 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, > 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 100, 105, 115, > 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 123, 49, 61, 49, 51, 125, 62, 48, 34, 32, 38, > 38, 32, 34, 36, 123, 50, 61, 36, 49, 125, 62, 48, 10, 45, 101, 91, > 48, 45, 45, 51, 93, 32, 34, 68, 105, 115, 112, 108, 97, 121, 32, 36, > 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 112, 105, > 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 102, 111, 114, 32, 105, > 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 46, 34, 10, 45, 118, 32, > 45, 10, 100, 120, 98, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 47, > 50, 44, 49, 44, 49, 41, 125, 32, 100, 120, 102, 61, 123, 36, 49, 45, > 49, 45, 36, 100, 120, 98, 125, 10, 100, 121, 98, 61, 123, 114, 111, 117, > 110, 100, 40, 36, 50, 47, 50, 44, 49, 44, 49, 41, 125, 32, 100, 121, > 102, 61, 123, 36, 50, 45, 49, 45, 36, 100, 121, 98, 125, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 105, 102, 32, 123, 119, 60, 49, 50, 56, 34, 32, 38, 38, 32, 34, > 104, 60, 49, 50, 56, 125, 32, 45, 114, 32, 49, 50, 56, 44, 49, 50, > 56, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 101, 110, 100, 105, 102, 10, 120, > 48, 61, 48, 32, 121, 48, 61, 48, 32, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 10, 119, 109, 97, 120, 61, 123, 48, 46, 57, 42, 64, > 123, 33, 44, 117, 125, 125, 32, 104, 109, 97, 120, 61, 123, 48, 46, 57, > 42, 64, 123, 33, 44, 118, 125, 125, 10, 45, 100, 111, 10, 45, 105, 102, > 32, 123, 119, 62, 61, 36, 119, 109, 97, 120, 124, 124, 104, 62, 61, 36, > 104, 109, 97, 120, 125, 10, 110, 61, 64, 123, 45, 49, 44, 110, 125, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 34, 73, 109, 97, 103, 101, 32, 34, > 39, 64, 123, 45, 49, 44, 98, 125, 46, 64, 123, 45, 49, 44, 120, 125, > 39, 34, 32, 105, 115, 32, 116, 111, 111, 32, 108, 97, 114, 103, 101, 44, > 32, 112, 108, 101, 97, 115, 101, 32, 115, 101, 108, 101, 99, 116, 32, 97, > 32, 115, 117, 98, 45, 105, 109, 97, 103, 101, 46, 34, 10, 45, 45, 115, > 101, 108, 101, 99, 116, 91, 45, 49, 93, 32, 50, 32, 120, 48, 61, 123, > 105, 91, 48, 93, 125, 32, 121, 48, 61, 123, 105, 91, 49, 93, 125, 32, > 119, 61, 123, 49, 43, 105, 91, 51, 93, 45, 105, 91, 48, 93, 125, 32, > 104, 61, 123, 49, 43, 105, 91, 52, 93, 45, 105, 91, 49, 93, 125, 10, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, > 36, 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 122, 91, 45, 49, > 93, 32, 36, 120, 48, 44, 36, 121, 48, 44, 48, 44, 123, 36, 120, 48, > 43, 36, 119, 45, 49, 125, 44, 123, 36, 121, 48, 43, 36, 104, 45, 49, > 125, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 119, > 104, 105, 108, 101, 32, 123, 119, 62, 61, 36, 119, 109, 97, 120, 124, 124, > 104, 62, 61, 36, 104, 109, 97, 120, 125, 10, 120, 49, 61, 45, 49, 32, > 121, 49, 61, 45, 49, 32, 99, 49, 61, 48, 32, 111, 120, 49, 61, 45, > 49, 32, 111, 121, 49, 61, 45, 49, 32, 111, 99, 49, 61, 45, 49, 10, > 120, 50, 61, 45, 49, 32, 121, 50, 61, 45, 49, 32, 99, 50, 61, 48, > 32, 111, 120, 50, 61, 45, 49, 32, 111, 121, 50, 61, 45, 49, 32, 111, > 99, 50, 61, 45, 49, 10, 120, 51, 61, 45, 49, 32, 121, 51, 61, 45, > 49, 32, 99, 51, 61, 48, 32, 111, 120, 51, 61, 45, 49, 32, 111, 121, > 51, 61, 45, 49, 32, 111, 99, 51, 61, 45, 49, 10, 99, 48, 61, 48, > 32, 111, 120, 109, 61, 45, 49, 32, 111, 121, 109, 61, 45, 49, 10, 45, > 119, 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, 44, > 45, 49, 44, 45, 49, 44, 64, 123, 45, 50, 44, 98, 125, 46, 64, 123, > 45, 50, 44, 120, 125, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, 91, > 48, 45, 51, 93, 10, 111, 99, 48, 61, 36, 99, 48, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 52, 10, 45, 105, 102, 32, 123, 36, 62, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 36, 62, 125, 34, 32, 38, 38, 32, > 34, 36, 123, 120, 36, 62, 125, 62, 61, 48, 125, 32, 45, 119, 36, 62, > 32, 48, 32, 120, 36, 62, 61, 45, 49, 32, 121, 36, 62, 61, 45, 49, > 32, 99, 36, 62, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 64, 123, 33, 36, 62, 44, 111, 125, 32, 99, 36, 62, 61, 123, > 40, 36, 123, 99, 36, 62, 125, 43, 115, 105, 103, 110, 40, 64, 123, 33, > 36, 62, 44, 111, 125, 41, 41, 37, 115, 125, 32, 45, 119, 97, 105, 116, > 91, 36, 62, 93, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 36, 62, 44, 83, 80, 65, 67, 69, 125, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 36, 62, 44, 69, 78, 84, 69, > 82, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 36, 62, 44, 65, 82, > 82, 79, 87, 82, 73, 71, 72, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 36, 62, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, 125, > 32, 99, 36, 62, 61, 123, 40, 36, 123, 99, 36, 62, 125, 43, 49, 41, > 37, 115, 125, 32, 45, 119, 97, 105, 116, 91, 36, 62, 93, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 36, 62, 44, 66, 65, 67, 75, 83, 80, 65, 67, 69, 125, 34, 32, 124, > 124, 32, 34, 64, 123, 33, 36, 62, 44, 65, 82, 82, 79, 87, 76, 69, > 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 36, 62, 44, 65, > 82, 82, 79, 87, 85, 80, 125, 125, 32, 99, 36, 62, 61, 123, 40, 36, > 123, 99, 36, 62, 125, 45, 49, 41, 37, 115, 125, 32, 45, 119, 97, 105, > 116, 91, 36, 62, 93, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 111, 99, 48, 33, > 61, 36, 99, 48, 125, 32, 99, 49, 61, 36, 99, 48, 32, 99, 50, 61, > 36, 99, 48, 32, 99, 51, 61, 36, 99, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 120, 109, 61, 64, 123, 33, 44, 120, 125, 32, 121, 109, 61, 64, > 123, 33, 44, 121, 125, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 98, 125, 38, 49, 125, > 32, 120, 49, 61, 36, 120, 109, 32, 121, 49, 61, 36, 121, 109, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 98, 125, 38, 50, 125, > 32, 120, 50, 61, 36, 120, 109, 32, 121, 50, 61, 36, 121, 109, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 98, 125, 38, 52, 125, > 32, 120, 51, 61, 36, 120, 109, 32, 121, 51, 61, 36, 121, 109, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 40, 36, 111, 120, 109, 33, 61, 36, 120, > 109, 34, 32, 124, 124, 32, 34, 36, 111, 121, 109, 33, 61, 36, 121, 109, > 41, 125, 32, 45, 119, 91, 93, 32, 45, 49, 44, 45, 49, 44, 45, 49, > 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 50, 44, 98, > 125, 46, 64, 123, 45, 50, 44, 120, 125, 34, 32, 45, 32, 40, 34, 36, > 120, 109, 44, 36, 121, 109, 34, 41, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 120, 49, 33, 61, 36, 111, 120, 49, 34, > 32, 124, 124, 32, 34, 36, 121, 49, 33, 61, 36, 111, 121, 49, 34, 32, > 124, 124, 32, 34, 36, 120, 50, 33, 61, 36, 111, 120, 50, 34, 32, 124, > 124, 32, 34, 36, 121, 50, 33, 61, 36, 111, 121, 50, 34, 32, 124, 124, > 32, 34, 36, 120, 51, 33, 61, 36, 111, 120, 51, 34, 32, 124, 124, 32, > 34, 36, 121, 51, 33, 61, 36, 111, 121, 51, 125, 10, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 123, 36, 120, 49, 62, 61, 48, 125, 10, 120, 98, > 61, 123, 36, 120, 49, 45, 36, 100, 120, 98, 125, 32, 121, 98, 61, 123, > 36, 121, 49, 45, 36, 100, 121, 98, 125, 32, 120, 101, 61, 123, 36, 120, > 49, 43, 36, 100, 120, 102, 125, 32, 121, 101, 61, 123, 36, 121, 49, 43, > 36, 100, 121, 102, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, > 44, 36, 121, 101, 44, 48, 46, 50, 44, 48, 44, 50, 53, 53, 44, 50, > 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, 36, 121, > 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, > 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 120, 50, 62, 61, 48, 125, 10, 120, 98, 61, > 123, 36, 120, 50, 45, 36, 100, 120, 98, 125, 32, 121, 98, 61, 123, 36, > 121, 50, 45, 36, 100, 121, 98, 125, 32, 120, 101, 61, 123, 36, 120, 50, > 43, 36, 100, 120, 102, 125, 32, 121, 101, 61, 123, 36, 121, 50, 43, 36, > 100, 121, 102, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, > 45, 49, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, > 36, 121, 101, 44, 48, 46, 50, 44, 50, 53, 53, 44, 51, 50, 44, 50, > 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, 36, 121, > 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 50, > 53, 53, 44, 51, 50, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 120, 51, 62, 61, 48, 125, 10, 120, 98, > 61, 123, 36, 120, 51, 45, 36, 100, 120, 98, 125, 32, 121, 98, 61, 123, > 36, 121, 51, 45, 36, 100, 121, 98, 125, 32, 120, 101, 61, 123, 36, 120, > 51, 43, 36, 100, 120, 102, 125, 32, 121, 101, 61, 123, 36, 121, 51, 43, > 36, 100, 121, 102, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, > 44, 36, 121, 101, 44, 48, 46, 50, 44, 50, 53, 53, 44, 50, 53, 53, > 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, 36, 120, 101, 44, 36, 121, > 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 119, 125, 44, 64, > 123, 45, 50, 44, 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 111, > 120, 109, 61, 36, 120, 109, 32, 111, 121, 109, 61, 36, 121, 109, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 49, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 40, 36, 111, 120, 49, 33, 61, 36, 120, > 49, 34, 32, 124, 124, 32, 34, 36, 111, 121, 49, 33, 61, 36, 121, 49, > 34, 32, 124, 124, 32, 34, 36, 111, 99, 49, 33, 61, 36, 99, 49, 41, > 125, 10, 45, 45, 122, 91, 45, 50, 93, 32, 123, 36, 120, 49, 45, 36, > 100, 120, 98, 125, 44, 123, 36, 121, 49, 45, 36, 100, 121, 98, 125, 44, > 48, 44, 36, 99, 49, 44, 123, 36, 120, 49, 43, 36, 100, 120, 102, 125, > 44, 123, 36, 121, 49, 43, 36, 100, 121, 102, 125, 44, 48, 44, 36, 99, > 49, 10, 45, 45, 122, 91, 45, 50, 93, 32, 123, 36, 120, 49, 45, 36, > 100, 120, 98, 125, 44, 123, 36, 121, 49, 45, 36, 100, 121, 98, 125, 44, > 48, 44, 123, 36, 120, 49, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, > 49, 43, 36, 100, 121, 102, 125, 44, 48, 10, 45, 95, 95, 100, 105, 115, > 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 91, 45, 50, 44, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 48, 44, 50, 53, 53, 44, 50, 53, > 53, 10, 45, 119, 49, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, > 125, 44, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 51, > 44, 98, 125, 34, 32, 45, 32, 40, 34, 36, 120, 49, 44, 36, 121, 49, > 44, 99, 61, 36, 99, 49, 34, 41, 34, 10, 45, 114, 109, 91, 45, 49, > 93, 32, 111, 120, 49, 61, 36, 120, 49, 32, 111, 121, 49, 61, 36, 121, > 49, 32, 111, 99, 49, 61, 36, 99, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 120, 50, 62, 61, 48, 34, 32, 38, 38, > 32, 34, 40, 36, 111, 120, 50, 33, 61, 36, 120, 50, 34, 32, 124, 124, > 32, 34, 36, 111, 121, 50, 33, 61, 36, 121, 50, 34, 32, 124, 124, 32, > 34, 36, 111, 99, 50, 33, 61, 36, 99, 50, 41, 125, 10, 45, 45, 122, > 91, 45, 50, 93, 32, 123, 36, 120, 50, 45, 36, 100, 120, 98, 125, 44, > 123, 36, 121, 50, 45, 36, 100, 121, 98, 125, 44, 48, 44, 36, 99, 50, > 44, 123, 36, 120, 50, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, 50, > 43, 36, 100, 121, 102, 125, 44, 48, 44, 36, 99, 50, 10, 45, 45, 122, > 91, 45, 50, 93, 32, 123, 36, 120, 50, 45, 36, 100, 120, 98, 125, 44, > 123, 36, 121, 50, 45, 36, 100, 121, 98, 125, 44, 48, 44, 123, 36, 120, > 50, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, 50, 43, 36, 100, 121, > 102, 125, 44, 48, 10, 45, 95, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 97, 114, 114, 97, 121, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 50, 53, 53, 44, 51, 50, 44, 50, 53, 53, 10, 45, 119, > 50, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, > 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 51, 44, 98, 125, 34, > 32, 45, 32, 40, 34, 36, 120, 50, 44, 36, 121, 50, 44, 99, 61, 36, > 99, 50, 34, 41, 34, 10, 45, 114, 109, 91, 45, 49, 93, 32, 111, 120, > 50, 61, 36, 120, 50, 32, 111, 121, 50, 61, 36, 121, 50, 32, 111, 99, > 50, 61, 36, 99, 50, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 36, 120, 51, 62, 61, 48, 34, 32, 38, 38, 32, 34, 40, 36, > 111, 120, 51, 33, 61, 36, 120, 51, 34, 32, 124, 124, 32, 34, 36, 111, > 121, 51, 33, 61, 36, 121, 51, 34, 32, 124, 124, 32, 34, 36, 111, 99, > 51, 33, 61, 36, 99, 51, 41, 125, 10, 45, 45, 122, 91, 45, 50, 93, > 32, 123, 36, 120, 51, 45, 36, 100, 120, 98, 125, 44, 123, 36, 121, 51, > 45, 36, 100, 121, 98, 125, 44, 48, 44, 36, 99, 51, 44, 123, 36, 120, > 51, 43, 36, 100, 120, 102, 125, 44, 123, 36, 121, 51, 43, 36, 100, 121, > 102, 125, 44, 48, 44, 36, 99, 51, 10, 45, 45, 122, 91, 45, 50, 93, > 32, 123, 36, 120, 51, 45, 36, 100, 120, 98, 125, 44, 123, 36, 121, 51, > 45, 36, 100, 121, 98, 125, 44, 48, 44, 123, 36, 120, 51, 43, 36, 100, > 120, 102, 125, 44, 123, 36, 121, 51, 43, 36, 100, 121, 102, 125, 44, 48, > 10, 45, 95, 95, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, > 121, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 119, 51, 91, 45, 49, 93, > 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, 48, 44, 45, 49, 44, > 45, 49, 44, 64, 123, 45, 51, 44, 98, 125, 34, 32, 45, 32, 40, 34, > 36, 120, 51, 44, 36, 121, 51, 44, 99, 61, 36, 99, 51, 34, 41, 34, > 10, 45, 114, 109, 91, 45, 49, 93, 32, 111, 120, 51, 61, 36, 120, 51, > 32, 111, 121, 51, 61, 36, 121, 51, 32, 111, 99, 51, 61, 36, 99, 51, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 49, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 49, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 50, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 50, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 92, 10, 33, 64, 123, 33, 51, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 51, 44, 81, 125, > 125, 10, 45, 107, 91, 48, 93, 32, 45, 119, 32, 48, 32, 45, 119, 49, > 32, 48, 32, 45, 119, 50, 32, 48, 32, 45, 119, 51, 32, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 95, 95, 100, 105, 115, 112, 108, 97, 121, 95, 97, 114, 114, 97, 121, 32, > 58, 10, 45, 114, 111, 117, 110, 100, 91, 45, 50, 93, 32, 49, 32, 45, > 99, 91, 45, 50, 93, 32, 48, 44, 57, 57, 57, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, > 44, 123, 105, 102, 40, 115, 61, 61, 49, 44, 49, 44, 48, 41, 125, 10, > 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 45, 49, 93, 32, > 45, 114, 91, 45, 50, 93, 32, 123, 36, 49, 42, 50, 52, 125, 44, 123, > 36, 50, 42, 50, 52, 125, 32, 45, 103, 114, 105, 100, 91, 45, 50, 93, > 32, 123, 49, 48, 48, 47, 36, 49, 125, 37, 44, 123, 49, 48, 48, 47, > 36, 50, 125, 37, 44, 48, 44, 48, 44, 49, 44, 48, 10, 120, 98, 61, > 123, 50, 52, 42, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 32, 121, > 98, 61, 123, 50, 52, 42, 105, 110, 116, 40, 36, 50, 47, 50, 41, 125, > 32, 120, 101, 61, 123, 36, 120, 98, 43, 50, 52, 125, 32, 121, 101, 61, > 123, 36, 121, 98, 43, 50, 52, 125, 10, 45, 114, 101, 99, 116, 97, 110, > 103, 108, 101, 91, 45, 50, 93, 32, 36, 120, 98, 44, 36, 121, 98, 44, > 36, 120, 101, 44, 36, 121, 101, 44, 49, 44, 48, 120, 70, 70, 70, 70, > 70, 70, 70, 70, 44, 36, 51, 44, 36, 52, 44, 36, 53, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 50, 32, 121, 103, 61, 36, 62, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 120, 103, 61, 36, 62, 10, > 45, 116, 91, 45, 50, 93, 32, 64, 123, 45, 51, 44, 40, 36, 120, 103, > 44, 36, 121, 103, 41, 125, 44, 123, 53, 43, 36, 120, 103, 42, 50, 52, > 125, 44, 123, 53, 43, 36, 121, 103, 42, 50, 52, 125, 44, 49, 51, 44, > 48, 46, 56, 44, 123, 105, 102, 40, 64, 123, 45, 49, 44, 40, 36, 120, > 103, 44, 36, 121, 103, 41, 125, 62, 49, 50, 56, 44, 48, 44, 50, 53, > 53, 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 102, 102, 116, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 39, 46, 10, > 100, 102, 102, 116, 32, 58, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, > 95, 102, 102, 116, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, > 108, 97, 121, 95, 102, 102, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 105, 115, 112, 108, 97, 121, 32, 102, 111, 117, 114, 105, 101, 114, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, > 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 108, 111, 103, > 45, 109, 111, 100, 117, 108, 101, 32, 97, 110, 100, 32, 97, 114, 103, 117, > 109, 101, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 102, 102, 116, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 102, 102, 116, 10, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 32, > 58, 10, 45, 95, 36, 48, 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 102, 102, 116, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 82, 101, 110, 100, 101, 114, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, > 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 119, 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 101, > 100, 32, 108, 111, 103, 45, 109, 111, 100, 117, 108, 101, 32, 97, 110, 100, > 32, 97, 114, 103, 117, 109, 101, 110, 116, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 102, 102, 116, 112, 111, 108, 97, 114, 32, 45, 43, 91, > 45, 50, 93, 32, 49, 32, 45, 108, 111, 103, 91, 45, 50, 93, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 32, 45, 97, 32, 120, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 115, 32, 120, 44, 50, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 103, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 103, 114, 97, 112, 104, 39, 46, 10, 100, 103, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 54, 52, 48, 125, 62, > 51, 50, 32, 38, 38, 32, 36, 123, 50, 61, 52, 56, 48, 125, 62, 51, > 50, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 44, > 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, > 54, 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, > 48, 125, 44, 34, 36, 123, 57, 61, 120, 45, 97, 120, 105, 115, 125, 34, > 44, 34, 36, 123, 49, 48, 61, 121, 45, 97, 120, 105, 115, 125, 34, 10, > 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, > 36, 123, 49, 45, 56, 125, 44, 34, 36, 57, 34, 44, 34, 36, 49, 48, > 34, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, > 95, 103, 114, 97, 112, 104, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, > 51, 50, 44, 95, 104, 101, 105, 103, 104, 116, 62, 51, 50, 44, 95, 112, > 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, 101, 114, 116, 101, 120, > 95, 116, 121, 112, 101, 44, 95, 120, 109, 105, 110, 44, 95, 120, 109, 97, > 120, 44, 95, 121, 109, 105, 110, 44, 95, 121, 109, 97, 120, 44, 95, 120, > 108, 97, 98, 101, 108, 44, 95, 121, 108, 97, 98, 101, 108, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 103, 114, > 97, 112, 104, 32, 112, 108, 111, 116, 32, 102, 114, 111, 109, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, > 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, > 116, 104, 61, 54, 52, 48, 39, 44, 32, 39, 104, 101, 105, 103, 104, 116, > 61, 52, 56, 48, 39, 44, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, > 101, 61, 49, 39, 44, 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, > 112, 101, 61, 49, 39, 44, 32, 39, 120, 109, 105, 110, 61, 120, 109, 97, > 120, 61, 121, 109, 105, 110, 61, 121, 109, 97, 120, 61, 48, 39, 44, 32, > 39, 120, 108, 97, 98, 101, 108, 61, 34, 120, 45, 97, 120, 105, 115, 34, > 39, 32, 97, 110, 100, 32, 39, 121, 108, 97, 98, 101, 108, 61, 34, 121, > 45, 97, 120, 105, 115, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 49, 50, 56, 44, 49, 44, 49, 44, 49, 44, 39, 99, > 111, 115, 40, 120, 47, 49, 48, 43, 63, 41, 39, 32, 45, 45, 100, 105, > 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, > 51, 48, 48, 44, 51, 10, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 54, 52, 48, 125, 62, 51, 50, 32, 38, 38, 32, 36, 123, 50, > 61, 52, 56, 48, 125, 62, 51, 50, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 51, 61, 49, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, 55, 61, > 48, 125, 44, 36, 123, 56, 61, 48, 125, 44, 34, 36, 123, 57, 61, 120, > 45, 97, 120, 105, 115, 125, 34, 44, 34, 36, 123, 49, 48, 61, 121, 45, > 97, 120, 105, 115, 125, 34, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, > 95, 103, 114, 97, 112, 104, 32, 36, 123, 49, 45, 56, 125, 44, 34, 36, > 57, 34, 44, 34, 36, 49, 48, 34, 10, 95, 100, 105, 115, 112, 108, 97, > 121, 95, 103, 114, 97, 112, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 49, 61, 54, 52, 48, 125, 62, 51, 50, 32, 38, 38, > 32, 36, 123, 50, 61, 52, 56, 48, 125, 62, 51, 50, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 44, 36, 123, 52, 61, 48, > 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, 125, 44, > 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 48, 125, 44, 34, 36, > 123, 57, 61, 120, 45, 97, 120, 105, 115, 125, 34, 44, 34, 36, 123, 49, > 48, 61, 121, 45, 97, 120, 105, 115, 125, 34, 10, 45, 101, 91, 48, 45, > 45, 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, 49, 120, 36, > 50, 32, 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, 32, 102, 114, 111, > 109, 32, 100, 97, 116, 97, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, > 48, 44, 110, 125, 10, 111, 110, 101, 61, 123, 36, 51, 33, 61, 51, 125, > 32, 115, 105, 122, 61, 123, 119, 42, 104, 42, 100, 125, 10, 45, 105, 102, > 32, 123, 36, 53, 61, 61, 36, 54, 125, 32, 120, 109, 105, 110, 61, 48, > 32, 120, 109, 97, 120, 61, 123, 36, 115, 105, 122, 45, 36, 111, 110, 101, > 125, 32, 45, 101, 108, 115, 101, 32, 120, 109, 105, 110, 61, 123, 109, 105, > 110, 40, 36, 53, 44, 36, 54, 41, 125, 32, 120, 109, 97, 120, 61, 123, > 109, 97, 120, 40, 36, 53, 44, 36, 54, 41, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 36, 56, 125, 32, > 121, 109, 105, 110, 61, 123, 105, 109, 45, 40, 105, 77, 45, 105, 109, 41, > 47, 50, 48, 125, 32, 121, 109, 97, 120, 61, 123, 105, 77, 43, 40, 105, > 77, 45, 105, 109, 41, 47, 50, 48, 125, 32, 45, 101, 108, 115, 101, 32, > 121, 109, 105, 110, 61, 123, 109, 105, 110, 40, 36, 55, 44, 36, 56, 41, > 125, 32, 121, 109, 97, 120, 61, 123, 109, 97, 120, 40, 36, 55, 44, 36, > 56, 41, 125, 32, 45, 101, 110, 100, 105, 102, 10, 103, 119, 61, 123, 36, > 49, 45, 51, 50, 125, 32, 103, 104, 61, 123, 36, 50, 45, 51, 50, 125, > 32, 103, 103, 61, 123, 40, 36, 103, 119, 45, 36, 111, 110, 101, 41, 47, > 40, 36, 115, 105, 122, 45, 36, 111, 110, 101, 41, 125, 10, 36, 103, 119, > 44, 36, 103, 104, 44, 49, 44, 51, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 123, 36, 115, 105, 122, 60, 51, 50, 125, 32, 45, 103, 114, 105, 100, > 91, 45, 49, 93, 32, 36, 103, 103, 44, 36, 103, 103, 44, 48, 44, 48, > 44, 48, 46, 50, 53, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, > 44, 48, 10, 45, 101, 108, 115, 101, 32, 45, 103, 114, 105, 100, 91, 45, > 49, 93, 32, 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 50, 53, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 48, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 45, > 50, 44, 115, 125, 61, 61, 49, 125, 32, 40, 49, 50, 48, 44, 49, 50, > 48, 44, 50, 48, 48, 41, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 45, 50, 44, 115, 125, 60, 61, 51, 125, 32, 40, 50, 50, 48, 44, 49, > 48, 44, 49, 48, 59, 49, 48, 44, 50, 50, 48, 44, 49, 48, 59, 49, > 48, 44, 49, 48, 44, 50, 50, 48, 41, 10, 45, 101, 108, 115, 101, 10, > 40, 48, 44, 50, 53, 53, 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, > 53, 54, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 109, 97, 112, 91, > 45, 49, 93, 32, 50, 32, 45, 122, 91, 45, 49, 93, 32, 50, 44, 49, > 48, 48, 37, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, > 32, 99, 120, 121, 122, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, > 109, 97, 120, 40, 51, 44, 64, 123, 45, 51, 44, 115, 125, 41, 125, 44, > 49, 44, 49, 44, 48, 44, 50, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 48, 44, 50, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, 50, > 53, 53, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, > 45, 51, 44, 115, 125, 32, 45, 115, 104, 91, 45, 51, 93, 32, 36, 62, > 44, 36, 62, 32, 45, 103, 114, 97, 112, 104, 91, 45, 51, 93, 32, 91, > 45, 49, 93, 44, 36, 51, 44, 36, 52, 44, 36, 121, 109, 97, 120, 44, > 36, 121, 109, 105, 110, 44, 49, 44, 64, 123, 45, 50, 44, 48, 45, 50, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 105, 102, 116, > 91, 45, 49, 93, 32, 48, 44, 45, 49, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 48, 44, > 49, 44, 49, 49, 48, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 49, 48, 48, 37, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 49, 48, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 49, 48, 48, > 37, 44, 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 48, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 49, 44, 50, > 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 50, 53, 53, 10, 120, 109, 97, 120, 95, 61, 123, 36, 120, 109, 105, > 110, 43, 40, 36, 120, 109, 97, 120, 45, 36, 120, 109, 105, 110, 41, 42, > 40, 36, 115, 105, 122, 45, 36, 111, 110, 101, 41, 47, 40, 36, 115, 105, > 122, 45, 49, 41, 125, 10, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 36, 120, 109, 105, 110, 44, 36, 120, 109, 97, 120, 95, 44, 36, 121, 109, > 97, 120, 44, 36, 121, 109, 105, 110, 44, 49, 51, 44, 49, 44, 48, 10, > 45, 105, 102, 32, 123, 36, 120, 109, 105, 110, 62, 48, 125, 32, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 48, 44, 36, 121, 109, 97, > 120, 44, 36, 121, 109, 105, 110, 44, 49, 51, 44, 49, 44, 49, 54, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 109, > 97, 120, 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 123, 119, 45, 49, 125, 44, 123, 119, 45, 49, 125, 44, 36, 121, 109, 97, > 120, 44, 36, 121, 109, 105, 110, 44, 49, 51, 44, 49, 44, 49, 54, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 121, 109, > 105, 110, 62, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 36, 120, 109, 105, 110, 44, 36, 120, 109, 97, 120, 95, 44, 123, 104, 45, > 49, 125, 44, 123, 104, 45, 49, 125, 44, 49, 51, 44, 49, 44, 49, 54, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 121, > 109, 97, 120, 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, > 32, 36, 120, 109, 105, 110, 44, 36, 120, 109, 97, 120, 95, 44, 48, 44, > 48, 44, 49, 51, 44, 49, 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, 32, 51, 32, > 45, 110, 101, 113, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 91, > 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 51, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 102, 114, 97, 109, 101, > 91, 45, 49, 93, 32, 49, 54, 44, 49, 54, 44, 50, 50, 48, 10, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 57, 34, 44, 48, 44, 48, > 44, 49, 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, > 45, 50, 50, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, 125, > 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 49, 54, 125, 44, 48, 44, > 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 36, 49, 48, 34, 44, 48, 44, 48, 44, > 49, 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, > 50, 50, 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, > 45, 57, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 50, 44, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 47, 50, > 125, 44, 48, 44, 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 104, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 39, 46, 10, 100, 104, > 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, > 32, 45, 118, 32, 43, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 36, 34, 42, 34, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 95, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 32, 58, 32, 95, 119, 105, 100, 116, 104, > 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 99, 108, > 117, 115, 116, 101, 114, 115, 62, 48, 44, 95, 109, 105, 110, 95, 118, 97, > 108, 117, 101, 91, 37, 93, 44, 95, 109, 97, 120, 95, 118, 97, 108, 117, > 101, 91, 37, 93, 44, 95, 115, 104, 111, 119, 95, 97, 120, 101, 115, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 101, 120, 112, 114, 101, > 115, 115, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 110, 100, 101, 114, 32, 97, 32, 99, 104, 97, 110, 110, 101, 108, > 45, 98, 121, 45, 99, 104, 97, 110, 110, 101, 108, 32, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 104, 97, 115, 32, 115, 101, 118, 101, 114, 97, 108, 32, 115, 108, > 105, 99, 101, 115, 44, 32, 116, 104, 101, 32, 114, 101, 110, 100, 101, 114, > 105, 110, 103, 32, 105, 115, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, > 32, 102, 111, 114, 32, 97, 108, 108, 32, 105, 110, 112, 117, 116, 32, 115, > 108, 105, 99, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 39, 32, 105, 115, 32, > 97, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 117, 115, 101, 100, 32, 116, > 111, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 116, 104, 101, 32, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 100, 97, 116, 97, 32, 102, > 111, 114, 32, 118, 105, 115, 117, 97, 108, 105, 122, 97, 116, 105, 111, 110, > 32, 112, 117, 114, 112, 111, 115, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 104, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, > 116, 104, 61, 53, 49, 50, 39, 44, 32, 39, 104, 101, 105, 103, 104, 116, > 61, 51, 48, 48, 39, 44, 32, 39, 99, 108, 117, 115, 116, 101, 114, 115, > 61, 50, 53, 54, 39, 44, 32, 39, 109, 105, 110, 95, 118, 97, 108, 117, > 101, 61, 48, 37, 39, 44, 32, 39, 109, 97, 120, 95, 118, 97, 108, 117, > 101, 61, 49, 48, 48, 37, 39, 44, 32, 39, 115, 104, 111, 119, 95, 97, > 120, 101, 115, 61, 49, 39, 32, 97, 110, 100, 32, 39, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 61, 105, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 53, 49, 50, 44, 51, 48, 48, 10, 100, 105, 115, 112, > 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 36, 48, 32, 36, 34, 42, 34, 10, 95, 100, 105, > 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 49, > 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 48, 48, 125, > 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, 50, 53, 54, 125, 62, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 48, 37, 125, 44, > 36, 123, 53, 61, 49, 48, 48, 37, 125, 44, 36, 123, 54, 61, 49, 125, > 44, 34, 36, 123, 55, 61, 105, 125, 34, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, 49, 120, 36, 50, > 32, 99, 104, 97, 110, 110, 101, 108, 45, 98, 121, 45, 99, 104, 97, 110, > 110, 101, 108, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 44, 32, 119, 105, > 116, 104, 32, 36, 51, 32, 99, 108, 117, 115, 116, 101, 114, 115, 44, 32, > 109, 105, 110, 105, 109, 117, 109, 32, 118, 97, 108, 117, 101, 32, 36, 52, > 32, 97, 110, 100, 32, 109, 97, 120, 105, 109, 117, 109, 32, 118, 97, 108, > 117, 101, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, > 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 105, 102, 32, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 52, 125, 32, > 109, 61, 123, 105, 109, 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 52, > 125, 32, 45, 101, 108, 115, 101, 32, 109, 61, 36, 52, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 53, 125, 32, 77, 61, 123, 105, 109, > 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 53, 125, 32, 45, 101, 108, > 115, 101, 32, 77, 61, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, 115, > 61, 123, 115, 125, 32, 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 115, 32, 45, 108, 91, 123, 45, 49, 45, 36, 62, 125, 93, > 32, 45, 115, 32, 122, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 36, 51, 44, 36, 109, 44, 36, 77, 32, 45, 97, 32, 122, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, 99, 32, > 45, 102, 32, 39, 34, 36, 55, 34, 39, 32, 118, 77, 61, 123, 105, 77, > 125, 32, 45, 115, 32, 122, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 36, 49, 44, 36, 50, 44, 49, > 44, 123, 115, 125, 44, 45, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 115, 125, 32, 45, 115, 104, 91, 45, 50, 44, 45, 49, 93, > 32, 36, 62, 44, 36, 62, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 51, 44, 48, 44, 36, 118, 77, 44, 48, > 44, 49, 44, 48, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 43, > 32, 50, 53, 53, 10, 45, 105, 102, 32, 36, 54, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, > 36, 109, 44, 36, 77, 44, 36, 118, 77, 44, 48, 44, 49, 51, 44, 49, > 44, 50, 53, 53, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, > 93, 32, 51, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, > 122, 32, 45, 110, 109, 32, 36, 110, 109, 44, 49, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, 121, 95, 112, 97, 114, 97, > 109, 101, 116, 114, 105, 99, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, > 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 111, 117, 116, > 108, 105, 110, 101, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 118, 101, > 114, 116, 101, 120, 95, 114, 97, 100, 105, 117, 115, 62, 61, 48, 44, 95, > 105, 115, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 101, 100, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, 115, 95, 100, 101, 99, > 111, 114, 97, 116, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 44, 95, 120, 108, 97, 98, 101, 108, 44, 95, 121, 108, 97, 98, 101, 108, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, > 32, 50, 100, 32, 111, 114, 32, 51, 100, 32, 112, 97, 114, 97, 109, 101, > 116, 114, 105, 99, 32, 99, 117, 114, 118, 101, 32, 111, 114, 32, 112, 111, > 105, 110, 116, 32, 99, 108, 111, 117, 100, 115, 32, 102, 114, 111, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 100, > 97, 116, 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 117, > 114, 118, 101, 32, 112, 111, 105, 110, 116, 115, 32, 97, 114, 101, 32, 100, > 101, 102, 105, 110, 101, 100, 32, 97, 115, 32, 112, 105, 120, 101, 108, 115, > 32, 111, 102, 32, 97, 32, 50, 32, 111, 114, 32, 51, 45, 99, 104, 97, > 110, 110, 101, 108, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 102, 32, 116, 104, 101, 32, 112, 111, 105, 110, > 116, 32, 105, 109, 97, 103, 101, 32, 99, 111, 110, 116, 97, 105, 110, 115, > 32, 109, 111, 114, 101, 32, 116, 104, 97, 110, 32, 51, 32, 99, 104, 97, > 110, 110, 101, 108, 115, 44, 32, 97, 100, 100, 105, 116, 105, 111, 110, 97, > 108, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 100, 101, 102, 105, 110, > 101, 32, 116, 104, 101, 32, 40, 82, 44, 71, 44, 66, 41, 32, 99, 111, > 108, 111, 114, 32, 102, 111, 114, 32, 101, 97, 99, 104, 32, 118, 101, 114, > 116, 101, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, > 32, 39, 111, 117, 116, 108, 105, 110, 101, 95, 111, 112, 97, 99, 105, 116, > 121, 62, 49, 39, 44, 32, 116, 104, 101, 32, 111, 117, 116, 108, 105, 110, > 101, 32, 105, 115, 32, 99, 111, 108, 111, 114, 101, 100, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 118, 101, 114, 116, 101, 120, 32, 99, > 111, 108, 111, 114, 115, 32, 97, 110, 100, 32, 39, 111, 117, 116, 108, 105, > 110, 101, 95, 111, 112, 97, 99, 105, 116, 121, 45, 49, 39, 32, 105, 115, > 32, 117, 115, 101, 100, 32, 97, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 116, 104, 101, 32, 97, 99, 116, 117, 97, 108, 32, 100, 114, 97, > 119, 105, 110, 103, 32, 111, 112, 97, 99, 105, 116, 121, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, 53, 49, > 50, 39, 44, 32, 39, 104, 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, > 104, 39, 44, 32, 39, 111, 117, 116, 108, 105, 110, 101, 95, 111, 112, 97, > 99, 105, 116, 121, 61, 51, 39, 44, 32, 39, 118, 101, 114, 116, 101, 120, > 95, 114, 97, 100, 105, 117, 115, 61, 48, 39, 44, 32, 39, 105, 115, 95, > 97, 110, 116, 105, 97, 108, 105, 97, 115, 101, 100, 61, 49, 39, 44, 32, > 39, 105, 115, 95, 100, 101, 99, 111, 114, 97, 116, 101, 100, 61, 49, 39, > 44, 32, 39, 120, 108, 97, 98, 101, 108, 61, 34, 120, 45, 97, 120, 105, > 115, 34, 39, 32, 97, 110, 100, 32, 39, 121, 108, 97, 98, 101, 108, 61, > 34, 121, 45, 97, 120, 105, 115, 34, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 49, 48, 50, 52, 44, 49, 44, 49, 44, 50, > 44, 39, 116, 61, 120, 47, 52, 48, 59, 105, 102, 40, 99, 61, 61, 48, > 44, 115, 105, 110, 40, 116, 41, 44, 99, 111, 115, 40, 116, 41, 41, 42, > 40, 101, 120, 112, 40, 99, 111, 115, 40, 116, 41, 41, 45, 50, 42, 99, > 111, 115, 40, 52, 42, 116, 41, 45, 115, 105, 110, 40, 116, 47, 49, 50, > 41, 94, 53, 41, 39, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, > 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 53, 49, 50, 44, 53, 49, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 48, 48, > 48, 44, 49, 44, 49, 44, 50, 44, 63, 40, 45, 49, 48, 48, 44, 49, > 48, 48, 41, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 52, 44, > 49, 32, 45, 110, 111, 105, 115, 101, 32, 49, 50, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 48, 44, 50, 32, 45, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, 97, 112, 112, > 101, 110, 100, 32, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, > 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 53, 49, 50, 44, 53, 49, > 50, 44, 48, 46, 49, 44, 56, 10, 100, 105, 115, 112, 108, 97, 121, 95, > 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 32, 38, 38, 32, > 36, 123, 52, 61, 48, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 51, 125, 44, 36, 123, 53, 61, 49, 125, 44, 36, > 123, 54, 61, 49, 125, 44, 34, 36, 123, 55, 61, 120, 45, 97, 120, 105, > 115, 125, 34, 44, 34, 36, 123, 56, 61, 121, 45, 97, 120, 105, 115, 125, > 34, 10, 45, 118, 32, 45, 32, 115, 48, 61, 34, 110, 111, 32, 34, 32, > 115, 49, 61, 34, 34, 32, 111, 48, 61, 34, 34, 32, 111, 49, 61, 34, > 99, 111, 108, 111, 114, 101, 100, 32, 34, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, > 49, 120, 36, 50, 32, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, > 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, 32, 102, 114, 111, 109, 32, > 100, 97, 116, 97, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 34, 36, 123, 111, 123, 36, 51, 62, 49, 125, > 125, 34, 111, 117, 116, 108, 105, 110, 101, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 34, 123, 105, 102, 40, 36, 51, 62, 49, 44, 36, 51, 45, 49, > 44, 36, 51, 41, 125, 92, 10, 34, 44, 32, 118, 101, 114, 116, 101, 120, > 32, 114, 97, 100, 105, 117, 115, 32, 36, 52, 44, 32, 34, 36, 123, 115, > 123, 36, 53, 33, 61, 48, 125, 125, 34, 97, 110, 116, 105, 97, 108, 105, > 97, 115, 105, 110, 103, 32, 97, 110, 100, 32, 34, 36, 123, 115, 123, 36, > 54, 33, 61, 48, 125, 125, 34, 100, 101, 99, 111, 114, 97, 116, 105, 111, > 110, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, 109, 61, 64, 123, > 48, 44, 110, 125, 32, 78, 61, 123, 119, 42, 104, 42, 100, 125, 10, 45, > 105, 91, 48, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 43, 91, 48, 93, 32, 48, 46, 53, 32, 45, 105, 91, 49, > 93, 32, 40, 36, 78, 59, 36, 78, 41, 10, 45, 105, 102, 32, 123, 115, > 61, 61, 52, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 51, 44, 51, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 105, 115, 95, 103, 114, 97, 121, > 115, 99, 97, 108, 101, 61, 49, 10, 45, 101, 108, 115, 101, 32, 105, 115, > 95, 103, 114, 97, 121, 115, 99, 97, 108, 101, 61, 123, 115, 60, 52, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 44, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 48, 44, 48, 32, 120, 109, 61, 123, 105, 109, 125, 32, 120, 77, > 61, 123, 105, 77, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, > 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 121, 109, 61, 123, 105, 109, > 125, 32, 121, 77, 61, 123, 105, 77, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 122, 109, > 61, 123, 105, 109, 125, 32, 122, 77, 61, 123, 105, 77, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 99, 120, 121, 122, 32, 45, 115, 91, 45, 49, 93, 32, 120, > 44, 50, 10, 45, 105, 91, 45, 50, 93, 32, 40, 49, 44, 48, 59, 49, > 44, 123, 36, 78, 45, 49, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, > 50, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, > 100, 91, 45, 50, 93, 32, 49, 44, 36, 78, 44, 49, 44, 49, 44, 49, > 10, 45, 121, 32, 45, 97, 32, 121, 32, 45, 99, 51, 100, 32, 45, 110, > 51, 100, 32, 45, 42, 51, 100, 32, 49, 44, 45, 49, 44, 49, 10, 123, > 105, 102, 40, 36, 54, 44, 109, 97, 120, 40, 49, 44, 36, 49, 45, 51, > 50, 41, 44, 36, 49, 41, 125, 44, 123, 105, 102, 40, 36, 54, 44, 109, > 97, 120, 40, 49, 44, 36, 50, 45, 51, 50, 41, 44, 36, 50, 41, 125, > 44, 49, 44, 123, 105, 102, 40, 36, 105, 115, 95, 103, 114, 97, 121, 115, > 99, 97, 108, 101, 44, 49, 44, 51, 41, 125, 44, 50, 53, 53, 10, 45, > 42, 51, 100, 91, 48, 93, 32, 123, 48, 46, 57, 54, 42, 109, 105, 110, > 40, 119, 44, 104, 41, 125, 10, 45, 105, 102, 32, 36, 54, 32, 76, 61, > 123, 48, 46, 49, 42, 109, 97, 120, 40, 36, 49, 44, 36, 50, 41, 125, > 32, 45, 103, 114, 105, 100, 91, 49, 93, 32, 36, 76, 44, 36, 76, 44, > 48, 44, 48, 44, 48, 46, 50, 53, 44, 48, 120, 67, 67, 67, 67, 67, > 67, 67, 67, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 53, 10, 45, 114, 91, 49, 93, 32, 50, 48, 48, 37, 44, 50, > 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 49, 32, 45, 42, 51, > 100, 91, 48, 93, 32, 50, 10, 45, 105, 102, 32, 36, 52, 32, 45, 45, > 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, 48, 93, 32, 123, 50, 42, > 36, 52, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, > 32, 91, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, > 44, 51, 44, 48, 44, 48, 32, 45, 114, 109, 91, 50, 93, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 36, 52, 10, 45, 45, > 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, 48, 93, 32, 36, 52, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 50, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 51, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 50, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 108, 91, 48, 93, 32, 45, 115, > 51, 100, 32, 45, 102, 91, 49, 93, 32, 39, 105, 45, 121, 39, 32, 45, > 114, 109, 91, 51, 93, 32, 45, 105, 91, 51, 93, 32, 40, 50, 44, 48, > 44, 49, 59, 50, 44, 123, 36, 78, 45, 50, 125, 44, 123, 36, 78, 45, > 49, 125, 41, 32, 45, 114, 91, 51, 93, 32, 51, 44, 123, 36, 78, 45, > 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, > 51, 93, 10, 45, 114, 91, 53, 93, 32, 49, 44, 123, 104, 45, 49, 125, > 44, 49, 44, 49, 44, 48, 10, 45, 105, 102, 32, 123, 36, 51, 62, 49, > 125, 32, 45, 114, 91, 52, 93, 32, 51, 44, 64, 123, 52, 44, 104, 47, > 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 114, 91, 52, 93, 32, > 51, 44, 64, 123, 52, 44, 104, 45, 49, 125, 44, 49, 44, 49, 44, 50, > 32, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 52, 93, 32, 45, 105, > 91, 52, 93, 32, 51, 44, 123, 36, 78, 45, 49, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 121, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, > 108, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, > 48, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 123, 105, 102, > 40, 36, 51, 62, 49, 44, 36, 51, 45, 49, 44, 36, 51, 41, 125, 44, > 50, 44, 48, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 48, 93, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 49, 44, 49, 48, 48, 37, > 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, > 10, 120, 99, 61, 123, 48, 46, 53, 42, 40, 36, 120, 109, 43, 36, 120, > 77, 41, 125, 32, 121, 99, 61, 123, 48, 46, 53, 42, 40, 36, 121, 109, > 43, 36, 121, 77, 41, 125, 32, 100, 120, 61, 123, 48, 46, 53, 42, 40, > 36, 120, 77, 45, 36, 120, 109, 41, 47, 48, 46, 57, 54, 125, 32, 100, > 121, 61, 123, 48, 46, 53, 42, 40, 36, 121, 77, 45, 36, 121, 109, 41, > 47, 48, 46, 57, 54, 125, 10, 120, 109, 61, 123, 36, 120, 99, 45, 36, > 100, 120, 125, 32, 120, 77, 61, 123, 36, 120, 99, 43, 36, 100, 120, 125, > 32, 121, 109, 61, 123, 36, 121, 99, 45, 36, 100, 121, 125, 32, 121, 77, > 61, 123, 36, 121, 99, 43, 36, 100, 121, 125, 10, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 36, > 120, 109, 44, 36, 120, 77, 44, 36, 121, 77, 44, 36, 121, 109, 44, 49, > 51, 44, 49, 44, 49, 10, 45, 105, 102, 32, 123, 36, 120, 109, 62, 48, > 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 36, 121, 77, 44, 36, 121, 109, 44, 49, 51, 44, 49, 44, 49, 54, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 120, 77, > 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 123, 119, > 45, 49, 125, 44, 123, 119, 45, 49, 125, 44, 36, 121, 77, 44, 36, 121, > 109, 44, 49, 51, 44, 49, 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 121, 109, 62, 48, 125, 32, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 36, 120, 109, 44, 36, 120, 77, 44, > 123, 104, 45, 49, 125, 44, 123, 104, 45, 49, 125, 44, 49, 51, 44, 49, > 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 121, 77, 60, 48, 125, 32, 45, 97, 120, 101, 115, 91, 45, 49, > 93, 32, 36, 120, 109, 44, 36, 120, 77, 44, 48, 44, 48, 44, 49, 51, > 44, 49, 44, 49, 54, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 45, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 48, 48, 32, 45, 101, 113, 91, 45, 50, 93, 32, 48, 10, 45, 42, > 91, 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 49, 50, 56, 32, 45, 102, > 114, 97, 109, 101, 32, 49, 53, 44, 49, 53, 44, 50, 50, 48, 10, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 55, 34, 44, 48, 44, 48, > 44, 49, 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, > 45, 50, 50, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, 125, > 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 49, 54, 125, 44, 48, 44, > 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 36, 56, 34, 44, 48, 44, 48, 44, 49, > 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, 50, > 50, 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 45, > 57, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 50, > 44, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 47, 50, 125, > 44, 48, 44, 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 91, 45, 49, 93, 32, 36, > 110, 109, 44, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 112, 32, > 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 115, 112, 108, > 97, 121, 95, 112, 111, 108, 97, 114, 39, 46, 10, 100, 112, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 112, 111, 108, > 97, 114, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, > 112, 108, 97, 121, 95, 112, 111, 108, 97, 114, 32, 58, 32, 95, 119, 105, > 100, 116, 104, 62, 51, 50, 44, 95, 104, 101, 105, 103, 104, 116, 62, 51, > 50, 44, 95, 111, 117, 116, 108, 105, 110, 101, 95, 116, 121, 112, 101, 44, > 95, 102, 105, 108, 108, 95, 82, 44, 95, 102, 105, 108, 108, 95, 71, 44, > 95, 102, 105, 108, 108, 95, 66, 44, 95, 116, 104, 101, 116, 97, 95, 115, > 116, 97, 114, 116, 44, 95, 116, 104, 101, 116, 97, 95, 101, 110, 100, 44, > 95, 120, 108, 97, 98, 101, 108, 44, 95, 121, 108, 97, 98, 101, 108, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, > 112, 111, 108, 97, 114, 32, 99, 117, 114, 118, 101, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, > 100, 97, 116, 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 112, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 111, 117, 116, 108, 105, 110, 101, > 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 114, 60, 48, 61, 100, 111, 116, 115, 32, 119, 105, 116, 104, 32, 114, 97, > 100, 105, 117, 115, 32, 45, 114, 32, 124, 32, 48, 61, 110, 111, 32, 111, > 117, 116, 108, 105, 110, 101, 32, 124, 32, 114, 62, 48, 61, 108, 105, 110, > 101, 115, 43, 100, 111, 116, 115, 32, 119, 105, 116, 104, 32, 114, 97, 100, > 105, 117, 115, 32, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 102, 105, 108, 108, 95, 99, 111, 108, 111, 114, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 32, 102, 105, > 108, 108, 32, 124, 32, 82, 44, 71, 44, 66, 61, 102, 105, 108, 108, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, > 111, 108, 111, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 119, 105, 100, 116, 104, 61, 53, 48, 48, 39, 44, 32, 39, 104, > 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 44, 32, 39, 111, > 117, 116, 108, 105, 110, 101, 95, 116, 121, 112, 101, 61, 49, 39, 44, 32, > 39, 102, 105, 108, 108, 95, 82, 61, 102, 105, 108, 108, 95, 71, 61, 102, > 105, 108, 108, 95, 66, 61, 50, 48, 48, 39, 44, 32, 39, 116, 104, 101, > 116, 97, 95, 115, 116, 97, 114, 116, 61, 48, 39, 44, 32, 39, 116, 104, > 101, 116, 97, 95, 101, 110, 100, 61, 51, 54, 48, 39, 44, 32, 39, 120, > 108, 97, 98, 101, 108, 61, 34, 120, 45, 97, 120, 105, 115, 34, 39, 32, > 97, 110, 100, 32, 39, 121, 108, 97, 98, 101, 108, 61, 34, 121, 45, 97, > 120, 105, 115, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 48, 46, 51, > 43, 97, 98, 115, 40, 99, 111, 115, 40, 49, 48, 42, 112, 105, 42, 120, > 47, 119, 41, 41, 43, 63, 40, 48, 46, 52, 41, 39, 32, 45, 100, 105, > 115, 112, 108, 97, 121, 95, 112, 111, 108, 97, 114, 32, 53, 49, 50, 44, > 53, 49, 50, 44, 52, 44, 50, 48, 48, 44, 50, 53, 53, 44, 50, 48, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, > 48, 44, 49, 44, 49, 44, 49, 44, 39, 120, 94, 51, 47, 49, 101, 49, > 48, 39, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, 111, 108, 97, > 114, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 45, 49, 44, 44, > 44, 48, 44, 123, 49, 53, 42, 51, 54, 48, 125, 10, 100, 105, 115, 112, > 108, 97, 121, 95, 112, 111, 108, 97, 114, 32, 58, 10, 45, 118, 32, 45, > 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, > 95, 36, 48, 32, 36, 42, 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, > 112, 111, 108, 97, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 53, 48, 48, 125, 62, 51, 50, 32, 38, 38, 32, 36, > 123, 50, 61, 36, 49, 125, 62, 51, 50, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 49, 125, 44, 36, 123, 52, 61, 50, 48, 48, 125, > 44, 36, 123, 53, 61, 36, 52, 125, 44, 36, 123, 54, 61, 36, 53, 125, > 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 51, 54, 48, 125, > 44, 34, 36, 123, 57, 61, 120, 45, 97, 120, 105, 115, 125, 34, 44, 34, > 36, 123, 49, 48, 61, 121, 45, 97, 120, 105, 115, 125, 34, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 36, > 49, 120, 36, 50, 32, 112, 111, 108, 97, 114, 32, 103, 114, 97, 112, 104, > 32, 112, 108, 111, 116, 32, 102, 114, 111, 109, 32, 100, 97, 116, 97, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 44, 32, > 119, 105, 116, 104, 32, 111, 117, 116, 108, 105, 110, 101, 32, 36, 52, 32, > 97, 110, 100, 32, 102, 105, 108, 108, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 52, 44, 36, 53, 44, 36, 54, 41, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 77, 61, 123, > 109, 97, 120, 40, 97, 98, 115, 40, 105, 77, 41, 44, 97, 98, 115, 40, > 105, 109, 41, 41, 125, 10, 45, 42, 32, 123, 48, 46, 52, 56, 42, 109, > 105, 110, 40, 36, 49, 44, 36, 50, 41, 47, 36, 77, 125, 10, 45, 121, > 32, 40, 123, 36, 55, 42, 112, 105, 47, 49, 56, 48, 125, 59, 123, 45, > 36, 56, 42, 112, 105, 47, 49, 56, 48, 125, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 51, 10, > 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, > 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 42, 91, 45, 51, 44, 45, 50, 93, 10, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 120, 32, 78, 61, 123, 104, 125, 10, 45, 110, 109, 91, 45, > 49, 93, 32, 99, 111, 111, 114, 100, 115, 10, 45, 105, 102, 32, 36, 51, > 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, > 91, 45, 49, 93, 32, 48, 46, 53, 32, 40, 36, 78, 44, 36, 78, 41, > 10, 45, 45, 122, 91, 99, 111, 111, 114, 100, 115, 93, 32, 48, 44, 50, > 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 50, 32, 49, 44, 36, 78, > 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, 43, 91, 45, 49, 93, > 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, > 61, 91, 45, 49, 93, 32, 48, 44, 50, 44, 49, 48, 48, 37, 10, 51, > 44, 36, 78, 44, 49, 44, 49, 44, 48, 32, 49, 44, 36, 78, 44, 49, > 44, 49, 44, 49, 32, 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, 45, > 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 110, 109, 91, 45, > 49, 93, 32, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, 95, 111, > 117, 116, 108, 105, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 34, 36, 52, 62, 61, 48, 32, 38, 38, 32, 36, 53, 62, > 61, 48, 32, 38, 38, 32, 36, 54, 62, 61, 48, 34, 125, 10, 40, 123, > 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 40, 123, 36, 78, 43, 49, 125, 44, 36, 78, > 41, 10, 45, 45, 122, 91, 99, 111, 111, 114, 100, 115, 93, 32, 48, 44, > 45, 49, 44, 50, 44, 49, 48, 48, 37, 32, 45, 122, 91, 45, 49, 93, > 32, 48, 44, 50, 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, > 49, 44, 36, 78, 32, 49, 44, 36, 78, 44, 49, 44, 49, 44, 39, 49, > 43, 121, 39, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 97, > 91, 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 61, 91, 45, 49, 93, > 32, 49, 44, 51, 44, 49, 48, 48, 37, 10, 51, 44, 36, 78, 44, 49, > 44, 49, 44, 36, 52, 44, 36, 53, 44, 36, 54, 32, 49, 44, 36, 78, > 44, 49, 44, 49, 44, 49, 10, 45, 121, 91, 45, 54, 45, 45, 49, 93, > 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 110, 109, > 91, 45, 49, 93, 32, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, > 95, 102, 105, 108, 108, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 99, 111, 111, 114, 100, 115, 93, 10, 123, 36, 49, 45, 51, 50, 125, > 44, 123, 36, 50, 45, 51, 50, 125, 44, 49, 44, 51, 44, 50, 53, 53, > 10, 76, 61, 123, 48, 46, 49, 42, 109, 97, 120, 40, 36, 49, 44, 36, > 50, 41, 125, 32, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 36, 76, > 44, 36, 76, 44, 48, 44, 48, 44, 48, 46, 50, 53, 44, 48, 120, 67, > 67, 67, 67, 67, 67, 67, 67, 44, 48, 10, 45, 105, 102, 32, 123, 34, > 36, 52, 62, 61, 48, 32, 38, 38, 32, 36, 53, 62, 61, 48, 32, 38, > 38, 32, 36, 54, 62, 61, 48, 34, 125, 10, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 95, 112, 108, 111, 116, 95, 112, > 111, 108, 97, 114, 95, 102, 105, 108, 108, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 10, 45, 114, 109, > 91, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, 95, 102, 105, 108, > 108, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 51, > 10, 45, 105, 102, 32, 123, 36, 51, 62, 61, 48, 125, 10, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 95, 112, 108, 111, > 116, 95, 112, 111, 108, 97, 114, 95, 111, 117, 116, 108, 105, 110, 101, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 49, 44, 48, > 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 51, 33, 61, 48, 125, 10, 45, 105, 102, 32, 123, 97, 98, 115, 40, 36, > 51, 41, 62, 49, 125, 32, 45, 99, 105, 114, 99, 108, 101, 115, 51, 100, > 91, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, 114, 95, 111, 117, 116, > 108, 105, 110, 101, 93, 32, 123, 97, 98, 115, 40, 36, 51, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, > 91, 45, 49, 93, 32, 91, 95, 112, 108, 111, 116, 95, 112, 111, 108, 97, > 114, 95, 111, 117, 116, 108, 105, 110, 101, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 48, 46, 50, 44, 50, 44, 48, 44, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 95, 112, 108, 111, 116, 95, > 112, 111, 108, 97, 114, 95, 111, 117, 116, 108, 105, 110, 101, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 110, 77, 61, 123, 36, 77, 47, 48, 46, 57, > 54, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 120, > 101, 115, 91, 45, 49, 93, 32, 123, 45, 36, 110, 77, 125, 44, 36, 110, > 77, 44, 36, 110, 77, 44, 123, 45, 36, 110, 77, 125, 44, 49, 51, 44, > 49, 44, 49, 10, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, > 32, 51, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 49, 93, 32, 50, 48, 48, 32, 45, 101, 113, 91, 45, 50, > 93, 32, 48, 10, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, > 49, 44, 49, 44, 49, 50, 56, 32, 45, 102, 114, 97, 109, 101, 91, 45, > 49, 93, 32, 49, 53, 44, 49, 53, 44, 50, 50, 48, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 36, 57, 34, 44, 48, 44, 48, 44, 49, > 51, 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, 50, > 50, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, > 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, 125, 44, 123, > 64, 123, 45, 50, 44, 104, 125, 45, 49, 54, 125, 44, 48, 44, 48, 44, > 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 34, 36, 49, 48, 34, 44, 48, 44, 48, 44, 49, 51, > 44, 49, 44, 45, 50, 50, 48, 44, 45, 50, 50, 48, 44, 45, 50, 50, > 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 45, 57, > 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 50, 44, > 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 47, 50, 125, 44, > 48, 44, 48, 44, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 114, 103, 98, 97, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 39, 46, > 10, 100, 114, 103, 98, 97, 32, 58, 10, 45, 95, 100, 105, 115, 112, 108, > 97, 121, 95, 114, 103, 98, 97, 10, 35, 64, 103, 109, 105, 99, 32, 100, > 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 115, > 32, 111, 118, 101, 114, 32, 97, 32, 99, 104, 101, 99, 107, 101, 114, 98, > 111, 97, 114, 100, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 100, 114, 103, 98, 97, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 110, 111, 114, 109, 32, 45, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 91, 45, 49, 93, 32, 52, 48, 37, 32, 45, 98, 108, 117, > 114, 91, 45, 49, 93, 32, 51, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 97, 112, > 112, 101, 110, 100, 32, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 114, 103, 98, 97, 10, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, > 97, 32, 58, 10, 45, 95, 36, 48, 10, 95, 100, 105, 115, 112, 108, 97, > 121, 95, 114, 103, 98, 97, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 82, 71, 66, 65, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 111, 118, 101, 114, 32, 97, 32, 99, 104, > 101, 99, 107, 101, 114, 98, 111, 97, 114, 100, 32, 98, 97, 99, 107, 103, > 114, 111, 117, 110, 100, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, > 95, 97, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 105, 91, 48, 93, 32, 40, 49, 54, 48, 44, > 49, 50, 56, 59, 49, 50, 56, 44, 49, 54, 48, 41, 32, 45, 110, 109, > 91, 48, 93, 32, 64, 123, 49, 44, 110, 125, 32, 45, 114, 91, 48, 93, > 32, 49, 54, 44, 49, 54, 32, 45, 114, 91, 48, 93, 32, 91, 49, 93, > 44, 91, 49, 93, 44, 49, 44, 123, 115, 45, 49, 125, 44, 48, 44, 50, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 116, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, 110, 115, > 111, 114, 115, 39, 46, 10, 100, 116, 32, 58, 10, 45, 118, 32, 45, 32, > 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, > 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, 110, 115, 111, 114, 115, 32, > 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, > 121, 95, 116, 101, 110, 115, 111, 114, 115, 32, 58, 32, 95, 115, 105, 122, > 101, 95, 102, 97, 99, 116, 111, 114, 62, 48, 44, 95, 101, 108, 108, 105, > 112, 115, 101, 95, 102, 97, 99, 116, 111, 114, 62, 61, 48, 44, 95, 99, > 111, 108, 111, 114, 101, 100, 95, 109, 111, 100, 101, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 110, 100, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 109, > 97, 115, 107, 32, 102, 105, 101, 108, 100, 32, 111, 102, 32, 50, 120, 50, > 32, 116, 101, 110, 115, 111, 114, 115, 32, 119, 105, 116, 104, 32, 101, 108, > 108, 105, 112, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 116, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, > 102, 97, 99, 116, 111, 114, 61, 49, 54, 39, 44, 32, 39, 101, 108, 108, > 105, 112, 115, 101, 95, 102, 97, 99, 116, 111, 114, 61, 48, 46, 57, 50, > 39, 44, 32, 39, 99, 111, 108, 111, 114, 95, 109, 111, 100, 101, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 102, 102, 117, 115, 105, > 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 48, 46, 55, 44, 48, 46, > 54, 32, 45, 99, 114, 111, 112, 32, 54, 48, 44, 49, 48, 44, 57, 48, > 44, 51, 48, 32, 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, > 110, 115, 111, 114, 115, 32, 44, 10, 100, 105, 115, 112, 108, 97, 121, 95, > 116, 101, 110, 115, 111, 114, 115, 32, 58, 10, 45, 118, 32, 45, 32, 95, > 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, > 48, 32, 36, 42, 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, > 110, 115, 111, 114, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 49, 54, 125, 62, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 48, 46, 57, 50, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 51, 61, 49, 125, 34, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 102, 105, 101, 108, 100, > 32, 111, 102, 32, 50, 120, 50, 32, 116, 101, 110, 115, 111, 114, 115, 32, > 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, > 44, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 102, 97, 99, 116, > 111, 114, 32, 36, 49, 44, 32, 101, 108, 108, 105, 112, 115, 101, 32, 102, > 97, 99, 116, 111, 114, 32, 36, 50, 32, 105, 110, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 33, 36, 51, 44, 99, 111, 108, 111, 114, > 101, 100, 44, 109, 97, 115, 107, 101, 100, 125, 34, 32, 109, 111, 100, 101, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 51, 125, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 45, 95, 100, 105, 115, 112, 108, 97, 121, 95, 116, 101, > 110, 115, 111, 114, 115, 32, 36, 49, 44, 36, 50, 44, 48, 10, 45, 115, > 91, 48, 93, 32, 99, 32, 45, 45, 109, 105, 110, 91, 48, 44, 50, 93, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 43, 91, 49, 44, 45, > 49, 93, 32, 45, 97, 91, 48, 45, 50, 93, 32, 99, 10, 45, 114, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 32, 45, 110, 91, > 48, 93, 32, 48, 44, 50, 53, 53, 32, 45, 42, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 108, 115, 101, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 42, 32, 123, > 40, 36, 50, 42, 36, 49, 47, 50, 41, 94, 50, 47, 109, 97, 120, 40, > 97, 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, 105, 77, 41, 41, > 125, 10, 45, 115, 32, 99, 32, 45, 105, 91, 45, 50, 93, 32, 91, 45, > 50, 93, 32, 45, 97, 32, 99, 32, 45, 115, 32, 121, 120, 32, 45, 114, > 32, 50, 44, 50, 44, 49, 44, 49, 44, 45, 49, 10, 40, 48, 46, 53, > 44, 48, 59, 48, 44, 48, 46, 53, 41, 32, 45, 43, 91, 94, 45, 49, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 105, 110, 118, 101, 114, 116, 32, 45, 121, 32, 99, 32, 45, 114, 32, 36, > 49, 44, 36, 49, 10, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 39, > 120, 39, 32, 45, 45, 91, 45, 49, 93, 32, 123, 119, 47, 50, 125, 10, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, > 91, 45, 49, 93, 32, 123, 104, 47, 50, 125, 10, 45, 45, 115, 113, 114, > 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 32, 45, 115, 113, 114, 91, 45, 51, 93, 32, 45, 105, 91, 45, 50, 93, > 32, 91, 45, 50, 93, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, > 99, 10, 45, 42, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 32, 43, 32, 45, 108, 101, 32, 49, > 10, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, > 119, 44, 36, 104, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 119, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 39, 46, > 10, 100, 119, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 100, 105, 115, 112, 108, > 97, 121, 95, 119, 97, 114, 112, 32, 36, 42, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 32, 58, > 32, 95, 99, 101, 108, 108, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 50, 100, 32, 119, 97, 114, 112, 105, 110, > 103, 32, 102, 105, 101, 108, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 119, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 99, 101, 108, 108, > 95, 115, 105, 122, 101, 61, 49, 53, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 98, 108, 117, 114, > 32, 53, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 32, 45, 97, 112, > 112, 101, 110, 100, 32, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 119, 97, 114, 112, 32, 44, 10, 100, 105, 115, 112, 108, 97, 121, 95, 119, > 97, 114, 112, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, > 10, 95, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 53, 125, > 62, 48, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 82, 101, > 110, 100, 101, 114, 32, 50, 100, 32, 119, 97, 114, 112, 105, 110, 103, 32, > 102, 105, 101, 108, 100, 34, 36, 95, 95, 115, 34, 44, 32, 119, 105, 116, > 104, 32, 99, 101, 108, 108, 32, 115, 105, 122, 101, 32, 36, 49, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 33, 61, > 49, 124, 124, 115, 33, 61, 50, 125, 10, 45, 101, 114, 114, 111, 114, 91, > 48, 45, 45, 51, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 119, 97, 114, 112, 39, 58, 32, > 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 91, 34, > 123, 64, 35, 45, 36, 62, 45, 49, 125, 34, 93, 58, 32, 68, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 32, 34, 123, 119, 125, 34, 44, 34, 123, > 104, 125, 34, 44, 34, 123, 100, 125, 34, 44, 34, 123, 115, 125, 34, 32, > 100, 111, 101, 115, 32, 110, 111, 116, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 32, 97, 32, 50, 100, 32, 102, 105, 101, 108, 100, 32, 111, 102, > 32, 50, 100, 32, 118, 101, 99, 116, 111, 114, 115, 46, 34, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 32, 45, 103, 114, 105, 100, > 91, 48, 93, 32, 36, 49, 44, 36, 49, 32, 45, 110, 109, 91, 48, 93, > 32, 64, 123, 49, 44, 110, 125, 10, 45, 119, 97, 114, 112, 91, 48, 93, > 32, 91, 49, 93, 44, 49, 44, 49, 44, 48, 32, 45, 114, 109, 91, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 42, > 32, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 58, > 32, 95, 102, 111, 114, 109, 97, 116, 61, 123, 32, 97, 115, 99, 105, 105, > 32, 124, 32, 104, 116, 109, 108, 32, 124, 32, 108, 97, 116, 101, 120, 32, > 124, 32, 120, 109, 108, 32, 124, 32, 98, 97, 115, 104, 32, 124, 32, 105, > 109, 97, 103, 101, 115, 32, 125, 44, 95, 105, 109, 97, 103, 101, 95, 112, > 97, 116, 104, 44, 95, 119, 114, 105, 116, 101, 95, 119, 114, 97, 112, 112, > 101, 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 100, 111, 99, > 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 46, 103, > 109, 105, 99, 32, 99, 111, 109, 109, 97, 110, 100, 32, 102, 105, 108, 101, > 115, 32, 40, 108, 111, 97, 100, 101, 100, 32, 97, 115, 32, 114, 97, 119, > 32, 39, 117, 99, 104, 97, 114, 39, 32, 105, 109, 97, 103, 101, 115, 41, > 44, 32, 105, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, > 111, 114, 109, 97, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 102, 111, 114, 109, 97, 116, 61, 97, 115, 99, 105, 105, 39, 44, 32, > 39, 105, 109, 97, 103, 101, 95, 112, 97, 116, 104, 61, 34, 34, 39, 32, > 97, 110, 100, 32, 39, 119, 114, 105, 116, 101, 95, 119, 114, 97, 112, 112, > 101, 114, 61, 49, 39, 46, 92, 110, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 69, 120, 97, 109, 112, 108, 101, 40, 115, 41, 32, 58, 32, 114, > 97, 119, 58, 102, 105, 108, 101, 110, 97, 109, 101, 46, 103, 109, 105, 99, > 44, 99, 104, 97, 114, 32, 45, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 32, 104, 116, 109, 108, 44, 105, 109, 103, 10, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 34, 97, 115, 99, 105, 105, 34, 125, > 44, 36, 123, 50, 61, 34, 34, 125, 44, 36, 123, 51, 61, 49, 125, 10, > 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 49, 10, 95, > 110, 97, 109, 101, 61, 64, 123, 48, 44, 98, 125, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 105, 91, 49, 45, 45, 50, 93, 32, > 40, 49, 48, 41, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, > 32, 45, 109, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 115, 32, 45, > 44, 49, 48, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, 95, 36, 49, 91, 93, 32, > 36, 51, 10, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 61, 48, > 10, 95, 101, 120, 97, 109, 112, 108, 101, 61, 48, 10, 95, 99, 111, 109, > 109, 97, 110, 100, 61, 48, 10, 95, 112, 97, 116, 104, 61, 34, 36, 50, > 34, 10, 107, 115, 48, 61, 34, 48, 34, 32, 107, 115, 49, 61, 34, 45, > 107, 91, 48, 93, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, 123, 104, 62, 55, > 34, 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, 45, 53, 125, > 39, 61, 61, 39, 123, 39, 34, 35, 64, 103, 109, 105, 99, 34, 39, 125, > 125, 34, 32, 38, 38, 32, 34, 40, 105, 91, 54, 93, 61, 61, 123, 39, > 34, 32, 34, 39, 125, 34, 32, 124, 124, 32, 34, 105, 91, 54, 93, 61, > 61, 123, 39, 58, 39, 125, 41, 125, 10, 45, 114, 111, 119, 115, 32, 55, > 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, > 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, 105, 33, 61, > 123, 39, 58, 39, 125, 125, 10, 95, 99, 111, 109, 109, 97, 110, 100, 61, > 123, 36, 95, 99, 111, 109, 109, 97, 110, 100, 43, 49, 125, 10, 45, 115, > 32, 45, 44, 123, 39, 34, 58, 32, 34, 39, 125, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, > 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, 36, 49, 10, 45, 101, 108, > 115, 101, 10, 45, 114, 111, 119, 115, 32, 49, 44, 49, 48, 48, 37, 10, > 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 58, 39, 125, 125, 10, 95, > 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 61, 123, 36, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 43, 49, 125, 10, 45, 114, 111, 119, > 115, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 95, 36, 49, 10, 45, 101, 108, 115, 101, 10, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, 39, 34, 32, 34, 39, 125, > 10, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 36, 39, 125, 125, 10, > 95, 101, 120, 97, 109, 112, 108, 101, 61, 123, 36, 95, 101, 120, 97, 109, > 112, 108, 101, 43, 49, 125, 10, 45, 114, 111, 119, 115, 32, 49, 44, 49, > 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, 39, > 34, 32, 34, 39, 125, 10, 95, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 36, 95, 112, 97, 116, 104, 36, 95, 110, 97, 109, 101, 36, 95, 101, 120, > 97, 109, 112, 108, 101, 46, 106, 112, 103, 10, 45, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, > 101, 95, 36, 49, 10, 45, 101, 108, 115, 101, 10, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, > 105, 112, 116, 105, 111, 110, 95, 36, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 32, 36, 123, 107, 115, 123, 64, 35, 33, 61, 48, > 125, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 114, 109, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 36, 49, 91, 93, 32, 36, > 51, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 104, 101, 97, 100, 101, 114, 95, 104, 116, 109, 108, 32, 58, 10, 45, > 105, 102, 32, 36, 49, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 32, > 80, 85, 66, 76, 73, 67, 32, 92, 34, 45, 47, 47, 87, 51, 67, 47, > 47, 68, 84, 68, 32, 88, 72, 84, 77, 76, 32, 49, 46, 48, 32, 84, > 114, 97, 110, 115, 105, 116, 105, 111, 110, 97, 108, 47, 47, 69, 78, 92, > 34, 32, 92, 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, > 51, 46, 111, 114, 103, 47, 84, 82, 47, 120, 104, 116, 109, 108, 49, 47, > 68, 84, 68, 47, 120, 104, 116, 109, 108, 49, 45, 116, 114, 97, 110, 115, > 105, 116, 105, 111, 110, 97, 108, 46, 100, 116, 100, 92, 34, 62, 10, 92, > 110, 60, 104, 101, 97, 100, 62, 10, 92, 110, 60, 115, 99, 114, 105, 112, > 116, 32, 116, 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, 47, 106, 97, > 118, 97, 115, 99, 114, 105, 112, 116, 92, 34, 32, 115, 114, 99, 61, 92, > 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 47, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 46, 106, 115, 92, 34, 62, 60, 47, 115, 99, 114, 105, > 112, 116, 62, 10, 92, 110, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, > 92, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, 116, 92, 34, 32, 116, > 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, 47, 99, 115, 115, 92, 34, > 32, 104, 114, 101, 102, 61, 92, 34, 104, 105, 103, 104, 115, 108, 105, 100, > 101, 47, 104, 105, 103, 104, 115, 108, 105, 100, 101, 46, 99, 115, 115, 92, > 34, 32, 47, 62, 10, 92, 110, 60, 115, 99, 114, 105, 112, 116, 32, 116, > 121, 112, 101, 61, 92, 34, 116, 101, 120, 116, 47, 106, 97, 118, 97, 115, > 99, 114, 105, 112, 116, 92, 34, 62, 10, 92, 110, 104, 115, 46, 103, 114, > 97, 112, 104, 105, 99, 115, 68, 105, 114, 32, 61, 32, 39, 104, 105, 103, > 104, 115, 108, 105, 100, 101, 47, 103, 114, 97, 112, 104, 105, 99, 115, 47, > 39, 59, 10, 92, 110, 104, 115, 46, 119, 114, 97, 112, 112, 101, 114, 67, > 108, 97, 115, 115, 78, 97, 109, 101, 32, 61, 32, 39, 119, 105, 100, 101, > 45, 98, 111, 114, 100, 101, 114, 39, 59, 10, 92, 110, 60, 47, 115, 99, > 114, 105, 112, 116, 62, 10, 92, 110, 60, 47, 104, 101, 97, 100, 62, 10, > 92, 110, 60, 98, 111, 100, 121, 62, 10, 92, 110, 34, 10, 45, 118, 32, > 45, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 32, 34, 100, 111, 110, > 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, 104, 116, 109, 108, 34, > 10, 45, 109, 32, 34, 100, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, > 95, 111, 102, 102, 95, 104, 116, 109, 108, 34, 10, 45, 109, 32, 34, 101, > 111, 110, 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 101, 120, 95, 111, 110, 95, 104, 116, 109, 108, 34, > 10, 45, 109, 32, 34, 101, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 95, 111, > 102, 102, 95, 104, 116, 109, 108, 34, 10, 95, 105, 115, 95, 100, 101, 115, > 99, 61, 48, 10, 95, 105, 115, 95, 101, 120, 61, 48, 10, 95, 115, 104, > 111, 114, 116, 99, 117, 116, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, > 104, 116, 109, 108, 32, 58, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, > 36, 95, 105, 115, 95, 100, 101, 115, 99, 10, 45, 117, 32, 34, 60, 98, > 114, 47, 62, 34, 10, 45, 101, 108, 115, 101, 10, 45, 117, 32, 34, 60, > 112, 32, 115, 116, 121, 108, 101, 61, 92, 34, 109, 97, 114, 103, 105, 110, > 45, 108, 101, 102, 116, 58, 49, 48, 48, 112, 120, 92, 34, 62, 60, 116, > 116, 62, 34, 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, 49, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 95, 111, > 102, 102, 95, 104, 116, 109, 108, 32, 58, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 36, 95, 105, 115, 95, 100, 101, 115, 99, 10, 45, 117, 32, > 34, 60, 47, 116, 116, 62, 60, 47, 112, 62, 34, 10, 95, 105, 115, 95, > 100, 101, 115, 99, 61, 48, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, > 95, 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, 45, 118, 32, 45, 10, > 45, 105, 102, 32, 36, 95, 105, 115, 95, 101, 120, 10, 45, 117, 32, 34, > 34, 10, 45, 101, 108, 115, 101, 10, 45, 117, 32, 34, 60, 98, 114, 47, > 62, 60, 116, 97, 98, 108, 101, 32, 115, 116, 121, 108, 101, 61, 92, 34, > 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 49, 48, 48, 112, > 120, 92, 34, 32, 119, 105, 100, 116, 104, 61, 92, 34, 55, 53, 37, 92, > 34, 32, 98, 103, 99, 111, 108, 111, 114, 61, 92, 34, 35, 69, 69, 69, > 69, 69, 69, 92, 34, 32, 98, 111, 114, 100, 101, 114, 99, 111, 108, 111, > 114, 61, 92, 34, 98, 108, 97, 99, 107, 92, 34, 32, 98, 111, 114, 100, > 101, 114, 61, 92, 34, 49, 92, 34, 32, 99, 101, 108, 108, 112, 97, 100, > 100, 105, 110, 103, 61, 92, 34, 52, 92, 34, 32, 99, 101, 108, 108, 115, > 112, 97, 99, 105, 110, 103, 61, 92, 34, 48, 92, 34, 62, 34, 92, 10, > 34, 60, 116, 114, 62, 60, 116, 100, 32, 99, 111, 108, 115, 112, 97, 110, > 61, 92, 34, 50, 92, 34, 32, 98, 103, 99, 111, 108, 111, 114, 61, 92, > 34, 35, 55, 55, 55, 55, 55, 55, 92, 34, 62, 60, 102, 111, 110, 116, > 32, 99, 111, 108, 111, 114, 61, 92, 34, 119, 104, 105, 116, 101, 92, 34, > 62, 60, 98, 62, 69, 120, 97, 109, 112, 108, 101, 40, 115, 41, 32, 111, > 102, 32, 117, 115, 101, 58, 60, 47, 98, 62, 60, 47, 102, 111, 110, 116, > 62, 60, 47, 116, 100, 62, 60, 47, 116, 114, 62, 34, 10, 95, 105, 115, > 95, 101, 120, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 101, 120, 95, 111, 102, 102, 95, 104, 116, 109, 108, 32, 58, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 101, 120, 10, > 45, 117, 32, 34, 60, 47, 116, 97, 98, 108, 101, 62, 34, 10, 95, 105, > 115, 95, 101, 120, 61, 48, 10, 45, 101, 108, 115, 101, 10, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, > 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, > 102, 125, 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 98, 114, 47, 62, > 60, 104, 51, 62, 60, 97, 32, 105, 100, 61, 92, 34, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 34, 36, 95, 115, 117, 98, 115, 101, 99, 116, > 105, 111, 110, 34, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, > 111, 114, 61, 92, 34, 112, 117, 114, 112, 108, 101, 92, 34, 62, 42, 42, > 32, 60, 117, 62, 34, 64, 123, 48, 44, 116, 125, 34, 60, 47, 117, 62, > 60, 47, 102, 111, 110, 116, 62, 60, 47, 97, 62, 34, 92, 10, 34, 38, > 110, 98, 115, 112, 59, 38, 110, 98, 115, 112, 59, 60, 97, 32, 104, 114, > 101, 102, 61, 92, 34, 35, 116, 111, 99, 92, 34, 62, 60, 105, 109, 103, > 32, 115, 114, 99, 61, 92, 34, 105, 109, 103, 47, 98, 97, 99, 107, 95, > 116, 111, 112, 46, 112, 110, 103, 92, 34, 62, 60, 47, 105, 109, 103, 62, > 60, 47, 97, 62, 60, 47, 104, 51, 62, 34, 10, 45, 118, 32, 45, 10, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, > 101, 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, 104, 116, 109, 108, 32, > 58, 10, 45, 105, 102, 32, 123, 123, 64, 123, 45, 49, 44, 116, 125, 39, > 61, 61, 39, 34, 40, 42, 41, 34, 125, 34, 32, 124, 124, 32, 34, 123, > 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, 34, > 125, 125, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 32, 34, > 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 101, 108, 115, 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, > 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 115, 49, 61, 34, 92, 110, > 34, 32, 115, 48, 61, 34, 32, 124, 60, 98, 114, 47, 62, 34, 10, 45, > 105, 102, 32, 123, 64, 35, 62, 49, 34, 32, 38, 38, 32, 34, 123, 64, > 123, 45, 49, 44, 48, 45, 54, 125, 39, 61, 61, 39, 123, 39, 34, 101, > 113, 46, 32, 116, 111, 32, 34, 39, 125, 125, 125, 10, 45, 114, 111, 119, > 115, 91, 45, 49, 93, 32, 55, 44, 49, 48, 48, 37, 32, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 46, 39, 125, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, > 39, 34, 32, 34, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 91, 45, 49, 93, 32, 51, 57, 10, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 48, 44, > 116, 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, > 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 45, 49, 44, > 116, 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 113, 117, 97, 108, > 105, 102, 105, 101, 114, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, > 36, 113, 117, 97, 108, 105, 102, 105, 101, 114, 10, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 61, 123, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, > 43, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, 118, 32, 43, 10, 45, > 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 64, 123, 45, 100, > 111, 102, 102, 125, 34, 60, 112, 32, 115, 116, 121, 108, 101, 61, 92, 34, > 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 50, 48, 112, 120, > 92, 34, 62, 60, 97, 32, 105, 100, 61, 92, 34, 34, 64, 123, 48, 44, > 116, 125, 34, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, > 114, 61, 92, 34, 103, 114, 101, 101, 110, 92, 34, 62, 38, 110, 98, 115, > 112, 59, 38, 110, 98, 115, 112, 59, 60, 98, 62, 45, 34, 64, 123, 48, > 44, 116, 125, 36, 113, 117, 97, 108, 105, 102, 105, 101, 114, 34, 60, 47, > 98, 62, 58, 60, 47, 102, 111, 110, 116, 62, 60, 47, 97, 62, 34, 10, > 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 10, 45, 101, 91, 93, 32, > 34, 60, 112, 32, 115, 116, 121, 108, 101, 61, 92, 34, 109, 97, 114, 103, > 105, 110, 45, 108, 101, 102, 116, 58, 49, 53, 48, 112, 120, 92, 34, 62, > 60, 116, 116, 62, 60, 105, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, > 111, 114, 61, 92, 34, 112, 117, 114, 112, 108, 101, 92, 34, 62, 34, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, > 101, 91, 93, 32, 64, 123, 123, 49, 43, 36, 62, 125, 44, 116, 125, 36, > 123, 115, 123, 36, 60, 61, 61, 48, 125, 125, 10, 45, 100, 111, 110, 101, > 10, 45, 101, 91, 93, 32, 34, 60, 47, 102, 111, 110, 116, 62, 60, 47, > 105, 62, 60, 47, 116, 116, 62, 60, 47, 112, 62, 34, 10, 45, 101, 108, > 115, 101, 32, 45, 101, 91, 93, 32, 34, 34, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, > 99, 114, 105, 112, 116, 105, 111, 110, 95, 104, 116, 109, 108, 32, 58, 10, > 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, 49, 50, 125, 39, > 61, 61, 39, 123, 39, 34, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 34, 39, 125, 125, 10, 45, 115, 32, 43, 44, 123, 39, 58, > 39, 125, 32, 45, 108, 91, 94, 48, 93, 32, 45, 97, 32, 121, 32, 45, > 101, 110, 100, 108, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, > 39, 58, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 123, > 39, 34, 32, 34, 39, 125, 10, 45, 118, 32, 43, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, > 111, 110, 125, 34, 60, 98, 114, 47, 62, 60, 98, 62, 34, 64, 123, 48, > 44, 116, 125, 34, 60, 47, 98, 62, 58, 32, 34, 64, 123, 45, 49, 44, > 116, 125, 10, 45, 101, 108, 115, 101, 32, 45, 101, 91, 93, 32, 64, 123, > 45, 100, 111, 110, 125, 34, 60, 98, 114, 47, 62, 34, 64, 123, 48, 44, > 116, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, > 101, 108, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, 55, 125, 39, > 61, 61, 39, 123, 39, 34, 40, 101, 113, 46, 32, 116, 111, 32, 34, 39, > 125, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, > 100, 111, 110, 125, 34, 60, 105, 62, 60, 102, 111, 110, 116, 32, 99, 111, > 108, 111, 114, 61, 92, 34, 98, 108, 117, 101, 92, 34, 62, 34, 64, 123, > 45, 49, 44, 116, 125, 34, 60, 47, 102, 111, 110, 116, 62, 60, 47, 105, > 62, 34, 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, 101, 10, 45, 105, > 102, 32, 123, 40, 105, 60, 123, 39, 65, 39, 125, 34, 32, 124, 124, 32, > 34, 105, 62, 123, 39, 90, 39, 125, 41, 34, 32, 38, 38, 32, 34, 105, > 33, 61, 52, 48, 34, 32, 38, 38, 32, 34, 105, 33, 61, 51, 57, 125, > 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, > 110, 125, 34, 38, 110, 98, 115, 112, 59, 34, 64, 123, 45, 49, 44, 116, > 125, 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, 101, 32, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 110, 125, 64, 123, > 45, 49, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, 101, 95, > 104, 116, 109, 108, 32, 58, 10, 45, 105, 102, 32, 36, 95, 102, 105, 108, > 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, 45, 109, 32, 34, > 102, 111, 111, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, > 108, 91, 93, 32, 45, 118, 32, 45, 57, 57, 32, 45, 114, 101, 115, 101, > 116, 32, 45, 102, 111, 111, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, > 36, 95, 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, > 109, 32, 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 102, 111, 111, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 110, 125, 34, > 60, 116, 114, 62, 60, 116, 100, 32, 119, 105, 100, 116, 104, 61, 92, 34, > 52, 48, 92, 34, 62, 60, 100, 105, 118, 62, 60, 97, 32, 104, 114, 101, > 102, 61, 92, 34, 34, 36, 95, 102, 105, 108, 101, 110, 97, 109, 101, 34, > 92, 34, 32, 99, 108, 97, 115, 115, 61, 92, 34, 104, 105, 103, 104, 115, > 108, 105, 100, 101, 92, 34, 32, 111, 110, 99, 108, 105, 99, 107, 61, 92, > 34, 114, 101, 116, 117, 114, 110, 32, 104, 115, 46, 101, 120, 112, 97, 110, > 100, 40, 116, 104, 105, 115, 41, 92, 34, 62, 34, 92, 10, 34, 60, 102, > 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, 34, 98, 108, 117, 101, > 92, 34, 62, 40, 118, 105, 101, 119, 41, 60, 47, 102, 111, 110, 116, 62, > 60, 47, 97, 62, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 92, > 34, 104, 105, 103, 104, 115, 108, 105, 100, 101, 45, 99, 97, 112, 116, 105, > 111, 110, 92, 34, 62, 34, 64, 123, 45, 49, 44, 116, 125, 34, 60, 47, > 100, 105, 118, 62, 60, 47, 100, 105, 118, 62, 60, 47, 116, 100, 62, 60, > 116, 100, 62, 60, 116, 116, 62, 34, 64, 123, 45, 49, 44, 116, 125, 34, > 60, 47, 116, 116, 62, 60, 47, 116, 100, 62, 60, 47, 116, 114, 62, 34, > 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 104, 116, 109, 108, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 105, 102, 32, > 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, 95, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 61, 123, 36, 95, 115, 117, 98, 115, 101, 99, > 116, 105, 111, 110, 43, 49, 125, 10, 40, 123, 39, 34, 67, 111, 109, 109, > 97, 110, 100, 115, 32, 115, 104, 111, 114, 116, 99, 117, 116, 115, 34, 39, > 125, 41, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 95, 104, 116, > 109, 108, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 60, 112, 32, 115, 116, 121, > 108, 101, 61, 92, 34, 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, > 58, 50, 48, 112, 120, 92, 34, 62, 34, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, 45, 101, 91, > 93, 32, 34, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, 114, 61, 92, > 34, 103, 114, 101, 101, 110, 92, 34, 62, 60, 98, 62, 38, 110, 98, 115, > 112, 59, 38, 110, 98, 115, 112, 59, 45, 34, 36, 123, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 36, 62, 125, 34, 32, 34, 36, 123, 95, 115, 104, > 111, 114, 116, 99, 117, 116, 113, 117, 97, 108, 105, 102, 105, 101, 114, 36, > 62, 125, 34, 60, 47, 98, 62, 58, 60, 47, 102, 111, 110, 116, 62, 34, > 10, 45, 101, 91, 93, 32, 34, 60, 102, 111, 110, 116, 32, 99, 111, 108, > 111, 114, 61, 92, 34, 98, 108, 117, 101, 92, 34, 62, 60, 105, 62, 101, > 113, 46, 32, 116, 111, 32, 39, 34, 36, 123, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 108, 105, 110, 107, 36, 62, 125, 34, 39, 60, 47, 105, 62, > 60, 47, 102, 111, 110, 116, 62, 60, 98, 114, 47, 62, 34, 10, 45, 100, > 111, 110, 101, 10, 45, 101, 91, 93, 32, 34, 60, 47, 112, 62, 34, 32, > 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 10, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 64, 123, > 45, 100, 111, 102, 102, 125, 34, 60, 112, 32, 115, 116, 121, 108, 101, 61, > 92, 34, 109, 97, 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 49, 48, > 48, 112, 120, 92, 34, 62, 60, 102, 111, 110, 116, 32, 99, 111, 108, 111, > 114, 61, 92, 34, 98, 108, 117, 101, 92, 34, 62, 60, 98, 62, 91, 32, > 84, 111, 116, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 58, 32, 34, 36, 95, 99, 111, 109, > 109, 97, 110, 100, 34, 32, 93, 60, 47, 98, 62, 60, 47, 102, 111, 110, > 116, 62, 34, 10, 45, 118, 32, 45, 10, 45, 117, 110, 99, 111, 109, 109, > 97, 110, 100, 32, 100, 111, 110, 44, 100, 111, 102, 102, 44, 101, 111, 110, > 44, 101, 111, 102, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, 95, 120, 109, 108, 32, > 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 118, 32, 43, 10, 45, 101, > 91, 93, 32, 34, 60, 63, 120, 109, 108, 32, 118, 101, 114, 115, 105, 111, > 110, 61, 92, 34, 49, 46, 48, 92, 34, 32, 101, 110, 99, 111, 100, 105, > 110, 103, 61, 92, 34, 85, 84, 70, 45, 56, 92, 34, 32, 115, 116, 97, > 110, 100, 97, 108, 111, 110, 101, 61, 92, 34, 121, 101, 115, 92, 34, 63, > 62, 10, 92, 110, 60, 63, 120, 109, 108, 45, 115, 116, 121, 108, 101, 115, > 104, 101, 101, 116, 32, 104, 114, 101, 102, 61, 92, 34, 103, 109, 105, 99, > 95, 100, 111, 99, 46, 120, 115, 108, 92, 34, 32, 116, 121, 112, 101, 61, > 92, 34, 116, 101, 120, 116, 47, 120, 115, 108, 92, 34, 63, 62, 34, 10, > 45, 118, 32, 45, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 10, 45, 101, 91, 93, 32, 34, 60, 103, 109, 105, 99, 45, 112, 97, 99, > 107, 97, 103, 101, 32, 120, 109, 108, 110, 115, 58, 120, 115, 105, 61, 92, > 34, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, > 114, 103, 47, 50, 48, 48, 49, 47, 88, 77, 76, 83, 99, 104, 101, 109, > 97, 45, 105, 110, 115, 116, 97, 110, 99, 101, 92, 34, 32, 120, 115, 105, > 58, 110, 111, 78, 97, 109, 101, 115, 112, 97, 99, 101, 83, 99, 104, 101, > 109, 97, 76, 111, 99, 97, 116, 105, 111, 110, 61, 92, 34, 103, 109, 105, > 99, 95, 100, 111, 99, 46, 120, 115, 100, 92, 34, 62, 10, 92, 110, 60, > 110, 97, 109, 101, 62, 34, 36, 95, 110, 97, 109, 101, 34, 60, 47, 110, > 97, 109, 101, 62, 10, 92, 110, 60, 115, 101, 99, 116, 105, 111, 110, 62, > 10, 92, 110, 32, 32, 60, 110, 97, 109, 101, 62, 76, 105, 115, 116, 32, > 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 60, 47, 110, 97, 109, > 101, 62, 34, 10, 45, 118, 32, 45, 10, 45, 109, 32, 34, 100, 111, 110, > 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, 120, 109, 108, 34, 10, > 45, 109, 32, 34, 100, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 95, > 111, 102, 102, 95, 120, 109, 108, 34, 10, 95, 105, 115, 95, 115, 117, 98, > 115, 101, 99, 116, 105, 111, 110, 61, 48, 10, 95, 105, 115, 95, 99, 111, > 109, 109, 97, 110, 100, 61, 48, 10, 95, 105, 115, 95, 100, 101, 115, 99, > 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, > 99, 95, 100, 101, 115, 99, 95, 111, 110, 95, 120, 109, 108, 32, 58, 10, > 45, 118, 32, 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 100, 101, > 115, 99, 10, 45, 117, 32, 34, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 117, 32, 34, 32, 32, 32, 32, 60, 100, 101, 115, 99, 114, 105, 112, 116, > 105, 111, 110, 62, 92, 110, 34, 10, 95, 105, 115, 95, 100, 101, 115, 99, > 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, > 115, 99, 95, 111, 102, 102, 95, 120, 109, 108, 32, 58, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 100, 101, 115, 99, 10, > 45, 117, 32, 34, 32, 32, 32, 32, 60, 47, 100, 101, 115, 99, 114, 105, > 112, 116, 105, 111, 110, 62, 92, 110, 34, 10, 95, 105, 115, 95, 100, 101, > 115, 99, 61, 48, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, 34, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 95, 120, 109, 108, 32, 58, 10, 45, 118, 32, > 43, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 99, > 111, 109, 109, 97, 110, 100, 32, 45, 101, 91, 93, 32, 64, 123, 45, 100, > 111, 102, 102, 125, 34, 32, 32, 60, 47, 102, 117, 110, 99, 116, 105, 111, > 110, 62, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 91, 93, 32, > 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 47, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 62, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 62, 10, 92, 110, 32, 32, 60, 110, > 97, 109, 101, 62, 34, 64, 123, 48, 44, 116, 125, 34, 60, 47, 110, 97, > 109, 101, 62, 34, 10, 45, 118, 32, 45, 10, 95, 105, 115, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 61, 49, 10, 95, 105, 115, 95, 99, > 111, 109, 109, 97, 110, 100, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, > 105, 111, 110, 95, 120, 109, 108, 32, 58, 10, 45, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, > 101, 95, 120, 109, 108, 10, 45, 118, 32, 43, 10, 45, 105, 102, 32, 36, > 95, 105, 115, 95, 99, 111, 109, 109, 97, 110, 100, 32, 45, 101, 91, 93, > 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 32, 32, 60, 47, 102, 117, > 110, 99, 116, 105, 111, 110, 62, 34, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 32, 32, > 60, 102, 117, 110, 99, 116, 105, 111, 110, 62, 34, 10, 45, 118, 32, 45, > 10, 95, 105, 115, 95, 99, 111, 109, 109, 97, 110, 100, 61, 49, 10, 45, > 105, 102, 32, 123, 123, 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, > 34, 40, 42, 41, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 45, > 49, 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, 34, 125, 125, 32, > 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 32, 34, 64, 123, 45, > 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, > 115, 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 115, 49, 61, 34, 34, 32, 115, 48, 61, > 34, 32, 124, 34, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, > 32, 32, 32, 32, 60, 110, 97, 109, 101, 62, 34, 64, 123, 48, 44, 116, > 125, 34, 60, 47, 110, 97, 109, 101, 62, 34, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 49, 125, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 60, 97, 114, 103, 117, 109, 101, 110, 116, 115, 62, 34, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 101, 91, 93, > 32, 34, 32, 32, 32, 32, 32, 32, 34, 64, 123, 123, 49, 43, 36, 62, > 125, 44, 116, 125, 36, 123, 115, 123, 36, 60, 61, 61, 48, 125, 125, 10, > 45, 100, 111, 110, 101, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 60, 47, 97, 114, 103, 117, 109, 101, 110, 116, 115, 62, 34, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, > 116, 105, 111, 110, 95, 120, 109, 108, 32, 58, 10, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, > 99, 101, 95, 120, 109, 108, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, > 32, 64, 123, 45, 100, 111, 110, 125, 34, 32, 32, 32, 32, 32, 32, 34, > 64, 123, 48, 44, 116, 125, 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, > 108, 101, 95, 120, 109, 108, 32, 58, 10, 45, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, 101, > 95, 120, 109, 108, 10, 45, 105, 102, 32, 36, 95, 102, 105, 108, 101, 110, > 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, 45, 109, 32, 34, 102, 111, > 111, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 108, 91, > 93, 32, 45, 118, 32, 45, 57, 57, 32, 45, 114, 101, 115, 101, 116, 32, > 45, 102, 111, 111, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, 36, 95, > 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, 109, 32, > 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, > 32, 102, 111, 111, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, > 10, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 32, > 32, 32, 32, 60, 101, 120, 97, 109, 112, 108, 101, 62, 34, 10, 45, 101, > 91, 93, 32, 34, 32, 32, 32, 32, 32, 32, 60, 99, 111, 109, 109, 97, > 110, 100, 62, 34, 64, 123, 48, 44, 116, 125, 34, 60, 47, 99, 111, 109, > 109, 97, 110, 100, 62, 34, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, > 32, 32, 32, 60, 114, 101, 115, 117, 108, 116, 62, 34, 36, 95, 102, 105, > 108, 101, 110, 97, 109, 101, 34, 60, 47, 114, 101, 115, 117, 108, 116, 62, > 34, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 60, 47, 101, 120, > 97, 109, 112, 108, 101, 62, 34, 10, 45, 118, 32, 45, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 102, 111, 111, 116, > 101, 114, 95, 120, 109, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 49, 10, 45, 118, 32, 43, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, > 99, 111, 109, 109, 97, 110, 100, 32, 45, 101, 91, 93, 32, 64, 123, 45, > 100, 111, 102, 102, 125, 34, 60, 47, 102, 117, 110, 99, 116, 105, 111, 110, > 62, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 95, > 105, 115, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 32, 45, 101, > 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, 60, 47, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 62, 34, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 91, 93, 32, 64, 123, 45, 100, 111, 102, 102, 125, 34, > 60, 47, 115, 101, 99, 116, 105, 111, 110, 62, 10, 92, 110, 60, 47, 103, > 109, 105, 99, 45, 112, 97, 99, 107, 97, 103, 101, 62, 34, 10, 45, 118, > 32, 45, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, 32, 100, 111, > 110, 44, 100, 111, 102, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, > 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, 101, 95, 120, 109, > 108, 32, 58, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 32, 34, 38, 34, 44, 34, 38, 97, 109, 112, 59, 34, 10, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, 34, 44, 34, 38, > 108, 116, 59, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, > 114, 32, 34, 62, 34, 44, 34, 38, 103, 116, 59, 34, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, 101, 97, 100, > 101, 114, 95, 108, 97, 116, 101, 120, 32, 58, 10, 45, 105, 102, 32, 36, > 49, 32, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 92, 100, > 111, 99, 117, 109, 101, 110, 116, 99, 108, 97, 115, 115, 91, 97, 52, 112, > 97, 112, 101, 114, 44, 49, 48, 112, 116, 44, 116, 119, 111, 115, 105, 100, > 101, 93, 123, 98, 111, 111, 107, 125, 10, 92, 110, 92, 92, 117, 115, 101, > 112, 97, 99, 107, 97, 103, 101, 123, 104, 121, 112, 101, 114, 114, 101, 102, > 44, 102, 97, 110, 99, 121, 104, 100, 114, 44, 103, 114, 97, 112, 104, 105, > 99, 120, 44, 97, 109, 115, 115, 121, 109, 98, 44, 97, 109, 115, 109, 97, > 116, 104, 44, 116, 105, 109, 101, 115, 44, 109, 97, 107, 101, 105, 100, 120, > 125, 10, 92, 110, 92, 92, 103, 114, 97, 112, 104, 105, 99, 115, 112, 97, > 116, 104, 123, 123, 34, 36, 95, 112, 97, 116, 104, 34, 125, 125, 10, 92, > 110, 92, 92, 112, 97, 103, 101, 115, 116, 121, 108, 101, 123, 102, 97, 110, > 99, 121, 112, 108, 97, 105, 110, 125, 10, 92, 110, 92, 92, 108, 104, 101, > 97, 100, 91, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, > 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, 92, 92, 116, 104, 101, 112, > 97, 103, 101, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, 112, 108, 97, > 105, 110, 123, 125, 123, 92, 92, 114, 105, 103, 104, 116, 109, 97, 114, 107, > 125, 125, 10, 92, 110, 92, 92, 114, 104, 101, 97, 100, 91, 92, 92, 102, > 97, 110, 99, 121, 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 108, 101, > 102, 116, 109, 97, 114, 107, 125, 93, 123, 92, 92, 102, 97, 110, 99, 121, > 112, 108, 97, 105, 110, 123, 125, 123, 92, 92, 116, 101, 120, 116, 98, 102, > 92, 92, 116, 104, 101, 112, 97, 103, 101, 125, 125, 10, 92, 110, 92, 92, > 99, 102, 111, 111, 116, 123, 125, 10, 92, 110, 92, 92, 115, 101, 116, 108, > 101, 110, 103, 116, 104, 123, 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, > 104, 125, 123, 53, 46, 56, 55, 53, 105, 110, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 112, 97, 114, 105, > 110, 100, 101, 110, 116, 125, 123, 48, 112, 99, 125, 10, 92, 110, 92, 92, > 115, 101, 116, 108, 101, 110, 103, 116, 104, 123, 92, 92, 104, 111, 102, 102, > 115, 101, 116, 125, 123, 45, 48, 46, 56, 99, 109, 125, 10, 92, 110, 92, > 92, 115, 101, 116, 99, 111, 117, 110, 116, 101, 114, 123, 116, 111, 99, 100, > 101, 112, 116, 104, 125, 123, 49, 125, 10, 92, 110, 92, 92, 115, 108, 111, > 112, 112, 121, 123, 125, 10, 92, 110, 92, 92, 114, 101, 110, 101, 119, 99, > 111, 109, 109, 97, 110, 100, 92, 92, 105, 110, 100, 101, 120, 110, 97, 109, > 101, 123, 73, 110, 100, 101, 120, 32, 111, 102, 32, 99, 111, 109, 109, 97, > 110, 100, 115, 125, 10, 92, 110, 92, 92, 109, 97, 107, 101, 105, 110, 100, > 101, 120, 10, 92, 110, 92, 92, 98, 101, 103, 105, 110, 123, 100, 111, 99, > 117, 109, 101, 110, 116, 125, 10, 92, 110, 92, 92, 116, 97, 98, 108, 101, > 111, 102, 99, 111, 110, 116, 101, 110, 116, 115, 34, 10, 45, 118, 32, 45, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 34, 92, 110, 92, 92, 99, 104, 97, 112, 116, 101, 114, 123, 76, > 105, 115, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 125, > 34, 32, 45, 118, 32, 45, 10, 45, 109, 32, 34, 101, 111, 110, 32, 58, > 32, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 101, 120, 95, 111, 110, 95, 108, 97, 116, 101, 120, 34, 10, 45, 109, > 32, 34, 101, 111, 102, 102, 32, 58, 32, 45, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 95, 111, 102, 102, 95, > 108, 97, 116, 101, 120, 34, 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, > 48, 10, 95, 105, 115, 95, 101, 120, 61, 48, 10, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, > 95, 103, 109, 105, 99, 95, 101, 120, 95, 111, 110, 95, 108, 97, 116, 101, > 120, 32, 58, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 36, 95, 105, > 115, 95, 101, 120, 10, 45, 117, 32, 34, 92, 92, 92, 92, 34, 10, 45, > 101, 108, 115, 101, 10, 45, 117, 32, 34, 92, 92, 98, 101, 103, 105, 110, > 123, 99, 101, 110, 116, 101, 114, 125, 34, 10, 95, 105, 115, 95, 101, 120, > 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, > 95, 111, 102, 102, 95, 108, 97, 116, 101, 120, 32, 58, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 36, 95, 105, 115, 95, 101, 120, 10, 45, 117, > 32, 34, 92, 92, 101, 110, 100, 123, 99, 101, 110, 116, 101, 114, 125, 34, > 10, 95, 105, 115, 95, 101, 120, 61, 48, 10, 45, 101, 108, 115, 101, 10, > 45, 117, 32, 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 43, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, > 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 95, 108, 97, 116, 101, > 120, 32, 58, 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, 48, 10, 45, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, > 101, 112, 108, 97, 99, 101, 95, 108, 97, 116, 101, 120, 10, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 34, > 92, 110, 92, 92, 115, 101, 99, 116, 105, 111, 110, 123, 34, 64, 123, 48, > 44, 116, 125, 34, 125, 34, 32, 45, 118, 32, 45, 10, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, > 114, 97, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, 32, 58, 10, 95, > 105, 115, 95, 100, 101, 115, 99, 61, 48, 10, 45, 105, 102, 32, 123, 123, > 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, 34, 40, 42, 41, 34, > 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 45, 49, 44, 116, 125, 39, > 61, 61, 39, 34, 40, 43, 41, 34, 125, 125, 32, 113, 117, 97, 108, 105, > 102, 105, 101, 114, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 113, 117, 97, 108, 105, > 102, 105, 101, 114, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 101, > 49, 61, 34, 92, 92, 92, 92, 126, 92, 92, 92, 92, 34, 32, 101, 48, > 61, 34, 126, 126, 126, 36, 124, 36, 92, 92, 92, 92, 34, 10, 115, 49, > 61, 34, 92, 92, 104, 115, 112, 97, 99, 101, 42, 123, 50, 46, 50, 99, > 109, 125, 34, 32, 115, 48, 61, 34, 34, 10, 45, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, > 101, 95, 108, 97, 116, 101, 120, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 34, 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, 45, 54, > 125, 39, 61, 61, 39, 123, 39, 34, 101, 113, 46, 32, 116, 111, 32, 34, > 39, 125, 125, 125, 10, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 55, > 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, > 45, 49, 93, 32, 123, 39, 46, 39, 125, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 34, 32, 34, 39, 125, 32, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 57, > 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 36, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 61, 64, 123, 48, 44, 116, 125, 10, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 108, 105, 110, 107, 36, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 61, 64, 123, 45, 49, 44, 116, 125, 10, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 113, 117, 97, 108, 105, 102, 105, 101, 114, 36, 95, > 115, 104, 111, 114, 116, 99, 117, 116, 61, 36, 113, 117, 97, 108, 105, 102, > 105, 101, 114, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 123, 36, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 43, 49, 125, 10, 45, 101, 108, > 115, 101, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 64, 123, 45, > 101, 111, 102, 102, 125, 34, 92, 110, 92, 110, 92, 92, 115, 117, 98, 115, > 101, 99, 116, 105, 111, 110, 123, 92, 92, 101, 109, 112, 104, 123, 45, 34, > 64, 123, 48, 44, 116, 125, 34, 92, 92, 105, 110, 100, 101, 120, 123, 45, > 34, 64, 123, 48, 44, 116, 125, 34, 125, 125, 32, 34, 36, 113, 117, 97, > 108, 105, 102, 105, 101, 114, 34, 125, 92, 92, 118, 115, 112, 97, 99, 101, > 42, 123, 45, 48, 46, 53, 101, 109, 125, 34, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 49, 125, 10, 45, 101, 91, 93, 32, 34, 126, 92, 92, 92, > 92, 92, 92, 116, 101, 120, 116, 98, 102, 123, 65, 114, 103, 117, 109, 101, > 110, 116, 115, 58, 32, 125, 32, 34, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 10, 45, 101, 91, 93, 32, 36, 123, 115, > 123, 36, 62, 33, 61, 48, 125, 125, 34, 123, 92, 92, 115, 109, 97, 108, > 108, 32, 92, 92, 116, 101, 120, 116, 116, 116, 123, 34, 64, 123, 123, 49, > 43, 36, 62, 125, 44, 116, 125, 34, 125, 125, 34, 36, 123, 101, 123, 36, > 60, 61, 61, 48, 125, 125, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, > 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, > 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, > 32, 58, 10, 115, 48, 61, 34, 34, 32, 115, 49, 61, 34, 126, 92, 92, > 92, 92, 34, 32, 115, 61, 36, 123, 115, 36, 95, 105, 115, 95, 100, 101, > 115, 99, 125, 10, 45, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 114, 101, 112, 108, 97, 99, 101, 95, 108, 97, 116, 101, > 120, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, 49, 50, > 125, 39, 61, 61, 39, 123, 39, 34, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 34, 39, 125, 125, 10, 45, 115, 32, 43, 44, 123, > 39, 58, 39, 125, 32, 45, 108, 91, 94, 48, 93, 32, 45, 97, 32, 121, > 32, 45, 101, 110, 100, 108, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 123, 39, 58, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 105, 102, 32, 123, 64, 35, > 62, 49, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 91, 49, 93, 32, 34, 32, 97, 110, 100, 32, 34, 44, 34, 125, 32, 97, > 110, 100, 32, 92, 92, 92, 92, 116, 101, 120, 116, 116, 116, 123, 34, 10, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, > 102, 125, 36, 115, 34, 126, 92, 92, 92, 92, 92, 92, 116, 101, 120, 116, > 98, 102, 123, 34, 64, 123, 48, 44, 116, 125, 34, 125, 58, 32, 123, 92, > 92, 115, 109, 97, 108, 108, 32, 92, 92, 116, 101, 120, 116, 116, 116, 123, > 34, 64, 123, 45, 49, 44, 116, 125, 34, 125, 125, 34, 32, 45, 118, 32, > 45, 10, 45, 101, 108, 115, 101, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 36, 115, 34, 126, 92, 92, > 92, 92, 34, 64, 123, 48, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 45, > 49, 44, 48, 45, 55, 125, 39, 61, 61, 39, 123, 39, 34, 40, 101, 113, > 46, 32, 116, 111, 32, 34, 39, 125, 125, 10, 45, 114, 111, 119, 115, 91, > 45, 49, 93, 32, 56, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 46, 39, 125, 32, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 41, > 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 123, 39, 34, 32, 34, 39, 125, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 36, 115, 34, 40, 92, > 92, 101, 109, 112, 104, 123, 101, 113, 46, 32, 116, 111, 125, 32, 123, 92, > 92, 115, 109, 97, 108, 108, 32, 92, 92, 116, 101, 120, 116, 116, 116, 123, > 34, 64, 123, 45, 49, 44, 116, 125, 34, 125, 125, 41, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, 40, > 105, 60, 123, 39, 65, 39, 125, 34, 32, 124, 124, 32, 34, 105, 62, 123, > 39, 90, 39, 125, 41, 34, 32, 38, 38, 32, 34, 105, 33, 61, 52, 48, > 34, 32, 38, 38, 32, 34, 105, 33, 61, 51, 57, 125, 32, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 102, 102, 125, 64, > 123, 45, 49, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, > 101, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 64, 123, 45, 101, > 111, 102, 102, 125, 36, 115, 64, 123, 45, 49, 44, 116, 125, 32, 45, 118, > 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 95, 105, 115, 95, 100, 101, 115, 99, 61, 49, 10, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, > 108, 101, 95, 108, 97, 116, 101, 120, 32, 58, 10, 95, 105, 115, 95, 100, > 101, 115, 99, 61, 48, 10, 45, 105, 102, 32, 36, 95, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, 45, 109, 32, 34, 102, > 111, 111, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 108, > 91, 93, 32, 45, 118, 32, 45, 57, 57, 32, 45, 114, 101, 115, 101, 116, > 32, 45, 102, 111, 111, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, 36, > 95, 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, > 100, 32, 102, 111, 111, 10, 45, 101, 110, 100, 105, 102, 10, 45, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 114, 101, 112, > 108, 97, 99, 101, 95, 108, 97, 116, 101, 120, 10, 45, 118, 32, 43, 10, > 45, 101, 91, 93, 32, 64, 123, 45, 101, 111, 110, 125, 34, 92, 92, 105, > 110, 99, 108, 117, 100, 101, 103, 114, 97, 112, 104, 105, 99, 115, 91, 107, > 101, 101, 112, 97, 115, 112, 101, 99, 116, 114, 97, 116, 105, 111, 61, 116, > 114, 117, 101, 44, 104, 101, 105, 103, 104, 116, 61, 55, 99, 109, 44, 119, > 105, 100, 116, 104, 61, 92, 92, 116, 101, 120, 116, 119, 105, 100, 116, 104, > 93, 123, 34, 36, 95, 102, 105, 108, 101, 110, 97, 109, 101, 34, 125, 92, > 92, 92, 92, 34, 10, 45, 101, 91, 93, 32, 34, 123, 92, 92, 102, 111, > 111, 116, 110, 111, 116, 101, 115, 105, 122, 101, 32, 92, 92, 116, 101, 120, > 116, 98, 102, 123, 69, 120, 97, 109, 112, 108, 101, 32, 34, 36, 95, 101, > 120, 97, 109, 112, 108, 101, 34, 126, 58, 125, 32, 92, 92, 116, 101, 120, > 116, 116, 116, 123, 34, 64, 123, 45, 49, 44, 116, 125, 34, 125, 125, 34, > 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, > 103, 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 108, 97, 116, 101, > 120, 32, 58, 10, 45, 105, 102, 32, 36, 95, 115, 104, 111, 114, 116, 99, > 117, 116, 10, 40, 123, 39, 34, 67, 111, 109, 109, 97, 110, 100, 115, 32, > 115, 104, 111, 114, 116, 99, 117, 116, 115, 34, 39, 125, 41, 32, 45, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, > 98, 115, 101, 99, 116, 105, 111, 110, 95, 108, 97, 116, 101, 120, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, 43, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, > 117, 116, 10, 45, 101, 91, 93, 32, 34, 36, 92, 92, 98, 117, 108, 108, > 101, 116, 36, 126, 39, 92, 92, 116, 101, 120, 116, 116, 116, 123, 45, 34, > 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 36, 62, 125, 34, 125, > 39, 32, 34, 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 113, 117, > 97, 108, 105, 102, 105, 101, 114, 36, 62, 125, 34, 126, 105, 115, 32, 101, > 113, 117, 105, 118, 97, 108, 101, 110, 116, 32, 116, 111, 126, 126, 39, 92, > 92, 116, 101, 120, 116, 116, 116, 123, 34, 36, 123, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 108, 105, 110, 107, 36, 62, 125, 34, 125, 39, 46, 92, > 92, 92, 92, 34, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 45, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 10, 45, 118, > 32, 43, 10, 45, 101, 91, 93, 32, 34, 10, 92, 110, 92, 92, 112, 114, > 105, 110, 116, 105, 110, 100, 101, 120, 10, 92, 110, 126, 92, 92, 92, 92, > 36, 92, 92, 115, 113, 117, 97, 114, 101, 36, 126, 69, 110, 100, 32, 111, > 102, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 10, 92, 110, 92, 110, > 92, 92, 101, 110, 100, 123, 100, 111, 99, 117, 109, 101, 110, 116, 125, 34, > 10, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 117, 110, > 99, 111, 109, 109, 97, 110, 100, 32, 101, 111, 110, 44, 101, 111, 102, 102, > 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, > 114, 101, 112, 108, 97, 99, 101, 95, 108, 97, 116, 101, 120, 32, 58, 10, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 92, 92, > 34, 44, 34, 92, 92, 92, 92, 116, 101, 120, 116, 98, 97, 99, 107, 115, > 108, 97, 115, 104, 32, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 115, 116, 114, 32, 34, 95, 34, 44, 34, 92, 92, 92, 92, 95, 34, 10, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 37, 34, > 44, 34, 92, 92, 92, 92, 37, 34, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 35, 34, 44, 34, 92, 92, 92, 92, 37, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 94, 34, 44, 34, 92, 92, 92, 92, 116, 101, 120, 116, 97, 115, 99, 105, > 105, 99, 105, 114, 99, 117, 109, 32, 34, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 116, 114, 32, 34, 36, 34, 44, 34, 92, 92, 92, 92, > 36, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 34, 92, 123, 34, 44, 34, 92, 92, 92, 92, 92, 123, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 92, 125, 34, 44, > 34, 92, 92, 92, 92, 92, 125, 34, 10, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 34, 38, 34, 44, 34, 92, 92, 92, 92, 38, > 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, > 124, 34, 44, 34, 126, 36, 124, 36, 126, 34, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 34, 60, 34, 44, 34, 36, 92, 60, > 36, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 34, 62, 34, 44, 34, 36, 92, 62, 36, 34, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, > 95, 105, 109, 97, 103, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 49, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 32, 45, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 101, 120, 97, 109, > 112, 108, 101, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, > 115, 101, 116, 32, 111, 102, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, > 39, 34, 36, 95, 110, 97, 109, 101, 34, 39, 46, 92, 110, 34, 10, 45, > 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 95, 105, 109, > 97, 103, 101, 115, 32, 58, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 32, 42, 42, 32, 83, 101, 99, 116, 105, 111, 110, 32, > 92, 35, 34, 36, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, 110, 34, > 58, 32, 34, 64, 123, 48, 44, 116, 125, 34, 46, 92, 110, 34, 10, 45, > 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, > 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, 105, 111, 110, 95, 105, > 109, 97, 103, 101, 115, 32, 58, 32, 95, 99, 111, 109, 109, 97, 110, 100, > 95, 110, 97, 109, 101, 61, 64, 123, 48, 44, 116, 125, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, > 114, 105, 112, 116, 105, 111, 110, 95, 105, 109, 97, 103, 101, 115, 32, 58, > 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, > 101, 120, 97, 109, 112, 108, 101, 95, 105, 109, 97, 103, 101, 115, 32, 58, > 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, > 91, 34, 36, 95, 101, 120, 97, 109, 112, 108, 101, 34, 93, 32, 67, 111, > 109, 109, 97, 110, 100, 32, 39, 45, 34, 36, 95, 99, 111, 109, 109, 97, > 110, 100, 95, 110, 97, 109, 101, 34, 39, 58, 32, 36, 32, 34, 64, 123, > 45, 49, 44, 116, 125, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 36, > 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 10, > 45, 109, 32, 34, 102, 111, 111, 34, 36, 95, 101, 120, 97, 109, 112, 108, > 101, 34, 32, 58, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 108, > 91, 93, 32, 45, 118, 32, 45, 49, 32, 45, 114, 101, 115, 101, 116, 32, > 45, 118, 32, 45, 57, 57, 32, 45, 102, 111, 111, 36, 95, 101, 120, 97, > 109, 112, 108, 101, 32, 45, 118, 32, 45, 49, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 32, 45, 111, 32, 36, 95, > 102, 105, 108, 101, 110, 97, 109, 101, 44, 56, 53, 32, 45, 114, 109, 32, > 45, 101, 110, 100, 108, 10, 45, 117, 110, 99, 111, 109, 109, 97, 110, 100, > 32, 102, 111, 111, 36, 95, 101, 120, 97, 109, 112, 108, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, 105, 109, 97, 103, 101, > 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 118, 32, > 43, 10, 45, 101, 91, 93, 32, 34, 92, 110, 32, 45, 32, 91, 32, 65, > 108, 108, 32, 100, 111, 110, 101, 33, 32, 93, 92, 110, 92, 110, 34, 10, > 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, > 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, 95, 97, 115, 99, 105, 105, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 95, 115, 104, 111, > 114, 116, 99, 117, 116, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, > 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, > 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 118, 32, 43, 10, 45, > 101, 91, 93, 32, 34, 92, 110, 32, 42, 42, 32, 34, 64, 123, 48, 44, > 116, 125, 34, 58, 34, 10, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, > 97, 116, 105, 111, 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, 45, 105, > 102, 32, 123, 123, 64, 123, 45, 49, 44, 116, 125, 39, 61, 61, 39, 34, > 40, 42, 41, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 45, 49, > 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, 34, 125, 125, 32, 113, > 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 32, 34, 64, 123, 45, 49, > 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, > 101, 32, 113, 117, 97, 108, 105, 102, 105, 101, 114, 61, 34, 34, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 34, > 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, 45, 54, 125, 39, > 61, 61, 39, 123, 39, 34, 101, 113, 46, 32, 116, 111, 32, 34, 39, 125, > 125, 125, 10, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 55, 44, 49, > 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, > 93, 32, 123, 39, 46, 39, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 91, 45, 49, 93, 32, 123, 39, 34, 32, 34, 39, 125, 32, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 57, 10, 95, > 115, 104, 111, 114, 116, 99, 117, 116, 36, 95, 115, 104, 111, 114, 116, 99, > 117, 116, 61, 64, 123, 48, 44, 116, 125, 10, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 108, 105, 110, 107, 36, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 61, 64, 123, 45, 49, 44, 116, 125, 10, 95, 115, 104, 111, 114, 116, > 99, 117, 116, 113, 117, 97, 108, 105, 102, 105, 101, 114, 36, 95, 115, 104, > 111, 114, 116, 99, 117, 116, 61, 36, 113, 117, 97, 108, 105, 102, 105, 101, > 114, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 123, 36, 95, 115, > 104, 111, 114, 116, 99, 117, 116, 43, 49, 125, 10, 45, 101, 108, 115, 101, > 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 32, 32, > 32, 32, 45, 34, 64, 123, 48, 44, 116, 125, 36, 123, 113, 117, 97, 108, > 105, 102, 105, 101, 114, 125, 34, 58, 34, 32, 45, 118, 32, 45, 32, 45, > 114, 109, 91, 48, 93, 10, 45, 105, 102, 32, 64, 35, 10, 115, 61, 34, > 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 32, 34, 10, 45, 121, 32, 120, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 40, 123, > 39, 34, 32, 124, 34, 39, 125, 41, 32, 45, 97, 91, 36, 62, 44, 45, > 49, 93, 32, 120, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 95, 100, > 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 112, 108, > 105, 116, 95, 97, 115, 99, 105, 105, 32, 56, 48, 44, 48, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 40, 123, 39, > 92, 110, 36, 115, 34, 32, 32, 34, 39, 125, 41, 32, 45, 97, 91, 36, > 62, 44, 45, 49, 93, 32, 120, 32, 45, 100, 111, 110, 101, 10, 45, 97, > 32, 120, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 36, 115, 64, > 123, 48, 44, 116, 125, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 34, 32, 45, 118, 32, 45, 10, > 45, 101, 110, 100, 105, 102, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, > 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, > 110, 95, 97, 115, 99, 105, 105, 32, 58, 10, 115, 61, 34, 32, 32, 32, > 32, 32, 32, 32, 32, 34, 32, 98, 115, 48, 61, 34, 92, 110, 34, 32, > 98, 115, 49, 61, 34, 92, 92, 92, 92, 92, 110, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 32, 32, 34, 10, 45, 121, 32, 120, 32, 45, 95, > 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 112, > 108, 105, 116, 95, 97, 115, 99, 105, 105, 32, 57, 54, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 40, 123, 39, 36, > 123, 98, 115, 36, 95, 105, 115, 95, 101, 120, 97, 109, 112, 108, 101, 125, > 36, 115, 34, 32, 32, 34, 39, 125, 41, 32, 45, 97, 91, 36, 62, 44, > 45, 49, 93, 32, 120, 32, 45, 100, 111, 110, 101, 32, 45, 97, 32, 120, > 10, 45, 118, 32, 43, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 101, 91, 93, 32, 36, 115, 64, 123, 36, 62, 44, 116, 125, 32, > 45, 118, 32, 45, 32, 45, 100, 111, 110, 101, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, > 101, 95, 97, 115, 99, 105, 105, 32, 58, 10, 95, 100, 111, 99, 117, 109, > 101, 110, 116, 95, 103, 109, 105, 99, 95, 102, 111, 111, 116, 101, 114, 95, > 97, 115, 99, 105, 105, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, > 10, 45, 105, 102, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, > 40, 123, 39, 34, 67, 111, 109, 109, 97, 110, 100, 115, 32, 115, 104, 111, > 114, 116, 99, 117, 116, 115, 34, 39, 125, 41, 32, 45, 95, 100, 111, 99, > 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, > 99, 116, 105, 111, 110, 95, 97, 115, 99, 105, 105, 91, 45, 49, 93, 32, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 34, 32, 45, 118, 32, > 45, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, 43, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 10, 45, 101, 91, 93, 32, 34, 32, 32, 32, 32, 45, 34, 36, 123, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 36, 62, 125, 34, 32, 34, 36, > 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 113, 117, 97, 108, 105, 102, > 105, 101, 114, 36, 62, 125, 34, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 34, 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, > 107, 36, 62, 125, 34, 39, 46, 34, 10, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 32, > 45, 101, 91, 93, 32, 34, 92, 110, 32, 32, 32, 91, 32, 84, 111, 116, > 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 99, 111, 109, > 109, 97, 110, 100, 115, 58, 32, 34, 36, 95, 99, 111, 109, 109, 97, 110, > 100, 34, 32, 93, 34, 32, 45, 118, 32, 45, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 115, 112, 108, 105, 116, 95, > 97, 115, 99, 105, 105, 32, 58, 10, 45, 100, 111, 32, 45, 105, 102, 32, > 123, 119, 62, 36, 49, 125, 10, 105, 61, 123, 36, 49, 45, 49, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 47, 50, 125, 32, 45, > 105, 102, 32, 123, 67, 61, 105, 40, 36, 49, 45, 49, 45, 36, 62, 41, > 59, 67, 61, 61, 51, 50, 124, 124, 67, 61, 61, 51, 56, 124, 124, 67, > 61, 61, 52, 50, 124, 124, 67, 61, 61, 52, 51, 124, 124, 67, 61, 61, > 52, 52, 124, 124, 67, 61, 61, 52, 54, 124, 124, 67, 61, 61, 52, 55, > 124, 124, 67, 61, 61, 53, 56, 124, 124, 67, 61, 61, 53, 57, 124, 124, > 67, 61, 61, 54, 51, 124, 124, 67, 61, 61, 57, 50, 124, 124, 67, 61, > 61, 49, 50, 52, 125, 32, 105, 61, 123, 36, 49, 45, 49, 45, 36, 62, > 125, 32, 45, 98, 114, 101, 97, 107, 10, 45, 101, 110, 100, 105, 102, 32, > 45, 100, 111, 110, 101, 10, 45, 45, 122, 91, 45, 49, 93, 32, 123, 36, > 105, 43, 49, 125, 44, 49, 48, 48, 37, 32, 45, 122, 91, 45, 50, 93, > 32, 48, 44, 36, 105, 10, 45, 101, 110, 100, 105, 102, 32, 45, 119, 104, > 105, 108, 101, 32, 123, 119, 62, 36, 49, 125, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 104, 101, 97, 100, 101, 114, > 95, 98, 97, 115, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, > 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 35, 10, 92, > 110, 92, 35, 32, 32, 66, 97, 115, 104, 32, 99, 111, 109, 112, 108, 101, > 116, 105, 111, 110, 32, 114, 117, 108, 101, 115, 32, 102, 111, 114, 32, 39, > 103, 109, 105, 99, 39, 46, 10, 92, 110, 92, 35, 10, 92, 110, 92, 35, > 32, 84, 104, 105, 115, 32, 102, 105, 108, 101, 32, 104, 97, 115, 32, 98, > 101, 101, 110, 32, 103, 101, 110, 101, 114, 97, 116, 101, 100, 32, 97, 117, > 116, 111, 109, 97, 116, 105, 99, 97, 108, 108, 121, 46, 10, 92, 110, 92, > 35, 32, 68, 111, 32, 110, 111, 116, 32, 101, 100, 105, 116, 33, 10, 92, > 110, 92, 35, 10, 92, 110, 92, 35, 32, 84, 104, 105, 115, 32, 102, 105, > 108, 101, 32, 115, 104, 111, 117, 108, 100, 32, 98, 101, 32, 99, 111, 112, > 105, 101, 100, 47, 114, 101, 110, 97, 109, 101, 100, 32, 105, 110, 32, 39, > 47, 101, 116, 99, 47, 98, 97, 115, 104, 95, 99, 111, 109, 112, 108, 101, > 116, 105, 111, 110, 46, 100, 47, 103, 109, 105, 99, 39, 46, 10, 92, 110, > 92, 35, 10, 92, 110, 10, 92, 110, 95, 34, 36, 95, 110, 97, 109, 101, > 34, 40, 41, 10, 92, 110, 123, 10, 92, 110, 92, 116, 108, 111, 99, 97, > 108, 32, 99, 117, 114, 32, 112, 114, 101, 118, 32, 111, 112, 116, 115, 32, > 99, 111, 109, 115, 10, 92, 110, 92, 116, 67, 79, 77, 80, 82, 69, 80, > 76, 89, 61, 40, 41, 10, 92, 110, 92, 116, 99, 117, 114, 61, 92, 34, > 36, 123, 67, 79, 77, 80, 95, 87, 79, 82, 68, 83, 91, 67, 79, 77, > 80, 95, 67, 87, 79, 82, 68, 93, 125, 92, 34, 10, 92, 110, 92, 116, > 112, 114, 101, 118, 61, 92, 34, 36, 123, 67, 79, 77, 80, 95, 87, 79, > 82, 68, 83, 91, 67, 79, 77, 80, 95, 67, 87, 79, 82, 68, 45, 49, > 93, 125, 92, 34, 10, 34, 10, 45, 118, 32, 45, 10, 95, 111, 112, 116, > 115, 61, 10, 95, 99, 111, 109, 115, 61, 10, 95, 97, 114, 103, 99, 111, > 109, 109, 97, 110, 100, 61, 48, 10, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 61, 48, 10, 95, 110, 98, 111, 112, 116, 115, 61, 48, 10, 95, 110, > 98, 99, 111, 109, 115, 61, 48, 10, 95, 100, 111, 99, 117, 109, 101, 110, > 116, 95, 103, 109, 105, 99, 95, 115, 117, 98, 115, 101, 99, 116, 105, 111, > 110, 95, 98, 97, 115, 104, 32, 58, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 115, 99, 114, 105, 112, 116, > 105, 111, 110, 95, 98, 97, 115, 104, 32, 58, 10, 95, 100, 111, 99, 117, > 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 101, 120, 97, 109, 112, 108, > 101, 95, 98, 97, 115, 104, 32, 58, 10, 95, 100, 111, 99, 117, 109, 101, > 110, 116, 95, 103, 109, 105, 99, 95, 100, 101, 99, 108, 97, 114, 97, 116, > 105, 111, 110, 95, 98, 97, 115, 104, 32, 58, 10, 95, 111, 112, 116, 115, > 36, 95, 110, 98, 111, 112, 116, 115, 61, 45, 64, 123, 48, 44, 116, 125, > 34, 32, 34, 45, 45, 64, 123, 48, 44, 116, 125, 10, 95, 110, 98, 111, > 112, 116, 115, 61, 123, 36, 95, 110, 98, 111, 112, 116, 115, 43, 49, 125, > 10, 95, 99, 111, 109, 115, 36, 95, 110, 98, 99, 111, 109, 115, 61, 64, > 123, 48, 44, 116, 125, 10, 95, 110, 98, 99, 111, 109, 115, 61, 123, 36, > 95, 110, 98, 99, 111, 109, 115, 43, 49, 125, 10, 45, 105, 102, 32, 123, > 123, 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 34, 105, 110, 112, 117, > 116, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 48, 44, 116, 125, > 39, 61, 61, 39, 34, 105, 34, 125, 34, 32, 124, 124, 32, 34, 92, 10, > 123, 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 34, 111, 117, 116, 112, > 117, 116, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 48, 44, 116, > 125, 39, 61, 61, 39, 34, 111, 34, 125, 34, 32, 124, 124, 32, 34, 92, > 10, 123, 64, 123, 48, 44, 116, 125, 39, 61, 61, 39, 34, 99, 111, 109, > 109, 97, 110, 100, 34, 125, 34, 32, 124, 124, 32, 34, 123, 64, 123, 48, > 44, 116, 125, 39, 61, 61, 39, 34, 109, 34, 125, 125, 32, 45, 114, 101, > 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 123, 64, 123, 36, > 60, 44, 116, 125, 39, 61, 61, 39, 34, 40, 42, 41, 34, 125, 124, 124, > 123, 64, 123, 36, 60, 44, 116, 125, 39, 61, 61, 39, 34, 40, 43, 41, > 34, 125, 125, 32, 45, 114, 109, 91, 36, 60, 93, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 64, 35, > 61, 61, 50, 34, 32, 38, 38, 32, 34, 123, 64, 123, 45, 49, 44, 48, > 45, 54, 125, 39, 61, 61, 39, 123, 39, 34, 101, 113, 46, 32, 116, 111, > 32, 34, 39, 125, 125, 125, 10, 45, 114, 111, 119, 115, 91, 45, 49, 93, > 32, 55, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 91, 45, 49, 93, 32, 123, 39, 46, 39, 125, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 123, 39, 34, 32, 34, 39, > 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, > 51, 57, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 123, 39, 45, 39, 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, > 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 48, 44, 116, > 125, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, 36, > 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, 64, 123, 45, 115, 116, 114, > 50, 104, 101, 120, 92, 32, 64, 123, 49, 44, 116, 125, 125, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 95, 115, 104, 111, 114, 116, 99, 117, 116, 61, > 123, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 43, 49, 125, 10, 45, > 101, 108, 105, 102, 32, 123, 64, 35, 62, 49, 125, 10, 95, 99, 111, 109, > 109, 97, 110, 100, 36, 95, 97, 114, 103, 99, 111, 109, 109, 97, 110, 100, > 61, 64, 123, 48, 44, 116, 125, 10, 45, 105, 102, 32, 123, 64, 123, 48, > 44, 116, 125, 39, 61, 61, 39, 34, 104, 101, 108, 112, 34, 125, 32, 95, > 97, 114, 103, 117, 109, 101, 110, 116, 36, 95, 97, 114, 103, 99, 111, 109, > 109, 97, 110, 100, 61, 34, 36, 99, 111, 109, 115, 92, 34, 32, 45, 45, > 32, 92, 34, 36, 99, 117, 114, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 40, 123, 39, 62, 39, > 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 105, 115, 99, 97, > 114, 100, 91, 94, 48, 93, 32, 123, 39, 34, 32, 34, 39, 125, 32, 45, > 105, 91, 50, 45, 45, 50, 93, 32, 40, 123, 39, 34, 32, 34, 39, 125, > 41, 32, 45, 97, 91, 94, 48, 93, 32, 121, 10, 95, 97, 114, 103, 117, > 109, 101, 110, 116, 36, 95, 97, 114, 103, 99, 111, 109, 109, 97, 110, 100, > 61, 64, 123, 49, 44, 116, 125, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 97, 114, 103, 117, 109, 101, 110, 116, 108, 105, 110, 107, 64, 123, 45, 115, > 116, 114, 50, 104, 101, 120, 92, 32, 64, 123, 48, 44, 116, 125, 125, 61, > 36, 123, 95, 97, 114, 103, 117, 109, 101, 110, 116, 36, 95, 97, 114, 103, > 99, 111, 109, 109, 97, 110, 100, 125, 10, 95, 97, 114, 103, 99, 111, 109, > 109, 97, 110, 100, 61, 123, 36, 95, 97, 114, 103, 99, 111, 109, 109, 97, > 110, 100, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 95, 100, 111, > 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, 99, 95, 102, 111, 111, 116, > 101, 114, 95, 98, 97, 115, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 49, 10, 45, 118, 32, 43, 10, 45, 101, 91, 93, 32, 34, 92, 116, > 111, 112, 116, 115, 61, 92, 34, 92, 92, 34, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 95, 110, 98, 111, 112, 116, 115, 32, 45, 101, 91, 93, > 32, 34, 92, 116, 32, 32, 32, 32, 32, 32, 34, 36, 123, 95, 111, 112, > 116, 115, 36, 62, 125, 92, 92, 32, 45, 100, 111, 110, 101, 32, 45, 101, > 91, 93, 32, 34, 92, 116, 32, 32, 32, 32, 32, 92, 34, 34, 10, 45, > 101, 91, 93, 32, 34, 92, 110, 92, 116, 99, 111, 109, 115, 61, 92, 34, > 92, 92, 34, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 110, 98, > 99, 111, 109, 115, 32, 45, 101, 91, 93, 32, 34, 92, 116, 32, 32, 32, > 32, 32, 32, 34, 36, 123, 95, 99, 111, 109, 115, 36, 62, 125, 92, 92, > 32, 45, 100, 111, 110, 101, 32, 45, 101, 91, 93, 32, 34, 92, 116, 32, > 32, 32, 32, 32, 92, 34, 34, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 92, 116, 99, 97, 115, 101, 32, 92, 34, 36, 123, 112, 114, 101, 118, 125, > 92, 34, 32, 105, 110, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 95, 97, 114, 103, 99, 111, 109, 109, 97, 110, 100, 10, 45, 101, 91, 93, > 32, 34, 92, 116, 92, 116, 92, 34, 45, 34, 36, 123, 95, 99, 111, 109, > 109, 97, 110, 100, 36, 62, 125, 34, 92, 34, 32, 124, 32, 92, 34, 45, > 45, 34, 36, 123, 95, 99, 111, 109, 109, 97, 110, 100, 36, 62, 125, 34, > 92, 34, 41, 34, 10, 45, 101, 91, 93, 32, 34, 92, 116, 92, 116, 67, > 79, 77, 80, 82, 69, 80, 76, 89, 61, 40, 32, 36, 40, 99, 111, 109, > 112, 103, 101, 110, 32, 45, 87, 32, 92, 34, 34, 36, 123, 95, 97, 114, > 103, 117, 109, 101, 110, 116, 36, 62, 125, 34, 92, 34, 41, 32, 41, 92, > 110, 92, 116, 92, 116, 114, 101, 116, 117, 114, 110, 32, 48, 92, 110, 92, > 116, 92, 116, 59, 59, 34, 10, 45, 100, 111, 110, 101, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 95, 115, 104, 111, 114, 116, 99, 117, 116, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 123, 95, 97, 114, 103, > 117, 109, 101, 110, 116, 108, 105, 110, 107, 36, 123, 95, 115, 104, 111, 114, > 116, 99, 117, 116, 108, 105, 110, 107, 36, 62, 125, 125, 41, 125, 10, 45, > 101, 91, 93, 32, 34, 92, 116, 92, 116, 92, 34, 45, 34, 36, 123, 95, > 115, 104, 111, 114, 116, 99, 117, 116, 36, 62, 125, 34, 92, 34, 32, 124, > 32, 92, 34, 45, 45, 34, 36, 123, 95, 115, 104, 111, 114, 116, 99, 117, > 116, 36, 62, 125, 34, 92, 34, 41, 34, 10, 45, 101, 91, 93, 32, 34, > 92, 116, 92, 116, 67, 79, 77, 80, 82, 69, 80, 76, 89, 61, 40, 32, > 36, 40, 99, 111, 109, 112, 103, 101, 110, 32, 45, 87, 32, 92, 34, 34, > 36, 123, 95, 97, 114, 103, 117, 109, 101, 110, 116, 108, 105, 110, 107, 36, > 123, 95, 115, 104, 111, 114, 116, 99, 117, 116, 108, 105, 110, 107, 36, 62, > 125, 125, 34, 92, 34, 41, 32, 41, 92, 110, 92, 116, 92, 116, 114, 101, > 116, 117, 114, 110, 32, 48, 92, 110, 92, 116, 92, 116, 59, 59, 34, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 101, 91, > 93, 32, 34, 92, 116, 101, 115, 97, 99, 34, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 92, 116, 105, 102, 32, 91, 91, 32, 92, 34, 36, 99, 117, > 114, 92, 34, 32, 61, 61, 32, 45, 42, 32, 93, 93, 32, 59, 32, 116, > 104, 101, 110, 10, 92, 110, 92, 116, 92, 116, 67, 79, 77, 80, 82, 69, > 80, 76, 89, 61, 40, 32, 36, 40, 99, 111, 109, 112, 103, 101, 110, 32, > 45, 87, 32, 92, 34, 36, 111, 112, 116, 115, 92, 34, 32, 45, 45, 32, > 92, 34, 36, 99, 117, 114, 92, 34, 41, 32, 41, 10, 92, 110, 92, 116, > 101, 108, 115, 101, 10, 92, 110, 92, 116, 92, 116, 95, 102, 105, 108, 101, > 100, 105, 114, 10, 92, 110, 92, 116, 102, 105, 10, 92, 110, 10, 92, 110, > 125, 10, 92, 110, 10, 99, 111, 109, 112, 108, 101, 116, 101, 32, 45, 70, > 32, 95, 34, 36, 95, 110, 97, 109, 101, 34, 32, 45, 111, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 115, 32, 103, 109, 105, 99, 34, 10, 45, 118, > 32, 45, 10, 95, 100, 111, 99, 117, 109, 101, 110, 116, 95, 103, 109, 105, > 99, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 87, 36, 62, 61, 123, 119, 125, 32, 72, 36, > 62, 61, 123, 104, 125, 32, 68, 36, 62, 61, 123, 100, 125, 32, 83, 36, > 62, 61, 123, 115, 125, 32, 73, 83, 95, 51, 68, 36, 62, 61, 64, 123, > 45, 105, 115, 95, 51, 100, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, > 51, 100, 125, 32, 45, 114, 51, 100, 32, 49, 44, 49, 44, 48, 44, 45, > 56, 48, 32, 45, 114, 51, 100, 32, 48, 44, 49, 44, 48, 44, 56, 48, > 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, > 32, 45, 101, 108, 115, 101, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, > 115, 32, 44, 32, 45, 105, 102, 32, 123, 119, 62, 57, 48, 48, 125, 32, > 114, 61, 123, 114, 111, 117, 110, 100, 40, 57, 48, 48, 42, 49, 48, 48, > 47, 119, 44, 48, 46, 49, 41, 125, 32, 45, 114, 91, 94, 45, 49, 93, > 32, 36, 114, 37, 44, 36, 114, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 50, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 105, 102, 32, 123, 115, 61, 61, 49, 125, 32, 45, 114, > 32, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, 51, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 32, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, > 51, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 119, 60, 61, 104, 38, 38, 104, 60, 50, 53, 54, 125, 32, 45, 114, 50, > 100, 121, 32, 50, 53, 54, 44, 50, 32, 45, 101, 108, 105, 102, 32, 123, > 104, 60, 61, 119, 38, 38, 119, 60, 50, 53, 54, 125, 32, 45, 114, 50, > 100, 120, 32, 50, 53, 54, 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 119, 60, 61, 104, 38, 38, 104, 62, 53, 49, 50, > 125, 32, 45, 114, 50, 100, 121, 32, 53, 49, 50, 44, 50, 32, 45, 101, > 108, 105, 102, 32, 123, 104, 60, 61, 119, 38, 38, 119, 62, 53, 49, 50, > 125, 32, 45, 114, 50, 100, 120, 32, 53, 49, 50, 44, 50, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 104, 60, 52, 56, 125, 32, > 45, 114, 32, 49, 48, 48, 37, 44, 52, 56, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 119, 60, 52, 56, 125, 32, 45, 114, 32, > 52, 56, 44, 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, > 109, 101, 32, 52, 44, 52, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 78, 61, 64, 35, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 78, 32, 45, 108, 91, 36, 62, 93, 10, 123, 119, > 125, 44, 49, 54, 44, 49, 44, 51, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 123, 119, 62, 55, 53, 125, 10, 45, 105, 102, 32, 123, 36, 78, 62, > 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 49, 49, 48, 125, 32, 45, > 116, 91, 45, 49, 93, 32, 73, 109, 97, 103, 101, 92, 32, 91, 36, 62, > 93, 58, 44, 51, 44, 51, 44, 49, 53, 32, 45, 101, 108, 115, 101, 32, > 45, 116, 91, 45, 49, 93, 32, 91, 36, 62, 93, 58, 44, 51, 44, 51, > 44, 49, 53, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 123, 73, 83, 95, 51, 68, 36, 62, 125, > 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 40, 51, 100, 92, 32, 111, > 98, 106, 101, 99, 116, 41, 44, 48, 44, 48, 44, 49, 51, 44, 49, 44, > 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 48, 32, 45, 116, 91, 45, > 49, 93, 32, 40, 36, 123, 87, 36, 62, 125, 120, 36, 123, 72, 36, 62, > 125, 120, 36, 123, 68, 36, 62, 125, 120, 36, 123, 83, 36, 62, 125, 41, > 44, 48, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, > 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 54, 52, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 45, 49, 93, 10, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 64, 123, 45, 50, 44, 119, 125, 45, 119, 45, 53, 125, 44, 123, 64, > 123, 45, 50, 44, 104, 125, 45, 104, 45, 49, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 116, 91, 45, 49, 93, > 32, 91, 36, 62, 93, 58, 44, 51, 44, 51, 44, 49, 53, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 45, 32, 50, 53, 53, 32, 45, > 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 44, 32, 45, > 43, 32, 50, 53, 53, 10, 45, 105, 102, 32, 123, 119, 60, 50, 53, 54, > 125, 32, 45, 45, 32, 50, 53, 53, 32, 45, 114, 32, 50, 53, 54, 44, > 49, 48, 48, 37, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, > 44, 48, 46, 53, 32, 45, 43, 32, 50, 53, 53, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 104, 60, 50, 53, 54, 125, 32, 45, > 45, 32, 50, 53, 53, 32, 45, 114, 32, 49, 48, 48, 37, 44, 50, 53, > 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 43, 32, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 101, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 101, 99, 104, 111, 39, 46, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 99, 104, 111, 32, 58, 32, 109, > 101, 115, 115, 97, 103, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, 44, 32, > 111, 110, 32, 116, 104, 101, 32, 101, 114, 114, 111, 114, 32, 111, 117, 116, > 112, 117, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 101, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 109, 97, 110, 100, 32, 115, 117, > 98, 115, 101, 116, 32, 40, 105, 102, 32, 97, 110, 121, 41, 32, 115, 116, > 97, 110, 100, 115, 32, 102, 111, 114, 32, 100, 105, 115, 112, 108, 97, 121, > 101, 100, 32, 115, 99, 111, 112, 101, 32, 105, 110, 100, 105, 99, 101, 115, > 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 101, 99, 104, 111, 95, 102, 105, 108, 101, 32, 58, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 44, 109, 101, 115, 115, 97, 103, 101, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, > 44, 32, 97, 112, 112, 101, 110, 100, 105, 110, 103, 32, 105, 116, 32, 116, > 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 111, 117, 116, 112, > 117, 116, 32, 102, 105, 108, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 115, 105, 109, 105, 108, 97, 114, 32, 116, 111, 32, 39, 45, > 101, 99, 104, 111, 39, 32, 102, 111, 114, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 111, 117, 116, 112, 117, 116, 32, 102, 105, 108, 101, 32, > 115, 116, 114, 101, 97, 109, 41, 46, 10, 101, 99, 104, 111, 95, 102, 105, > 108, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, > 39, 92, 110, 39, 125, 34, 10, 45, 118, 32, 45, 32, 40, 123, 34, 39, > 36, 123, 50, 45, 45, 49, 125, 92, 110, 39, 34, 125, 41, 32, 45, 111, > 91, 45, 49, 93, 32, 114, 97, 119, 58, 36, 49, 44, 99, 104, 97, 114, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, 116, > 32, 58, 32, 109, 101, 115, 115, 97, 103, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 109, 101, 115, 115, 97, 103, 101, 44, 32, 111, 110, > 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 111, 117, > 116, 112, 117, 116, 32, 40, 115, 116, 100, 111, 117, 116, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 105, 109, 105, 108, 97, 114, > 32, 116, 111, 32, 39, 45, 101, 99, 104, 111, 39, 32, 102, 111, 114, 32, > 111, 117, 116, 112, 117, 116, 32, 111, 110, 32, 115, 116, 97, 110, 100, 97, > 114, 100, 32, 111, 117, 116, 112, 117, 116, 32, 105, 110, 115, 116, 101, 97, > 100, 32, 111, 102, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 101, 114, > 114, 111, 114, 41, 46, 10, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, > 116, 32, 58, 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 42, 34, > 92, 110, 39, 125, 41, 32, 45, 111, 91, 45, 49, 93, 32, 45, 46, 114, > 97, 119, 44, 99, 104, 97, 114, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 117, 110, 99, > 116, 105, 111, 110, 49, 100, 32, 58, 32, 48, 60, 61, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 60, 61, 49, 44, 120, 48, 62, 61, 48, 44, > 121, 48, 44, 120, 49, 62, 61, 48, 44, 121, 49, 44, 46, 46, 46, 44, > 120, 110, 62, 61, 48, 44, 121, 110, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 117, 116, 32, 99, 111, 110, 116, 105, 110, 117, 111, > 117, 115, 32, 49, 100, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 102, > 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 108, 105, > 115, 116, 32, 111, 102, 32, 107, 101, 121, 112, 111, 105, 110, 116, 115, 32, > 40, 120, 107, 44, 121, 107, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 109, 97, 120, > 40, 120, 107, 41, 93, 32, 40, 120, 107, 32, 97, 114, 101, 32, 112, 111, > 115, 105, 116, 105, 118, 101, 32, 105, 110, 116, 101, 103, 101, 114, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 61, 49, 39, 32, 97, 110, 100, 32, 39, 120, > 48, 61, 121, 48, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 49, 44, 48, 44, 48, 44, 49, 48, 44, 51, 48, 44, 52, 48, 44, 50, > 48, 44, 55, 48, 44, 51, 48, 44, 56, 48, 44, 48, 32, 45, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 49, 60, 61, 49, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, > 32, 99, 111, 110, 116, 105, 110, 117, 111, 117, 115, 32, 49, 100, 32, 102, > 117, 110, 99, 116, 105, 111, 110, 44, 32, 119, 105, 116, 104, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 32, 97, 110, 100, 32, > 107, 101, 121, 112, 111, 105, 110, 116, 115, 32, 40, 36, 123, 50, 45, 45, > 49, 125, 41, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, > 36, 35, 60, 53, 125, 32, 123, 109, 97, 120, 40, 48, 44, 36, 50, 41, > 43, 49, 125, 44, 49, 44, 49, 44, 49, 44, 36, 51, 32, 45, 118, 32, > 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 40, 36, 123, 50, 45, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 50, 44, 123, 119, 47, 50, 125, 44, 49, 44, 49, 44, 45, 49, > 32, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 43, 44, 121, 32, 45, > 115, 91, 45, 49, 93, 32, 120, 44, 50, 32, 45, 114, 111, 117, 110, 100, > 91, 45, 50, 93, 32, 49, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, > 32, 120, 10, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 48, > 44, 49, 44, 48, 44, 48, 44, 49, 32, 45, 45, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 10, 45, > 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 48, 44, 45, 49, 44, > 48, 44, 48, 44, 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 51, > 93, 10, 45, 45, 42, 91, 45, 50, 93, 32, 123, 36, 49, 47, 50, 125, > 32, 45, 45, 42, 91, 45, 50, 93, 32, 123, 49, 45, 36, 49, 47, 50, > 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 42, 91, 45, > 51, 93, 32, 123, 49, 45, 36, 49, 47, 50, 125, 32, 45, 42, 91, 45, > 50, 93, 32, 123, 36, 49, 47, 50, 125, 32, 45, 43, 91, 45, 51, 44, > 45, 50, 93, 10, 45, 115, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, > 45, 43, 91, 45, 52, 44, 45, 50, 93, 32, 49, 101, 45, 49, 48, 10, > 45, 47, 91, 45, 51, 93, 32, 91, 45, 52, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 52, 44, 45, > 50, 93, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 10, 123, > 64, 123, 45, 49, 44, 40, 48, 44, 123, 104, 45, 49, 125, 41, 125, 43, > 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 123, 45, 50, > 44, 104, 125, 45, 49, 125, 10, 120, 115, 116, 97, 114, 116, 61, 123, 105, > 102, 40, 36, 62, 44, 64, 123, 45, 50, 44, 48, 125, 44, 48, 41, 125, > 10, 45, 95, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, 64, 123, > 45, 50, 44, 48, 45, 49, 125, 44, 64, 123, 45, 50, 44, 51, 125, 44, > 64, 123, 45, 50, 44, 52, 45, 54, 125, 44, 36, 120, 115, 116, 97, 114, > 116, 44, 64, 123, 45, 50, 44, 52, 125, 32, 45, 106, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 36, 120, 115, 116, 97, 114, 116, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, > 32, 48, 44, 45, 49, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 50, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 49, 100, > 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 36, 123, 50, 45, 45, > 49, 125, 41, 93, 34, 10, 45, 118, 32, 43, 10, 95, 102, 117, 110, 99, > 116, 105, 111, 110, 49, 100, 32, 58, 10, 40, 123, 36, 49, 94, 51, 125, > 44, 123, 36, 49, 94, 50, 125, 44, 36, 49, 44, 49, 59, 92, 10, 123, > 51, 42, 36, 49, 94, 50, 125, 44, 123, 50, 42, 36, 49, 125, 44, 49, > 44, 48, 59, 92, 10, 123, 36, 52, 94, 51, 125, 44, 123, 36, 52, 94, > 50, 125, 44, 36, 52, 44, 49, 59, 92, 10, 123, 51, 42, 36, 52, 94, > 50, 125, 44, 123, 50, 42, 36, 52, 125, 44, 49, 44, 48, 41, 10, 40, > 36, 50, 59, 36, 51, 59, 36, 53, 59, 36, 54, 41, 32, 45, 115, 111, > 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, > 91, 45, 50, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, > 45, 49, 93, 10, 40, 36, 55, 44, 36, 56, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 49, 43, 36, 56, 45, 36, 55, 125, 44, 49, 44, 49, > 44, 49, 44, 51, 32, 45, 45, 94, 91, 45, 49, 93, 32, 51, 32, 45, > 45, 94, 91, 45, 50, 93, 32, 50, 32, 45, 45, 102, 91, 45, 49, 93, > 32, 49, 32, 45, 109, 118, 91, 45, 52, 93, 32, 45, 49, 32, 45, 97, > 91, 45, 52, 45, 45, 49, 93, 32, 121, 10, 45, 42, 42, 91, 45, 50, > 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 103, 109, 105, 99, > 107, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 111, 97, 100, > 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, > 32, 39, 71, 109, 105, 99, 107, 121, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 103, 109, 105, 99, 107, 121, 10, 103, 109, > 105, 99, 107, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 76, 111, 97, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, > 32, 39, 71, 109, 105, 99, 107, 121, 39, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, > 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, > 105, 109, 103, 47, 103, 109, 105, 99, 107, 121, 95, 108, 97, 114, 103, 101, > 46, 99, 105, 109, 103, 122, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 103, 109, 105, 99, 107, 121, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 103, 109, 105, 99, 107, 121, 95, 119, 105, 108, 98, 101, > 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 111, 97, 100, 32, > 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, > 104, 101, 32, 71, 39, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, 32, > 39, 71, 109, 105, 99, 107, 121, 39, 32, 116, 111, 103, 101, 116, 104, 101, > 114, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 32, 109, 97, 115, 99, > 111, 116, 32, 39, 87, 105, 108, 98, 101, 114, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 45, 103, 109, 105, 99, 107, 121, 95, > 119, 105, 108, 98, 101, 114, 10, 103, 109, 105, 99, 107, 121, 95, 119, 105, > 108, 98, 101, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 76, 111, 97, 100, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 116, 104, > 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, 109, 97, 115, 99, 111, 116, > 32, 39, 71, 109, 105, 99, 107, 121, 39, 32, 116, 111, 103, 101, 116, 104, > 101, 114, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 32, 109, 97, 115, > 99, 111, 116, 32, 39, 87, 105, 108, 98, 101, 114, 39, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, > 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, > 101, 116, 47, 105, 109, 103, 47, 103, 109, 105, 99, 107, 121, 95, 119, 105, > 108, 98, 101, 114, 95, 108, 97, 114, 103, 101, 46, 99, 105, 109, 103, 122, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 103, 109, 105, 99, 107, 121, > 95, 119, 105, 108, 98, 101, 114, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 101, 97, 114, 116, 32, 58, 32, 95, 119, 105, > 100, 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 104, > 101, 97, 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 104, 101, 97, 114, 116, 32, 44, 10, 104, 101, 97, 114, 116, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 49, > 50, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, > 62, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 36, 49, 120, 36, 50, 32, 104, 101, 97, 114, 116, 32, > 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 108, 91, 93, 10, 50, 48, 52, 56, 44, 49, 44, 49, > 44, 49, 44, 39, 116, 61, 50, 42, 112, 105, 42, 120, 47, 119, 59, 49, > 54, 42, 115, 105, 110, 40, 116, 41, 94, 51, 39, 10, 50, 48, 52, 56, > 44, 49, 44, 49, 44, 49, 44, 39, 116, 61, 50, 42, 112, 105, 42, 120, > 47, 119, 59, 49, 51, 42, 99, 111, 115, 40, 116, 41, 45, 53, 42, 99, > 111, 115, 40, 50, 42, 116, 41, 45, 50, 42, 99, 111, 115, 40, 51, 42, > 116, 41, 45, 99, 111, 115, 40, 52, 42, 116, 41, 39, 10, 45, 97, 32, > 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 112, 97, 114, 97, 109, > 101, 116, 114, 105, 99, 32, 36, 49, 44, 36, 50, 44, 49, 44, 48, 44, > 48, 44, 48, 10, 45, 102, 108, 111, 111, 100, 32, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 32, 45, 101, 113, > 91, 45, 49, 93, 32, 48, 10, 45, 110, 109, 32, 34, 91, 72, 101, 97, > 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 93, 34, > 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 105, 110, 112, 117, 116, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 110, 112, 117, 116, 32, 58, 32, 91, 116, 121, > 112, 101, 58, 93, 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 91, > 116, 121, 112, 101, 58, 93, 104, 116, 116, 112, 58, 47, 47, 85, 82, 76, > 32, 58, 32, 91, 115, 101, 108, 101, 99, 116, 105, 111, 110, 93, 120, 95, > 110, 98, 95, 99, 111, 112, 105, 101, 115, 62, 48, 32, 58, 32, 123, 32, > 119, 105, 100, 116, 104, 62, 48, 91, 37, 93, 32, 124, 32, 91, 105, 109, > 97, 103, 101, 95, 119, 93, 32, 125, 44, 123, 32, 95, 104, 101, 105, 103, > 104, 116, 62, 48, 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, > 95, 104, 93, 32, 125, 44, 123, 32, 95, 100, 101, 112, 116, 104, 62, 48, > 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 95, 100, 93, 32, > 125, 44, 123, 32, 95, 115, 112, 101, 99, 116, 114, 117, 109, 62, 48, 91, > 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 95, 115, 93, 32, 125, > 44, 95, 123, 32, 118, 97, 108, 117, 101, 49, 44, 95, 118, 97, 108, 117, > 101, 50, 44, 46, 46, 32, 124, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 32, 125, 32, 58, 32, 40, 118, 97, 108, 117, 101, 49, 123, 44, 124, > 59, 124, 47, 124, 94, 125, 118, 97, 108, 117, 101, 50, 123, 44, 124, 59, > 124, 47, 124, 94, 125, 46, 46, 41, 32, 58, 32, 48, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, > 114, 116, 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 116, > 97, 107, 101, 110, 32, 102, 114, 111, 109, 32, 97, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 111, 114, 32, 102, 114, 111, 109, 32, 97, 32, 99, > 111, 112, 121, 32, 111, 102, 32, 97, 110, 32, 101, 120, 105, 115, 116, 105, > 110, 103, 32, 105, 109, 97, 103, 101, 32, 91, 39, 105, 110, 100, 105, 99, > 101, 39, 93, 44, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, > 114, 32, 105, 110, 115, 101, 114, 116, 32, 110, 101, 119, 32, 105, 109, 97, > 103, 101, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 97, 110, 100, > 32, 118, 97, 108, 117, 101, 115, 46, 32, 83, 105, 110, 103, 108, 101, 32, > 113, 117, 111, 116, 101, 115, 32, 109, 97, 121, 32, 98, 101, 32, 111, 109, > 105, 116, 116, 101, 100, 32, 105, 110, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 46, 32, 83, 112, 101, > 99, 105, 102, 121, 105, 110, 103, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 39, 48, 39, 32, 105, 110, 115, 101, 114, 116, 115, 32, 97, 110, 32, > 39, 101, 109, 112, 116, 121, 39, 32, 105, 109, 97, 103, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 105, 39, 32, 124, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, > 99, 111, 112, 105, 101, 115, 61, 49, 39, 44, 32, 39, 104, 101, 105, 103, > 104, 116, 61, 100, 101, 112, 116, 104, 61, 115, 112, 101, 99, 116, 114, 117, > 109, 61, 49, 39, 32, 97, 110, 100, 32, 39, 118, 97, 108, 117, 101, 49, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 105, 110, 112, 117, 116, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 105, 32, 40, > 49, 44, 50, 44, 51, 59, 52, 44, 53, 44, 54, 59, 55, 44, 56, 44, > 57, 94, 57, 44, 56, 44, 55, 59, 54, 44, 53, 44, 52, 59, 51, 44, > 50, 44, 49, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 40, 49, 44, 50, 44, 51, > 59, 52, 44, 53, 44, 54, 59, 55, 44, 56, 44, 57, 41, 32, 40, 50, > 53, 53, 94, 49, 50, 56, 94, 54, 52, 41, 32, 52, 48, 48, 44, 52, > 48, 48, 44, 49, 44, 51, 44, 39, 105, 102, 40, 120, 62, 119, 47, 50, > 44, 120, 44, 121, 41, 42, 99, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 111, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 117, 116, > 112, 117, 116, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 111, 117, 116, 112, 117, 116, 32, 58, 32, 91, 116, 121, 112, > 101, 58, 93, 102, 105, 108, 101, 110, 97, 109, 101, 44, 95, 102, 111, 114, > 109, 97, 116, 95, 111, 112, 116, 105, 111, 110, 115, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, > 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 97, 115, 32, 111, 110, 101, 32, 111, 114, 32, 115, 101, 118, 101, > 114, 97, 108, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 102, 105, 108, > 101, 40, 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 102, 111, 114, 109, 97, 116, 95, 111, 112, > 116, 105, 111, 110, 115, 39, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, > 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 111, 117, 116, 112, 117, > 116, 95, 103, 103, 114, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 44, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 97, 109, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 115, 32, 71, 73, 77, 80, 32, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 102, 105, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 102, 32, 110, 111, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 110, 97, 109, 101, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 44, 32, 105, 116, 32, 105, 115, 32, 100, 101, 100, 117, 99, 101, 100, > 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 102, 105, 108, 101, 110, 97, > 109, 101, 46, 10, 111, 117, 116, 112, 117, 116, 95, 103, 103, 114, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, 125, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 79, 117, 116, 112, 117, 116, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 97, 115, 32, 71, 73, 77, 80, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 102, 105, 108, 101, 32, 39, 36, 49, > 39, 46, 34, 10, 45, 118, 32, 45, 32, 78, 61, 64, 35, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 78, 32, 45, 45, 108, 91, 36, 62, 93, > 32, 45, 114, 32, 49, 44, 123, 119, 42, 104, 42, 100, 125, 44, 49, 44, > 49, 48, 48, 37, 44, 45, 49, 32, 45, 116, 111, 95, 114, 103, 98, 97, > 32, 45, 47, 32, 50, 53, 53, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 34, 36, 50, 34, 41, 125, 32, 110, 97, 109, 101, 61, 34, 36, > 50, 34, 10, 45, 101, 108, 115, 101, 32, 45, 108, 91, 93, 32, 49, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 34, 36, 49, 34, 32, 40, 123, 39, > 64, 123, 45, 49, 44, 98, 125, 39, 125, 41, 32, 45, 102, 32, 34, 105, > 102, 40, 120, 61, 61, 48, 38, 38, 105, 62, 61, 34, 123, 39, 97, 39, > 125, 34, 38, 38, 105, 60, 61, 34, 123, 39, 122, 39, 125, 34, 44, 105, > 45, 34, 123, 39, 97, 39, 125, 34, 43, 34, 123, 39, 65, 39, 125, 34, > 44, 105, 41, 34, 32, 110, 97, 109, 101, 61, 64, 123, 45, 49, 44, 116, > 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 10, 45, 101, 110, 100, > 105, 102, 10, 40, 123, 39, 34, 71, 73, 77, 80, 32, 71, 114, 97, 100, > 105, 101, 110, 116, 92, 110, 78, 97, 109, 101, 58, 32, 34, 36, 110, 97, > 109, 101, 92, 110, 64, 123, 48, 44, 104, 125, 92, 110, 39, 125, 41, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 104, 125, 10, 115, > 116, 97, 114, 116, 61, 123, 95, 36, 62, 47, 64, 123, 48, 44, 104, 125, > 125, 10, 101, 110, 100, 61, 123, 95, 40, 36, 62, 43, 49, 41, 47, 64, > 123, 48, 44, 104, 125, 125, 10, 109, 105, 100, 61, 123, 95, 48, 46, 53, > 42, 40, 36, 115, 116, 97, 114, 116, 43, 36, 101, 110, 100, 41, 125, 10, > 114, 103, 98, 97, 61, 64, 123, 45, 97, 116, 91, 48, 93, 92, 32, 48, > 44, 36, 62, 125, 10, 114, 61, 123, 97, 114, 103, 40, 49, 44, 36, 114, > 103, 98, 97, 41, 125, 32, 103, 61, 123, 97, 114, 103, 40, 50, 44, 36, > 114, 103, 98, 97, 41, 125, 32, 98, 61, 123, 97, 114, 103, 40, 51, 44, > 36, 114, 103, 98, 97, 41, 125, 32, 97, 61, 123, 97, 114, 103, 40, 52, > 44, 36, 114, 103, 98, 97, 41, 125, 10, 40, 123, 39, 36, 115, 116, 97, > 114, 116, 34, 32, 34, 36, 109, 105, 100, 34, 32, 34, 36, 101, 110, 100, > 34, 32, 34, 36, 114, 34, 32, 34, 36, 103, 34, 32, 34, 36, 98, 34, > 32, 34, 36, 97, 34, 32, 34, 36, 114, 34, 32, 34, 36, 103, 34, 32, > 34, 36, 98, 34, 32, 34, 36, 97, 34, 32, 48, 32, 48, 92, 110, 34, > 39, 125, 41, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, > 32, 45, 97, 32, 120, 10, 45, 105, 102, 32, 123, 36, 78, 62, 49, 125, > 32, 45, 111, 32, 114, 97, 119, 58, 64, 123, 34, 45, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 92, 34, 36, 49, 92, 34, 44, 36, 62, 34, 125, > 44, 99, 104, 97, 114, 32, 45, 101, 108, 115, 101, 32, 45, 111, 32, 114, > 97, 119, 58, 34, 36, 49, 34, 44, 99, 104, 97, 114, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 111, 110, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 117, > 116, 112, 117, 116, 110, 39, 46, 10, 111, 110, 32, 58, 10, 45, 118, 32, > 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, > 45, 95, 111, 117, 116, 112, 117, 116, 110, 32, 36, 42, 10, 35, 64, 103, > 109, 105, 99, 32, 111, 117, 116, 112, 117, 116, 110, 32, 58, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 79, 117, 116, 112, 117, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 97, 117, 116, 111, 109, 97, > 116, 105, 99, 97, 108, 108, 121, 32, 110, 117, 109, 98, 101, 114, 101, 100, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 115, 32, 105, 110, 32, 114, 101, > 112, 101, 97, 116, 46, 46, 100, 111, 110, 101, 32, 108, 111, 111, 112, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 111, 110, 39, 41, 46, 10, 111, 117, 116, 112, 117, > 116, 110, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, > 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, > 95, 111, 117, 116, 112, 117, 116, 110, 32, 58, 10, 45, 118, 32, 45, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 102, 105, 108, 101, > 110, 97, 109, 101, 92, 32, 34, 36, 49, 34, 44, 64, 123, 62, 125, 125, > 32, 45, 118, 32, 43, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, > 115, 34, 32, 97, 115, 32, 102, 105, 108, 101, 32, 39, 34, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 34, 39, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 111, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 112, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 111, 117, 116, 112, 117, 116, 112, 39, 46, > 10, 111, 112, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 111, 117, 116, 112, 117, > 116, 112, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 111, 117, 116, > 112, 117, 116, 112, 32, 58, 32, 112, 114, 101, 102, 105, 120, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, > 32, 112, 114, 101, 102, 105, 120, 101, 100, 32, 118, 101, 114, 115, 105, 111, > 110, 115, 32, 111, 102, 32, 116, 104, 101, 105, 114, 32, 111, 114, 105, 103, > 105, 110, 97, 108, 32, 102, 105, 108, 101, 110, 97, 109, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 111, 112, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 112, 114, 101, 102, 105, 120, 61, 95, 39, 46, 10, 111, 117, 116, > 112, 117, 116, 112, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, > 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, > 42, 10, 95, 111, 117, 116, 112, 117, 116, 112, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 34, 95, 34, 125, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, > 34, 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, 34, 36, 95, > 95, 115, 34, 32, 97, 115, 32, 116, 104, 101, 105, 114, 32, 105, 110, 105, > 116, 105, 97, 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 44, 32, > 112, 114, 101, 102, 105, 120, 101, 100, 32, 98, 121, 32, 39, 36, 49, 39, > 46, 34, 10, 45, 101, 108, 115, 101, 32, 45, 101, 91, 48, 45, 45, 52, > 93, 32, 34, 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, 34, > 36, 95, 95, 115, 34, 32, 97, 115, 32, 105, 116, 115, 32, 105, 110, 105, > 116, 105, 97, 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 44, 32, 112, > 114, 101, 102, 105, 120, 101, 100, 32, 98, 121, 32, 39, 36, 49, 39, 46, > 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 111, 91, 36, 62, 93, 32, > 64, 123, 36, 62, 44, 102, 125, 36, 49, 64, 123, 36, 62, 44, 98, 125, > 46, 64, 123, 36, 62, 44, 120, 125, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 119, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, 117, 116, 112, 117, 116, 119, > 39, 46, 10, 111, 119, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 111, 117, 116, > 112, 117, 116, 119, 10, 35, 64, 103, 109, 105, 99, 32, 111, 117, 116, 112, > 117, 116, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 117, 116, > 112, 117, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 111, 118, 101, 114, 119, 114, 105, 116, 116, > 105, 110, 103, 32, 116, 104, 101, 105, 114, 32, 111, 114, 105, 103, 105, 110, > 97, 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 111, 119, 39, 41, 46, 10, 111, 117, 116, 112, 117, 116, 119, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 111, 117, 116, 112, > 117, 116, 119, 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, > 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, 79, 117, 116, 112, 117, > 116, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 97, 115, > 32, 116, 104, 101, 105, 114, 32, 105, 110, 105, 116, 105, 97, 108, 32, 108, > 111, 99, 97, 116, 105, 111, 110, 46, 34, 10, 45, 101, 108, 115, 101, 32, > 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, 79, 117, 116, 112, 117, 116, > 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 97, 115, 32, > 105, 116, 115, 32, 105, 110, 105, 116, 105, 97, 108, 32, 108, 111, 99, 97, > 116, 105, 111, 110, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 111, > 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, 110, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, > 108, 111, 116, 32, 58, 32, 95, 112, 108, 111, 116, 95, 116, 121, 112, 101, > 44, 95, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 44, 95, 120, > 109, 105, 110, 44, 95, 120, 109, 97, 120, 44, 95, 121, 109, 105, 110, 44, > 95, 121, 109, 97, 120, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 61, 48, > 44, 95, 112, 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, 101, 114, > 116, 101, 120, 95, 116, 121, 112, 101, 44, 95, 120, 109, 105, 110, 44, 120, > 109, 97, 120, 44, 95, 121, 109, 105, 110, 44, 95, 121, 109, 97, 120, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 105, 115, 112, 108, 97, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 32, 111, 114, 32, 102, 111, 114, 109, 117, 108, 97, > 32, 105, 110, 32, 97, 110, 32, 105, 110, 116, 101, 114, 97, 99, 116, 105, > 118, 101, 32, 118, 105, 101, 119, 101, 114, 32, 40, 117, 115, 101, 32, 116, > 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, > 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, 101, 110, 101, 100, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 108, 111, 116, > 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 108, 105, 110, 101, 115, > 32, 124, 32, 50, 61, 115, 112, 108, 105, 110, 101, 115, 32, 124, 32, 51, > 61, 98, 97, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, > 32, 49, 61, 112, 111, 105, 110, 116, 115, 32, 124, 32, 50, 44, 51, 61, > 99, 114, 111, 115, 115, 101, 115, 32, 124, 32, 52, 44, 53, 61, 99, 105, > 114, 99, 108, 101, 115, 32, 124, 32, 54, 44, 55, 61, 115, 113, 117, 97, > 114, 101, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 120, 109, 105, 110, 39, 44, 39, 120, 109, 97, 120, 39, 44, 39, 121, > 109, 105, 110, 39, 44, 39, 121, 109, 97, 120, 39, 32, 115, 101, 116, 32, > 116, 104, 101, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 32, > 111, 102, 32, 116, 104, 101, 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, > 32, 120, 121, 45, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, 101, 61, 49, 39, > 44, 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 61, 49, > 39, 32, 97, 110, 100, 32, 39, 120, 109, 105, 110, 61, 120, 109, 97, 120, > 61, 121, 109, 105, 110, 61, 121, 109, 97, 120, 61, 48, 32, 40, 97, 117, > 116, 111, 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 112, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 112, 114, 105, 110, 116, 39, > 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 112, > 114, 105, 110, 116, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 79, 117, 116, 112, 117, 116, 32, 105, 110, 102, 111, 114, > 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 111, 110, 32, 116, 104, > 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 101, 114, 114, 111, 114, > 32, 40, 115, 116, 100, 101, 114, 114, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 112, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 114, 97, 105, 110, 98, 111, > 119, 95, 108, 117, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 112, 117, 116, 32, 97, 32, 50, 53, 54, 45, 101, 110, 116, 114, 105, > 101, 115, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, > 111, 102, 32, 114, 97, 105, 110, 98, 111, 119, 32, 99, 111, 108, 111, 114, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 97, 105, 110, 98, 111, 119, > 95, 108, 117, 116, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 91, 45, 50, 93, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 10, 114, 97, 105, 110, 98, 111, 119, 95, 108, 117, 116, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 111, 102, 32, > 50, 53, 54, 32, 114, 97, 105, 110, 98, 111, 119, 32, 99, 111, 108, 111, > 114, 115, 46, 34, 10, 45, 118, 32, 45, 10, 40, 50, 44, 49, 48, 44, > 49, 51, 44, 49, 51, 44, 49, 53, 44, 49, 54, 44, 49, 53, 44, 49, > 53, 44, 49, 56, 44, 50, 51, 44, 50, 54, 44, 51, 49, 44, 51, 51, > 44, 51, 55, 44, 51, 56, 44, 51, 57, 44, 52, 50, 44, 52, 50, 44, > 52, 52, 44, 52, 53, 44, 52, 52, 44, 52, 52, 44, 52, 53, 44, 52, > 53, 44, 52, 52, 44, 52, 50, 44, 52, 52, 44, 52, 53, 44, 52, 53, > 44, 52, 57, 44, 53, 48, 44, 53, 50, 44, 53, 52, 44, 53, 53, 44, > 53, 54, 44, 53, 55, 44, 92, 10, 53, 54, 44, 53, 54, 44, 53, 55, > 44, 53, 55, 44, 53, 56, 44, 53, 55, 44, 53, 56, 44, 53, 56, 44, > 53, 57, 44, 53, 56, 44, 54, 48, 44, 53, 57, 44, 53, 56, 44, 53, > 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 54, 48, > 44, 54, 48, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, > 54, 48, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, 57, 44, 53, > 57, 44, 53, 57, 44, 53, 57, 44, 53, 56, 44, 53, 56, 44, 53, 56, > 44, 53, 54, 44, 92, 10, 53, 54, 44, 53, 52, 44, 53, 49, 44, 52, > 56, 44, 52, 52, 44, 51, 57, 44, 51, 51, 44, 50, 48, 44, 53, 44, > 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 92, 10, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 53, 44, 50, 53, > 44, 53, 48, 44, 54, 54, 44, 56, 49, 44, 57, 48, 44, 49, 48, 50, > 44, 49, 48, 57, 44, 49, 49, 56, 44, 49, 50, 57, 44, 49, 51, 55, > 44, 49, 52, 52, 44, 49, 53, 50, 44, 49, 53, 56, 44, 49, 54, 56, > 44, 49, 55, 56, 44, 49, 56, 51, 44, 49, 57, 48, 44, 49, 57, 57, > 44, 50, 48, 55, 44, 92, 10, 50, 49, 51, 44, 50, 50, 48, 44, 50, > 50, 55, 44, 50, 51, 48, 44, 50, 51, 54, 44, 50, 52, 50, 44, 50, > 52, 54, 44, 50, 53, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 51, 44, 50, 53, 51, 44, 50, 53, 51, 44, 50, 53, 50, 44, 50, > 53, 49, 44, 50, 53, 48, 44, 50, 53, 48, 44, 50, 52, 57, 44, 50, > 52, 56, 44, 50, 52, 56, 44, 50, 52, 55, 44, 50, 52, 56, 44, 50, > 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 53, 44, 50, > 52, 54, 44, 92, 10, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, > 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, 44, 50, 52, 54, > 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 50, 52, 53, 44, 50, 52, 52, 44, 50, 52, 53, 44, 50, 52, 52, > 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, 44, 50, 52, 53, > 44, 92, 10, 50, 52, 53, 44, 50, 52, 52, 44, 50, 52, 52, 44, 50, > 52, 53, 44, 50, 52, 53, 44, 50, 52, 51, 44, 50, 51, 57, 44, 50, > 51, 53, 44, 50, 51, 48, 44, 50, 50, 54, 44, 50, 50, 48, 44, 50, > 49, 54, 44, 50, 49, 49, 44, 50, 48, 52, 44, 50, 48, 49, 44, 49, > 57, 52, 44, 49, 57, 48, 44, 49, 56, 52, 44, 49, 55, 54, 44, 49, > 55, 49, 44, 49, 54, 52, 44, 49, 54, 48, 44, 49, 53, 50, 44, 49, > 52, 52, 44, 49, 51, 56, 44, 49, 51, 48, 44, 49, 50, 50, 44, 92, > 10, 49, 49, 52, 44, 49, 48, 55, 44, 57, 54, 44, 56, 55, 44, 55, > 56, 44, 54, 57, 44, 53, 55, 44, 53, 48, 44, 52, 54, 44, 51, 56, > 44, 51, 49, 44, 49, 57, 44, 53, 94, 51, 44, 49, 48, 44, 49, 52, > 44, 49, 53, 44, 49, 55, 44, 49, 56, 44, 49, 57, 44, 49, 56, 44, > 49, 57, 44, 50, 51, 44, 50, 53, 44, 51, 48, 44, 51, 49, 44, 51, > 53, 44, 51, 55, 44, 51, 57, 44, 52, 50, 44, 52, 52, 44, 52, 53, > 44, 52, 56, 44, 52, 57, 44, 53, 48, 44, 53, 49, 44, 92, 10, 53, > 50, 44, 53, 51, 44, 53, 54, 44, 53, 57, 44, 54, 51, 44, 54, 54, > 44, 54, 54, 44, 54, 56, 44, 54, 57, 44, 55, 49, 44, 55, 51, 44, > 55, 52, 44, 55, 53, 44, 55, 54, 44, 55, 54, 44, 55, 55, 44, 55, > 56, 44, 55, 57, 44, 55, 57, 44, 56, 48, 44, 56, 49, 44, 56, 49, > 44, 56, 50, 44, 56, 50, 44, 56, 51, 44, 56, 52, 44, 56, 52, 44, > 56, 52, 44, 56, 52, 44, 56, 52, 44, 56, 53, 44, 56, 53, 44, 56, > 54, 44, 56, 54, 44, 56, 54, 44, 56, 54, 44, 92, 10, 56, 55, 44, > 56, 56, 44, 56, 55, 44, 56, 54, 44, 56, 54, 44, 56, 54, 44, 56, > 54, 44, 56, 56, 44, 56, 57, 44, 56, 57, 44, 57, 48, 44, 57, 50, > 44, 57, 50, 44, 57, 52, 44, 57, 54, 44, 57, 57, 44, 49, 48, 50, > 44, 49, 48, 52, 44, 49, 48, 55, 44, 49, 49, 49, 44, 49, 49, 55, > 44, 49, 50, 48, 44, 49, 50, 54, 44, 49, 51, 48, 44, 49, 51, 54, > 44, 49, 52, 50, 44, 49, 52, 57, 44, 49, 53, 53, 44, 49, 54, 49, > 44, 49, 54, 55, 44, 49, 55, 50, 44, 92, 10, 49, 55, 54, 44, 49, > 55, 56, 44, 49, 55, 57, 44, 49, 55, 57, 44, 49, 55, 56, 44, 49, > 55, 56, 44, 49, 55, 56, 44, 49, 55, 56, 44, 49, 55, 55, 44, 49, > 55, 55, 44, 49, 55, 55, 44, 49, 55, 54, 44, 49, 55, 54, 44, 49, > 55, 54, 44, 49, 55, 54, 44, 49, 55, 53, 44, 49, 55, 51, 44, 49, > 55, 51, 44, 49, 55, 52, 44, 49, 55, 51, 44, 49, 55, 50, 44, 49, > 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, > 55, 49, 44, 49, 55, 49, 44, 92, 10, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 49, > 44, 49, 55, 49, 44, 49, 55, 49, 44, 49, 55, 51, 44, 49, 55, 51, > 44, 49, 55, 51, 44, 49, 55, 53, 44, 49, 55, 54, 44, 49, 55, 56, > 44, 49, 55, 56, 44, 49, 55, 56, 44, 49, 56, 49, 44, 49, 56, 50, > 44, 49, 56, 52, 44, 92, 10, 49, 56, 54, 44, 49, 56, 54, 44, 49, > 57, 48, 44, 49, 57, 50, 44, 49, 57, 51, 44, 49, 57, 53, 44, 49, > 57, 56, 44, 50, 48, 48, 44, 50, 48, 49, 44, 50, 48, 52, 44, 50, > 48, 54, 44, 50, 48, 57, 44, 50, 49, 49, 44, 50, 48, 56, 44, 50, > 48, 54, 44, 50, 48, 50, 44, 49, 57, 55, 44, 49, 57, 52, 44, 49, > 57, 48, 44, 49, 56, 53, 44, 49, 56, 50, 44, 49, 55, 56, 44, 49, > 55, 50, 44, 49, 54, 55, 44, 49, 54, 50, 44, 49, 53, 55, 44, 49, > 53, 50, 44, 92, 10, 49, 52, 52, 44, 49, 51, 57, 44, 49, 51, 50, > 44, 49, 50, 55, 44, 49, 50, 49, 44, 49, 49, 53, 44, 49, 48, 56, > 44, 49, 48, 50, 44, 57, 56, 44, 57, 50, 44, 56, 55, 44, 55, 57, > 44, 55, 53, 44, 54, 57, 44, 54, 52, 44, 54, 50, 44, 53, 56, 44, > 53, 53, 44, 53, 50, 44, 53, 48, 44, 52, 57, 44, 52, 55, 44, 52, > 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, > 44, 52, 55, 44, 52, 54, 44, 52, 54, 44, 52, 54, 44, 52, 54, 44, > 92, 10, 52, 53, 44, 52, 52, 44, 52, 52, 44, 52, 50, 44, 52, 50, > 44, 52, 49, 44, 52, 49, 44, 52, 48, 44, 51, 57, 44, 51, 56, 44, > 51, 55, 44, 51, 54, 44, 51, 52, 44, 51, 49, 44, 51, 48, 44, 50, > 57, 44, 51, 48, 44, 51, 48, 44, 51, 49, 44, 51, 50, 44, 51, 50, > 44, 51, 50, 44, 51, 51, 44, 51, 51, 44, 51, 52, 44, 51, 52, 44, > 51, 51, 44, 51, 52, 44, 51, 51, 44, 51, 50, 44, 51, 49, 44, 51, > 49, 44, 51, 48, 44, 50, 57, 44, 50, 54, 44, 50, 53, 44, 92, 10, > 50, 51, 44, 50, 49, 44, 49, 57, 44, 49, 53, 44, 49, 51, 44, 49, > 51, 44, 49, 54, 44, 49, 56, 44, 49, 56, 44, 49, 56, 44, 49, 55, > 44, 49, 53, 44, 49, 51, 44, 49, 50, 44, 57, 44, 50, 94, 54, 44, > 49, 57, 44, 50, 53, 44, 51, 50, 44, 52, 49, 44, 52, 57, 44, 53, > 53, 44, 54, 53, 44, 55, 49, 44, 55, 57, 44, 56, 52, 44, 57, 48, > 44, 57, 54, 44, 49, 48, 50, 44, 49, 48, 54, 44, 49, 49, 49, 44, > 49, 49, 55, 44, 49, 50, 49, 44, 49, 50, 56, 44, 92, 10, 49, 51, > 50, 44, 49, 51, 52, 44, 49, 51, 57, 44, 49, 52, 51, 44, 49, 52, > 54, 44, 49, 52, 57, 44, 49, 53, 50, 44, 49, 53, 53, 44, 49, 53, > 54, 44, 49, 53, 55, 44, 49, 53, 57, 44, 49, 53, 57, 44, 49, 54, > 48, 44, 49, 54, 49, 44, 49, 54, 50, 44, 49, 54, 51, 44, 49, 54, > 52, 44, 49, 54, 52, 44, 49, 54, 53, 44, 49, 54, 54, 44, 49, 54, > 55, 44, 49, 54, 54, 44, 49, 54, 53, 44, 49, 54, 54, 44, 49, 54, > 54, 44, 49, 54, 55, 44, 49, 54, 55, 44, 92, 10, 49, 54, 56, 44, > 49, 54, 56, 44, 49, 54, 56, 44, 49, 54, 57, 44, 49, 54, 57, 44, > 49, 54, 57, 44, 49, 54, 57, 44, 49, 55, 48, 44, 49, 55, 48, 44, > 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 48, 44, > 49, 55, 48, 44, 49, 55, 49, 44, 49, 55, 48, 44, 49, 55, 48, 44, > 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 48, 44, 49, 55, 49, 44, > 49, 55, 49, 44, 49, 55, 50, 44, 49, 55, 51, 44, 49, 55, 51, 44, > 49, 55, 51, 44, 49, 55, 53, 44, 92, 10, 49, 55, 55, 44, 49, 55, > 57, 44, 49, 56, 48, 44, 49, 56, 51, 44, 49, 56, 53, 44, 49, 56, > 55, 44, 49, 57, 48, 44, 49, 57, 51, 44, 49, 57, 56, 44, 50, 48, > 49, 44, 50, 48, 54, 44, 50, 49, 51, 44, 50, 49, 57, 44, 50, 50, > 53, 44, 50, 50, 55, 44, 50, 50, 55, 44, 50, 50, 51, 44, 50, 49, > 56, 44, 50, 49, 52, 44, 50, 48, 52, 44, 49, 57, 57, 44, 49, 57, > 50, 44, 49, 56, 52, 44, 49, 55, 57, 44, 49, 55, 50, 44, 49, 54, > 56, 44, 49, 54, 50, 44, 92, 10, 49, 53, 54, 44, 49, 53, 49, 44, > 49, 52, 53, 44, 49, 51, 57, 44, 49, 51, 51, 44, 49, 50, 54, 44, > 49, 50, 48, 44, 49, 49, 51, 44, 49, 48, 54, 44, 57, 56, 44, 57, > 48, 44, 56, 53, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, > 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, > 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, 50, 44, 56, > 50, 44, 56, 50, 44, 56, 52, 44, 56, 52, 44, 56, 50, 44, 56, 50, > 44, 56, 50, 44, 92, 10, 56, 50, 44, 56, 50, 44, 56, 51, 44, 56, > 51, 44, 56, 49, 44, 56, 49, 44, 56, 49, 44, 56, 48, 44, 56, 48, > 44, 55, 56, 44, 55, 56, 44, 55, 56, 44, 55, 54, 44, 55, 52, 44, > 55, 51, 44, 55, 51, 44, 55, 49, 44, 55, 50, 44, 54, 57, 44, 54, > 56, 44, 54, 55, 44, 54, 53, 44, 54, 50, 44, 53, 57, 44, 53, 56, > 44, 53, 54, 44, 53, 49, 44, 53, 48, 44, 52, 57, 44, 52, 53, 44, > 52, 51, 44, 52, 48, 44, 51, 56, 44, 51, 55, 44, 51, 53, 44, 51, > 50, 44, 92, 10, 51, 49, 44, 51, 50, 44, 51, 50, 44, 51, 51, 44, > 51, 51, 44, 51, 52, 44, 51, 52, 44, 51, 53, 44, 51, 54, 44, 51, > 54, 44, 51, 55, 44, 51, 56, 44, 51, 57, 44, 52, 50, 44, 52, 52, > 44, 52, 53, 44, 52, 54, 44, 52, 54, 44, 52, 55, 44, 52, 56, 44, > 52, 57, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, > 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, 44, 52, 56, > 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 55, 44, 52, 54, 44, > 92, 10, 52, 53, 44, 52, 53, 44, 52, 51, 44, 52, 51, 44, 52, 50, > 44, 52, 49, 44, 52, 48, 44, 51, 57, 44, 51, 56, 44, 51, 55, 44, > 51, 56, 44, 51, 56, 44, 51, 55, 44, 51, 55, 44, 51, 56, 44, 51, > 56, 44, 51, 56, 44, 51, 56, 44, 51, 57, 44, 52, 48, 44, 51, 57, > 44, 52, 48, 44, 51, 57, 44, 52, 48, 44, 52, 48, 44, 51, 57, 44, > 51, 57, 44, 51, 56, 44, 51, 56, 44, 51, 55, 44, 51, 53, 44, 51, > 52, 44, 51, 50, 44, 51, 48, 44, 50, 56, 44, 50, 54, 44, 92, 10, > 50, 51, 44, 50, 48, 44, 49, 54, 44, 49, 52, 44, 49, 50, 44, 49, > 54, 44, 49, 54, 44, 49, 56, 44, 49, 56, 44, 49, 55, 44, 49, 54, > 44, 49, 52, 44, 49, 51, 44, 57, 44, 50, 41, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 91, 114, 97, 105, 110, 98, 111, 119, 92, 32, 108, 117, > 116, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 111, 100, 100, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 111, > 97, 100, 32, 97, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 82, 111, 100, 105, > 108, 105, 117, 115, 32, 109, 97, 115, 99, 111, 116, 32, 39, 82, 111, 100, > 100, 121, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 114, 111, 100, 100, 121, 10, 114, 111, 100, 100, 121, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 76, 111, 97, 100, 32, 105, 109, 97, > 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 82, 111, 100, 105, 108, 105, 117, 115, 32, 109, 97, 115, 99, 111, > 116, 32, 39, 82, 111, 100, 100, 121, 39, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, > 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, > 105, 109, 103, 47, 114, 111, 100, 100, 121, 95, 108, 97, 114, 103, 101, 46, > 99, 105, 109, 103, 122, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 114, > 111, 100, 100, 121, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 101, 109, 111, 118, 101, 95, 100, 117, 112, 108, 105, 99, 97, > 116, 101, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 109, > 111, 118, 101, 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 115, 32, 105, > 109, 97, 103, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 108, 105, 115, > 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, > 44, 50, 44, 51, 44, 52, 44, 50, 44, 52, 44, 51, 44, 49, 44, 51, > 44, 52, 44, 50, 44, 49, 41, 32, 45, 115, 112, 108, 105, 116, 32, 120, > 32, 45, 114, 101, 109, 111, 118, 101, 95, 100, 117, 112, 108, 105, 99, 97, > 116, 101, 115, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 114, 101, > 109, 111, 118, 101, 95, 100, 117, 112, 108, 105, 99, 97, 116, 101, 115, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, > 101, 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 115, 32, 105, 109, 97, > 103, 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 98, 97, 115, 101, 61, 36, 62, 32, 111, 102, 102, 61, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 36, 62, 45, 49, > 125, 10, 99, 111, 109, 112, 61, 123, 36, 98, 97, 115, 101, 43, 49, 43, > 36, 62, 45, 36, 111, 102, 102, 125, 10, 45, 105, 102, 32, 123, 36, 99, > 111, 109, 112, 62, 61, 64, 35, 125, 32, 45, 98, 114, 101, 97, 107, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 45, 45, 91, 36, 98, 97, 115, 101, > 44, 36, 99, 111, 109, 112, 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, > 32, 105, 115, 95, 100, 117, 112, 108, 105, 99, 97, 116, 101, 61, 123, 33, > 64, 123, 45, 49, 44, 43, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 36, 105, 115, 95, 100, 117, 112, 108, 105, 99, 97, > 116, 101, 32, 45, 114, 109, 91, 36, 99, 111, 109, 112, 93, 32, 111, 102, > 102, 61, 123, 36, 111, 102, 102, 43, 49, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 109, 111, 118, 101, > 95, 101, 109, 112, 116, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 109, 111, 118, 101, 32, 101, 109, 112, 116, 121, 32, 105, 109, 97, > 103, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 108, 105, 115, 116, 46, 10, > 114, 101, 109, 111, 118, 101, 95, 101, 109, 112, 116, 121, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, 101, > 109, 112, 116, 121, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 108, 105, 115, 116, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 33, > 64, 123, 36, 60, 44, 119, 104, 100, 115, 125, 125, 32, 45, 114, 109, 91, > 36, 60, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 108, > 101, 99, 116, 32, 58, 32, 102, 101, 97, 116, 117, 114, 101, 95, 116, 121, > 112, 101, 44, 95, 88, 44, 95, 89, 44, 95, 90, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 108, 121, 32, 115, 101, 108, 101, 99, 116, 32, > 97, 32, 102, 101, 97, 116, 117, 114, 101, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, > 117, 115, 101, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, > 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 102, 101, 97, 116, 117, 114, 101, 95, 116, 121, 112, 101, 39, 32, 99, > 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 112, 111, 105, 110, 116, 32, > 124, 32, 49, 61, 115, 101, 103, 109, 101, 110, 116, 32, 124, 32, 50, 61, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 124, 32, 51, 61, 101, 108, > 108, 105, 112, 115, 101, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 114, 103, 117, 109, 101, 110, 116, 115, 32, 39, 88, 39, 44, > 39, 89, 39, 44, 39, 90, 39, 32, 100, 101, 116, 101, 114, 109, 105, 110, > 101, 32, 116, 104, 101, 32, 105, 110, 105, 116, 105, 97, 108, 32, 115, 101, > 108, 101, 99, 116, 105, 111, 110, 32, 118, 105, 101, 119, 44, 32, 102, 111, > 114, 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 84, 104, 101, 32, 114, 101, 116, 114, 105, 101, 118, 101, 100, 32, 102, > 101, 97, 116, 117, 114, 101, 32, 105, 115, 32, 114, 101, 116, 117, 114, 110, > 101, 100, 32, 97, 115, 32, 97, 32, 51, 100, 32, 111, 114, 32, 54, 100, > 32, 118, 101, 99, 116, 111, 114, 32, 99, 111, 110, 116, 97, 105, 110, 105, > 110, 103, 32, 116, 104, 101, 32, 102, 101, 97, 116, 117, 114, 101, 32, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 104, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 115, 104, 97, 114, 101, 100, 39, 46, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 104, 97, 114, 101, 100, 32, 58, 32, > 120, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, 44, 121, 91, 37, 93, > 44, 122, 91, 37, 93, 44, 118, 91, 37, 93, 32, 58, 32, 121, 48, 91, > 37, 93, 44, 121, 49, 91, 37, 93, 44, 122, 91, 37, 93, 44, 118, 91, > 37, 93, 32, 58, 32, 122, 48, 91, 37, 93, 44, 122, 49, 91, 37, 93, > 44, 118, 91, 37, 93, 32, 58, 32, 118, 48, 91, 37, 93, 44, 118, 49, > 91, 37, 93, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 115, 101, 114, 116, 32, 115, 104, 97, 114, 101, 100, 32, 98, 117, 102, > 102, 101, 114, 115, 32, 102, 114, 111, 109, 32, 40, 111, 112, 116, 46, 32, > 112, 111, 105, 110, 116, 115, 47, 114, 111, 119, 115, 47, 112, 108, 97, 110, > 101, 115, 47, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 41, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 97, 114, 101, 100, > 32, 98, 117, 102, 102, 101, 114, 115, 32, 99, 97, 110, 110, 111, 116, 32, > 98, 101, 32, 114, 101, 116, 117, 114, 110, 101, 100, 32, 98, 121, 32, 97, > 32, 99, 111, 109, 109, 97, 110, 100, 44, 32, 110, 111, 114, 32, 97, 32, > 108, 111, 99, 97, 108, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, > 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 115, 104, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 115, 104, 97, 114, 101, 100, 32, 49, 44, 49, 32, 45, 98, 108, > 117, 114, 91, 45, 49, 93, 32, 51, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 115, 125, 32, 45, 115, 104, 97, 114, 101, 100, 32, 50, 53, > 37, 44, 55, 53, 37, 44, 48, 44, 36, 62, 32, 45, 109, 105, 114, 114, > 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 114, 97, 110, 100, 32, 58, 32, 118, 97, 108, 117, 101, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 114, > 97, 110, 100, 111, 109, 32, 103, 101, 110, 101, 114, 97, 116, 111, 114, 32, > 115, 101, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 110, 111, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 105, 115, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 97, 32, 114, 97, > 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 117, 115, > 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 114, 97, 110, 100, 111, 109, > 32, 103, 101, 110, 101, 114, 97, 116, 111, 114, 32, 115, 101, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, 48, 44, 95, > 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 115, 112, 101, 99, 116, 114, > 117, 109, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 97, 32, 50, 100, 32, 115, 121, 110, 116, 104, 101, 116, > 105, 99, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, 53, 49, 50, 39, 44, 32, > 39, 104, 101, 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 32, 97, > 110, 100, 32, 39, 115, 112, 101, 99, 116, 114, 117, 109, 61, 51, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 53, 49, 50, 10, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 51, 61, 51, 125, 62, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 73, 110, 112, 117, 116, 32, 50, 100, 32, 115, 121, 110, 116, 104, 101, > 116, 105, 99, 32, 105, 109, 97, 103, 101, 32, 111, 102, 32, 115, 105, 122, > 101, 32, 36, 49, 120, 36, 50, 120, 36, 51, 46, 34, 10, 45, 118, 32, > 45, 10, 68, 109, 97, 120, 50, 61, 123, 48, 46, 49, 53, 42, 109, 105, > 110, 40, 36, 49, 44, 36, 50, 41, 94, 50, 125, 10, 36, 49, 44, 36, > 50, 44, 49, 44, 36, 51, 44, 39, 88, 61, 120, 45, 119, 47, 50, 59, > 89, 61, 121, 45, 104, 47, 50, 59, 97, 61, 97, 116, 97, 110, 50, 40, > 89, 44, 88, 41, 59, 105, 102, 40, 88, 94, 50, 43, 89, 94, 50, 60, > 61, 36, 68, 109, 97, 120, 50, 44, 50, 53, 53, 42, 97, 98, 115, 40, > 99, 111, 115, 40, 99, 43, 50, 48, 48, 42, 40, 120, 47, 119, 45, 48, > 46, 53, 41, 42, 40, 121, 47, 104, 45, 48, 46, 53, 41, 41, 41, 44, > 56, 53, 48, 42, 40, 97, 37, 40, 48, 46, 49, 42, 40, 99, 43, 49, > 41, 41, 41, 41, 39, 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, > 49, 93, 32, 52, 44, 50, 48, 37, 44, 50, 48, 37, 44, 54, 48, 37, > 44, 50, 48, 37, 44, 55, 48, 37, 44, 55, 48, 37, 44, 51, 53, 37, > 44, 52, 53, 37, 44, 48, 46, 57, 44, 48, 44, 50, 53, 53, 44, 48, > 10, 45, 116, 111, 114, 117, 115, 51, 100, 32, 123, 36, 49, 47, 55, 125, > 44, 123, 36, 49, 47, 50, 48, 125, 32, 45, 114, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 49, 44, 49, 44, 56, 48, 32, 45, 99, 111, 108, 51, > 100, 91, 45, 49, 93, 32, 49, 50, 56, 44, 50, 48, 48, 44, 50, 53, > 53, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 51, 48, 37, 44, 55, 48, 37, 44, 48, 44, 49, > 44, 53, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 34, 91, 50, 100, 32, 116, 101, 115, 116, 32, 105, 109, > 97, 103, 101, 93, 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 101, 120, 116, 50, 105, 109, 103, 32, 58, 32, 116, 101, 120, > 116, 44, 95, 108, 105, 110, 101, 95, 115, 101, 112, 97, 114, 97, 116, 111, > 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 97, 32, 50, 100, 32, 105, 109, 97, 103, 101, 32, 119, 104, 111, 115, > 101, 32, 118, 97, 108, 117, 101, 115, 32, 97, 114, 101, 32, 65, 83, 67, > 73, 73, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 32, 111, 102, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 110, 112, 117, 116, > 32, 116, 101, 120, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 108, 105, 110, 101, 95, 115, 101, 112, 97, 114, 97, 116, 111, 114, 61, 32, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 101, 120, 116, 50, 105, 109, 103, 32, 34, 84, 104, 101, 114, 101, 32, 97, > 114, 101, 32, 52, 32, 119, 111, 114, 100, 115, 34, 10, 116, 101, 120, 116, > 50, 105, 109, 103, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, > 50, 61, 32, 125, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, > 110, 112, 117, 116, 32, 105, 109, 97, 103, 101, 32, 102, 114, 111, 109, 32, > 116, 101, 120, 116, 32, 92, 34, 36, 49, 92, 34, 44, 32, 119, 105, 116, > 104, 32, 108, 105, 110, 101, 32, 115, 101, 112, 97, 114, 97, 116, 111, 114, > 32, 39, 36, 50, 39, 46, 34, 10, 45, 118, 32, 45, 32, 40, 123, 39, > 34, 36, 49, 34, 39, 125, 41, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 32, 45, 44, 123, 39, 34, 36, 50, 34, 39, 125, 32, 45, 121, 32, > 120, 32, 45, 97, 32, 121, 32, 45, 110, 109, 32, 34, 91, 92, 34, 36, > 49, 92, 34, 93, 34, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 121, 112, 101, 32, 58, 32, 100, > 97, 116, 97, 116, 121, 112, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 112, 105, 120, 101, 108, > 32, 100, 97, 116, 97, 116, 121, 112, 101, 32, 102, 111, 114, 32, 97, 108, > 108, 32, 105, 109, 97, 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 105, 115, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 100, 97, 116, 97, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 123, 32, 98, 111, 111, 108, 32, 124, 32, 117, 99, 104, 97, 114, 32, > 124, 32, 99, 104, 97, 114, 32, 124, 32, 117, 115, 104, 111, 114, 116, 32, > 124, 32, 115, 104, 111, 114, 116, 32, 124, 32, 117, 105, 110, 116, 32, 124, > 32, 105, 110, 116, 32, 124, 32, 102, 108, 111, 97, 116, 32, 124, 32, 100, > 111, 117, 98, 108, 101, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 112, 101, 110, 100, 105, 110, 103, 32, 111, 110, 32, 104, > 111, 119, 32, 121, 111, 117, 114, 32, 71, 39, 77, 73, 67, 32, 118, 101, > 114, 115, 105, 111, 110, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 99, > 111, 109, 112, 105, 108, 101, 100, 44, 32, 115, 111, 109, 101, 32, 100, 97, > 116, 97, 116, 121, 112, 101, 115, 32, 109, 97, 121, 32, 98, 101, 32, 117, > 110, 97, 118, 97, 105, 108, 97, 98, 108, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 116, 121, 112, 105, 99, 97, 108, 108, 121, 32, 100, > 97, 116, 97, 116, 121, 112, 101, 115, 32, 100, 105, 102, 102, 101, 114, 101, > 110, 116, 32, 102, 114, 111, 109, 32, 39, 102, 108, 111, 97, 116, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 58, 32, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, 109, > 101, 91, 44, 95, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, 109, 101, > 50, 44, 46, 46, 46, 93, 32, 58, 32, 42, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 99, 97, 114, > 100, 32, 108, 97, 115, 116, 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, > 110, 32, 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, > 117, 115, 116, 111, 109, 32, 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 32, 116, 111, 32, 39, 42, 39, 32, 102, 111, 114, > 32, 100, 105, 115, 99, 97, 114, 100, 105, 110, 103, 32, 97, 108, 108, 32, > 101, 120, 105, 115, 116, 105, 110, 103, 32, 99, 117, 115, 116, 111, 109, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 117, 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, > 117, 116, 105, 111, 110, 32, 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, > 115, 62, 61, 49, 44, 115, 112, 101, 99, 116, 114, 117, 109, 62, 61, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, > 115, 101, 116, 32, 111, 102, 32, 117, 110, 105, 102, 111, 114, 109, 108, 121, > 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 101, 100, 32, 78, 45, 100, > 32, 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 91, 48, 44, 49, 93, > 94, 78, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 117, 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, 117, > 116, 105, 111, 110, 32, 54, 52, 44, 51, 32, 45, 42, 32, 50, 53, 53, > 32, 45, 45, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, > 100, 32, 45, 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, 45, 49, 93, > 32, 49, 48, 10, 117, 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, 32, > 36, 49, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 50, > 41, 32, 38, 38, 32, 36, 50, 62, 48, 34, 10, 45, 101, 91, 94, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 115, 101, 116, 32, 111, 102, 32, > 36, 49, 32, 117, 110, 105, 102, 111, 114, 109, 108, 121, 32, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 101, 100, 32, 36, 50, 45, 100, 32, 112, 111, > 105, 110, 116, 115, 32, 105, 110, 32, 91, 48, 44, 49, 93, 94, 36, 50, > 46, 34, 10, 45, 118, 32, 45, 32, 110, 61, 123, 114, 111, 117, 110, 100, > 40, 36, 49, 94, 40, 49, 47, 36, 50, 41, 44, 49, 44, 49, 41, 125, > 10, 40, 48, 44, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 36, 110, > 44, 49, 44, 49, 44, 49, 44, 51, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 50, 45, 49, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 45, 49, 93, 32, 49, 48, 48, 37, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 36, 110, 42, 119, 125, 44, 49, 44, 49, 44, 49, 44, > 49, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, > 49, 44, 49, 48, 48, 37, 44, 48, 44, 50, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 32, 45, 100, 111, 110, 101, 10, 45, 114, 91, > 45, 49, 93, 32, 36, 49, 44, 49, 44, 49, 44, 36, 50, 44, 49, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 117, 110, 105, 102, 111, 114, > 109, 32, 36, 50, 100, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, > 111, 110, 93, 34, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 117, 112, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 117, > 112, 100, 97, 116, 101, 39, 46, 10, 117, 112, 32, 58, 10, 45, 95, 117, > 112, 100, 97, 116, 101, 10, 35, 64, 103, 109, 105, 99, 32, 117, 112, 100, > 97, 116, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, 112, 100, > 97, 116, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 102, 114, 111, > 109, 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 100, 101, 102, > 105, 110, 105, 116, 105, 111, 110, 32, 102, 105, 108, 101, 32, 111, 110, 32, > 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 115, 101, 114, 118, 101, 114, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, > 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 110, 32, 97, 99, 116, 105, > 118, 101, 32, 73, 110, 116, 101, 114, 110, 101, 116, 32, 99, 111, 110, 110, > 101, 99, 116, 105, 111, 110, 32, 97, 110, 100, 32, 97, 110, 32, 97, 99, > 99, 101, 115, 115, 32, 116, 111, 32, 116, 104, 101, 32, 101, 120, 116, 101, > 114, 110, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 116, 111, > 111, 108, 115, 32, 39, 99, 117, 114, 108, 39, 32, 111, 114, 32, 39, 119, > 103, 101, 116, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 117, 112, 39, 41, 46, 10, 117, > 112, 100, 97, 116, 101, 32, 58, 10, 45, 95, 36, 48, 10, 95, 117, 112, > 100, 97, 116, 101, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, > 34, 85, 112, 100, 97, 116, 101, 32, 99, 111, 109, 109, 97, 110, 100, 115, > 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, > 32, 100, 101, 102, 105, 110, 105, 116, 105, 111, 110, 32, 102, 105, 108, 101, > 32, 111, 110, 32, 116, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 115, 101, 114, 118, 101, 114, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, > 32, 114, 97, 119, 58, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, > 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, > 47, 117, 112, 100, 97, 116, 101, 64, 46, 46, 103, 109, 105, 99, 44, 99, > 104, 97, 114, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 118, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 118, 101, 114, > 98, 111, 115, 101, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 118, 101, 114, 98, 111, 115, 101, 32, 58, 32, 95, 108, > 101, 118, 101, 108, 32, 58, 32, 123, 32, 43, 32, 124, 32, 45, 32, 125, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 101, 116, 32, 111, 114, 32, 105, 110, 99, 114, 101, 109, 101, 110, 116, > 47, 100, 101, 99, 114, 101, 109, 101, 110, 116, 32, 116, 104, 101, 32, 118, > 101, 114, 98, 111, 115, 105, 116, 121, 32, 108, 101, 118, 101, 108, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 118, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 87, 104, 101, 110, 32, 39, 108, 101, 118, 101, 108, 39, 62, 61, 48, > 44, 32, 71, 39, 77, 73, 67, 32, 108, 111, 103, 32, 109, 101, 115, 115, > 97, 103, 101, 115, 32, 97, 114, 101, 32, 100, 105, 115, 112, 108, 97, 121, > 101, 100, 32, 111, 110, 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, > 114, 100, 32, 101, 114, 114, 111, 114, 32, 40, 115, 116, 100, 101, 114, 114, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 108, 101, 118, 101, > 108, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 105, > 116, 32, 58, 32, 100, 101, 108, 97, 121, 32, 58, 32, 40, 110, 111, 32, > 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 87, 97, 105, 116, 32, 102, 111, 114, 32, 97, 32, > 103, 105, 118, 101, 110, 32, 100, 101, 108, 97, 121, 32, 40, 105, 110, 32, > 109, 115, 41, 32, 115, 105, 110, 99, 101, 32, 108, 97, 115, 116, 32, 99, > 97, 108, 108, 44, 32, 111, 114, 32, 115, 108, 101, 101, 112, 32, 100, 117, > 114, 105, 110, 103, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 100, 101, 108, 97, 121, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 111, 114, 32, 119, 97, 105, 116, 32, 102, 111, 114, 32, 97, 32, 117, > 115, 101, 114, 32, 101, 118, 101, 110, 116, 32, 111, 99, 99, 117, 114, 105, > 110, 103, 32, 111, 110, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, > 119, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 100, 101, 108, > 97, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 60, 48, 61, > 100, 101, 108, 97, 121, 43, 102, 108, 117, 115, 104, 32, 124, 32, 48, 61, > 101, 118, 101, 110, 116, 32, 124, 32, 62, 48, 61, 100, 101, 108, 97, 121, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 109, 97, 110, 100, 32, 115, 117, 98, 115, 101, 116, 32, 40, 105, 102, 32, > 97, 110, 121, 41, 32, 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, > 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 105, > 110, 100, 105, 99, 101, 115, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 110, 111, 32, > 119, 105, 110, 100, 111, 119, 32, 105, 110, 100, 105, 99, 101, 115, 32, 97, > 114, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 110, 100, > 32, 105, 102, 32, 39, 100, 101, 108, 97, 121, 39, 32, 105, 115, 32, 110, > 101, 103, 97, 116, 105, 118, 101, 44, 32, 116, 104, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 114, 101, 115, 117, 108, 116, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 105, 110, 32, 97, 32, 104, 97, 114, 100, 32, > 115, 108, 101, 101, 112, 32, 100, 117, 114, 105, 110, 103, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 100, 101, 108, 97, 121, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 100, 101, 108, 97, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 114, 110, 32, 58, 32, 109, > 101, 115, 115, 97, 103, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 119, 97, 114, 110, 105, 110, 103, 32, 109, 101, > 115, 115, 97, 103, 101, 44, 32, 111, 110, 32, 116, 104, 101, 32, 115, 116, > 97, 110, 100, 97, 114, 100, 32, 101, 114, 114, 111, 114, 32, 40, 115, 116, > 100, 101, 114, 114, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 109, 97, 110, 100, 32, 115, 117, 98, 115, 101, 116, 32, 40, > 105, 102, 32, 97, 110, 121, 41, 32, 115, 116, 97, 110, 100, 115, 32, 102, > 111, 114, 32, 100, 105, 115, 112, 108, 97, 121, 101, 100, 32, 115, 99, 111, > 112, 101, 32, 105, 110, 100, 105, 99, 101, 115, 32, 105, 110, 115, 116, 101, > 97, 100, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, > 99, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 119, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 119, 105, 110, 100, 111, 119, 39, > 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 119, > 105, 110, 100, 111, 119, 32, 58, 32, 95, 119, 105, 100, 116, 104, 91, 37, > 93, 62, 61, 45, 49, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, > 62, 61, 45, 49, 44, 95, 110, 111, 114, 109, 97, 108, 105, 122, 97, 116, > 105, 111, 110, 44, 95, 102, 117, 108, 108, 115, 99, 114, 101, 101, 110, 44, > 95, 112, 111, 115, 95, 120, 91, 37, 93, 44, 95, 112, 111, 115, 95, 121, > 91, 37, 93, 44, 95, 116, 105, 116, 108, 101, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, > 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 105, 110, 116, 111, 32, 97, 110, 32, 105, 110, 115, 116, 97, 110, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 119, 105, 116, 104, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 44, 32, 110, 111, > 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, > 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 102, 117, 108, 108, 115, > 99, 114, 101, 101, 110, 32, 109, 111, 100, 101, 32, 97, 110, 100, 32, 116, > 105, 116, 108, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 119, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 119, 105, 100, 116, 104, > 39, 32, 111, 114, 32, 39, 104, 101, 105, 103, 104, 116, 39, 32, 105, 115, > 32, 115, 101, 116, 32, 116, 111, 32, 45, 49, 44, 32, 116, 104, 101, 32, > 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, 32, 100, 105, > 109, 101, 110, 115, 105, 111, 110, 32, 105, 115, 32, 97, 100, 106, 117, 115, > 116, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, > 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 105, 109, > 97, 103, 101, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 87, 104, 101, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 115, 32, 39, 112, 111, 115, 95, 120, 39, 32, 97, 110, 100, 32, 39, 112, > 111, 115, 95, 121, 39, 32, 97, 114, 101, 32, 98, 111, 116, 104, 32, 100, > 105, 102, 102, 101, 114, 101, 110, 116, 32, 116, 104, 97, 110, 32, 45, 49, > 44, 32, 116, 104, 101, 32, 119, 105, 110, 100, 111, 119, 32, 105, 115, 32, > 109, 111, 118, 101, 100, 32, 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 119, 105, 100, 116, 104, 39, 61, 48, 32, > 111, 114, 32, 39, 104, 101, 105, 103, 104, 116, 39, 61, 48, 32, 99, 108, > 111, 115, 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, > 32, 119, 105, 110, 100, 111, 119, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 110, 111, 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 107, 101, > 101, 112, 32, 115, 97, 109, 101, 32, 124, 32, 48, 61, 110, 111, 110, 101, > 32, 124, 32, 49, 61, 97, 108, 119, 97, 121, 115, 32, 124, 32, 50, 61, > 49, 115, 116, 45, 116, 105, 109, 101, 32, 124, 32, 51, 61, 97, 117, 116, > 111, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 102, > 117, 108, 108, 115, 99, 114, 101, 101, 110, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 45, 49, 61, 107, 101, 101, 112, 32, 115, 97, 109, 101, > 32, 124, 32, 48, 61, 110, 111, 32, 124, 32, 49, 61, 121, 101, 115, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 89, 111, 117, 32, > 99, 97, 110, 32, 109, 97, 110, 97, 103, 101, 32, 117, 112, 32, 116, 111, > 32, 49, 48, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 105, 110, > 115, 116, 97, 110, 116, 32, 119, 105, 110, 100, 111, 119, 115, 32, 98, 121, > 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, > 114, 101, 100, 32, 118, 97, 114, 105, 97, 110, 116, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 45, 119, 48, 39, 32, 40, 100, 101, 102, > 97, 117, 108, 116, 44, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 119, > 39, 41, 44, 39, 45, 119, 49, 39, 44, 46, 46, 44, 39, 45, 119, 57, > 39, 32, 111, 102, 32, 116, 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 45, 119, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, 104, 116, 61, 110, 111, > 114, 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 61, 102, 117, 108, 108, > 115, 99, 114, 101, 101, 110, 61, 45, 49, 39, 32, 97, 110, 100, 32, 39, > 116, 105, 116, 108, 101, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 76, 105, > 115, 116, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 35, 64, 103, 109, 105, 99, 32, 107, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 107, 101, 101, 112, 39, 46, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 107, 101, 101, 112, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, 101, 101, 112, > 32, 111, 110, 108, 121, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 107, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 32, 45, 107, 101, > 101, 112, 91, 48, 45, 53, 48, 37, 58, 50, 93, 32, 45, 97, 112, 112, > 101, 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, > 116, 32, 120, 32, 45, 107, 101, 101, 112, 91, 94, 51, 48, 37, 45, 55, > 48, 37, 93, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 118, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 109, 111, 118, 101, 39, 46, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 109, 111, 118, 101, 32, 58, 32, 112, 111, > 115, 105, 116, 105, 111, 110, 91, 37, 93, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, 111, 118, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 116, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 112, 111, 115, 105, 116, > 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 109, 118, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 44, 51, 32, 45, 109, > 111, 118, 101, 91, 49, 93, 32, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, > 112, 108, 105, 116, 32, 120, 32, 45, 109, 111, 118, 101, 91, 53, 48, 37, > 45, 45, 49, 58, 50, 93, 32, 48, 32, 45, 97, 112, 112, 101, 110, 100, > 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 110, 109, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 110, 97, 109, 101, 39, 46, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 110, 97, 109, 101, > 32, 58, 32, 110, 97, 109, 101, 44, 95, 105, 115, 95, 109, 111, 100, 105, > 102, 105, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, > 116, 32, 110, 97, 109, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 110, 109, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 114, 103, > 117, 109, 101, 110, 116, 32, 39, 105, 115, 95, 109, 111, 100, 105, 102, 105, > 101, 100, 39, 32, 116, 101, 108, 108, 115, 32, 97, 98, 111, 117, 116, 32, > 116, 104, 101, 32, 109, 111, 100, 105, 102, 105, 101, 100, 32, 115, 116, 97, > 116, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 105, 115, 95, 109, 111, 100, 105, 102, 105, 101, 100, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 110, 97, 109, 101, 32, 105, 109, 97, 103, 101, > 32, 45, 98, 108, 117, 114, 91, 105, 109, 97, 103, 101, 93, 32, 50, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 109, 32, 58, 32, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 114, 101, 109, 111, 118, 101, 39, 46, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 109, 111, 118, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 109, 111, 118, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 109, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 32, > 45, 114, 101, 109, 111, 118, 101, 91, 51, 48, 37, 45, 55, 48, 37, 93, > 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 115, 112, 108, 105, 116, 32, 120, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 48, 45, 53, 48, 37, 58, 50, 93, 32, 45, 97, 112, 112, 101, 110, > 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 114, 118, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 118, 101, 114, 115, 101, > 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 101, 118, 101, 114, 115, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 118, 101, 114, 115, 101, 32, 112, > 111, 115, 105, 116, 105, 111, 110, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 114, 118, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, > 116, 32, 120, 44, 51, 32, 45, 114, 101, 118, 101, 114, 115, 101, 91, 45, > 50, 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, > 116, 32, 120, 44, 45, 49, 54, 32, 45, 114, 101, 118, 101, 114, 115, 101, > 91, 53, 48, 37, 45, 49, 48, 48, 37, 93, 32, 45, 97, 112, 112, 101, > 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 114, 116, > 95, 108, 105, 115, 116, 32, 58, 32, 95, 111, 114, 100, 101, 114, 105, 110, > 103, 61, 123, 32, 43, 32, 124, 32, 45, 32, 125, 44, 95, 99, 114, 105, > 116, 101, 114, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 111, 114, 116, 32, 108, 105, 115, 116, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, 103, 101, 32, 99, 114, > 105, 116, 101, 114, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 111, 114, 100, 101, 114, 105, 110, 103, 61, 43, 39, 44, 32, > 39, 99, 114, 105, 116, 101, 114, 105, 111, 110, 61, 105, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, 52, 59, 55, > 59, 51, 59, 57, 59, 50, 59, 52, 59, 55, 59, 54, 59, 51, 59, 57, > 59, 49, 59, 48, 59, 51, 59, 51, 59, 50, 41, 32, 45, 115, 112, 108, > 105, 116, 32, 121, 32, 45, 115, 111, 114, 116, 95, 108, 105, 115, 116, 32, > 43, 32, 45, 97, 112, 112, 101, 110, 100, 32, 121, 10, 115, 111, 114, 116, > 95, 108, 105, 115, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 43, 125, 44, 36, 123, 50, 61, 105, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 83, 111, 114, 116, 32, 108, 105, 115, 116, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 36, 63, 32, 105, 110, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 123, 36, 49, 39, 61, 61, 39, 43, > 125, 44, 100, 101, 115, 99, 101, 110, 100, 105, 110, 103, 44, 97, 115, 99, > 101, 110, 100, 105, 110, 103, 125, 34, 32, 111, 114, 100, 101, 114, 44, 32, > 34, 92, 10, 34, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, > 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 99, 114, 105, 116, 101, > 114, 105, 111, 110, 32, 39, 36, 50, 39, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 102, 32, 64, 35, 10, 105, 61, 64, 35, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 40, 64, 123, 36, 62, 44, 36, 50, > 125, 41, 32, 45, 100, 111, 110, 101, 32, 45, 97, 91, 36, 105, 45, 45, > 49, 93, 32, 121, 32, 45, 45, 102, 91, 45, 49, 93, 32, 39, 121, 39, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 115, 111, > 114, 116, 91, 45, 49, 93, 32, 36, 49, 44, 121, 32, 45, 122, 91, 45, > 49, 93, 32, 49, 44, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 104, 125, 32, 110, 109, 36, 62, 61, 64, 123, 36, 62, 44, 110, 125, 32, > 45, 110, 109, 91, 36, 62, 93, 32, 115, 111, 114, 116, 108, 105, 115, 116, > 36, 62, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 104, 125, 32, 45, 109, 118, 91, 115, 111, 114, 116, 108, 105, 115, > 116, 123, 105, 40, 48, 44, 36, 62, 41, 125, 93, 32, 45, 49, 32, 45, > 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, > 32, 45, 110, 109, 91, 36, 62, 93, 32, 36, 123, 110, 109, 123, 105, 40, > 48, 44, 36, 62, 41, 125, 125, 32, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 114, 116, 95, 115, 116, > 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 40, 118, 105, 101, 119, 101, 100, 32, 97, 115, 32, 97, 32, 108, 105, 115, > 116, 32, 111, 102, 32, 115, 116, 114, 105, 110, 103, 115, 41, 32, 105, 110, > 32, 108, 101, 120, 105, 99, 111, 103, 114, 97, 112, 104, 105, 99, 32, 111, > 114, 100, 101, 114, 46, 10, 115, 111, 114, 116, 95, 115, 116, 114, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 111, 114, 116, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 105, 110, 32, 108, 101, 120, 105, 99, 111, > 103, 114, 97, 112, 104, 105, 99, 32, 111, 114, 100, 101, 114, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 121, 32, 45, 97, 32, 120, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 114, 111, 117, 110, 100, 40, 104, 47, 52, 44, > 49, 44, 49, 41, 125, 32, 121, 61, 123, 52, 42, 36, 62, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, > 10, 45, 45, 114, 111, 119, 115, 32, 36, 121, 44, 123, 36, 121, 43, 51, > 125, 32, 45, 102, 91, 49, 93, 32, 39, 105, 102, 40, 105, 62, 61, 57, > 55, 38, 38, 105, 60, 61, 49, 50, 50, 44, 105, 45, 51, 50, 44, 105, > 41, 39, 32, 45, 45, 91, 45, 49, 93, 32, 51, 50, 32, 45, 99, 91, > 45, 49, 93, 32, 48, 44, 54, 51, 32, 45, 115, 91, 45, 49, 93, 32, > 121, 32, 45, 42, 91, 45, 50, 93, 32, 54, 52, 32, 45, 42, 91, 45, > 51, 93, 32, 52, 48, 57, 54, 32, 45, 42, 91, 45, 52, 93, 32, 50, > 54, 50, 49, 52, 52, 32, 45, 43, 91, 45, 52, 45, 45, 49, 93, 10, > 45, 114, 118, 32, 45, 97, 32, 121, 32, 45, 115, 111, 114, 116, 32, 43, > 44, 120, 32, 45, 45, 114, 111, 119, 115, 32, 48, 32, 45, 114, 111, 119, > 115, 91, 48, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 108, 97, 98, > 101, 108, 91, 49, 93, 32, 45, 37, 91, 49, 93, 32, 50, 10, 45, 115, > 91, 49, 93, 32, 43, 44, 48, 32, 78, 61, 123, 64, 35, 45, 49, 125, > 10, 120, 48, 61, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, > 35, 45, 49, 125, 32, 120, 49, 61, 123, 36, 120, 48, 43, 64, 123, 123, > 49, 43, 36, 62, 125, 44, 104, 125, 125, 32, 45, 45, 122, 91, 48, 93, > 32, 36, 120, 48, 44, 123, 36, 120, 49, 45, 49, 125, 32, 120, 48, 61, > 36, 120, 49, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 45, > 36, 78, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 100, 111, 110, 101, 32, 45, 115, 32, 120, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 77, 97, 116, 104, 101, 109, > 97, 116, 105, 99, 97, 108, 32, 111, 112, 101, 114, 97, 116, 111, 114, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 97, 98, 115, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 97, 98, 115, 111, 108, 117, 116, 101, 32, 118, 97, 108, 117, 101, 115, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 117, 98, 32, > 123, 105, 97, 125, 32, 45, 97, 98, 115, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 99, 111, 115, 40, 50, 48, 42, 120, 47, 119, 41, 39, > 32, 45, 45, 97, 98, 115, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 97, 99, 111, 115, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 97, > 114, 99, 45, 99, 111, 115, 105, 110, 101, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 45, > 49, 44, 49, 32, 45, 97, 99, 111, 115, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 120, 47, 119, 43, 48, 46, 49, 42, 117, 39, 32, 45, > 45, 97, 99, 111, 115, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, > 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 43, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 97, 100, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 100, 100, 32, 58, 32, 118, 97, 108, 117, 101, 91, > 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, > 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, > 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 100, 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, > 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 115, 117, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 43, 39, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 97, 100, 100, 32, 51, 48, 37, 32, 45, > 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 108, 117, 114, 32, 53, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, 97, 100, 100, 91, 49, 93, > 32, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 100, 100, 32, 39, > 56, 48, 42, 99, 111, 115, 40, 56, 48, 42, 40, 120, 47, 119, 45, 48, > 46, 53, 41, 42, 40, 121, 47, 119, 45, 48, 46, 53, 41, 43, 99, 41, > 39, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 57, 32, 45, 45, 114, 111, > 116, 97, 116, 101, 91, 48, 93, 32, 123, 36, 62, 42, 51, 54, 125, 44, > 49, 44, 48, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 111, 110, > 101, 32, 45, 97, 100, 100, 32, 45, 100, 105, 118, 32, 49, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 38, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 97, 110, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 110, 100, 32, 58, 32, 118, 97, 108, 117, > 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, > 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 98, 105, 116, 119, 105, 115, 101, 32, 65, 78, 68, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, 101, > 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, 101, 32, 65, 78, > 68, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 38, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 97, 110, 100, 32, 123, 49, 50, 56, 43, 54, 52, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 97, 110, 100, 10, 35, 64, 103, 109, 105, 99, 32, 97, 115, 105, > 110, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, > 110, 116, 119, 105, 115, 101, 32, 97, 114, 99, 45, 115, 105, 110, 101, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 32, 45, 49, 44, 49, 32, 45, 97, 115, 105, 110, 91, > 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, > 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 120, 47, 119, 43, 48, 46, > 49, 42, 117, 39, 32, 45, 45, 97, 115, 105, 110, 32, 45, 100, 105, 115, > 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, > 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 97, 116, 97, 110, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, > 105, 115, 101, 32, 97, 114, 99, 45, 116, 97, 110, 103, 101, 110, 116, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 32, 48, 44, 56, 32, 45, 97, 116, 97, 110, 91, 45, > 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, > 48, 44, 49, 44, 49, 44, 49, 44, 39, 52, 42, 120, 47, 119, 43, 117, > 39, 32, 45, 45, 97, 116, 97, 110, 32, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 97, 116, 97, 110, 50, 32, 58, 32, 91, > 120, 95, 97, 114, 103, 117, 109, 101, 110, 116, 93, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 111, 114, 105, 101, 110, 116, 101, 100, 32, 97, 114, 99, 45, 116, 97, > 110, 103, 101, 110, 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 97, 99, 104, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 114, 101, 103, 97, 114, 100, > 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 121, 45, 97, 114, 103, 117, > 109, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 97, 114, 99, 45, > 116, 97, 110, 103, 101, 110, 116, 32, 102, 117, 110, 99, 116, 105, 111, 110, > 44, 32, 119, 104, 105, 108, 101, 32, 116, 104, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 103, 105, 118, 101, 115, 32, 116, 104, 101, 32, 99, > 111, 114, 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, 32, 120, 45, 97, > 114, 103, 117, 109, 101, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 40, 45, 49, 44, 49, 41, 32, 40, 45, 49, 59, 49, > 41, 32, 45, 114, 101, 115, 105, 122, 101, 32, 52, 48, 48, 44, 52, 48, > 48, 44, 49, 44, 49, 44, 51, 32, 45, 97, 116, 97, 110, 50, 91, 49, > 93, 32, 91, 48, 93, 32, 45, 107, 101, 101, 112, 91, 49, 93, 32, 45, > 109, 111, 100, 32, 123, 112, 105, 47, 56, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 60, 60, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 98, 115, 108, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 98, 115, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, > 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, > 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, > 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, > 105, 116, 119, 105, 115, 101, 32, 108, 101, 102, 116, 32, 115, 104, 105, 102, > 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, > 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, > 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, > 101, 32, 108, 101, 102, 116, 32, 115, 104, 105, 102, 116, 32, 111, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 60, 60, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 115, 108, 32, 39, 114, 111, > 117, 110, 100, 40, 51, 42, 120, 47, 119, 44, 48, 41, 39, 32, 45, 99, > 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, > 62, 62, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 98, 115, > 114, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 98, 115, 114, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, > 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, > 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, 116, > 119, 105, 115, 101, 32, 114, 105, 103, 104, 116, 32, 115, 104, 105, 102, 116, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, > 111, 114, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, > 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, > 101, 32, 114, 105, 103, 104, 116, 32, 115, 104, 105, 102, 116, 32, 111, 102, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 62, 62, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 115, 114, 32, 39, 114, > 111, 117, 110, 100, 40, 51, 42, 120, 47, 119, 44, 48, 41, 39, 32, 45, > 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, > 32, 99, 111, 115, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 99, 111, 115, 105, 110, 101, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 32, 48, 44, 123, 50, 42, 112, 105, 125, 32, 45, > 99, 111, 115, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 50, 48, > 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 99, 111, 115, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 115, 104, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, > 116, 119, 105, 115, 101, 32, 104, 121, 112, 101, 114, 98, 111, 108, 105, 99, > 32, 99, 111, 115, 105, 110, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 45, 51, 44, > 51, 32, 45, 99, 111, 115, 104, 91, 45, 49, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, > 44, 39, 52, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 99, 111, 115, > 104, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, > 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 47, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 105, 118, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 105, 118, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 105, 118, 105, 100, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, > 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, > 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 113, 117, > 111, 116, 105, 101, 110, 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 47, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 118, 32, 39, 49, 43, > 97, 98, 115, 40, 99, 111, 115, 40, 120, 47, 49, 48, 41, 42, 115, 105, > 110, 40, 121, 47, 49, 48, 41, 41, 39, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 110, 111, 114, 109, 32, 45, 97, 100, 100, 91, 45, 49, 93, 32, 49, > 32, 45, 45, 100, 105, 118, 10, 35, 64, 103, 109, 105, 99, 32, 61, 61, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 101, 113, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 101, 113, > 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, > 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, 110, > 32, 101, 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, > 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, > 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, > 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, > 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, > 108, 101, 97, 110, 32, 101, 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 61, 61, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 111, 117, 110, 100, 32, 52, 48, 32, 45, 101, 113, 32, 123, 114, > 111, 117, 110, 100, 40, 105, 97, 44, 52, 48, 41, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 113, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 120, 112, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 101, 120, 112, 111, 110, 101, 110, 116, 105, 97, 108, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 48, 44, 50, 32, 45, 101, 120, 112, 91, 45, 49, 93, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, > 49, 44, 49, 44, 39, 55, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, > 101, 120, 112, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, > 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 62, 61, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 103, 101, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 103, 101, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, > 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, > 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, > 108, 101, 97, 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, 32, 111, 114, > 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, > 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, > 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, > 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 98, 111, 111, 108, 101, 97, 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, > 32, 111, 114, 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 62, 61, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 103, 101, 32, 123, 105, 97, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 103, 101, 10, 35, > 64, 103, 109, 105, 99, 32, 62, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 103, 116, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 103, 116, 32, 58, 32, 118, 97, 108, 117, 101, 91, > 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, > 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, > 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 98, 111, 111, 108, 101, 97, 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, > 32, 116, 104, 97, 110, 39, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, > 105, 109, 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, > 110, 32, 39, 103, 114, 101, 97, 116, 101, 114, 32, 116, 104, 97, 110, 39, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 62, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 103, 116, 32, 123, 105, 97, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 103, 116, 10, 35, > 64, 103, 109, 105, 99, 32, 60, 61, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 108, 101, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 108, 101, 32, 58, 32, 118, 97, 108, 117, 101, > 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, > 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, > 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 98, 111, 111, 108, 101, 97, 110, 32, 39, 108, 101, 115, 115, 32, 111, > 114, 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, 97, > 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 98, 111, 111, 108, 101, 97, 110, 32, 39, 108, 101, 115, 115, 32, 111, > 114, 32, 101, 113, 117, 97, 108, 32, 116, 104, 97, 110, 39, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 60, 61, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 108, 101, 32, 123, 105, 97, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 108, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 60, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 108, 116, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 108, 116, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, > 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, > 111, 108, 101, 97, 110, 32, 39, 108, 101, 115, 115, 32, 116, 104, 97, 110, > 39, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, > 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, 110, 32, 39, 108, 101, > 115, 115, 32, 116, 104, 97, 110, 39, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 60, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 116, 32, 123, 105, > 97, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 120, 32, 45, 108, 116, 10, 35, 64, 103, 109, 105, 99, 32, 108, 111, > 103, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, > 110, 116, 119, 105, 115, 101, 32, 98, 97, 115, 101, 45, 101, 32, 108, 111, > 103, 97, 114, 105, 116, 104, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 97, 100, 100, 32, 49, 32, 45, 108, 111, 103, 91, 45, 49, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, > 44, 49, 44, 49, 44, 49, 44, 39, 55, 42, 120, 47, 119, 43, 117, 39, > 32, 45, 45, 108, 111, 103, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 108, 111, 103, 49, 48, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 98, 97, 115, 101, 45, 49, 48, 32, 108, 111, 103, 97, 114, 105, 116, 104, > 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, 100, 100, > 32, 49, 32, 45, 108, 111, 103, 49, 48, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 55, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 108, > 111, 103, 49, 48, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 108, 111, 103, 50, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 98, 97, 115, > 101, 45, 50, 32, 108, 111, 103, 97, 114, 105, 116, 104, 109, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 97, 100, 100, 32, 49, 32, 45, 108, > 111, 103, 50, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 55, 42, > 120, 47, 119, 43, 117, 39, 32, 45, 45, 108, 111, 103, 50, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 32, > 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, > 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 117, 109, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, > 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 109, 97, 120, 105, 109, 97, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 109, 97, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 97, 120, 32, > 39, 82, 61, 40, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 50, 43, > 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, 50, 41, 94, 48, 46, 53, > 59, 50, 53, 53, 42, 82, 39, 10, 35, 64, 103, 109, 105, 99, 32, 47, > 47, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 100, 105, > 118, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 109, 100, 105, 118, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, > 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, > 116, 114, 105, 120, 32, 100, 105, 118, 105, 115, 105, 111, 110, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, > 101, 115, 47, 118, 101, 99, 116, 111, 114, 115, 32, 98, 121, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, > 109, 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, 116, 114, 105, 120, 32, > 100, 105, 118, 105, 115, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 47, 47, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, > 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, > 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 117, 109, > 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, > 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 109, 105, 110, 105, 109, 97, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, > 120, 32, 45, 109, 105, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 105, 110, > 32, 39, 82, 61, 40, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 50, > 43, 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, 50, 41, 94, 48, 46, > 53, 59, 50, 53, 53, 42, 82, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 37, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 111, 100, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 111, 100, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 111, 100, 117, > 108, 111, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, > 101, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, > 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 120, 112, 114, 101, > 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 109, 111, 100, 117, 108, > 111, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 37, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 109, > 111, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 111, 100, 32, 39, 82, 61, > 40, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 50, 43, 40, 121, 47, > 104, 45, 48, 46, 53, 41, 94, 50, 41, 94, 48, 46, 53, 59, 50, 53, > 53, 42, 82, 39, 10, 35, 64, 103, 109, 105, 99, 32, 42, 42, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 109, 117, 108, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 109, > 117, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, > 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, > 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 109, 97, 116, 114, 105, > 120, 32, 114, 105, 103, 104, 116, 32, 109, 117, 108, 116, 105, 112, 108, 105, > 99, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, 47, 118, 101, 99, 116, > 111, 114, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, > 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 109, 97, 116, 114, 105, 120, 32, 114, 105, 103, 104, 116, 32, 109, > 117, 108, 116, 105, 112, 108, 105, 99, 97, 116, 105, 111, 110, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 42, 42, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, 48, 59, 48, 44, 48, > 44, 49, 59, 49, 44, 48, 44, 48, 41, 32, 40, 49, 59, 50, 59, 51, > 41, 32, 45, 45, 109, 109, 117, 108, 10, 35, 64, 103, 109, 105, 99, 32, > 42, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 117, 108, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 117, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 77, 117, 108, 116, 105, 112, 108, 121, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, > 103, 101, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, > 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 112, 114, 111, 100, 117, 99, 116, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 42, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 117, 108, 32, > 50, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 40, 49, 44, 50, 44, 51, 44, 52, 44, 53, 44, 54, 44, 55, > 44, 56, 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, > 91, 48, 93, 32, 45, 109, 117, 108, 91, 48, 93, 32, 91, 45, 49, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 109, 117, 108, 32, 39, 49, 45, 51, 42, > 97, 98, 115, 40, 120, 47, 119, 45, 48, 46, 53, 41, 39, 32, 45, 99, > 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 110, 101, 103, 97, 116, > 105, 118, 101, 91, 45, 49, 93, 32, 45, 45, 109, 117, 108, 10, 35, 64, > 103, 109, 105, 99, 32, 33, 61, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 110, 101, 113, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 110, 101, 113, 32, 58, 32, 118, 97, 108, 117, > 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, > 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 98, 111, 111, 108, 101, 97, 110, 32, 105, 110, 101, 113, 117, 97, > 108, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, > 97, 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 109, 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, > 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 105, 110, 101, 113, 117, 97, 108, 105, 116, 121, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 33, 61, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 111, > 117, 110, 100, 32, 52, 48, 32, 45, 110, 101, 113, 32, 123, 114, 111, 117, > 110, 100, 40, 105, 97, 44, 52, 48, 41, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 124, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 111, > 114, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 111, 114, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, > 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, > 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, 116, 119, > 105, 115, 101, 32, 79, 82, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, > 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, > 116, 105, 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, > 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, > 105, 115, 101, 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, > 105, 116, 119, 105, 115, 101, 32, 79, 82, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 124, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 111, 114, 32, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 120, 32, 45, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 94, 32, > 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 112, 111, 119, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, > 119, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, > 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, > 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 97, > 105, 115, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 32, 116, 111, 32, 116, 104, 101, 32, 112, 111, 119, 101, 114, 32, > 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, > 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, 97, 116, > 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, 32, 111, > 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, > 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, 101, 110, 116, 105, > 97, 108, 32, 112, 111, 119, 101, 114, 115, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 94, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 118, 32, > 50, 53, 53, 32, 45, 45, 112, 111, 119, 32, 48, 46, 53, 32, 45, 109, > 117, 108, 32, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 103, 114, 97, > 100, 105, 101, 110, 116, 32, 45, 112, 111, 119, 32, 50, 32, 45, 97, 100, > 100, 32, 45, 112, 111, 119, 32, 48, 46, 50, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 111, 108, 32, 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, > 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, > 116, 119, 105, 115, 101, 32, 108, 101, 102, 116, 32, 114, 111, 116, 97, 116, > 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, > 103, 101, 32, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 115, 101, 113, 117, 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, > 105, 115, 101, 32, 108, 101, 102, 116, 32, 114, 111, 116, 97, 116, 105, 111, > 110, 32, 111, 102, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 111, 108, 32, 39, 114, 111, 117, 110, 100, 40, > 51, 42, 120, 47, 119, 44, 48, 41, 39, 32, 45, 99, 117, 116, 32, 48, > 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 114, 111, 114, 32, > 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, > 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 98, 105, 116, 119, 105, 115, 101, 32, > 114, 105, 103, 104, 116, 32, 114, 111, 116, 97, 116, 105, 111, 110, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 118, 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 109, 97, 116, 104, 101, 109, > 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, > 110, 44, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, > 101, 110, 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, 101, 32, 114, > 105, 103, 104, 116, 32, 114, 111, 116, 97, 116, 105, 111, 110, 32, 111, 102, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 111, 114, 32, 39, 114, 111, 117, 110, 100, 40, 51, 42, 120, 47, > 119, 44, 48, 41, 39, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 105, 103, 110, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 115, 105, 103, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 115, 117, 98, 32, 123, 105, 97, 125, 32, 45, 115, 105, 103, 110, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 99, 111, 115, 40, 50, > 48, 42, 120, 47, 119, 43, 117, 41, 39, 32, 45, 45, 115, 105, 103, 110, > 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, > 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 105, 110, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, > 105, 110, 116, 119, 105, 115, 101, 32, 115, 105, 110, 101, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 48, 44, 123, 50, 42, 112, 105, 125, 32, 45, 115, 105, 110, 91, > 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, > 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 50, 48, 42, 120, 47, 119, > 43, 117, 39, 32, 45, 45, 115, 105, 110, 32, 45, 100, 105, 115, 112, 108, > 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 105, 110, 99, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 115, 105, 110, 99, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 32, 123, 45, 50, 42, 112, 105, 125, 44, 123, 50, 42, > 112, 105, 125, 32, 45, 115, 105, 110, 99, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, > 44, 49, 44, 39, 50, 48, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, > 115, 105, 110, 99, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 105, 110, 104, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 104, 121, 112, > 101, 114, 98, 111, 108, 105, 99, 32, 115, 105, 110, 101, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 45, 51, 44, 51, 32, 45, 115, 105, 110, 104, 91, 45, 49, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, > 49, 44, 49, 44, 49, 44, 39, 52, 42, 120, 47, 119, 43, 117, 39, 32, > 45, 45, 115, 105, 110, 104, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 115, 113, 114, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 113, > 117, 97, 114, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 113, 114, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, > 49, 44, 39, 52, 48, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 115, > 113, 114, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, > 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 113, 114, 116, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 113, 117, 97, 114, > 101, 32, 114, 111, 111, 116, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 115, 113, 114, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, 44, 39, 52, 48, 42, > 120, 47, 119, 43, 117, 39, 32, 45, 45, 115, 113, 114, 116, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, > 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 45, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 117, 98, 39, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 115, 117, 98, 32, > 58, 32, 118, 97, 108, 117, 101, 91, 37, 93, 32, 58, 32, 91, 105, 109, > 97, 103, 101, 93, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 117, 98, 116, > 114, 97, 99, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, > 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 100, 105, 102, > 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 45, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 117, 98, 32, 51, > 48, 37, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 115, > 117, 98, 91, 45, 49, 93, 32, 91, 48, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 115, 117, 98, 32, 39, 105, 40, 119, 47, 50, 43, 48, 46, 57, 42, > 40, 120, 45, 119, 47, 50, 41, 44, 121, 41, 39, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 115, 117, 98, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 97, 110, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 116, 97, 110, 103, 101, 110, 116, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 123, 45, > 48, 46, 52, 55, 42, 112, 105, 125, 44, 123, 48, 46, 52, 55, 42, 112, > 105, 125, 32, 45, 116, 97, 110, 91, 45, 49, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 49, 44, 49, 44, 49, > 44, 39, 50, 48, 42, 120, 47, 119, 43, 117, 39, 32, 45, 45, 116, 97, > 110, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, > 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 116, 97, 110, 104, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 104, 121, 112, 101, 114, 98, > 111, 108, 105, 99, 32, 116, 97, 110, 103, 101, 110, 116, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 45, 51, 44, 51, 32, 45, 116, 97, 110, 104, 91, 45, 49, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, > 49, 44, 49, 44, 49, 44, 39, 52, 42, 120, 47, 119, 43, 117, 39, 32, > 45, 45, 116, 97, 110, 104, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 120, 111, 114, 32, 58, 32, 118, 97, 108, 117, 101, > 91, 37, 93, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, > 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 110, 111, 32, > 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 98, 105, 116, 119, 105, 115, 101, 32, 88, 79, 82, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, > 97, 108, 117, 101, 44, 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 109, > 97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 108, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 44, > 32, 111, 114, 32, 99, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 115, 101, 113, 117, 101, 110, > 116, 105, 97, 108, 32, 98, 105, 116, 119, 105, 115, 101, 32, 88, 79, 82, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 120, 111, 114, 32, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 32, 120, 32, 45, 120, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 86, 97, 108, 117, 101, 115, 32, 109, 97, 110, 105, 112, 117, 108, > 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 32, 58, 32, 48, 60, 61, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 60, 61, 49, 44, 120, 48, 44, 121, > 48, 44, 120, 49, 44, 121, 49, 44, 120, 50, 44, 121, 50, 44, 46, 46, > 46, 44, 120, 78, 44, 121, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 99, 117, 114, 118, 101, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 116, 111, 32, 105, > 109, 97, 103, 101, 32, 118, 97, 108, 117, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 61, 49, 39, 44, 32, 39, 120, 48, 61, 48, 39, 44, 32, 39, 121, > 48, 61, 49, 48, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 49, 44, 48, 44, 48, > 44, 49, 50, 56, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 10, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 49, 48, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 105, 110, > 116, 101, 110, 115, 105, 116, 121, 32, 99, 117, 114, 118, 101, 32, 119, 105, > 116, 104, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, > 32, 97, 110, 100, 32, 107, 101, 121, 112, 111, 105, 110, 116, 115, 32, 40, > 36, 123, 50, 45, 45, 49, 125, 41, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 117, 110, 99, > 116, 105, 111, 110, 49, 100, 32, 36, 123, 94, 48, 125, 32, 45, 109, 97, > 112, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 58, 32, 103, 97, > 109, 109, 97, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 103, 97, 109, 109, 97, 32, 99, 111, 114, 114, > 101, 99, 116, 105, 111, 110, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 50, 10, > 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 71, 97, 109, 109, 97, 45, > 99, 111, 114, 114, 101, 99, 116, 105, 111, 110, 32, 116, 111, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 103, 97, 109, 109, > 97, 32, 36, 49, 46, 34, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 109, 77, 61, 123, 105, 109, 125, > 44, 123, 105, 77, 125, 32, 45, 110, 32, 48, 44, 49, 32, 45, 94, 32, > 123, 49, 47, 36, 49, 125, 32, 45, 110, 32, 36, 109, 77, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, > 109, 109, 97, 32, 58, 32, 95, 114, 101, 102, 95, 99, 111, 108, 111, 114, > 49, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 99, 111, 108, 111, 114, 32, 98, 97, 108, 97, 110, > 99, 101, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, > 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 112, 101, 99, > 116, 32, 116, 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 114, > 101, 102, 101, 114, 101, 110, 99, 101, 32, 99, 111, 108, 111, 114, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 101, 102, 95, 99, 111, 108, > 111, 114, 49, 61, 49, 50, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 49, > 50, 56, 44, 54, 52, 44, 54, 52, 10, 98, 97, 108, 97, 110, 99, 101, > 95, 103, 97, 109, 109, 97, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 49, 50, 56, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 99, 111, 108, 111, 114, 32, 98, 97, 108, > 97, 110, 99, 101, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, > 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 119, 105, 116, 104, 32, 103, 97, 109, 109, 97, 32, 99, 117, 114, 118, 101, > 32, 97, 110, 100, 32, 114, 101, 102, 101, 114, 101, 110, 99, 101, 32, 99, > 111, 108, 111, 114, 32, 40, 34, 36, 123, 94, 48, 125, 34, 41, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 40, 36, 123, 94, 48, 125, 41, 32, > 45, 114, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 115, 125, 44, 49, > 44, 49, 44, 49, 44, 48, 44, 49, 32, 45, 115, 91, 45, 50, 93, 32, > 99, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 47, 91, 36, > 62, 93, 32, 50, 53, 53, 32, 45, 94, 91, 36, 62, 93, 32, 123, 108, > 111, 103, 40, 64, 123, 45, 49, 44, 36, 62, 125, 41, 47, 108, 111, 103, > 40, 64, 123, 36, 62, 44, 97, 125, 41, 125, 32, 45, 42, 91, 36, 62, > 93, 32, 50, 53, 53, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 109, 112, 108, 101, > 120, 50, 112, 111, 108, 97, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 99, 111, 109, 112, 108, 101, 120, > 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 102, 102, 116, 32, 45, 99, 111, 109, 112, 108, 101, 120, 50, 112, 111, 108, > 97, 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, 108, 111, 103, 91, 45, > 50, 93, 32, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 53, 48, > 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 50, 32, 45, 114, 101, 109, > 111, 118, 101, 91, 45, 49, 93, 10, 99, 111, 109, 112, 108, 101, 120, 50, > 112, 111, 108, 97, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 109, 112, 117, 116, 101, 32, 99, 111, 109, 112, 108, 101, 120, > 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 123, 50, > 42, 36, 62, 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, 93, 10, 45, > 114, 91, 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 45, 97, 116, 97, > 110, 50, 91, 49, 93, 32, 91, 48, 93, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 64, 123, 49, 44, 110, 125, 44, 49, 32, 45, 115, 113, 114, 91, > 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, > 32, 45, 115, 113, 114, 116, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 32, > 58, 32, 95, 105, 115, 95, 98, 105, 110, 97, 114, 121, 95, 100, 97, 116, > 97, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 109, 97, 120, > 105, 109, 117, 109, 95, 115, 101, 113, 117, 101, 110, 99, 101, 95, 108, 101, > 110, 103, 116, 104, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 114, 101, 115, 115, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 50, 120, 78, > 32, 100, 97, 116, 97, 32, 109, 97, 116, 114, 105, 99, 101, 115, 44, 32, > 117, 115, 105, 110, 103, 32, 82, 76, 69, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, > 116, 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, 115, 101, 113, 117, 101, > 110, 99, 101, 95, 108, 101, 110, 103, 116, 104, 61, 48, 39, 32, 116, 111, > 32, 100, 105, 115, 97, 98, 108, 101, 32, 109, 97, 120, 105, 109, 117, 109, > 32, 108, 101, 110, 103, 116, 104, 32, 99, 111, 110, 115, 116, 114, 97, 105, > 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, > 95, 98, 105, 110, 97, 114, 121, 95, 100, 97, 116, 97, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, 115, 101, 113, > 117, 101, 110, 99, 101, 95, 108, 101, 110, 103, 116, 104, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, > 32, 49, 48, 48, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 52, > 32, 45, 114, 111, 117, 110, 100, 32, 45, 45, 99, 111, 109, 112, 114, 101, > 115, 115, 95, 114, 108, 101, 32, 44, 32, 45, 45, 117, 110, 99, 111, 109, > 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 10, 99, 111, > 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 48, 125, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, > 38, 38, 32, 36, 50, 62, 61, 48, 34, 10, 45, 118, 32, 45, 32, 115, > 48, 61, 34, 32, 102, 111, 114, 32, 98, 105, 110, 97, 114, 121, 32, 100, > 97, 116, 97, 34, 32, 115, 49, 61, 34, 34, 10, 45, 105, 102, 32, 36, > 50, 32, 115, 61, 34, 44, 32, 119, 105, 116, 104, 32, 109, 97, 120, 105, > 109, 97, 108, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 108, 101, 110, > 103, 116, 104, 32, 34, 36, 50, 32, 45, 101, 108, 115, 101, 32, 115, 61, > 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 114, 101, 115, 115, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 82, > 76, 69, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 34, 36, 123, 115, > 123, 33, 36, 49, 125, 125, 36, 115, 34, 46, 34, 32, 45, 118, 32, 45, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 32, 105, 109, 61, > 123, 105, 109, 125, 32, 104, 101, 97, 100, 101, 114, 61, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 100, 125, 59, 123, 115, 125, 59, 36, 105, 109, 59, > 123, 36, 49, 33, 61, 48, 125, 10, 45, 45, 32, 36, 105, 109, 32, 45, > 121, 32, 120, 32, 40, 123, 64, 123, 48, 44, 45, 49, 125, 43, 49, 125, > 41, 32, 45, 97, 32, 120, 32, 45, 114, 32, 49, 48, 48, 37, 44, 51, > 10, 45, 102, 32, 39, 62, 105, 102, 40, 121, 61, 61, 48, 44, 105, 44, > 105, 102, 40, 121, 61, 61, 49, 44, 105, 102, 40, 105, 40, 120, 44, 48, > 41, 61, 61, 105, 40, 120, 43, 49, 44, 48, 41, 44, 45, 49, 44, 120, > 41, 44, 105, 102, 40, 105, 40, 120, 45, 49, 44, 49, 41, 61, 61, 45, > 49, 44, 105, 40, 120, 45, 49, 44, 50, 41, 43, 49, 44, 49, 41, 41, > 41, 39, 10, 45, 105, 102, 32, 36, 50, 10, 45, 116, 114, 97, 110, 115, > 112, 111, 115, 101, 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 10, 45, > 102, 91, 45, 49, 93, 32, 39, 62, 105, 102, 40, 120, 61, 61, 50, 44, > 105, 44, 105, 102, 40, 120, 61, 61, 48, 44, 105, 102, 40, 106, 40, 48, > 44, 45, 49, 41, 61, 61, 36, 50, 44, 49, 44, 105, 102, 40, 105, 33, > 61, 49, 44, 106, 40, 48, 44, 45, 49, 41, 43, 49, 44, 49, 41, 41, > 44, 105, 102, 40, 105, 61, 61, 45, 49, 38, 38, 106, 40, 45, 49, 41, > 61, 61, 36, 50, 44, 121, 44, 105, 41, 41, 41, 39, 10, 45, 109, 105, > 114, 114, 111, 114, 32, 120, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, > 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 122, 32, 48, 44, 123, 119, > 45, 50, 125, 32, 45, 115, 32, 121, 44, 51, 32, 45, 100, 105, 115, 99, > 97, 114, 100, 91, 49, 93, 32, 45, 49, 32, 45, 119, 97, 114, 112, 91, > 48, 44, 50, 93, 32, 91, 49, 93, 44, 48, 44, 48, 32, 45, 114, 109, > 91, 49, 93, 10, 45, 105, 102, 32, 36, 49, 10, 45, 110, 101, 113, 91, > 48, 93, 32, 48, 32, 45, 42, 91, 48, 93, 32, 50, 32, 45, 45, 91, > 48, 93, 32, 49, 32, 45, 42, 10, 45, 101, 108, 115, 101, 10, 45, 42, > 91, 45, 49, 93, 32, 45, 49, 32, 45, 114, 118, 32, 45, 97, 32, 120, > 32, 45, 121, 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 49, 32, > 45, 102, 32, 39, 62, 105, 102, 40, 105, 40, 48, 44, 121, 45, 49, 41, > 60, 48, 38, 38, 105, 61, 61, 48, 38, 38, 105, 40, 48, 44, 121, 43, > 49, 41, 60, 48, 44, 45, 49, 44, 105, 41, 39, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 91, 48, 93, 32, 40, 36, 104, 101, 97, 100, 101, 114, 41, 32, 45, > 97, 32, 121, 32, 45, 110, 109, 32, 36, 110, 109, 44, 49, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 117, 109, 117, 108, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 32, 102, 117, 110, 99, > 116, 105, 111, 110, 32, 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 100, 97, 116, 97, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 45, > 45, 99, 117, 109, 117, 108, 91, 45, 49, 93, 32, 45, 100, 105, 115, 112, > 108, 97, 121, 95, 103, 114, 97, 112, 104, 91, 45, 50, 44, 45, 49, 93, > 32, 52, 48, 48, 44, 51, 48, 48, 44, 51, 10, 99, 117, 109, 117, 108, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 117, 116, 101, 32, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 32, 111, > 102, 32, 102, 117, 110, 99, 116, 105, 111, 110, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 100, 105, 109, 61, 123, 119, 125, 44, 123, 104, > 125, 44, 123, 100, 125, 44, 123, 115, 125, 32, 45, 121, 32, 120, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 114, 111, 117, 110, 100, 40, 108, 111, > 103, 50, 40, 119, 41, 44, 49, 44, 49, 41, 125, 32, 45, 45, 115, 104, > 105, 102, 116, 91, 45, 49, 93, 32, 123, 50, 94, 36, 62, 125, 32, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, > 114, 32, 36, 100, 105, 109, 44, 45, 49, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 99, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, > 117, 116, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 99, 117, 116, 32, 58, 32, 123, 32, 118, 97, 108, 117, 101, 48, > 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 125, > 44, 123, 32, 118, 97, 108, 117, 101, 49, 91, 37, 93, 32, 124, 32, 91, > 105, 109, 97, 103, 101, 49, 93, 32, 125, 32, 58, 32, 91, 105, 109, 97, > 103, 101, 93, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 117, 116, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 114, 97, 110, 103, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 99, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, > 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, > 32, 40, 117, 115, 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, > 110, 116, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, > 32, 111, 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 97, 100, 100, 32, 51, 48, 37, 32, 45, 99, 117, 116, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, > 117, 116, 32, 50, 53, 37, 44, 55, 53, 37, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 105, 115, 99, 97, 114, 100, 32, 58, 32, 118, 97, 108, 117, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 109, 111, 118, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 118, 97, 108, 117, 101, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 114, > 101, 116, 117, 114, 110, 32, 114, 101, 115, 117, 108, 116, 115, 32, 97, 115, > 32, 115, 105, 110, 103, 108, 101, 45, 99, 111, 108, 117, 109, 110, 32, 118, > 101, 99, 116, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 97, 108, 108, 32, 112, 105, 120, 101, 108, 115, 32, 111, 102, > 32, 97, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 97, 114, 101, 32, 101, 113, 117, 97, 108, 32, 116, 111, 32, 116, > 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, > 117, 101, 44, 32, 97, 110, 32, 101, 109, 112, 116, 121, 32, 105, 109, 97, > 103, 101, 32, 105, 115, 32, 114, 101, 116, 117, 114, 110, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, 50, 59, > 51, 59, 52, 59, 51, 59, 50, 59, 49, 41, 32, 45, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 50, 10, 100, 105, 115, 99, 97, 114, 100, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, > 32, 118, 97, 108, 117, 101, 32, 36, 49, 32, 105, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, > 32, 45, 44, 36, 49, 32, 45, 97, 32, 121, 10, 45, 105, 102, 32, 123, > 33, 64, 35, 125, 32, 49, 44, 49, 44, 49, 44, 49, 44, 36, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, > 105, 103, 101, 110, 50, 116, 101, 110, 115, 111, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 99, 111, 109, 112, 111, 115, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 112, 97, 105, 114, 115, 32, 111, 102, > 32, 101, 105, 103, 101, 110, 118, 97, 108, 117, 101, 115, 47, 101, 105, 103, > 101, 110, 118, 101, 99, 116, 111, 114, 115, 32, 97, 115, 32, 50, 120, 50, > 32, 111, 114, 32, 51, 120, 51, 32, 116, 101, 110, 115, 111, 114, 32, 102, > 105, 101, 108, 100, 115, 46, 10, 101, 105, 103, 101, 110, 50, 116, 101, 110, > 115, 111, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 99, 111, 109, 112, 111, 115, 101, 32, 112, 97, 105, 114, 115, 32, 105, > 110, 32, 101, 105, 103, 101, 110, 32, 102, 105, 101, 108, 100, 36, 63, 32, > 97, 115, 32, 50, 120, 50, 32, 111, 114, 32, 51, 120, 51, 32, 116, 101, > 110, 115, 111, 114, 32, 102, 105, 101, 108, 100, 115, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 47, 50, > 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, > 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 105, 102, 32, 123, 115, > 61, 61, 50, 125, 10, 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 45, > 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 51, 93, 32, 45, 115, 113, 114, 91, 45, 51, 93, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 45, 45, 42, 91, 45, 51, 93, 32, 45, 49, 10, > 45, 115, 104, 91, 45, 53, 93, 10, 45, 97, 91, 45, 51, 45, 45, 49, > 93, 32, 99, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 10, > 45, 115, 104, 91, 45, 51, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, > 51, 44, 45, 49, 93, 10, 45, 115, 104, 91, 45, 51, 93, 32, 49, 44, > 49, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 109, 91, > 45, 51, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 108, 105, 102, 32, 123, 115, 61, 61, 54, 125, 10, 45, 115, 91, 45, 49, > 93, 32, 99, 10, 45, 108, 91, 45, 54, 45, 45, 52, 93, 32, 45, 45, > 115, 113, 114, 91, 45, 50, 93, 32, 45, 45, 42, 91, 45, 50, 44, 45, > 51, 93, 32, 45, 45, 115, 113, 114, 91, 45, 51, 93, 32, 45, 42, 91, > 45, 53, 93, 32, 91, 45, 54, 93, 32, 45, 42, 91, 45, 52, 93, 32, > 91, 45, 54, 93, 32, 45, 115, 113, 114, 91, 45, 54, 93, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 10, 45, 108, 91, 45, 51, 45, 45, > 49, 93, 32, 45, 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, 45, 42, > 91, 45, 50, 44, 45, 51, 93, 32, 45, 45, 115, 113, 114, 91, 45, 51, > 93, 32, 45, 42, 91, 45, 53, 93, 32, 91, 45, 54, 93, 32, 45, 42, > 91, 45, 52, 93, 32, 91, 45, 54, 93, 32, 45, 115, 113, 114, 91, 45, > 54, 93, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 10, 45, 115, > 91, 45, 51, 93, 32, 99, 10, 45, 45, 91, 45, 53, 93, 32, 91, 45, > 51, 93, 32, 45, 45, 91, 45, 52, 93, 32, 91, 45, 51, 93, 32, 45, > 42, 91, 45, 50, 93, 32, 91, 45, 53, 93, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 45, 52, 93, 10, 40, 49, 94, 48, 94, 48, 94, 49, 94, > 48, 94, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 52, 93, 32, 45, 114, 109, > 91, 45, 54, 45, 45, 52, 93, 32, 45, 43, 91, 45, 51, 45, 45, 49, > 93, 10, 45, 101, 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 91, 48, > 45, 45, 51, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 101, 105, 103, 101, 110, 50, 116, 101, 110, 115, 111, 114, 39, 58, 32, 73, > 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 91, 34, 123, > 64, 35, 45, 36, 62, 45, 49, 125, 34, 93, 32, 58, 32, 68, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 32, 34, 123, 119, 125, 34, 44, 34, 123, > 104, 125, 34, 44, 34, 123, 100, 125, 34, 44, 34, 123, 115, 125, 34, 32, > 100, 111, 101, 115, 32, 110, 111, 116, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 32, 97, 32, 102, 105, 101, 108, 100, 32, 111, 102, 32, 50, 100, > 32, 111, 114, 32, 51, 100, 32, 101, 105, 103, 101, 110, 118, 101, 99, 116, > 111, 114, 115, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, > 110, 100, 105, 97, 110, 32, 58, 32, 95, 100, 97, 116, 97, 116, 121, 112, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 118, 101, 114, 115, 101, 32, 100, 97, 116, 97, 32, 101, 110, > 100, 105, 97, 110, 110, 101, 115, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 101, 118, 101, > 110, 116, 117, 97, 108, 108, 121, 32, 99, 111, 110, 115, 105, 100, 101, 114, > 105, 110, 103, 32, 116, 104, 101, 32, 112, 105, 120, 101, 108, 32, 98, 101, > 105, 110, 103, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 97, 116, 97, 116, 121, 112, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 100, 97, 116, 97, 116, 121, 112, > 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 98, 111, 111, 108, > 32, 124, 32, 117, 99, 104, 97, 114, 32, 124, 32, 99, 104, 97, 114, 32, > 124, 32, 117, 115, 104, 111, 114, 116, 32, 124, 32, 115, 104, 111, 114, 116, > 32, 124, 32, 117, 105, 110, 116, 32, 124, 32, 105, 110, 116, 32, 124, 32, > 117, 108, 111, 110, 103, 32, 124, 32, 108, 111, 110, 103, 32, 124, 32, 102, > 108, 111, 97, 116, 32, 124, 32, 100, 111, 117, 98, 108, 101, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 113, 117, 97, 108, 105, 122, 101, > 32, 58, 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 91, > 37, 93, 44, 95, 118, 97, 108, 117, 101, 95, 109, 105, 110, 91, 37, 93, > 44, 95, 118, 97, 108, 117, 101, 95, 109, 97, 120, 91, 37, 93, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 113, > 117, 97, 108, 105, 122, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 116, 104, 101, 32, > 101, 113, 117, 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 105, 115, 32, > 100, 111, 110, 101, 32, 111, 110, 108, 121, 32, 102, 111, 114, 32, 112, 105, > 120, 101, 108, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 118, > 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, > 50, 53, 54, 39, 44, 32, 39, 118, 97, 108, 117, 101, 95, 109, 105, 110, > 61, 48, 37, 39, 32, 97, 110, 100, 32, 39, 118, 97, 108, 117, 101, 95, > 109, 97, 120, 61, 49, 48, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, 52, 44, 48, 44, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 102, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 102, 105, 108, 108, 39, 46, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 108, 32, > 58, 32, 118, 97, 108, 117, 101, 49, 44, 95, 118, 97, 108, 117, 101, 50, > 44, 46, 46, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, > 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 105, 108, 108, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, > 116, 104, 32, 118, 97, 108, 117, 101, 115, 32, 114, 101, 97, 100, 32, 102, > 114, 111, 109, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 118, 97, 108, 117, 101, 32, 108, 105, 115, 116, 44, 32, 101, 120, > 105, 115, 116, 105, 110, 103, 32, 105, 109, 97, 103, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 111, 114, 32, 109, 97, 116, 104, 101, 109, 97, > 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 46, 32, 83, 105, 110, 103, 108, 101, 32, 113, 117, 111, 116, 101, 115, 32, > 109, 97, 121, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 32, 105, > 110, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 102, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 52, 44, 52, 32, 45, 102, 105, 108, 108, 32, 49, 44, 50, 44, 51, 44, > 52, 44, 53, 44, 54, 44, 55, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 52, 44, 52, 32, 40, 49, 44, 50, 44, 51, 44, 52, 44, > 53, 44, 54, 44, 55, 41, 32, 45, 102, 105, 108, 108, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, 102, 105, > 108, 108, 32, 34, 88, 61, 120, 45, 119, 47, 50, 59, 32, 89, 61, 121, > 45, 104, 47, 50, 59, 32, 82, 61, 115, 113, 114, 116, 40, 88, 94, 50, > 43, 89, 94, 50, 41, 59, 32, 97, 61, 97, 116, 97, 110, 50, 40, 89, > 44, 88, 41, 59, 32, 105, 102, 32, 40, 82, 60, 61, 49, 56, 48, 44, > 50, 53, 53, 42, 97, 98, 115, 40, 99, 111, 115, 40, 99, 43, 50, 48, > 48, 42, 40, 120, 47, 119, 45, 48, 46, 53, 41, 42, 40, 121, 47, 104, > 45, 48, 46, 53, 41, 41, 41, 44, 56, 53, 48, 42, 40, 97, 37, 40, > 48, 46, 49, 42, 40, 99, 43, 49, 41, 41, 41, 41, 34, 10, 35, 64, > 103, 109, 105, 99, 32, 102, 108, 111, 97, 116, 50, 105, 110, 116, 56, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 102, 108, 111, 97, 116, 45, > 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, > 32, 56, 98, 105, 116, 115, 32, 105, 110, 116, 101, 103, 101, 114, 32, 114, > 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, > 102, 108, 111, 97, 116, 50, 105, 110, 116, 56, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 102, 108, > 111, 97, 116, 45, 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 116, 111, 32, 56, 98, 105, 116, 115, 32, 105, 110, 116, 101, > 103, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, > 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, > 99, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 109, 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, > 125, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 49, 54, 55, 55, > 55, 50, 49, 54, 44, 48, 44, 49, 10, 45, 45, 62, 62, 32, 56, 32, > 45, 97, 110, 100, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 45, 97, > 110, 100, 91, 45, 50, 93, 32, 50, 53, 53, 32, 45, 62, 62, 91, 45, > 51, 93, 32, 49, 54, 10, 40, 123, 39, 36, 109, 44, 36, 77, 39, 125, > 41, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 105, 110, 116, 56, 50, 102, 108, 111, 97, 116, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 56, 98, 105, 116, 115, 32, 105, 110, 116, 101, 103, > 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, > 110, 115, 32, 116, 111, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 105, 110, 116, 56, 50, > 102, 108, 111, 97, 116, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 56, 98, 105, 116, 115, 32, 105, > 110, 116, 101, 103, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, > 97, 116, 105, 111, 110, 36, 63, 32, 116, 111, 32, 102, 108, 111, 97, 116, > 45, 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 123, 104, 45, 49, 125, 44, 123, 104, > 45, 49, 125, 44, 48, 44, 48, 32, 109, 61, 64, 123, 45, 49, 44, 116, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 111, 119, 115, 32, > 48, 44, 123, 104, 45, 50, 125, 32, 45, 115, 32, 121, 44, 51, 32, 45, > 42, 91, 45, 51, 93, 32, 54, 53, 53, 51, 54, 32, 45, 42, 91, 45, > 50, 93, 32, 50, 53, 54, 32, 45, 111, 114, 10, 45, 115, 107, 105, 112, > 32, 64, 123, 45, 110, 92, 32, 36, 109, 125, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 105, 110, 100, 101, 120, 32, 58, 32, 123, 32, 91, 112, > 97, 108, 101, 116, 116, 101, 93, 32, 124, 32, 112, 114, 101, 100, 101, 102, > 105, 110, 101, 100, 95, 112, 97, 108, 101, 116, 116, 101, 32, 125, 44, 48, > 60, 61, 95, 100, 105, 116, 104, 101, 114, 105, 110, 103, 60, 61, 49, 44, > 95, 109, 97, 112, 95, 112, 97, 108, 101, 116, 116, 101, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 110, 100, 101, 120, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, > 108, 117, 101, 100, 32, 112, 97, 108, 101, 116, 116, 101, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 114, 101, 100, 101, 102, 105, 110, > 101, 100, 95, 112, 97, 108, 101, 116, 116, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 100, 101, 102, 97, 117, 108, 116, 32, 124, > 32, 49, 61, 72, 83, 86, 32, 124, 32, 50, 61, 108, 105, 110, 101, 115, > 32, 124, 32, 51, 61, 104, 111, 116, 32, 124, 32, 52, 61, 99, 111, 111, > 108, 32, 124, 32, 53, 61, 106, 101, 116, 32, 124, 32, 54, 61, 102, 108, > 97, 103, 32, 124, 32, 55, 61, 99, 117, 98, 101, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 105, 116, 104, 101, 114, 105, > 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 97, 112, 95, 112, > 97, 108, 101, 116, 116, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 105, 110, 100, 101, 120, 32, 49, 44, 49, 44, 49, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 40, 48, 59, 50, 53, 53, 59, 50, 53, 53, 94, 48, 59, > 49, 50, 56, 59, 50, 53, 53, 94, 48, 59, 48, 59, 50, 53, 53, 41, > 32, 45, 45, 105, 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 49, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 97, > 103, 101, 95, 105, 110, 116, 101, 103, 114, 97, 108, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, > 32, 105, 109, 97, 103, 101, 32, 105, 110, 116, 101, 103, 114, 97, 108, 32, > 40, 115, 117, 109, 109, 101, 100, 32, 97, 114, 101, 97, 32, 116, 97, 98, > 108, 101, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 105, > 109, 97, 103, 101, 95, 105, 110, 116, 101, 103, 114, 97, 108, 10, 105, 109, > 97, 103, 101, 95, 105, 110, 116, 101, 103, 114, 97, 108, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 105, 110, 116, 101, 103, 114, > 97, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 102, 32, 39, 62, 105, 43, 105, 40, 120, 45, > 49, 44, 121, 41, 39, 32, 45, 102, 32, 39, 62, 105, 43, 105, 40, 120, > 44, 121, 45, 49, 41, 39, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 97, 112, 32, 58, 32, 91, 112, 97, 108, 101, 116, 116, > 101, 93, 32, 58, 32, 112, 114, 101, 100, 101, 102, 105, 110, 101, 100, 95, > 112, 97, 108, 101, 116, 116, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 77, 97, 112, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, > 101, 100, 32, 112, 97, 108, 101, 116, 116, 101, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 110, 100, 101, 120, 101, 100, 32, 115, > 99, 97, 108, 97, 114, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 114, 101, 100, 101, 102, 105, 110, > 101, 100, 95, 112, 97, 108, 101, 116, 116, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 100, 101, 102, 97, 117, 108, 116, 32, 124, > 32, 49, 61, 72, 83, 86, 32, 124, 32, 50, 61, 108, 105, 110, 101, 115, > 32, 124, 32, 51, 61, 104, 111, 116, 32, 124, 32, 52, 61, 99, 111, 111, > 108, 32, 124, 32, 53, 61, 106, 101, 116, 32, 124, 32, 54, 61, 102, 108, > 97, 103, 32, 124, 32, 55, 61, 99, 117, 98, 101, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, > 45, 109, 97, 112, 91, 45, 49, 93, 32, 51, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 115, 112, 108, > 105, 116, 91, 45, 49, 93, 32, 99, 32, 40, 48, 44, 50, 53, 53, 44, > 48, 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, 50, > 53, 54, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 109, 97, 112, 91, > 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 32, 45, 97, 112, 112, 101, 110, 100, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 112, 95, > 99, 108, 117, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, 97, > 112, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 76, 85, 84, 32, > 105, 109, 97, 103, 101, 32, 40, 114, 101, 103, 97, 114, 100, 101, 100, 32, > 97, 115, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, > 101, 41, 32, 116, 111, 32, 97, 108, 108, 32, 111, 116, 104, 101, 114, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 117, 110, 105, 102, 111, 114, 109, 95, 100, > 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 123, 50, 94, 53, > 125, 44, 51, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, > 120, 32, 45, 45, 109, 97, 112, 95, 99, 108, 117, 116, 10, 109, 97, 112, > 95, 99, 108, 117, 116, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 77, 97, 112, 32, 99, 111, 108, 111, 114, 32, 76, 85, 84, 32, 105, > 109, 97, 103, 101, 44, 32, 117, 115, 105, 110, 103, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, > 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 50, 93, 32, 34, 67, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 109, 97, 112, 95, 99, 108, 117, > 116, 39, 58, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 116, 32, > 108, 101, 97, 115, 116, 32, 116, 119, 111, 32, 105, 109, 97, 103, 101, 115, > 32, 116, 111, 32, 119, 111, 114, 107, 32, 112, 114, 111, 112, 101, 114, 108, > 121, 32, 33, 34, 32, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, > 45, 32, 45, 116, 111, 95, 99, 111, 108, 111, 114, 91, 48, 45, 45, 50, > 93, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 108, 61, > 123, 114, 111, 117, 110, 100, 40, 40, 119, 42, 104, 42, 100, 41, 94, 40, > 49, 47, 51, 41, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 108, > 44, 36, 108, 44, 36, 108, 44, 51, 44, 45, 49, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, > 44, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 91, 48, 93, 32, 45, 47, 91, 48, 93, 32, 123, 50, 53, > 54, 47, 36, 108, 125, 10, 45, 45, 119, 97, 114, 112, 91, 45, 49, 93, > 32, 91, 48, 93, 44, 48, 44, 49, 44, 49, 10, 45, 114, 109, 91, 48, > 93, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 97, 91, 94, > 45, 49, 93, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 109, 105, 120, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 58, 32, 40, 97, 48, 48, 44, 46, 46, 46, 44, 97, 77, > 78, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 97, 116, 114, > 105, 120, 32, 116, 111, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 120, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, > 48, 44, 48, 59, 48, 44, 48, 44, 49, 41, 10, 109, 105, 120, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 109, 97, 116, 114, 105, 120, 32, > 36, 49, 32, 116, 111, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 104, 100, > 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, 100, 125, 32, 45, 114, 32, > 123, 119, 42, 104, 42, 100, 125, 44, 123, 115, 125, 44, 49, 44, 49, 44, > 45, 49, 32, 45, 105, 91, 48, 93, 32, 36, 123, 94, 48, 125, 32, 45, > 42, 42, 32, 45, 114, 32, 36, 119, 104, 100, 44, 123, 104, 125, 44, 45, > 49, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 110, 101, 103, 97, 116, 105, 118, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 110, 101, > 103, 97, 116, 105, 118, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 110, 101, 103, 97, 116, 105, 118, 101, 10, 110, 101, 103, 97, 116, > 105, 118, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 109, 112, 117, 116, 101, 32, 110, 101, 103, 97, 116, 105, 118, 101, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 45, 32, 123, 105, 77, 125, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 42, 32, 45, 49, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 105, 115, 101, 32, > 58, 32, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 62, > 61, 48, 91, 37, 93, 44, 95, 110, 111, 105, 115, 101, 95, 116, 121, 112, > 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 100, 100, 32, 114, 97, 110, 100, 111, 109, 32, 110, 111, 105, 115, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 110, 111, 105, 115, 101, 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 124, 32, 49, 61, 117, 110, 105, 102, 111, 114, 109, 32, 124, 32, 50, 61, > 115, 97, 108, 116, 38, 112, 101, 112, 112, 101, 114, 32, 124, 32, 51, 61, > 112, 111, 105, 115, 115, 111, 110, 32, 124, 32, 52, 61, 114, 105, 99, 101, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 110, 111, 105, > 115, 101, 95, 116, 121, 112, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, 93, 32, 53, 48, 44, 48, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, 93, 32, 53, 48, 44, 49, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, 93, 32, 49, 48, 44, 50, > 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 44, 51, 48, 48, 44, 49, > 44, 51, 32, 91, 48, 93, 32, 45, 110, 111, 105, 115, 101, 91, 48, 93, > 32, 50, 48, 44, 48, 32, 45, 110, 111, 105, 115, 101, 91, 49, 93, 32, > 50, 48, 44, 49, 32, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 49, 48, 48, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, > 97, 112, 104, 91, 45, 50, 44, 45, 49, 93, 32, 52, 48, 48, 44, 51, > 48, 48, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, > 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 110, 111, 114, 109, 32, 111, > 102, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, 32, > 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 110, 111, 114, 109, 10, 110, 111, 114, 109, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 112, > 111, 105, 110, 116, 119, 105, 115, 101, 32, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 32, 110, 111, 114, 109, 32, 111, 102, 32, 118, 101, 99, 116, 111, > 114, 115, 44, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 115, 113, 114, 32, 45, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 43, 32, 45, > 115, 113, 114, 116, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 110, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 32, 58, 32, 123, 32, 118, 97, 108, 117, 101, 48, 91, 37, 93, 32, 124, > 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 125, 44, 123, 32, 118, 97, > 108, 117, 101, 49, 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, > 49, 93, 32, 125, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 105, > 110, 101, 97, 114, 108, 121, 32, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 114, 97, 110, 103, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 110, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, > 105, 116, 32, 120, 44, 50, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 91, 45, 49, 93, 32, 54, 52, 44, 49, 57, 54, 32, 45, 97, 112, > 112, 101, 110, 100, 32, 120, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, > 105, 116, 104, 32, 97, 32, 117, 110, 105, 116, 97, 114, 121, 32, 115, 117, > 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 91, 45, 49, 93, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 32, 45, 100, 105, 115, 112, > 108, 97, 121, 95, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 52, 48, > 48, 44, 51, 48, 48, 10, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, > 115, 117, 109, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 78, > 111, 114, 109, 97, 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 97, 32, 117, 110, 105, 116, 97, 114, 121, 32, > 115, 117, 109, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 115, 117, 109, 61, 64, 123, 36, 62, 44, 43, > 125, 32, 45, 105, 102, 32, 123, 36, 115, 117, 109, 33, 61, 48, 125, 32, > 45, 47, 91, 36, 62, 93, 32, 36, 115, 117, 109, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 110, 111, 116, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 98, 111, 111, 108, 101, 97, 110, 32, > 110, 111, 116, 32, 111, 112, 101, 114, 97, 116, 105, 111, 110, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 103, 101, 32, 53, 48, 37, 32, > 45, 45, 110, 111, 116, 91, 45, 49, 93, 10, 110, 111, 116, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 110, 111, 116, 32, 111, 112, 101, 114, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 101, 113, 32, 48, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, > 105, 115, 101, 32, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, > 111, 102, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, > 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 45, > 45, 110, 111, 114, 109, 91, 45, 50, 93, 32, 45, 110, 101, 103, 97, 116, > 105, 118, 101, 91, 45, 49, 93, 32, 45, 109, 117, 108, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 101, 118, 101, 114, 115, 101, 91, 45, > 50, 44, 45, 49, 93, 10, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, > 112, 117, 116, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 111, > 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 118, 101, 99, 116, 111, > 114, 115, 44, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 45, 110, 111, 114, 109, 91, 36, 62, 93, 32, 45, 114, 101, 112, > 108, 97, 99, 101, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 47, 91, > 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 116, 115, 117, 32, 58, 32, > 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 72, 97, 114, 100, 45, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 79, 116, 115, 117, 39, > 115, 32, 109, 101, 116, 104, 111, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 84, 104, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 115, 32, 97, 114, 101, 32, 114, > 101, 116, 117, 114, 110, 101, 100, 32, 97, 115, 32, 97, 32, 108, 105, 115, > 116, 32, 111, 102, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 116, > 104, 101, 32, 115, 116, 97, 116, 117, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, 50, 53, > 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 45, 111, 116, 115, 117, 32, 44, 10, 111, 116, 115, > 117, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 123, 49, 61, 50, 53, 54, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 72, 97, > 114, 100, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 79, 116, 115, 117, 92, > 52, 55, 115, 32, 109, 101, 116, 104, 111, 100, 44, 32, 119, 105, 116, 104, > 32, 36, 49, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 108, 101, > 118, 101, 108, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 105, 109, > 61, 123, 105, 109, 125, 32, 105, 77, 61, 123, 105, 77, 125, 32, 45, 110, > 32, 48, 44, 123, 36, 49, 45, 49, 125, 10, 45, 45, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 32, 36, 49, 32, 116, 111, 116, 97, 108, 61, 64, > 123, 45, 49, 44, 43, 125, 10, 45, 45, 42, 91, 45, 49, 93, 32, 39, > 120, 39, 32, 115, 117, 109, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 115, 117, 109, 66, 61, 48, 32, 119, 66, > 61, 48, 32, 119, 70, 61, 48, 32, 118, 97, 114, 77, 97, 120, 61, 48, > 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 49, 10, 119, 66, 61, 123, 36, 119, 66, 43, > 64, 123, 45, 49, 44, 36, 62, 125, 125, 10, 45, 105, 102, 32, 123, 36, > 119, 66, 61, 61, 48, 125, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 119, 70, 61, 123, 36, 116, 111, 116, > 97, 108, 45, 36, 119, 66, 125, 10, 45, 105, 102, 32, 123, 36, 119, 70, > 61, 61, 48, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, > 105, 102, 10, 115, 117, 109, 66, 61, 123, 36, 115, 117, 109, 66, 43, 36, > 62, 42, 64, 123, 45, 49, 44, 36, 62, 125, 125, 10, 109, 66, 61, 123, > 36, 115, 117, 109, 66, 47, 36, 119, 66, 125, 10, 109, 70, 61, 123, 40, > 36, 115, 117, 109, 45, 36, 115, 117, 109, 66, 41, 47, 36, 119, 70, 125, > 10, 118, 97, 114, 66, 101, 116, 119, 101, 101, 110, 61, 123, 36, 119, 66, > 42, 36, 119, 70, 42, 40, 36, 109, 66, 45, 36, 109, 70, 41, 94, 50, > 125, 10, 45, 105, 102, 32, 123, 36, 118, 97, 114, 66, 101, 116, 119, 101, > 101, 110, 62, 36, 118, 97, 114, 77, 97, 120, 125, 32, 118, 97, 114, 77, > 97, 120, 61, 36, 118, 97, 114, 66, 101, 116, 119, 101, 101, 110, 32, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 61, 36, 62, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 10, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 123, 36, > 105, 109, 43, 36, 116, 104, 114, 101, 115, 104, 111, 108, 100, 42, 40, 36, > 105, 77, 45, 36, 105, 109, 41, 47, 40, 36, 49, 45, 49, 41, 125, 10, > 45, 105, 102, 32, 36, 62, 32, 45, 117, 32, 64, 123, 125, 44, 36, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 36, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 108, 97, > 114, 50, 99, 111, 109, 112, 108, 101, 120, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 112, 111, 108, 97, 114, > 32, 116, 111, 32, 99, 111, 109, 112, 108, 101, 120, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 112, 111, 108, 97, 114, > 50, 99, 111, 109, 112, 108, 101, 120, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 112, 111, 108, 97, > 114, 32, 116, 111, 32, 99, 111, 109, 112, 108, 101, 120, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 123, 50, 42, 36, 62, 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, > 93, 10, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 45, > 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, > 45, 51, 44, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 113, > 117, 97, 110, 116, 105, 122, 101, 32, 58, 32, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 62, 61, 49, 44, 95, 107, 101, 101, 112, 95, 118, 97, 108, > 117, 101, 115, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, > 115, 95, 117, 110, 105, 102, 111, 114, 109, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 81, 117, 97, > 110, 116, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 107, 101, 101, 112, 95, 118, 97, 108, 117, 101, 115, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 105, 115, 95, 117, 110, 105, 102, 111, 114, 109, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 51, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 50, 48, 48, 44, 50, > 48, 48, 44, 49, 44, 49, 44, 39, 99, 111, 115, 40, 120, 47, 49, 48, > 41, 42, 115, 105, 110, 40, 121, 47, 49, 48, 41, 39, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 54, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 52, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 51, 32, 45, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 50, 10, 113, 117, 97, > 110, 116, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, > 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, > 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 81, 117, 97, 110, 116, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 117, 115, 105, 110, 103, 32, 36, 49, 32, 108, 101, 118, 101, 108, > 115, 44, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, > 50, 44, 119, 105, 116, 104, 44, 119, 105, 116, 104, 111, 117, 116, 125, 34, > 32, 107, 101, 101, 112, 105, 110, 103, 32, 118, 97, 108, 117, 101, 32, 114, > 97, 110, 103, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 36, 51, 10, 45, 105, 102, 32, 123, 115, 61, 61, 49, 125, 10, > 45, 105, 102, 32, 36, 50, 32, 109, 77, 61, 123, 105, 109, 125, 44, 123, > 105, 77, 125, 32, 45, 110, 32, 48, 44, 36, 49, 32, 45, 114, 111, 117, > 110, 100, 32, 49, 44, 45, 49, 32, 45, 109, 105, 110, 32, 123, 36, 49, > 45, 49, 125, 32, 45, 110, 32, 36, 109, 77, 10, 45, 101, 108, 115, 101, > 32, 45, 110, 32, 48, 44, 36, 49, 32, 45, 114, 111, 117, 110, 100, 32, > 49, 44, 45, 49, 32, 45, 109, 105, 110, 32, 123, 36, 49, 45, 49, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 109, 77, > 61, 123, 105, 109, 125, 44, 123, 105, 77, 125, 32, 45, 117, 110, 105, 102, > 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, > 32, 36, 49, 44, 123, 115, 125, 32, 45, 110, 91, 45, 49, 93, 32, 36, > 109, 77, 32, 45, 105, 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 36, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 45, 99, > 111, 108, 111, 114, 109, 97, 112, 32, 36, 49, 44, 48, 32, 45, 105, 110, > 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 36, > 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 97, 110, 100, 32, 58, 32, > 123, 32, 118, 97, 108, 117, 101, 48, 91, 37, 93, 32, 124, 32, 91, 105, > 109, 97, 103, 101, 48, 93, 32, 125, 44, 123, 32, 118, 97, 108, 117, 101, > 49, 91, 37, 93, 32, 124, 32, 91, 105, 109, 97, 103, 101, 49, 93, 32, > 125, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 105, 108, 108, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 114, 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, > 101, 115, 32, 117, 110, 105, 102, 111, 114, 109, 108, 121, 32, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 101, 100, 32, 105, 110, 32, 116, 104, 101, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 114, 97, 110, 103, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, > 52, 48, 48, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 32, 45, 49, > 48, 44, 49, 48, 32, 45, 45, 98, 108, 117, 114, 32, 49, 48, 32, 45, > 115, 105, 103, 110, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 101, 112, 108, 97, 99, 101, 32, 58, 32, 118, 97, 108, 117, 101, 95, > 115, 114, 99, 44, 118, 97, 108, 117, 101, 95, 100, 101, 115, 116, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, 97, 99, 101, 32, > 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, 50, > 59, 51, 59, 52, 41, 32, 45, 45, 114, 101, 112, 108, 97, 99, 101, 32, > 50, 44, 51, 10, 114, 101, 112, 108, 97, 99, 101, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 112, > 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 36, 49, 32, 119, > 105, 116, 104, 32, 36, 50, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 45, 61, 61, 32, > 36, 49, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 50, 45, 36, 49, > 125, 32, 45, 43, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 112, > 108, 97, 99, 101, 95, 105, 110, 102, 32, 58, 32, 95, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 112, 108, 97, 99, 101, 32, 97, 108, 108, 32, 105, 110, 102, 105, > 110, 105, 116, 101, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, > 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, 112, 114, > 101, 115, 115, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 40, 48, 59, 49, 59, 50, 41, 32, 45, 108, 111, 103, 32, > 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 105, 110, 102, 32, 50, 10, > 114, 101, 112, 108, 97, 99, 101, 95, 105, 110, 102, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 97, > 108, 108, 32, 105, 110, 102, 105, 110, 105, 116, 101, 32, 118, 97, 108, 117, > 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 98, 121, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 39, 36, 49, 39, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 32, 34, 105, 102, 40, 105, > 61, 61, 105, 43, 49, 44, 36, 49, 44, 105, 41, 34, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 112, 108, 97, 99, 101, > 95, 110, 97, 110, 32, 58, 32, 95, 101, 120, 112, 114, 101, 115, 115, 105, > 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, > 97, 99, 101, 32, 97, 108, 108, 32, 78, 97, 78, 32, 118, 97, 108, 117, > 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 45, 49, 59, 48, 59, > 50, 41, 32, 45, 115, 113, 114, 116, 32, 45, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 110, 97, 110, 32, 50, 10, 114, 101, 112, 108, 97, 99, 101, > 95, 110, 97, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 82, 101, 112, 108, 97, 99, 101, 32, 97, 108, 108, 32, 78, 97, 78, 32, > 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, 115, > 36, 63, 32, 98, 121, 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, > 32, 39, 36, 49, 39, 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 32, > 34, 105, 102, 40, 105, 62, 61, 48, 32, 124, 124, 32, 105, 60, 61, 48, > 44, 105, 44, 36, 49, 41, 34, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 101, 112, 108, 97, 99, 101, 95, 115, 101, 113, 32, > 58, 32, 34, 115, 101, 97, 114, 99, 104, 95, 115, 101, 113, 34, 44, 34, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 101, 113, 34, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 83, 101, 97, 114, 99, 104, 32, 97, 110, 100, > 32, 114, 101, 112, 108, 97, 99, 101, 32, 97, 32, 115, 101, 113, 117, 101, > 110, 99, 101, 32, 111, 102, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 49, 59, > 50, 59, 51, 59, 52, 59, 53, 41, 32, 45, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 101, 113, 32, 34, 50, 44, 51, 44, 52, 34, 44, 34, > 55, 44, 56, 34, 10, 114, 101, 112, 108, 97, 99, 101, 95, 115, 101, 113, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, 125, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, > 101, 32, 118, 97, 108, 117, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, > 32, 39, 36, 49, 39, 32, 98, 121, 32, 118, 97, 108, 117, 101, 32, 115, > 101, 113, 117, 101, 110, 99, 101, 32, 39, 36, 123, 50, 45, 45, 49, 125, > 39, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 110, 115, 61, 123, 110, 97, 114, 103, 40, 36, 49, 41, > 125, 32, 110, 100, 61, 123, 110, 97, 114, 103, 40, 36, 123, 50, 45, 45, > 49, 125, 41, 125, 32, 114, 97, 116, 105, 111, 61, 123, 36, 110, 100, 42, > 49, 48, 48, 47, 36, 110, 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 43, 44, > 36, 49, 32, 45, 45, 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, 123, > 36, 110, 115, 45, 49, 125, 32, 40, 36, 49, 41, 32, 45, 45, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 105, > 110, 100, 61, 123, 105, 77, 33, 61, 48, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 36, 105, 110, 100, 60, 64, 35, 125, > 32, 45, 105, 102, 32, 36, 110, 100, 32, 45, 114, 91, 36, 105, 110, 100, > 45, 45, 49, 58, 50, 93, 32, 49, 44, 36, 114, 97, 116, 105, 111, 37, > 44, 49, 44, 49, 44, 48, 32, 45, 102, 91, 36, 105, 110, 100, 45, 45, > 49, 58, 50, 93, 32, 36, 123, 50, 45, 45, 49, 125, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 109, 91, 36, 105, 110, 100, 45, 45, 49, 58, 50, > 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 112, > 108, 97, 99, 101, 95, 115, 116, 114, 32, 58, 32, 34, 115, 101, 97, 114, > 99, 104, 95, 115, 116, 114, 34, 44, 34, 114, 101, 112, 108, 97, 99, 101, > 95, 115, 116, 114, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 101, 97, 114, 99, 104, 32, 97, 110, 100, 32, 114, 101, 112, 108, 97, 99, > 101, 32, 97, 32, 115, 116, 114, 105, 110, 103, 32, 105, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 118, > 105, 101, 119, 101, 100, 32, 97, 115, 32, 115, 116, 114, 105, 110, 103, 115, > 44, 32, 105, 46, 101, 46, 32, 115, 101, 113, 117, 101, 110, 99, 101, 115, > 32, 111, 102, 32, 97, 115, 99, 105, 105, 32, 99, 111, 100, 101, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 123, 39, > 34, 72, 101, 108, 108, 111, 32, 116, 104, 101, 114, 101, 44, 32, 104, 111, > 119, 32, 97, 114, 101, 32, 121, 111, 117, 32, 63, 34, 39, 125, 41, 32, > 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 72, > 101, 108, 108, 111, 32, 116, 104, 101, 114, 101, 34, 44, 34, 72, 105, 32, > 68, 97, 118, 105, 100, 34, 10, 114, 101, 112, 108, 97, 99, 101, 95, 115, > 116, 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, > 125, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, > 97, 99, 101, 32, 115, 116, 114, 105, 110, 103, 32, 39, 36, 49, 39, 32, > 98, 121, 32, 115, 116, 114, 105, 110, 103, 32, 39, 36, 123, 50, 45, 45, > 49, 125, 39, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 40, > 118, 105, 101, 119, 101, 100, 32, 97, 115, 32, 115, 116, 114, 105, 110, 103, > 36, 63, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 101, 113, 32, 64, 123, 45, 113, 117, 111, 116, 101, > 92, 32, 123, 39, 34, 36, 49, 34, 39, 125, 125, 44, 123, 39, 34, 36, > 123, 50, 45, 45, 49, 125, 34, 39, 125, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 111, 117, 110, 100, 32, 58, 32, 114, 111, > 117, 110, 100, 105, 110, 103, 95, 118, 97, 108, 117, 101, 62, 61, 48, 44, > 95, 114, 111, 117, 110, 100, 105, 110, 103, 95, 116, 121, 112, 101, 32, 58, > 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 111, 117, 110, 100, 32, > 118, 97, 108, 117, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 114, 111, 117, 110, 100, 105, 110, 103, 95, 116, 121, > 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 98, 97, 99, 107, 119, 97, 114, 100, 32, 124, 32, 48, 61, 110, 101, 97, > 114, 101, 115, 116, 32, 124, 32, 49, 61, 102, 111, 114, 119, 97, 114, 100, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 111, 117, > 110, 100, 105, 110, 103, 95, 116, 121, 112, 101, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 114, 111, 117, 110, 100, 32, 49, 48, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 109, 117, 108, 32, 123, 112, 105, 47, 49, 56, > 48, 125, 32, 45, 115, 105, 110, 32, 45, 45, 114, 111, 117, 110, 100, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 111, 117, 110, 100, 105, 102, 121, 32, > 58, 32, 103, 97, 109, 109, 97, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 114, 111, 117, 110, 100, 105, > 102, 121, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, > 110, 32, 111, 110, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, 101, > 100, 32, 100, 97, 116, 97, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 103, 97, 109, 109, 97, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 103, 97, 109, 109, 97, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 48, 48, 48, > 32, 45, 102, 105, 108, 108, 32, 39, 52, 42, 120, 47, 119, 39, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 114, 111, 117, 110, 100, > 105, 102, 121, 91, 48, 93, 32, 123, 36, 62, 42, 48, 46, 50, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, > 48, 48, 44, 51, 48, 48, 10, 114, 111, 117, 110, 100, 105, 102, 121, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 111, 117, 110, 100, 105, 102, 121, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 103, > 97, 109, 109, 97, 32, 36, 49, 46, 34, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 114, 111, > 117, 110, 100, 32, 49, 32, 45, 45, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 45, 42, 91, 45, 50, 93, 32, 50, 32, 45, 97, 98, 115, > 91, 45, 49, 93, 32, 45, 94, 91, 45, 49, 93, 32, 36, 49, 32, 45, > 115, 105, 103, 110, 91, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, 45, > 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 48, 46, 53, 32, 45, 43, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 61, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 115, 101, 116, 39, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 116, 32, 58, 32, 118, > 97, 108, 117, 101, 44, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, > 44, 95, 122, 91, 37, 93, 44, 95, 99, 91, 37, 93, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, > 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, > 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 111, > 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 61, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 32, 97, 114, 101, 32, 111, 117, 116, 115, 105, 100, 101, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 98, 111, 117, 110, 100, 115, > 44, 32, 110, 111, 32, 97, 99, 116, 105, 111, 110, 32, 105, 115, 32, 112, > 101, 114, 102, 111, 114, 109, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 120, 61, 121, 61, 122, 61, 99, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 50, 44, 50, 32, 45, > 115, 101, 116, 32, 49, 44, 48, 44, 48, 32, 45, 115, 101, 116, 32, 50, > 44, 49, 44, 48, 32, 45, 115, 101, 116, 32, 51, 44, 48, 44, 49, 32, > 45, 115, 101, 116, 32, 52, 44, 49, 44, 49, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, 48, 48, 32, 45, 115, > 101, 116, 32, 50, 53, 53, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, > 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, 44, 123, 63, 40, > 49, 48, 48, 41, 125, 37, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 58, 32, > 118, 97, 108, 117, 101, 91, 37, 93, 44, 95, 105, 115, 95, 115, 111, 102, > 116, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 111, 102, 116, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 104, 97, 114, > 100, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 105, 110, 103, 32, 124, > 32, 49, 61, 115, 111, 102, 116, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 105, 110, 103, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, 105, > 110, 116, 101, 114, 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, 32, > 40, 117, 115, 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, > 111, 112, 101, 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 105, 115, 95, 115, 111, 102, 116, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 91, 48, > 93, 32, 53, 48, 37, 32, 45, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 91, 48, 93, 32, 53, 48, 37, 44, 49, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 50, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 50, 39, 46, 10, 116, 50, 32, > 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, > 45, 118, 32, 43, 10, 45, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, > 50, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 50, 32, 58, 32, 109, 105, 110, 91, 37, 93, 44, > 109, 97, 120, 91, 37, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 84, 104, 114, 101, 115, 104, 111, 108, 100, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 116, 104, 101, 32, 116, 119, 111, 32, 103, 105, 118, 101, 110, 32, > 118, 97, 108, 117, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 116, 50, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 50, 32, 50, 53, 37, 44, 55, 53, 37, 10, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 50, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, > 36, 42, 10, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 50, 32, 58, > 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 72, 97, 114, 100, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 105, 109, 97, 103, 101, 34, > 36, 95, 95, 115, 34, 32, 98, 101, 116, 119, 101, 101, 110, 32, 118, 97, > 108, 117, 101, 115, 32, 36, 49, 32, 97, 110, 100, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 109, 61, 36, 49, 32, 77, 61, 36, > 50, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 49, 125, 32, 109, 61, 123, 105, 109, 43, 40, > 105, 77, 45, 105, 109, 41, 42, 36, 109, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 50, 125, 32, 77, 61, 123, 105, 109, 43, 40, > 105, 77, 45, 105, 109, 41, 42, 36, 77, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 32, 123, 48, 46, 53, 42, 40, 36, 109, 43, 36, 77, > 41, 125, 32, 45, 97, 98, 115, 32, 45, 108, 101, 32, 123, 48, 46, 53, > 42, 97, 98, 115, 40, 36, 77, 45, 36, 109, 41, 125, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 114, 108, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, 110, 99, > 111, 109, 112, 114, 101, 115, 115, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 50, 120, 78, 32, 100, 97, 116, 97, 32, 109, 97, 116, 114, 105, 99, > 101, 115, 44, 32, 117, 115, 105, 110, 103, 32, 82, 76, 69, 32, 97, 108, > 103, 111, 114, 105, 116, 104, 109, 46, 10, 117, 110, 99, 111, 109, 112, 114, > 101, 115, 115, 95, 114, 108, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 85, 110, 99, 111, 109, 112, 114, 101, 115, 115, 32, 100, 97, > 116, 97, 32, 118, 101, 99, 116, 111, 114, 36, 63, 44, 32, 117, 115, 105, > 110, 103, 32, 82, 76, 69, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 121, 32, 119, 104, 100, > 115, 61, 64, 123, 48, 44, 48, 45, 51, 125, 32, 105, 109, 61, 64, 123, > 48, 44, 52, 125, 32, 105, 115, 95, 98, 105, 110, 97, 114, 121, 95, 100, > 97, 116, 97, 61, 64, 123, 48, 44, 53, 125, 32, 45, 114, 111, 119, 115, > 32, 54, 44, 49, 48, 48, 37, 10, 45, 105, 102, 32, 36, 105, 115, 95, > 98, 105, 110, 97, 114, 121, 95, 100, 97, 116, 97, 10, 45, 45, 103, 101, > 32, 48, 32, 45, 97, 98, 115, 91, 48, 93, 32, 45, 97, 32, 120, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 108, 116, 91, 45, 49, 93, 32, 48, > 32, 40, 48, 59, 49, 59, 49, 41, 32, 45, 101, 114, 111, 100, 101, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 97, 32, 120, > 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 49, 10, 45, 45, 108, > 116, 32, 48, 32, 40, 49, 59, 49, 59, 48, 41, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 50, 32, 45, > 43, 91, 45, 49, 93, 32, 49, 10, 45, 114, 118, 32, 45, 97, 98, 115, > 91, 45, 49, 93, 32, 45, 97, 32, 120, 32, 45, 100, 105, 115, 99, 97, > 114, 100, 32, 45, 49, 10, 45, 114, 32, 50, 44, 123, 104, 47, 50, 125, > 44, 49, 44, 49, 44, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 115, 32, 121, 44, 45, 50, 53, 54, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 91, 48, 93, > 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, > 91, 48, 93, 32, 48, 46, 53, 10, 45, 105, 91, 49, 93, 32, 40, 123, > 50, 42, 104, 125, 59, 123, 104, 125, 41, 10, 45, 115, 91, 45, 49, 93, > 32, 120, 44, 50, 32, 45, 99, 117, 109, 117, 108, 91, 45, 50, 93, 32, > 115, 105, 122, 61, 64, 123, 45, 50, 44, 45, 49, 125, 10, 45, 45, 115, > 104, 105, 102, 116, 91, 45, 50, 93, 32, 48, 44, 49, 32, 45, 45, 91, > 45, 51, 93, 32, 49, 32, 45, 114, 118, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 122, 91, 45, 51, 44, 45, 49, 93, 32, 48, 44, 50, 32, 45, > 97, 91, 45, 51, 44, 45, 49, 93, 32, 120, 10, 45, 105, 91, 51, 93, > 32, 40, 50, 44, 48, 44, 49, 59, 50, 44, 123, 50, 42, 104, 45, 50, > 125, 44, 123, 50, 42, 104, 45, 49, 125, 41, 32, 45, 114, 91, 51, 93, > 32, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, > 117, 110, 100, 91, 51, 93, 10, 45, 114, 91, 52, 93, 32, 51, 32, 49, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 32, 45, 121, 32, 45, > 97, 32, 121, 10, 36, 115, 105, 122, 32, 45, 111, 98, 106, 101, 99, 116, > 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, > 32, 120, 32, 45, 114, 32, 36, 119, 104, 100, 115, 44, 45, 49, 32, 45, > 43, 32, 36, 105, 109, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, > 114, 101, 112, 101, 97, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 109, 111, 118, 101, 32, 114, 101, 112, 101, 116, 105, 116, 105, 111, > 110, 32, 111, 102, 32, 97, 100, 106, 97, 99, 101, 110, 116, 32, 118, 97, > 108, 117, 101, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 40, 49, 59, 49, 59, 49, 59, 49, 59, 49, 59, 50, > 59, 50, 59, 50, 59, 51, 59, 52, 59, 52, 59, 52, 59, 53, 59, 53, > 59, 53, 41, 32, 45, 45, 117, 110, 114, 101, 112, 101, 97, 116, 10, 117, > 110, 114, 101, 112, 101, 97, 116, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, 114, 101, 112, 101, 116, 105, > 116, 105, 111, 110, 32, 111, 102, 32, 97, 100, 106, 97, 99, 101, 110, 116, > 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 10, 45, 121, 32, 120, 32, 40, 123, 64, 123, 48, > 44, 45, 49, 125, 43, 49, 125, 41, 32, 45, 97, 32, 120, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 50, 10, 45, 102, 91, 45, 49, 93, 32, 39, > 62, 105, 102, 40, 121, 61, 61, 48, 44, 105, 44, 105, 102, 40, 105, 40, > 120, 44, 48, 41, 61, 61, 105, 40, 120, 43, 49, 44, 48, 41, 44, 45, > 49, 44, 120, 41, 41, 39, 10, 45, 122, 32, 48, 44, 123, 119, 45, 50, > 125, 32, 45, 115, 32, 121, 44, 50, 32, 45, 100, 105, 115, 99, 97, 114, > 100, 91, 49, 93, 32, 45, 49, 32, 45, 109, 97, 112, 91, 49, 93, 32, > 91, 48, 93, 10, 45, 114, 109, 91, 48, 93, 32, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 118, 101, 99, > 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, 108, > 100, 115, 32, 116, 111, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, > 105, 110, 103, 32, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 116, 101, > 110, 115, 111, 114, 32, 102, 105, 101, 108, 100, 115, 46, 10, 118, 101, 99, > 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 118, 101, > 99, 116, 111, 114, 32, 102, 105, 101, 108, 100, 36, 63, 32, 116, 111, 32, > 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 116, 101, 110, 115, 111, 114, > 32, 102, 105, 101, 108, 100, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 45, 115, 32, 99, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 50, 125, 32, 45, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 115, 113, 114, 91, 45, 51, > 93, 10, 45, 101, 108, 105, 102, 32, 123, 64, 35, 61, 61, 51, 125, 32, > 45, 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, 45, 42, 91, 45, 51, > 93, 32, 91, 45, 50, 93, 32, 45, 45, 115, 113, 114, 91, 45, 51, 93, > 32, 45, 42, 91, 45, 53, 44, 45, 52, 93, 32, 91, 45, 54, 93, 32, > 45, 115, 113, 114, 91, 45, 54, 93, 10, 45, 101, 108, 115, 101, 32, 45, > 101, 114, 114, 111, 114, 91, 48, 45, 45, 52, 93, 32, 34, 67, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 118, 101, 99, 116, 111, 114, 50, 116, 101, > 110, 115, 111, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, > 109, 97, 103, 101, 32, 91, 34, 123, 64, 35, 45, 36, 62, 45, 49, 125, > 34, 93, 32, 58, 32, 68, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, > 34, 123, 119, 125, 34, 44, 34, 123, 104, 125, 34, 44, 34, 123, 100, 125, > 34, 44, 34, 123, 115, 125, 34, 32, 100, 111, 101, 115, 32, 110, 111, 116, > 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 32, 97, 32, 102, 105, 101, > 108, 100, 32, 111, 102, 32, 50, 100, 32, 111, 114, 32, 51, 100, 32, 118, > 101, 99, 116, 111, 114, 115, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, > 67, 111, 108, 111, 114, 115, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, > 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 32, 34, 99, 111, 109, > 109, 97, 110, 100, 34, 44, 95, 99, 104, 97, 110, 110, 101, 108, 115, 61, > 123, 32, 97, 108, 108, 61, 48, 32, 124, 32, 114, 103, 98, 97, 61, 49, > 32, 124, 32, 114, 103, 98, 61, 50, 32, 124, 32, 121, 61, 51, 32, 124, > 32, 99, 98, 99, 114, 61, 52, 32, 124, 32, 99, 98, 61, 53, 32, 124, > 32, 99, 114, 61, 54, 32, 124, 32, 108, 61, 55, 32, 124, 32, 97, 98, > 61, 56, 32, 124, 32, 97, 61, 57, 32, 124, 32, 98, 61, 49, 48, 32, > 124, 32, 104, 61, 49, 49, 32, 124, 32, 115, 61, 49, 50, 32, 124, 32, > 118, 61, 49, 51, 32, 124, 32, 107, 61, 49, 52, 32, 124, 32, 99, 103, > 61, 49, 53, 32, 124, 32, 99, 104, 61, 49, 54, 32, 124, 32, 99, 61, > 49, 55, 32, 124, 32, 72, 61, 49, 56, 32, 124, 32, 114, 61, 49, 57, > 32, 124, 32, 103, 61, 50, 48, 32, 124, 32, 98, 61, 50, 49, 32, 124, > 32, 97, 108, 112, 104, 97, 61, 61, 50, 50, 32, 125, 44, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 61, 123, 32, 48, 61, 99, 117, 116, 32, > 124, 32, 49, 61, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 111, 110, 32, 99, 104, 111, 115, 101, 110, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, > 102, 32, 101, 97, 99, 104, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 110, 111, 114, 109, 97, 108, 105, 122, 101, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 45, 98, 108, 117, 114, 32, 50, 34, 44, 53, 10, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 51, 61, 48, 125, 10, 45, 105, 102, 32, 123, 123, 36, > 50, 39, 61, 61, 39, 97, 108, 108, 125, 34, 32, 124, 124, 32, 34, 123, > 36, 50, 39, 61, 61, 39, 48, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 95, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 36, 49, 34, 10, > 45, 105, 102, 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 108, 115, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 114, 103, 98, 97, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, > 61, 39, 49, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, > 39, 32, 111, 110, 32, 82, 71, 66, 65, 32, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 36, 49, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, > 36, 50, 39, 61, 61, 39, 114, 103, 98, 125, 34, 32, 124, 124, 32, 34, > 123, 36, 50, 39, 61, 61, 39, 50, 125, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 82, 71, 66, 32, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 10, 45, 105, > 102, 32, 36, 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, > 39, 61, 61, 39, 121, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 51, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, > 49, 39, 32, 111, 110, 32, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, > 89, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 48, 93, 32, 45, 115, > 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 32, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, 10, 45, 105, > 102, 32, 36, 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, > 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, > 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, > 39, 99, 98, 99, 114, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 52, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, > 49, 39, 32, 111, 110, 32, 98, 108, 117, 101, 32, 97, 110, 100, 32, 114, > 101, 100, 32, 99, 104, 114, 111, 109, 105, 110, 97, 110, 99, 101, 115, 32, > 67, 98, 67, 114, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 48, 93, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 48, 93, > 32, 45, 115, 91, 48, 93, 32, 99, 32, 45, 97, 91, 49, 44, 50, 93, > 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, 44, 49, 10, 45, 105, 102, > 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 49, 93, > 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, > 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 99, 98, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, > 53, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 98, 108, 117, 101, 32, 99, 104, 114, 111, 109, 105, 110, 97, > 110, 99, 101, 32, 67, 98, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, > 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, > 32, 48, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, > 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, > 36, 50, 39, 61, 61, 39, 99, 114, 125, 34, 32, 124, 124, 32, 34, 123, > 36, 50, 39, 61, 61, 39, 54, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 114, 101, 100, 32, 99, 104, 114, > 111, 109, 105, 110, 97, 110, 99, 101, 32, 67, 114, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 121, > 99, 98, 99, 114, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, > 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 50, 93, 32, 48, 10, 45, 105, 102, 32, 36, 51, 32, 45, > 110, 91, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, > 32, 45, 99, 91, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 121, > 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 108, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 55, 125, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 108, 105, 103, > 104, 116, 110, 101, 115, 115, 32, 76, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, > 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 48, 93, > 32, 50, 46, 53, 53, 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 32, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, 32, 45, 47, > 91, 48, 93, 32, 50, 46, 53, 53, 10, 45, 105, 102, 32, 36, 51, 32, > 45, 110, 91, 48, 93, 32, 48, 44, 49, 48, 48, 32, 45, 101, 108, 115, > 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 49, 48, 48, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, > 108, 97, 98, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, > 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 97, 98, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 56, 125, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 97, 45, 98, > 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, > 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, > 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 43, 91, 49, > 93, 32, 56, 54, 32, 45, 42, 91, 49, 93, 32, 49, 46, 51, 56, 53, > 56, 55, 32, 45, 43, 91, 50, 93, 32, 49, 48, 56, 32, 45, 42, 91, > 50, 93, 32, 49, 46, 50, 53, 54, 49, 54, 10, 45, 97, 91, 49, 44, > 50, 93, 32, 99, 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, 34, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, 44, 49, 32, 45, > 115, 91, 49, 93, 32, 99, 10, 45, 47, 91, 49, 93, 32, 49, 46, 51, > 56, 53, 56, 55, 32, 45, 45, 91, 49, 93, 32, 56, 54, 32, 45, 47, > 91, 50, 93, 32, 49, 46, 50, 53, 54, 49, 54, 32, 45, 45, 91, 50, > 93, 32, 49, 48, 56, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, > 49, 93, 32, 45, 56, 54, 44, 57, 56, 32, 45, 110, 91, 50, 93, 32, > 45, 49, 48, 56, 44, 57, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 97, 98, 50, 114, 103, > 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, > 39, 61, 61, 39, 97, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 57, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, > 49, 39, 32, 111, 110, 32, 97, 45, 99, 104, 97, 110, 110, 101, 108, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, > 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, > 103, 98, 50, 108, 97, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, > 99, 10, 45, 43, 91, 49, 93, 32, 56, 54, 32, 45, 42, 91, 49, 93, > 32, 49, 46, 51, 56, 53, 56, 55, 32, 45, 95, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, > 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, > 32, 45, 47, 91, 49, 93, 32, 49, 46, 51, 56, 53, 56, 55, 32, 45, > 45, 91, 49, 93, 32, 56, 54, 10, 45, 105, 102, 32, 36, 51, 32, 45, > 110, 91, 49, 93, 32, 45, 56, 54, 44, 57, 56, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 97, > 98, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, > 123, 123, 36, 50, 39, 61, 61, 39, 98, 125, 34, 32, 124, 124, 32, 34, > 123, 36, 50, 39, 61, 61, 39, 49, 48, 125, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 98, 45, 99, 104, 97, > 110, 110, 101, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 48, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, 48, 93, 32, 45, > 115, 91, 48, 93, 32, 99, 10, 45, 43, 91, 50, 93, 32, 49, 48, 56, > 32, 45, 42, 91, 50, 93, 32, 49, 46, 50, 53, 54, 49, 54, 32, 45, > 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 50, 93, 32, 48, 32, 45, 47, 91, 50, 93, 32, 49, 46, 50, > 53, 54, 49, 54, 32, 45, 45, 91, 50, 93, 32, 49, 48, 56, 10, 45, > 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 45, 49, 48, 56, > 44, 57, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, > 50, 93, 32, 99, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 48, 93, > 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 104, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, > 49, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 104, 117, 101, 32, 72, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, > 114, 103, 98, 91, 48, 93, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 48, 93, > 32, 48, 46, 55, 48, 56, 51, 51, 51, 32, 45, 95, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 34, 36, > 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, > 48, 32, 45, 47, 91, 48, 93, 32, 48, 46, 55, 48, 56, 51, 51, 51, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, > 51, 54, 48, 32, 45, 101, 108, 115, 101, 32, 45, 37, 91, 48, 93, 32, > 51, 54, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, > 50, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, 93, > 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, > 115, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, > 50, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 83, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, > 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 114, > 103, 98, 50, 104, 115, 118, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, > 99, 10, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 95, 97, 112, > 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, > 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, > 93, 32, 48, 32, 45, 47, 91, 49, 93, 32, 50, 53, 53, 10, 45, 105, > 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 48, 44, 49, 32, 45, > 101, 108, 115, 101, 32, 45, 99, 91, 49, 93, 32, 48, 44, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, > 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 118, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, 51, 125, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 118, 97, > 108, 117, 101, 32, 86, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, > 91, 48, 93, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 48, 93, 32, > 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 50, 93, 32, 50, 53, > 53, 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 50, 93, 32, 48, 32, 45, 47, 91, 50, 93, 32, > 50, 53, 53, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 50, 93, > 32, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 50, 93, > 32, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, > 45, 50, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, > 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, > 39, 107, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, > 52, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, > 111, 110, 32, 107, 101, 121, 32, 99, 104, 97, 110, 110, 101, 108, 32, 75, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, > 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, > 114, 103, 98, 50, 99, 109, 121, 107, 91, 48, 93, 32, 45, 115, 91, 48, > 93, 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 51, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 51, 93, 32, 48, 10, 45, 105, 102, 32, > 36, 51, 32, 45, 110, 91, 51, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 108, 115, 101, 32, 45, 99, 91, 51, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 51, 93, 32, > 99, 32, 45, 99, 109, 121, 107, 50, 114, 103, 98, 91, 48, 93, 32, 45, > 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 99, 103, > 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, 53, > 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 99, 111, 109, 109, 97, 110, 100, 40, 115, 41, 32, 39, 36, 49, > 39, 32, 111, 110, 32, 103, 114, 101, 101, 110, 32, 99, 104, 114, 111, 109, > 105, 110, 97, 110, 99, 101, 32, 67, 103, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, > 95, 114, 103, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 32, > 45, 114, 118, 91, 49, 44, 50, 93, 32, 45, 97, 91, 48, 45, 50, 93, > 32, 99, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 48, 93, > 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, 36, 49, > 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 48, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, > 48, 45, 50, 93, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, 114, 103, > 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 32, 45, 114, 118, > 91, 49, 44, 50, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, > 50, 39, 61, 61, 39, 99, 104, 125, 34, 32, 124, 124, 32, 34, 123, 36, > 50, 39, 61, 61, 39, 49, 54, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 99, 45, 104, 32, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, > 91, 48, 93, 32, 45, 114, 103, 98, 50, 108, 99, 104, 91, 48, 93, 32, > 45, 115, 91, 48, 93, 32, 99, 10, 45, 42, 91, 49, 93, 32, 50, 46, > 53, 53, 32, 45, 43, 91, 50, 93, 32, 123, 112, 105, 125, 32, 45, 42, > 91, 50, 93, 32, 123, 50, 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, > 10, 45, 97, 91, 49, 44, 50, 93, 32, 99, 32, 45, 95, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, > 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, > 32, 48, 44, 49, 32, 45, 115, 91, 49, 93, 32, 99, 10, 45, 47, 91, > 49, 93, 32, 50, 46, 53, 53, 32, 45, 47, 91, 50, 93, 32, 123, 50, > 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, 32, 45, 45, 91, 50, 93, > 32, 123, 112, 105, 125, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, > 49, 93, 32, 48, 44, 49, 48, 48, 32, 45, 110, 91, 50, 93, 32, 45, > 123, 112, 105, 125, 44, 123, 112, 105, 125, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 99, 104, 50, > 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, > 36, 50, 39, 61, 61, 39, 99, 125, 34, 32, 124, 124, 32, 34, 123, 36, > 50, 39, 61, 61, 39, 49, 55, 125, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 36, 49, 39, 32, 111, 110, 32, 99, 45, 99, 104, 97, 110, 110, > 101, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, > 32, 45, 114, 103, 98, 50, 108, 99, 104, 91, 48, 93, 32, 45, 115, 91, > 48, 93, 32, 99, 10, 45, 42, 91, 49, 93, 32, 50, 46, 53, 53, 32, > 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 49, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 49, 93, 32, 48, 32, 45, 47, 91, 49, 93, 32, 50, 46, > 53, 53, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, 32, > 48, 44, 49, 48, 48, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, 49, > 93, 32, 48, 44, 49, 48, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 108, 99, 104, 50, 114, 103, > 98, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, > 39, 61, 61, 39, 104, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, > 61, 61, 39, 49, 56, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, > 36, 49, 39, 32, 111, 110, 32, 104, 45, 99, 104, 97, 110, 110, 101, 108, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, > 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, > 114, 103, 98, 50, 108, 99, 104, 91, 48, 93, 32, 45, 115, 91, 48, 93, > 32, 99, 10, 45, 43, 91, 50, 93, 32, 123, 112, 105, 125, 32, 45, 42, > 91, 50, 93, 32, 123, 50, 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, > 32, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 50, 93, 32, 34, 36, 49, 34, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 50, 93, 32, 48, 32, 45, 47, 91, 50, 93, 32, 123, > 50, 53, 53, 47, 40, 50, 42, 112, 105, 41, 125, 32, 45, 45, 91, 50, > 93, 32, 123, 112, 105, 125, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, > 91, 50, 93, 32, 45, 123, 112, 105, 125, 44, 123, 112, 105, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, > 45, 108, 99, 104, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 114, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 49, 57, 125, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 114, 101, > 100, 32, 99, 104, 97, 110, 110, 101, 108, 32, 82, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, > 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 48, 93, 32, 34, 36, 49, 34, 10, 45, 105, 102, 32, 36, > 51, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, > 108, 115, 101, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 103, 114, 97, 121, 91, > 48, 93, 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, 61, > 61, 39, 103, 125, 34, 32, 124, 124, 32, 34, 123, 36, 50, 39, 61, 61, > 39, 50, 48, 125, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, 36, 49, > 39, 32, 111, 110, 32, 103, 114, 101, 101, 110, 32, 99, 104, 97, 110, 110, > 101, 108, 32, 71, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 10, 45, 95, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 34, > 36, 49, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 91, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 116, 111, 95, 103, 114, 97, 121, 91, 49, 93, 10, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 123, 36, 50, 39, 61, 61, 39, 98, 125, 34, 32, 124, > 124, 32, 34, 123, 36, 50, 39, 61, 61, 39, 50, 49, 125, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 98, 108, > 117, 101, 32, 99, 104, 97, 110, 110, 101, 108, 32, 66, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, > 32, 99, 10, 45, 95, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 50, 93, 32, 34, 36, 49, 34, 10, 45, 105, 102, 32, > 36, 51, 32, 45, 110, 91, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 108, 115, 101, 32, 45, 99, 91, 50, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 103, 114, 97, 121, > 91, 50, 93, 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 123, 36, 50, 39, > 61, 61, 39, 97, 108, 112, 104, 97, 125, 34, 32, 124, 124, 32, 34, 123, > 36, 50, 39, 61, 61, 39, 50, 50, 125, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 97, 108, 112, 104, 97, 32, > 99, 104, 97, 110, 110, 101, 108, 32, 65, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 115, 32, 99, 10, 45, 95, 97, 112, > 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 51, 93, 32, > 34, 36, 49, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 110, 91, 51, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, > 91, 51, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 103, 114, 97, 121, 91, 51, 93, 10, 45, 97, 32, > 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 10, 36, 123, 49, 45, > 45, 49, 125, 32, 45, 107, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 97, 117, 116, 111, 105, 110, 100, 101, 120, 32, 58, 32, 110, 98, 95, > 99, 111, 108, 111, 114, 115, 62, 48, 44, 48, 60, 61, 95, 100, 105, 116, > 104, 101, 114, 105, 110, 103, 60, 61, 49, 44, 95, 109, 101, 116, 104, 111, > 100, 61, 123, 32, 48, 61, 109, 101, 100, 105, 97, 110, 45, 99, 117, 116, > 32, 124, 32, 49, 61, 107, 45, 109, 101, 97, 110, 115, 32, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 100, 101, 120, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, > 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 97, > 100, 97, 112, 116, 101, 100, 32, 99, 111, 108, 111, 114, 109, 97, 112, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 105, 116, 104, > 101, 114, 105, 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 101, > 116, 104, 111, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 52, 32, 45, > 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 56, 32, > 45, 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 49, > 54, 10, 97, 117, 116, 111, 105, 110, 100, 101, 120, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, > 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, > 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 100, 101, > 120, 32, 99, 111, 108, 111, 114, 115, 32, 105, 110, 32, 105, 109, 97, 103, > 101, 115, 36, 63, 32, 98, 121, 32, 97, 100, 97, 112, 116, 101, 100, 32, > 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, 104, 32, 36, 49, > 32, 101, 110, 116, 114, 105, 101, 115, 44, 32, 100, 105, 116, 104, 101, 114, > 105, 110, 103, 32, 108, 101, 118, 101, 108, 32, 36, 50, 32, 97, 110, 100, > 32, 34, 92, 10, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, > 51, 44, 107, 45, 109, 101, 97, 110, 115, 44, 109, 101, 100, 105, 97, 110, > 45, 99, 117, 116, 125, 34, 32, 109, 101, 116, 104, 111, 100, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 119, 62, 104, 125, > 32, 45, 105, 102, 32, 123, 119, 62, 50, 53, 54, 125, 32, 45, 45, 114, > 50, 100, 120, 32, 50, 53, 54, 32, 45, 101, 108, 115, 101, 32, 91, 48, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, > 105, 102, 32, 123, 104, 62, 50, 53, 54, 125, 32, 45, 45, 114, 50, 100, > 121, 32, 50, 53, 54, 32, 45, 101, 108, 115, 101, 32, 91, 48, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 99, > 111, 108, 111, 114, 109, 97, 112, 91, 49, 93, 32, 36, 49, 44, 36, 51, > 44, 48, 10, 45, 105, 110, 100, 101, 120, 91, 48, 93, 32, 91, 49, 93, > 44, 36, 50, 44, 49, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 98, 97, 121, 101, 114, 50, 114, 103, 98, 32, 58, > 32, 95, 71, 77, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 44, > 95, 82, 66, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 49, 44, > 95, 82, 66, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 50, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, 97, 110, 115, 102, 111, > 114, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 82, 71, 66, 45, > 66, 97, 121, 101, 114, 32, 115, 97, 109, 112, 108, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 116, 111, 32, 99, 111, 108, 111, 114, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 71, 77, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 82, 66, > 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 82, 66, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 50, 61, 48, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, > 103, 98, 50, 98, 97, 121, 101, 114, 32, 48, 32, 45, 45, 98, 97, 121, > 101, 114, 50, 114, 103, 98, 32, 49, 44, 49, 44, 48, 46, 53, 10, 98, > 97, 121, 101, 114, 50, 114, 103, 98, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, 49, 125, 44, 36, > 123, 51, 61, 48, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 84, 114, 97, 110, 115, 102, 111, 114, 109, 32, 82, 71, 66, 45, 66, > 97, 121, 101, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, > 116, 104, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 40, 36, > 49, 44, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, > 120, 112, 97, 110, 100, 95, 120, 32, 123, 34, 50, 32, 43, 32, 52, 42, > 36, 49, 34, 125, 44, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 121, > 32, 123, 34, 50, 32, 43, 32, 52, 42, 36, 49, 34, 125, 44, 48, 10, > 40, 45, 49, 44, 49, 59, 49, 44, 45, 49, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, > 44, 48, 44, 50, 10, 45, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 10, 40, 48, 46, 50, 53, 44, 48, 46, 53, 44, 48, 46, 50, 53, > 41, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, > 45, 49, 93, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 98, 91, 45, 49, 93, 32, 36, 49, 10, 45, 42, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 10, 45, 45, 91, 45, 51, 44, 45, 50, 93, 10, 40, > 49, 44, 45, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 50, 10, 45, > 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 10, 40, 48, 46, 50, 53, > 44, 48, 46, 53, 44, 48, 46, 50, 53, 41, 32, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 99, 111, > 110, 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, 117, 114, 95, 121, 91, > 45, 49, 93, 32, 36, 50, 32, 45, 98, 108, 117, 114, 95, 120, 91, 45, > 49, 93, 32, 36, 51, 10, 40, 49, 59, 45, 49, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, > 49, 44, 48, 44, 50, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, 52, > 93, 10, 40, 48, 46, 50, 53, 44, 48, 46, 53, 44, 48, 46, 50, 53, > 41, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, > 45, 49, 93, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 98, 108, 117, 114, 95, 120, 91, 45, 49, 93, 32, 36, 50, 32, 45, 98, > 108, 117, 114, 95, 121, 91, 45, 49, 93, 32, 36, 51, 10, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, 50, 10, > 40, 50, 44, 48, 59, 48, 44, 45, 50, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, > 48, 44, 50, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, > 45, 45, 91, 45, 52, 44, 45, 49, 93, 10, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 10, 45, 109, 105, 120, 95, 114, 103, 98, 91, 45, > 49, 93, 32, 49, 44, 45, 49, 44, 50, 44, 49, 44, 49, 44, 48, 44, > 49, 44, 45, 49, 44, 45, 50, 10, 45, 115, 104, 114, 105, 110, 107, 95, > 120, 32, 123, 34, 50, 32, 43, 32, 52, 42, 36, 49, 34, 125, 44, 48, > 32, 45, 115, 104, 114, 105, 110, 107, 95, 121, 32, 123, 34, 50, 32, 43, > 32, 52, 42, 36, 49, 34, 125, 44, 48, 10, 45, 99, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 109, 121, 50, 114, > 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 102, 114, 111, 109, 32, 67, 77, 89, 32, 116, 111, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, > 99, 109, 121, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 102, 114, 111, 109, 32, 67, 77, 89, 32, 116, 111, 32, 82, > 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 99, 109, 121, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 109, 121, 107, 50, > 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, > 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 67, 77, 89, 75, 32, 116, > 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, > 46, 10, 99, 109, 121, 107, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 67, 77, 89, 75, 32, > 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, > 32, 45, 45, 47, 91, 45, 49, 93, 32, 45, 50, 53, 53, 32, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 48, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 43, 91, 48, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 97, 32, 99, 32, 45, 99, 109, 121, 50, 114, 103, 98, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, > 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 61, 49, 44, 95, > 109, 101, 116, 104, 111, 100, 61, 123, 32, 48, 61, 109, 101, 100, 105, 97, > 110, 45, 99, 117, 116, 32, 124, 32, 49, 61, 107, 45, 109, 101, 97, 110, > 115, 32, 125, 44, 95, 115, 111, 114, 116, 95, 118, 101, 99, 116, 111, 114, > 115, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 98, 101, > 115, 116, 45, 102, 105, 116, 116, 105, 110, 103, 32, 99, 111, 108, 111, 114, > 109, 97, 112, 32, 119, 105, 116, 104, 32, 39, 110, 98, 95, 99, 111, 108, > 111, 114, 115, 39, 32, 101, 110, 116, 114, 105, 101, 115, 44, 32, 116, 111, > 32, 105, 110, 100, 101, 120, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 109, 101, 116, 104, 111, 100, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 115, 111, 114, 116, 95, 118, 101, 99, 116, 111, 114, 115, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 99, 111, 108, 111, 114, 109, 97, 112, > 91, 48, 93, 32, 52, 32, 45, 45, 99, 111, 108, 111, 114, 109, 97, 112, > 91, 48, 93, 32, 56, 32, 45, 45, 99, 111, 108, 111, 114, 109, 97, 112, > 91, 48, 93, 32, 49, 54, 10, 99, 111, 108, 111, 114, 109, 97, 112, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, > 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 49, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 115, 116, 105, 109, 97, > 116, 101, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, 104, > 32, 36, 49, 32, 101, 110, 116, 114, 105, 101, 115, 32, 102, 111, 114, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 98, 121, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 107, 45, 109, 101, 97, > 110, 115, 44, 109, 101, 100, 105, 97, 110, 45, 99, 117, 116, 125, 34, 32, > 109, 101, 116, 104, 111, 100, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 114, 32, 123, 119, 42, 104, 125, 44, 49, 44, 49, 44, 49, 48, 48, > 37, 44, 45, 49, 10, 45, 105, 102, 32, 123, 33, 36, 50, 125, 32, 45, > 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 36, 49, 10, 45, 101, 108, > 115, 101, 10, 109, 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, 125, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, > 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 36, 49, 32, 45, 45, 105, > 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, 91, 45, 51, 44, 45, > 49, 93, 10, 45, 100, 111, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 115, 125, 10, 45, 115, 104, 91, 48, 93, 32, 36, 62, 44, 36, 62, 32, > 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, > 123, 36, 49, 42, 50, 53, 54, 125, 44, 48, 44, 123, 36, 49, 42, 50, > 53, 54, 45, 49, 125, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 105, > 91, 45, 50, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 49, 44, 39, > 120, 39, 32, 45, 114, 91, 45, 50, 93, 32, 123, 119, 125, 44, 49, 44, > 49, 44, 49, 44, 48, 44, 50, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, > 44, 49, 44, 49, 44, 49, 44, 50, 32, 45, 109, 97, 120, 91, 45, 49, > 93, 32, 48, 46, 48, 49, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 100, 111, 110, 101, 32, 45, 97, 91, 50, 45, 45, 49, 93, 32, > 99, 10, 45, 45, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 97, > 98, 115, 91, 45, 50, 93, 32, 100, 105, 102, 102, 61, 123, 64, 123, 45, > 50, 44, 43, 125, 47, 119, 125, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 97, 110, 100, 91, 45, 50, 93, 32, 50, 53, 53, 32, 45, 45, 105, > 110, 100, 101, 120, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, 91, > 45, 51, 44, 45, 49, 93, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, > 100, 105, 102, 102, 62, 48, 46, 53, 125, 10, 45, 114, 109, 91, 45, 50, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 123, 40, 36, 77, 45, 36, 109, > 41, 47, 50, 53, 53, 125, 32, 45, 43, 91, 45, 49, 93, 32, 36, 109, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 51, 32, 45, > 45, 110, 111, 114, 109, 32, 45, 114, 118, 32, 45, 97, 32, 121, 32, 45, > 115, 111, 114, 116, 32, 43, 44, 120, 32, 45, 114, 111, 119, 115, 32, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 32, 34, 91, 99, 111, > 108, 111, 114, 109, 97, 112, 32, 111, 102, 32, 34, 64, 123, 45, 49, 44, > 98, 125, 34, 93, 34, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 95, 99, 111, 108, 111, 114, 109, 97, 112, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 10, 64, 35, 44, 123, 115, 125, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 10, 110, 61, 36, 62, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 123, 36, 110, 44, 115, 125, 32, 45, 115, 104, > 91, 36, 110, 93, 32, 36, 62, 44, 36, 62, 32, 45, 61, 91, 45, 50, > 93, 32, 123, 105, 102, 40, 119, 62, 49, 44, 105, 118, 44, 45, 49, 41, > 125, 44, 36, 110, 44, 36, 62, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 10, 99, 61, 64, 123, > 45, 49, 44, 67, 125, 10, 98, 61, 64, 123, 45, 97, 114, 103, 92, 32, > 49, 44, 36, 99, 125, 10, 97, 61, 64, 123, 45, 97, 114, 103, 92, 32, > 50, 44, 36, 99, 125, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, > 104, 105, 102, 116, 91, 36, 98, 93, 32, 48, 44, 48, 44, 48, 44, 123, > 45, 36, 97, 125, 44, 50, 32, 45, 115, 111, 114, 116, 91, 36, 98, 93, > 32, 43, 44, 120, 32, 45, 115, 104, 105, 102, 116, 91, 36, 98, 93, 32, > 48, 44, 48, 44, 48, 44, 36, 97, 44, 50, 32, 45, 115, 91, 36, 98, > 93, 32, 120, 44, 50, 10, 45, 100, 111, 110, 101, 10, 45, 114, 32, 49, > 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 97, 32, 120, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 111, 115, 101, 32, 97, 108, 108, 32, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 101, 97, 99, 104, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 44, 32, 117, > 115, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, > 114, 105, 116, 104, 109, 101, 116, 105, 99, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 32, 40, 43, 44, 45, 44, 111, 114, 44, 109, 105, 110, 44, 46, > 46, 46, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 49, 61, > 43, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 111, 109, 112, 111, > 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 97, 110, 100, 10, > 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 34, 43, 34, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 111, > 115, 101, 32, 97, 108, 108, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 111, 112, 101, 114, 97, 116, 111, 114, 32, 39, 36, 49, 39, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 104, 32, 48, 44, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 123, 45, 50, 44, 115, 125, > 45, 49, 125, 32, 45, 115, 104, 91, 45, 50, 93, 32, 123, 36, 62, 43, > 49, 125, 44, 123, 36, 62, 43, 49, 125, 32, 45, 108, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 45, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 114, 101, 99, > 116, 105, 111, 110, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 50, 100, 32, 100, 105, 114, 101, > 99, 116, 105, 111, 110, 32, 102, 105, 101, 108, 100, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 99, 32, 45, 98, 108, 117, 114, 32, 50, 32, 45, 111, 114, 105, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 45, 45, 100, 105, 114, 101, 99, 116, 105, > 111, 110, 50, 114, 103, 98, 10, 100, 105, 114, 101, 99, 116, 105, 111, 110, > 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 109, 112, 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, 112, 114, > 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, 100, > 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 32, 102, 105, 101, 108, 100, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 48, 44, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, > 44, 110, 125, 10, 45, 115, 32, 99, 32, 45, 99, 111, 109, 112, 108, 101, > 120, 50, 112, 111, 108, 97, 114, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 50, 93, 32, 48, 46, 48, 48, 49, 10, 45, 42, 91, 45, 49, 93, 32, > 123, 49, 56, 48, 47, 112, 105, 125, 32, 45, 37, 91, 45, 49, 93, 32, > 51, 54, 48, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 49, 32, 45, 109, 118, 91, 45, 51, 93, 32, 64, 35, 10, 45, > 105, 102, 32, 123, 105, 109, 33, 61, 105, 77, 125, 32, 45, 110, 91, 45, > 49, 93, 32, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 45, 102, 91, > 45, 49, 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, > 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 116, > 104, 101, 114, 101, 100, 98, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 114, 101, 97, 116, 101, 32, 100, 105, 116, 104, 101, 114, 101, 100, > 32, 66, 38, 87, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, > 32, 45, 100, 105, 116, 104, 101, 114, 101, 100, 98, 119, 91, 45, 49, 93, > 10, 100, 105, 116, 104, 101, 114, 101, 100, 98, 119, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 100, 105, > 116, 104, 101, 114, 101, 100, 32, 66, 38, 87, 32, 118, 101, 114, 115, 105, > 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 91, 48, 93, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, > 40, 48, 44, 50, 53, 53, 41, 32, 45, 105, 110, 100, 101, 120, 91, 48, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 99, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 105, > 108, 108, 95, 99, 111, 108, 111, 114, 39, 46, 10, 102, 99, 32, 58, 10, > 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, > 32, 43, 10, 45, 95, 102, 105, 108, 108, 95, 99, 111, 108, 111, 114, 32, > 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 108, 95, 99, > 111, 108, 111, 114, 32, 58, 32, 99, 111, 108, 49, 44, 46, 46, 46, 44, > 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 105, > 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 99, 111, 108, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 99, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 102, 105, 108, 108, 95, 99, 111, > 108, 111, 114, 32, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 102, 105, > 108, 108, 95, 99, 111, 108, 111, 114, 32, 58, 10, 45, 118, 32, 45, 32, > 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, > 36, 48, 32, 36, 42, 10, 95, 102, 105, 108, 108, 95, 99, 111, 108, 111, > 114, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 70, 105, > 108, 108, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 119, > 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 94, 48, 125, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 115, 125, 32, 45, 115, 104, 91, 48, 93, 32, 36, 62, > 44, 36, 62, 32, 45, 102, 91, 45, 49, 93, 32, 123, 97, 114, 103, 40, > 49, 43, 36, 62, 44, 36, 123, 94, 48, 125, 41, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 107, 91, 48, 93, 10, 45, 110, 109, 32, 64, 123, 45, > 49, 44, 110, 125, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 58, 32, 95, 105, > 115, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, > 100, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 105, 115, 95, 111, 114, 105, 101, 110, > 116, 97, 116, 105, 111, 110, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 48, > 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 10, 103, > 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 98, 111, 111, 108, 40, 36, 123, 49, > 61, 48, 125, 41, 34, 10, 45, 97, 114, 103, 32, 49, 43, 33, 36, 49, > 44, 34, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 34, 44, > 34, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 117, 116, 101, 32, 82, 71, 66, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, 100, 32, 103, 114, 97, > 100, 105, 101, 110, 116, 32, 34, 64, 123, 125, 34, 111, 102, 32, 105, 109, > 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, > 114, 109, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 105, 102, 32, 36, 49, 32, 45, 103, 114, 97, > 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 50, 32, 45, 101, 108, 115, 101, 32, 45, 103, 32, 120, 121, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 99, 32, 45, 100, 105, 114, > 101, 99, 116, 105, 111, 110, 50, 114, 103, 98, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 104, 115, 105, 50, 114, 103, 98, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, > 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 102, 114, 111, 109, 32, 72, 83, 73, 32, 116, 111, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 115, 105, 56, 50, 114, 103, 98, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 72, 83, 73, 56, 32, 116, 111, 32, 82, 71, 66, 32, > 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 104, 115, 105, > 56, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 102, 114, 111, 109, 32, 72, 83, 73, 56, 32, 116, 111, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 95, 104, 115, 120, 56, 50, 114, 103, 98, 32, > 45, 104, 115, 105, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 115, 108, 50, 114, 103, 98, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 102, 114, 111, 109, 32, 72, 83, 76, 32, 116, 111, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 104, 115, 108, 56, 50, 114, 103, 98, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 102, 114, 111, 109, 32, 72, 83, 76, 56, 32, 116, 111, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 104, > 115, 108, 56, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 102, 114, 111, 109, 32, 72, 83, 76, 56, 32, 116, 111, 32, > 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 95, 104, 115, 120, 56, 50, 114, 103, > 98, 32, 45, 104, 115, 108, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 104, 115, 118, 50, 114, 103, 98, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 72, 83, 86, 32, 116, > 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, > 51, 54, 48, 59, 48, 44, 51, 54, 48, 94, 48, 44, 48, 59, 49, 44, > 49, 94, 49, 44, 49, 59, 49, 44, 49, 41, 32, 45, 114, 101, 115, 105, > 122, 101, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 44, 51, > 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, > 32, 104, 115, 118, 56, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, > 72, 83, 86, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, > 114, 32, 98, 97, 115, 101, 115, 46, 10, 104, 115, 118, 56, 50, 114, 103, > 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, > 109, 32, 72, 83, 86, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, > 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 95, 104, 115, 120, 56, 50, 114, 103, 98, 32, 45, 104, 115, 118, > 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, 95, 104, 115, 120, 56, 50, > 114, 103, 98, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, > 45, 49, 93, 32, 48, 46, 55, 48, 56, 51, 51, 51, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 50, > 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 108, 97, 98, 50, 108, 99, 104, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 76, 97, 98, 32, 116, 111, 32, 76, 99, 104, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 108, 97, 98, 50, > 108, 99, 104, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, > 114, 111, 109, 32, 76, 97, 98, 32, 116, 111, 32, 76, 99, 104, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 51, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 99, 111, > 109, 112, 108, 101, 120, 50, 112, 111, 108, 97, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 108, 97, 98, 50, 114, 103, 98, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 76, 97, 98, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 40, 53, 48, 44, 53, 48, 59, 53, 48, 44, > 53, 48, 94, 45, 51, 44, 51, 59, 45, 51, 44, 51, 94, 45, 51, 44, > 45, 51, 59, 51, 44, 51, 41, 32, 45, 114, 101, 115, 105, 122, 101, 32, > 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 44, 51, 32, 45, 108, > 97, 98, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, > 98, 56, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 76, 97, 98, > 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, > 97, 115, 101, 115, 46, 10, 108, 97, 98, 56, 50, 114, 103, 98, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 76, > 97, 98, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, 91, 36, 62, 93, > 32, 48, 44, 48, 32, 45, 47, 91, 45, 49, 93, 32, 50, 46, 53, 53, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, > 32, 49, 44, 49, 32, 45, 47, 91, 45, 49, 93, 32, 49, 46, 50, 55, > 53, 32, 45, 45, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, > 32, 45, 47, 91, 45, 49, 93, 32, 49, 46, 49, 53, 57, 48, 57, 32, > 45, 45, 91, 45, 49, 93, 32, 49, 49, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 108, 97, 98, 50, 114, 103, > 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 99, > 104, 50, 108, 97, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, > 116, 111, 32, 76, 97, 98, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 10, 108, 99, 104, 50, 108, 97, 98, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, > 116, 111, 32, 76, 97, 98, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 51, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 115, 32, 99, 32, 45, 112, 111, 108, 97, 114, 50, 99, 111, 109, 112, > 108, 101, 120, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 32, 99, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 108, 99, 104, 50, 114, 103, 98, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 108, 99, > 104, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 102, 114, 111, 109, 32, 76, 99, 104, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 108, 99, 104, 50, 108, 97, 98, 32, 45, 108, 97, > 98, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 108, 99, 104, 56, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, > 32, 76, 99, 104, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, > 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 108, 99, 104, 56, 50, 114, > 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, > 111, 109, 32, 76, 99, 104, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, 45, 49, 93, 32, > 50, 46, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 47, 91, 45, 49, 93, 32, > 49, 46, 56, 56, 56, 56, 57, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 47, 91, 45, > 49, 93, 32, 52, 48, 46, 53, 56, 52, 53, 32, 45, 45, 91, 45, 49, > 93, 32, 51, 46, 49, 52, 49, 53, 57, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 108, 99, 104, 50, 114, 103, 98, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 115, 82, > 71, 66, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 10, 108, 117, 109, 105, > 110, 97, 110, 99, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 111, 109, 112, 117, 116, 101, 32, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 115, 114, 103, 98, 50, 114, 103, 98, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 115, 61, 61, 51, 125, 32, 45, 115, 104, 32, > 48, 44, 48, 32, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, 45, > 115, 104, 91, 48, 93, 32, 50, 44, 50, 32, 45, 42, 91, 49, 93, 32, > 48, 46, 50, 57, 57, 32, 45, 42, 91, 50, 93, 32, 48, 46, 53, 56, > 55, 32, 45, 42, 91, 51, 93, 32, 48, 46, 49, 49, 52, 32, 45, 43, > 91, 49, 45, 51, 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 108, > 105, 102, 32, 123, 115, 33, 61, 49, 125, 32, 45, 110, 111, 114, 109, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 48, 32, 45, 114, 103, 98, 50, 115, 114, 103, > 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, > 120, 95, 114, 103, 98, 32, 58, 32, 97, 49, 49, 44, 97, 49, 50, 44, > 97, 49, 51, 44, 97, 50, 49, 44, 97, 50, 50, 44, 97, 50, 51, 44, > 97, 51, 49, 44, 97, 51, 50, 44, 97, 51, 51, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 51, 120, 51, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 97, 116, 114, 105, 120, 32, > 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 115, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 49, 49, 61, > 49, 39, 44, 32, 39, 97, 49, 50, 61, 97, 49, 51, 61, 97, 50, 49, > 61, 48, 39, 44, 32, 39, 97, 50, 50, 61, 49, 39, 44, 32, 39, 97, > 50, 51, 61, 97, 51, 49, 61, 97, 51, 50, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 97, 51, 51, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 105, 120, 95, 114, 103, 98, 32, 48, 44, 49, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 10, 109, 105, 120, 95, > 114, 103, 98, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, > 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 49, 125, 44, 36, > 123, 54, 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, > 61, 48, 125, 44, 36, 123, 57, 61, 49, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 109, 97, 116, 114, 105, 120, > 32, 91, 32, 36, 49, 32, 36, 50, 32, 36, 51, 32, 59, 32, 36, 52, > 32, 36, 53, 32, 36, 54, 32, 59, 32, 36, 55, 32, 36, 56, 32, 36, > 57, 32, 93, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 51, 44, 48, 44, 50, 32, 45, 109, 105, 120, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, > 59, 36, 52, 44, 36, 53, 44, 36, 54, 59, 36, 55, 44, 36, 56, 44, > 36, 57, 41, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, 58, 32, 95, 109, 97, > 120, 95, 105, 110, 99, 114, 101, 109, 101, 110, 116, 62, 61, 48, 44, 95, > 74, 78, 68, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, > 44, 95, 98, 105, 116, 115, 95, 100, 101, 112, 116, 104, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, > 32, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, 99, 111, 108, 111, > 114, 109, 97, 112, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 105, 110, 99, 114, 101, 109, 101, 110, 116, 32, 97, 110, > 100, 32, 112, 101, 114, 99, 101, 112, 116, 117, 97, 108, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 102, 32, 39, 74, 78, 68, 95, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 39, 32, 105, 115, 32, 48, 44, 32, 110, 111, 32, 112, 101, 114, > 99, 101, 112, 116, 117, 97, 108, 32, 99, 111, 110, 115, 116, 114, 97, 105, > 110, 116, 115, 32, 97, 114, 101, 32, 97, 112, 112, 108, 105, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, 97, 120, 95, 105, > 110, 99, 114, 101, 109, 101, 110, 116, 61, 53, 39, 44, 32, 39, 74, 78, > 68, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 46, 51, 39, > 32, 97, 110, 100, 32, 39, 98, 105, 116, 115, 95, 100, 101, 112, 116, 104, > 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, 53, 10, 112, 115, > 101, 117, 100, 111, 103, 114, 97, 121, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 53, 125, 41, > 32, 38, 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 50, 46, 51, 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, > 116, 40, 36, 123, 51, 61, 56, 125, 41, 32, 38, 38, 32, 36, 51, 62, > 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, > 114, 97, 116, 101, 32, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, > 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, 104, 32, 105, 110, > 99, 114, 101, 109, 101, 110, 116, 32, 36, 49, 44, 32, 74, 78, 68, 32, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 36, 50, 32, 97, 110, 100, > 32, 36, 51, 32, 98, 105, 116, 115, 32, 100, 101, 112, 116, 104, 46, 34, > 10, 45, 118, 32, 45, 10, 123, 114, 111, 117, 110, 100, 40, 50, 94, 36, > 51, 41, 125, 44, 49, 44, 49, 44, 51, 44, 39, 120, 39, 10, 45, 105, > 102, 32, 123, 33, 36, 49, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 123, 36, 49, 43, 49, 125, 44, > 123, 36, 49, 43, 49, 125, 44, 123, 36, 49, 43, 49, 125, 44, 49, 44, > 39, 120, 39, 32, 45, 45, 102, 91, 45, 49, 93, 32, 39, 121, 39, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 39, 122, 39, 32, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, 32, 123, > 119, 42, 104, 42, 100, 125, 44, 49, 44, 49, 44, 51, 44, 45, 49, 10, > 45, 102, 91, 45, 49, 93, 32, 39, 82, 61, 105, 40, 120, 44, 48, 44, > 48, 44, 48, 41, 59, 71, 61, 105, 40, 120, 44, 48, 44, 48, 44, 49, > 41, 59, 66, 61, 105, 40, 120, 44, 48, 44, 48, 44, 50, 41, 59, 105, > 102, 40, 109, 105, 110, 40, 82, 44, 71, 44, 66, 41, 44, 45, 49, 44, > 105, 41, 39, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, > 32, 99, 120, 121, 122, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, > 49, 93, 32, 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, > 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, > 109, 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 114, > 91, 45, 50, 93, 32, 123, 119, 42, 49, 48, 48, 125, 37, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 102, 91, 45, 49, 93, 32, 39, > 82, 61, 105, 40, 120, 44, 48, 44, 48, 44, 48, 41, 59, 71, 61, 105, > 40, 120, 44, 48, 44, 48, 44, 49, 41, 59, 66, 61, 105, 40, 120, 44, > 48, 44, 48, 44, 50, 41, 59, 105, 102, 40, 109, 97, 120, 40, 82, 44, > 71, 44, 66, 41, 62, 50, 94, 36, 51, 45, 49, 44, 45, 49, 44, 105, > 41, 39, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, > 99, 120, 121, 122, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, > 93, 32, 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, > 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, > 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 115, 114, 103, 98, > 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 103, 98, 50, 108, 97, > 98, 91, 45, 49, 93, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 115, 111, > 114, 116, 91, 45, 49, 93, 32, 43, 44, 120, 10, 45, 105, 102, 32, 123, > 33, 36, 50, 125, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, > 10, 45, 101, 108, 115, 101, 10, 45, 115, 91, 45, 49, 93, 32, 121, 32, > 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 49, 93, 32, > 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 102, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, > 10, 45, 108, 101, 91, 45, 49, 93, 32, 36, 50, 32, 45, 42, 91, 45, > 49, 93, 32, 39, 120, 43, 49, 39, 32, 45, 100, 105, 115, 99, 97, 114, > 100, 91, 45, 49, 93, 32, 48, 32, 45, 45, 91, 45, 49, 93, 32, 49, > 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 48, 48, 48, 48, 10, 45, 45, 115, 114, 103, 98, 50, 114, 103, 98, 91, > 45, 49, 93, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, > 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 48, 44, 123, > 49, 45, 50, 42, 40, 36, 62, 37, 50, 41, 125, 44, 48, 44, 48, 44, > 49, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 111, 114, > 109, 91, 45, 49, 93, 10, 45, 108, 101, 91, 45, 49, 93, 32, 36, 50, > 10, 45, 105, 102, 32, 123, 105, 109, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 91, 45, 49, 93, 32, 39, 121, 43, 49, 39, 32, 45, 100, 105, > 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 48, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 100, 111, 110, 101, > 10, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, > 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 91, 37, 93, 62, > 61, 48, 44, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, > 62, 61, 48, 44, 115, 114, 99, 49, 44, 115, 114, 99, 50, 44, 46, 46, > 46, 44, 100, 101, 115, 116, 49, 44, 100, 101, 115, 116, 50, 44, 46, 46, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, 97, > 99, 101, 32, 112, 105, 120, 101, 108, 115, 32, 102, 114, 111, 109, 47, 116, > 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, > 114, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 52, 48, 44, 51, > 44, 50, 48, 52, 44, 49, 53, 51, 44, 49, 49, 48, 44, 50, 53, 53, > 44, 48, 44, 48, 10, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, > 61, 48, 32, 38, 38, 32, 36, 50, 62, 61, 48, 34, 10, 45, 118, 32, > 45, 32, 45, 108, 91, 93, 32, 40, 36, 123, 51, 45, 45, 49, 125, 41, > 32, 45, 121, 32, 99, 32, 45, 115, 32, 99, 44, 50, 32, 99, 111, 108, > 49, 61, 64, 48, 32, 99, 111, 108, 50, 61, 64, 49, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 99, 111, 108, > 111, 114, 32, 40, 34, 36, 99, 111, 108, 49, 34, 41, 32, 98, 121, 32, > 99, 111, 108, 111, 114, 32, 40, 34, 36, 99, 111, 108, 50, 34, 41, 32, > 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, > 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 44, 49, 44, 49, 44, 49, > 48, 48, 37, 44, 36, 99, 111, 108, 49, 32, 45, 114, 91, 49, 93, 32, > 91, 48, 93, 10, 45, 105, 102, 32, 36, 49, 32, 45, 45, 91, 49, 93, > 32, 91, 48, 93, 32, 45, 110, 111, 114, 109, 91, 49, 93, 32, 45, 108, > 101, 91, 49, 93, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 61, > 61, 91, 49, 93, 32, 91, 48, 93, 32, 45, 108, 91, 49, 93, 32, 45, > 115, 32, 99, 32, 45, 97, 110, 100, 32, 45, 101, 110, 100, 108, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 91, 49, 93, 32, 36, 50, 10, 49, > 44, 49, 44, 49, 44, 64, 123, 48, 44, 115, 125, 44, 36, 99, 111, 108, > 50, 32, 45, 114, 91, 50, 93, 32, 91, 48, 93, 32, 45, 106, 91, 48, > 93, 32, 91, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 49, 93, 32, 45, 107, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 103, 98, 50, 98, 97, 121, 101, 114, 32, 58, 32, 95, 115, > 116, 97, 114, 116, 95, 112, 97, 116, 116, 101, 114, 110, 61, 48, 44, 95, > 99, 111, 108, 111, 114, 95, 103, 114, 105, 100, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 84, 114, 97, 110, 115, 102, 111, 114, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 99, 111, 108, 111, 114, 32, 105, > 109, 97, 103, 101, 115, 32, 116, 111, 32, 82, 71, 66, 45, 66, 97, 121, > 101, 114, 32, 115, 97, 109, 112, 108, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, > 114, 116, 95, 112, 97, 116, 116, 101, 114, 110, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 99, 111, 108, 111, 114, 95, 103, 114, 105, 100, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 103, 98, 50, 98, 97, 121, > 101, 114, 32, 48, 10, 114, 103, 98, 50, 98, 97, 121, 101, 114, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 125, 44, 36, 123, > 50, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 84, 114, > 97, 110, 115, 102, 111, 114, 109, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 116, 111, 32, 97, 32, 82, 71, 66, 45, 66, 97, 121, 101, 114, 32, 34, > 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 99, 111, > 108, 111, 114, 44, 109, 111, 110, 111, 99, 104, 114, 111, 109, 101, 125, 34, > 32, 103, 114, 105, 100, 44, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, > 102, 114, 111, 109, 32, 112, 97, 116, 116, 101, 114, 110, 32, 39, 36, 49, > 39, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 95, 114, 103, 98, 50, 98, 97, 121, 101, 114, 36, 49, > 32, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 48, 44, 50, 32, 45, > 42, 32, 45, 105, 102, 32, 123, 33, 36, 50, 125, 32, 45, 115, 32, 99, > 32, 45, 43, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, 114, 103, 98, > 50, 98, 97, 121, 101, 114, 48, 32, 58, 32, 40, 49, 44, 48, 59, 48, > 44, 48, 94, 48, 44, 49, 59, 49, 44, 48, 94, 48, 44, 48, 59, 48, > 44, 49, 41, 10, 95, 114, 103, 98, 50, 98, 97, 121, 101, 114, 49, 32, > 58, 32, 40, 48, 44, 48, 59, 48, 44, 49, 94, 48, 44, 49, 59, 49, > 44, 48, 94, 49, 44, 48, 59, 48, 44, 48, 41, 10, 95, 114, 103, 98, > 50, 98, 97, 121, 101, 114, 50, 32, 58, 32, 40, 48, 44, 48, 59, 49, > 44, 48, 94, 49, 44, 48, 59, 48, 44, 49, 94, 48, 44, 49, 59, 48, > 44, 48, 41, 10, 95, 114, 103, 98, 50, 98, 97, 121, 101, 114, 51, 32, > 58, 32, 40, 48, 44, 49, 59, 48, 44, 48, 94, 49, 44, 48, 59, 48, > 44, 49, 94, 48, 44, 48, 59, 49, 44, 48, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 103, 98, 50, 99, 109, 121, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, > 32, 82, 71, 66, 32, 116, 111, 32, 67, 77, 89, 32, 99, 111, 108, 111, > 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, > 98, 50, 99, 109, 121, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, > 103, 98, 50, 99, 109, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 67, 77, > 89, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 32, 45, 42, 32, 45, 49, 32, 45, 43, 32, 50, > 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 103, 98, 50, 99, 109, 121, 107, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 67, 77, 89, 75, 32, 99, 111, 108, 111, 114, 98, > 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, > 99, 109, 121, 107, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 114, 103, 98, 50, 99, 109, 121, 107, 32, 45, 115, 112, > 108, 105, 116, 32, 99, 32, 45, 102, 105, 108, 108, 91, 51, 93, 32, 48, > 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, 45, 99, 109, 121, 107, > 50, 114, 103, 98, 10, 114, 103, 98, 50, 99, 109, 121, 107, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 67, 77, 89, 75, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, > 98, 50, 99, 109, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 45, 109, > 105, 110, 32, 45, 45, 91, 48, 45, 50, 93, 32, 91, 45, 49, 93, 32, > 45, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, > 45, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 47, 91, 48, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, 32, 99, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 105, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, > 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, > 32, 72, 83, 73, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 105, 32, 45, > 115, 112, 108, 105, 116, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 103, 98, 50, 104, 115, 105, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 72, 83, 73, 56, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, > 50, 104, 115, 105, 56, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, > 103, 98, 50, 104, 115, 105, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, > 83, 73, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 104, 115, 105, 32, > 45, 95, 114, 103, 98, 50, 104, 115, 120, 56, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 108, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 72, 83, 76, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 108, 32, > 45, 115, 112, 108, 105, 116, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, > 103, 98, 50, 104, 115, 108, 32, 45, 45, 115, 112, 108, 105, 116, 32, 99, > 32, 45, 97, 100, 100, 91, 45, 51, 93, 32, 49, 48, 48, 32, 45, 109, > 111, 100, 91, 45, 51, 93, 32, 51, 54, 48, 32, 45, 97, 112, 112, 101, > 110, 100, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 108, > 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, > 104, 115, 108, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 72, 83, 76, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, > 108, 56, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, > 104, 115, 108, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, 83, 76, 56, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 103, 98, 50, 104, 115, 108, 32, 45, 95, 114, > 103, 98, 50, 104, 115, 120, 56, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 118, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, > 83, 86, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 118, 32, 45, 115, 112, > 108, 105, 116, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, > 104, 115, 118, 32, 45, 45, 115, 112, 108, 105, 116, 32, 99, 32, 45, 97, > 100, 100, 91, 45, 50, 93, 32, 48, 46, 51, 32, 45, 99, 117, 116, 91, > 45, 50, 93, 32, 48, 44, 49, 32, 45, 97, 112, 112, 101, 110, 100, 91, > 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, > 98, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 104, 115, 118, > 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, > 83, 86, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 104, 115, 118, 56, 32, > 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, 104, 115, 118, > 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, > 109, 32, 82, 71, 66, 32, 116, 111, 32, 72, 83, 86, 56, 32, 99, 111, > 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 103, 98, 50, 104, 115, 118, 32, 45, 95, 114, 103, 98, 50, > 104, 115, 120, 56, 32, 45, 118, 32, 43, 10, 95, 114, 103, 98, 50, 104, > 115, 120, 56, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 48, 46, 55, 48, 56, 51, 51, 51, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 50, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 103, 98, 50, 108, 97, 98, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 97, 98, 32, > 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, 45, 115, 112, 108, 105, 116, > 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 108, 97, 98, > 32, 45, 45, 115, 112, 108, 105, 116, 32, 99, 32, 45, 109, 117, 108, 91, > 45, 50, 44, 45, 49, 93, 32, 50, 46, 53, 32, 45, 97, 112, 112, 101, > 110, 100, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 108, 97, 98, > 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, > 108, 97, 98, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 76, 97, 98, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, 98, 50, 108, 97, > 98, 56, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, > 108, 97, 98, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 97, 98, 56, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, 91, 36, 62, 93, 32, > 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 46, 53, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, > 49, 44, 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, > 42, 91, 45, 49, 93, 32, 49, 46, 50, 55, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 49, 48, 32, 45, 42, 91, 45, 49, > 93, 32, 49, 46, 49, 53, 57, 48, 57, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 103, 98, 50, 108, 99, 104, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, > 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 99, 104, 32, 99, 111, 108, > 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 114, 103, 98, 50, 108, 99, 104, 32, 45, 115, 112, 108, 105, 116, 32, 99, > 10, 114, 103, 98, 50, 108, 99, 104, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, > 76, 99, 104, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, > 45, 108, 97, 98, 50, 108, 99, 104, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 103, 98, 50, 108, 99, 104, 56, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 99, 104, 56, 32, > 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 114, 103, 98, 50, 108, 99, 104, 56, 32, 45, 115, 112, 108, > 105, 116, 32, 99, 10, 114, 103, 98, 50, 108, 99, 104, 56, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 76, 99, 104, 56, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, > 98, 50, 108, 99, 104, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 46, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 42, 91, > 45, 49, 93, 32, 49, 46, 56, 56, 56, 56, 57, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, > 45, 43, 91, 45, 49, 93, 32, 51, 46, 49, 52, 49, 53, 57, 32, 45, > 42, 91, 45, 49, 93, 32, 52, 48, 46, 53, 56, 52, 53, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 108, 117, 118, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 76, 85, 86, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 114, 103, 98, 50, 108, 117, 118, 32, 45, 115, 112, 108, > 105, 116, 32, 99, 10, 114, 103, 98, 50, 108, 117, 118, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, > 32, 116, 111, 32, 76, 85, 86, 32, 99, 111, 108, 111, 114, 32, 98, 97, > 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 114, > 103, 98, 50, 120, 121, 122, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, > 45, 50, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, > 93, 32, 48, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 42, 91, > 45, 49, 93, 32, 51, 32, 45, 45, 42, 91, 45, 50, 93, 32, 49, 53, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, > 45, 56, 10, 45, 42, 91, 45, 51, 93, 32, 52, 32, 45, 42, 91, 45, > 50, 93, 32, 57, 32, 45, 47, 91, 45, 51, 44, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 91, 45, > 50, 93, 32, 48, 46, 50, 48, 48, 57, 32, 45, 45, 91, 45, 49, 93, > 32, 48, 46, 52, 54, 49, 48, 10, 45, 45, 42, 91, 45, 51, 93, 32, > 49, 51, 32, 45, 42, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 32, 99, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 115, 114, 103, 98, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, > 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 115, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 120, 121, > 122, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 88, > 89, 90, 32, 99, 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 116, 104, 101, 32, 68, 54, 53, 32, > 105, 108, 108, 117, 109, 105, 110, 97, 110, 116, 32, 105, 115, 32, 117, 115, > 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 119, 104, 105, 116, 101, 32, > 112, 111, 105, 110, 116, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 103, > 98, 50, 120, 121, 122, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, 114, > 103, 98, 50, 120, 121, 122, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 88, 89, > 90, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 47, 32, 50, 53, 53, 32, 45, 109, 105, 120, > 95, 114, 103, 98, 32, 48, 46, 52, 49, 50, 52, 53, 51, 44, 48, 46, > 51, 53, 55, 53, 56, 48, 44, 48, 46, 49, 56, 48, 52, 50, 51, 44, > 48, 46, 50, 49, 50, 54, 55, 49, 44, 48, 46, 55, 49, 53, 49, 54, > 48, 44, 48, 46, 48, 55, 50, 49, 54, 57, 44, 48, 46, 48, 49, 57, > 51, 51, 52, 44, 48, 46, 49, 49, 57, 49, 57, 51, 44, 48, 46, 57, > 53, 48, 50, 50, 55, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 103, 98, 50, 120, 121, 122, 56, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, > 32, 82, 71, 66, 32, 116, 111, 32, 88, 89, 90, 56, 32, 99, 111, 108, > 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 114, 103, 98, 50, 120, 121, 122, 56, 32, 45, 115, 112, 108, 105, 116, 32, > 99, 10, 114, 103, 98, 50, 120, 121, 122, 56, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, > 111, 32, 88, 89, 90, 56, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, > 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 103, 98, 50, 120, > 121, 122, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, > 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, > 36, 62, 93, 32, 50, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 51, 49, 46, 56, 49, 56, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 103, 98, 50, 121, 99, 98, 99, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, > 109, 32, 82, 71, 66, 32, 116, 111, 32, 89, 67, 98, 67, 114, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 115, 112, 108, 105, > 116, 32, 99, 10, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, > 66, 32, 116, 111, 32, 89, 67, 98, 67, 114, 32, 99, 111, 108, 111, 114, > 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 109, > 105, 120, 95, 114, 103, 98, 32, 54, 54, 44, 49, 50, 57, 44, 50, 53, > 44, 45, 51, 56, 44, 45, 55, 52, 44, 49, 49, 50, 44, 49, 49, 50, > 44, 45, 57, 52, 44, 45, 49, 56, 32, 45, 43, 32, 49, 50, 56, 32, > 45, 47, 32, 50, 53, 54, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 104, 32, 48, 44, 48, > 32, 45, 43, 91, 45, 49, 93, 32, 49, 54, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 115, 104, 32, 49, 44, 50, 32, 45, 43, 91, 45, 49, > 93, 32, 49, 50, 56, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 121, 117, 118, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, > 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 89, 85, 86, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 103, 98, 50, 121, 117, 118, 32, 45, 115, 112, 108, 105, 116, 32, > 99, 10, 114, 103, 98, 50, 121, 117, 118, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, > 32, 89, 85, 86, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 47, 32, 50, 53, 53, 32, 45, > 109, 105, 120, 95, 114, 103, 98, 32, 48, 46, 50, 57, 57, 44, 48, 46, > 53, 56, 55, 44, 48, 46, 49, 49, 52, 44, 45, 48, 46, 49, 52, 55, > 49, 51, 44, 45, 48, 46, 50, 56, 56, 56, 54, 44, 48, 46, 52, 51, > 54, 44, 48, 46, 54, 49, 53, 44, 45, 48, 46, 53, 49, 52, 57, 56, > 44, 45, 48, 46, 49, 48, 48, 48, 49, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 103, 98, 50, 121, 117, 118, 56, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 102, 114, 111, 109, 32, 82, 71, 66, 32, 116, 111, 32, 89, 85, 86, 56, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 114, 103, 98, 50, 121, 117, 118, 56, 32, 45, 115, 112, > 108, 105, 116, 32, 99, 10, 114, 103, 98, 50, 121, 117, 118, 56, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 82, > 71, 66, 32, 116, 111, 32, 89, 85, 86, 56, 32, 99, 111, 108, 111, 114, > 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 103, 98, 50, 121, 117, 118, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 43, 91, > 45, 49, 93, 32, 48, 46, 52, 52, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 56, 57, 46, 55, 55, 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 43, 91, 45, > 49, 93, 32, 48, 46, 54, 50, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 48, 53, 46, 54, 52, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, > 111, 112, 97, 99, 105, 116, 121, 32, 99, 104, 97, 110, 110, 101, 108, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, > 109, 111, 118, 101, 32, 111, 112, 97, 99, 105, 116, 121, 32, 99, 104, 97, > 110, 110, 101, 108, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 115, 61, > 61, 50, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 10, > 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 52, 125, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 48, 44, 50, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 109, 32, 64, 123, 45, 49, 44, 110, 125, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 108, 101, 99, 116, 95, 99, > 111, 108, 111, 114, 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, > 91, 37, 93, 62, 61, 48, 44, 99, 111, 108, 49, 44, 46, 46, 44, 99, > 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 108, > 101, 99, 116, 32, 112, 105, 120, 101, 108, 115, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 32, > 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 101, 108, 101, 99, > 116, 95, 99, 111, 108, 111, 114, 32, 52, 48, 44, 50, 48, 52, 44, 49, > 53, 51, 44, 49, 49, 48, 10, 115, 101, 108, 101, 99, 116, 95, 99, 111, > 108, 111, 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 101, 108, 101, > 99, 116, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, 45, 49, > 125, 41, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 102, 99, 32, 36, > 123, 50, 45, 45, 49, 125, 32, 45, 45, 32, 45, 110, 111, 114, 109, 32, > 45, 108, 101, 32, 36, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 101, 112, 105, 97, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 115, 101, 112, 105, 97, 32, 116, 111, 110, 101, 115, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 115, 101, 112, 105, 97, 10, 115, 101, 112, 105, 97, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 115, > 101, 112, 105, 97, 32, 116, 111, 110, 101, 115, 32, 101, 102, 102, 101, 99, > 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 40, 48, 44, 52, 52, 44, 49, 49, 53, 44, 49, 52, > 51, 44, 49, 57, 54, 44, 50, 52, 52, 94, 48, 44, 50, 48, 44, 56, > 52, 44, 49, 49, 57, 44, 49, 56, 52, 44, 50, 51, 53, 94, 48, 44, > 53, 44, 52, 52, 44, 55, 51, 44, 49, 52, 52, 44, 50, 48, 48, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, > 51, 44, 51, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 109, 97, 112, 91, 48, > 93, 32, 91, 45, 49, 93, 32, 45, 97, 91, 94, 45, 49, 93, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 111, 108, 97, 114, 105, 122, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 83, 111, 108, 97, 114, 105, 122, 101, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 115, 111, 108, 97, 114, 105, 122, 101, 10, 115, 111, 108, > 97, 114, 105, 122, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 111, 108, 97, 114, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 110, 32, 48, 44, 49, 50, 56, 32, 45, 109, 97, > 112, 32, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, 99, 111, 108, > 111, 114, 32, 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 112, > 97, 114, 116, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 83, 112, 108, 105, 116, 32, 99, 111, 108, 111, 114, 32, 97, 110, > 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 112, 97, 114, 116, 115, 32, > 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 60, 93, 32, 45, 115, 32, 99, 44, 123, 105, 102, 40, 115, 61, 61, > 52, 44, 45, 51, 44, 105, 102, 40, 115, 61, 61, 50, 44, 45, 49, 44, > 45, 115, 41, 41, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 114, > 103, 98, 50, 114, 103, 98, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, > 111, 109, 32, 115, 82, 71, 66, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 98, 97, 115, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 111, 95, 97, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 70, 111, 114, 99, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 110, > 32, 97, 108, 112, 104, 97, 32, 99, 104, 97, 110, 110, 101, 108, 46, 10, > 116, 111, 95, 97, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, > 32, 104, 97, 118, 101, 32, 97, 110, 32, 97, 108, 112, 104, 97, 32, 99, > 104, 97, 110, 110, 101, 108, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 105, 102, 32, 123, 115, 61, 61, 49, 124, 124, 115, 61, 61, 51, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 123, 115, 125, > 32, 45, 115, 104, 91, 45, 49, 93, 32, 123, 115, 45, 49, 125, 44, 123, > 115, 45, 49, 125, 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 99, 111, 108, 111, 114, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, > 111, 32, 98, 101, 32, 105, 110, 32, 99, 111, 108, 111, 114, 32, 109, 111, > 100, 101, 32, 40, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, 65, 41, > 46, 10, 116, 111, 95, 99, 111, 108, 111, 114, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 99, 111, 108, > 111, 114, 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, > 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 39, 58, 32, 73, 109, 97, 103, 101, 32, > 91, 34, 64, 123, 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, > 111, 116, 32, 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, > 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, > 108, 105, 102, 32, 123, 115, 61, 61, 50, 125, 32, 45, 114, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 44, 48, 44, 49, 44, > 48, 44, 48, 44, 48, 44, 49, 10, 45, 101, 108, 105, 102, 32, 123, 115, > 61, 61, 49, 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 51, 44, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 99, 111, 108, 111, 114, 109, > 111, 100, 101, 32, 58, 32, 109, 111, 100, 101, 61, 123, 32, 48, 61, 97, > 100, 97, 112, 116, 105, 118, 101, 32, 124, 32, 49, 61, 71, 32, 124, 32, > 50, 61, 71, 65, 32, 124, 32, 51, 61, 82, 71, 66, 32, 124, 32, 52, > 61, 82, 71, 66, 65, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 70, 111, 114, 99, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, > 97, 32, 103, 105, 118, 101, 110, 32, 99, 111, 108, 111, 114, 32, 109, 111, > 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 111, 100, > 101, 61, 48, 39, 46, 10, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, > 100, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, > 125, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 116, > 111, 95, 103, 114, 97, 121, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 50, 125, 32, 45, 116, 111, 95, 103, 114, 97, 121, 97, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 116, 111, > 95, 114, 103, 98, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 52, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, 45, 101, 108, 115, > 101, 10, 115, 61, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 105, 102, 32, 123, 64, 123, 36, 62, 44, 115, 125, 62, 52, 125, > 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, > 32, 39, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 39, > 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 36, 62, 34, 93, 32, 105, > 115, 32, 110, 111, 116, 32, 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, > 32, 111, 114, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, > 10, 45, 101, 108, 115, 101, 32, 115, 61, 123, 109, 97, 120, 40, 36, 115, > 44, 64, 123, 36, 62, 44, 115, 125, 41, 125, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 32, 45, 116, 111, 95, 99, 111, 108, 111, > 114, 109, 111, 100, 101, 32, 36, 115, 10, 45, 101, 110, 100, 105, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 103, 114, 97, 121, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, > 32, 98, 101, 32, 105, 110, 32, 71, 82, 65, 89, 32, 109, 111, 100, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 111, 95, 103, 114, 97, 121, > 10, 116, 111, 95, 103, 114, 97, 121, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 71, 82, 65, 89, 32, > 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, 114, 91, 93, > 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 111, 95, 103, > 114, 97, 121, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 64, 123, > 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, 32, 97, > 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, > 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, 102, 32, > 123, 115, 62, 61, 51, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 44, 50, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 50, 125, 32, 45, 114, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 111, 95, 103, 114, 97, 121, 97, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, 98, 101, 32, > 105, 110, 32, 71, 82, 65, 89, 65, 32, 109, 111, 100, 101, 46, 10, 116, > 111, 95, 103, 114, 97, 121, 97, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 71, 82, 65, 89, 65, 32, > 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, 114, 91, 93, > 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 111, 95, 103, > 114, 97, 121, 97, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 64, > 123, 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, 32, > 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, > 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, 102, > 32, 123, 115, 61, 61, 52, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 51, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, > 50, 93, 32, 48, 44, 50, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 91, 45, 50, 93, 32, 45, 97, 32, 99, 10, 45, 101, 108, 105, 102, > 32, 123, 115, 61, 61, 51, 125, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 49, > 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 102, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 49, 125, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 48, 44, 49, 32, 45, 115, 104, 91, 45, > 49, 93, 32, 49, 44, 49, 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, > 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, 112, 115, 101, 117, > 100, 111, 103, 114, 97, 121, 32, 58, 32, 95, 109, 97, 120, 95, 115, 116, > 101, 112, 62, 61, 48, 44, 95, 105, 115, 95, 112, 101, 114, 99, 101, 112, > 116, 117, 97, 108, 95, 99, 111, 110, 115, 116, 114, 97, 105, 110, 116, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 98, 105, 116, 115, 95, > 100, 101, 112, 116, 104, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 115, 99, 97, 108, 97, 114, 32, 105, 109, 97, 103, 101, 115, 32, > 40, 91, 48, 45, 50, 53, 53, 93, 45, 118, 97, 108, 117, 101, 100, 41, > 32, 116, 111, 32, 112, 115, 101, 117, 100, 111, 45, 103, 114, 97, 121, 32, > 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 112, > 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, 58, 32, 39, 109, 97, 120, > 95, 115, 116, 101, 112, 61, 53, 39, 44, 32, 39, 105, 115, 95, 112, 101, > 114, 99, 101, 112, 116, 117, 97, 108, 95, 99, 111, 110, 115, 116, 114, 97, > 105, 110, 116, 61, 49, 39, 32, 97, 110, 100, 32, 39, 98, 105, 116, 115, > 95, 100, 101, 112, 116, 104, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 84, 104, 101, 32, 111, 114, 105, 103, 105, 110, 97, 108, > 32, 112, 115, 101, 117, 100, 111, 45, 103, 114, 97, 121, 32, 116, 101, 99, > 104, 110, 105, 113, 117, 101, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, > 105, 110, 116, 114, 111, 100, 117, 99, 101, 100, 32, 98, 121, 32, 82, 105, > 99, 104, 32, 70, 114, 97, 110, 122, 101, 110, 32, 91, 104, 116, 116, 112, > 58, 47, 47, 114, 48, 107, 46, 117, 115, 47, 103, 114, 97, 112, 104, 105, > 99, 115, 47, 112, 115, 101, 117, 100, 111, 71, 114, 101, 121, 46, 104, 116, > 109, 108, 93, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 116, 101, 110, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, 105, 115, 32, > 116, 101, 99, 104, 110, 105, 113, 117, 101, 32, 116, 111, 32, 97, 114, 98, > 105, 116, 114, 97, 114, 121, 32, 105, 110, 99, 114, 101, 109, 101, 110, 116, > 115, 32, 102, 111, 114, 32, 109, 111, 114, 101, 32, 116, 111, 110, 101, 115, > 44, 32, 104, 97, 115, 32, 98, 101, 101, 110, 32, 100, 111, 110, 101, 32, > 98, 121, 32, 68, 97, 118, 105, 100, 32, 84, 115, 99, 104, 117, 109, 112, > 101, 114, 108, 101, 46, 10, 116, 111, 95, 112, 115, 101, 117, 100, 111, 103, > 114, 97, 121, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, > 105, 110, 116, 40, 36, 123, 49, 61, 53, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 51, 61, 56, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 115, 99, 97, > 108, 97, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, 112, > 115, 101, 117, 100, 111, 45, 103, 114, 97, 121, 32, 99, 111, 108, 111, 114, > 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 116, > 101, 112, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, 115, 114, 103, 98, 50, > 114, 103, 98, 32, 45, 112, 115, 101, 117, 100, 111, 103, 114, 97, 121, 32, > 36, 49, 44, 123, 50, 46, 51, 42, 36, 50, 125, 44, 36, 51, 10, 45, > 45, 115, 114, 103, 98, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, > 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 49, > 93, 32, 123, 54, 53, 53, 51, 53, 47, 49, 48, 48, 125, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 32, 45, 114, 111, 119, 115, 91, 45, > 49, 93, 32, 48, 44, 50, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 120, > 99, 121, 122, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 91, 45, 49, 93, 32, 48, 10, 45, 45, 110, 111, 114, > 109, 91, 45, 49, 93, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 119, 97, 116, 101, > 114, 115, 104, 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, > 116, 111, 95, 114, 103, 98, 91, 36, 62, 93, 32, 45, 114, 103, 98, 50, > 108, 97, 98, 91, 36, 62, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 36, 62, 93, 32, 48, 32, 45, 42, 91, 36, 62, 93, 32, 123, > 54, 53, 53, 51, 53, 47, 49, 48, 48, 125, 32, 45, 114, 111, 117, 110, > 100, 91, 36, 62, 93, 32, 45, 99, 91, 36, 62, 93, 32, 48, 44, 54, > 53, 53, 51, 53, 10, 45, 109, 97, 112, 91, 36, 62, 93, 32, 91, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 111, 95, > 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, > 99, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 82, 71, 66, 32, > 109, 111, 100, 101, 46, 10, 116, 111, 95, 114, 103, 98, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 82, > 71, 66, 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, > 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, > 111, 95, 114, 103, 98, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, > 64, 123, 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, > 32, 97, 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, > 71, 66, 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, > 102, 32, 123, 115, 61, 61, 52, 125, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 48, 44, 50, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, > 61, 50, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, > 48, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 51, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, > 49, 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 51, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 116, 111, 95, 114, 103, 98, 97, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 70, 111, 114, 99, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, > 98, 101, 32, 105, 110, 32, 82, 71, 66, 65, 32, 109, 111, 100, 101, 46, > 10, 116, 111, 95, 114, 103, 98, 97, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 70, 111, 114, 99, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 116, 111, 32, 98, 101, 32, 105, 110, 32, 82, 71, 66, 65, 32, > 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 115, 62, 52, 125, 32, 45, 101, 114, 114, 111, 114, 91, 93, > 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 116, 111, 95, 114, > 103, 98, 97, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 64, 123, > 60, 44, 45, 49, 125, 34, 93, 32, 105, 115, 32, 110, 111, 116, 32, 97, > 32, 71, 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, > 65, 32, 105, 109, 97, 103, 101, 46, 34, 10, 45, 101, 108, 105, 102, 32, > 123, 115, 61, 61, 51, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 44, 51, 32, 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, 51, > 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 50, 125, > 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 52, 32, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, > 32, 45, 102, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 49, > 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 52, 32, 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, > 51, 32, 45, 102, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, 111, 108, > 111, 114, 115, 32, 58, 32, 95, 116, 114, 97, 110, 115, 102, 101, 114, 95, > 98, 114, 105, 103, 104, 116, 110, 101, 115, 115, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, > 97, 110, 115, 102, 101, 114, 32, 99, 111, 108, 111, 114, 115, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 116, 111, 32, 116, 104, 101, > 32, 111, 116, 104, 101, 114, 32, 111, 110, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 116, 114, 97, 110, 115, 102, 101, 114, 95, 98, > 114, 105, 103, 104, 116, 110, 101, 115, 115, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 114, 97, 110, 100, 32, 48, 44, 50, 53, 53, 32, > 45, 114, 101, 118, 101, 114, 115, 101, 32, 45, 45, 116, 114, 97, 110, 115, > 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, 32, 49, 10, 116, 114, 97, > 110, 115, 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 84, 114, 97, 110, 115, 102, 101, 114, 32, 99, 111, > 108, 111, 114, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 91, 48, > 93, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 116, > 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 116, 111, 95, 99, 111, 108, > 111, 114, 109, 111, 100, 101, 91, 94, 48, 93, 32, 123, 109, 97, 120, 40, > 51, 44, 64, 123, 45, 109, 97, 120, 95, 115, 125, 41, 125, 32, 45, 99, > 32, 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 91, 48, 93, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 108, 91, 48, 93, 32, 45, 115, 32, > 99, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 95, 99, 117, 109, > 117, 108, 32, 50, 53, 54, 44, 49, 44, 48, 44, 50, 53, 53, 32, 45, > 97, 32, 99, 32, 45, 42, 32, 50, 53, 53, 32, 45, 101, 110, 100, 108, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, > 45, 108, 91, 48, 44, 45, 49, 93, 10, 45, 105, 102, 32, 36, 49, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, 115, 104, 91, 48, 44, > 49, 93, 32, 36, 62, 44, 36, 62, 32, 45, 101, 113, 117, 97, 108, 105, > 122, 101, 91, 45, 49, 93, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, > 32, 45, 105, 110, 100, 101, 120, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 50, 32, 45, 115, 104, 91, 48, 44, 49, 93, 32, 123, > 36, 62, 43, 49, 125, 44, 123, 36, 62, 43, 49, 125, 32, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 50, 53, 54, 44, 48, > 44, 50, 53, 53, 32, 45, 105, 110, 100, 101, 120, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, > 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, > 32, 43, 10, 95, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, 111, 108, > 111, 114, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 32, 45, 115, 32, 99, 32, 45, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, 32, 45, 97, 32, > 99, 32, 45, 100, 103, 32, 51, 48, 48, 44, 50, 48, 48, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 120, 121, 122, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 88, > 89, 90, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 98, > 97, 115, 101, 115, 46, 10, 120, 121, 122, 50, 114, 103, 98, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 88, 89, > 90, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, > 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 42, 32, 50, > 53, 53, 32, 45, 109, 105, 120, 95, 114, 103, 98, 32, 51, 46, 50, 52, > 48, 52, 55, 57, 44, 45, 49, 46, 53, 51, 55, 49, 53, 48, 44, 45, > 48, 46, 52, 57, 56, 53, 51, 53, 44, 45, 48, 46, 57, 54, 57, 50, > 53, 54, 44, 49, 46, 56, 55, 53, 57, 57, 50, 44, 48, 46, 48, 52, > 49, 53, 53, 54, 44, 48, 46, 48, 53, 53, 54, 52, 56, 44, 45, 48, > 46, 50, 48, 52, 48, 52, 51, 44, 49, 46, 48, 53, 55, 51, 49, 49, > 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 120, 121, 122, 56, 50, 114, 103, 98, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 102, 114, 111, 109, 32, 88, 89, 90, 56, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 120, 121, > 122, 56, 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 102, 114, 111, 109, 32, 88, 89, 90, 56, 32, 116, 111, 32, 82, > 71, 66, 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 47, 91, 45, > 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 47, 91, 45, 49, > 93, 32, 50, 51, 49, 46, 56, 49, 56, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 120, 121, 122, 50, 114, 103, > 98, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 121, 99, > 98, 99, 114, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, 89, 67, > 98, 67, 114, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 98, 97, 115, 101, 115, 46, 10, 121, 99, 98, 99, 114, 50, 114, 103, 98, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, > 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, > 32, 89, 67, 98, 67, 114, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, > 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 115, 104, 32, 48, 44, 48, 32, 45, 45, 91, 45, 49, > 93, 32, 49, 54, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, > 32, 49, 44, 50, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 109, 105, 120, 95, 114, 103, 98, 32, 50, 57, 56, > 44, 48, 44, 52, 48, 57, 44, 50, 57, 56, 44, 45, 49, 48, 48, 44, > 45, 50, 48, 56, 44, 50, 57, 56, 44, 53, 49, 54, 44, 48, 32, 45, > 43, 32, 49, 50, 56, 32, 45, 47, 32, 50, 53, 54, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 121, 117, 118, 50, 114, 103, 98, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, 111, 109, 32, > 89, 85, 86, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 98, 97, 115, 101, 115, 46, 10, 121, 117, 118, 50, 114, 103, 98, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 102, 114, 111, 109, 32, 89, > 85, 86, 32, 116, 111, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, > 98, 97, 115, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 109, 105, > 120, 95, 114, 103, 98, 32, 49, 44, 48, 44, 49, 46, 49, 51, 57, 56, > 51, 44, 49, 44, 45, 48, 46, 51, 57, 52, 54, 53, 44, 45, 48, 46, > 53, 56, 48, 54, 44, 49, 44, 50, 46, 48, 51, 50, 49, 49, 44, 48, > 32, 45, 42, 32, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 121, 117, 118, 56, 50, 114, 103, 98, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 102, 114, > 111, 109, 32, 89, 85, 86, 56, 32, 116, 111, 32, 82, 71, 66, 32, 99, > 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 10, 121, 117, 118, 56, > 50, 114, 103, 98, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 102, 114, 111, 109, 32, 89, 85, 86, 56, 32, 116, 111, 32, 82, 71, 66, > 32, 99, 111, 108, 111, 114, 32, 98, 97, 115, 101, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, > 115, 104, 91, 36, 62, 93, 32, 48, 44, 48, 32, 45, 47, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, > 104, 91, 36, 62, 93, 32, 49, 44, 49, 32, 45, 47, 91, 45, 49, 93, > 32, 50, 56, 57, 46, 55, 55, 51, 32, 45, 45, 91, 45, 49, 93, 32, > 48, 46, 52, 52, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 36, 62, 93, 32, 50, 44, 50, 32, 45, 47, 91, 45, 49, 93, 32, > 50, 48, 53, 46, 54, 52, 53, 32, 45, 45, 91, 45, 49, 93, 32, 48, > 46, 54, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, > 101, 32, 45, 121, 117, 118, 50, 114, 103, 98, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 71, 101, 111, 109, 101, 116, > 114, 121, 32, 109, 97, 110, 105, 112, 117, 108, 97, 116, 105, 111, 110, 10, > 35, 64, 103, 109, 105, 99, 32, 97, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 97, 112, 112, 101, 110, 100, 39, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 101, 110, 100, 32, > 58, 32, 91, 105, 109, 97, 103, 101, 93, 44, 97, 120, 105, 115, 44, 95, > 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 58, 32, 97, 120, 105, 115, > 44, 95, 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 101, 110, > 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 44, 32, 111, 114, 32, 97, 108, 108, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 103, > 101, 116, 104, 101, 114, 44, 32, 97, 108, 111, 110, 103, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 120, 105, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 97, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, > 120, 105, 115, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 120, 32, > 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 85, 115, 117, 97, 108, 32, 39, 97, > 108, 105, 103, 110, 109, 101, 110, 116, 39, 32, 118, 97, 108, 117, 101, 115, > 32, 97, 114, 101, 32, 123, 32, 48, 61, 108, 101, 102, 116, 45, 106, 117, > 115, 116, 105, 102, 105, 101, 100, 32, 124, 32, 48, 46, 53, 61, 99, 101, > 110, 116, 101, 114, 101, 100, 32, 124, 32, 49, 61, 114, 105, 103, 104, 116, > 45, 106, 117, 115, 116, 105, 102, 105, 101, 100, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, > 32, 121, 44, 49, 48, 32, 45, 114, 101, 118, 101, 114, 115, 101, 32, 45, > 97, 112, 112, 101, 110, 100, 32, 121, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 114, 111, 119, 115, 91, 48, > 93, 32, 48, 44, 123, 49, 48, 43, 49, 56, 42, 36, 62, 125, 37, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, > 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 44, 48, 46, 53, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 97, 112, 112, 101, 110, 100, 91, 48, 93, 32, 91, > 48, 93, 44, 121, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 101, > 110, 100, 95, 116, 105, 108, 101, 115, 32, 58, 32, 95, 77, 62, 61, 48, > 44, 95, 78, 62, 61, 48, 44, 48, 60, 61, 95, 120, 95, 97, 108, 105, > 103, 110, 109, 101, 110, 116, 60, 61, 49, 44, 48, 60, 61, 95, 121, 95, > 97, 108, 105, 103, 110, 109, 101, 110, 116, 60, 61, 49, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 101, 110, 100, 32, 77, 120, 78, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 116, 105, 108, 101, 115, 32, > 97, 115, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 78, 39, 32, 105, > 115, 32, 115, 101, 116, 32, 116, 111, 32, 48, 44, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 32, 114, 111, 119, 115, 32, 105, 115, 32, 101, 115, > 116, 105, 109, 97, 116, 101, 100, 32, 97, 117, 116, 111, 109, 97, 116, 105, > 99, 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 39, 77, 39, 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, > 32, 48, 44, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 99, 111, > 108, 117, 109, 110, 115, 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, > 101, 100, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 97, 108, 108, 121, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 77, > 39, 32, 97, 110, 100, 32, 39, 78, 39, 32, 97, 114, 101, 32, 98, 111, > 116, 104, 32, 115, 101, 116, 32, 116, 111, 32, 39, 48, 39, 44, 32, 97, > 117, 116, 111, 45, 109, 111, 100, 101, 32, 105, 115, 32, 117, 115, 101, 100, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 77, > 39, 32, 111, 114, 32, 39, 78, 39, 32, 105, 115, 32, 115, 101, 116, 32, > 116, 111, 32, 48, 44, 32, 111, 110, 108, 121, 32, 97, 32, 115, 105, 110, > 103, 108, 101, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 112, 114, 111, > 100, 117, 99, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 120, 95, 97, 108, 105, 103, 110, 109, 101, 110, 116, 39, 32, 97, 110, > 100, 32, 39, 121, 95, 97, 108, 105, 103, 109, 101, 110, 116, 39, 32, 116, > 101, 108, 108, 115, 32, 97, 98, 111, 117, 116, 32, 116, 104, 101, 32, 97, > 108, 105, 103, 110, 109, 101, 110, 116, 32, 111, 102, 32, 116, 105, 108, 101, > 115, 32, 119, 104, 101, 110, 32, 116, 104, 101, 121, 32, 104, 97, 118, 101, > 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 115, 105, 122, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 77, 61, 48, 39, > 44, 32, 39, 78, 61, 48, 39, 44, 32, 39, 120, 95, 97, 108, 105, 103, > 110, 109, 101, 110, 116, 61, 121, 95, 97, 108, 105, 103, 110, 109, 101, 110, > 116, 61, 48, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, > 108, 105, 116, 32, 120, 121, 44, 52, 32, 45, 97, 112, 112, 101, 110, 100, > 95, 116, 105, 108, 101, 115, 32, 44, 10, 97, 112, 112, 101, 110, 100, 95, > 116, 105, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 48, 125, 41, 32, 38, 38, > 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, 38, > 38, 32, 36, 123, 51, 61, 48, 46, 53, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 51, 60, 61, 49, 32, 38, 38, 32, 36, 123, 52, 61, 36, 51, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, 49, 34, 10, 45, > 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 97, 115, 32, 97, 32, 48, 120, 48, 45, 116, 105, 108, 101, 100, > 32, 105, 109, 97, 103, 101, 46, 34, 32, 45, 114, 101, 116, 117, 114, 110, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 36, 49, > 38, 38, 33, 36, 50, 125, 10, 45, 118, 32, 45, 32, 78, 61, 123, 105, > 110, 116, 40, 115, 113, 114, 116, 40, 64, 35, 41, 41, 125, 32, 77, 61, > 123, 114, 111, 117, 110, 100, 40, 64, 35, 47, 36, 78, 44, 49, 44, 49, > 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 97, 115, 32, 97, 32, 34, 36, 123, 77, 125, 120, 36, 123, 78, 125, > 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, 101, 32, 40, 97, > 117, 116, 111, 45, 109, 111, 100, 101, 41, 46, 34, 32, 45, 118, 32, 45, > 10, 77, 78, 61, 123, 36, 77, 42, 36, 78, 125, 32, 45, 105, 102, 32, > 123, 64, 35, 37, 36, 77, 78, 125, 32, 123, 36, 77, 78, 45, 40, 64, > 35, 37, 36, 77, 78, 41, 125, 32, 45, 115, 91, 45, 49, 93, 32, 120, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 33, > 36, 50, 125, 10, 45, 118, 32, 45, 32, 77, 61, 36, 49, 32, 78, 61, > 123, 114, 111, 117, 110, 100, 40, 64, 35, 47, 36, 49, 44, 49, 44, 49, > 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 97, 115, 32, 97, 32, 34, 36, 123, 77, 125, 120, 36, 123, 78, 125, > 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, 101, 46, 34, 32, > 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 77, 62, 64, 35, 125, > 32, 45, 118, 32, 43, 32, 45, 119, 97, 114, 110, 91, 48, 45, 45, 51, > 93, 32, 34, 77, 105, 115, 115, 105, 110, 103, 32, 105, 109, 97, 103, 101, > 115, 32, 102, 111, 114, 32, 104, 97, 118, 105, 110, 103, 32, 111, 110, 101, > 32, 114, 111, 119, 32, 105, 110, 32, 97, 32, 34, 36, 123, 77, 125, 120, > 36, 123, 78, 125, 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, > 101, 46, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 64, 35, 37, 36, 77, 125, 32, 123, > 36, 77, 45, 40, 64, 35, 37, 36, 77, 41, 125, 32, 45, 115, 91, 45, > 49, 93, 32, 120, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, > 102, 32, 123, 33, 36, 49, 125, 10, 45, 118, 32, 45, 32, 77, 61, 123, > 114, 111, 117, 110, 100, 40, 64, 35, 47, 36, 50, 44, 49, 44, 49, 41, > 125, 32, 78, 61, 36, 50, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, > 45, 45, 51, 93, 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 97, 115, 32, 97, 32, 34, 36, 123, 77, 125, 120, > 36, 123, 78, 125, 34, 45, 116, 105, 108, 101, 100, 32, 105, 109, 97, 103, > 101, 46, 34, 32, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 78, > 62, 64, 35, 125, 32, 45, 118, 32, 43, 32, 45, 119, 97, 114, 110, 91, > 48, 45, 45, 51, 93, 32, 34, 77, 105, 115, 115, 105, 110, 103, 32, 105, > 109, 97, 103, 101, 115, 32, 102, 111, 114, 32, 104, 97, 118, 105, 110, 103, > 32, 111, 110, 101, 32, 99, 111, 108, 117, 109, 110, 32, 105, 110, 32, 97, > 32, 34, 36, 123, 77, 125, 120, 36, 123, 78, 125, 34, 45, 116, 105, 108, > 101, 100, 32, 105, 109, 97, 103, 101, 46, 34, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, > 35, 37, 36, 77, 125, 32, 123, 36, 77, 45, 40, 64, 35, 37, 36, 77, > 41, 125, 32, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 65, 112, 112, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 97, 115, 32, 36, 49, 120, 36, 50, 45, 116, 105, 108, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 34, 32, 45, 118, 32, 45, 10, > 77, 61, 36, 49, 32, 78, 61, 36, 50, 10, 45, 101, 110, 100, 105, 102, > 10, 77, 78, 61, 123, 36, 77, 42, 36, 78, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 77, 78, 41, > 125, 32, 45, 108, 91, 36, 62, 45, 123, 36, 62, 43, 36, 77, 78, 45, > 49, 125, 93, 10, 36, 77, 78, 44, 49, 44, 49, 44, 50, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 77, 78, 32, 45, 112, 111, 105, 110, 116, > 91, 45, 49, 93, 32, 36, 62, 44, 48, 44, 48, 44, 49, 44, 64, 123, > 36, 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, 104, 125, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 91, 45, 49, 93, 32, 36, 77, 44, 36, 78, > 44, 49, 44, 50, 44, 45, 49, 10, 45, 115, 91, 45, 49, 93, 32, 99, > 32, 45, 108, 91, 45, 50, 93, 32, 45, 115, 32, 121, 32, 45, 109, 97, > 120, 32, 45, 101, 110, 100, 108, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 32, 120, 32, 45, 109, 97, 120, 32, 45, 101, 110, 100, 108, 10, 105, > 61, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 32, 121, 61, > 36, 62, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 77, 32, 45, 114, > 91, 36, 105, 93, 32, 64, 123, 45, 50, 44, 36, 62, 125, 44, 64, 123, > 45, 49, 44, 36, 121, 125, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 48, 44, 48, 44, 36, 51, 44, 36, 52, 32, 105, 61, 123, 36, 105, > 43, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 77, 41, 125, 32, > 45, 97, 91, 36, 62, 45, 123, 36, 62, 43, 36, 77, 45, 49, 125, 93, > 32, 120, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 78, 41, 125, 32, 45, 97, > 91, 36, 62, 45, 123, 36, 62, 43, 36, 78, 45, 49, 125, 93, 32, 121, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 117, 116, 111, 99, 114, 111, 112, 32, 58, 32, 118, 97, 108, 117, 101, 49, > 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 58, 32, 40, 110, > 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 117, 116, 111, 99, 114, 111, 112, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 101, 99, > 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, 32, 105, 110, 116, 101, 110, > 115, 105, 116, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 110, 111, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 97, > 114, 101, 32, 112, 114, 111, 118, 105, 100, 101, 100, 44, 32, 99, 114, 111, > 112, 112, 105, 110, 103, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 103, > 117, 101, 115, 115, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, > 102, 105, 108, 108, 95, 99, 111, 108, 111, 114, 32, 54, 52, 44, 49, 50, > 56, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 49, 50, 48, 44, 49, 50, 48, 44, 48, > 44, 49, 44, 50, 53, 53, 32, 45, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 10, 35, 64, 103, 109, 105, 99, 32, 97, 117, 116, 111, 99, 114, 111, > 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 58, 32, 95, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 91, 37, 93, 44, 95, 109, 105, > 110, 95, 97, 114, 101, 97, 91, 37, 93, 62, 61, 48, 44, 95, 105, 115, > 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, > 116, 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 111, 117, > 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 123, 32, 48, 61, 99, 114, > 111, 112, 32, 124, 32, 49, 61, 115, 101, 103, 109, 101, 110, 116, 97, 116, > 105, 111, 110, 32, 124, 32, 50, 61, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 117, 116, 111, 99, 114, 111, 112, 32, 97, 110, 100, 32, 101, 120, 116, 114, > 97, 99, 116, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, > 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 109, 97, 115, 107, > 32, 103, 105, 118, 101, 110, 32, 97, 115, 32, 116, 104, 101, 32, 108, 97, > 115, 116, 32, 99, 104, 97, 110, 110, 101, 108, 32, 111, 102, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 101, 97, 99, 104, 32, 111, 102, 32, 116, > 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 32, 40, 101, 46, 103, 46, 32, 97, 108, 112, 104, 97, 45, 99, 104, > 97, 110, 110, 101, 108, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, 37, 39, 44, > 32, 39, 109, 105, 110, 95, 97, 114, 101, 97, 61, 48, 46, 49, 37, 39, > 44, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 50, 53, 54, 44, 50, > 53, 54, 32, 45, 110, 111, 105, 115, 101, 32, 48, 46, 49, 44, 50, 32, > 45, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, 50, 48, 32, > 45, 108, 97, 98, 101, 108, 95, 102, 103, 32, 48, 44, 49, 32, 45, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, > 45, 110, 101, 113, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, > 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, 45, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, > 115, 32, 44, 10, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, > 112, 111, 110, 101, 110, 116, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 48, 37, 125, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 50, 61, 48, 46, 49, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 105, 115, 98, 111, 111, 108, 40, 36, 123, 51, 61, 48, 125, 41, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 52, 61, 49, 125, 41, 32, > 38, 38, 32, 36, 52, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, > 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 117, 116, 111, > 99, 114, 111, 112, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, > 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 102, 114, 111, 109, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 36, 49, 44, 32, 109, 105, 110, 105, 109, > 97, 108, 32, 97, 114, 101, 97, 32, 36, 50, 44, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 36, 51, 44, 108, 111, 119, 44, 104, 105, > 103, 104, 125, 34, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 32, 34, 92, 10, 34, 97, 110, 100, 32, 111, 117, 116, 112, 117, 116, > 32, 116, 121, 112, 101, 32, 115, 101, 116, 32, 116, 111, 32, 39, 34, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 52, 44, 99, 114, 111, 112, > 44, 115, 101, 103, 109, 101, 110, 116, 97, 116, 105, 111, 110, 44, 99, 111, > 111, 114, 100, 105, 110, 97, 116, 101, 115, 125, 34, 39, 46, 92, 110, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 109, 105, 110, 95, 97, 114, 101, 97, > 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, 102, > 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, > 36, 50, 125, 44, 36, 50, 42, 119, 42, 104, 44, 36, 50, 41, 41, 41, > 125, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 48, 48, > 37, 32, 45, 103, 116, 91, 45, 49, 93, 32, 36, 49, 32, 45, 97, 114, > 101, 97, 95, 102, 103, 91, 45, 49, 93, 32, 48, 44, 36, 51, 32, 45, > 103, 101, 91, 45, 49, 93, 32, 36, 109, 105, 110, 95, 97, 114, 101, 97, > 10, 45, 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 108, 116, 91, 45, 49, 93, 32, 36, 109, 105, 110, 95, 97, 114, 101, > 97, 32, 45, 111, 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, 108, 97, > 98, 101, 108, 95, 102, 103, 91, 45, 49, 93, 32, 48, 44, 49, 10, 78, > 61, 123, 105, 77, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, > 77, 125, 10, 110, 61, 123, 49, 43, 36, 62, 125, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 32, 62, 32, 34, 36, 110, > 47, 36, 78, 32, 45, 118, 32, 45, 10, 45, 114, 112, 114, 111, 103, 114, > 101, 115, 115, 32, 123, 49, 48, 48, 42, 36, 110, 47, 36, 78, 125, 10, > 45, 45, 61, 61, 91, 49, 93, 32, 36, 110, 32, 45, 45, 42, 91, 48, > 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 105, 102, > 32, 123, 36, 52, 61, 61, 48, 125, 32, 99, 111, 111, 114, 100, 115, 61, > 64, 123, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, > 100, 115, 91, 45, 49, 93, 92, 32, 97, 117, 116, 111, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 45, 122, 91, 48, 93, 32, 36, 99, 111, > 111, 114, 100, 115, 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 61, 61, > 49, 125, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 10, 45, 101, 108, 115, 101, 32, 99, 111, 111, 114, 100, 115, 61, 64, 123, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, 115, > 91, 45, 49, 93, 92, 32, 97, 117, 116, 111, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 40, 36, 99, 111, 111, 114, 100, 115, 41, 32, 45, 121, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, > 101, 10, 45, 114, 109, 91, 48, 44, 49, 93, 10, 45, 105, 102, 32, 123, > 36, 52, 61, 61, 50, 125, 32, 45, 97, 32, 120, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 117, 116, 111, 99, > 114, 111, 112, 95, 115, 101, 113, 32, 58, 32, 118, 97, 108, 117, 101, 49, > 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 124, 32, 97, 117, > 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 117, 116, 111, > 99, 114, 111, 112, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, 99, > 114, 111, 112, 32, 103, 101, 111, 109, 101, 116, 114, 121, 32, 111, 102, 32, > 116, 104, 101, 32, 108, 97, 115, 116, 32, 111, 110, 101, 32, 98, 121, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 101, 99, 116, 111, 114, > 45, 118, 97, 108, 117, 101, 100, 32, 105, 110, 116, 101, 110, 115, 105, 116, > 121, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, 114, 32, 98, > 121, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 32, 103, 117, 101, 115, > 115, 105, 110, 103, 32, 116, 104, 101, 32, 99, 114, 111, 112, 112, 105, 110, > 103, 32, 118, 97, 108, 117, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 97, 117, 116, 111, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 102, 105, 108, 108, 91, 45, 49, 93, 32, 48, 32, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, > 48, 37, 44, 51, 48, 37, 44, 50, 48, 37, 44, 48, 44, 49, 44, 49, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 115, 101, 113, 32, 48, > 10, 97, 117, 116, 111, 99, 114, 111, 112, 95, 115, 101, 113, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 97, 117, 116, 111, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 117, 116, 111, 45, 99, 114, > 111, 112, 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, > 32, 99, 114, 111, 112, 32, 103, 101, 111, 109, 101, 116, 114, 121, 32, 111, > 102, 32, 108, 97, 115, 116, 32, 105, 109, 97, 103, 101, 32, 98, 121, 32, > 118, 101, 99, 116, 111, 114, 32, 39, 36, 42, 39, 46, 34, 10, 45, 105, > 102, 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, > 123, 64, 35, 61, 61, 49, 125, 32, 45, 95, 97, 117, 116, 111, 99, 114, > 111, 112, 36, 105, 115, 95, 97, 117, 116, 111, 32, 36, 123, 49, 45, 45, > 49, 125, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 99, 111, 111, 114, 100, 115, 61, 64, 123, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, 115, > 91, 45, 49, 93, 92, 32, 36, 123, 49, 45, 45, 49, 125, 125, 10, 120, > 48, 61, 123, 97, 114, 103, 40, 49, 44, 36, 99, 111, 111, 114, 100, 115, > 41, 125, 32, 121, 48, 61, 123, 97, 114, 103, 40, 50, 44, 36, 99, 111, > 111, 114, 100, 115, 41, 125, 32, 122, 48, 61, 123, 97, 114, 103, 40, 51, > 44, 36, 99, 111, 111, 114, 100, 115, 41, 125, 10, 120, 49, 61, 123, 97, > 114, 103, 40, 52, 44, 36, 99, 111, 111, 114, 100, 115, 41, 125, 32, 121, > 49, 61, 123, 97, 114, 103, 40, 53, 44, 36, 99, 111, 111, 114, 100, 115, > 41, 125, 32, 122, 49, 61, 123, 97, 114, 103, 40, 54, 44, 36, 99, 111, > 111, 114, 100, 115, 41, 125, 10, 45, 105, 102, 32, 123, 36, 120, 48, 62, > 36, 120, 49, 34, 32, 124, 124, 32, 34, 36, 121, 48, 62, 36, 121, 49, > 34, 32, 124, 124, 32, 34, 36, 122, 48, 62, 36, 122, 49, 125, 32, 45, > 105, 91, 48, 45, 45, 50, 93, 32, 48, 32, 45, 114, 109, 91, 49, 45, > 45, 49, 58, 50, 93, 10, 45, 101, 108, 115, 101, 32, 45, 122, 32, 36, > 120, 48, 44, 36, 121, 48, 44, 36, 122, 48, 44, 36, 120, 49, 44, 36, > 121, 49, 44, 36, 122, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 58, 32, 123, 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, > 124, 32, 99, 48, 91, 37, 93, 32, 125, 44, 95, 123, 32, 91, 105, 109, > 97, 103, 101, 49, 93, 32, 124, 32, 99, 49, 91, 37, 93, 32, 125, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, > 101, 101, 112, 32, 111, 110, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 114, 105, 99, 104, 108, > 101, 116, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 105, 115, 32, 117, > 115, 101, 100, 32, 119, 104, 101, 110, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 97, 114, 101, 32, > 111, 117, 116, 32, 111, 102, 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 50, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 111, 108, 117, 109, 110, 115, 32, 58, 32, > 123, 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 124, 32, 120, 48, 91, > 37, 93, 32, 125, 44, 95, 123, 32, 91, 105, 109, 97, 103, 101, 49, 93, > 32, 124, 32, 120, 49, 91, 37, 93, 32, 125, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, 101, 101, 112, 32, 111, > 110, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, > 108, 117, 109, 110, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 105, 114, 105, 99, 104, 108, 101, 116, 32, 98, 111, 117, > 110, 100, 97, 114, 121, 32, 105, 115, 32, 117, 115, 101, 100, 32, 119, 104, > 101, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, > 117, 109, 110, 115, 32, 97, 114, 101, 32, 111, 117, 116, 32, 111, 102, 32, > 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 99, 111, 108, > 117, 109, 110, 115, 32, 45, 50, 53, 37, 44, 53, 48, 37, 10, 35, 64, > 103, 109, 105, 99, 32, 122, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 99, 114, 111, 112, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 114, 111, 112, 32, 58, 32, 120, 48, 91, > 37, 93, 44, 120, 49, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, 48, 91, 37, 93, > 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, > 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, > 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, 37, 93, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, > 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 99, 48, 91, 37, 93, > 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, > 37, 93, 44, 99, 49, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 111, > 112, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 114, 101, 103, 105, 111, 110, 32, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 122, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, > 111, 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, 105, 110, 116, 101, > 114, 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, 32, 40, 117, 115, > 101, 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, > 105, 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, 101, > 110, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 99, 114, 111, 112, 32, 45, 50, 51, 48, 44, 45, 50, 51, > 48, 44, 50, 56, 48, 44, 50, 56, 48, 44, 49, 32, 45, 99, 114, 111, > 112, 91, 48, 93, 32, 45, 50, 51, 48, 44, 45, 50, 51, 48, 44, 50, > 56, 48, 44, 50, 56, 48, 44, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 99, > 114, 111, 112, 32, 50, 53, 37, 44, 50, 53, 37, 44, 55, 53, 37, 44, > 55, 53, 37, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 97, 103, 111, > 110, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 118, 101, 99, 116, 111, 114, 115, 32, 97, 115, 32, 100, 105, 97, 103, 111, > 110, 97, 108, 32, 109, 97, 116, 114, 105, 99, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 44, 49, 48, 44, 49, 44, > 49, 44, 39, 121, 39, 32, 45, 45, 100, 105, 97, 103, 111, 110, 97, 108, > 10, 100, 105, 97, 103, 111, 110, 97, 108, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 84, 114, 97, 110, 115, 102, 111, 114, 109, 32, 118, > 101, 99, 116, 111, 114, 36, 63, 32, 97, 115, 32, 100, 105, 97, 103, 111, > 110, 97, 108, 32, 109, 97, 116, 114, 105, 120, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 114, 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, 104, 43, 49, 125, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 32, 45, 114, 91, 36, > 62, 93, 32, 64, 123, 36, 62, 44, 104, 125, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 45, 49, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 101, 118, 97, 116, 101, > 32, 58, 32, 95, 100, 101, 112, 116, 104, 44, 95, 105, 115, 95, 112, 108, > 97, 105, 110, 44, 95, 105, 115, 95, 99, 111, 108, 111, 114, 101, 100, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 108, 101, 118, 97, 116, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 50, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 105, 110, 116, 111, 32, 51, 100, 32, 118, 111, 108, 117, > 109, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, > 101, 112, 116, 104, 61, 54, 52, 39, 44, 32, 39, 105, 115, 95, 112, 108, > 97, 105, 110, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 99, > 111, 108, 111, 114, 101, 100, 61, 49, 39, 46, 10, 101, 108, 101, 118, 97, > 116, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, > 61, 54, 52, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 50, 61, 49, 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 69, 108, 101, 118, 97, 116, 101, 32, 50, 100, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 105, 110, 116, 111, 32, 36, 49, 45, > 115, 108, 105, 99, 101, 115, 32, 118, 111, 108, 117, 109, 101, 40, 115, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, > 61, 64, 123, 48, 44, 110, 125, 10, 45, 45, 110, 111, 114, 109, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 36, 49, 44, 123, 105, 102, 40, > 36, 51, 44, 64, 123, 48, 44, 115, 125, 44, 49, 41, 125, 10, 109, 61, > 64, 123, 45, 50, 44, 109, 125, 32, 100, 61, 123, 64, 123, 45, 50, 44, > 77, 125, 45, 36, 109, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 49, 10, 45, 105, 102, 32, 36, 50, 32, 45, 45, 103, 101, 91, 49, 93, > 32, 123, 36, 109, 43, 36, 100, 42, 40, 36, 62, 43, 49, 41, 47, 36, > 49, 125, 10, 45, 101, 108, 115, 101, 32, 45, 45, 116, 50, 91, 49, 93, > 32, 123, 36, 109, 43, 36, 100, 42, 36, 62, 47, 36, 49, 125, 44, 123, > 36, 109, 43, 36, 100, 42, 40, 36, 62, 43, 49, 41, 47, 36, 49, 125, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 49, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 91, 45, 50, 93, 32, > 45, 105, 102, 32, 36, 51, 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 44, 48, 44, 36, 62, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 44, > 49, 93, 32, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 101, 120, 112, 97, 110, 100, 95, 120, 32, 58, 32, > 115, 105, 122, 101, 95, 120, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, > 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, > 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, > 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 69, 120, 112, 97, 110, 100, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, > 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 114, 100, 101, 114, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 101, 120, 112, 97, 110, 100, 95, > 120, 32, 51, 48, 44, 48, 10, 101, 120, 112, 97, 110, 100, 95, 120, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 50, 60, 61, 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 69, 120, 112, 97, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 32, > 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, > 32, 98, 111, 114, 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, > 110, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 64, > 123, 36, 62, 44, 119, 43, 50, 42, 36, 49, 125, 44, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 36, 50, 44, > 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 120, > 112, 97, 110, 100, 95, 120, 121, 32, 58, 32, 115, 105, 122, 101, 62, 61, > 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, > 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, > 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, > 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 112, 97, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, > 121, 45, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 98, 111, 114, 100, 101, 114, 61, 49, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 51, 48, 44, 48, > 10, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 50, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, 97, 110, > 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, 115, 32, 119, 105, 116, 104, > 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 98, 111, 114, > 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 36, > 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, > 119, 43, 50, 42, 36, 49, 125, 44, 64, 123, 36, 62, 44, 104, 43, 50, > 42, 36, 49, 125, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, > 44, 36, 50, 44, 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 101, 120, 112, 97, 110, 100, 95, 120, 121, 122, 32, 58, 32, 115, > 105, 122, 101, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, > 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 112, 97, 110, 100, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 98, 111, 114, 100, 101, 114, 61, 49, 39, > 46, 10, 101, 120, 112, 97, 110, 100, 95, 120, 121, 122, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, > 61, 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, > 97, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, > 103, 32, 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 32, 119, > 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, > 98, 111, 114, 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, > 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 64, 123, > 36, 62, 44, 119, 43, 50, 42, 36, 49, 125, 44, 64, 123, 36, 62, 44, > 104, 43, 50, 42, 36, 49, 125, 44, 64, 123, 36, 62, 44, 100, 43, 50, > 42, 36, 49, 125, 44, 49, 48, 48, 37, 44, 48, 44, 36, 50, 44, 48, > 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 120, 112, > 97, 110, 100, 95, 121, 32, 58, 32, 115, 105, 122, 101, 95, 121, 62, 61, > 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, > 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, > 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, > 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 112, 97, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, > 45, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 98, 111, 114, 100, 101, 114, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 101, 120, 112, 97, 110, 100, 95, 121, 32, 51, 48, 44, 48, 10, 101, > 120, 112, 97, 110, 100, 95, 121, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 49, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 50, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, 97, 110, 100, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, > 32, 121, 45, 97, 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, > 101, 32, 36, 49, 32, 97, 110, 100, 32, 98, 111, 114, 100, 101, 114, 32, > 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 36, 50, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, 64, 123, 36, 62, > 44, 104, 43, 50, 42, 36, 49, 125, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 48, 44, 36, 50, 44, 48, 46, 53, 44, 48, 46, 53, 44, > 48, 46, 53, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 101, 120, 112, 97, 110, 100, 95, 122, 32, 58, > 32, 115, 105, 122, 101, 95, 122, 62, 61, 48, 44, 95, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, > 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 69, 120, 112, 97, 110, 100, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 114, 100, 101, 114, 61, > 49, 39, 46, 10, 101, 120, 112, 97, 110, 100, 95, 122, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, > 61, 50, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 120, 112, > 97, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, > 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 32, 119, 105, 116, > 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 98, 111, > 114, 100, 101, 114, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, > 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 64, 123, 36, 62, 44, 100, 43, 50, 42, 36, > 49, 125, 44, 49, 48, 48, 37, 44, 48, 44, 36, 50, 44, 48, 46, 53, > 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 111, 110, 116, 97, > 103, 101, 32, 58, 32, 34, 95, 108, 97, 121, 111, 117, 116, 95, 99, 111, > 100, 101, 34, 44, 95, 109, 111, 110, 116, 97, 103, 101, 95, 109, 111, 100, > 101, 61, 123, 32, 48, 60, 61, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 60, 61, 49, 32, 124, 32, 50, 60, 61, 115, 99, 97, 108, 101, 43, 50, > 60, 61, 51, 32, 125, 44, 95, 111, 117, 116, 112, 117, 116, 95, 109, 111, > 100, 101, 61, 123, 32, 48, 61, 115, 105, 110, 103, 108, 101, 32, 108, 97, > 121, 101, 114, 32, 124, 32, 49, 61, 109, 117, 108, 116, 105, 112, 108, 101, > 32, 108, 97, 121, 101, 114, 115, 32, 125, 44, 34, 95, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 95, 99, 111, 109, 109, 97, 110, 100, 34, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, > 97, 32, 115, 105, 110, 103, 108, 101, 32, 105, 109, 97, 103, 101, 32, 109, > 111, 110, 116, 97, 103, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, 101, 32, > 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, 72, 39, > 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, 32, 97, 108, 108, > 32, 105, 109, 97, 103, 101, 115, 32, 104, 111, 114, 105, 122, 111, 110, 116, > 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, > 32, 39, 86, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, > 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 118, 101, 114, 116, > 105, 99, 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 45, 32, 39, 65, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, > 108, 101, 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, > 32, 97, 110, 32, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, 32, 97, > 114, 114, 97, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, > 32, 39, 66, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, > 32, 97, 108, 108, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 97, > 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 97, 114, 114, 97, 121, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, 72, 97, 58, > 98, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, 101, 32, 116, > 119, 111, 32, 98, 108, 111, 99, 107, 115, 32, 39, 97, 39, 32, 97, 110, > 100, 32, 39, 98, 39, 32, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, > 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, > 86, 97, 58, 98, 39, 32, 116, 111, 32, 97, 115, 115, 101, 109, 98, 108, > 101, 32, 116, 119, 111, 32, 98, 108, 111, 99, 107, 115, 32, 39, 97, 39, > 32, 97, 110, 100, 32, 39, 98, 39, 32, 118, 101, 114, 116, 105, 99, 97, > 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, > 39, 82, 97, 39, 32, 116, 111, 32, 114, 111, 116, 97, 116, 101, 32, 97, > 32, 98, 108, 111, 99, 107, 32, 39, 97, 39, 32, 98, 121, 32, 57, 48, > 32, 100, 101, 103, 46, 32, 40, 39, 82, 82, 97, 39, 32, 102, 111, 114, > 32, 49, 56, 48, 32, 100, 101, 103, 46, 32, 97, 110, 100, 32, 39, 82, > 82, 82, 97, 39, 32, 102, 111, 114, 32, 50, 55, 48, 32, 100, 101, 103, > 46, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 45, 32, 39, > 77, 97, 39, 32, 116, 111, 32, 109, 105, 114, 114, 111, 114, 32, 97, 32, > 98, 108, 111, 99, 107, 32, 39, 97, 39, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 88, 45, 97, 120, 105, 115, 32, 40, 39, 77, 82, 82, > 97, 39, 32, 102, 111, 114, 32, 116, 104, 101, 32, 89, 45, 97, 120, 105, > 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 32, 98, > 108, 111, 99, 107, 32, 39, 97, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 97, 110, 32, 105, 109, 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 32, > 40, 116, 114, 101, 97, 116, 101, 100, 32, 112, 101, 114, 105, 111, 100, 105, > 99, 97, 108, 108, 121, 41, 32, 111, 114, 32, 97, 32, 110, 101, 115, 116, > 101, 100, 32, 108, 97, 121, 111, 117, 116, 32, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 32, 105, 116, 115, 101, 108, 102, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 70, 111, 114, 32, 101, 120, 97, 109, 112, 108, > 101, 44, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, 101, 32, 39, > 72, 48, 58, 86, 49, 58, 50, 39, 32, 99, 114, 101, 97, 116, 101, 115, > 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 119, 104, 101, 114, 101, 32, > 105, 109, 97, 103, 101, 32, 91, 48, 93, 32, 105, 115, 32, 111, 110, 32, > 116, 104, 101, 32, 108, 101, 102, 116, 44, 32, 97, 110, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 91, 49, 93, 32, 97, 110, 100, 32, 91, 50, 93, > 32, 118, 101, 114, 116, 105, 99, 97, 108, 108, 121, 32, 112, 97, 99, 107, > 101, 100, 32, 111, 110, 32, 116, 104, 101, 32, 114, 105, 103, 104, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 108, 97, 121, 111, 117, > 116, 95, 99, 111, 100, 101, 61, 65, 39, 44, 32, 39, 109, 111, 110, 116, > 97, 103, 101, 95, 109, 111, 100, 101, 61, 50, 39, 44, 32, 111, 117, 116, > 112, 117, 116, 95, 109, 111, 100, 101, 61, 39, 48, 39, 32, 97, 110, 100, > 32, 39, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 95, 99, 111, 109, > 109, 97, 110, 100, 61, 34, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 53, 49, 50, 32, > 45, 45, 112, 108, 97, 115, 109, 97, 91, 48, 93, 32, 45, 99, 117, 112, > 105, 100, 32, 50, 53, 54, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 48, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, 51, > 44, 51, 44, 48, 32, 45, 102, 114, 97, 109, 101, 32, 49, 48, 44, 49, > 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 45, > 109, 111, 110, 116, 97, 103, 101, 32, 65, 32, 45, 45, 109, 111, 110, 116, > 97, 103, 101, 91, 94, 45, 49, 93, 32, 72, 49, 58, 86, 48, 58, 86, > 72, 50, 58, 49, 72, 48, 58, 51, 10, 109, 111, 110, 116, 97, 103, 101, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 118, 97, 108, > 40, 36, 123, 50, 61, 50, 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, > 48, 32, 38, 38, 32, 36, 50, 60, 61, 51, 34, 32, 45, 115, 107, 105, > 112, 32, 34, 36, 123, 49, 61, 65, 125, 34, 44, 36, 123, 51, 61, 48, > 125, 44, 34, 36, 123, 52, 61, 125, 34, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 123, 36, 50, 60, 61, 49, 125, 32, 45, 118, 32, 43, 32, > 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 67, 114, 101, 97, 116, 101, > 32, 97, 108, 105, 103, 110, 101, 100, 32, 109, 111, 110, 116, 97, 103, 101, > 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, 101, 32, > 39, 36, 49, 39, 32, 97, 110, 100, 32, 97, 108, 105, 103, 110, 109, 101, > 110, 116, 32, 36, 50, 46, 34, 10, 45, 101, 108, 115, 101, 32, 45, 118, > 32, 43, 32, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 67, 114, 101, > 97, 116, 101, 32, 115, 99, 97, 108, 101, 100, 32, 109, 111, 110, 116, 97, > 103, 101, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 108, 97, 121, 111, 117, 116, 32, 99, 111, 100, > 101, 32, 39, 36, 49, 39, 32, 97, 110, 100, 32, 115, 99, 97, 108, 101, > 32, 34, 123, 36, 50, 45, 50, 125, 34, 46, 34, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 45, 10, 78, 61, 64, 35, 10, 45, 108, 91, > 93, 32, 95, 115, 99, 111, 100, 101, 61, 34, 36, 49, 34, 32, 95, 109, > 111, 100, 101, 61, 36, 50, 10, 45, 105, 102, 32, 123, 123, 34, 36, 49, > 34, 39, 61, 61, 39, 72, 125, 124, 124, 123, 34, 36, 49, 34, 39, 61, > 61, 39, 104, 125, 125, 32, 45, 105, 102, 32, 123, 36, 78, 62, 49, 125, > 32, 123, 36, 78, 45, 49, 125, 44, 49, 44, 49, 44, 49, 44, 45, 49, > 32, 36, 78, 44, 49, 44, 49, 44, 49, 44, 120, 32, 45, 97, 32, 120, > 32, 45, 121, 32, 45, 101, 108, 115, 101, 32, 45, 118, 32, 43, 32, 45, > 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 105, 102, 32, 123, 123, 34, 36, 49, 34, 39, 61, 61, 39, 86, 125, > 124, 124, 123, 34, 36, 49, 34, 39, 61, 61, 39, 118, 125, 125, 32, 45, > 105, 102, 32, 123, 36, 78, 62, 49, 125, 32, 123, 36, 78, 45, 49, 125, > 44, 49, 44, 49, 44, 49, 44, 45, 50, 32, 36, 78, 44, 49, 44, 49, > 44, 49, 44, 120, 32, 45, 97, 32, 120, 32, 45, 121, 32, 45, 101, 108, > 115, 101, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 123, 34, > 36, 49, 34, 39, 61, 61, 39, 65, 125, 124, 124, 123, 34, 36, 49, 34, > 39, 61, 61, 39, 97, 125, 124, 124, 123, 34, 36, 49, 34, 39, 61, 61, > 39, 66, 125, 124, 124, 123, 34, 36, 49, 34, 39, 61, 61, 39, 98, 125, > 125, 10, 45, 105, 102, 32, 123, 36, 78, 60, 50, 125, 32, 45, 118, 32, > 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 110, 114, 61, 123, 114, 111, 117, 110, 100, 40, 115, 113, 114, 116, 40, > 36, 78, 41, 41, 125, 32, 110, 99, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 78, 47, 36, 110, 114, 44, 49, 44, 49, 41, 125, 10, 45, 105, 102, > 32, 123, 123, 34, 36, 49, 34, 39, 61, 61, 39, 66, 125, 124, 124, 123, > 34, 36, 49, 34, 39, 61, 61, 39, 98, 125, 125, 32, 110, 61, 36, 110, > 114, 32, 110, 114, 61, 36, 110, 99, 32, 110, 99, 61, 36, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 36, 78, 44, 49, 44, 49, 44, 49, 44, 120, > 32, 45, 115, 32, 120, 44, 45, 123, 114, 111, 117, 110, 100, 40, 119, 47, > 36, 110, 114, 44, 49, 44, 49, 41, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, > 123, 119, 62, 49, 125, 32, 45, 105, 91, 48, 93, 32, 123, 119, 45, 49, > 125, 44, 49, 44, 49, 44, 49, 44, 45, 49, 32, 45, 97, 32, 120, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 32, 120, 10, 45, 105, 102, 32, 123, 36, 110, 114, > 62, 49, 125, 32, 45, 105, 91, 48, 93, 32, 123, 36, 110, 114, 45, 49, > 125, 44, 49, 44, 49, 44, 49, 44, 45, 50, 32, 45, 97, 32, 120, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 121, 10, 45, 101, 108, 115, 101, 10, > 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 102, 32, 39, 105, > 102, 40, 105, 61, 61, 55, 50, 124, 124, 105, 61, 61, 49, 48, 52, 44, > 45, 49, 44, 105, 102, 40, 105, 61, 61, 56, 54, 124, 124, 105, 61, 61, > 49, 49, 56, 44, 45, 50, 44, 105, 102, 40, 105, 61, 61, 56, 50, 124, > 124, 105, 61, 61, 49, 49, 52, 44, 45, 51, 44, 105, 102, 40, 105, 61, > 61, 55, 55, 124, 124, 105, 61, 61, 49, 48, 57, 44, 45, 52, 44, 105, > 102, 40, 105, 62, 61, 52, 56, 38, 38, 105, 60, 61, 53, 55, 44, 105, > 45, 52, 56, 44, 45, 53, 41, 41, 41, 41, 41, 39, 10, 45, 115, 32, > 43, 44, 45, 49, 32, 45, 115, 32, 43, 44, 45, 50, 32, 45, 115, 32, > 43, 44, 45, 51, 32, 45, 115, 32, 43, 44, 45, 52, 32, 45, 115, 32, > 43, 44, 45, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 105, 102, 32, 123, 105, 109, 62, 61, > 48, 125, 32, 45, 45, 43, 91, 45, 49, 93, 32, 52, 56, 32, 45, 61, > 91, 45, 50, 93, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 114, 111, 119, 115, 32, 48, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 32, 121, 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 102, 32, 39, 105, 102, 40, 105, > 60, 48, 44, 105, 44, 105, 37, 36, 78, 41, 39, 10, 45, 101, 110, 100, > 108, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 36, 78, 125, 32, 45, > 114, 109, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 91, 94, 45, 49, 93, 32, > 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 99, 61, > 123, 105, 91, 36, 62, 93, 125, 32, 45, 105, 102, 32, 123, 36, 99, 62, > 61, 48, 125, 32, 45, 105, 102, 32, 64, 123, 36, 99, 44, 110, 125, 32, > 45, 105, 91, 45, 50, 93, 32, 91, 36, 99, 93, 32, 105, 61, 123, 64, > 35, 45, 50, 125, 32, 45, 61, 91, 45, 49, 93, 32, 36, 105, 44, 48, > 44, 36, 62, 32, 114, 101, 102, 36, 105, 61, 36, 99, 32, 45, 101, 108, > 115, 101, 32, 45, 110, 109, 91, 36, 99, 93, 32, 49, 32, 114, 101, 102, > 36, 99, 61, 36, 99, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 95, 99, 111, 100, 101, 61, > 64, 45, 49, 32, 95, 108, 99, 111, 100, 101, 61, 123, 110, 97, 114, 103, > 40, 36, 95, 99, 111, 100, 101, 41, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 78, 61, 64, 35, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 78, 32, 40, 36, 62, 44, 48, 44, 48, 44, 64, 123, 36, 62, 44, 119, > 125, 44, 64, 123, 36, 62, 44, 104, 125, 44, 48, 44, 48, 44, 48, 41, > 32, 45, 100, 111, 110, 101, 10, 45, 108, 91, 36, 78, 45, 45, 49, 93, > 32, 95, 112, 61, 49, 32, 45, 107, 91, 64, 123, 45, 95, 109, 111, 110, > 116, 97, 103, 101, 125, 93, 32, 119, 61, 123, 105, 91, 51, 93, 125, 32, > 104, 61, 123, 105, 91, 52, 93, 125, 32, 45, 102, 32, 39, 105, 102, 40, > 105, 40, 48, 44, 121, 41, 60, 48, 44, 45, 49, 44, 105, 41, 39, 32, > 45, 100, 105, 115, 99, 97, 114, 100, 32, 45, 49, 32, 45, 114, 32, 56, > 44, 123, 104, 47, 56, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 101, > 110, 100, 108, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, > 52, 34, 41, 125, 32, 45, 109, 32, 34, 95, 95, 109, 111, 110, 116, 97, > 103, 101, 32, 58, 32, 36, 52, 32, 45, 107, 91, 48, 93, 34, 10, 45, > 101, 108, 115, 101, 10, 45, 109, 32, 34, 95, 95, 109, 111, 110, 116, 97, > 103, 101, 32, 58, 32, 45, 105, 102, 32, 123, 36, 34, 34, 55, 37, 50, > 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 105, 102, 32, 123, 36, 34, 34, 56, 37, 50, 125, 32, > 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 36, 34, 34, > 54, 125, 32, 45, 114, 32, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, > 110, 100, 40, 36, 34, 34, 52, 44, 49, 44, 49, 41, 41, 125, 44, 123, > 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 36, 34, 34, 53, > 44, 49, 44, 49, 41, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, 51, > 34, 10, 45, 101, 110, 100, 105, 102, 10, 115, 61, 64, 123, 45, 109, 97, > 120, 95, 115, 91, 94, 45, 49, 93, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 104, 125, 10, 105, 61, 123, 105, 40, 48, 44, 36, 62, 41, > 125, 32, 120, 105, 61, 123, 105, 40, 49, 44, 36, 62, 41, 125, 32, 121, > 105, 61, 123, 105, 40, 50, 44, 36, 62, 41, 125, 32, 119, 105, 61, 123, > 105, 40, 51, 44, 36, 62, 41, 125, 32, 104, 105, 61, 123, 105, 40, 52, > 44, 36, 62, 41, 125, 32, 97, 105, 61, 123, 105, 40, 53, 44, 36, 62, > 41, 125, 32, 109, 120, 105, 61, 123, 105, 40, 54, 44, 36, 62, 41, 125, > 32, 109, 121, 105, 61, 123, 105, 40, 55, 44, 36, 62, 41, 125, 10, 45, > 105, 102, 32, 123, 36, 51, 124, 124, 33, 36, 62, 125, 32, 45, 105, 91, > 45, 50, 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 36, 115, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 95, 95, 109, 111, 110, 116, 97, 103, 101, > 91, 36, 105, 93, 32, 36, 123, 114, 101, 102, 36, 105, 125, 44, 36, 120, > 105, 44, 36, 121, 105, 44, 123, 109, 97, 120, 40, 49, 44, 36, 119, 105, > 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 36, 104, 105, 41, 125, 44, > 36, 97, 105, 44, 36, 109, 120, 105, 44, 36, 109, 121, 105, 10, 45, 106, > 91, 45, 50, 93, 32, 91, 36, 105, 93, 44, 36, 120, 105, 44, 36, 121, > 105, 10, 45, 100, 111, 110, 101, 10, 45, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 95, 95, 109, 111, 110, 116, 97, 103, 101, 10, 45, 114, 109, > 91, 48, 45, 123, 36, 78, 45, 49, 125, 44, 45, 49, 93, 32, 45, 110, > 109, 32, 34, 91, 77, 111, 110, 116, 97, 103, 101, 32, 39, 36, 49, 39, > 93, 34, 10, 45, 118, 32, 43, 10, 95, 109, 111, 110, 116, 97, 103, 101, > 32, 58, 10, 45, 105, 102, 32, 123, 36, 95, 112, 62, 36, 95, 108, 99, > 111, 100, 101, 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 109, 111, 110, 116, 97, 103, 101, 39, 58, > 32, 73, 110, 99, 111, 109, 112, 108, 101, 116, 101, 32, 108, 97, 121, 111, > 117, 116, 32, 99, 111, 100, 101, 32, 39, 34, 36, 95, 115, 99, 111, 100, > 101, 34, 39, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 99, 61, 123, > 97, 114, 103, 40, 36, 95, 112, 44, 36, 95, 99, 111, 100, 101, 41, 125, > 10, 45, 105, 102, 32, 123, 36, 99, 62, 61, 48, 125, 32, 95, 112, 61, > 123, 36, 95, 112, 43, 49, 125, 32, 45, 117, 32, 36, 99, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 99, 61, 61, 45, 52, 125, 10, 95, 112, 61, > 123, 36, 95, 112, 43, 49, 125, 32, 108, 61, 64, 123, 45, 95, 109, 111, > 110, 116, 97, 103, 101, 125, 32, 45, 102, 91, 36, 108, 93, 32, 39, 97, > 61, 105, 40, 53, 44, 121, 41, 37, 50, 59, 105, 102, 40, 40, 120, 61, > 61, 55, 38, 38, 97, 41, 124, 124, 40, 120, 61, 61, 54, 38, 38, 33, > 97, 41, 44, 33, 105, 44, 105, 102, 40, 120, 61, 61, 49, 44, 105, 40, > 51, 44, 48, 41, 45, 105, 40, 51, 44, 121, 41, 45, 105, 44, 105, 41, > 41, 39, 32, 45, 117, 32, 36, 108, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 99, 61, 61, 45, 51, 125, 10, 95, 112, 61, 123, 36, 95, 112, 43, > 49, 125, 32, 108, 61, 64, 123, 45, 95, 109, 111, 110, 116, 97, 103, 101, > 125, 32, 45, 108, 91, 36, 108, 93, 32, 45, 115, 32, 120, 32, 45, 43, > 91, 50, 93, 32, 91, 52, 93, 32, 45, 114, 118, 91, 49, 44, 50, 93, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 43, 91, 49, 93, 32, > 64, 123, 52, 44, 48, 125, 32, 45, 114, 118, 91, 51, 44, 52, 93, 32, > 45, 43, 91, 53, 93, 32, 49, 32, 45, 97, 32, 120, 32, 45, 101, 110, > 100, 108, 32, 45, 117, 32, 36, 108, 10, 45, 101, 108, 115, 101, 10, 95, > 112, 61, 123, 36, 95, 112, 43, 49, 125, 10, 108, 61, 64, 123, 45, 95, > 109, 111, 110, 116, 97, 103, 101, 125, 32, 108, 119, 61, 64, 123, 36, 108, > 44, 51, 125, 32, 108, 104, 61, 64, 123, 36, 108, 44, 52, 125, 10, 114, > 61, 64, 123, 45, 95, 109, 111, 110, 116, 97, 103, 101, 125, 32, 114, 119, > 61, 64, 123, 36, 114, 44, 51, 125, 32, 114, 104, 61, 64, 123, 36, 114, > 44, 52, 125, 10, 45, 105, 102, 32, 123, 36, 99, 61, 61, 45, 49, 125, > 10, 45, 105, 102, 32, 123, 36, 95, 109, 111, 100, 101, 60, 50, 125, 10, > 104, 61, 123, 109, 97, 120, 40, 36, 108, 104, 44, 36, 114, 104, 41, 125, > 32, 45, 43, 91, 36, 108, 93, 32, 39, 48, 44, 48, 44, 123, 40, 36, > 104, 45, 36, 108, 104, 41, 42, 109, 105, 110, 40, 49, 44, 36, 95, 109, > 111, 100, 101, 41, 125, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, > 32, 45, 43, 91, 36, 114, 93, 32, 39, 48, 44, 36, 108, 119, 44, 123, > 40, 36, 104, 45, 36, 114, 104, 41, 42, 109, 105, 110, 40, 49, 44, 36, > 95, 109, 111, 100, 101, 41, 125, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 48, 39, 10, 45, 101, 108, 115, 101, 10, 104, 61, 123, 40, 36, 95, 109, > 111, 100, 101, 45, 50, 41, 42, 109, 97, 120, 40, 36, 108, 104, 44, 36, > 114, 104, 41, 43, 40, 51, 45, 36, 95, 109, 111, 100, 101, 41, 42, 109, > 105, 110, 40, 36, 108, 104, 44, 36, 114, 104, 41, 125, 10, 108, 102, 61, > 123, 36, 104, 47, 36, 108, 104, 125, 32, 114, 102, 61, 123, 36, 104, 47, > 36, 114, 104, 125, 32, 108, 119, 61, 123, 36, 108, 119, 42, 36, 108, 102, > 125, 32, 114, 119, 61, 123, 36, 114, 119, 42, 36, 114, 102, 125, 10, 45, > 42, 91, 36, 108, 93, 32, 39, 49, 44, 36, 108, 102, 44, 36, 108, 102, > 44, 36, 108, 102, 44, 36, 108, 102, 44, 49, 44, 49, 44, 49, 39, 32, > 45, 42, 91, 36, 114, 93, 32, 39, 49, 44, 36, 114, 102, 44, 36, 114, > 102, 44, 36, 114, 102, 44, 36, 114, 102, 44, 49, 44, 49, 44, 49, 39, > 32, 45, 43, 91, 36, 114, 93, 32, 39, 48, 44, 36, 108, 119, 44, 48, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 91, 36, 108, 93, 32, 40, 45, 49, 44, 48, 44, > 48, 44, 123, 36, 108, 119, 43, 36, 114, 119, 125, 44, 36, 104, 44, 48, > 44, 48, 44, 48, 41, 32, 45, 97, 91, 36, 108, 44, 123, 36, 108, 43, > 49, 125, 93, 32, 121, 32, 45, 97, 91, 36, 108, 93, 32, 91, 36, 114, > 93, 44, 121, 32, 45, 114, 91, 36, 114, 93, 32, 49, 44, 49, 44, 49, > 44, 49, 44, 48, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, > 36, 95, 109, 111, 100, 101, 60, 50, 125, 10, 119, 61, 123, 109, 97, 120, > 40, 36, 108, 119, 44, 36, 114, 119, 41, 125, 32, 45, 43, 91, 36, 108, > 93, 32, 39, 48, 44, 123, 40, 36, 119, 45, 36, 108, 119, 41, 42, 109, > 105, 110, 40, 49, 44, 36, 95, 109, 111, 100, 101, 41, 125, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, 32, 45, 43, 91, 36, 114, > 93, 32, 39, 48, 44, 123, 40, 36, 119, 45, 36, 114, 119, 41, 42, 109, > 105, 110, 40, 49, 44, 36, 95, 109, 111, 100, 101, 41, 125, 44, 36, 108, > 104, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 39, 10, 45, 101, 108, > 115, 101, 10, 119, 61, 123, 40, 36, 95, 109, 111, 100, 101, 45, 50, 41, > 42, 109, 97, 120, 40, 36, 108, 119, 44, 36, 114, 119, 41, 43, 40, 51, > 45, 36, 95, 109, 111, 100, 101, 41, 42, 109, 105, 110, 40, 36, 108, 119, > 44, 36, 114, 119, 41, 125, 10, 108, 102, 61, 123, 36, 119, 47, 36, 108, > 119, 125, 32, 114, 102, 61, 123, 36, 119, 47, 36, 114, 119, 125, 32, 108, > 104, 61, 123, 36, 108, 104, 42, 36, 108, 102, 125, 32, 114, 104, 61, 123, > 36, 114, 104, 42, 36, 114, 102, 125, 10, 45, 42, 91, 36, 108, 93, 32, > 39, 49, 44, 36, 108, 102, 44, 36, 108, 102, 44, 36, 108, 102, 44, 36, > 108, 102, 44, 49, 44, 49, 44, 49, 39, 32, 45, 42, 91, 36, 114, 93, > 32, 39, 49, 44, 36, 114, 102, 44, 36, 114, 102, 44, 36, 114, 102, 44, > 36, 114, 102, 44, 49, 44, 49, 44, 49, 39, 32, 45, 43, 91, 36, 114, > 93, 32, 39, 48, 44, 48, 44, 36, 108, 104, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 48, 39, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, > 36, 108, 93, 32, 40, 45, 49, 44, 48, 44, 48, 44, 36, 119, 44, 123, > 36, 108, 104, 43, 36, 114, 104, 125, 44, 48, 44, 48, 44, 48, 41, 32, > 45, 97, 91, 36, 108, 44, 123, 36, 108, 43, 49, 125, 93, 32, 121, 32, > 45, 97, 91, 36, 108, 93, 32, 91, 36, 114, 93, 44, 121, 32, 45, 114, > 91, 36, 114, 93, 32, 49, 44, 49, 44, 49, 44, 49, 44, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 117, 32, 36, 108, 10, 45, 101, 110, 100, > 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 114, 114, 111, 114, > 32, 58, 32, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, > 46, 46, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, > 105, 114, 114, 111, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 48, 93, 32, 99, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 121, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, > 101, 115, 32, 50, 44, 50, 10, 35, 64, 103, 109, 105, 99, 32, 112, 101, > 114, 109, 117, 116, 101, 32, 58, 32, 112, 101, 114, 109, 117, 116, 97, 116, > 105, 111, 110, 95, 115, 116, 114, 105, 110, 103, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 101, 114, 109, 117, 116, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 32, 97, 120, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 112, 101, 114, 109, 117, 116, 97, 116, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 101, 114, 109, 117, 116, > 97, 116, 105, 111, 110, 39, 32, 105, 115, 32, 97, 32, 99, 111, 109, 98, > 105, 110, 97, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 99, > 104, 97, 114, 97, 99, 116, 101, 114, 32, 115, 101, 116, 32, 123, 120, 124, > 121, 124, 122, 124, 99, 125, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 101, 46, 103, 46, 32, 39, 120, 121, 99, 122, 39, 44, 32, 39, 99, > 120, 121, 122, 39, 44, 32, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, > 101, 114, 109, 117, 116, 101, 32, 121, 120, 122, 99, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 114, 101, 115, 105, 122, 101, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, 32, 58, 32, 91, > 105, 109, 97, 103, 101, 93, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, > 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, 97, 99, 32, > 58, 32, 123, 91, 105, 109, 97, 103, 101, 95, 119, 93, 32, 124, 32, 119, > 105, 100, 116, 104, 62, 48, 91, 37, 93, 125, 44, 95, 123, 91, 105, 109, > 97, 103, 101, 95, 104, 93, 32, 124, 32, 104, 101, 105, 103, 104, 116, 62, > 48, 91, 37, 93, 125, 44, 95, 123, 91, 105, 109, 97, 103, 101, 95, 100, > 93, 32, 124, 32, 100, 101, 112, 116, 104, 62, 48, 91, 37, 93, 125, 44, > 95, 123, 91, 105, 109, 97, 103, 101, 95, 115, 93, 32, 124, 32, 115, 112, > 101, 99, 116, 114, 117, 109, 62, 48, 91, 37, 93, 125, 44, 95, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, > 122, 44, 95, 97, 99, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 114, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, > 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, > 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, > 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, > 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, > 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, > 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, > 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, > 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, > 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, > 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, > 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, > 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, > 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, > 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 32, 111, 114, 32, 52, > 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, > 116, 111, 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, > 116, 44, 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, > 101, 100, 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, > 93, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, 111, > 97, 114, 103, 115, 41, 32, 114, 117, 110, 115, 32, 105, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 109, 111, 100, 101, 32, 40, 117, 115, 101, > 115, 32, 116, 104, 101, 32, 105, 110, 115, 116, 97, 110, 116, 32, 119, 105, > 110, 100, 111, 119, 32, 91, 48, 93, 32, 105, 102, 32, 111, 112, 101, 110, > 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 49, 39, 44, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 40, 48, 44, 49, 59, 48, 44, 49, > 94, 48, 44, 48, 59, 49, 44, 49, 94, 49, 44, 49, 59, 49, 44, 49, > 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 51, 32, 45, 109, 117, 108, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, > 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 50, 56, 44, 49, 44, 51, > 44, 50, 32, 45, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, > 49, 50, 48, 37, 44, 49, 50, 48, 37, 44, 49, 44, 51, 44, 48, 44, > 49, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 45, 114, 101, 115, 105, > 122, 101, 91, 45, 49, 93, 32, 49, 50, 48, 37, 44, 49, 50, 48, 37, > 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 50, 44, 48, 46, 50, > 32, 45, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 91, 48, 93, 44, 49, 44, 51, 44, 52, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 111, 119, 50, 32, 58, 32, 95, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, > 97, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, > 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 115, 111, 32, 116, 104, 97, 116, 32, 101, 97, 99, 104, 32, > 100, 105, 109, 101, 110, 115, 105, 111, 110, 32, 105, 115, 32, 97, 32, 112, > 111, 119, 101, 114, 32, 111, 102, 32, 50, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 110, 111, 110, 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, > 116, 101, 110, 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, > 32, 49, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, > 118, 101, 114, 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, > 114, 32, 124, 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, > 105, 99, 117, 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, > 111, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, > 102, 102, 101, 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, > 44, 32, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, > 104, 101, 32, 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, > 52, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 105, 115, 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, > 39, 32, 115, 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, > 101, 110, 116, 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, > 97, 99, 104, 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, 111, > 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 44, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, 95, 112, 111, > 119, 50, 91, 45, 49, 93, 32, 48, 10, 114, 101, 115, 105, 122, 101, 95, > 112, 111, 119, 50, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 48, 125, 41, 32, 38, 38, 32, > 36, 49, 62, 61, 45, 49, 32, 38, 38, 32, 36, 49, 60, 61, 54, 34, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, > 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, > 48, 125, 44, 36, 123, 54, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 82, 101, 115, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 115, 111, 32, 116, 104, 97, 116, 32, 101, 97, 99, 104, 32, 100, > 105, 109, 101, 110, 115, 105, 111, 110, 32, 105, 115, 32, 97, 32, 112, 111, > 119, 101, 114, 32, 111, 102, 32, 50, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 114, 91, 36, 62, > 93, 32, 64, 123, 36, 62, 44, 50, 94, 40, 114, 111, 117, 110, 100, 40, > 108, 111, 103, 50, 40, 119, 41, 44, 49, 44, 49, 41, 41, 125, 44, 64, > 123, 36, 62, 44, 50, 94, 40, 114, 111, 117, 110, 100, 40, 108, 111, 103, > 50, 40, 104, 41, 44, 49, 44, 49, 41, 41, 125, 44, 64, 123, 36, 62, > 44, 50, 94, 40, 114, 111, 117, 110, 100, 40, 108, 111, 103, 50, 40, 100, > 41, 44, 49, 44, 49, 41, 41, 125, 44, 49, 48, 48, 37, 44, 36, 123, > 49, 45, 54, 125, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 114, 50, 100, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 95, 114, 97, > 116, 105, 111, 50, 100, 39, 46, 10, 114, 114, 50, 100, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, > 43, 10, 45, 95, 114, 101, 115, 105, 122, 101, 95, 114, 97, 116, 105, 111, > 50, 100, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 115, > 105, 122, 101, 95, 114, 97, 116, 105, 111, 50, 100, 32, 58, 32, 119, 105, > 100, 116, 104, 62, 48, 44, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 109, 111, 100, 101, 61, 123, 32, 48, 61, 105, 110, 115, 105, 100, 101, 32, > 124, 32, 49, 61, 111, 117, 116, 115, 105, 100, 101, 32, 124, 32, 50, 61, > 112, 97, 100, 100, 101, 100, 32, 125, 44, 48, 61, 60, 95, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 60, 61, 54, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 104, > 105, 108, 101, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 116, > 104, 101, 105, 114, 32, 97, 115, 112, 101, 99, 116, 32, 114, 97, 116, 105, > 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 114, 114, 50, 100, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 109, 111, 100, 101, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 61, 54, 39, 46, 10, 114, 101, 115, 105, 122, 101, 95, 114, 97, > 116, 105, 111, 50, 100, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, > 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, 95, 114, 97, 116, 105, 111, > 50, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, > 48, 32, 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 36, 123, 51, > 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, > 38, 38, 32, 36, 123, 52, 61, 54, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 52, 60, 61, 54, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, > 34, 82, 101, 115, 105, 122, 101, 32, 50, 100, 32, 105, 109, 97, 103, 101, > 34, 36, 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 120, 36, 50, 32, > 119, 105, 116, 104, 32, 114, 97, 116, 105, 111, 45, 34, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 36, 51, 44, 105, 110, 115, 105, 100, 101, 44, > 111, 117, 116, 115, 105, 100, 101, 44, 112, 97, 100, 100, 101, 100, 125, 92, > 10, 34, 32, 109, 111, 100, 101, 32, 97, 110, 100, 32, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, 32, 36, > 52, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 114, 97, 116, 105, 111, 61, 64, 123, 36, 62, 44, 105, > 102, 40, 36, 51, 61, 61, 49, 44, 109, 97, 120, 40, 36, 49, 47, 119, > 44, 36, 50, 47, 104, 41, 44, 109, 105, 110, 40, 36, 49, 47, 119, 44, > 36, 50, 47, 104, 41, 41, 125, 10, 45, 114, 91, 36, 62, 93, 32, 64, > 123, 36, 62, 44, 119, 42, 36, 114, 97, 116, 105, 111, 125, 44, 64, 123, > 36, 62, 44, 104, 42, 36, 114, 97, 116, 105, 111, 125, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 36, 52, 10, 45, 100, 111, 110, 101, 10, > 45, 105, 102, 32, 123, 36, 51, 61, 61, 50, 125, 32, 45, 114, 32, 36, > 49, 44, 36, 50, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 50, > 100, 120, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, > 115, 105, 122, 101, 50, 100, 120, 39, 46, 10, 114, 50, 100, 120, 32, 58, > 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, > 118, 32, 43, 10, 45, 95, 114, 101, 115, 105, 122, 101, 50, 100, 120, 32, > 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, > 50, 100, 120, 32, 58, 32, 119, 105, 100, 116, 104, 91, 37, 93, 62, 48, > 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, > 121, 44, 95, 97, 122, 44, 95, 97, 99, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, > 101, 114, 118, 105, 110, 103, 32, 50, 100, 32, 114, 97, 116, 105, 111, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 114, 50, 100, 120, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, > 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, > 61, 110, 111, 110, 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, > 110, 116, 101, 110, 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, > 124, 32, 49, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, > 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, > 97, 114, 32, 124, 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, > 98, 105, 99, 117, 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, > 122, 111, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, > 105, 102, 102, 101, 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, > 115, 44, 32, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, > 116, 104, 101, 32, 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, > 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 61, 123, 32, 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, > 32, 52, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 39, 32, 105, 115, 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 61, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 61, 123, 32, 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, > 99, 39, 32, 115, 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, > 109, 101, 110, 116, 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, > 101, 97, 99, 104, 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, > 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, > 111, 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, > 44, 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, > 100, 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 51, 39, 44, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, > 39, 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, 50, 100, > 120, 32, 49, 48, 48, 44, 50, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 120, 10, 114, 101, 115, 105, 122, 101, 50, 100, 120, 32, 58, 10, 45, 118, > 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, > 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, > 50, 100, 120, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, > 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 50, 60, 61, 54, 32, 38, 38, 32, 36, 123, 51, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, 38, > 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 52, 60, 61, 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, > 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 54, 60, 61, 49, > 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 55, 60, 61, 49, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 82, 101, 115, 105, 122, 101, 32, 50, 100, 32, 105, 109, 97, 103, > 101, 34, 36, 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 32, 112, 105, > 120, 101, 108, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, > 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, > 103, 32, 50, 100, 32, 114, 97, 116, 105, 111, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, > 36, 49, 42, 119, 44, 36, 49, 41, 125, 10, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 123, 109, 97, 120, > 40, 49, 44, 104, 42, 36, 115, 105, 122, 101, 47, 119, 41, 125, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 36, 123, 50, 45, 55, 125, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 50, 100, 121, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 50, 100, > 121, 39, 46, 10, 114, 50, 100, 121, 32, 58, 10, 45, 118, 32, 45, 32, > 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, > 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 36, 42, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 58, 32, > 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 61, 48, 44, 95, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, > 122, 44, 95, 97, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, > 110, 103, 32, 50, 100, 32, 114, 97, 116, 105, 111, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 114, 50, 100, 121, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, > 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, > 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, > 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, > 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, > 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, > 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, > 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, > 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, > 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, > 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, > 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, > 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, > 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, > 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, > 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, > 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, 111, 32, 39, 48, > 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 44, 32, 109, 117, > 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, 100, 32, 105, 110, > 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 51, 39, 44, 32, 39, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, 97, 120, 61, > 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 49, 48, > 48, 44, 50, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, 114, 101, > 115, 105, 122, 101, 50, 100, 121, 32, 58, 10, 45, 118, 32, 45, 32, 95, > 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, > 48, 32, 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 50, 60, 61, 54, 32, 38, 38, 32, 36, 123, 51, 61, 48, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, 38, 38, 32, 36, > 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, > 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, 54, 61, 48, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 54, 60, 61, 49, 32, 38, 38, > 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 55, > 60, 61, 49, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 82, > 101, 115, 105, 122, 101, 32, 50, 100, 32, 105, 109, 97, 103, 101, 34, 36, > 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 32, 112, 105, 120, 101, 108, > 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, > 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 50, > 100, 32, 114, 97, 116, 105, 111, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, > 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, > 104, 44, 36, 49, 41, 125, 10, 45, 114, 32, 123, 109, 97, 120, 40, 49, > 44, 119, 42, 36, 115, 105, 122, 101, 47, 104, 41, 125, 44, 123, 109, 97, > 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 36, 123, 50, 45, 55, 125, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 51, 100, 120, 32, 58, 32, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 51, 100, 120, 39, 46, > 10, 114, 51, 100, 120, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, > 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 114, 101, 115, > 105, 122, 101, 51, 100, 120, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 115, 105, 122, 101, 51, 100, 120, 32, 58, 32, 119, 105, 100, > 116, 104, 91, 37, 93, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 44, 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, 97, 99, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, > 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 51, 100, > 32, 114, 97, 116, 105, 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 51, 100, 120, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, 101, 32, 40, 109, 101, > 109, 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, 116, 41, 32, 124, 32, > 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 97, 114, 101, > 115, 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, 97, 103, 101, 32, 124, > 32, 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, 32, 52, 61, 103, 114, > 105, 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, 98, 105, 99, 32, 124, > 32, 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 39, 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, > 109, 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, 99, 99, 111, 114, 100, > 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 99, 104, 111, 115, 101, > 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 39, 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 45, 49, 32, 124, 32, > 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, 32, 109, 101, 97, 110, > 105, 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, 44, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 51, 32, 124, 32, 53, > 32, 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, > 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, > 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, 120, 44, > 97, 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, 101, 116, 32, 116, 104, > 101, 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 109, 111, 100, 101, > 32, 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, 32, 97, 120, 105, 115, > 32, 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, > 116, 105, 111, 110, 61, 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 115, 101, 116, 32, 116, 111, 32, 39, 48, 39, 32, 98, 121, 32, > 100, 101, 102, 97, 117, 108, 116, 44, 32, 109, 117, 115, 116, 32, 98, 101, > 32, 100, 101, 102, 105, 110, 101, 100, 32, 105, 110, 32, 114, 97, 110, 103, > 101, 32, 91, 48, 44, 49, 93, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, > 110, 61, 51, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 97, 120, 61, 97, 121, 61, 97, 122, > 61, 97, 99, 61, 48, 39, 46, 10, 114, 101, 115, 105, 122, 101, 51, 100, > 120, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, > 34, 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, > 114, 101, 115, 105, 122, 101, 51, 100, 120, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, > 51, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 54, 32, 38, > 38, 32, 36, 123, 51, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 51, 60, 61, 50, 32, 38, 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 52, 60, 61, 49, 32, 38, 38, 32, 36, 123, > 53, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, > 32, 38, 38, 32, 36, 123, 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 54, 60, 61, 49, 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 55, 60, 61, 49, 34, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 82, 101, 115, 105, 122, 101, 32, 51, > 100, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 116, 111, > 32, 36, 49, 32, 112, 105, 120, 101, 108, 115, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, > 115, 101, 114, 118, 105, 110, 103, 32, 51, 100, 32, 114, 97, 116, 105, 111, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 115, 105, 122, 101, 61, 123, > 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, > 92, 32, 36, 49, 125, 44, 36, 49, 42, 119, 44, 36, 49, 41, 125, 10, > 45, 114, 32, 123, 109, 97, 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, > 125, 44, 123, 109, 97, 120, 40, 49, 44, 104, 42, 36, 115, 105, 122, 101, > 47, 119, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 100, 42, 36, 115, > 105, 122, 101, 47, 119, 41, 125, 44, 49, 48, 48, 37, 44, 36, 123, 50, > 45, 55, 125, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 51, 100, 121, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 115, 105, > 122, 101, 51, 100, 121, 39, 46, 10, 114, 51, 100, 121, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, > 43, 10, 45, 95, 114, 101, 115, 105, 122, 101, 51, 100, 121, 32, 36, 42, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 115, 105, 122, 101, 51, 100, > 121, 32, 58, 32, 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 48, 44, > 95, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, > 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 97, 120, 44, 95, 97, 121, > 44, 95, 97, 122, 44, 95, 97, 99, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, > 104, 101, 32, 121, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, > 114, 118, 105, 110, 103, 32, 51, 100, 32, 114, 97, 116, 105, 111, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 114, 51, 100, 121, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 110, 111, 110, 101, 32, 40, 109, 101, 109, 111, 114, 121, 32, 99, 111, 110, > 116, 101, 110, 116, 41, 32, 124, 32, 48, 61, 110, 111, 110, 101, 32, 124, > 32, 49, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, 32, 50, 61, 97, > 118, 101, 114, 97, 103, 101, 32, 124, 32, 51, 61, 108, 105, 110, 101, 97, > 114, 32, 124, 32, 52, 61, 103, 114, 105, 100, 32, 124, 32, 53, 61, 98, > 105, 99, 117, 98, 105, 99, 32, 124, 32, 54, 61, 108, 97, 110, 99, 122, > 111, 115, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 104, 97, 115, 32, 100, 105, > 102, 102, 101, 114, 101, 110, 116, 32, 109, 101, 97, 110, 105, 110, 103, 115, > 44, 32, 97, 99, 99, 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 116, > 104, 101, 32, 99, 104, 111, 115, 101, 110, 32, 39, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 109, 111, 100, 101, 32, 58, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 45, 49, 32, 124, 32, 49, 32, 124, 32, 50, 32, 124, 32, > 52, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 105, 115, 32, 109, 101, 97, 110, 105, 110, 103, 108, 101, 115, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 46, 32, 87, 104, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, > 61, 123, 32, 51, 32, 124, 32, 53, 32, 124, 32, 54, 32, 125, 39, 44, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 97, 120, 44, 97, 121, 44, 97, 122, 44, 97, 99, > 39, 32, 115, 101, 116, 32, 116, 104, 101, 32, 97, 108, 105, 103, 110, 109, > 101, 110, 116, 32, 109, 111, 100, 101, 32, 97, 108, 111, 110, 103, 32, 101, > 97, 99, 104, 32, 97, 120, 105, 115, 32, 119, 104, 101, 110, 32, 39, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 48, 39, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 115, 101, 116, 32, 116, 111, > 32, 39, 48, 39, 32, 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 44, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, 91, 48, 44, 49, 93, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 51, 39, 44, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 97, 120, 61, 97, 121, 61, 97, 122, 61, 97, 99, 61, 48, 39, 46, 10, > 114, 101, 115, 105, 122, 101, 51, 100, 121, 32, 58, 10, 45, 118, 32, 45, > 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, > 95, 36, 48, 32, 36, 42, 10, 95, 114, 101, 115, 105, 122, 101, 51, 100, > 121, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 48, > 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 50, 60, 61, 54, 32, 38, 38, 32, 36, 123, 51, 61, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 50, 32, 38, 38, 32, > 36, 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, > 61, 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, 54, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 54, 60, 61, 49, 32, 38, > 38, 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 55, 60, 61, 49, 34, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 82, 101, 115, 105, 122, 101, 32, 51, 100, 32, 105, 109, 97, 103, 101, 34, > 36, 95, 95, 115, 34, 32, 116, 111, 32, 36, 49, 32, 112, 105, 120, 101, > 108, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, > 120, 105, 115, 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, > 51, 100, 32, 114, 97, 116, 105, 111, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, > 42, 104, 44, 36, 49, 41, 125, 10, 45, 114, 32, 123, 109, 97, 120, 40, > 49, 44, 119, 42, 36, 115, 105, 122, 101, 47, 104, 41, 125, 44, 123, 109, > 97, 120, 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 123, 109, 97, > 120, 40, 49, 44, 100, 42, 36, 115, 105, 122, 101, 47, 104, 41, 125, 44, > 49, 48, 48, 37, 44, 36, 123, 50, 45, 55, 125, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 114, 51, 100, 122, 32, 58, 32, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 114, 101, 115, 105, 122, 101, 51, 100, 122, 39, 46, 10, > 114, 51, 100, 122, 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, > 34, 36, 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 114, 101, 115, 105, > 122, 101, 51, 100, 122, 32, 36, 42, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 101, 115, 105, 122, 101, 51, 100, 122, 32, 58, 32, 100, 101, 112, 116, > 104, 91, 37, 93, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, > 95, 97, 120, 44, 95, 97, 121, 44, 95, 97, 122, 44, 95, 97, 99, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, > 44, 32, 112, 114, 101, 115, 101, 114, 118, 105, 110, 103, 32, 51, 100, 32, > 114, 97, 116, 105, 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 51, 100, 122, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, > 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 45, 49, 61, 110, 111, 110, 101, 32, 40, 109, 101, 109, > 111, 114, 121, 32, 99, 111, 110, 116, 101, 110, 116, 41, 32, 124, 32, 48, > 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 110, 101, 97, 114, 101, 115, > 116, 32, 124, 32, 50, 61, 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, > 51, 61, 108, 105, 110, 101, 97, 114, 32, 124, 32, 52, 61, 103, 114, 105, > 100, 32, 124, 32, 53, 61, 98, 105, 99, 117, 98, 105, 99, 32, 124, 32, > 54, 61, 108, 97, 110, 99, 122, 111, 115, 32, 125, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 104, 97, 115, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 109, > 101, 97, 110, 105, 110, 103, 115, 44, 32, 97, 99, 99, 111, 114, 100, 105, > 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 99, 104, 111, 115, 101, 110, > 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, > 32, 109, 111, 100, 101, 32, 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 45, 49, 32, 124, 32, 49, > 32, 124, 32, 50, 32, 124, 32, 52, 32, 125, 39, 44, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 105, 115, 32, 109, 101, 97, 110, 105, > 110, 103, 108, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 61, 48, 39, 44, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, > 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 46, 32, 87, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 61, 61, 123, 32, 51, 32, 124, 32, 53, 32, > 124, 32, 54, 32, 125, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, > 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, > 110, 101, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, 120, 44, 97, > 121, 44, 97, 122, 44, 97, 99, 39, 32, 115, 101, 116, 32, 116, 104, 101, > 32, 97, 108, 105, 103, 110, 109, 101, 110, 116, 32, 109, 111, 100, 101, 32, > 97, 108, 111, 110, 103, 32, 101, 97, 99, 104, 32, 97, 120, 105, 115, 32, > 119, 104, 101, 110, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, > 105, 111, 110, 61, 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 115, 101, 116, 32, 116, 111, 32, 39, 48, 39, 32, 98, 121, 32, 100, > 101, 102, 97, 117, 108, 116, 44, 32, 109, 117, 115, 116, 32, 98, 101, 32, > 100, 101, 102, 105, 110, 101, 100, 32, 105, 110, 32, 114, 97, 110, 103, 101, > 32, 91, 48, 44, 49, 93, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 51, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, > 39, 32, 97, 110, 100, 32, 39, 97, 120, 61, 97, 121, 61, 97, 122, 61, > 97, 99, 61, 48, 39, 46, 10, 114, 101, 115, 105, 122, 101, 51, 100, 122, > 32, 58, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, > 32, 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 42, 10, 95, 114, > 101, 115, 105, 122, 101, 51, 100, 122, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 54, 32, 38, 38, > 32, 36, 123, 51, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, > 60, 61, 50, 32, 38, 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 52, 60, 61, 49, 32, 38, 38, 32, 36, 123, 53, > 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 32, > 38, 38, 32, 36, 123, 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 54, 60, 61, 49, 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 55, 60, 61, 49, 34, 10, 45, 101, 91, > 48, 45, 45, 51, 93, 32, 34, 82, 101, 115, 105, 122, 101, 32, 51, 100, > 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, 116, 111, 32, > 36, 49, 32, 112, 105, 120, 101, 108, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 44, 32, 112, 114, 101, 115, > 101, 114, 118, 105, 110, 103, 32, 51, 100, 32, 114, 97, 116, 105, 111, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 115, 105, 122, 101, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 49, 125, 44, 36, 49, 42, 100, 44, 36, 49, 41, 125, 10, 45, > 114, 91, 36, 62, 93, 32, 123, 109, 97, 120, 40, 49, 44, 119, 42, 36, > 115, 105, 122, 101, 47, 100, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, > 104, 42, 36, 115, 105, 122, 101, 47, 100, 41, 125, 44, 123, 109, 97, 120, > 40, 49, 44, 36, 115, 105, 122, 101, 41, 125, 44, 49, 48, 48, 37, 44, > 36, 123, 50, 45, 55, 125, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 111, 116, 97, 116, 101, 32, 58, 32, 97, 110, 103, 108, 101, 44, 95, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 44, 95, 99, 120, 91, 37, 93, 44, 95, 99, > 121, 91, 37, 93, 44, 95, 122, 111, 111, 109, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 111, 116, 97, 116, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 97, 110, 103, 108, 101, 32, 40, 105, 110, 32, 100, 101, 103, 46, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, > 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 108, 105, > 110, 101, 97, 114, 32, 124, 32, 50, 61, 98, 105, 99, 117, 98, 105, 99, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 87, 104, 101, 110, 32, 114, 111, 116, 97, 116, 105, 111, 110, 32, > 99, 101, 110, 116, 101, 114, 32, 40, 39, 99, 120, 39, 44, 39, 99, 121, > 39, 41, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, > 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, 32, 116, 104, 101, > 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 112, 114, 101, 115, 101, 114, > 118, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 44, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 49, 39, 44, 32, 39, > 99, 120, 61, 99, 121, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 32, 97, 110, 100, 32, 39, 122, 111, 111, 109, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 45, > 50, 53, 44, 49, 44, 50, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, > 46, 54, 32, 45, 114, 111, 116, 97, 116, 101, 91, 48, 93, 32, 50, 53, > 10, 35, 64, 103, 109, 105, 99, 32, 114, 111, 116, 97, 116, 101, 95, 116, > 105, 108, 101, 97, 98, 108, 101, 32, 58, 32, 97, 110, 103, 108, 101, 44, > 95, 109, 97, 120, 95, 115, 105, 122, 101, 95, 102, 97, 99, 116, 111, 114, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 111, 116, > 97, 116, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 97, 110, 103, 108, 101, 32, 97, 110, 100, 32, 109, 97, 107, 101, 32, > 116, 104, 101, 109, 32, 116, 105, 108, 101, 97, 98, 108, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 114, 101, 115, 117, 108, > 116, 105, 110, 103, 32, 115, 105, 122, 101, 32, 111, 102, 32, 97, 110, 32, > 105, 109, 97, 103, 101, 32, 105, 115, 32, 116, 111, 111, 32, 98, 105, 103, > 44, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 114, > 101, 112, 108, 97, 99, 101, 100, 32, 98, 121, 32, 97, 32, 49, 120, 49, > 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 109, 97, 120, 95, 115, 105, 122, 101, 95, 102, 97, 99, 116, 111, > 114, 61, 56, 39, 46, 10, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, > 101, 97, 98, 108, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, > 123, 50, 61, 56, 125, 62, 61, 48, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 82, 111, 116, 97, 116, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 49, 32, 100, > 101, 103, 46, 32, 97, 110, 100, 32, 109, 97, 107, 101, 32, 116, 104, 101, > 109, 32, 116, 105, 108, 101, 97, 98, 108, 101, 46, 34, 10, 45, 118, 32, > 45, 10, 97, 110, 103, 108, 101, 61, 123, 36, 49, 37, 51, 54, 48, 125, > 10, 45, 105, 102, 32, 123, 36, 97, 110, 103, 108, 101, 62, 61, 50, 55, > 48, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, 50, 55, 48, 32, 97, > 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, 45, 50, 55, 48, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 97, 110, 103, 108, 101, 62, > 61, 49, 56, 48, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, 49, 56, > 48, 32, 97, 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, 45, > 49, 56, 48, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 97, 110, 103, > 108, 101, 62, 61, 57, 48, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, > 57, 48, 32, 97, 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, > 45, 57, 48, 125, 10, 45, 101, 110, 100, 105, 102, 10, 40, 48, 44, 49, > 59, 49, 44, 56, 59, 49, 44, 55, 59, 49, 44, 54, 59, 49, 44, 53, > 59, 49, 44, 52, 59, 49, 44, 53, 59, 49, 44, 51, 59, 50, 44, 53, > 59, 49, 44, 50, 59, 50, 44, 53, 59, 51, 44, 53, 59, 50, 44, 51, > 59, 51, 44, 52, 59, 52, 44, 53, 59, 49, 44, 49, 59, 53, 44, 52, > 59, 55, 44, 53, 59, 51, 44, 50, 59, 56, 44, 53, 59, 57, 44, 53, > 59, 50, 44, 49, 59, 51, 44, 49, 59, 52, 44, 49, 59, 53, 44, 49, > 59, 54, 44, 49, 59, 55, 44, 49, 59, 56, 44, 49, 41, 10, 45, 115, > 91, 45, 49, 93, 32, 120, 44, 50, 32, 45, 45, 47, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 97, 116, 97, 110, 91, 45, 49, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 123, 49, 56, 48, 47, 112, 105, 125, 10, 40, 36, > 97, 110, 103, 108, 101, 41, 32, 45, 105, 110, 100, 101, 120, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 112, > 61, 64, 123, 45, 51, 44, 64, 45, 49, 125, 32, 113, 61, 64, 123, 45, > 50, 44, 64, 45, 49, 125, 32, 45, 114, 109, 91, 45, 51, 45, 45, 49, > 93, 10, 45, 105, 102, 32, 123, 33, 36, 112, 124, 124, 33, 36, 113, 125, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 116, 104, 101, 116, 97, 61, 123, 97, 116, 97, 110, 50, 40, 36, > 112, 44, 36, 113, 41, 125, 10, 103, 99, 100, 61, 64, 123, 45, 103, 99, > 100, 34, 32, 34, 123, 104, 42, 36, 113, 125, 44, 123, 119, 42, 36, 112, > 125, 125, 10, 112, 119, 61, 123, 104, 42, 36, 113, 47, 36, 103, 99, 100, > 125, 10, 110, 119, 61, 123, 114, 111, 117, 110, 100, 40, 36, 112, 119, 42, > 119, 47, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 41, 125, 10, > 103, 99, 100, 61, 64, 123, 45, 103, 99, 100, 34, 32, 34, 123, 104, 42, > 36, 112, 125, 44, 123, 119, 42, 36, 113, 125, 125, 10, 113, 104, 61, 123, > 119, 42, 36, 113, 47, 36, 103, 99, 100, 125, 10, 110, 104, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 113, 104, 42, 104, 47, 99, 111, 115, 40, 36, > 116, 104, 101, 116, 97, 41, 41, 125, 10, 45, 105, 102, 32, 123, 33, 36, > 50, 34, 32, 124, 124, 32, 34, 40, 36, 110, 119, 60, 36, 50, 42, 119, > 34, 32, 38, 38, 32, 34, 36, 110, 104, 60, 36, 50, 42, 104, 41, 125, > 10, 45, 114, 32, 123, 49, 46, 53, 42, 36, 110, 119, 125, 44, 123, 49, > 46, 53, 42, 36, 110, 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 50, 10, 45, 114, 111, 116, 97, 116, 101, 32, 123, 36, 116, 104, 101, > 116, 97, 42, 49, 56, 48, 47, 112, 105, 125, 44, 49, 44, 50, 44, 53, > 48, 37, 44, 53, 48, 37, 10, 45, 114, 32, 36, 110, 119, 44, 36, 110, > 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 50, 44, 48, 46, 53, > 44, 48, 46, 53, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 32, 49, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 114, 111, 119, 115, 32, 58, 32, 123, 32, 91, 105, 109, 97, 103, 101, 48, > 93, 32, 124, 32, 121, 48, 91, 37, 93, 32, 125, 44, 95, 123, 32, 91, > 105, 109, 97, 103, 101, 49, 93, 32, 124, 32, 121, 49, 91, 37, 93, 32, > 125, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 75, 101, 101, 112, 32, 111, 110, 108, 121, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 114, 111, 119, 115, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 105, 114, 105, 99, 104, 108, 101, 116, > 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 105, 115, 32, 117, 115, 101, > 100, 32, 119, 104, 101, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 114, 111, 119, 115, 32, 97, 114, 101, 32, 111, 117, 116, 32, 111, 102, > 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 111, > 119, 115, 32, 45, 50, 53, 37, 44, 53, 48, 37, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 99, 97, 108, 101, 50, 120, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, > 32, 116, 104, 101, 32, 83, 99, 97, 108, 101, 50, 120, 32, 97, 108, 103, > 111, 114, 105, 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 114, 101, 115, > 105, 122, 101, 32, 53, 48, 37, 44, 53, 48, 37, 32, 45, 45, 115, 99, > 97, 108, 101, 50, 120, 10, 115, 99, 97, 108, 101, 50, 120, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 111, 117, 98, 108, 101, 32, > 120, 121, 45, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, > 83, 99, 97, 108, 101, 50, 120, 32, 97, 108, 103, 111, 114, 105, 116, 104, > 109, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 32, 50, 48, > 48, 37, 44, 50, 48, 48, 37, 10, 45, 102, 32, 34, 100, 120, 61, 120, > 38, 49, 59, 100, 121, 61, 121, 38, 49, 59, 65, 61, 106, 40, 48, 44, > 45, 50, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 66, 61, 106, 40, > 50, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 67, 61, 106, > 40, 45, 50, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 68, > 61, 106, 40, 48, 44, 50, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, > 34, 92, 10, 34, 33, 100, 121, 42, 40, 33, 100, 120, 42, 105, 102, 40, > 67, 61, 61, 65, 38, 38, 67, 33, 61, 68, 38, 38, 65, 33, 61, 66, > 44, 65, 44, 105, 41, 32, 43, 32, 100, 120, 42, 105, 102, 40, 65, 61, > 61, 66, 38, 38, 65, 33, 61, 67, 38, 38, 66, 33, 61, 68, 44, 66, > 44, 105, 41, 41, 32, 43, 32, 100, 121, 42, 40, 100, 120, 42, 105, 102, > 40, 66, 61, 61, 68, 38, 38, 66, 33, 61, 65, 38, 38, 68, 33, 61, > 67, 44, 68, 44, 105, 41, 32, 43, 32, 33, 100, 120, 42, 105, 102, 40, > 68, 61, 61, 67, 38, 38, 68, 33, 61, 66, 38, 38, 67, 33, 61, 65, > 44, 67, 44, 105, 41, 41, 34, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 99, 97, 108, 101, 51, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 115, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 116, 104, > 101, 32, 83, 99, 97, 108, 101, 51, 120, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 114, 101, 115, 105, 122, 101, > 32, 51, 51, 37, 44, 51, 51, 37, 32, 45, 45, 115, 99, 97, 108, 101, > 51, 120, 10, 115, 99, 97, 108, 101, 51, 120, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 84, 114, 105, 112, 108, 101, 32, 120, 121, 45, > 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 32, 111, 102, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, 83, 99, 97, > 108, 101, 51, 120, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 32, 51, 48, 48, 37, 44, > 51, 48, 48, 37, 10, 45, 102, 32, 34, 100, 120, 61, 120, 37, 51, 59, > 100, 121, 61, 121, 37, 51, 59, 99, 48, 61, 33, 100, 120, 59, 99, 49, > 61, 40, 100, 120, 61, 61, 49, 41, 59, 99, 50, 61, 40, 100, 120, 61, > 61, 50, 41, 59, 34, 92, 10, 34, 65, 61, 106, 40, 45, 51, 44, 45, > 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 66, 61, 106, 40, 48, > 44, 45, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 67, 61, 106, > 40, 51, 44, 45, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 34, > 92, 10, 34, 68, 61, 106, 40, 45, 51, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 49, 41, 59, 70, 61, 106, 40, 51, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 49, 41, 59, 34, 92, 10, 34, 71, 61, 106, 40, 45, 51, > 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 72, 61, 106, 40, > 48, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 73, 61, 106, > 40, 51, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 41, 59, 34, 92, > 10, 34, 33, 100, 121, 42, 40, 99, 48, 42, 105, 102, 40, 68, 61, 61, > 66, 38, 38, 68, 33, 61, 72, 38, 38, 66, 33, 61, 70, 44, 68, 44, > 105, 41, 32, 43, 32, 99, 49, 42, 105, 102, 40, 40, 68, 61, 61, 66, > 38, 38, 68, 33, 61, 72, 38, 38, 66, 33, 61, 70, 38, 38, 105, 33, > 61, 67, 41, 124, 124, 40, 66, 61, 61, 70, 38, 38, 66, 33, 61, 68, > 38, 38, 70, 33, 61, 72, 38, 38, 105, 33, 61, 65, 41, 44, 66, 44, > 105, 41, 32, 43, 32, 99, 50, 42, 105, 102, 40, 66, 61, 61, 70, 38, > 38, 66, 33, 61, 68, 38, 38, 70, 33, 61, 72, 44, 70, 44, 105, 41, > 41, 32, 43, 32, 34, 92, 10, 34, 40, 100, 121, 61, 61, 49, 41, 42, > 40, 99, 48, 42, 105, 102, 40, 40, 72, 61, 61, 68, 38, 38, 72, 33, > 61, 70, 38, 38, 68, 33, 61, 66, 38, 38, 105, 33, 61, 65, 41, 124, > 124, 40, 68, 61, 61, 66, 38, 38, 68, 33, 61, 72, 38, 38, 66, 33, > 61, 70, 38, 38, 105, 33, 61, 71, 41, 44, 68, 44, 105, 41, 32, 43, > 32, 99, 49, 42, 105, 32, 43, 32, 99, 50, 42, 105, 102, 40, 40, 66, > 61, 61, 70, 38, 38, 66, 33, 61, 68, 38, 38, 70, 33, 61, 72, 38, > 38, 105, 33, 61, 73, 41, 124, 124, 40, 70, 61, 61, 72, 38, 38, 70, > 33, 61, 66, 38, 38, 72, 33, 61, 68, 38, 38, 105, 33, 61, 67, 41, > 44, 70, 44, 105, 41, 41, 32, 43, 32, 34, 92, 10, 34, 40, 100, 121, > 61, 61, 50, 41, 42, 40, 99, 48, 42, 105, 102, 40, 72, 61, 61, 68, > 38, 38, 72, 33, 61, 70, 38, 38, 68, 33, 61, 66, 44, 68, 44, 105, > 41, 32, 43, 32, 99, 49, 42, 105, 102, 40, 40, 70, 61, 61, 72, 38, > 38, 70, 33, 61, 66, 38, 38, 72, 33, 61, 68, 38, 38, 105, 33, 61, > 71, 41, 124, 124, 40, 72, 61, 61, 68, 38, 38, 72, 33, 61, 70, 38, > 38, 68, 33, 61, 66, 38, 38, 105, 33, 61, 73, 41, 44, 72, 44, 105, > 41, 32, 43, 32, 99, 50, 42, 105, 102, 40, 70, 61, 61, 72, 38, 38, > 70, 33, 61, 66, 38, 38, 72, 33, 61, 68, 44, 70, 44, 105, 41, 41, > 34, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 101, 97, 109, 99, 97, > 114, 118, 101, 32, 58, 32, 95, 119, 105, 100, 116, 104, 91, 37, 93, 62, > 61, 48, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 61, 48, > 44, 95, 105, 115, 95, 112, 114, 105, 111, 114, 105, 116, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, > 95, 105, 115, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 105, 110, 103, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 109, 97, 120, 105, > 109, 117, 109, 95, 115, 101, 97, 109, 115, 91, 37, 93, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 105, 122, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 50, > 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 44, 32, 117, 115, 105, 110, > 103, 32, 116, 104, 101, 32, 115, 101, 97, 109, 45, 99, 97, 114, 118, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 104, 101, 105, 103, 104, 116, 61, 49, > 48, 48, 37, 39, 44, 32, 39, 105, 115, 95, 112, 114, 105, 111, 114, 105, > 116, 121, 95, 99, 104, 97, 110, 110, 101, 108, 61, 48, 39, 44, 32, 39, > 105, 115, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 105, 110, 103, 61, > 49, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, > 115, 101, 97, 109, 115, 61, 50, 53, 37, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 54, 48, 37, > 10, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 50, 61, 49, 48, 48, 37, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 53, 61, 50, 53, 37, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 44, 36, > 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 115, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, > 32, 36, 49, 120, 36, 50, 32, 117, 115, 105, 110, 103, 32, 115, 101, 97, > 109, 45, 99, 97, 114, 118, 105, 110, 103, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 44, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 51, 44, 119, 105, 116, 104, 44, 119, 105, 116, 104, 111, 117, 116, > 125, 34, 32, 112, 114, 105, 111, 114, 105, 116, 121, 32, 99, 104, 97, 110, > 110, 101, 108, 44, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 52, 44, 119, 105, 116, 104, 44, 119, 105, 116, 104, 111, 117, 116, > 125, 34, 32, 97, 110, 116, 105, 45, 97, 108, 105, 97, 115, 105, 110, 103, > 32, 97, 110, 100, 32, 109, 97, 120, 105, 109, 117, 109, 32, 115, 101, 97, > 109, 115, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, > 119, 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 49, 125, 44, 36, 49, 42, 119, 44, 36, 49, 41, 41, 41, 125, > 10, 110, 104, 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, > 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 104, 44, 36, 50, 41, 41, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 110, 119, 33, 61, 119, 125, 32, > 45, 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 36, 110, 119, 44, > 36, 51, 44, 36, 52, 44, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 104, 33, 61, 104, 125, 32, 45, 116, 114, > 97, 110, 115, 112, 111, 115, 101, 32, 45, 95, 115, 101, 97, 109, 99, 97, > 114, 118, 101, 32, 36, 110, 104, 44, 36, 51, 44, 36, 52, 44, 36, 53, > 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 58, > 10, 45, 100, 111, 10, 109, 97, 120, 95, 115, 101, 97, 109, 115, 61, 123, > 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, > 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 52, > 125, 44, 36, 52, 42, 119, 44, 36, 52, 41, 41, 41, 125, 10, 115, 115, > 109, 115, 61, 123, 109, 97, 120, 40, 109, 105, 110, 40, 114, 111, 117, 110, > 100, 40, 36, 49, 45, 119, 41, 44, 119, 41, 44, 49, 45, 119, 41, 125, > 10, 115, 109, 115, 61, 123, 109, 105, 110, 40, 36, 109, 97, 120, 95, 115, > 101, 97, 109, 115, 44, 97, 98, 115, 40, 36, 115, 115, 109, 115, 41, 41, > 125, 10, 45, 105, 102, 32, 36, 50, 32, 45, 115, 91, 48, 93, 32, 99, > 44, 123, 49, 45, 115, 125, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, > 54, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 103, 114, 97, 100, 105, > 101, 110, 116, 91, 48, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, > 32, 99, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 43, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 10, 45, > 105, 102, 32, 36, 50, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 97, 91, 48, 44, 49, 93, 32, 99, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 36, 51, 32, 49, 48, 48, 37, 44, 49, > 44, 49, 44, 49, 44, 120, 32, 45, 114, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 91, 48, 93, 32, 45, 97, 91, 48, 44, 45, 49, 93, 32, 99, > 32, 45, 101, 110, 100, 105, 102, 10, 91, 45, 49, 93, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 104, 125, 10, 45, 45, 114, 111, 119, 115, 91, > 45, 49, 93, 32, 123, 36, 60, 43, 49, 125, 32, 45, 101, 114, 111, 100, > 101, 91, 45, 49, 93, 32, 51, 10, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 36, 60, 44, 48, 44, 48, 44, 45, 49, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 45, 114, 111, 119, 115, 91, 49, > 93, 32, 48, 10, 45, 110, 109, 91, 49, 93, 32, 103, 114, 97, 100, 32, > 45, 110, 109, 91, 50, 93, 32, 108, 111, 119, 32, 45, 110, 109, 91, 51, > 93, 32, 115, 101, 97, 109, 32, 45, 110, 109, 91, 52, 93, 32, 116, 111, > 112, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 104, 45, > 49, 125, 32, 110, 114, 61, 123, 36, 62, 43, 49, 125, 10, 45, 45, 114, > 111, 119, 115, 91, 108, 111, 119, 93, 32, 36, 110, 114, 10, 45, 45, 42, > 91, 52, 44, 53, 93, 32, 45, 45, 115, 104, 105, 102, 116, 91, 52, 93, > 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 91, 53, 93, 32, 45, 45, > 115, 104, 105, 102, 116, 91, 53, 93, 32, 49, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 52, 93, 10, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 106, 91, 53, 93, 32, 91, 52, 93, 32, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 10, 45, 102, 91, 45, 49, 93, 32, 34, 62, 105, > 102, 40, 99, 44, 105, 44, 109, 97, 120, 40, 106, 40, 45, 49, 41, 43, > 106, 40, 48, 44, 48, 44, 48, 44, 49, 41, 44, 106, 40, 45, 50, 41, > 43, 106, 40, 48, 44, 48, 44, 48, 44, 50, 41, 41, 41, 34, 10, 45, > 115, 91, 45, 49, 93, 32, 99, 32, 45, 115, 104, 105, 102, 116, 91, 45, > 51, 93, 32, 49, 32, 45, 43, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 32, 45, 115, 104, 105, 102, 116, 91, 45, 51, 93, 32, 49, 32, 45, 43, > 91, 45, 51, 44, 45, 49, 93, 10, 45, 103, 116, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 102, 91, 45, 49, 93, 32, 34, 60, 105, 102, 40, 106, > 40, 49, 41, 60, 48, 44, 49, 44, 45, 105, 41, 34, 10, 45, 106, 91, > 115, 101, 97, 109, 93, 32, 91, 45, 49, 93, 44, 48, 44, 36, 62, 10, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 102, 91, 45, > 49, 93, 32, 34, 106, 40, 105, 44, 48, 44, 48, 44, 45, 49, 41, 34, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 49, > 10, 45, 45, 114, 111, 119, 115, 91, 103, 114, 97, 100, 93, 32, 36, 110, > 114, 32, 45, 43, 91, 116, 111, 112, 44, 45, 49, 93, 10, 45, 100, 111, > 110, 101, 10, 109, 97, 120, 61, 123, 105, 77, 42, 50, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 115, 109, 115, 32, 45, 61, 91, 45, 49, > 93, 32, 36, 109, 97, 120, 44, 64, 123, 45, 49, 44, 120, 109, 125, 32, > 45, 100, 111, 110, 101, 10, 45, 106, 91, 103, 114, 97, 100, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 49, 48, 48, 37, 32, 45, 114, 109, 91, 108, > 111, 119, 44, 116, 111, 112, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 45, 102, 91, 45, 49, 93, 32, 34, 60, 105, 102, 40, > 99, 44, 105, 44, 106, 40, 106, 40, 48, 44, 48, 44, 48, 44, 49, 41, > 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, 41, 41, 34, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 10, 45, 43, > 91, 48, 93, 32, 48, 46, 49, 32, 45, 110, 101, 113, 91, 45, 49, 93, > 32, 36, 109, 97, 120, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 32, 115, 61, 64, 123, 48, 44, 115, 125, 10, 45, 105, 102, 32, 123, > 36, 115, 115, 109, 115, 60, 48, 125, 32, 45, 42, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 48, 32, 45, 114, 32, 123, 36, 119, 45, 36, 115, > 109, 115, 125, 44, 36, 104, 44, 49, 44, 36, 115, 44, 45, 49, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 115, 115, 109, 115, 62, 48, 125, 10, 45, > 45, 91, 45, 49, 93, 32, 50, 32, 45, 115, 91, 48, 93, 32, 99, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 115, 32, 45, 105, 102, 32, 123, > 36, 62, 60, 40, 36, 115, 45, 49, 41, 125, 32, 91, 45, 49, 93, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 97, 91, 36, 62, 44, 45, 49, 93, > 32, 99, 32, 45, 100, 111, 110, 101, 10, 45, 112, 101, 114, 109, 117, 116, > 101, 32, 99, 120, 121, 122, 32, 45, 97, 32, 99, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 32, 45, 49, 32, 45, 102, 32, 34, 105, 102, 40, 105, > 60, 48, 44, 106, 40, 48, 44, 45, 49, 41, 44, 105, 41, 34, 10, 45, > 114, 32, 123, 36, 119, 43, 36, 115, 109, 115, 125, 44, 36, 104, 44, 49, > 44, 36, 115, 44, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 36, 51, 10, 45, 115, 32, 99, 44, 123, 49, 45, 115, 125, 32, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 91, 45, 49, 93, 32, 120, 44, > 49, 32, 45, 114, 111, 117, 110, 100, 32, 45, 110, 101, 113, 91, 45, 49, > 93, 32, 49, 10, 40, 48, 46, 53, 44, 48, 46, 53, 41, 32, 45, 45, > 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, 93, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 106, 91, 48, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, > 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, > 97, 61, 119, 47, 36, 49, 59, 105, 102, 40, 97, 60, 49, 44, 97, 42, > 49, 48, 48, 44, 49, 48, 48, 47, 97, 41, 125, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 119, 33, 61, 36, 49, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 104, 105, 102, 116, 32, 58, 32, 118, 120, 91, 37, 93, 44, > 95, 118, 121, 91, 37, 93, 44, 95, 118, 122, 91, 37, 93, 44, 95, 118, > 99, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, > 105, 102, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 100, 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 32, 118, 101, > 99, 116, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, > 101, 114, 105, 111, 100, 105, 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 91, 48, 93, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 48, 32, 45, > 45, 115, 104, 105, 102, 116, 91, 48, 93, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 48, 44, 48, 44, 49, 32, 45, 45, 115, 104, 105, 102, 116, 91, > 48, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 50, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, 110, 107, 95, 120, > 32, 58, 32, 115, 105, 122, 101, 95, 120, 62, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, > 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 115, 104, 114, 105, 110, 107, 95, 120, 32, 51, 48, > 10, 115, 104, 114, 105, 110, 107, 95, 120, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 83, 104, 114, 105, 110, 107, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, > 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 122, 91, 36, 62, 93, 32, 36, 49, 44, 64, 123, 36, > 62, 44, 119, 45, 36, 49, 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, > 110, 107, 95, 120, 121, 32, 58, 32, 115, 105, 122, 101, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 104, 114, 105, 110, 107, 95, > 120, 121, 32, 51, 48, 10, 115, 104, 114, 105, 110, 107, 95, 120, 121, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 104, 114, 105, 110, 107, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, > 104, 101, 32, 120, 121, 45, 97, 120, 101, 115, 32, 119, 105, 116, 104, 32, > 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 122, 91, 36, 62, 93, > 32, 36, 49, 44, 36, 49, 44, 64, 123, 36, 62, 44, 119, 45, 36, 49, > 45, 49, 125, 44, 64, 123, 36, 62, 44, 104, 45, 36, 49, 45, 49, 125, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 104, 114, 105, 110, 107, 95, 120, 121, 122, 32, 58, 32, > 115, 105, 122, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 83, 104, 114, 105, 110, 107, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 46, 10, 115, 104, 114, 105, > 110, 107, 95, 120, 121, 122, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 49, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 104, 114, 105, 110, 107, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, > 101, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 122, 91, 36, 62, 93, 32, 36, 49, 44, 36, 49, 44, 36, > 49, 44, 64, 123, 36, 62, 44, 119, 45, 36, 49, 45, 49, 125, 44, 64, > 123, 36, 62, 44, 104, 45, 36, 49, 45, 49, 125, 44, 64, 123, 36, 62, > 44, 100, 45, 36, 49, 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, 110, > 107, 95, 121, 32, 58, 32, 115, 105, 122, 101, 95, 121, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, 105, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 104, 114, 105, 110, 107, 95, 121, > 32, 51, 48, 10, 115, 104, 114, 105, 110, 107, 95, 121, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 83, 104, 114, 105, 110, 107, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, > 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 122, 91, 36, 62, 93, 32, 48, 44, 36, > 49, 44, 49, 48, 48, 37, 44, 64, 123, 36, 62, 44, 104, 45, 36, 49, > 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 104, 114, 105, 110, 107, 95, 122, 32, 58, > 32, 115, 105, 122, 101, 95, 122, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 104, 114, 105, 110, 107, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 46, 10, 115, 104, 114, > 105, 110, 107, 95, 122, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 49, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 83, 104, 114, 105, 110, 107, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, 97, 120, 105, 115, 32, > 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 122, 91, 36, 62, 93, 32, 48, 44, 48, 44, 36, 49, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 64, 123, 36, 62, 44, 100, 45, 36, 49, > 45, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 108, 105, 99, 101, 115, 32, 58, 32, 123, > 32, 91, 105, 109, 97, 103, 101, 48, 93, 32, 124, 32, 122, 48, 91, 37, > 93, 32, 125, 44, 95, 123, 32, 91, 105, 109, 97, 103, 101, 49, 93, 32, > 124, 32, 122, 49, 91, 37, 93, 32, 125, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 75, 101, 101, 112, 32, 111, 110, > 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 108, 105, > 99, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 105, 114, 105, 99, 104, 108, 101, 116, 32, 98, 111, 117, 110, 100, > 97, 114, 121, 32, 105, 115, 32, 117, 115, 101, 100, 32, 119, 104, 101, 110, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 108, 105, 99, 101, > 115, 32, 97, 114, 101, 32, 111, 117, 116, 32, 111, 102, 32, 114, 97, 110, > 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 114, 116, 32, > 58, 32, 95, 111, 114, 100, 101, 114, 105, 110, 103, 61, 123, 32, 43, 32, > 124, 32, 45, 32, 125, 44, 95, 97, 120, 105, 115, 61, 123, 32, 120, 32, > 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 114, > 116, 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, > 97, 120, 105, 115, 39, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 44, 32, 116, 104, 101, 32, 115, 111, 114, 116, 105, 110, 103, 32, > 105, 115, 32, 100, 111, 110, 101, 32, 97, 99, 99, 111, 114, 100, 105, 110, > 103, 32, 116, 111, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 114, 115, 116, 32, 99, 111, 108, 117, 109, > 110, 47, 114, 111, 119, 47, 115, 108, 105, 99, 101, 47, 99, 104, 97, 110, > 110, 101, 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 114, 100, 101, 114, > 105, 110, 103, 61, 43, 39, 32, 97, 110, 100, 32, 39, 97, 120, 105, 115, > 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 54, 52, 32, 45, 114, 97, > 110, 100, 32, 48, 44, 49, 48, 48, 32, 45, 45, 115, 111, 114, 116, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, > 48, 48, 44, 51, 48, 48, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 112, 108, > 105, 116, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 112, 108, 105, 116, 32, 58, 32, 123, 32, 120, 32, 124, 32, > 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 46, 46, 123, 32, 120, > 32, 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 44, 95, > 110, 98, 95, 112, 97, 114, 116, 115, 32, 58, 32, 107, 101, 101, 112, 95, > 115, 112, 108, 105, 116, 116, 105, 110, 103, 95, 118, 97, 108, 117, 101, 115, > 61, 123, 32, 43, 32, 124, 32, 45, 32, 125, 44, 118, 97, 108, 117, 101, > 49, 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 58, 32, 40, > 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 101, 105, > 116, 104, 101, 114, 32, 97, 108, 111, 110, 103, 32, 97, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 120, 105, 115, 44, 32, 111, 114, 32, > 114, 101, 103, 97, 114, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 115, > 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, 32, 115, 99, 97, 108, 97, > 114, 32, 118, 97, 108, 117, 101, 115, 44, 32, 111, 114, 32, 97, 115, 32, > 97, 32, 115, 101, 116, 32, 111, 102, 32, 99, 111, 110, 115, 116, 97, 110, > 116, 32, 115, 117, 98, 45, 118, 101, 99, 116, 111, 114, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 115, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 110, 98, 95, 112, 97, 114, 116, 115, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 109, 97, 120, 105, 109, 117, 109, 32, 115, 112, > 108, 105, 116, 32, 124, 32, 62, 48, 61, 115, 112, 108, 105, 116, 32, 105, > 110, 32, 78, 32, 112, 97, 114, 116, 115, 32, 124, 32, 60, 48, 61, 115, > 112, 108, 105, 116, 32, 105, 110, 32, 112, 97, 114, 116, 115, 32, 111, 102, > 32, 115, 105, 122, 101, 32, 45, 78, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 110, 98, 95, 112, 97, 114, 116, 115, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 99, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 121, 44, 51, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 32, 120, 44, 45, 49, > 50, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 44, > 50, 48, 44, 49, 44, 49, 44, 34, 49, 44, 50, 44, 51, 44, 52, 34, > 32, 45, 45, 115, 112, 108, 105, 116, 32, 45, 44, 50, 44, 51, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 49, 45, 45, 49, 93, 32, 121, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, > 115, 32, 58, 32, 77, 33, 61, 48, 44, 95, 78, 33, 61, 48, 44, 95, > 105, 115, 95, 104, 111, 109, 111, 103, 101, 110, 101, 111, 117, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 83, 112, 108, 105, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 97, 32, 77, 120, 78, > 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 77, 32, 111, > 114, 32, 78, 32, 105, 115, 32, 110, 101, 103, 97, 116, 105, 118, 101, 44, > 32, 105, 116, 32, 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 116, > 104, 101, 32, 116, 105, 108, 101, 32, 115, 105, 122, 101, 32, 105, 110, 115, > 116, 101, 97, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 78, 61, 77, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 104, 111, 109, > 111, 103, 101, 110, 101, 111, 117, 115, 61, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 108, 111, 99, 97, 108, 32, 45, 115, 112, 108, 105, 116, > 95, 116, 105, 108, 101, 115, 32, 53, 44, 52, 32, 45, 98, 108, 117, 114, > 32, 51, 44, 48, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 55, 48, > 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, > 52, 44, 53, 32, 45, 101, 110, 100, 108, 111, 99, 97, 108, 10, 115, 112, > 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 48, 125, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 112, 108, 105, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 115, 32, 97, 32, 36, 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 32, > 111, 102, 32, 104, 111, 109, 111, 103, 101, 110, 101, 111, 117, 115, 32, 116, > 105, 108, 101, 115, 46, 34, 10, 45, 101, 108, 115, 101, 32, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 83, 112, 108, 105, 116, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 97, 115, 32, 97, 32, 36, 49, 120, 36, 50, 32, 97, > 114, 114, 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, 115, 46, 34, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 32, 45, 115, > 32, 121, 44, 36, 50, 32, 45, 115, 32, 120, 44, 36, 49, 32, 45, 105, > 102, 32, 36, 51, 32, 45, 114, 32, 91, 48, 93, 44, 91, 48, 93, 44, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 121, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 117, 110, 114, 111, 108, 108, 39, 46, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, > 114, 111, 108, 108, 32, 58, 32, 95, 97, 120, 105, 115, 61, 123, 32, 120, > 32, 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, 110, > 114, 111, 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 121, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 120, 105, 115, > 61, 121, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 40, 49, 44, 50, 44, 51, 59, 52, 44, 53, 44, 54, 59, 55, 44, 56, > 44, 57, 41, 32, 45, 45, 117, 110, 114, 111, 108, 108, 32, 121, 10, 35, > 64, 103, 109, 105, 99, 32, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, > 97, 114, 116, 32, 58, 32, 119, 105, 100, 116, 104, 44, 95, 104, 101, 105, > 103, 104, 116, 44, 95, 100, 101, 112, 116, 104, 44, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 97, 110, 105, 115, 111, > 116, 114, 111, 112, 121, 61, 91, 48, 44, 49, 93, 44, 115, 104, 97, 114, > 112, 101, 110, 105, 110, 103, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 85, 112, 115, 99, 97, 108, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, > 97, 110, 32, 101, 100, 103, 101, 45, 112, 114, 101, 115, 101, 114, 118, 105, > 110, 103, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 104, 101, 105, 103, 104, 116, 61, 49, > 48, 48, 37, 39, 44, 32, 39, 100, 101, 112, 116, 104, 61, 49, 48, 48, > 37, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, > 50, 39, 44, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 61, > 48, 46, 52, 39, 32, 97, 110, 100, 32, 39, 115, 104, 97, 114, 112, 101, > 110, 105, 110, 103, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 49, 48, 48, 32, 45, 45, > 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, 97, 114, 116, 32, 53, 48, > 48, 37, 44, 53, 48, 48, 37, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 120, 10, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, 97, 114, 116, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 48, 48, 37, > 125, 44, 36, 123, 51, 61, 49, 48, 48, 37, 125, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 52, 61, 50, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 53, 61, 48, 46, 52, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 53, 60, 61, 49, 32, 38, 38, 32, 36, 123, 54, 61, 49, 48, 125, > 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 85, 112, > 115, 99, 97, 108, 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, > 32, 36, 49, 120, 36, 50, 120, 36, 51, 44, 32, 119, 105, 116, 104, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 52, 44, 32, 97, > 110, 105, 115, 111, 116, 114, 111, 112, 121, 32, 36, 53, 32, 97, 110, 100, > 32, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 32, 36, 54, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, > 123, 104, 125, 10, 45, 45, 114, 91, 45, 49, 93, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 44, 49, 44, 48, 10, 45, 105, 102, 32, 123, 119, 60, > 36, 119, 34, 32, 38, 38, 32, 34, 104, 60, 36, 104, 125, 10, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 49, 48, 48, 37, 44, 50, 10, 45, 101, 108, > 115, 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 100, 105, 102, > 102, 117, 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 48, 44, > 36, 53, 44, 49, 46, 50, 44, 49, 46, 50, 10, 45, 114, 91, 45, 50, > 44, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 49, 48, > 48, 37, 44, 53, 10, 45, 115, 109, 111, 111, 116, 104, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 36, 52, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 36, > 54, 44, 49, 48, 34, 44, 51, 44, 48, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 114, 112, 32, 58, 32, > 91, 119, 97, 114, 112, 105, 110, 103, 95, 102, 105, 101, 108, 100, 93, 44, > 95, 105, 115, 95, 114, 101, 108, 97, 116, 105, 118, 101, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, > 95, 110, 98, 95, 102, 114, 97, 109, 101, 115, 62, 48, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 97, 114, 112, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, > 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 32, 102, 105, 101, 108, > 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 101, 97, 114, 101, 115, 116, 45, 110, > 101, 105, 103, 104, 98, 111, 114, 32, 124, 32, 49, 61, 108, 105, 110, 101, > 97, 114, 32, 124, 32, 50, 61, 99, 117, 98, 105, 99, 32, 125, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, > 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, > 99, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, > 115, 95, 114, 101, 108, 97, 116, 105, 118, 101, 61, 48, 39, 44, 32, 39, > 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 61, 49, 39, > 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 50, 44, 39, 88, 61, 120, 47, 119, 45, 48, 46, 53, 59, > 89, 61, 121, 47, 104, 45, 48, 46, 53, 59, 82, 61, 40, 88, 42, 88, > 43, 89, 42, 89, 41, 94, 48, 46, 53, 59, 65, 61, 97, 116, 97, 110, > 50, 40, 89, 44, 88, 41, 59, 49, 51, 48, 42, 82, 42, 105, 102, 40, > 99, 61, 61, 48, 44, 99, 111, 115, 40, 52, 42, 65, 41, 44, 115, 105, > 110, 40, 56, 42, 65, 41, 41, 39, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 48, 32, 45, 113, > 117, 105, 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, 49, 93, 44, 49, > 48, 44, 48, 46, 50, 44, 49, 44, 49, 44, 49, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 58, 32, 70, 105, 108, 116, 101, 114, 105, 110, > 103, 10, 35, 64, 103, 109, 105, 99, 32, 98, 97, 110, 100, 112, 97, 115, > 115, 32, 58, 32, 95, 109, 105, 110, 95, 102, 114, 101, 113, 91, 37, 93, > 44, 95, 109, 97, 120, 95, 102, 114, 101, 113, 91, 37, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 98, 97, 110, > 100, 112, 97, 115, 115, 32, 102, 105, 108, 116, 101, 114, 32, 116, 111, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, 105, 110, 95, 102, > 114, 101, 113, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 95, > 102, 114, 101, 113, 61, 50, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 98, 97, 110, 100, 112, 97, 115, 115, 32, 49, 37, 44, 51, 37, 10, > 98, 97, 110, 100, 112, 97, 115, 115, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 48, 125, 44, 36, 123, 50, 61, 50, 48, 37, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 98, 97, 110, 100, 112, 97, 115, 115, 32, 102, 105, 108, 116, 101, 114, 32, > 91, 36, 49, 44, 36, 50, 93, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 102, 91, 45, 49, > 93, 32, 34, 115, 113, 114, 116, 40, 40, 120, 47, 119, 45, 48, 46, 53, > 41, 94, 50, 32, 43, 32, 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, > 50, 32, 43, 32, 40, 122, 47, 100, 45, 48, 46, 53, 41, 94, 50, 41, > 34, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 116, 50, > 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 32, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, > 44, 123, 105, 110, 116, 40, 104, 47, 50, 41, 125, 44, 53, 48, 37, 44, > 48, 44, 50, 10, 45, 102, 102, 116, 91, 45, 50, 93, 32, 45, 42, 91, > 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 105, 108, 97, 116, 101, 114, > 97, 108, 32, 58, 32, 91, 103, 117, 105, 100, 101, 93, 44, 115, 116, 100, > 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, 115, 62, 48, 91, 37, > 93, 44, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, > 114, 91, 37, 93, 62, 48, 32, 58, 32, 115, 116, 100, 95, 118, 97, 114, > 105, 97, 116, 105, 111, 110, 95, 115, 62, 48, 91, 37, 93, 44, 115, 116, > 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, 114, 91, 37, 93, > 62, 48, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 97, 110, 105, 115, 111, 116, > 114, 111, 112, 105, 99, 32, 40, 101, 118, 101, 110, 116, 117, 97, 108, 108, > 121, 32, 106, 111, 105, 110, 116, 47, 99, 114, 111, 115, 115, 41, 32, 98, > 105, 108, 97, 116, 101, 114, 97, 108, 32, 102, 105, 108, 116, 101, 114, 105, > 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, > 97, 32, 103, 117, 105, 100, 101, 32, 105, 109, 97, 103, 101, 32, 105, 115, > 32, 112, 114, 111, 118, 105, 100, 101, 100, 44, 32, 105, 116, 32, 105, 115, > 32, 117, 115, 101, 100, 32, 102, 111, 114, 32, 99, 111, 109, 112, 117, 116, > 105, 110, 103, 32, 116, 104, 101, 32, 115, 109, 111, 111, 116, 104, 105, 110, > 103, 32, 103, 101, 111, 109, 101, 116, 114, 121, 32, 105, 110, 32, 116, 104, > 101, 32, 99, 114, 111, 115, 115, 32, 98, 105, 108, 97, 116, 101, 114, 97, > 108, 32, 102, 105, 108, 116, 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 32, 103, 117, 105, 100, 101, 32, 105, 109, 97, 103, 101, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 97, 109, 101, 32, 120, 121, 122, 45, 115, 105, 122, 101, 32, 97, 115, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 91, 48, 93, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 98, 105, 108, 97, 116, 101, > 114, 97, 108, 91, 45, 49, 93, 32, 49, 48, 44, 49, 48, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 98, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 98, 108, 117, 114, 39, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, > 32, 58, 32, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, > 62, 61, 48, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 44, 95, 107, 101, > 114, 110, 101, 108, 61, 123, 32, 48, 61, 113, 117, 97, 115, 105, 45, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 40, 102, 97, 115, 116, 101, 114, 41, > 32, 124, 32, 49, 61, 103, 97, 117, 115, 115, 105, 97, 110, 32, 125, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, > 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 97, 32, 113, 117, 97, 115, 105, 45, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 111, 114, 32, 103, 97, 117, 115, 115, > 105, 97, 110, 32, 102, 105, 108, 116, 101, 114, 32, 40, 114, 101, 99, 117, > 114, 115, 105, 118, 101, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 97, > 116, 105, 111, 110, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 98, 39, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 107, 101, 114, 110, 101, 108, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, > 53, 44, 48, 32, 45, 45, 98, 108, 117, 114, 91, 48, 93, 32, 53, 44, > 49, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, 97, 110, > 103, 117, 108, 97, 114, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 91, 37, 93, 44, 95, 99, 120, 44, 95, 99, 121, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 97, 110, 103, 117, > 108, 97, 114, 32, 98, 108, 117, 114, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 97, > 110, 103, 117, 108, 97, 114, 32, 50, 37, 10, 98, 108, 117, 114, 95, 97, > 110, 103, 117, 108, 97, 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 97, 110, 103, 117, 108, 97, 114, 32, 98, 108, 117, 114, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 32, 97, 110, 100, 32, 99, > 101, 110, 116, 101, 114, 32, 40, 36, 50, 44, 36, 51, 41, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, 97, 110, 50, > 112, 111, 108, 97, 114, 32, 36, 50, 44, 36, 51, 44, 49, 46, 51, 44, > 49, 32, 45, 101, 120, 112, 97, 110, 100, 95, 121, 32, 49, 54, 44, 50, > 32, 45, 98, 108, 117, 114, 95, 121, 32, 36, 49, 32, 45, 115, 104, 114, > 105, 110, 107, 95, 121, 32, 49, 54, 32, 45, 112, 111, 108, 97, 114, 50, > 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, 50, 44, 36, 51, 44, > 49, 46, 51, 44, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 49, 91, 37, 93, 44, 95, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 50, 91, 37, 93, 44, 95, 97, 110, > 103, 108, 101, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, > 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, > 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 108, 105, 110, 101, 97, 114, 32, > 98, 108, 117, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 97, 110, 103, 108, 101, 32, 97, 110, > 100, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 50, 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, > 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 108, > 105, 110, 101, 97, 114, 32, 49, 48, 44, 48, 44, 52, 53, 10, 98, 108, > 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, > 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 108, 105, 110, 101, 97, 114, 32, 98, 108, 117, > 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, > 32, 97, 110, 100, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 115, 32, > 40, 36, 49, 44, 36, 50, 41, 46, 34, 10, 45, 118, 32, 45, 10, 115, > 116, 100, 49, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 109, 97, > 120, 40, 119, 44, 104, 41, 44, 36, 49, 41, 125, 10, 115, 116, 100, 50, > 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 109, 97, 120, 40, 119, > 44, 104, 41, 44, 36, 50, 41, 125, 10, 115, 116, 100, 77, 61, 123, 114, > 111, 117, 110, 100, 40, 49, 46, 50, 53, 42, 109, 97, 120, 40, 36, 115, > 116, 100, 49, 44, 36, 115, 116, 100, 50, 41, 41, 125, 10, 45, 105, 102, > 32, 123, 36, 115, 116, 100, 77, 60, 61, 48, 125, 32, 45, 114, 101, 116, > 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 120, > 112, 97, 110, 100, 95, 120, 121, 32, 36, 115, 116, 100, 77, 44, 123, 36, > 52, 33, 61, 48, 125, 10, 123, 50, 42, 36, 115, 116, 100, 77, 125, 44, > 123, 50, 42, 36, 115, 116, 100, 77, 125, 32, 45, 103, 97, 117, 115, 115, > 105, 97, 110, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 91, > 45, 49, 93, 10, 45, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, > 116, 32, 45, 115, 104, 114, 105, 110, 107, 95, 120, 121, 32, 36, 115, 116, > 100, 77, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, > 114, 97, 100, 105, 97, 108, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 91, 37, 93, 44, 95, 99, 120, 44, 95, 99, 121, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 114, 97, 100, > 105, 97, 108, 32, 98, 108, 117, 114, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 114, > 97, 100, 105, 97, 108, 32, 50, 37, 10, 98, 108, 117, 114, 95, 114, 97, > 100, 105, 97, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 114, 97, > 100, 105, 97, 108, 32, 98, 108, 117, 114, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 32, 36, 49, 32, 97, 110, 100, 32, 99, 101, 110, 116, > 101, 114, 32, 40, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, > 97, 114, 32, 36, 50, 44, 36, 51, 44, 53, 44, 49, 32, 45, 98, 108, > 117, 114, 95, 120, 32, 36, 49, 32, 45, 112, 111, 108, 97, 114, 50, 101, > 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, 50, 44, 36, 51, 44, 53, > 44, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, > 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 32, 58, 32, > 115, 105, 103, 109, 97, 62, 61, 48, 44, 95, 101, 100, 103, 101, 115, 62, > 48, 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, > 110, 103, 32, 115, 101, 108, 101, 99, 116, 105, 118, 101, 32, 103, 97, 117, > 115, 115, 105, 97, 110, 32, 115, 99, 97, 108, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 103, 109, 97, 61, 53, 39, > 44, 32, 39, 101, 100, 103, 101, 115, 61, 48, 46, 53, 39, 32, 97, 110, > 100, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 53, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 110, 111, 105, 115, 101, 32, 50, 48, 32, > 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 32, 45, 45, 108, 111, 99, > 97, 108, 91, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, > 32, 45, 98, 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, > 32, 44, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 111, 99, > 97, 108, 10, 98, 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, 46, 53, > 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 51, 61, 53, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 117, 114, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 36, 51, 32, 115, 101, > 108, 101, 99, 116, 105, 118, 101, 32, 103, 97, 117, 115, 115, 105, 97, 110, > 32, 115, 99, 97, 108, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, > 103, 109, 97, 32, 36, 49, 32, 97, 110, 100, 32, 101, 100, 103, 101, 115, > 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, > 64, 123, 48, 44, 110, 125, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, > 116, 95, 110, 111, 114, 109, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, > 45, 94, 91, 45, 49, 93, 32, 123, 45, 109, 97, 120, 40, 48, 46, 48, > 49, 44, 36, 50, 41, 125, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, > 91, 45, 49, 93, 32, 123, 36, 51, 43, 49, 125, 44, 48, 44, 49, 32, > 45, 109, 105, 110, 91, 45, 49, 93, 32, 123, 36, 51, 45, 49, 125, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 49, 48, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 51, 32, 45, 45, 61, 61, 91, 45, 49, 93, 32, 123, 36, 62, 47, 49, > 48, 48, 125, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, > 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 98, 91, 45, 50, 93, > 32, 123, 36, 49, 47, 40, 36, 51, 43, 49, 41, 125, 32, 45, 100, 111, > 110, 101, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, > 114, 95, 120, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 91, > 37, 93, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, > 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 95, 120, 32, > 54, 10, 98, 108, 117, 114, 95, 120, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 66, 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, > 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, 49, 32, 97, 110, > 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, > 44, 110, 101, 117, 109, 97, 110, 110, 44, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 125, 34, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, > 110, 100, 105, 116, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 49, 44, 48, 44, 120, 44, > 36, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, > 108, 117, 114, 95, 120, 121, 32, 58, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 95, 120, 91, 37, 93, 44, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 95, 121, 91, 37, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 88, 32, 97, 110, 100, 32, 89, 32, 97, 120, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 98, 108, 117, 114, 95, 120, 121, 32, 54, 10, 98, 108, 117, 114, 95, 120, > 121, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 36, 49, > 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 66, 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, 115, > 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, 49, 32, > 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, > 36, 50, 44, 110, 101, 117, 109, 97, 110, 110, 44, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 125, 34, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, > 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 49, 44, 48, 44, > 120, 44, 36, 51, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 50, > 44, 48, 44, 121, 44, 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 108, 117, 114, 95, 120, 121, 122, 32, 58, 32, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 95, 120, 91, 37, 93, 44, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 95, 121, 91, 37, 93, 44, 97, 109, 112, > 108, 105, 116, 117, 100, 101, 95, 122, 44, 95, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, > 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 117, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 108, 111, > 110, 103, 32, 116, 104, 101, 32, 88, 44, 32, 89, 32, 97, 110, 100, 32, > 90, 32, 97, 120, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 98, 108, > 117, 114, 95, 120, 121, 122, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, > 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, > 103, 32, 116, 104, 101, 32, 120, 121, 122, 45, 97, 120, 101, 115, 44, 32, > 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, 49, 32, 97, 110, > 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, > 44, 110, 101, 117, 109, 97, 110, 110, 44, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 125, 34, 32, 98, 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, > 110, 100, 105, 116, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 49, 44, 48, 44, 120, 44, > 36, 52, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, 50, 44, 48, > 44, 121, 44, 36, 52, 32, 45, 100, 101, 114, 105, 99, 104, 101, 32, 36, > 51, 44, 48, 44, 122, 44, 36, 52, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, 121, 32, 58, 32, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 91, 37, 93, 62, 61, 48, 44, 95, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 117, > 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, > 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 108, 117, 114, 95, 121, 32, 54, 10, 98, 108, 117, 114, 95, 121, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 117, 114, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, > 109, 97, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 50, 44, 110, 101, 117, 109, 97, 110, 110, > 44, 100, 105, 114, 105, 99, 104, 108, 101, 116, 125, 34, 32, 98, 111, 117, > 110, 100, 97, 114, 121, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 100, 101, 114, 105, 99, 104, 101, > 32, 36, 49, 44, 48, 44, 121, 44, 36, 50, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 98, 108, 117, 114, 95, 122, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 91, 37, 93, 62, 61, 48, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, > 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, > 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, > 108, 117, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 122, 45, > 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 98, 108, 117, 114, > 95, 122, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 117, 114, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 122, 45, 97, 120, 105, 115, 44, 32, 119, 105, 116, 104, 32, 115, > 105, 103, 109, 97, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, 45, > 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 110, 101, 117, 109, 97, > 110, 110, 44, 100, 105, 114, 105, 99, 104, 108, 101, 116, 125, 34, 32, 98, > 111, 117, 110, 100, 97, 114, 121, 32, 99, 111, 110, 100, 105, 116, 105, 111, > 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 100, 101, 114, 105, 99, > 104, 101, 32, 36, 49, 44, 48, 44, 122, 44, 36, 50, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 111, 107, 101, 104, 32, 58, > 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 48, 60, > 61, 95, 100, 101, 110, 115, 105, 116, 121, 60, 61, 49, 48, 48, 44, 95, > 98, 111, 107, 101, 104, 95, 115, 105, 122, 101, 62, 48, 44, 48, 60, 61, > 95, 98, 111, 107, 101, 104, 95, 111, 117, 116, 108, 105, 110, 101, 95, 115, > 105, 122, 101, 60, 61, 49, 48, 48, 44, 95, 98, 111, 107, 101, 104, 95, > 111, 117, 116, 108, 105, 110, 101, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 44, 95, 98, 111, 107, 101, 104, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 97, 32, 66, 111, 107, 101, > 104, 32, 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 61, 50, 48, 48, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 61, 50, 39, 44, 32, 39, 100, 101, 110, 115, 105, 116, > 121, 61, 48, 46, 50, 39, 44, 32, 39, 98, 111, 107, 101, 104, 95, 115, > 105, 122, 101, 61, 50, 52, 39, 44, 32, 39, 98, 111, 107, 101, 104, 95, > 111, 117, 116, 108, 105, 110, 101, 95, 115, 105, 122, 101, 61, 49, 48, 39, > 44, 32, 39, 98, 111, 107, 101, 104, 95, 111, 117, 116, 108, 105, 110, 101, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 39, 32, 97, 110, > 100, 32, 39, 98, 111, 107, 101, 104, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 61, 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 111, 107, 101, 104, 32, 44, 10, 98, 111, 107, 101, 104, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, 48, 48, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 50, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 50, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 51, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, > 123, 52, 61, 50, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, > 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 48, > 48, 32, 38, 38, 32, 36, 123, 54, 61, 50, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 55, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 56, 61, 48, 46, 49, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 98, 111, 107, 101, 104, > 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 49, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 50, 44, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, 51, > 37, 44, 32, 98, 111, 107, 101, 104, 32, 115, 105, 122, 101, 32, 36, 52, > 44, 32, 98, 111, 107, 101, 104, 32, 111, 117, 116, 108, 105, 110, 101, 32, > 115, 105, 122, 101, 32, 36, 53, 32, 34, 92, 10, 34, 98, 111, 107, 101, > 104, 32, 111, 117, 116, 108, 105, 110, 101, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 54, 32, 97, 110, 100, 32, 98, 111, 107, 101, 104, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 55, 46, 34, > 10, 45, 118, 32, 45, 10, 50, 53, 54, 44, 50, 53, 54, 32, 45, 61, > 91, 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 10, 45, > 45, 108, 116, 91, 45, 49, 93, 32, 55, 48, 37, 32, 45, 116, 50, 91, > 45, 50, 93, 32, 55, 48, 37, 44, 123, 55, 48, 45, 36, 53, 42, 55, > 48, 47, 49, 48, 48, 125, 37, 32, 45, 42, 91, 45, 50, 93, 32, 36, > 54, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 91, 45, > 49, 93, 32, 36, 52, 44, 36, 52, 44, 49, 44, 49, 44, 50, 10, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 123, 51, > 42, 36, 55, 125, 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 36, 55, > 44, 48, 32, 45, 45, 103, 116, 91, 45, 49, 93, 32, 48, 46, 49, 32, > 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 10, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, 44, > 45, 49, 93, 10, 45, 45, 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, > 101, 108, 115, 91, 48, 93, 32, 123, 49, 48, 48, 45, 36, 51, 125, 32, > 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 48, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 36, 49, > 10, 45, 98, 91, 48, 93, 32, 36, 50, 32, 45, 43, 91, 48, 44, 45, > 49, 93, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, > 111, 109, 112, 111, 115, 101, 95, 102, 114, 101, 113, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 111, 115, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 108, 111, 119, 32, 97, 110, 100, 32, 104, 105, > 103, 104, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 112, 97, 114, > 116, 115, 32, 105, 110, 116, 111, 32, 110, 101, 119, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, 95, > 102, 114, 101, 113, 32, 50, 37, 32, 45, 109, 105, 114, 114, 111, 114, 91, > 45, 49, 93, 32, 120, 32, 45, 99, 111, 109, 112, 111, 115, 101, 95, 102, > 114, 101, 113, 10, 99, 111, 109, 112, 111, 115, 101, 95, 102, 114, 101, 113, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 111, 115, 101, 32, 108, 111, 119, 32, 97, 110, 100, 32, 104, 105, 103, 104, > 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 112, 97, 114, 116, 36, > 63, 32, 105, 110, 116, 111, 32, 110, 101, 119, 32, 105, 109, 97, 103, 101, > 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 43, 91, > 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 110, > 118, 111, 108, 118, 101, 32, 58, 32, 91, 109, 97, 115, 107, 93, 44, 95, > 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 111, 108, 118, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 109, 97, 115, 107, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, > 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, > 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 98, > 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, > 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, > 45, 52, 44, 49, 59, 48, 44, 49, 44, 48, 41, 32, 45, 99, 111, 110, > 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 107, 101, 101, 112, 91, 45, 50, 93, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 40, 48, > 44, 49, 44, 48, 41, 32, 45, 114, 101, 115, 105, 122, 101, 91, 45, 49, > 93, 32, 49, 51, 48, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 45, > 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, 93, 32, 91, 49, 93, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 111, 110, 118, 111, 108, 118, 101, 95, > 102, 102, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, > 118, 111, 108, 118, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, > 32, 116, 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, 114, 105, 101, 114, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 103, 97, 117, > 115, 115, 105, 97, 110, 91, 45, 49, 93, 32, 50, 48, 44, 49, 44, 52, > 53, 32, 45, 45, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, > 10, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, 32, 58, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 111, 108, 118, > 101, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 119, 111, 45, 98, 121, > 45, 116, 119, 111, 32, 116, 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, > 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, > 44, 123, 36, 62, 43, 49, 125, 93, 10, 119, 50, 61, 123, 105, 110, 116, > 40, 64, 123, 48, 44, 119, 125, 47, 50, 41, 125, 32, 104, 50, 61, 123, > 105, 110, 116, 40, 64, 123, 48, 44, 104, 125, 47, 50, 41, 125, 32, 100, > 50, 61, 123, 105, 110, 116, 40, 64, 123, 48, 44, 100, 125, 47, 50, 41, > 125, 10, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, > 91, 48, 93, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 115, 104, 105, 102, 116, > 91, 49, 93, 32, 45, 36, 119, 50, 44, 45, 36, 104, 50, 44, 45, 36, > 100, 50, 44, 48, 44, 50, 10, 45, 102, 102, 116, 91, 48, 93, 32, 45, > 102, 102, 116, 91, 50, 93, 10, 45, 45, 42, 91, 45, 52, 93, 32, 91, > 45, 49, 93, 32, 45, 45, 42, 91, 45, 52, 93, 32, 91, 45, 51, 93, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 42, 91, 45, 53, > 44, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, > 45, 91, 45, 51, 44, 45, 50, 93, 10, 45, 105, 102, 102, 116, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, > 111, 114, 114, 101, 108, 97, 116, 101, 32, 58, 32, 91, 109, 97, 115, 107, > 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 114, 114, 101, 108, 97, 116, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 109, 97, 115, 107, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, > 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, > 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, > 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 40, 48, 44, 49, 44, > 48, 59, 49, 44, 45, 52, 44, 49, 59, 48, 44, 49, 44, 48, 41, 32, > 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 107, 101, 101, 112, 91, 45, 50, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 99, 114, 111, 112, 32, 52, 48, 37, 44, 52, 48, > 37, 44, 54, 48, 37, 44, 54, 48, 37, 32, 45, 45, 99, 111, 114, 114, > 101, 108, 97, 116, 101, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 49, 10, 35, 64, 103, 109, 105, 99, 32, 99, 114, 111, 115, 115, 95, 99, > 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 99, 114, 111, 115, > 115, 45, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 117, 115, > 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 32, 45, 51, 48, > 44, 45, 50, 48, 32, 45, 99, 114, 111, 115, 115, 95, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 10, 99, 114, 111, 115, 115, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 99, 114, 111, > 115, 115, 45, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 117, > 115, 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, > 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, > 10, 45, 110, 111, 114, 109, 32, 45, 102, 102, 116, 91, 45, 50, 93, 32, > 45, 102, 102, 116, 91, 45, 49, 93, 32, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 53, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 91, 45, 54, 93, 10, 45, 45, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 42, 91, 45, 53, 44, 45, 51, 93, 32, 45, 42, 91, > 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, > 32, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 105, 115, 111, 112, 104, 111, 116, 101, 32, 99, 117, 114, 118, 97, > 116, 117, 114, 101, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 98, 108, 117, 114, 32, 49, 48, 32, 45, 99, 117, 114, 118, 97, 116, 117, > 114, 101, 10, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, > 105, 115, 111, 112, 104, 111, 116, 101, 32, 99, 117, 114, 118, 97, 116, 117, > 114, 101, 115, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 61, 61, > 49, 125, 10, 45, 45, 103, 32, 120, 121, 44, 48, 32, 45, 104, 101, 115, > 115, 105, 97, 110, 91, 45, 51, 93, 32, 120, 120, 120, 121, 121, 121, 10, > 45, 42, 91, 45, 51, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 52, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 45, > 50, 10, 45, 43, 91, 45, 52, 44, 45, 51, 93, 32, 45, 42, 91, 45, > 51, 93, 32, 91, 45, 50, 93, 10, 45, 115, 113, 114, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 91, 45, 49, 93, 32, > 45, 43, 91, 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 49, 32, 45, > 94, 91, 45, 49, 93, 32, 49, 46, 53, 32, 45, 47, 10, 45, 101, 108, > 115, 101, 10, 45, 45, 105, 110, 110, 32, 45, 45, 103, 114, 97, 100, 105, > 101, 110, 116, 95, 110, 111, 114, 109, 91, 45, 50, 93, 32, 45, 108, 97, > 112, 108, 97, 99, 105, 97, 110, 91, 45, 51, 93, 10, 45, 45, 91, 45, > 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 49, > 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 105, 110, 110, > 91, 45, 49, 93, 32, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, > 45, 50, 93, 32, 45, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 101, 98, 108, 117, 114, 32, 58, 32, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 91, 37, 93, 62, 61, 48, 44, 95, > 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 44, 95, 100, 116, 62, 61, > 48, 44, 95, 114, 101, 103, 117, 108, 62, 61, 48, 44, 95, 114, 101, 103, > 117, 108, 95, 116, 121, 112, 101, 61, 123, 32, 48, 61, 84, 105, 107, 104, > 111, 110, 111, 118, 32, 124, 32, 49, 61, 109, 101, 97, 110, 99, 117, 114, > 118, 46, 32, 124, 32, 50, 61, 84, 86, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 98, 108, 117, 114, 32, 105, 109, 97, 103, > 101, 32, 117, 115, 105, 110, 103, 32, 97, 32, 114, 101, 103, 117, 108, 97, > 114, 105, 122, 101, 100, 32, 74, 97, 110, 115, 115, 111, 110, 45, 86, 97, > 110, 32, 67, 105, 116, 116, 101, 114, 116, 32, 97, 108, 103, 111, 114, 105, > 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, > 98, 95, 105, 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, > 50, 48, 39, 44, 32, 39, 114, 101, 103, 117, 108, 61, 48, 46, 55, 39, > 32, 97, 110, 100, 32, 39, 114, 101, 103, 117, 108, 95, 116, 121, 112, 101, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, > 51, 32, 45, 45, 100, 101, 98, 108, 117, 114, 32, 51, 44, 52, 48, 44, > 50, 48, 44, 48, 46, 48, 49, 10, 100, 101, 98, 108, 117, 114, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 49, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 50, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 48, 46, 55, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 53, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 101, 98, 108, 117, 114, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 97, 32, 114, 101, > 103, 117, 108, 97, 114, 105, 122, 101, 100, 32, 74, 97, 110, 115, 115, 111, > 110, 45, 86, 97, 110, 32, 67, 105, 116, 116, 101, 114, 116, 32, 97, 108, > 103, 111, 114, 105, 116, 104, 109, 44, 32, 119, 105, 116, 104, 32, 115, 105, > 103, 109, 97, 32, 36, 49, 44, 32, 36, 50, 32, 105, 116, 101, 114, 97, > 116, 105, 111, 110, 115, 44, 32, 116, 105, 109, 101, 32, 115, 116, 101, 112, > 32, 36, 51, 32, 97, 110, 100, 32, 114, 101, 103, 117, 108, 97, 114, 105, > 122, 97, 116, 105, 111, 110, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 91, 48, 93, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 45, 105, 102, 32, > 123, 36, 53, 62, 61, 50, 125, 32, 45, 45, 99, 117, 114, 118, 97, 116, > 117, 114, 101, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 53, 62, 61, 49, 125, 32, 45, 45, 105, 101, 101, 91, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 32, 45, 45, 108, 97, 112, 108, 97, 99, 105, 97, > 110, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 42, 91, > 45, 49, 93, 32, 36, 52, 10, 45, 45, 98, 91, 45, 50, 93, 32, 36, > 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 52, 93, 10, 45, 45, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 42, 91, 45, 49, 93, 32, 123, > 36, 51, 47, 40, 48, 46, 48, 48, 48, 49, 43, 109, 97, 120, 40, 97, > 98, 115, 40, 64, 123, 45, 49, 44, 109, 125, 41, 44, 97, 98, 115, 40, > 64, 123, 45, 49, 44, 77, 125, 41, 41, 41, 125, 10, 45, 43, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 101, 98, 108, 117, 114, 95, 103, 111, 108, > 100, 109, 101, 105, 110, 101, 108, 32, 58, 32, 115, 105, 103, 109, 97, 62, > 61, 48, 44, 32, 95, 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 44, > 32, 95, 97, 99, 99, 101, 108, 101, 114, 97, 116, 105, 111, 110, 62, 61, > 48, 44, 32, 95, 107, 101, 114, 110, 101, 108, 95, 116, 121, 112, 101, 61, > 123, 32, 48, 61, 113, 117, 97, 115, 105, 45, 103, 97, 117, 115, 115, 105, > 97, 110, 32, 40, 102, 97, 115, 116, 101, 114, 41, 32, 124, 32, 49, 61, > 103, 97, 117, 115, 115, 105, 97, 110, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 98, 108, 117, 114, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, > 103, 32, 71, 111, 108, 100, 45, 77, 101, 105, 110, 101, 108, 32, 97, 108, > 103, 111, 114, 105, 116, 104, 109, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 110, 98, 95, 105, 116, 101, 114, 61, 56, 39, 44, 32, 39, 97, > 99, 99, 101, 108, 101, 114, 97, 116, 105, 111, 110, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 107, 101, 114, 110, 101, 108, 95, 116, 121, 112, 101, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, > 49, 32, 45, 45, 100, 101, 98, 108, 117, 114, 95, 103, 111, 108, 100, 109, > 101, 105, 110, 101, 108, 91, 45, 49, 93, 32, 49, 10, 100, 101, 98, 108, > 117, 114, 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, 108, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 50, 61, 56, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 51, 61, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, > 101, 98, 108, 117, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, > 105, 110, 103, 32, 71, 111, 108, 100, 45, 77, 101, 105, 110, 101, 108, 32, > 97, 108, 103, 111, 114, 105, 116, 104, 109, 44, 32, 119, 105, 116, 104, 32, > 115, 105, 103, 109, 97, 32, 36, 49, 44, 32, 36, 50, 32, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 115, 44, 32, 97, 99, 99, 101, 108, 101, 114, > 97, 116, 105, 111, 110, 32, 36, 51, 32, 97, 110, 100, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 52, 44, 34, 34, 44, 113, > 117, 97, 115, 105, 45, 125, 34, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 107, 101, 114, 110, 101, 108, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 91, 48, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 45, > 45, 98, 91, 45, 49, 93, 32, 36, 49, 44, 49, 44, 36, 52, 32, 45, > 45, 47, 91, 48, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, > 32, 45, 94, 91, 45, 49, 93, 32, 36, 51, 32, 45, 42, 91, 45, 49, > 44, 45, 50, 93, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 98, 108, 117, 114, > 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, 121, 32, > 58, 32, 115, 105, 103, 109, 97, 62, 61, 48, 44, 32, 110, 98, 95, 105, > 116, 101, 114, 62, 61, 48, 44, 32, 95, 107, 101, 114, 110, 101, 108, 95, > 116, 121, 112, 101, 61, 123, 32, 48, 61, 113, 117, 97, 115, 105, 45, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 40, 102, 97, 115, 116, 101, 114, 41, > 32, 124, 32, 49, 61, 103, 97, 117, 115, 115, 105, 97, 110, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 98, 108, 117, 114, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 117, 115, 105, 110, 103, 32, 82, 105, 99, 104, 97, 114, 100, 115, 111, > 110, 45, 76, 117, 99, 121, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, > 116, 101, 114, 61, 53, 48, 39, 32, 97, 110, 100, 32, 39, 107, 101, 114, > 110, 101, 108, 95, 116, 121, 112, 101, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 98, 108, 117, 114, 32, 49, 32, 45, 45, 100, 101, 98, > 108, 117, 114, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, > 99, 121, 91, 45, 49, 93, 32, 49, 10, 100, 101, 98, 108, 117, 114, 95, > 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, 121, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 53, 48, 125, 62, 61, 48, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 68, 101, 98, 108, 117, 114, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 117, 115, 105, 110, 103, 32, 82, 105, 99, 104, 97, 114, 100, > 115, 111, 110, 45, 76, 117, 99, 121, 32, 97, 108, 103, 111, 114, 105, 116, > 104, 109, 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, > 49, 44, 32, 36, 50, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, > 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 51, 44, 34, 34, 44, 113, 117, 97, 115, 105, 45, 125, 34, 103, > 97, 117, 115, 115, 105, 97, 110, 32, 107, 101, 114, 110, 101, 108, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 91, 48, 93, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 50, 10, 45, 45, 98, 91, 45, 49, 93, 32, 36, > 49, 44, 49, 44, 123, 36, 51, 33, 61, 48, 125, 32, 45, 45, 47, 91, > 48, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 49, 44, 49, 44, 123, 36, 51, 33, 61, 48, > 125, 32, 45, 42, 91, 45, 49, 44, 45, 50, 93, 10, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 101, 99, 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 99, 111, 110, 118, 111, > 108, 118, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, 116, > 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, > 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, 10, 100, 101, 99, 111, 110, > 118, 111, 108, 118, 101, 95, 102, 102, 116, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 68, 101, 99, 111, 110, 118, 111, 108, 118, 101, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 116, 119, 111, 45, 98, 121, 45, 116, > 119, 111, 32, 116, 104, 114, 111, 117, 103, 104, 32, 102, 111, 117, 114, 105, > 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, > 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, > 36, 62, 43, 49, 125, 93, 10, 119, 50, 61, 123, 105, 110, 116, 40, 64, > 123, 48, 44, 119, 125, 47, 50, 41, 125, 32, 104, 50, 61, 123, 105, 110, > 116, 40, 64, 123, 48, 44, 104, 125, 47, 50, 41, 125, 32, 100, 50, 61, > 123, 105, 110, 116, 40, 64, 123, 48, 44, 100, 125, 47, 50, 41, 125, 10, > 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 115, 104, 105, 102, 116, 91, 49, > 93, 32, 45, 36, 119, 50, 44, 45, 36, 104, 50, 44, 45, 36, 100, 50, > 44, 48, 44, 50, 10, 45, 102, 102, 116, 91, 48, 93, 32, 45, 102, 102, > 116, 91, 49, 93, 10, 45, 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, > 45, 115, 113, 114, 91, 45, 50, 93, 32, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 53, 10, 45, > 45, 42, 91, 45, 52, 93, 32, 91, 45, 51, 93, 10, 45, 45, 42, 91, > 45, 54, 93, 32, 91, 45, 51, 93, 10, 45, 45, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 42, 91, 45, 54, 44, 45, 52, 93, 10, 45, 42, 91, > 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, 45, 52, 44, 45, 51, 93, > 10, 45, 47, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 47, 91, > 45, 51, 44, 45, 50, 93, 10, 45, 105, 102, 102, 116, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 105, > 110, 116, 101, 114, 108, 97, 99, 101, 32, 58, 32, 95, 109, 101, 116, 104, > 111, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 105, 110, 116, 101, 114, 108, 97, 99, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 40, 39, 109, 101, 116, 104, 111, 100, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 115, 116, 97, 110, 100, 97, 114, 100, 32, > 111, 114, 32, 49, 61, 109, 111, 116, 105, 111, 110, 45, 99, 111, 109, 112, > 101, 110, 115, 97, 116, 101, 100, 32, 125, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 109, 101, 116, 104, 111, 100, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 51, 44, > 49, 44, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 114, 101, 115, > 105, 122, 101, 32, 49, 48, 48, 37, 44, 53, 48, 37, 32, 45, 114, 101, > 115, 105, 122, 101, 32, 49, 48, 48, 37, 44, 50, 48, 48, 37, 44, 49, > 44, 51, 44, 52, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 97, 100, 100, 32, 45, 45, 100, 101, 105, 110, 116, > 101, 114, 108, 97, 99, 101, 32, 49, 10, 100, 101, 105, 110, 116, 101, 114, > 108, 97, 99, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 101, 105, > 110, 116, 101, 114, 108, 97, 99, 101, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, > 43, 33, 36, 49, 44, 109, 111, 116, 105, 111, 110, 45, 99, 111, 109, 112, > 101, 110, 115, 97, 116, 101, 100, 44, 115, 116, 97, 110, 100, 97, 114, 100, > 125, 34, 32, 109, 101, 116, 104, 111, 100, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 115, > 32, 121, 32, 45, 97, 91, 48, 45, 45, 49, 58, 50, 93, 32, 121, 32, > 45, 97, 91, 94, 48, 93, 32, 121, 32, 45, 114, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 32, 45, 114, 32, 49, 48, 48, 37, 44, 50, > 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 53, 10, 45, 105, 102, > 32, 123, 36, 49, 33, 61, 48, 125, 32, 45, 45, 100, 105, 115, 112, 108, > 97, 99, 101, 109, 101, 110, 116, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 48, 46, 48, 53, 32, 45, 119, 97, 114, 112, 91, 45, 51, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 43, 32, 45, 47, 32, > 50, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 114, 32, 36, 119, > 104, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 110, 111, 105, 115, > 101, 32, 58, 32, 115, 116, 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, > 110, 95, 115, 62, 61, 48, 44, 95, 115, 116, 100, 95, 118, 97, 114, 105, > 97, 116, 105, 111, 110, 95, 112, 62, 61, 48, 44, 95, 112, 97, 116, 99, > 104, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 108, 111, 111, 107, 117, > 112, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 44, 95, 102, 97, 115, 116, 95, 97, 112, 112, 114, > 111, 120, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 110, 111, > 105, 115, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 110, 111, 110, 45, 108, 111, 99, 97, 108, > 32, 112, 97, 116, 99, 104, 32, 97, 118, 101, 114, 97, 103, 105, 110, 103, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 100, 95, > 118, 97, 114, 105, 97, 116, 105, 111, 110, 95, 112, 61, 49, 48, 39, 44, > 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, 61, 53, 39, 44, > 32, 39, 108, 111, 111, 107, 117, 112, 95, 115, 105, 122, 101, 61, 54, 39, > 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 101, 110, 111, > 105, 115, 101, 32, 53, 44, 53, 44, 56, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 101, 110, 111, 105, 115, 101, 95, 104, 97, 97, 114, 32, 58, 32, > 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 110, > 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, 44, 95, 99, 121, 99, > 108, 101, 95, 115, 112, 105, 110, 110, 105, 110, 103, 62, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 110, 111, 105, 115, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 117, 115, > 105, 110, 103, 32, 104, 97, 97, 114, 45, 119, 97, 118, 101, 108, 101, 116, > 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 105, 110, 103, 32, 119, 105, > 116, 104, 32, 99, 121, 99, 108, 101, 32, 115, 112, 105, 110, 110, 105, 110, > 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, > 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 61, 48, 39, 32, 116, > 111, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 97, 108, 108, 121, 32, > 100, 101, 116, 101, 114, 109, 105, 110, 101, 32, 116, 104, 101, 32, 111, 112, > 116, 105, 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 115, 99, 97, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 49, 46, 52, 39, > 44, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 61, 48, 39, 32, 97, > 110, 100, 32, 39, 99, 121, 99, 108, 101, 95, 115, 112, 105, 110, 110, 105, > 110, 103, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 110, 111, > 105, 115, 101, 32, 50, 48, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, > 45, 45, 100, 101, 110, 111, 105, 115, 101, 95, 104, 97, 97, 114, 91, 45, > 49, 93, 32, 48, 46, 56, 10, 100, 101, 110, 111, 105, 115, 101, 95, 104, > 97, 97, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 49, 46, 52, 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, > 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, 38, 38, 32, 36, 50, > 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, > 61, 49, 48, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 101, 110, 111, 105, 115, 101, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 104, 97, > 97, 114, 45, 119, 97, 118, 101, 108, 101, 116, 32, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 105, 110, 103, 44, 32, 119, 105, 116, 104, 32, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 36, 49, 44, 32, 34, 92, 10, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 40, 36, 50, 62, 48, 41, 44, > 97, 117, 116, 111, 44, 36, 50, 125, 34, 32, 115, 99, 97, 108, 101, 115, > 32, 97, 110, 100, 32, 36, 51, 32, 115, 112, 105, 110, 110, 105, 110, 103, > 32, 99, 121, 99, 108, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 110, 98, 95, 115, 99, > 97, 108, 101, 115, 61, 123, 109, 105, 110, 40, 105, 102, 40, 36, 50, 44, > 36, 50, 44, 51, 50, 41, 44, 105, 110, 116, 40, 108, 111, 103, 50, 40, > 109, 105, 110, 40, 119, 44, 104, 41, 41, 45, 49, 41, 41, 125, 10, 119, > 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, > 32, 115, 105, 103, 109, 97, 61, 64, 123, 45, 118, 97, 114, 105, 97, 110, > 99, 101, 95, 110, 111, 105, 115, 101, 125, 10, 45, 114, 32, 123, 114, 111, > 117, 110, 100, 40, 119, 44, 50, 94, 40, 36, 110, 98, 95, 115, 99, 97, > 108, 101, 115, 43, 49, 41, 44, 49, 41, 125, 44, 123, 114, 111, 117, 110, > 100, 40, 104, 44, 50, 94, 40, 36, 110, 98, 95, 115, 99, 97, 108, 101, > 115, 43, 49, 41, 44, 49, 41, 125, 44, 123, 105, 102, 40, 100, 61, 61, > 49, 44, 49, 44, 114, 111, 117, 110, 100, 40, 100, 44, 50, 94, 40, 36, > 110, 98, 95, 115, 99, 97, 108, 101, 115, 43, 49, 41, 44, 49, 41, 41, > 125, 44, 49, 48, 48, 37, 44, 48, 44, 48, 10, 45, 45, 102, 32, 48, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, 10, 100, 120, 61, 123, > 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, 123, 52, 42, 36, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 125, 41, 41, 125, 10, 100, 121, 61, 123, > 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, 123, 52, 42, 36, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 125, 41, 41, 125, 10, 100, 122, 61, 123, > 105, 102, 40, 36, 100, 61, 61, 49, 44, 48, 44, 114, 111, 117, 110, 100, > 40, 63, 40, 48, 44, 123, 52, 42, 36, 110, 98, 95, 115, 99, 97, 108, > 101, 115, 125, 41, 41, 41, 125, 10, 45, 45, 115, 104, 105, 102, 116, 91, > 48, 93, 32, 36, 100, 120, 44, 36, 100, 121, 44, 36, 100, 122, 44, 48, > 44, 50, 10, 45, 104, 97, 97, 114, 91, 45, 49, 93, 32, 36, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 10, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 91, 45, 49, 93, 32, 123, 36, 49, 42, 36, 115, 105, 103, 109, > 97, 125, 44, 49, 10, 45, 105, 104, 97, 97, 114, 91, 45, 49, 93, 32, > 36, 110, 98, 95, 115, 99, 97, 108, 101, 115, 10, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 123, 45, 36, 100, 120, 125, 44, 123, 45, 36, > 100, 121, 125, 44, 123, 45, 36, 100, 122, 125, 44, 48, 44, 50, 10, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, > 114, 109, 91, 48, 93, 32, 45, 47, 32, 36, 51, 32, 45, 114, 32, 36, > 119, 44, 36, 104, 44, 36, 100, 44, 49, 48, 48, 37, 44, 48, 10, 45, > 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 101, 114, 105, 99, 104, 101, 32, 58, 32, 115, 116, 100, 95, 118, > 97, 114, 105, 97, 116, 105, 111, 110, 62, 61, 48, 91, 37, 93, 44, 111, > 114, 100, 101, 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 124, 32, 50, > 32, 125, 44, 97, 120, 105, 115, 61, 123, 32, 120, 32, 124, 32, 121, 32, > 124, 32, 122, 32, 124, 32, 99, 32, 125, 44, 95, 98, 111, 117, 110, 100, > 97, 114, 121, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 68, 101, 114, 105, 99, 104, 101, > 32, 114, 101, 99, 117, 114, 115, 105, 118, 101, 32, 102, 105, 108, 116, 101, > 114, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 100, 101, 118, 105, 97, 116, > 105, 111, 110, 44, 32, 111, 114, 100, 101, 114, 44, 32, 97, 120, 105, 115, > 32, 97, 110, 100, 32, 98, 111, 114, 100, 101, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 101, 114, 105, 99, 104, 101, > 32, 51, 44, 49, 44, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 101, > 114, 105, 99, 104, 101, 32, 51, 48, 44, 48, 44, 120, 32, 45, 100, 101, > 114, 105, 99, 104, 101, 91, 45, 50, 93, 32, 51, 48, 44, 48, 44, 121, > 32, 45, 97, 100, 100, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 108, > 97, 116, 101, 32, 58, 32, 115, 105, 122, 101, 62, 61, 48, 32, 58, 32, > 115, 105, 122, 101, 95, 120, 62, 61, 48, 44, 115, 105, 122, 101, 95, 121, > 62, 61, 48, 44, 115, 105, 122, 101, 95, 122, 62, 61, 48, 32, 58, 32, > 91, 109, 97, 115, 107, 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 44, 95, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 105, 108, 97, 116, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 98, 121, 32, 97, 32, 114, 101, 99, 116, 97, 110, 103, 117, 108, 97, 114, > 32, 111, 114, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 116, 114, 117, 99, 116, 117, 114, 105, 110, 103, 32, 101, 108, > 101, 109, 101, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, > 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 122, 61, > 49, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 32, 97, 110, 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 32, 49, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, 58, 32, 95, 115, > 105, 122, 101, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 44, 95, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 99, 105, 114, 99, 117, 108, 97, > 114, 32, 100, 105, 108, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 98, 121, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, > 55, 10, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, 36, 123, 51, 61, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 99, 105, 114, 99, 117, 108, 97, 114, 32, 100, 105, 108, 97, 116, 105, 111, > 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 32, 98, 121, 32, > 115, 105, 122, 101, 32, 36, 49, 44, 32, 98, 111, 117, 110, 100, 97, 114, > 121, 32, 36, 50, 32, 97, 110, 100, 32, 105, 115, 95, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 100, 32, 36, 51, 46, 34, 10, 45, 105, 102, 32, > 123, 36, 49, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 95, 100, 116, 95, > 99, 105, 114, 99, 108, 101, 91, 93, 32, 36, 49, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 44, 36, 50, > 44, 36, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 108, 97, 116, 101, 95, 111, > 99, 116, 32, 58, 32, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 98, > 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, 100, 105, 108, 97, 116, 105, > 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, > 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 105, 108, 97, > 116, 101, 95, 111, 99, 116, 32, 55, 10, 100, 105, 108, 97, 116, 101, 95, > 111, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, > 61, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, > 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, > 100, 105, 108, 97, 116, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 98, 121, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, > 98, 111, 117, 110, 100, 97, 114, 121, 32, 36, 50, 32, 97, 110, 100, 32, > 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 36, 51, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 49, 60, > 50, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 49, 38, 49, 125, 32, 115, 115, 61, > 123, 36, 49, 125, 32, 45, 101, 108, 115, 101, 32, 115, 115, 61, 123, 36, > 49, 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 48, > 93, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, 59, 48, > 44, 49, 44, 48, 41, 32, 45, 105, 91, 49, 93, 32, 40, 49, 44, 49, > 44, 49, 59, 49, 44, 49, 44, 49, 59, 49, 44, 49, 44, 49, 41, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 10, 114, > 61, 123, 114, 111, 117, 110, 100, 40, 40, 36, 115, 115, 45, 49, 41, 42, > 115, 113, 114, 116, 40, 50, 41, 47, 40, 49, 43, 115, 113, 114, 116, 40, > 50, 41, 41, 47, 50, 41, 125, 10, 113, 61, 123, 114, 111, 117, 110, 100, > 40, 40, 36, 115, 115, 45, 49, 41, 47, 40, 49, 43, 115, 113, 114, 116, > 40, 50, 41, 41, 47, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 114, > 62, 48, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 114, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, > 50, 44, 36, 51, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 113, 62, 48, 125, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 113, 32, 45, 100, 105, 108, 97, 116, 101, 91, > 45, 49, 93, 32, 91, 49, 93, 44, 36, 50, 44, 36, 51, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 50, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 44, 49, 93, 32, 45, 118, 32, 43, 10, 95, 107, 114, 95, 99, 105, 114, > 99, 108, 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 37, 50, 61, > 61, 48, 125, 32, 45, 105, 32, 50, 44, 50, 44, 49, 44, 49, 44, 49, > 32, 45, 101, 108, 115, 101, 32, 45, 105, 32, 49, 44, 49, 44, 49, 44, > 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 10, 45, 100, 105, 115, 116, 97, 110, 99, > 101, 91, 45, 49, 93, 32, 49, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 32, 48, 46, 53, 32, 45, 116, 50, 91, 45, 49, 93, 32, 48, > 44, 123, 36, 49, 47, 50, 125, 10, 95, 106, 102, 95, 99, 105, 114, 99, > 108, 101, 32, 58, 10, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, > 44, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, 10, 99, 101, 110, > 116, 101, 114, 61, 123, 48, 46, 53, 42, 40, 119, 45, 49, 41, 125, 10, > 45, 102, 91, 45, 49, 93, 32, 39, 115, 113, 114, 116, 40, 40, 120, 45, > 36, 99, 101, 110, 116, 101, 114, 41, 94, 50, 43, 40, 121, 45, 36, 99, > 101, 110, 116, 101, 114, 41, 94, 50, 41, 39, 10, 45, 105, 102, 32, 123, > 33, 40, 119, 37, 50, 41, 125, 10, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 32, 48, 46, 48, 48, 48, 49, 44, 45, 49, 10, 116, 49, 61, > 123, 115, 113, 114, 116, 40, 40, 40, 114, 111, 117, 110, 100, 40, 36, 49, > 41, 45, 49, 41, 47, 50, 41, 94, 50, 43, 48, 46, 50, 53, 41, 125, > 10, 116, 50, 61, 123, 115, 113, 114, 116, 40, 40, 40, 114, 111, 117, 110, > 100, 40, 36, 49, 41, 43, 49, 41, 47, 50, 41, 94, 50, 43, 48, 46, > 50, 53, 41, 125, 10, 107, 61, 123, 36, 49, 45, 114, 111, 117, 110, 100, > 40, 36, 49, 41, 43, 48, 46, 53, 125, 10, 116, 61, 123, 36, 116, 49, > 43, 40, 36, 116, 50, 45, 36, 116, 49, 41, 42, 36, 107, 125, 10, 45, > 116, 50, 91, 45, 49, 93, 32, 48, 44, 36, 116, 10, 45, 101, 108, 115, > 101, 32, 45, 116, 50, 91, 45, 49, 93, 32, 48, 44, 123, 36, 49, 47, > 50, 45, 48, 46, 50, 53, 125, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 100, 116, 95, 99, 105, 114, 99, 108, 101, 32, 58, 10, 105, 114, 61, 123, > 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, 10, 45, 105, 102, 32, 123, > 33, 36, 105, 114, 125, 32, 49, 44, 49, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 105, 114, 60, 50, 125, 32, 36, 105, 114, 44, 36, 105, 114, 44, > 49, 44, 49, 44, 49, 10, 45, 101, 108, 115, 101, 10, 123, 105, 110, 116, > 40, 36, 105, 114, 47, 50, 41, 43, 40, 36, 105, 114, 37, 50, 41, 125, > 44, 123, 105, 110, 116, 40, 36, 105, 114, 47, 50, 41, 43, 40, 36, 105, > 114, 37, 50, 41, 125, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 108, 101, 91, 45, 49, 93, > 32, 123, 40, 105, 43, 48, 46, 52, 41, 47, 115, 113, 114, 116, 40, 50, > 41, 125, 10, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, > 120, 10, 45, 105, 102, 32, 123, 36, 105, 114, 62, 49, 38, 38, 40, 36, > 105, 114, 37, 50, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, > 45, 49, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, 48, > 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 120, 32, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 49, 93, 32, 121, 10, 45, 105, 102, 32, 123, 36, 105, 114, 62, 49, 38, > 38, 40, 36, 105, 114, 37, 50, 41, 125, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 123, 104, 45, 49, 125, 44, 49, 44, 49, 44, > 48, 44, 48, 44, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, 101, 110, 100, 105, > 102, 10, 95, 100, 116, 95, 100, 105, 97, 109, 111, 110, 100, 32, 58, 10, > 105, 114, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, 10, 45, > 105, 102, 32, 123, 36, 105, 114, 60, 50, 125, 32, 36, 105, 114, 44, 36, > 105, 114, 44, 49, 44, 49, 44, 49, 10, 45, 101, 108, 115, 101, 10, 123, > 105, 110, 116, 40, 36, 105, 114, 47, 50, 41, 43, 40, 36, 105, 114, 37, > 50, 41, 125, 44, 123, 105, 110, 116, 40, 36, 105, 114, 47, 50, 41, 43, > 40, 36, 105, 114, 37, 50, 41, 125, 32, 45, 61, 91, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 108, > 101, 91, 45, 49, 93, 32, 123, 105, 47, 50, 125, 10, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 10, 45, 105, 102, 32, 123, > 36, 105, 114, 62, 49, 38, 38, 40, 36, 105, 114, 37, 50, 41, 125, 32, > 45, 114, 91, 45, 49, 93, 32, 123, 119, 45, 49, 125, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 10, 45, 105, > 102, 32, 123, 36, 105, 114, 62, 49, 38, 38, 40, 36, 105, 114, 37, 50, > 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 123, > 104, 45, 49, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 10, 45, 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, > 99, 32, 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, > 118, 101, 114, 103, 101, 110, 99, 101, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, 108, > 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, > 45, 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 91, 45, 49, 93, 10, > 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, > 118, 101, 114, 103, 101, 110, 99, 101, 32, 111, 102, 32, 118, 101, 99, 116, > 111, 114, 32, 102, 105, 101, 108, 100, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 105, 102, 32, 123, 115, 61, 61, 49, 125, 32, 45, > 103, 32, 120, 44, 48, 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, > 50, 125, 32, 45, 115, 32, 99, 32, 45, 103, 91, 45, 50, 93, 32, 120, > 44, 48, 32, 45, 103, 91, 45, 49, 93, 32, 121, 44, 48, 32, 45, 43, > 10, 45, 101, 108, 105, 102, 32, 123, 115, 61, 61, 51, 125, 32, 45, 115, > 32, 99, 32, 45, 103, 91, 45, 51, 93, 32, 120, 44, 48, 32, 45, 103, > 91, 45, 50, 93, 32, 121, 44, 48, 32, 45, 103, 91, 45, 49, 93, 32, > 122, 44, 48, 32, 45, 43, 10, 45, 101, 108, 115, 101, 32, 45, 101, 114, > 114, 111, 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 45, 100, 105, 118, 101, 114, 103, 101, 110, 99, 101, 39, 58, 32, 67, 97, > 110, 110, 111, 116, 32, 99, 111, 109, 112, 117, 116, 101, 32, 100, 105, 118, > 101, 114, 103, 101, 110, 99, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 32, 91, 34, 36, 62, 34, 93, 32, 40, 104, 97, 115, 32, 34, 123, 115, > 125, 34, 62, 51, 32, 99, 104, 97, 110, 110, 101, 108, 115, 41, 46, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 111, 103, 32, 58, 32, 95, 115, 105, 103, 109, 97, 49, 62, 61, 48, > 91, 37, 93, 44, 95, 115, 105, 103, 109, 97, 50, 62, 61, 48, 91, 37, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, > 32, 103, 97, 117, 115, 115, 105, 97, 110, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 103, 109, 97, 49, 61, 50, > 37, 39, 32, 97, 110, 100, 32, 39, 115, 105, 103, 109, 97, 50, 61, 51, > 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 111, 103, 32, 50, > 44, 51, 10, 100, 111, 103, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 51, 37, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, 102, 102, > 101, 114, 101, 110, 99, 101, 32, 111, 102, 32, 103, 97, 117, 115, 115, 105, > 97, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 100, 101, 118, > 105, 97, 116, 105, 111, 110, 115, 32, 36, 49, 32, 97, 110, 100, 32, 36, > 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 91, 48, 93, 32, 45, > 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, 98, 91, 48, 93, 32, > 36, 49, 34, 44, 34, 45, 98, 91, 49, 93, 32, 36, 50, 34, 32, 45, > 45, 32, 45, 110, 111, 114, 109, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 100, 105, 102, 102, 117, 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, > 32, 58, 32, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, 61, 48, > 44, 48, 60, 61, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 60, > 61, 49, 44, 95, 97, 108, 112, 104, 97, 91, 37, 93, 44, 95, 115, 105, > 103, 109, 97, 91, 37, 93, 44, 105, 115, 95, 115, 113, 114, 116, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 100, 105, > 102, 102, 117, 115, 105, 111, 110, 32, 116, 101, 110, 115, 111, 114, 115, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 102, 111, 114, 32, 101, 100, 103, 101, 45, 112, 114, 101, 115, > 101, 114, 118, 105, 110, 103, 32, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 46, 55, 39, 44, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, > 112, 121, 61, 48, 46, 51, 39, 44, 32, 39, 97, 108, 112, 104, 97, 61, > 48, 46, 54, 39, 44, 32, 39, 115, 105, 103, 109, 97, 61, 49, 46, 49, > 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 115, 113, 114, 116, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 105, 102, 102, 117, 115, 105, > 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 48, 46, 56, 32, 45, 97, > 98, 115, 32, 45, 112, 111, 119, 32, 48, 46, 50, 10, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 48, 46, 55, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, 46, 51, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 51, 61, 48, 46, 54, 125, 44, 36, 123, 52, 61, 49, > 46, 49, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 32, 116, 101, 110, 115, 111, 114, 115, 32, 102, 111, > 114, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 32, 36, 49, 44, 32, 97, 110, > 105, 115, 111, 116, 114, 111, 112, 121, 32, 36, 50, 44, 32, 97, 108, 112, > 104, 97, 32, 36, 51, 32, 97, 110, 100, 32, 115, 105, 103, 109, 97, 32, > 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 112, 49, 61, 123, 105, 102, > 40, 36, 53, 44, 48, 46, 53, 44, 49, 41, 42, 109, 97, 120, 40, 36, > 49, 44, 49, 101, 45, 53, 41, 125, 10, 112, 50, 61, 123, 36, 112, 49, > 47, 40, 49, 101, 45, 55, 43, 49, 45, 36, 50, 41, 125, 10, 45, 98, > 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 115, 116, > 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, 111, 114, 115, 32, 50, > 32, 45, 98, 32, 36, 52, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 105, 103, 101, 110, 32, > 45, 109, 97, 120, 91, 45, 50, 93, 32, 48, 10, 45, 105, 102, 32, 123, > 115, 61, 61, 50, 125, 32, 45, 115, 91, 45, 50, 93, 32, 99, 32, 45, > 43, 91, 45, 51, 44, 45, 50, 93, 32, 45, 43, 91, 45, 50, 93, 32, > 49, 32, 45, 45, 94, 91, 45, 50, 93, 32, 45, 36, 112, 49, 32, 45, > 94, 91, 45, 51, 93, 32, 45, 36, 112, 50, 32, 45, 97, 91, 45, 51, > 44, 45, 49, 93, 32, 99, 10, 45, 101, 108, 115, 101, 32, 45, 115, 91, > 45, 50, 93, 32, 99, 32, 45, 43, 91, 45, 52, 45, 45, 50, 93, 32, > 45, 43, 91, 45, 50, 93, 32, 49, 32, 45, 45, 94, 91, 45, 50, 93, > 32, 45, 36, 112, 49, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 50, 32, 45, 94, > 91, 45, 51, 93, 32, 45, 36, 112, 50, 32, 45, 97, 91, 45, 51, 44, > 45, 49, 93, 32, 99, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 105, > 103, 101, 110, 50, 116, 101, 110, 115, 111, 114, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 101, 100, 103, 101, 115, 32, 58, 32, 95, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 99, 111, > 110, 116, 111, 117, 114, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 101, 100, 103, 101, 115, 61, 49, 53, 37, 39, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 101, 100, 103, 101, 115, 32, 49, 53, 37, 10, > 101, 100, 103, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 49, 53, 37, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 69, 115, 116, 105, 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 32, 99, > 111, 110, 116, 111, 117, 114, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 98, 32, 48, > 46, 53, 32, 45, 103, 101, 32, 36, 49, 32, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 32, 48, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 99, 32, 51, 48, 37, > 44, 55, 48, 37, 32, 45, 110, 32, 48, 44, 49, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 114, 111, 100, 101, 32, 58, 32, > 115, 105, 122, 101, 62, 61, 48, 32, 58, 32, 115, 105, 122, 101, 95, 120, > 62, 61, 48, 44, 115, 105, 122, 101, 95, 121, 62, 61, 48, 44, 95, 115, > 105, 122, 101, 95, 122, 62, 61, 48, 32, 58, 32, 91, 109, 97, 115, 107, > 93, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 69, 114, 111, 100, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 97, 32, 114, > 101, 99, 116, 97, 110, 103, 117, 108, 97, 114, 32, 111, 114, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 117, > 99, 116, 117, 114, 105, 110, 103, 32, 101, 108, 101, 109, 101, 110, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 98, 111, 117, 110, 100, 97, > 114, 121, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, > 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, > 109, 97, 110, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 122, 101, 95, 122, 61, 49, 39, 44, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, > 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 101, 114, 111, 100, 101, 32, 49, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 114, 111, 100, 101, 95, 99, 105, > 114, 99, 32, 58, 32, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 98, > 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 99, 105, 114, 99, 117, 108, 97, 114, 32, 101, 114, 111, 115, 105, 111, 110, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, 97, 110, 100, > 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 114, 111, 100, 101, > 95, 99, 105, 114, 99, 32, 55, 10, 101, 114, 111, 100, 101, 95, 99, 105, > 114, 99, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 61, > 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, 36, > 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 99, 105, 114, 99, 117, 108, 97, 114, 32, 101, 114, > 111, 115, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 98, 121, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 98, 111, 117, > 110, 100, 97, 114, 121, 32, 36, 50, 32, 97, 110, 100, 32, 105, 115, 95, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 36, 51, 46, 34, 10, > 45, 105, 102, 32, 123, 36, 49, 60, 50, 125, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, > 95, 100, 116, 95, 99, 105, 114, 99, 108, 101, 91, 93, 32, 36, 49, 32, > 45, 101, 114, 111, 100, 101, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, > 44, 36, 50, 44, 36, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 114, 111, 100, 101, > 95, 111, 99, 116, 32, 58, 32, 95, 115, 105, 122, 101, 62, 61, 48, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 44, 95, 105, 115, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, > 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, 101, 114, 111, 115, > 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 114, > 111, 100, 101, 95, 111, 99, 116, 32, 55, 10, 101, 114, 111, 100, 101, 95, > 111, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, > 61, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, > 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 103, 111, 110, 97, 108, 32, > 101, 114, 111, 115, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 98, 121, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 98, > 111, 117, 110, 100, 97, 114, 121, 32, 36, 50, 32, 97, 110, 100, 32, 105, > 115, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 32, 36, 51, 46, > 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 49, 60, 50, > 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 38, 49, 125, 32, 115, 115, 61, 123, > 36, 49, 125, 32, 45, 101, 108, 115, 101, 32, 115, 115, 61, 123, 36, 49, > 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 48, 93, > 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, 59, 48, 44, > 49, 44, 48, 41, 32, 45, 105, 91, 49, 93, 32, 40, 49, 44, 49, 44, > 49, 59, 49, 44, 49, 44, 49, 59, 49, 44, 49, 44, 49, 41, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 10, 114, 61, > 123, 114, 111, 117, 110, 100, 40, 40, 36, 115, 115, 45, 49, 41, 42, 115, > 113, 114, 116, 40, 50, 41, 47, 40, 49, 43, 115, 113, 114, 116, 40, 50, > 41, 41, 47, 50, 41, 125, 10, 113, 61, 123, 114, 111, 117, 110, 100, 40, > 40, 36, 115, 115, 45, 49, 41, 47, 40, 49, 43, 115, 113, 114, 116, 40, > 50, 41, 41, 47, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 114, 62, > 48, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 114, 32, 45, 101, > 114, 111, 100, 101, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, 50, 44, > 36, 51, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 113, 62, 48, 125, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 113, 32, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 91, 49, 93, 44, 36, 50, 44, 36, 51, 32, 45, 100, 111, 110, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, > 50, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 44, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 102, 116, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 100, 105, 114, 101, > 99, 116, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, > 102, 111, 114, 109, 32, 40, 114, 101, 97, 108, 32, 97, 110, 100, 32, 105, > 109, 97, 103, 105, 110, 97, 114, 121, 32, 112, 97, 114, 116, 115, 41, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 45, 102, 102, 116, 32, 45, 97, 112, 112, 101, 110, > 100, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 111, 114, 109, > 91, 45, 49, 93, 32, 45, 108, 111, 103, 91, 45, 49, 93, 32, 45, 115, > 104, 105, 102, 116, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 48, 44, 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 102, 116, > 32, 45, 115, 104, 105, 102, 116, 32, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 48, 44, 50, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 51, 48, 44, 51, 48, 44, 48, 44, 49, > 44, 48, 32, 45, 115, 104, 105, 102, 116, 32, 45, 53, 48, 37, 44, 45, > 53, 48, 37, 44, 48, 44, 48, 44, 50, 32, 45, 105, 102, 102, 116, 32, > 45, 114, 101, 109, 111, 118, 101, 91, 45, 49, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 103, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 103, 114, 97, 100, 105, 101, 110, 116, 39, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 58, 32, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, > 46, 46, 123, 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 125, 44, > 95, 115, 99, 104, 101, 109, 101, 32, 58, 32, 40, 110, 111, 32, 97, 114, > 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 103, > 114, 97, 100, 105, 101, 110, 116, 32, 99, 111, 109, 112, 111, 110, 101, 110, > 116, 115, 32, 40, 102, 105, 114, 115, 116, 32, 100, 101, 114, 105, 118, 97, > 116, 105, 118, 101, 115, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 103, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 99, 104, > 101, 109, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, > 61, 98, 97, 99, 107, 119, 97, 114, 100, 32, 124, 32, 48, 61, 99, 101, > 110, 116, 101, 114, 101, 100, 32, 124, 32, 49, 61, 102, 111, 114, 119, 97, > 114, 100, 32, 124, 32, 50, 61, 115, 111, 98, 101, 108, 32, 124, 32, 51, > 61, 114, 111, 116, 97, 116, 105, 111, 110, 45, 105, 110, 118, 97, 114, 105, > 97, 110, 116, 32, 40, 100, 101, 102, 97, 117, 108, 116, 41, 32, 124, 32, > 52, 61, 100, 101, 114, 105, 99, 104, 101, 32, 124, 32, 53, 61, 118, 97, > 110, 118, 108, 105, 101, 116, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 99, 111, 109, > 112, 117, 116, 101, 32, 97, 108, 108, 32, 115, 105, 103, 110, 105, 102, 105, > 99, 97, 110, 116, 32, 50, 100, 47, 51, 100, 32, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 115, 99, 104, 101, 109, 101, 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 10, 35, 64, 103, 109, 105, 99, > 32, 103, 114, 97, 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 32, 58, 32, 95, 100, 105, 109, 101, 110, 115, 105, > 111, 110, 61, 123, 49, 44, 50, 44, 51, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 78, 45, 100, 32, > 103, 114, 97, 100, 105, 101, 110, 116, 32, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 100, 105, 109, 101, 110, 115, 105, 111, 110, 61, 51, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, > 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 50, 10, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, > 111, 110, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, > 61, 51, 125, 61, 61, 49, 32, 124, 124, 32, 36, 49, 61, 61, 50, 32, > 124, 124, 32, 36, 49, 61, 61, 51, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 36, 49, 45, 100, 32, > 103, 114, 97, 100, 105, 101, 110, 116, 32, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, 102, 32, 123, 36, 49, > 61, 61, 49, 125, 32, 45, 103, 32, 120, 32, 45, 45, 97, 98, 115, 91, > 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, > 45, 47, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, > 32, 45, 103, 32, 120, 121, 32, 45, 45, 115, 113, 114, 32, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, > 45, 56, 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, 45, 47, 91, > 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 103, 32, 120, 121, 122, 32, > 45, 45, 115, 113, 114, 32, 45, 43, 91, 45, 51, 45, 45, 49, 93, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, 115, 113, 114, > 116, 91, 45, 49, 93, 32, 45, 47, 91, 45, 52, 44, 45, 51, 93, 32, > 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 103, 114, 97, > 100, 105, 101, 110, 116, 32, 110, 111, 114, 109, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, > 111, 114, 109, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, > 93, 10, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, > 116, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, 110, 111, 114, 109, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 45, 103, 32, 120, 32, 45, 115, 113, 114, 91, > 45, 49, 93, 10, 45, 45, 103, 91, 45, 50, 93, 32, 121, 32, 45, 115, > 113, 114, 91, 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 103, 91, 45, 50, 93, 32, 122, 32, 45, 115, 113, 114, 91, 45, > 50, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 115, 61, 123, > 115, 125, 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 43, 91, 45, > 36, 115, 45, 45, 49, 93, 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 97, 97, 114, 32, 58, 32, > 115, 99, 97, 108, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 100, 105, 114, > 101, 99, 116, 32, 104, 97, 97, 114, 32, 109, 117, 108, 116, 105, 115, 99, > 97, 108, 101, 32, 119, 97, 118, 101, 108, 101, 116, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 104, 97, 97, 114, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, > 123, 49, 61, 49, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 104, 97, 97, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, > 32, 36, 49, 32, 115, 99, 97, 108, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 95, 104, 97, 97, 114, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 36, 49, 45, 49, 125, 10, 119, 61, 123, 109, 97, 120, > 40, 48, 44, 114, 111, 117, 110, 100, 40, 119, 47, 50, 94, 40, 49, 43, > 36, 62, 41, 41, 45, 49, 41, 125, 10, 104, 61, 123, 109, 97, 120, 40, > 48, 44, 114, 111, 117, 110, 100, 40, 104, 47, 50, 94, 40, 49, 43, 36, > 62, 41, 41, 45, 49, 41, 125, 10, 100, 61, 123, 109, 97, 120, 40, 48, > 44, 114, 111, 117, 110, 100, 40, 100, 47, 50, 94, 40, 49, 43, 36, 62, > 41, 41, 45, 49, 41, 125, 10, 45, 45, 122, 32, 48, 44, 48, 44, 48, > 44, 36, 119, 44, 36, 104, 44, 36, 100, 32, 45, 95, 104, 97, 97, 114, > 91, 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 95, 104, 97, 97, 114, 32, 58, 10, 45, 95, 104, 97, 97, 114, 95, 120, > 32, 45, 95, 104, 97, 97, 114, 95, 121, 32, 45, 95, 104, 97, 97, 114, > 95, 122, 10, 95, 104, 97, 97, 114, 95, 120, 32, 58, 10, 45, 105, 102, > 32, 123, 119, 60, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 119, 37, 50, 125, > 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 54, 93, 32, 34, 67, > 111, 109, 109, 97, 110, 100, 32, 39, 45, 104, 97, 97, 114, 39, 58, 32, > 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 119, 105, > 100, 116, 104, 61, 34, 123, 119, 125, 34, 32, 40, 105, 115, 32, 110, 111, > 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 115, 104, 105, 102, 116, 32, 45, 49, 32, 45, 114, 32, 53, > 48, 37, 32, 45, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 43, > 91, 48, 44, 49, 93, 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, > 41, 125, 32, 45, 97, 32, 120, 10, 95, 104, 97, 97, 114, 95, 121, 32, > 58, 10, 45, 105, 102, 32, 123, 104, 60, 61, 49, 125, 32, 45, 114, 101, > 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 104, 37, 50, 125, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, > 54, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 104, 97, > 97, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, > 103, 101, 32, 104, 101, 105, 103, 104, 116, 61, 34, 123, 104, 125, 34, 32, > 40, 105, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 45, 115, 104, 105, 102, 116, 32, 48, > 44, 45, 49, 32, 45, 114, 32, 49, 48, 48, 37, 44, 53, 48, 37, 32, > 45, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 43, 91, 48, 44, > 49, 93, 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, 41, 125, 32, > 45, 97, 32, 121, 10, 95, 104, 97, 97, 114, 95, 122, 32, 58, 10, 45, > 105, 102, 32, 123, 100, 60, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 100, 37, > 50, 125, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 54, 93, 32, > 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 104, 97, 97, 114, 39, > 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, > 100, 101, 112, 116, 104, 61, 34, 123, 104, 125, 34, 32, 40, 105, 115, 32, > 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 45, 115, 104, 105, 102, 116, 32, 48, 44, 48, 44, 45, > 49, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 53, > 48, 37, 32, 45, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 43, > 91, 48, 44, 49, 93, 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, > 41, 125, 32, 45, 97, 32, 122, 10, 35, 64, 103, 109, 105, 99, 32, 104, > 101, 97, 116, 95, 102, 108, 111, 119, 32, 58, 32, 95, 110, 98, 95, 105, > 116, 101, 114, 62, 61, 48, 44, 95, 100, 116, 44, 95, 107, 101, 101, 112, > 95, 115, 101, 113, 117, 101, 110, 99, 101, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, > 32, 116, 104, 101, 32, 104, 101, 97, 116, 32, 102, 108, 111, 119, 32, 111, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, > 105, 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, 51, 48, > 39, 32, 97, 110, 100, 32, 39, 107, 101, 101, 112, 95, 115, 101, 113, 117, > 101, 110, 99, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 104, 101, 97, 116, 95, 102, 108, 111, 119, 32, 50, 48, 10, 104, 101, 97, > 116, 95, 102, 108, 111, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 49, 48, 125, 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, > 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 36, 49, 32, 105, 116, 101, 114, 97, 116, 105, 111, > 110, 115, 32, 111, 102, 32, 116, 104, 101, 32, 104, 101, 97, 116, 32, 102, > 108, 111, 119, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, 115, 116, 101, 112, 32, 36, > 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, 100, 101, 95, 102, 108, > 111, 119, 32, 36, 49, 44, 36, 50, 44, 108, 97, 112, 108, 97, 99, 105, > 97, 110, 44, 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 104, 101, 115, 115, 105, 97, 110, 32, 58, 32, 123, 32, 120, 120, > 32, 124, 32, 120, 121, 32, 124, 32, 120, 122, 32, 124, 32, 121, 121, 32, > 124, 32, 121, 122, 32, 124, 32, 122, 122, 32, 125, 46, 46, 123, 32, 120, > 120, 32, 124, 32, 120, 121, 32, 124, 32, 120, 122, 32, 124, 32, 121, 121, > 32, 124, 32, 121, 122, 32, 124, 32, 122, 122, 32, 125, 32, 58, 32, 40, > 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, > 116, 104, 101, 32, 104, 101, 115, 115, 105, 97, 110, 32, 99, 111, 109, 112, > 111, 110, 101, 110, 116, 115, 32, 40, 115, 101, 99, 111, 110, 100, 32, 100, > 101, 114, 105, 118, 97, 116, 105, 118, 101, 115, 41, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, 111, 32, 97, 114, 103, > 115, 41, 32, 99, 111, 109, 112, 117, 116, 101, 32, 97, 108, 108, 32, 115, > 105, 103, 110, 105, 102, 105, 99, 97, 110, 116, 32, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 104, 101, 115, > 115, 105, 97, 110, 10, 35, 64, 103, 109, 105, 99, 32, 105, 101, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 103, 114, 97, 100, 105, 101, 110, 116, 45, 111, 114, 116, 104, 111, 103, > 111, 110, 97, 108, 45, 100, 105, 114, 101, 99, 116, 101, 100, 32, 50, 110, > 100, 32, 100, 101, 114, 105, 118, 97, 116, 105, 118, 101, 32, 111, 102, 32, > 105, 109, 97, 103, 101, 40, 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 105, 101, 101, 10, 105, 101, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 103, 114, 97, 100, 105, > 101, 110, 116, 45, 111, 114, 116, 104, 111, 103, 111, 110, 97, 108, 45, 100, > 105, 114, 101, 99, 116, 101, 100, 32, 50, 110, 100, 32, 100, 101, 114, 105, > 118, 97, 116, 105, 118, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, > 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, > 100, 61, 61, 49, 125, 10, 45, 45, 103, 32, 120, 121, 44, 48, 32, 45, > 104, 101, 115, 115, 105, 97, 110, 91, 45, 51, 93, 32, 120, 120, 120, 121, > 121, 121, 10, 45, 42, 91, 45, 51, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 52, > 93, 32, 45, 50, 10, 45, 43, 91, 45, 52, 44, 45, 51, 93, 32, 45, > 42, 91, 45, 51, 93, 32, 91, 45, 50, 93, 10, 45, 115, 113, 114, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 91, 45, > 49, 93, 32, 45, 43, 91, 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, > 45, 56, 32, 45, 47, 10, 45, 101, 108, 115, 101, 10, 45, 45, 105, 110, > 110, 32, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, 45, 50, 93, > 32, 45, 45, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 102, 102, 116, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 105, 110, 118, 101, 114, 115, 101, 32, 102, 111, 117, 114, 105, > 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 40, 114, 101, > 97, 108, 32, 97, 110, 100, 32, 105, 109, 97, 103, 105, 110, 97, 114, 121, > 32, 112, 97, 114, 116, 115, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 104, 97, 97, 114, 32, 58, 32, 115, 99, 97, 108, 101, > 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 105, 110, 118, 101, 114, 115, 101, 32, > 104, 97, 97, 114, 32, 109, 117, 108, 116, 105, 115, 99, 97, 108, 101, 32, > 119, 97, 118, 101, 108, 101, 116, 32, 116, 114, 97, 110, 115, 102, 111, 114, > 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 105, 104, 97, 97, 114, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 49, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 105, > 110, 118, 101, 114, 115, 101, 32, 104, 97, 97, 114, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 119, 105, 116, 104, 32, 36, 49, 32, 115, 99, 97, 108, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 49, 45, 49, 125, 10, 119, 61, 123, 109, 97, 120, 40, 48, > 44, 114, 111, 117, 110, 100, 40, 119, 47, 50, 94, 40, 49, 43, 36, 60, > 41, 41, 45, 49, 41, 125, 10, 104, 61, 123, 109, 97, 120, 40, 48, 44, > 114, 111, 117, 110, 100, 40, 104, 47, 50, 94, 40, 49, 43, 36, 60, 41, > 41, 45, 49, 41, 125, 10, 100, 61, 123, 109, 97, 120, 40, 48, 44, 114, > 111, 117, 110, 100, 40, 100, 47, 50, 94, 40, 49, 43, 36, 60, 41, 41, > 45, 49, 41, 125, 10, 45, 45, 122, 32, 48, 44, 48, 44, 48, 44, 36, > 119, 44, 36, 104, 44, 36, 100, 32, 45, 95, 105, 104, 97, 97, 114, 91, > 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 95, > 105, 104, 97, 97, 114, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 95, 105, 104, 97, 97, 114, 32, 58, 10, > 45, 95, 105, 104, 97, 97, 114, 95, 120, 32, 45, 95, 105, 104, 97, 97, > 114, 95, 121, 32, 45, 95, 105, 104, 97, 97, 114, 95, 122, 10, 95, 105, > 104, 97, 97, 114, 95, 120, 32, 58, 10, 45, 105, 102, 32, 123, 119, 60, > 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 119, 37, 50, 125, 32, 45, 101, 114, > 114, 111, 114, 91, 48, 45, 45, 54, 93, 32, 34, 67, 111, 109, 109, 97, > 110, 100, 32, 39, 45, 105, 104, 97, 97, 114, 39, 58, 32, 73, 110, 118, > 97, 108, 105, 100, 32, 105, 109, 97, 103, 101, 32, 119, 105, 100, 116, 104, > 61, 34, 123, 119, 125, 34, 32, 40, 105, 115, 32, 110, 111, 116, 32, 101, > 118, 101, 110, 41, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, > 32, 120, 44, 50, 32, 45, 114, 32, 50, 48, 48, 37, 32, 40, 45, 49, > 44, 49, 41, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, > 32, 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, 41, 125, 10, 95, 105, > 104, 97, 97, 114, 95, 121, 32, 58, 10, 45, 105, 102, 32, 123, 104, 60, > 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 104, 37, 50, 125, 32, 45, 101, 114, > 114, 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 105, > 104, 97, 97, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, > 109, 97, 103, 101, 32, 104, 101, 105, 103, 104, 116, 61, 34, 123, 104, 125, > 34, 32, 40, 105, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, > 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 32, 121, 44, 50, 32, > 45, 114, 32, 49, 48, 48, 37, 44, 50, 48, 48, 37, 32, 40, 45, 49, > 59, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, > 119, 125, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 32, > 45, 47, 32, 123, 115, 113, 114, 116, 40, 50, 41, 125, 10, 95, 105, 104, > 97, 97, 114, 95, 122, 32, 58, 10, 45, 105, 102, 32, 123, 100, 60, 61, > 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 100, 37, 50, 125, 32, 45, 101, 114, 114, > 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 105, 104, > 97, 97, 114, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, 32, 105, 109, > 97, 103, 101, 32, 100, 101, 112, 116, 104, 61, 34, 123, 104, 125, 34, 32, > 40, 105, 115, 32, 110, 111, 116, 32, 101, 118, 101, 110, 41, 46, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 115, 32, 122, 44, 50, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 50, 48, 48, 37, 32, > 40, 45, 49, 47, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 119, 125, 44, 64, 123, 45, 50, 44, 104, 125, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 32, 45, 47, 32, 123, 115, > 113, 114, 116, 40, 50, 41, 125, 10, 35, 64, 103, 109, 105, 99, 32, 105, > 110, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, > 117, 116, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 45, 100, 105, 114, > 101, 99, 116, 101, 100, 32, 50, 110, 100, 32, 100, 101, 114, 105, 118, 97, > 116, 105, 118, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 40, 115, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 105, 110, 110, 10, 105, 110, 110, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, > 116, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 45, 100, 105, 114, 101, > 99, 116, 101, 100, 32, 50, 110, 100, 32, 100, 101, 114, 105, 118, 97, 116, > 105, 118, 101, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 61, 61, > 49, 125, 10, 45, 45, 103, 32, 120, 121, 44, 48, 32, 45, 104, 101, 115, > 115, 105, 97, 110, 91, 45, 51, 93, 32, 120, 120, 120, 121, 121, 121, 10, > 45, 42, 91, 45, 53, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 52, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 50, > 10, 45, 43, 91, 45, 53, 44, 45, 52, 93, 32, 45, 42, 91, 45, 52, > 93, 32, 91, 45, 50, 93, 10, 45, 115, 113, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 42, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, > 43, 91, 45, 52, 44, 45, 51, 93, 10, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, > 47, 10, 45, 101, 108, 115, 101, 10, 45, 45, 103, 32, 120, 121, 122, 44, > 48, 32, 45, 104, 101, 115, 115, 105, 97, 110, 91, 45, 52, 93, 32, 120, > 120, 120, 121, 120, 122, 121, 121, 121, 122, 122, 122, 10, 45, 42, 91, 45, > 57, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, 45, 56, 93, 32, 91, > 45, 50, 93, 32, 45, 42, 91, 45, 56, 93, 32, 50, 32, 45, 42, 91, > 45, 55, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 55, 93, 32, > 50, 10, 45, 43, 91, 45, 57, 45, 45, 55, 93, 32, 45, 42, 91, 45, > 55, 93, 32, 91, 45, 51, 93, 10, 45, 42, 91, 45, 54, 93, 32, 91, > 45, 50, 93, 32, 45, 42, 91, 45, 53, 93, 32, 91, 45, 49, 93, 32, > 45, 42, 91, 45, 53, 93, 32, 50, 10, 45, 43, 91, 45, 54, 44, 45, > 53, 93, 32, 45, 42, 91, 45, 53, 93, 32, 91, 45, 50, 93, 32, 45, > 43, 91, 45, 54, 44, 45, 53, 93, 10, 45, 115, 113, 114, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 42, 91, 45, 52, 93, 32, 91, 45, 49, 93, > 32, 45, 43, 91, 45, 53, 44, 45, 52, 93, 10, 45, 43, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, > 32, 45, 47, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 110, 112, 97, 105, 110, 116, 32, 58, 32, 91, 109, 97, > 115, 107, 93, 32, 58, 32, 91, 109, 97, 115, 107, 93, 44, 48, 44, 95, > 102, 97, 115, 116, 95, 109, 101, 116, 104, 111, 100, 32, 58, 32, 91, 109, > 97, 115, 107, 93, 44, 95, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, > 62, 61, 49, 44, 95, 108, 111, 111, 107, 117, 112, 95, 115, 105, 122, 101, > 62, 61, 49, 44, 95, 108, 111, 111, 107, 117, 112, 95, 102, 97, 99, 116, > 111, 114, 62, 61, 48, 44, 95, 108, 111, 111, 107, 117, 112, 95, 105, 110, > 99, 114, 101, 109, 101, 110, 116, 33, 61, 48, 44, 95, 98, 108, 101, 110, > 100, 95, 115, 105, 122, 101, 62, 61, 48, 44, 48, 60, 61, 95, 98, 108, > 101, 110, 100, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 60, 61, 49, > 44, 95, 98, 108, 101, 110, 100, 95, 100, 101, 99, 97, 121, 62, 61, 48, > 44, 95, 98, 108, 101, 110, 100, 95, 115, 99, 97, 108, 101, 115, 62, 61, > 49, 44, 95, 105, 115, 95, 98, 108, 101, 110, 100, 95, 111, 117, 116, 101, > 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 97, 105, > 110, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 98, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 109, 97, 115, 107, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 110, 111, 32, 112, 97, 116, 99, 104, 32, 115, 105, 122, 101, 32, > 40, 111, 114, 32, 48, 41, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 44, 32, 105, 110, 112, 97, 105, 110, 116, 105, 110, 103, 32, > 105, 115, 32, 100, 111, 110, 101, 32, 117, 115, 105, 110, 103, 32, 97, 32, > 102, 97, 115, 116, 32, 97, 118, 101, 114, 97, 103, 101, 32, 111, 114, 32, > 109, 101, 100, 105, 97, 110, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 79, 116, 104, 101, 114, > 119, 105, 115, 101, 44, 32, 105, 116, 32, 117, 115, 101, 100, 32, 97, 32, > 112, 97, 116, 99, 104, 45, 98, 97, 115, 101, 100, 32, 114, 101, 99, 111, > 110, 115, 116, 114, 117, 99, 116, 105, 111, 110, 32, 109, 101, 116, 104, 111, > 100, 44, 32, 116, 104, 97, 116, 32, 99, 97, 110, 32, 98, 101, 32, 118, > 101, 114, 121, 32, 116, 105, 109, 101, 32, 99, 111, 110, 115, 117, 109, 105, > 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 102, 97, > 115, 116, 95, 109, 101, 116, 104, 111, 100, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 108, 111, 119, 45, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 32, 97, 118, 101, 114, 97, 103, 101, 32, 124, > 32, 49, 61, 104, 105, 103, 104, 45, 99, 111, 110, 110, 101, 99, 116, 105, > 118, 105, 116, 121, 32, 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 50, > 61, 108, 111, 119, 45, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 32, 109, 101, 100, 105, 97, 110, 32, 124, 32, 51, 61, 104, 105, 103, > 104, 45, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 32, 109, > 101, 100, 105, 97, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 32, 58, 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, 61, 48, > 39, 44, 32, 39, 102, 97, 115, 116, 95, 109, 101, 116, 104, 111, 100, 61, > 49, 39, 44, 32, 39, 108, 111, 111, 107, 117, 112, 95, 115, 105, 122, 101, > 61, 50, 50, 39, 44, 32, 39, 108, 111, 111, 107, 117, 112, 95, 102, 97, > 99, 116, 111, 114, 61, 48, 46, 53, 39, 44, 32, 39, 108, 111, 111, 107, > 117, 112, 95, 105, 110, 99, 114, 101, 109, 101, 110, 116, 61, 49, 39, 44, > 32, 39, 98, 108, 101, 110, 100, 95, 115, 105, 122, 101, 61, 48, 39, 44, > 32, 39, 98, 108, 101, 110, 100, 95, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 61, 48, 39, 44, 32, 39, 98, 108, 101, 110, 100, 95, 100, 101, 99, > 97, 121, 61, 48, 46, 48, 53, 39, 44, 32, 39, 98, 108, 101, 110, 100, > 95, 115, 99, 97, 108, 101, 115, 61, 49, 48, 39, 32, 97, 110, 100, 32, > 39, 105, 115, 95, 98, 108, 101, 110, 100, 95, 111, 117, 116, 101, 114, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, 48, 37, 44, > 53, 48, 37, 44, 51, 48, 44, 51, 48, 44, 48, 44, 49, 44, 50, 53, > 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 50, 48, 37, 44, 50, > 48, 37, 44, 51, 48, 44, 49, 48, 44, 48, 44, 49, 44, 50, 53, 53, > 32, 45, 45, 105, 110, 112, 97, 105, 110, 116, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 101, 109, 111, 118, 101, 91, 45, 50, 93, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 99, 105, 114, 99, 108, 101, 32, 51, 48, 37, 44, 51, 48, 37, 44, 51, > 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 32, 45, 99, > 105, 114, 99, 108, 101, 32, 55, 48, 37, 44, 55, 48, 37, 44, 53, 48, > 44, 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 32, 45, 45, 105, > 110, 112, 97, 105, 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 53, 44, > 49, 53, 44, 48, 46, 53, 44, 49, 44, 57, 44, 48, 32, 45, 114, 101, > 109, 111, 118, 101, 91, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 105, > 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, 119, 32, 58, 32, 95, 110, > 98, 95, 105, 116, 101, 114, 49, 62, 61, 48, 44, 95, 110, 98, 95, 105, > 116, 101, 114, 50, 62, 61, 48, 44, 95, 100, 116, 62, 61, 48, 44, 95, > 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, 109, 97, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 105, 116, 101, 114, > 97, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, 32, 105, 110, 112, > 97, 105, 110, 116, 105, 110, 103, 32, 102, 108, 111, 119, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, 116, > 101, 114, 49, 61, 52, 39, 44, 32, 39, 110, 98, 95, 105, 116, 101, 114, > 50, 61, 49, 53, 39, 44, 32, 39, 100, 116, 61, 49, 53, 39, 44, 32, > 39, 97, 108, 112, 104, 97, 61, 49, 39, 32, 97, 110, 100, 32, 39, 115, > 105, 103, 109, 97, 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 101, 108, 108, 105, 112, 115, 101, > 91, 45, 49, 93, 32, 51, 48, 37, 44, 51, 48, 37, 44, 52, 48, 44, > 51, 48, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 114, 101, 118, 101, > 114, 115, 101, 32, 45, 105, 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, > 119, 32, 44, 10, 105, 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, 119, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 52, 125, 44, > 36, 123, 50, 61, 49, 53, 125, 44, 36, 123, 51, 61, 49, 53, 125, 44, > 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 51, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 36, 49, 32, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 32, 111, 102, 32, 116, 104, 101, > 32, 105, 110, 112, 97, 105, 110, 116, 105, 110, 103, 32, 102, 108, 111, 119, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 110, 111, 114, 109, 91, 48, 93, 32, 45, 113, 117, 97, > 110, 116, 105, 122, 101, 91, 48, 93, 32, 50, 44, 49, 44, 49, 32, 45, > 110, 91, 48, 93, 32, 48, 44, 49, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 105, 102, 32, 36, 62, 32, 45, 108, 91, 48, 44, > 36, 62, 93, 10, 45, 114, 91, 48, 93, 32, 91, 49, 93, 32, 45, 105, > 110, 112, 97, 105, 110, 116, 91, 49, 93, 32, 91, 48, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 45, 100, 105, 102, 102, 117, > 115, 105, 111, 110, 116, 101, 110, 115, 111, 114, 115, 91, 49, 93, 32, 48, > 44, 49, 44, 36, 52, 44, 36, 53, 44, 48, 32, 45, 42, 91, 50, 93, > 32, 91, 48, 93, 32, 45, 115, 109, 111, 111, 116, 104, 91, 49, 93, 32, > 91, 50, 93, 44, 36, 50, 44, 36, 51, 44, 48, 32, 45, 114, 109, 91, > 50, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 105, 110, 112, 97, 105, 110, 116, 95, > 104, 111, 108, 101, 115, 32, 58, 32, 109, 97, 120, 105, 109, 97, 108, 95, > 97, 114, 101, 97, 91, 37, 93, 62, 61, 48, 44, 95, 116, 111, 108, 101, > 114, 97, 110, 99, 101, 62, 61, 48, 44, 95, 105, 115, 95, 104, 105, 103, > 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 97, 105, 110, 116, 32, 97, 108, 108, 32, 99, 111, > 110, 110, 101, 99, 116, 101, 100, 32, 114, 101, 103, 105, 111, 110, 115, 32, > 104, 97, 118, 105, 110, 103, 32, 97, 110, 32, 97, 114, 101, 97, 32, 108, > 101, 115, 115, 32, 116, 104, 97, 110, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 109, 97, 120, 105, 109, 97, 108, 95, 97, 114, 101, 97, > 61, 52, 39, 44, 32, 39, 116, 111, 108, 101, 114, 97, 110, 99, 101, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 110, 111, 105, 115, 101, 32, 53, 37, 44, > 50, 32, 45, 45, 105, 110, 112, 97, 105, 110, 116, 95, 104, 111, 108, 101, > 115, 32, 56, 44, 52, 48, 10, 105, 110, 112, 97, 105, 110, 116, 95, 104, > 111, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 49, 61, 52, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, > 48, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, > 97, 105, 110, 116, 32, 104, 111, 108, 101, 115, 32, 119, 105, 104, 32, 97, > 114, 101, 97, 32, 108, 101, 115, 115, 32, 116, 104, 97, 110, 32, 36, 49, > 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 111, 108, 101, 114, 97, 110, > 99, 101, 32, 36, 50, 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 51, 44, 104, 105, 103, 104, 44, 108, 111, > 119, 125, 34, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 10, 97, 114, 101, 97, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 49, 125, 44, 36, 49, 42, 119, 42, 104, 42, 100, 44, 36, 49, > 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 115, > 125, 32, 45, 115, 104, 91, 48, 93, 32, 36, 62, 44, 36, 62, 32, 45, > 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 36, 50, 44, 36, 51, 32, > 45, 108, 101, 91, 45, 49, 93, 32, 36, 49, 32, 45, 111, 114, 91, 49, > 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, > 110, 101, 10, 45, 105, 102, 32, 123, 105, 109, 125, 32, 45, 107, 91, 48, > 93, 32, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, 100, > 125, 32, 45, 114, 32, 49, 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, > 50, 32, 45, 114, 32, 36, 119, 104, 100, 44, 49, 48, 48, 37, 10, 45, > 101, 108, 115, 101, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 48, 93, > 32, 91, 49, 93, 44, 48, 44, 123, 50, 42, 33, 36, 50, 43, 33, 33, > 36, 51, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 107, 117, 119, 97, 104, 97, 114, > 97, 32, 58, 32, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 75, 117, 119, 97, 104, 97, > 114, 97, 32, 102, 105, 108, 116, 101, 114, 32, 111, 102, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 32, 111, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 107, 117, 119, 97, 104, 97, 114, 97, 32, > 53, 10, 107, 117, 119, 97, 104, 97, 114, 97, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 49, 62, 48, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 65, 112, 112, 108, 121, 32, 75, 117, 119, 97, 104, 97, 114, 97, > 32, 102, 105, 108, 116, 101, 114, 32, 111, 102, 32, 115, 105, 122, 101, 32, > 36, 49, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 115, 61, 123, 115, 125, 10, 45, 45, 100, > 105, 108, 97, 116, 101, 32, 36, 49, 32, 45, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 109, > 105, 110, 10, 45, 45, 101, 114, 111, 100, 101, 91, 48, 93, 32, 36, 49, > 32, 45, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 45, 49, 93, 32, 109, 97, 120, 10, 45, 45, 91, 45, 50, > 44, 45, 49, 93, 10, 36, 49, 44, 49, 44, 49, 44, 49, 44, 123, 49, > 47, 36, 49, 125, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, > 93, 32, 91, 45, 49, 93, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, > 101, 91, 45, 49, 93, 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, > 48, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 112, 61, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 102, 32, 34, 118, 49, > 61, 105, 40, 120, 45, 34, 36, 112, 34, 44, 121, 45, 34, 36, 112, 34, > 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, 49, 41, 59, 32, 92, 10, > 118, 50, 61, 105, 40, 120, 43, 34, 36, 112, 34, 44, 121, 45, 34, 36, > 112, 34, 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, 49, 41, 59, 32, > 92, 10, 118, 51, 61, 105, 40, 120, 45, 34, 36, 112, 34, 44, 121, 43, > 34, 36, 112, 34, 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, 49, 41, > 59, 32, 92, 10, 118, 52, 61, 105, 40, 120, 43, 34, 36, 112, 34, 44, > 121, 43, 34, 36, 112, 34, 44, 48, 44, 34, 36, 115, 34, 44, 48, 44, > 49, 41, 59, 32, 92, 10, 118, 109, 61, 109, 105, 110, 40, 118, 49, 44, > 118, 50, 44, 118, 51, 44, 118, 52, 41, 59, 32, 92, 10, 105, 102, 40, > 99, 62, 61, 34, 36, 115, 34, 44, 105, 44, 32, 92, 10, 105, 102, 40, > 118, 109, 61, 61, 118, 49, 44, 105, 40, 120, 45, 34, 36, 112, 34, 44, > 121, 45, 34, 36, 112, 34, 44, 48, 44, 99, 44, 48, 44, 49, 41, 44, > 10, 105, 102, 40, 118, 109, 61, 61, 118, 50, 44, 105, 40, 120, 43, 34, > 36, 112, 34, 44, 121, 45, 34, 36, 112, 34, 44, 48, 44, 99, 44, 48, > 44, 49, 41, 44, 10, 105, 102, 40, 118, 109, 61, 61, 118, 51, 44, 105, > 40, 120, 45, 34, 36, 112, 34, 44, 121, 43, 34, 36, 112, 34, 44, 48, > 44, 99, 44, 48, 44, 49, 41, 44, 10, 105, 40, 120, 43, 34, 36, 112, > 34, 44, 121, 43, 34, 36, 112, 34, 44, 48, 44, 99, 44, 48, 44, 49, > 41, 41, 41, 41, 41, 34, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 44, 123, 115, 45, 50, 125, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 108, 97, 112, 108, 97, 99, 105, 97, 110, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 76, 97, 112, 108, > 97, 99, 105, 97, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 108, 97, 112, 108, 97, 99, 105, 97, 110, 10, 108, 97, 112, 108, 97, 99, > 105, 97, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 109, 112, 117, 116, 101, 32, 76, 97, 112, 108, 97, 99, 105, 97, 110, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 32, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 104, 101, 115, 115, 105, 97, 110, 32, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 40, 100, 61, 61, 49, 41, 44, > 120, 120, 121, 121, 122, 122, 44, 120, 120, 121, 121, 125, 32, 45, 43, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 99, 32, 58, 32, 95, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 62, 48, 44, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 110, 100, 101, 114, 32, 76, 73, 67, 32, 114, 101, 112, 114, 101, > 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, > 108, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 51, 48, 39, 32, 97, 110, 100, > 32, 39, 99, 104, 97, 110, 110, 101, 108, 115, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, > 48, 44, 49, 44, 50, 44, 39, 105, 102, 40, 99, 61, 61, 48, 44, 120, > 45, 119, 47, 50, 44, 121, 45, 104, 47, 50, 41, 39, 32, 45, 45, 108, > 105, 99, 32, 50, 48, 48, 44, 51, 32, 45, 113, 117, 105, 118, 101, 114, > 91, 45, 50, 93, 32, 91, 45, 50, 93, 44, 49, 48, 44, 45, 49, 51, > 44, 49, 44, 49, 44, 50, 53, 53, 10, 108, 105, 99, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, > 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, > 100, 101, 114, 32, 76, 73, 67, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 50, 100, 32, 118, 101, 99, > 116, 111, 114, 32, 102, 105, 101, 108, 100, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 32, 97, > 110, 100, 32, 36, 50, 32, 99, 104, 97, 110, 110, 101, 108, 40, 115, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, > 44, 110, 125, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, > 49, 32, 45, 47, 32, 123, 109, 97, 120, 40, 97, 98, 115, 40, 64, 123, > 45, 49, 44, 109, 125, 41, 44, 97, 98, 115, 40, 64, 123, 45, 49, 44, > 77, 125, 41, 41, 125, 32, 45, 118, 101, 99, 116, 111, 114, 50, 116, 101, > 110, 115, 111, 114, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 36, 50, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 115, 109, 111, 111, 116, 104, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 36, 49, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 45, 101, 113, 117, 97, 108, 105, 122, 101, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 112, 95, 116, 111, 110, 101, 115, 32, 58, 32, 95, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 103, 97, 109, 109, 97, 62, > 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, > 48, 44, 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 116, 111, 110, 101, > 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, 112, 101, 114, 97, 116, 111, > 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 44, 32, 98, 97, 115, 101, 100, 32, 111, 110, 32, 80, > 111, 105, 115, 115, 111, 110, 32, 101, 113, 117, 97, 116, 105, 111, 110, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 61, 48, 46, 49, 39, 44, 32, 39, 103, 97, 109, 109, > 97, 61, 48, 46, 56, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 61, 48, 46, 53, 39, 32, 97, 110, 100, 32, 39, 110, 98, > 95, 105, 116, 101, 114, 61, 51, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 32, 44, 10, 109, 97, > 112, 95, 116, 111, 110, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 48, 46, 49, 125, 44, 36, 123, 50, 61, 48, 46, 56, > 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, 44, 36, 123, 52, 61, 51, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 116, 111, 110, 101, 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, > 112, 101, 114, 97, 116, 111, 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 49, 44, 32, 103, 97, 109, 109, 97, 32, 36, 50, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 32, 97, > 110, 100, 32, 36, 52, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 108, 32, 45, 115, > 32, 99, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 103, 32, 120, 121, 44, 49, 32, 45, 97, 32, > 99, 32, 45, 45, 110, 111, 114, 109, 32, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 45, 50, 93, 10, 109, 61, 123, 105, 109, 125, > 32, 77, 61, 123, 105, 77, 125, 32, 45, 98, 91, 45, 49, 93, 32, 36, > 51, 32, 45, 110, 91, 45, 49, 93, 32, 36, 109, 44, 36, 77, 10, 45, > 42, 91, 45, 49, 93, 32, 39, 97, 108, 112, 104, 97, 61, 36, 49, 42, > 105, 77, 59, 40, 97, 108, 112, 104, 97, 47, 40, 49, 101, 45, 49, 48, > 43, 105, 41, 41, 42, 40, 105, 47, 40, 49, 101, 45, 49, 48, 43, 97, > 108, 112, 104, 97, 41, 41, 94, 36, 50, 39, 10, 45, 42, 32, 45, 115, > 32, 99, 32, 45, 103, 91, 45, 50, 93, 32, 120, 44, 45, 49, 32, 45, > 103, 91, 45, 49, 93, 32, 121, 44, 45, 49, 32, 45, 43, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 97, 32, 99, 32, 45, > 42, 32, 48, 46, 50, 53, 32, 45, 101, 110, 100, 108, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 52, 32, 45, 45, 108, 97, 112, 108, 97, 99, > 105, 97, 110, 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, 48, > 46, 50, 53, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, > 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 56, 48, 48, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 47, 91, 45, 50, 93, 32, 56, 48, 49, 32, 45, 99, 91, 45, > 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, 32, 58, > 32, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 112, 111, 119, 101, 114, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 102, 97, 115, 116, 32, 116, 111, 110, > 101, 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 114, 97, 100, 105, 117, 115, 61, 51, 37, 39, 32, 97, 110, 100, 32, > 39, 112, 111, 119, 101, 114, 61, 48, 46, 51, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, > 115, 116, 32, 44, 10, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, > 97, 115, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 51, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, > 48, 46, 51, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 65, 112, 112, 108, 121, 32, 102, 97, 115, 116, 32, 116, 111, 110, > 101, 32, 109, 97, 112, 112, 105, 110, 103, 32, 111, 112, 101, 114, 97, 116, > 111, 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 32, 97, 110, > 100, 32, 112, 111, 119, 101, 114, 32, 36, 50, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 49, 32, 45, 110, 32, 48, 44, 49, > 10, 45, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, > 93, 32, 49, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 123, 36, 50, 42, 108, 111, 103, 40, 49, 48, 41, 125, > 32, 45, 101, 120, 112, 91, 45, 49, 93, 10, 45, 108, 101, 91, 45, 50, > 93, 32, 48, 46, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 51, > 93, 10, 45, 45, 42, 91, 45, 51, 93, 32, 45, 49, 32, 45, 43, 91, > 45, 49, 93, 32, 49, 32, 45, 94, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 10, 45, 94, 91, 45, 52, 44, 45, 50, 93, 32, 45, 101, 113, 91, 45, > 50, 93, 32, 48, 32, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, > 43, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 110, > 32, 48, 44, 50, 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 101, 97, 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 95, 102, 108, 111, 119, 32, 58, 32, 95, 110, 98, 95, 105, 116, 101, 114, > 62, 61, 48, 44, 95, 100, 116, 44, 95, 115, 101, 113, 117, 101, 110, 99, > 101, 95, 102, 108, 97, 103, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 116, 104, > 101, 32, 109, 101, 97, 110, 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 32, 102, 108, 111, 119, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 110, 98, 95, 105, 116, 101, 114, 61, 49, 48, 39, 44, > 32, 39, 100, 116, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 107, 101, > 101, 112, 95, 115, 101, 113, 117, 101, 110, 99, 101, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 109, 101, 97, 110, 99, 117, 114, 118, 97, > 116, 117, 114, 101, 95, 102, 108, 111, 119, 32, 50, 48, 10, 109, 101, 97, > 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 102, 108, 111, 119, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 44, > 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 36, 49, > 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 116, > 104, 101, 32, 109, 101, 97, 110, 32, 99, 117, 114, 118, 97, 116, 117, 114, > 101, 32, 102, 108, 111, 119, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, 115, 116, 101, > 112, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, 100, 101, > 95, 102, 108, 111, 119, 32, 36, 49, 44, 36, 50, 44, 105, 101, 101, 44, > 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 101, 100, 105, 97, 110, 32, 58, 32, 115, 105, 122, 101, 62, 61, 48, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 109, 101, 100, 105, 97, 110, 32, 102, 105, 108, 116, > 101, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 115, 116, 114, 117, 99, > 116, 117, 114, 105, 110, 103, 32, 101, 108, 101, 109, 101, 110, 116, 32, 115, > 105, 122, 101, 32, 120, 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 109, 101, 100, 105, 97, 110, 32, 53, 10, 35, 64, 103, 109, > 105, 99, 32, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, > 97, 108, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, > 61, 48, 44, 95, 114, 97, 100, 105, 117, 115, 62, 48, 44, 95, 110, 95, > 115, 109, 111, 111, 116, 104, 62, 61, 48, 91, 37, 93, 44, 95, 97, 95, > 115, 109, 111, 111, 116, 104, 62, 61, 48, 91, 37, 93, 44, 95, 105, 115, > 95, 99, 117, 116, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, > 109, 105, 110, 61, 48, 44, 95, 109, 97, 120, 61, 50, 53, 53, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 78, 111, 114, 109, 97, 108, 105, 122, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 108, 111, 99, 97, 108, 108, 121, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 51, > 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 54, 39, 44, 32, > 39, 110, 95, 115, 109, 111, 111, 116, 104, 61, 52, 37, 39, 44, 32, 39, > 97, 95, 115, 109, 111, 111, 116, 104, 61, 50, 37, 39, 44, 32, 39, 105, > 115, 95, 99, 117, 116, 61, 49, 39, 44, 32, 39, 109, 105, 110, 61, 48, > 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 61, 50, 53, 53, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 32, 56, 44, 49, 48, 10, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 32, 58, 10, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 50, 61, 49, 54, 125, 62, 48, 32, 38, 38, > 32, 105, 115, 98, 111, 111, 108, 40, 36, 123, 53, 61, 49, 125, 41, 34, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 52, 37, 125, 44, 36, > 123, 52, 61, 50, 37, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, > 55, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 108, 111, 99, 97, 108, 108, 121, 44, 32, 119, 105, 116, 104, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, 114, 97, > 100, 105, 117, 115, 32, 36, 50, 44, 32, 110, 101, 105, 103, 104, 98, 111, > 114, 104, 111, 111, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 32, 36, 51, 32, 97, 110, 100, 32, 97, 118, 101, 114, 97, 103, 101, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 52, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 45, 108, 32, 45, 101, 114, 111, 100, > 101, 32, 123, 50, 42, 36, 50, 43, 49, 125, 32, 45, 115, 32, 99, 32, > 45, 109, 105, 110, 32, 45, 101, 110, 100, 108, 10, 45, 45, 108, 91, 45, > 50, 93, 32, 45, 100, 105, 108, 97, 116, 101, 32, 123, 50, 42, 36, 50, > 43, 49, 125, 32, 45, 115, 32, 99, 32, 45, 109, 97, 120, 32, 45, 101, > 110, 100, 108, 10, 45, 45, 98, 91, 45, 51, 93, 32, 36, 52, 32, 45, > 98, 91, 45, 51, 44, 45, 50, 93, 32, 36, 51, 10, 45, 45, 45, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, > 48, 46, 48, 49, 32, 45, 45, 91, 45, 53, 93, 32, 91, 45, 52, 93, > 32, 45, 47, 91, 45, 53, 44, 45, 49, 93, 10, 45, 42, 91, 45, 51, > 44, 45, 50, 93, 32, 123, 36, 49, 43, 49, 125, 32, 45, 42, 91, 45, > 49, 93, 32, 45, 36, 49, 32, 45, 43, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, > 32, 36, 53, 32, 45, 109, 97, 120, 91, 45, 50, 93, 32, 36, 54, 32, > 45, 109, 105, 110, 91, 45, 49, 93, 32, 36, 55, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 51, 44, 45, 49, 93, 32, 45, 43, 10, 45, 105, 102, 32, > 36, 53, 32, 45, 99, 32, 36, 54, 44, 36, 55, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 95, 99, 114, 111, 115, 115, 95, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 109, 112, 117, 116, 101, 32, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 100, 32, 99, 114, 111, 115, 115, 45, 99, 111, 114, 114, 101, 108, > 97, 116, 105, 111, 110, 32, 117, 115, 105, 110, 103, 32, 116, 119, 111, 45, > 98, 121, 45, 116, 119, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, > 104, 105, 102, 116, 32, 45, 51, 48, 44, 45, 50, 48, 32, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 95, 99, 114, 111, 115, 115, 95, 99, > 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 10, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 95, 99, 114, 111, 115, 115, 95, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 100, 32, 99, 114, 111, 115, 115, 45, 99, 111, 114, 114, > 101, 108, 97, 116, 105, 111, 110, 32, 117, 115, 105, 110, 103, 32, 116, 119, > 111, 45, 98, 121, 45, 116, 119, 111, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, 109, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, > 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 10, > 45, 102, 102, 116, 91, 45, 50, 93, 32, 45, 102, 102, 116, 91, 45, 49, > 93, 32, 91, 45, 50, 44, 45, 49, 93, 32, 45, 109, 117, 108, 91, 45, > 50, 93, 32, 91, 45, 53, 93, 32, 45, 109, 117, 108, 91, 45, 49, 93, > 32, 91, 45, 54, 93, 10, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 42, 91, 45, 53, 44, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, > 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, 10, 45, 47, 91, 45, > 51, 93, 32, 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 104, 97, 115, 101, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 116, 114, 97, 110, > 115, 108, 97, 116, 105, 111, 110, 32, 118, 101, 99, 116, 111, 114, 32, 117, > 115, 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, 111, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 32, 45, 51, > 48, 44, 45, 50, 48, 32, 45, 45, 112, 104, 97, 115, 101, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 45, 117, 110, 114, 111, 108, > 108, 91, 45, 49, 93, 32, 121, 10, 112, 104, 97, 115, 101, 95, 99, 111, > 114, 114, 101, 108, 97, 116, 105, 111, 110, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 69, 115, 116, 105, 109, 97, 116, 101, 32, 116, 114, > 97, 110, 115, 108, 97, 116, 105, 111, 110, 32, 118, 101, 99, 116, 111, 114, > 32, 117, 115, 105, 110, 103, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, > 111, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, > 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, > 125, 93, 10, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, 95, 99, > 114, 111, 115, 115, 95, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, > 10, 40, 64, 123, 45, 49, 44, 67, 125, 41, 32, 45, 42, 91, 45, 49, > 93, 32, 50, 32, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 45, 51, 62, 64, 123, > 45, 52, 44, 119, 125, 125, 32, 45, 45, 91, 45, 51, 93, 32, 64, 123, > 45, 52, 44, 119, 125, 32, 45, 45, 91, 45, 51, 93, 32, 64, 123, 45, > 52, 44, 119, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 45, 50, 62, 64, 123, 45, 52, 44, 104, 125, 125, 32, 45, 45, > 91, 45, 50, 93, 32, 64, 123, 45, 52, 44, 104, 125, 32, 45, 45, 91, > 45, 50, 93, 32, 64, 123, 45, 52, 44, 104, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 64, 45, 49, 62, 64, 123, 45, 52, > 44, 100, 125, 125, 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 52, > 44, 100, 125, 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 52, 44, > 100, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 99, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 47, > 32, 50, 32, 45, 42, 32, 45, 49, 10, 45, 110, 109, 32, 91, 112, 104, > 97, 115, 101, 92, 32, 99, 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 100, 101, 95, 102, 108, > 111, 119, 32, 58, 32, 95, 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, > 44, 95, 100, 116, 44, 95, 118, 101, 108, 111, 99, 105, 116, 121, 95, 99, > 111, 109, 109, 97, 110, 100, 44, 95, 107, 101, 101, 112, 95, 115, 101, 113, > 117, 101, 110, 99, 101, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 105, > 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 97, 32, 103, > 101, 110, 101, 114, 105, 99, 32, 80, 68, 69, 32, 102, 108, 111, 119, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, > 95, 105, 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, 51, > 48, 39, 44, 32, 39, 118, 101, 108, 111, 99, 105, 116, 121, 95, 99, 111, > 109, 109, 97, 110, 100, 61, 108, 97, 112, 108, 97, 99, 105, 97, 110, 39, > 32, 97, 110, 100, 32, 39, 107, 101, 101, 112, 95, 115, 101, 113, 117, 101, > 110, 99, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, > 100, 101, 95, 102, 108, 111, 119, 32, 50, 48, 10, 112, 100, 101, 95, 102, > 108, 111, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, > 108, 97, 112, 108, 97, 99, 105, 97, 110, 125, 44, 36, 123, 52, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 36, 49, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, > 102, 32, 116, 104, 101, 32, 118, 101, 108, 111, 99, 105, 116, 121, 32, 102, > 108, 111, 119, 32, 39, 36, 51, 39, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, 115, > 116, 101, 112, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 45, 36, 51, 91, > 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 50, 47, 40, > 48, 46, 48, 49, 43, 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, > 44, 97, 98, 115, 40, 105, 77, 41, 41, 41, 125, 10, 45, 105, 102, 32, > 36, 52, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 101, 108, 115, 101, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, > 36, 52, 32, 45, 114, 109, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 32, 120, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, 32, 120, 44, 36, 49, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 112, 101, 114, 105, 111, 100, 105, 122, 101, 95, 112, 111, > 105, 115, 115, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, > 101, 114, 105, 111, 100, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 117, 115, 105, 110, 103, 32, 97, > 32, 80, 111, 105, 115, 115, 111, 110, 32, 115, 111, 108, 118, 101, 114, 32, > 105, 110, 32, 70, 111, 117, 114, 105, 101, 114, 32, 115, 112, 97, 99, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, 101, 114, 105, 111, 100, 105, > 122, 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 45, 97, 114, 114, 97, > 121, 32, 50, 44, 50, 44, 50, 10, 112, 101, 114, 105, 111, 100, 105, 122, > 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 80, 101, 114, 105, 111, 100, 105, 122, 101, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 80, 111, 105, > 115, 115, 111, 110, 32, 115, 111, 108, 118, 101, 114, 32, 105, 110, 32, 70, > 111, 117, 114, 105, 101, 114, 32, 115, 112, 97, 99, 101, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 109, 77, 61, > 123, 105, 109, 125, 44, 123, 105, 77, 125, 32, 115, 117, 109, 61, 64, 123, > 48, 44, 43, 125, 10, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 32, > 45, 102, 102, 116, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 100, 61, > 61, 49, 125, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 39, 45, 40, 52, 45, 50, 42, 99, 111, 115, 40, 50, 42, 120, > 42, 112, 105, 47, 119, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, 121, > 42, 112, 105, 47, 104, 41, 41, 39, 10, 45, 101, 108, 115, 101, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 39, 45, 40, 54, 45, 50, 42, 99, 111, 115, 40, 50, 42, 120, 42, 112, > 105, 47, 119, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, 121, 42, 112, > 105, 47, 104, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, 122, 42, 112, > 105, 47, 100, 41, 41, 39, 10, 45, 101, 110, 100, 105, 102, 10, 45, 61, > 91, 45, 49, 93, 32, 49, 32, 45, 47, 91, 45, 51, 44, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 61, > 91, 45, 50, 93, 32, 36, 115, 117, 109, 32, 45, 61, 91, 45, 49, 93, > 32, 48, 10, 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 99, 32, 36, 109, 77, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 100, 95, 101, 121, 101, 32, 58, 32, 48, 60, 61, 95, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 60, 61, 49, 48, 48, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 48, 60, 61, > 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 60, 61, 49, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 116, 116, 101, 110, 117, 97, 116, > 101, 32, 114, 101, 100, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, 116, > 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 61, 55, 53, 39, 44, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 51, 46, 53, 39, 32, 97, > 110, 100, 32, 39, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 61, > 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 100, > 95, 101, 121, 101, 32, 44, 10, 114, 101, 100, 95, 101, 121, 101, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 55, 53, 125, 44, 36, > 123, 50, 61, 51, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 49, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 116, 116, 101, 110, 117, > 97, 116, 101, 32, 114, 101, 100, 45, 101, 121, 101, 32, 101, 102, 102, 101, > 99, 116, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 36, 49, > 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 32, > 97, 110, 100, 32, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 32, > 36, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 115, 32, 99, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, > 45, 103, 101, 91, 45, 49, 93, 32, 36, 49, 37, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 50, 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, > 32, 49, 10, 45, 110, 91, 45, 49, 93, 32, 36, 51, 44, 49, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 50, 56, 32, 45, 97, 32, 99, 32, 45, 121, 99, 98, 99, 114, 50, > 114, 103, 98, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 109, 111, > 118, 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 58, 32, 95, > 109, 97, 115, 107, 95, 115, 105, 122, 101, 62, 48, 44, 32, 95, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 91, 37, 93, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, 104, 111, 116, > 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 109, 97, 115, 107, 95, 115, 105, 122, 101, 61, > 51, 39, 32, 97, 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 61, 49, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 110, 111, > 105, 115, 101, 32, 49, 48, 44, 50, 32, 45, 45, 114, 101, 109, 111, 118, > 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 44, 10, 114, 101, > 109, 111, 118, 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 51, 125, 62, 48, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 48, 37, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, > 104, 111, 116, 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 109, 97, 115, 107, > 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 45, 109, 101, 100, 105, 97, 110, 32, 36, 49, 32, 45, > 45, 45, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 103, 101, 91, > 45, 49, 93, 32, 36, 50, 10, 45, 42, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 32, 45, 61, 61, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, > 45, 51, 44, 45, 49, 93, 32, 45, 43, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, 101, 108, 115, 32, > 58, 32, 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, 44, 95, 112, 105, > 120, 101, 108, 95, 115, 117, 109, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, 40, 105, 46, 101, 46, > 32, 115, 101, 116, 32, 116, 111, 32, 48, 41, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 101, 110, 115, 105, 116, 121, 32, 40, 105, 110, > 32, 112, 101, 114, 99, 101, 110, 116, 41, 32, 111, 102, 32, 110, 111, 110, > 45, 122, 101, 114, 111, 32, 112, 105, 120, 101, 108, 115, 32, 116, 111, 32, > 48, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 100, 101, 110, 115, 105, 116, 121, 32, 105, 115, > 32, 114, 101, 103, 97, 114, 100, 101, 100, 32, 97, 103, 97, 105, 110, 115, > 116, 32, 39, 112, 105, 120, 101, 108, 95, 115, 117, 109, 39, 32, 101, 120, > 99, 101, 112, 116, 32, 105, 102, 32, 105, 116, 32, 105, 115, 32, 115, 101, > 116, 32, 116, 111, 32, 39, 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 105, 110, 32, 116, 104, 105, 115, 32, 99, 97, 115, 101, 44, > 32, 39, 112, 105, 120, 101, 108, 95, 115, 117, 109, 39, 32, 104, 97, 115, > 32, 100, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 32, 39, > 119, 105, 100, 116, 104, 42, 104, 101, 105, 103, 104, 116, 39, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, > 61, 49, 48, 39, 44, 32, 39, 112, 105, 120, 101, 108, 95, 115, 117, 109, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 109, 111, > 118, 101, 95, 112, 105, 120, 101, 108, 115, 32, 53, 48, 10, 114, 101, 109, > 111, 118, 101, 95, 112, 105, 120, 101, 108, 115, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 48, 125, 62, 61, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, 118, 101, 32, 36, 49, > 37, 32, 111, 102, 32, 110, 111, 110, 45, 122, 101, 114, 111, 32, 112, 105, > 120, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 110, 111, 114, 109, 32, > 45, 103, 116, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, 36, 50, > 32, 114, 97, 116, 101, 61, 123, 36, 49, 42, 36, 50, 47, 109, 97, 120, > 40, 49, 101, 45, 56, 44, 64, 123, 45, 49, 44, 43, 125, 41, 125, 10, > 45, 101, 108, 115, 101, 32, 114, 97, 116, 101, 61, 123, 36, 49, 42, 119, > 42, 104, 47, 109, 97, 120, 40, 49, 101, 45, 56, 44, 64, 123, 45, 49, > 44, 43, 125, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 103, 101, > 91, 45, 49, 93, 32, 36, 114, 97, 116, 101, 37, 32, 45, 42, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 104, 97, 114, 112, 101, 110, 32, 58, > 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 101, 100, 103, > 101, 62, 61, 48, 44, 95, 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, > 109, 97, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 83, 104, 97, 114, 112, 101, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 121, 32, 105, 110, 118, > 101, 114, 115, 101, 32, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 111, > 114, 32, 115, 104, 111, 99, 107, 32, 102, 105, 108, 116, 101, 114, 115, 32, > 109, 101, 116, 104, 111, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 101, 100, 103, 101, 39, 32, 109, 117, 115, 116, 32, 98, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 116, 111, 32, 101, 110, > 97, 98, 108, 101, 32, 115, 104, 111, 99, 107, 45, 102, 105, 108, 116, 101, > 114, 32, 109, 101, 116, 104, 111, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 97, 108, 112, 104, 97, 61, 48, 39, 32, 97, 110, 100, > 32, 39, 115, 105, 103, 109, 97, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 115, 104, 97, 114, 112, 101, 110, 32, 51, 48, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 53, 32, 45, 45, 115, 104, > 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 51, 48, 48, 44, 49, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 109, 111, 111, 116, 104, 32, 58, 32, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 115, 104, > 97, 114, 112, 110, 101, 115, 115, 62, 61, 48, 44, 95, 97, 110, 105, 115, > 111, 116, 114, 111, 112, 121, 44, 95, 97, 108, 112, 104, 97, 44, 95, 115, > 105, 103, 109, 97, 44, 95, 100, 108, 62, 48, 44, 95, 100, 97, 62, 48, > 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 48, 44, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 102, 97, 115, > 116, 95, 97, 112, 112, 114, 111, 120, 61, 123, 32, 48, 32, 124, 32, 49, > 32, 125, 32, 58, 32, 110, 98, 95, 105, 116, 101, 114, 97, 116, 105, 111, > 110, 115, 62, 61, 48, 44, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 44, > 95, 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, 109, 97, 44, 95, 100, > 116, 62, 48, 44, 48, 32, 58, 32, 91, 116, 101, 110, 115, 111, 114, 95, > 102, 105, 101, 108, 100, 93, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 44, 95, 100, 108, 62, 48, 44, 95, 100, 97, 62, 48, > 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 48, 44, 95, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 44, 95, 102, 97, > 115, 116, 95, 97, 112, 112, 114, 111, 120, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 32, 58, 32, 91, 116, 101, 110, 115, 111, 114, 95, 102, 105, > 101, 108, 100, 93, 44, 95, 110, 98, 95, 105, 116, 101, 114, 115, 62, 61, > 48, 44, 95, 100, 116, 62, 48, 44, 48, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 109, 111, 111, 116, 104, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 110, 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 32, > 117, 115, 105, 110, 103, 32, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, > 80, 68, 69, 39, 115, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 102, 105, 101, 108, 100, 32, 111, 102, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 100, 105, 102, 102, 117, 115, 105, 111, > 110, 32, 116, 101, 110, 115, 111, 114, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 39, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 105, 110, 32, 91, 48, 44, 49, > 93, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 110, 101, 97, 114, 101, 115, 116, 32, 124, > 32, 49, 61, 108, 105, 110, 101, 97, 114, 32, 124, 32, 50, 61, 114, 117, > 110, 103, 101, 45, 107, 117, 116, 116, 97, 32, 125, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 46, 55, 39, 44, 32, 39, 97, 110, 105, 115, 111, 116, 114, 111, > 112, 121, 61, 48, 46, 51, 39, 44, 32, 39, 97, 108, 112, 104, 97, 61, > 48, 46, 54, 39, 44, 32, 39, 115, 105, 103, 109, 97, 61, 49, 46, 49, > 39, 44, 32, 39, 100, 108, 61, 48, 46, 56, 39, 44, 32, 39, 100, 97, > 61, 51, 48, 39, 44, 32, 39, 112, 114, 101, 99, 105, 115, 105, 111, 110, > 61, 50, 39, 44, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, > 105, 111, 110, 61, 48, 39, 32, 97, 110, 100, 32, 39, 102, 97, 115, 116, > 95, 97, 112, 112, 114, 111, 120, 61, 49, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 91, 48, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, > 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 50, 48, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 50, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 45, 49, 48, 48, 44, 49, 48, 48, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 50, 32, 45, 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, > 49, 48, 48, 44, 48, 46, 50, 44, 49, 44, 52, 44, 52, 32, 45, 100, > 111, 110, 101, 32, 45, 45, 119, 97, 114, 112, 91, 48, 93, 32, 91, 45, > 49, 93, 44, 49, 44, 49, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, > 108, 105, 116, 95, 102, 114, 101, 113, 32, 58, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 62, 48, 91, 37, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 116, 111, 32, 108, > 111, 119, 32, 97, 110, 100, 32, 104, 105, 103, 104, 32, 102, 114, 101, 113, > 117, 101, 110, 99, 121, 32, 112, 97, 114, 116, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 115, 112, 108, 105, 116, 95, 102, 114, 101, 113, 32, 50, 37, > 10, 115, 112, 108, 105, 116, 95, 102, 114, 101, 113, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 83, 112, 108, 105, 116, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 105, 110, 116, 111, 32, 108, 111, 119, 32, 97, 110, > 100, 32, 104, 105, 103, 104, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, > 32, 112, 97, 114, 116, 115, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 45, 98, 32, 36, 49, 32, 45, 45, 91, 48, 93, > 32, 91, 49, 93, 32, 45, 114, 118, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 111, 108, 105, 100, 105, 102, 121, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 82, 101, 112, 108, 97, 99, 101, 32, 116, 114, 97, 110, 115, > 112, 97, 114, 101, 110, 116, 32, 114, 101, 103, 105, 111, 110, 115, 32, 111, > 102, 32, 97, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 32, 98, > 121, 32, 109, 111, 114, 112, 104, 111, 108, 111, 103, 105, 99, 97, 108, 108, > 121, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, > 111, 108, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 32, 45, 103, 101, 91, 45, 49, 93, 32, 49, > 50, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, > 112, 112, 101, 110, 100, 32, 99, 32, 45, 45, 115, 111, 108, 105, 100, 105, > 102, 121, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, > 10, 115, 111, 108, 105, 100, 105, 102, 121, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 116, 114, 97, > 110, 115, 112, 97, 114, 101, 110, 116, 32, 114, 101, 103, 105, 111, 110, 115, > 32, 111, 102, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 98, 121, 32, 109, 111, 114, 112, 104, 111, 108, 111, 103, 105, 99, 97, > 108, 108, 121, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, > 32, 99, 111, 108, 111, 114, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 32, 45, 116, 111, 95, 97, > 10, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 91, 45, 50, 93, 32, 45, 103, 101, 91, 45, 50, 93, > 32, 53, 48, 37, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, > 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 45, 49, 44, 45, 49, 44, 45, 49, 44, 45, 49, 32, 45, 116, 111, 95, > 114, 103, 98, 91, 45, 49, 93, 10, 45, 100, 111, 10, 45, 45, 100, 105, > 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 50, 93, 32, 48, 44, > 48, 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, 49, 48, 48, 48, 44, > 49, 48, 48, 48, 44, 49, 48, 48, 48, 10, 45, 101, 114, 111, 100, 101, > 91, 45, 50, 93, 32, 51, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 99, 111, 108, 111, 114, 91, 45, 50, 93, 32, 48, 44, 48, 44, 49, 48, > 48, 48, 44, 49, 48, 48, 48, 44, 49, 48, 48, 48, 44, 45, 49, 44, > 45, 49, 44, 45, 49, 10, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 47, 91, 45, 49, 93, 32, 50, 10, 45, 106, 91, 45, 49, 93, 32, > 91, 45, 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 50, 93, 10, 45, 119, 104, 105, 108, 101, 32, 123, 105, 109, 60, 48, > 125, 10, 45, 107, 91, 45, 49, 93, 10, 45, 110, 109, 32, 36, 110, 109, > 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 111, 108, 105, 100, > 105, 102, 121, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 95, 115, 105, > 103, 109, 97, 62, 61, 49, 44, 95, 100, 115, 105, 103, 109, 97, 62, 61, > 49, 44, 48, 60, 61, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 60, > 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, > 97, 99, 101, 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, > 114, 101, 103, 105, 111, 110, 115, 32, 111, 102, 32, 97, 32, 82, 71, 66, > 65, 32, 105, 109, 97, 103, 101, 32, 98, 121, 32, 108, 105, 110, 101, 97, > 114, 108, 121, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, > 32, 99, 111, 108, 111, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 103, 109, 97, 61, 49, 46, 53, 39, 44, 32, 39, 100, > 115, 105, 103, 109, 97, 61, 49, 39, 32, 97, 110, 100, 32, 39, 112, 114, > 101, 99, 105, 115, 105, 111, 110, 61, 48, 46, 53, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, > 103, 101, 91, 45, 49, 93, 32, 49, 50, 48, 32, 45, 42, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, > 45, 45, 115, 111, 108, 105, 100, 105, 102, 121, 95, 108, 105, 110, 101, 97, > 114, 32, 44, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, > 97, 10, 115, 111, 108, 105, 100, 105, 102, 121, 95, 108, 105, 110, 101, 97, > 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 49, 46, 53, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 50, 61, 49, > 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 51, 60, 61, 49, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 112, 108, 97, 99, 101, 32, 116, > 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, 114, 101, 103, 105, 111, > 110, 115, 32, 111, 102, 32, 82, 71, 66, 65, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 98, 121, 32, 108, 105, 110, 101, 97, 114, 108, 121, 32, 105, > 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, 111, 108, 111, > 114, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, 103, 109, 97, 32, 36, > 49, 44, 32, 100, 115, 105, 103, 109, 97, 32, 36, 50, 32, 97, 110, 100, > 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, 36, 51, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, > 10, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 10, 115, 105, 103, 109, 97, 61, 36, > 49, 32, 45, 100, 111, 10, 78, 61, 123, 118, 61, 114, 111, 117, 110, 100, > 40, 51, 42, 36, 115, 105, 103, 109, 97, 41, 59, 109, 105, 110, 40, 51, > 51, 44, 109, 97, 120, 40, 51, 44, 118, 43, 49, 45, 40, 118, 37, 50, > 41, 41, 41, 125, 10, 36, 78, 44, 36, 78, 32, 45, 61, 91, 45, 49, > 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, > 49, 93, 32, 123, 45, 49, 47, 36, 115, 105, 103, 109, 97, 94, 50, 125, > 32, 45, 101, 120, 112, 91, 45, 49, 93, 32, 45, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 45, 45, 99, > 111, 110, 118, 111, 108, 118, 101, 91, 45, 51, 44, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 109, 97, 120, > 91, 45, 49, 93, 32, 49, 101, 45, 53, 32, 45, 47, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, > 32, 123, 118, 61, 114, 111, 117, 110, 100, 40, 40, 49, 47, 51, 45, 36, > 78, 47, 54, 41, 42, 36, 51, 43, 36, 78, 47, 50, 41, 59, 109, 97, > 120, 40, 51, 44, 118, 43, 49, 45, 40, 118, 37, 50, 41, 41, 125, 10, > 45, 45, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, > 50, 93, 32, 91, 45, 51, 93, 32, 45, 114, 109, 91, 45, 51, 93, 10, > 45, 45, 91, 45, 51, 44, 45, 50, 93, 10, 115, 105, 103, 109, 97, 61, > 123, 36, 115, 105, 103, 109, 97, 42, 36, 50, 125, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 33, 105, 109, 125, 10, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 111, 108, 105, 100, 105, 102, 121, 95, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 112, 108, > 97, 99, 101, 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, > 114, 101, 103, 105, 111, 110, 115, 32, 111, 102, 32, 82, 71, 66, 65, 32, > 105, 109, 97, 103, 101, 32, 98, 121, 32, 99, 111, 108, 111, 114, 32, 112, > 114, 111, 112, 97, 103, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 103, 101, > 91, 45, 49, 93, 32, 49, 50, 48, 32, 45, 42, 91, 45, 49, 93, 32, > 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 99, 32, 45, 45, > 115, 111, 108, 105, 100, 105, 102, 121, 95, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, > 10, 115, 111, 108, 105, 100, 105, 102, 121, 95, 119, 97, 116, 101, 114, 115, > 104, 101, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 112, 108, 97, 99, 101, 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, > 110, 116, 32, 114, 101, 103, 105, 111, 110, 115, 32, 111, 102, 32, 82, 71, > 66, 65, 32, 105, 109, 97, 103, 101, 36, 63, 32, 98, 121, 32, 99, 111, > 108, 111, 114, 32, 112, 114, 111, 112, 97, 103, 97, 116, 105, 111, 110, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 125, 10, 45, 43, 91, 48, 93, 32, 49, 32, 45, 103, 101, 91, 49, > 93, 32, 53, 48, 37, 32, 45, 42, 91, 48, 93, 32, 91, 49, 93, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 49, 93, 32, 49, 32, 45, > 42, 91, 49, 93, 32, 45, 49, 10, 45, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 111, 108, 118, 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 58, 32, > 34, 108, 97, 112, 108, 97, 99, 105, 97, 110, 95, 99, 111, 109, 109, 97, > 110, 100, 34, 44, 95, 110, 98, 95, 105, 116, 101, 114, 97, 116, 105, 111, > 110, 115, 62, 61, 48, 44, 95, 116, 105, 109, 101, 95, 115, 116, 101, 112, > 62, 48, 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 108, 118, 101, 32, > 80, 111, 105, 115, 115, 111, 110, 32, 101, 113, 117, 97, 116, 105, 111, 110, > 32, 115, 111, 32, 116, 104, 97, 116, 32, 97, 112, 112, 108, 121, 105, 110, > 103, 32, 39, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, 110, 93, > 39, 32, 105, 115, 32, 99, 108, 111, 115, 101, 32, 116, 111, 32, 116, 104, > 101, 32, 114, 101, 115, 117, 108, 116, 32, 111, 102, 32, 39, 45, 108, 97, > 112, 108, 97, 99, 105, 97, 110, 95, 99, 111, 109, 109, 97, 110, 100, 91, > 110, 93, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, > 108, 118, 105, 110, 103, 32, 105, 115, 32, 112, 101, 114, 102, 111, 114, 109, > 101, 100, 32, 117, 115, 105, 110, 103, 32, 97, 32, 109, 117, 108, 116, 105, > 45, 115, 99, 97, 108, 101, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 100, 101, 115, 99, 101, 110, 116, 32, 97, 108, 103, 111, 114, 105, 116, 104, > 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, > 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 48, 39, 44, 32, 116, 104, > 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 115, 99, 97, 108, > 101, 115, 32, 105, 115, 32, 97, 117, 116, 111, 109, 97, 116, 105, 99, 97, > 108, 108, 121, 32, 100, 101, 116, 101, 114, 109, 105, 110, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 115, 61, 54, 48, 39, 44, 32, 39, 100, 116, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 115, 99, 97, 108, > 101, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 32, 34, > 102, 111, 111, 32, 58, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 120, 34, 32, 45, 45, 115, 111, 108, 118, 101, 95, 112, 111, 105, 115, 115, > 111, 110, 32, 102, 111, 111, 32, 45, 45, 102, 111, 111, 91, 48, 93, 32, > 45, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 91, 49, 93, 10, 115, > 111, 108, 118, 101, 95, 112, 111, 105, 115, 115, 111, 110, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 54, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 83, 111, 108, 118, 101, 32, 80, 111, 105, 115, 115, > 111, 110, 32, 101, 113, 117, 97, 116, 105, 111, 110, 32, 102, 111, 114, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 102, 111, 114, 32, 108, 97, 112, > 108, 97, 99, 105, 97, 110, 32, 99, 111, 109, 109, 97, 110, 100, 32, 39, > 36, 49, 39, 44, 32, 119, 105, 116, 104, 32, 36, 50, 32, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 115, 44, 32, 116, 105, 109, 101, 32, 115, 116, > 101, 112, 32, 36, 51, 32, 97, 110, 100, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 40, 36, 52, 61, 61, 48, 41, 44, 36, 52, 44, > 97, 117, 116, 111, 125, 34, 32, 115, 99, 97, 108, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 91, 48, 93, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 105, 102, 40, 36, 52, 44, 36, 52, 44, 105, 110, 116, > 40, 109, 97, 120, 40, 108, 111, 103, 50, 40, 109, 97, 120, 40, 119, 44, > 104, 41, 41, 45, 49, 44, 49, 41, 41, 41, 125, 10, 102, 61, 123, 50, > 94, 36, 60, 125, 10, 45, 114, 91, 49, 93, 32, 64, 123, 48, 44, 109, > 97, 120, 40, 49, 44, 119, 47, 36, 102, 41, 125, 44, 64, 123, 48, 44, > 109, 97, 120, 40, 49, 44, 104, 47, 36, 102, 41, 125, 44, 49, 44, 49, > 48, 48, 37, 44, 51, 10, 45, 45, 114, 91, 48, 93, 32, 91, 49, 93, > 44, 50, 32, 45, 108, 91, 45, 49, 93, 32, 45, 36, 49, 32, 45, 107, > 91, 48, 93, 32, 45, 101, 110, 100, 108, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 50, 32, 45, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, > 91, 45, 50, 93, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 51, 47, 109, 97, 120, 40, > 49, 101, 45, 56, 44, 97, 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, > 40, 105, 77, 41, 41, 125, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, > 115, 32, 58, 32, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 48, > 44, 95, 98, 97, 115, 101, 95, 115, 99, 97, 108, 101, 91, 37, 93, 62, > 61, 48, 44, 95, 100, 101, 116, 97, 105, 108, 95, 115, 99, 97, 108, 101, > 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 112, 108, 105, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 105, 110, 116, 111, 32, 39, 110, 98, 95, 115, > 99, 97, 108, 101, 115, 39, 32, 115, 112, 97, 116, 105, 97, 108, 32, 115, > 99, 97, 108, 101, 115, 32, 40, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 112, 121, 114, 97, 109, 105, 100, 115, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 52, > 39, 44, 32, 39, 98, 97, 115, 101, 95, 115, 99, 97, 108, 101, 61, 50, > 37, 39, 32, 97, 110, 100, 32, 39, 100, 101, 116, 97, 105, 108, 95, 115, > 99, 97, 108, 101, 61, 48, 46, 53, 37, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, > 44, 10, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, > 36, 123, 49, 61, 52, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 51, 61, 48, 46, 53, 37, 125, 62, 61, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 83, 112, 108, 105, 116, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 36, 49, 32, 115, > 112, 97, 116, 105, 97, 108, 32, 115, 99, 97, 108, 101, 115, 32, 119, 105, > 116, 104, 32, 98, 97, 115, 101, 32, 115, 99, 97, 108, 101, 32, 36, 50, > 32, 97, 110, 100, 32, 100, 101, 116, 97, 105, 108, 32, 115, 99, 97, 108, > 101, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 115, 115, > 61, 123, 109, 97, 120, 40, 48, 46, 51, 44, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, > 36, 50, 42, 109, 97, 120, 40, 119, 44, 104, 41, 44, 36, 50, 41, 41, > 125, 10, 115, 101, 61, 123, 109, 97, 120, 40, 48, 46, 51, 44, 105, 102, > 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, > 36, 51, 125, 44, 36, 51, 42, 109, 97, 120, 40, 119, 44, 104, 41, 44, > 36, 51, 41, 41, 125, 10, 100, 115, 61, 123, 36, 115, 101, 45, 36, 115, > 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 32, 45, 45, 98, 91, 45, 49, 93, 32, 123, 36, 115, 115, 43, 36, > 62, 42, 36, 100, 115, 47, 40, 36, 49, 45, 50, 41, 125, 32, 45, 45, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 118, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 116, 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, > 111, 114, 115, 32, 58, 32, 95, 115, 99, 104, 101, 109, 101, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 115, 116, 114, 117, 99, 116, 117, > 114, 101, 32, 116, 101, 110, 115, 111, 114, 32, 102, 105, 101, 108, 100, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 99, > 104, 101, 109, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, > 61, 99, 101, 110, 116, 101, 114, 101, 100, 32, 124, 32, 49, 61, 102, 111, > 114, 119, 97, 114, 100, 45, 98, 97, 99, 107, 119, 97, 114, 100, 49, 32, > 124, 32, 50, 61, 102, 111, 114, 119, 97, 114, 100, 45, 98, 97, 99, 107, > 119, 97, 114, 100, 50, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 115, 99, 104, 101, 109, 101, 61, 50, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 115, 116, 114, 117, 99, 116, 117, 114, 101, 116, 101, 110, 115, > 111, 114, 115, 32, 45, 97, 98, 115, 32, 45, 112, 111, 119, 32, 48, 46, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 115, 121, 110, 116, 101, 120, 116, > 117, 114, 105, 122, 101, 32, 58, 32, 95, 119, 105, 100, 116, 104, 91, 37, > 93, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 91, 37, 93, 62, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 115, 121, 110, 116, > 104, 101, 116, 105, 122, 101, 32, 39, 119, 105, 100, 116, 104, 39, 120, 39, > 104, 101, 105, 103, 104, 116, 39, 32, 118, 101, 114, 115, 105, 111, 110, 115, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 109, 105, 99, > 114, 111, 45, 116, 101, 120, 116, 117, 114, 101, 115, 32, 98, 121, 32, 112, > 104, 97, 115, 101, 32, 114, 97, 110, 100, 111, 109, 105, 122, 97, 116, 105, > 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, > 32, 116, 101, 120, 116, 117, 114, 101, 32, 115, 121, 110, 116, 104, 101, 115, > 105, 115, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 32, 105, 115, 32, > 97, 32, 115, 116, 114, 97, 105, 103, 104, 116, 102, 111, 114, 119, 97, 114, > 100, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, > 32, 111, 102, 32, 116, 104, 101, 32, 109, 101, 116, 104, 111, 100, 32, 100, > 101, 115, 99, 114, 105, 98, 101, 100, 32, 105, 110, 32, 58, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 104, 116, 116, 112, 58, 47, 47, 119, 119, > 119, 46, 105, 112, 111, 108, 46, 105, 109, 47, 112, 117, 98, 47, 97, 114, > 116, 47, 50, 48, 49, 49, 47, 103, 103, 109, 95, 114, 112, 110, 47, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, > 104, 101, 105, 103, 104, 116, 61, 49, 48, 48, 37, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 99, 114, 111, 112, 32, 50, 44, 50, 56, 50, 44, 53, > 48, 44, 51, 50, 56, 32, 45, 45, 115, 121, 110, 116, 101, 120, 116, 117, > 114, 105, 122, 101, 32, 51, 50, 48, 44, 51, 50, 48, 10, 115, 121, 110, > 116, 101, 120, 116, 117, 114, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 48, 37, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 115, 121, 110, 116, 104, 101, 116, > 105, 122, 101, 32, 36, 49, 120, 36, 50, 32, 118, 101, 114, 115, 105, 111, > 110, 115, 32, 111, 102, 32, 116, 101, 120, 116, 117, 114, 101, 36, 63, 32, > 98, 121, 32, 112, 104, 97, 115, 101, 32, 114, 97, 110, 100, 111, 109, 105, > 122, 97, 116, 105, 111, 110, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 109, 77, 61, 123, 105, 109, 125, 44, 123, 105, 77, 125, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 115, 125, 32, 45, 115, 104, 91, 45, 49, 93, > 32, 36, 62, 44, 36, 62, 32, 115, 117, 109, 36, 62, 61, 64, 123, 45, > 49, 44, 43, 125, 32, 118, 97, 114, 36, 62, 61, 64, 123, 45, 49, 44, > 105, 118, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, > 101, 10, 110, 119, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 119, > 44, 36, 49, 41, 125, 10, 110, 104, 61, 123, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, > 36, 50, 42, 104, 44, 36, 50, 41, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 115, 125, 32, 115, 117, 109, 36, 62, 61, 123, 36, 123, 115, > 117, 109, 36, 62, 125, 42, 36, 110, 119, 42, 36, 110, 104, 47, 40, 119, > 42, 104, 41, 125, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, > 36, 110, 119, 62, 119, 124, 124, 36, 110, 104, 62, 104, 125, 10, 45, 112, > 101, 114, 105, 111, 100, 105, 122, 101, 95, 112, 111, 105, 115, 115, 111, 110, > 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 114, 101, 99, 116, > 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 53, 44, 53, 44, 123, 119, > 45, 54, 125, 44, 123, 104, 45, 54, 125, 44, 49, 44, 49, 32, 45, 98, > 91, 45, 49, 93, 32, 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 49, 10, 36, 110, 119, 44, 36, 110, 104, 44, 49, 44, 64, 123, 45, 50, > 44, 115, 125, 32, 45, 102, 99, 91, 45, 49, 93, 32, 64, 123, 45, 97, > 118, 101, 114, 97, 103, 101, 95, 99, 111, 108, 111, 114, 91, 45, 51, 93, > 125, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 51, 93, 44, 123, 40, > 119, 45, 64, 123, 45, 50, 44, 119, 125, 41, 47, 50, 125, 44, 123, 40, > 104, 45, 64, 123, 45, 50, 44, 104, 125, 41, 47, 50, 125, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 50, 93, 10, 45, 114, 109, 91, 45, 51, 44, > 45, 50, 93, 10, 45, 101, 108, 115, 101, 10, 45, 114, 32, 36, 110, 119, > 44, 36, 110, 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 10, 45, 112, 101, 114, 105, 111, 100, 105, > 122, 101, 95, 112, 111, 105, 115, 115, 111, 110, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 102, 102, 116, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 45, 112, 105, 125, > 44, 123, 112, 105, 125, 10, 45, 61, 91, 45, 49, 93, 32, 48, 10, 45, > 105, 102, 32, 123, 33, 40, 119, 37, 50, 41, 125, 32, 45, 61, 91, 45, > 49, 93, 32, 123, 40, 63, 60, 48, 46, 53, 41, 42, 112, 105, 125, 44, > 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 33, 40, 104, 37, 50, 41, 125, 32, 45, > 61, 91, 45, 49, 93, 32, 123, 40, 63, 60, 48, 46, 53, 41, 42, 112, > 105, 125, 44, 48, 44, 123, 105, 110, 116, 40, 104, 47, 50, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 40, 104, 37, > 50, 41, 38, 38, 33, 40, 104, 37, 50, 41, 125, 32, 45, 61, 91, 45, > 49, 93, 32, 123, 40, 63, 60, 48, 46, 53, 41, 42, 112, 105, 125, 44, > 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, 44, 123, 105, 110, 116, 40, > 104, 47, 50, 41, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 115, > 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, 10, > 45, 45, 42, 91, 45, 52, 44, 45, 49, 93, 32, 45, 45, 42, 91, 45, > 52, 44, 45, 51, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 42, 91, 45, 53, 44, 45, 51, 93, 32, 45, 42, 91, 45, 51, 44, > 45, 50, 93, 32, 45, 45, 91, 45, 51, 44, 45, 50, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 115, 125, 32, 45, 61, 91, 45, 50, 93, > 32, 36, 123, 115, 117, 109, 36, 62, 125, 44, 48, 44, 48, 44, 48, 44, > 36, 62, 32, 45, 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, > 48, 44, 36, 62, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 102, 116, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 115, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 36, 62, 44, > 36, 62, 32, 97, 118, 103, 61, 123, 105, 97, 125, 32, 45, 45, 91, 45, > 49, 93, 32, 36, 97, 118, 103, 32, 45, 42, 91, 45, 49, 93, 32, 123, > 115, 113, 114, 116, 40, 36, 123, 118, 97, 114, 36, 62, 125, 47, 105, 102, > 40, 105, 118, 44, 105, 118, 44, 49, 41, 41, 125, 32, 45, 43, 91, 45, > 49, 93, 32, 36, 97, 118, 103, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 100, 111, 110, 101, 10, 45, 99, 32, 36, 109, 77, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 118, 95, 102, 108, 111, 119, 32, 58, 32, 95, > 110, 98, 95, 105, 116, 101, 114, 62, 61, 48, 44, 95, 100, 116, 44, 95, > 115, 101, 113, 117, 101, 110, 99, 101, 95, 102, 108, 97, 103, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, > 115, 32, 111, 102, 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 118, > 97, 114, 105, 97, 116, 105, 111, 110, 32, 102, 108, 111, 119, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 105, > 116, 101, 114, 61, 49, 48, 39, 44, 32, 39, 100, 116, 61, 51, 48, 39, > 32, 97, 110, 100, 32, 39, 107, 101, 101, 112, 95, 115, 101, 113, 117, 101, > 110, 99, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, > 118, 95, 102, 108, 111, 119, 32, 52, 48, 10, 116, 118, 95, 102, 108, 111, > 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, > 125, 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, > 36, 49, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, > 32, 116, 104, 101, 32, 116, 111, 116, 97, 108, 32, 118, 97, 114, 105, 97, > 116, 105, 111, 110, 32, 102, 108, 111, 119, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 105, 109, 101, 32, > 115, 116, 101, 112, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 112, 100, 101, 95, 102, 108, 111, 119, 32, 36, 49, 44, 36, 50, 44, 99, > 117, 114, 118, 97, 116, 117, 114, 101, 44, 36, 51, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 117, 110, 115, 104, 97, 114, 112, 32, > 58, 32, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 97, 109, 111, 117, 110, 116, 62, 61, 48, 44, 95, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 117, 110, 115, 104, 97, 114, > 112, 32, 109, 97, 115, 107, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 97, 109, 111, 117, 110, 116, 61, 50, 39, 32, 97, > 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 51, 32, 45, > 45, 117, 110, 115, 104, 97, 114, 112, 32, 49, 46, 53, 44, 49, 53, 32, > 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 117, 110, 115, 104, 97, > 114, 112, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, > 61, 50, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 117, 110, 115, 104, 97, 114, 112, 32, 109, 97, 115, 107, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, 32, 97, 109, 111, > 117, 110, 116, 32, 36, 50, 32, 97, 110, 100, 32, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 98, 91, 36, 62, > 93, 32, 36, 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 36, 51, 32, 45, 45, 110, 111, 114, 109, 91, 45, > 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 51, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, 91, 36, 62, 44, 45, > 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, > 97, 118, 101, 32, 58, 32, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, > 62, 48, 44, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, > 44, 95, 97, 109, 111, 117, 110, 116, 62, 61, 48, 44, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 118, > 101, 32, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 115, 99, > 97, 108, 101, 115, 61, 52, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 49, 39, 44, 32, 39, 97, 109, 111, 117, 110, 116, 61, 50, 39, 32, > 97, 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 51, 32, > 45, 45, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, 97, 118, 101, > 32, 52, 44, 53, 44, 49, 53, 32, 45, 99, 117, 116, 32, 48, 44, 50, > 53, 53, 10, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, 97, 118, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, 50, 125, 62, 61, > 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 44, > 36, 123, 52, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 111, 99, 116, 97, 118, 101, 32, 115, 104, 97, > 114, 112, 101, 110, 105, 110, 103, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 115, 99, 97, 108, > 101, 115, 44, 32, 114, 97, 100, 105, 117, 115, 32, 36, 50, 44, 32, 97, > 109, 111, 117, 110, 116, 32, 36, 51, 32, 97, 110, 100, 32, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 45, 102, > 32, 48, 32, 119, 101, 105, 103, 104, 116, 61, 48, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 49, 10, 45, 45, 117, 110, 115, 104, 97, 114, 112, > 91, 48, 93, 32, 123, 36, 50, 42, 50, 94, 45, 64, 123, 60, 44, 45, > 49, 125, 125, 44, 36, 51, 44, 36, 52, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 50, 94, 45, 36, 62, 125, 32, 119, 101, 105, 103, 104, 116, 61, > 123, 36, 119, 101, 105, 103, 104, 116, 43, 50, 94, 45, 36, 62, 125, 32, > 45, 43, 91, 49, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 48, 93, 32, 45, 47, 32, 36, 119, 101, 105, 103, 104, 116, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 118, 97, 110, 118, 108, 105, 101, 116, 32, 58, 32, 115, 116, > 100, 95, 118, 97, 114, 105, 97, 116, 105, 111, 110, 62, 61, 48, 91, 37, > 93, 44, 111, 114, 100, 101, 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 124, 32, 50, 32, 124, 32, 51, 32, 125, 44, 97, 120, 105, 115, 61, 123, > 32, 120, 32, 124, 32, 121, 32, 124, 32, 122, 32, 124, 32, 99, 32, 125, > 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 86, 97, 110, 118, 108, 105, 101, 116, 32, 114, 101, 99, 117, 114, 115, 105, > 118, 101, 32, 102, 105, 108, 116, 101, 114, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 97, 110, 100, 97, 114, > 100, 32, 100, 101, 118, 105, 97, 116, 105, 111, 110, 44, 32, 111, 114, 100, > 101, 114, 44, 32, 97, 120, 105, 115, 32, 97, 110, 100, 32, 98, 111, 114, > 100, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 99, 111, 110, > 100, 105, 116, 105, 111, 110, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 39, 32, > 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 98, 111, 117, > 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 118, 97, 110, 118, 108, 105, 101, 116, 32, 51, 44, 49, 44, 120, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 118, 97, 110, 118, 108, 105, 101, 116, 32, > 51, 48, 44, 48, 44, 120, 32, 45, 118, 97, 110, 118, 108, 105, 101, 116, > 91, 45, 50, 93, 32, 51, 48, 44, 48, 44, 121, 32, 45, 97, 100, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 116, 101, 114, 109, 97, 114, > 107, 95, 102, 111, 117, 114, 105, 101, 114, 32, 58, 32, 116, 101, 120, 116, > 44, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 100, 100, 32, 97, 32, 116, 101, 120, 116, 117, 97, 108, 32, > 119, 97, 116, 101, 114, 109, 97, 114, 107, 32, 105, 110, 32, 116, 104, 101, > 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 100, 111, 109, 97, 105, > 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 115, > 105, 122, 101, 61, 51, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 102, 111, 117, 114, 105, 101, > 114, 32, 34, 87, 97, 116, 101, 114, 109, 97, 114, 107, 101, 100, 33, 34, > 32, 45, 45, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 32, 45, > 114, 101, 109, 111, 118, 101, 91, 45, 51, 44, 45, 49, 93, 32, 45, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, 53, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 45, 52, 44, 45, 50, 93, 32, 121, 32, > 45, 97, 112, 112, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 121, > 10, 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 102, 111, 117, 114, 105, > 101, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 50, 61, > 51, 51, 125, 62, 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 100, 100, 32, 116, 101, 120, 116, 117, 97, 108, 32, 119, 97, 116, 101, 114, > 109, 97, 114, 107, 32, 39, 36, 49, 39, 32, 119, 105, 116, 104, 32, 115, > 105, 122, 101, 32, 36, 50, 32, 105, 110, 32, 116, 104, 101, 32, 102, 114, > 101, 113, 117, 101, 110, 99, 121, 32, 100, 111, 109, 97, 105, 110, 32, 111, > 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 105, 91, 48, 93, 32, 48, 32, 45, 116, 91, 48, 93, 32, 34, > 36, 49, 34, 44, 48, 44, 48, 44, 36, 50, 44, 49, 44, 49, 32, 45, > 103, 101, 91, 48, 93, 32, 48, 46, 53, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 48, 93, 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 32, 119, 50, 61, 123, 105, 110, 116, 40, > 119, 47, 50, 41, 125, 32, 104, 50, 61, 123, 105, 110, 116, 40, 104, 47, > 50, 41, 125, 10, 45, 102, 102, 116, 91, 45, 49, 93, 10, 45, 115, 104, > 105, 102, 116, 91, 45, 50, 44, 45, 49, 93, 32, 36, 119, 50, 44, 36, > 104, 50, 44, 48, 44, 48, 44, 50, 10, 91, 48, 93, 44, 91, 48, 93, > 44, 49, 44, 123, 115, 125, 10, 45, 106, 91, 45, 51, 44, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 51, 44, 51, 44, 48, 44, 48, 44, 49, 44, > 91, 48, 93, 10, 45, 109, 105, 114, 114, 111, 114, 91, 48, 93, 32, 120, > 10, 45, 106, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 64, 123, 45, 50, 44, 119, 125, 45, 50, 45, 64, 123, 48, 44, 119, > 125, 125, 44, 51, 44, 48, 44, 48, 44, 49, 44, 91, 48, 93, 10, 45, > 109, 105, 114, 114, 111, 114, 91, 48, 93, 32, 121, 10, 45, 106, 91, 45, > 51, 44, 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, 64, 123, 45, 50, > 44, 119, 125, 45, 50, 45, 64, 123, 48, 44, 119, 125, 125, 44, 123, 64, > 123, 45, 50, 44, 104, 125, 45, 50, 45, 64, 123, 48, 44, 104, 125, 125, > 44, 48, 44, 48, 44, 49, 44, 91, 48, 93, 10, 45, 109, 105, 114, 114, > 111, 114, 91, 48, 93, 32, 120, 10, 45, 106, 91, 45, 51, 44, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 51, 44, 123, 64, 123, 45, 50, 44, 104, > 125, 45, 50, 45, 64, 123, 48, 44, 104, 125, 125, 44, 48, 44, 48, 44, > 49, 44, 91, 48, 93, 10, 45, 109, 105, 114, 114, 111, 114, 91, 48, 93, > 32, 121, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 105, 102, > 116, 91, 45, 50, 44, 45, 49, 93, 32, 45, 36, 119, 50, 44, 45, 36, > 104, 50, 44, 48, 44, 48, 44, 50, 10, 45, 105, 102, 102, 116, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 119, 97, 116, 101, 114, 115, 104, 101, 100, 32, 58, 32, 91, 112, 114, > 105, 111, 114, 105, 116, 121, 95, 105, 109, 97, 103, 101, 93, 44, 95, 102, > 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 119, > 97, 116, 101, 114, 115, 104, 101, 100, 32, 116, 114, 97, 110, 115, 102, 111, > 114, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 102, 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, > 48, 32, 45, 110, 111, 105, 115, 101, 32, 48, 46, 50, 44, 50, 32, 45, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 49, 32, 45, 109, 117, 108, > 91, 45, 49, 93, 32, 45, 49, 32, 45, 108, 97, 98, 101, 108, 91, 45, > 50, 93, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 109, 111, 100, 91, 45, 50, 93, 32, > 50, 53, 54, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 48, 32, 45, > 114, 101, 118, 101, 114, 115, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 70, 101, 97, 116, 117, 114, 101, 115, 32, 101, 120, 116, 114, 97, > 99, 116, 105, 111, 110, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 101, > 97, 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 62, 61, 48, > 44, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 97, 114, 101, 97, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, > 101, 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, 95, 104, > 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, > 97, 110, 99, 101, 32, 45, 115, 116, 101, 110, 99, 105, 108, 91, 45, 49, > 93, 32, 49, 32, 45, 45, 97, 114, 101, 97, 32, 48, 10, 97, 114, 101, > 97, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, > 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, > 32, 97, 114, 101, 97, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, > 101, 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, > 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, 32, > 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 104, > 105, 103, 104, 44, 108, 111, 119, 125, 34, 32, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 97, 98, 101, 108, 91, 36, 62, 93, 32, 36, 49, 44, 36, 50, > 32, 110, 98, 61, 64, 123, 36, 62, 44, 49, 43, 105, 77, 125, 32, 45, > 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 36, 62, 93, 32, 36, > 110, 98, 44, 48, 44, 123, 36, 110, 98, 45, 49, 125, 32, 45, 109, 97, > 112, 91, 36, 62, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 114, 101, 97, 95, 102, 103, 32, 58, 32, > 116, 111, 108, 101, 114, 97, 110, 99, 101, 62, 61, 48, 44, 105, 115, 95, > 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 97, 114, 101, > 97, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, > 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 102, 111, 114, 32, 110, 111, > 110, 45, 122, 101, 114, 111, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 105, 109, 105, 108, > 97, 114, 32, 116, 111, 32, 39, 45, 97, 114, 101, 97, 39, 32, 101, 120, > 99, 101, 112, 116, 32, 116, 104, 97, 116, 32, 48, 45, 118, 97, 108, 117, > 101, 100, 32, 112, 105, 120, 101, 108, 115, 32, 97, 114, 101, 32, 110, 111, > 116, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, > 32, 45, 115, 116, 101, 110, 99, 105, 108, 91, 45, 49, 93, 32, 49, 32, > 45, 45, 97, 114, 101, 97, 95, 102, 103, 32, 48, 10, 97, 114, 101, 97, > 95, 102, 103, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, > 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, > 116, 101, 32, 97, 114, 101, 97, 32, 111, 102, 32, 102, 111, 114, 101, 103, > 114, 111, 117, 110, 100, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, > 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 105, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 116, 111, 108, 101, > 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 104, 105, 103, 104, > 44, 108, 111, 119, 125, 34, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, > 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 32, > 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 97, > 98, 101, 108, 95, 102, 103, 91, 36, 62, 93, 32, 36, 49, 44, 36, 50, > 32, 110, 98, 61, 64, 123, 36, 62, 44, 49, 43, 105, 77, 125, 32, 45, > 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 36, 62, 93, 32, 36, > 110, 98, 44, 48, 44, 123, 36, 110, 98, 45, 49, 125, 32, 45, 61, 91, > 45, 49, 93, 32, 48, 32, 45, 109, 97, 112, 91, 36, 62, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, > 101, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 116, 95, 108, 105, 110, 101, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, > 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, > 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, 37, 93, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 114, 105, 101, 118, 101, 32, 112, > 105, 120, 101, 108, 115, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 98, 101, 108, > 111, 110, 103, 105, 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 108, 105, 110, 101, 32, 40, 120, 48, > 44, 121, 48, 44, 122, 48, 41, 45, 40, 120, 49, 44, 121, 49, 44, 122, > 49, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, 116, 95, 108, 105, > 110, 101, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 48, 10, 97, 116, 95, 108, 105, 110, 101, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 36, 123, 55, 61, 49, 48, 48, 37, 125, 62, > 61, 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 116, 114, > 105, 101, 118, 101, 32, 112, 105, 120, 101, 108, 115, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 98, 101, 108, 111, 110, 103, 105, 110, > 103, 32, 116, 111, 32, 108, 105, 110, 101, 32, 40, 36, 49, 44, 36, 50, > 44, 36, 51, 41, 45, 40, 36, 52, 44, 36, 53, 44, 36, 54, 41, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 120, 48, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 49, 125, 44, 40, 119, 45, 49, 41, 42, 36, 49, 44, 36, 49, 41, 125, > 10, 121, 48, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 40, 104, 45, 49, 41, > 42, 36, 50, 44, 36, 50, 41, 125, 10, 122, 48, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 51, 125, 44, 40, 100, 45, 49, 41, 42, 36, 51, 44, 36, 51, 41, 125, > 10, 120, 49, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 52, 125, 44, 40, 119, 45, 49, 41, > 42, 36, 52, 44, 36, 52, 41, 125, 10, 121, 49, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 53, 125, 44, 40, 104, 45, 49, 41, 42, 36, 53, 44, 36, 53, 41, 125, > 10, 122, 49, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 92, 32, 36, 54, 125, 44, 40, 100, 45, 49, 41, > 42, 36, 54, 44, 36, 54, 41, 125, 10, 40, 36, 120, 48, 44, 36, 120, > 49, 94, 36, 121, 48, 44, 36, 121, 49, 94, 36, 122, 48, 44, 36, 122, > 49, 41, 10, 45, 114, 91, 45, 49, 93, 32, 123, 49, 43, 109, 97, 120, > 40, 97, 98, 115, 40, 36, 120, 49, 45, 36, 120, 48, 41, 44, 97, 98, > 115, 40, 36, 121, 49, 45, 36, 121, 48, 41, 44, 97, 98, 115, 40, 36, > 122, 49, 45, 36, 122, 48, 41, 41, 125, 44, 49, 44, 49, 44, 51, 44, > 51, 10, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, > 119, 97, 114, 112, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 118, 101, > 99, 116, 111, 114, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, > 108, 117, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 50, 53, 54, 44, 50, 53, 54, 32, 45, 101, 108, 108, 105, 112, 115, > 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, 50, 48, 37, 44, 50, 48, > 37, 44, 48, 44, 49, 44, 49, 32, 45, 100, 101, 102, 111, 114, 109, 32, > 50, 48, 32, 45, 45, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, > 45, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 50, 93, 32, 64, 123, > 45, 49, 44, 48, 44, 49, 125, 44, 53, 44, 53, 44, 48, 44, 49, 48, > 10, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 116, > 104, 101, 32, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 118, 101, > 99, 116, 111, 114, 32, 111, 102, 32, 112, 105, 120, 101, 108, 32, 118, 97, > 108, 117, 101, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, 109, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, > 109, 61, 64, 123, 48, 44, 98, 125, 10, 115, 117, 109, 61, 64, 123, 45, > 49, 44, 43, 125, 10, 45, 105, 102, 32, 123, 36, 115, 117, 109, 62, 48, > 125, 10, 45, 105, 102, 32, 123, 100, 62, 49, 125, 32, 45, 45, 42, 32, > 39, 122, 39, 32, 122, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 122, 61, 48, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 104, 62, 49, 125, > 32, 45, 45, 42, 32, 39, 121, 39, 32, 121, 61, 64, 123, 45, 49, 44, > 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 108, 115, 101, > 32, 121, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 42, 32, 39, > 120, 39, 32, 120, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 40, 123, 36, 120, 47, 36, 115, 117, 109, 125, 59, > 123, 36, 121, 47, 36, 115, 117, 109, 125, 59, 123, 36, 122, 47, 36, 115, > 117, 109, 125, 41, 10, 45, 101, 108, 115, 101, 32, 40, 123, 119, 47, 50, > 125, 44, 123, 104, 47, 50, 125, 44, 123, 100, 47, 50, 125, 41, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, > 109, 32, 34, 91, 98, 97, 114, 121, 99, 101, 110, 116, 101, 114, 32, 111, > 102, 32, 39, 34, 36, 110, 109, 34, 39, 93, 34, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, > 58, 32, 48, 60, 61, 116, 111, 108, 101, 114, 97, 110, 99, 101, 60, 61, > 49, 44, 95, 115, 107, 105, 110, 95, 120, 44, 95, 115, 107, 105, 110, 95, > 121, 44, 95, 115, 107, 105, 110, 95, 114, 97, 100, 105, 117, 115, 62, 61, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 116, 101, 99, > 116, 32, 115, 107, 105, 110, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 99, 111, 108, 111, 114, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 110, 100, 32, 111, 117, 116, 112, 117, 116, 32, 97, 110, 32, 97, 112, > 112, 97, 114, 116, 101, 110, 97, 110, 99, 101, 32, 112, 114, 111, 98, 97, > 98, 105, 108, 105, 116, 121, 32, 109, 97, 112, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 116, 101, 99, 116, 105, 111, 110, 32, 105, > 115, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, 32, 117, 115, 105, 110, > 103, 32, 67, 98, 67, 114, 32, 99, 104, 114, 111, 109, 97, 116, 105, 99, > 105, 116, 121, 32, 100, 97, 116, 97, 32, 111, 102, 32, 115, 107, 105, 110, > 32, 112, 105, 120, 101, 108, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 102, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 32, 39, > 115, 107, 105, 110, 95, 120, 39, 44, 32, 39, 115, 107, 105, 110, 95, 121, > 39, 32, 97, 110, 100, 32, 39, 115, 107, 105, 110, 95, 114, 97, 100, 105, > 117, 115, 39, 32, 97, 114, 101, 32, 112, 114, 111, 118, 105, 100, 101, 100, > 44, 32, 115, 107, 105, 110, 32, 112, 105, 120, 101, 108, 115, 32, 97, 114, > 101, 32, 108, 101, 97, 114, 110, 116, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 115, 97, 109, 112, 108, > 101, 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 115, 105, 100, 101, 32, > 116, 104, 101, 32, 99, 105, 114, 99, 108, 101, 32, 108, 111, 99, 97, 116, > 101, 100, 32, 97, 116, 32, 40, 39, 115, 107, 105, 110, 95, 120, 39, 44, > 39, 115, 107, 105, 110, 95, 121, 39, 41, 32, 119, 105, 116, 104, 32, 114, > 97, 100, 105, 117, 115, 32, 39, 115, 107, 105, 110, 95, 114, 97, 100, 105, > 117, 115, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 116, 111, > 108, 101, 114, 97, 110, 99, 101, 61, 48, 46, 53, 39, 32, 97, 110, 100, > 32, 39, 115, 107, 105, 110, 95, 120, 61, 115, 107, 105, 110, 121, 61, 114, > 97, 100, 105, 117, 115, 61, 45, 49, 39, 46, 10, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 48, 46, 53, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 49, 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 45, 49, 125, 44, 36, 123, 51, 61, 45, 49, 125, 44, 36, 123, 52, > 61, 45, 49, 125, 10, 45, 105, 102, 32, 123, 36, 50, 60, 48, 124, 124, > 36, 51, 60, 61, 48, 124, 124, 36, 52, 60, 61, 48, 125, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 68, 101, 116, 101, 99, 116, 32, 115, > 107, 105, 110, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 117, 115, 105, 110, 103, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, > 36, 49, 46, 34, 10, 45, 118, 32, 45, 10, 109, 48, 61, 49, 50, 48, > 46, 57, 50, 57, 50, 49, 48, 56, 56, 48, 48, 48, 54, 57, 10, 109, > 49, 61, 49, 52, 50, 46, 53, 55, 52, 53, 50, 55, 50, 57, 49, 56, > 48, 56, 52, 10, 65, 61, 48, 46, 48, 57, 55, 52, 57, 57, 56, 53, > 52, 56, 54, 50, 54, 56, 57, 57, 55, 10, 66, 61, 48, 46, 48, 54, > 51, 56, 56, 56, 55, 49, 51, 55, 49, 55, 52, 54, 48, 54, 51, 10, > 67, 61, 48, 46, 48, 53, 50, 53, 48, 48, 53, 51, 49, 48, 55, 55, > 51, 56, 52, 57, 53, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 115, > 114, 103, 98, 50, 114, 103, 98, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 44, 50, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, > 100, 125, 32, 45, 114, 32, 123, 119, 42, 104, 42, 100, 125, 44, 50, 44, > 49, 44, 49, 44, 45, 49, 10, 45, 115, 32, 121, 32, 45, 45, 91, 48, > 93, 32, 36, 109, 48, 32, 45, 45, 91, 49, 93, 32, 36, 109, 49, 32, > 45, 97, 32, 121, 10, 45, 105, 91, 48, 93, 32, 40, 36, 65, 44, 36, > 66, 59, 36, 66, 44, 36, 67, 41, 32, 45, 45, 42, 42, 32, 45, 114, > 109, 91, 48, 93, 10, 45, 42, 32, 45, 115, 32, 121, 32, 45, 43, 32, > 45, 42, 91, 45, 49, 93, 32, 123, 36, 49, 45, 49, 125, 32, 45, 101, > 120, 112, 91, 45, 49, 93, 10, 45, 114, 32, 36, 119, 104, 100, 44, 49, > 44, 45, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 68, 101, 116, 101, 99, 116, 32, 115, 107, 105, 110, 32, 105, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, 116, 111, > 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, 32, 116, > 97, 114, 103, 101, 116, 32, 99, 105, 114, 99, 108, 101, 32, 97, 116, 32, > 40, 36, 50, 44, 36, 51, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, > 105, 117, 115, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 115, 114, 103, 98, 50, 114, 103, 98, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 49, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 99, 105, 114, 99, 108, 101, 91, 49, 93, 32, > 36, 50, 44, 36, 51, 44, 36, 52, 44, 49, 44, 49, 32, 45, 45, 102, > 91, 49, 93, 32, 39, 105, 102, 40, 105, 44, 121, 44, 45, 49, 41, 39, > 32, 45, 102, 91, 49, 93, 32, 39, 105, 102, 40, 105, 44, 120, 44, 45, > 49, 41, 39, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 49, 44, 50, > 93, 32, 45, 49, 32, 45, 97, 91, 49, 44, 50, 93, 32, 99, 10, 45, > 45, 119, 97, 114, 112, 91, 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, > 32, 45, 114, 109, 91, 49, 93, 10, 45, 115, 91, 49, 93, 32, 99, 10, > 109, 48, 61, 64, 123, 49, 44, 105, 97, 125, 32, 45, 45, 91, 49, 93, > 32, 36, 109, 48, 10, 109, 49, 61, 64, 123, 50, 44, 105, 97, 125, 32, > 45, 45, 91, 50, 93, 32, 36, 109, 49, 10, 77, 61, 123, 104, 125, 32, > 45, 97, 91, 49, 44, 50, 93, 32, 120, 32, 45, 45, 116, 114, 97, 110, > 115, 112, 111, 115, 101, 91, 49, 93, 32, 45, 114, 118, 91, 49, 44, 50, > 93, 32, 45, 42, 42, 91, 49, 44, 50, 93, 32, 45, 47, 91, 49, 93, > 32, 36, 77, 32, 45, 105, 110, 118, 101, 114, 116, 91, 49, 93, 10, 45, > 114, 118, 32, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, > 100, 125, 32, 45, 114, 91, 49, 93, 32, 123, 119, 42, 104, 42, 100, 125, > 44, 50, 44, 49, 44, 49, 44, 45, 49, 10, 45, 115, 91, 49, 93, 32, > 121, 32, 45, 45, 91, 49, 93, 32, 36, 109, 48, 32, 45, 45, 91, 50, > 93, 32, 36, 109, 49, 32, 45, 97, 91, 49, 44, 50, 93, 32, 121, 32, > 45, 45, 42, 42, 32, 45, 114, 109, 91, 48, 93, 10, 45, 42, 32, 45, > 115, 32, 121, 32, 45, 43, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, > 49, 45, 49, 125, 32, 45, 101, 120, 112, 91, 45, 49, 93, 10, 45, 114, > 32, 36, 119, 104, 100, 44, 49, 44, 45, 49, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 112, 108, 97, > 99, 101, 109, 101, 110, 116, 32, 58, 32, 91, 115, 111, 117, 114, 99, 101, > 95, 105, 109, 97, 103, 101, 93, 44, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 61, > 48, 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, 44, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 62, 61, 48, > 44, 105, 115, 95, 98, 97, 99, 107, 119, 97, 114, 100, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 69, 115, 116, 105, 109, 97, 116, 101, 32, 100, > 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 32, 102, 105, 101, 108, > 100, 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 111, 117, 114, 99, 101, 32, 97, 110, 100, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 39, 44, 32, 114, 101, 103, > 117, 108, 97, 114, 105, 122, 97, 116, 105, 111, 110, 32, 116, 121, 112, 101, > 32, 105, 115, 32, 115, 101, 116, 32, 116, 111, 32, 105, 115, 111, 116, 114, > 111, 112, 105, 99, 44, 32, 101, 108, 115, 101, 32, 116, 111, 32, 97, 110, > 105, 115, 111, 116, 114, 111, 112, 105, 99, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 73, 102, 32, 39, 110, 98, 115, 99, 97, 108, 101, 115, > 61, 61, 48, 39, 44, 32, 116, 104, 101, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 110, 101, 101, 100, 101, 100, 32, 115, 99, 97, 108, 101, > 115, 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 102, > 114, 111, 109, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 115, 105, > 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 49, 39, 44, 32, 39, > 112, 114, 101, 99, 105, 115, 105, 111, 110, 61, 53, 39, 44, 32, 39, 110, > 98, 95, 115, 99, 97, 108, 101, 115, 61, 48, 39, 44, 32, 39, 105, 116, > 101, 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 61, 49, 48, 48, 48, > 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 98, 97, 99, 107, 119, > 97, 114, 100, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, > 111, 116, 97, 116, 101, 32, 51, 44, 49, 44, 48, 44, 53, 48, 37, 44, > 53, 48, 37, 44, 48, 46, 57, 32, 45, 45, 100, 105, 115, 112, 108, 97, > 99, 101, 109, 101, 110, 116, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 113, 117, 105, 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, 49, 93, > 44, 49, 53, 44, 45, 50, 48, 44, 49, 44, 49, 44, 123, 49, 46, 53, > 42, 105, 77, 125, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 116, > 97, 110, 99, 101, 32, 58, 32, 105, 115, 111, 118, 97, 108, 117, 101, 91, > 37, 93, 44, 95, 109, 101, 116, 114, 105, 99, 32, 58, 32, 105, 115, 111, > 118, 97, 108, 117, 101, 91, 37, 93, 44, 91, 109, 101, 116, 114, 105, 99, > 93, 44, 95, 109, 101, 116, 104, 111, 100, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, > 32, 116, 104, 101, 32, 117, 110, 115, 105, 103, 110, 101, 100, 32, 100, 105, > 115, 116, 97, 110, 99, 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, > 116, 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 115, 111, > 118, 97, 108, 117, 101, 44, 32, 111, 112, 116, 46, 32, 97, 99, 99, 111, > 114, 100, 105, 110, 103, 32, 116, 111, 32, 97, 32, 99, 117, 115, 116, 111, > 109, 32, 109, 101, 116, 114, 105, 99, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 39, 109, 101, 116, 114, 105, 99, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 99, 104, 101, 98, 121, 115, 104, 101, 118, > 32, 124, 32, 49, 61, 109, 97, 110, 104, 97, 116, 116, 97, 110, 32, 124, > 32, 50, 61, 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 124, 32, 51, > 61, 115, 113, 117, 97, 114, 101, 100, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, > 109, 101, 116, 104, 111, 100, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, > 32, 48, 61, 102, 97, 115, 116, 45, 109, 97, 114, 99, 104, 105, 110, 103, > 32, 124, 32, 49, 61, 108, 111, 119, 45, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 32, 100, 105, 106, 107, 115, 116, 114, 97, 32, 124, > 32, 50, 61, 104, 105, 103, 104, 45, 99, 111, 110, 110, 101, 99, 116, 105, > 118, 105, 116, 121, 32, 100, 105, 106, 107, 115, 116, 114, 97, 32, 124, 32, > 51, 61, 49, 43, 114, 101, 116, 117, 114, 110, 32, 112, 97, 116, 104, 32, > 124, 32, 52, 61, 50, 43, 114, 101, 116, 117, 114, 110, 32, 112, 97, 116, > 104, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 101, > 116, 114, 105, 99, 61, 50, 39, 32, 97, 110, 100, 32, 39, 109, 101, 116, > 104, 111, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 50, 48, 37, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 32, 48, 32, 45, 112, 111, 119, 32, 48, 46, 51, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, > 52, 48, 48, 32, 45, 115, 101, 116, 32, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 48, 93, > 32, 49, 44, 50, 32, 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 48, 93, 32, 49, 44, 49, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, > 91, 48, 93, 32, 49, 44, 48, 32, 45, 109, 111, 100, 32, 51, 50, 32, > 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 49, 54, 32, 45, 97, > 112, 112, 101, 110, 100, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 102, > 108, 111, 97, 116, 50, 102, 102, 116, 56, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 102, 108, 111, 97, 116, 45, 118, 97, 108, 117, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 116, 111, 32, 56, 98, 105, 116, 115, > 32, 102, 111, 117, 114, 105, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 102, 108, 111, 97, 116, 50, > 102, 102, 116, 56, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 102, 108, 111, 97, 116, 45, 118, 97, > 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 56, 98, 105, 116, 115, 32, 102, 111, 117, 114, 105, 101, 114, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 45, 102, 102, 116, 112, 111, 108, 97, 114, > 32, 45, 43, 91, 45, 50, 93, 32, 49, 32, 45, 108, 111, 103, 91, 45, > 50, 93, 32, 45, 102, 108, 111, 97, 116, 50, 105, 110, 116, 56, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 102, 116, 56, 50, 102, 108, 111, 97, 116, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 56, 98, 105, 116, 115, 32, 102, 111, > 117, 114, 105, 101, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, > 116, 105, 111, 110, 115, 32, 116, 111, 32, 102, 108, 111, 97, 116, 45, 118, > 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 102, 102, > 116, 56, 50, 102, 108, 111, 97, 116, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 102, 108, 111, 97, > 116, 45, 118, 97, 108, 117, 101, 100, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 116, 111, 32, 56, 98, 105, 116, 115, 32, 102, 111, 117, 114, 105, 101, > 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, > 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 121, 44, > 50, 32, 45, 105, 110, 116, 56, 50, 102, 108, 111, 97, 116, 32, 45, 101, > 120, 112, 91, 45, 50, 93, 32, 45, 45, 91, 45, 50, 93, 32, 49, 32, > 45, 105, 102, 102, 116, 112, 111, 108, 97, 114, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 102, 116, 112, 111, 108, 97, 114, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 102, 111, 117, > 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 44, 32, 97, 115, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 109, > 97, 103, 110, 105, 116, 117, 100, 101, 47, 112, 104, 97, 115, 101, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 102, 116, > 112, 111, 108, 97, 114, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 49, 48, 44, 49, 48, 44, 48, 44, 49, > 44, 48, 32, 45, 105, 102, 102, 116, 112, 111, 108, 97, 114, 10, 102, 102, > 116, 112, 111, 108, 97, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 102, 111, 117, 114, 105, 101, > 114, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 97, 115, 32, 99, 101, 110, 116, 101, > 114, 101, 100, 32, 109, 97, 103, 110, 105, 116, 117, 100, 101, 47, 112, 104, > 97, 115, 101, 32, 105, 109, 97, 103, 101, 115, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 60, 93, 10, 45, 102, 102, 116, 32, 45, 99, 111, 109, 112, 108, 101, > 120, 50, 112, 111, 108, 97, 114, 32, 45, 115, 104, 105, 102, 116, 32, 123, > 45, 114, 111, 117, 110, 100, 40, 119, 47, 50, 41, 125, 44, 123, 45, 114, > 111, 117, 110, 100, 40, 104, 47, 50, 41, 125, 44, 123, 45, 114, 111, 117, > 110, 100, 40, 100, 47, 50, 41, 125, 44, 48, 44, 50, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, > 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 91, 37, 93, > 44, 95, 118, 97, 108, 117, 101, 48, 91, 37, 93, 44, 95, 118, 97, 108, > 117, 101, 49, 91, 37, 93, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 118, 97, 108, 117, > 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 115, 101, 116, 44, 32, > 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 105, 115, > 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 111, 110, 108, 121, 32, > 102, 111, 114, 32, 112, 105, 120, 101, 108, 115, 32, 105, 110, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, > 46, 32, 65, 114, 103, 117, 109, 101, 110, 116, 32, 39, 118, 97, 108, 117, > 101, 49, 39, 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 105, 102, 32, 39, 118, 97, 108, 117, 101, 48, > 39, 32, 105, 115, 32, 115, 101, 116, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, 50, 53, > 54, 39, 44, 32, 39, 118, 97, 108, 117, 101, 48, 61, 48, 37, 39, 32, > 97, 110, 100, 32, 39, 118, 97, 108, 117, 101, 49, 61, 49, 48, 48, 37, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 54, 52, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, > 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 52, 48, 48, 44, 51, 48, > 48, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 51, 32, 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, > 115, 62, 48, 91, 37, 93, 44, 95, 118, 97, 108, 117, 101, 48, 91, 37, > 93, 44, 95, 118, 97, 108, 117, 101, 49, 91, 37, 93, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, > 101, 32, 49, 100, 44, 50, 100, 32, 111, 114, 32, 51, 100, 32, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 109, 117, 108, 116, 105, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 105, 109, 97, 103, 101, 115, 32, 40, 104, 97, 118, 105, 110, > 103, 32, 49, 44, 50, 32, 111, 114, 32, 51, 32, 99, 104, 97, 110, 110, > 101, 108, 115, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 102, 32, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, > 32, 115, 101, 116, 44, 32, 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, > 32, 111, 110, 108, 121, 32, 102, 111, 114, 32, 112, 105, 120, 101, 108, 115, > 32, 105, 110, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 118, 97, 108, 117, 101, > 32, 114, 97, 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 118, 97, 108, 117, 101, 48, 61, 48, 37, 39, 32, 97, 110, 100, > 32, 39, 118, 97, 108, 117, 101, 49, 61, 49, 48, 48, 37, 39, 46, 10, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 51, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 49, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 37, 125, 44, 36, 123, 51, 61, 49, 48, 48, 37, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 109, > 117, 108, 116, 105, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, 32, 36, 49, 32, > 108, 101, 118, 101, 108, 115, 32, 105, 110, 32, 114, 97, 110, 103, 101, 32, > 91, 36, 49, 44, 36, 50, 93, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 114, 32, 123, 119, 42, 104, 42, 100, 125, 44, 123, 109, 105, 110, > 40, 51, 44, 115, 41, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 10, 118, 109, 105, 110, 61, > 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 105, 109, 44, 36, 50, 41, > 125, 32, 118, 109, 97, 120, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, 44, 36, 51, > 42, 105, 77, 44, 36, 51, 41, 125, 10, 45, 45, 32, 36, 118, 109, 105, > 110, 32, 45, 42, 32, 123, 40, 36, 49, 45, 49, 41, 47, 40, 36, 118, > 109, 97, 120, 45, 36, 118, 109, 105, 110, 41, 125, 10, 110, 98, 95, 108, > 101, 118, 101, 108, 115, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, > 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, > 40, 36, 118, 109, 97, 120, 45, 36, 118, 109, 105, 110, 41, 43, 49, 44, > 36, 49, 41, 125, 10, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, > 32, 49, 44, 36, 110, 98, 95, 108, 101, 118, 101, 108, 115, 44, 36, 110, > 98, 95, 108, 101, 118, 101, 108, 115, 44, 36, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 95, 99, 117, 109, 117, 108, 32, 58, 32, 95, 110, > 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 44, 95, 105, 115, 95, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 100, 61, 123, 32, 48, 32, 124, 32, > 49, 32, 125, 44, 95, 118, 97, 108, 48, 91, 37, 93, 44, 95, 118, 97, > 108, 49, 91, 37, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 99, 117, 109, 117, 108, 97, 116, 105, 118, > 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 61, 50, 53, 54, 39, 44, 32, 39, 105, 115, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 100, 61, 48, 39, 32, 97, 110, 100, 32, > 39, 118, 97, 108, 48, 61, 118, 97, 108, 49, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 95, > 99, 117, 109, 117, 108, 32, 50, 53, 54, 32, 45, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 91, 48, 93, 32, 50, 53, 54, 32, 45, 100, 105, 115, > 112, 108, 97, 121, 95, 103, 114, 97, 112, 104, 32, 52, 48, 48, 44, 51, > 48, 48, 44, 51, 10, 104, 105, 115, 116, 111, 103, 114, 97, 109, 95, 99, > 117, 109, 117, 108, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, > 49, 61, 50, 53, 54, 125, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 125, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 48, 125, 44, 36, 123, 52, 61, 48, 125, 10, 45, 97, 114, 103, 32, 49, > 43, 33, 36, 50, 44, 34, 110, 111, 114, 109, 97, 108, 105, 122, 101, 100, > 32, 34, 44, 34, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 109, 112, 117, 116, 101, 32, 34, 64, 123, 125, 34, 99, 117, 109, 117, > 108, 97, 116, 105, 118, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, > 110, 103, 32, 36, 49, 32, 108, 101, 118, 101, 108, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 36, > 49, 44, 36, 51, 44, 36, 52, 32, 45, 99, 117, 109, 117, 108, 32, 45, > 105, 102, 32, 36, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 47, 91, 36, 62, 93, 32, 64, 123, 36, 62, 44, 77, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 95, 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 58, 32, 110, > 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 91, 37, 93, 44, 95, 118, > 97, 108, 117, 101, 48, 91, 37, 93, 44, 95, 118, 97, 108, 117, 101, 49, > 91, 37, 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 32, 111, 102, 32, 101, 97, 99, 104, 32, 118, 101, 99, 116, 111, > 114, 45, 118, 97, 108, 117, 101, 100, 32, 112, 111, 105, 110, 116, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 118, > 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, 32, 105, 115, 32, 115, 101, > 116, 44, 32, 116, 104, 101, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 105, 115, 32, 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 111, 110, > 108, 121, 32, 102, 111, 114, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, > 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 118, 97, 108, 117, 101, 32, 114, 97, > 110, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 118, > 97, 108, 117, 101, 48, 61, 48, 37, 39, 32, 97, 110, 100, 32, 39, 118, > 97, 108, 117, 101, 49, 61, 49, 48, 48, 37, 39, 46, 10, 104, 105, 115, > 116, 111, 103, 114, 97, 109, 95, 112, 111, 105, 110, 116, 119, 105, 115, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 37, 125, > 44, 36, 123, 51, 61, 49, 48, 48, 37, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, > 112, 111, 105, 110, 116, 119, 105, 115, 101, 32, 104, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 111, 102, 32, 118, 101, 99, 116, 111, 114, 45, 118, 97, > 108, 117, 101, 100, 32, 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, > 108, 101, 118, 101, 108, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 110, 98, 95, 108, 101, 118, > 101, 108, 115, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, > 44, 40, 105, 77, 45, 105, 109, 41, 42, 36, 49, 44, 36, 49, 41, 41, > 125, 10, 118, 97, 108, 117, 101, 48, 61, 123, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, > 105, 109, 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 50, 44, 36, 50, > 41, 125, 10, 118, 97, 108, 117, 101, 49, 61, 123, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, > 44, 105, 109, 43, 40, 105, 77, 45, 105, 109, 41, 42, 36, 51, 44, 36, > 51, 41, 125, 10, 45, 45, 32, 36, 118, 97, 108, 117, 101, 48, 32, 45, > 42, 32, 123, 36, 110, 98, 95, 108, 101, 118, 101, 108, 115, 47, 109, 97, > 120, 40, 49, 44, 97, 98, 115, 40, 36, 118, 97, 108, 117, 101, 49, 45, > 36, 118, 97, 108, 117, 101, 48, 41, 41, 125, 32, 45, 99, 32, 48, 44, > 123, 36, 110, 98, 95, 108, 101, 118, 101, 108, 115, 45, 49, 125, 32, 45, > 114, 111, 117, 110, 100, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 32, 100, 61, 123, 100, 125, 32, 45, 114, 32, 123, 119, 42, 104, 42, > 100, 125, 44, 123, 115, 125, 44, 49, 44, 49, 44, 45, 49, 10, 45, 105, > 91, 45, 50, 93, 32, 40, 48, 44, 123, 119, 45, 49, 125, 41, 32, 45, > 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 50, 93, > 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 51, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 52, 32, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 121, 91, 45, 49, 93, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 44, 123, 104, 47, 51, > 125, 44, 123, 104, 47, 51, 125, 41, 10, 40, 49, 44, 48, 59, 49, 44, > 123, 104, 47, 51, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 44, 64, 123, 45, 50, 44, 104, 47, 51, 125, 44, 49, 44, 49, 44, > 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 51, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 44, 49, 32, 49, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 44, 45, 49, 32, 45, 121, 91, 45, 53, 44, 45, 51, > 44, 45, 50, 93, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 121, > 10, 123, 36, 119, 42, 36, 104, 42, 36, 100, 125, 44, 36, 110, 98, 95, > 108, 101, 118, 101, 108, 115, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 114, 32, 36, 119, 44, 36, 104, 44, 36, 100, 44, 36, 110, 98, 95, > 108, 101, 118, 101, 108, 115, 44, 45, 49, 10, 45, 110, 109, 32, 36, 110, > 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 111, 117, 103, > 104, 32, 58, 32, 95, 119, 105, 100, 116, 104, 62, 48, 44, 95, 104, 101, > 105, 103, 104, 116, 62, 48, 44, 103, 114, 97, 100, 105, 101, 110, 116, 95, > 110, 111, 114, 109, 95, 118, 111, 116, 105, 110, 103, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 104, 111, 117, 103, 104, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 40, 116, 104, 101, 116, 97, 44, 114, 104, > 111, 41, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 119, 105, 100, 116, 104, 61, 53, 49, 50, 39, 44, 32, 39, 104, 101, > 105, 103, 104, 116, 61, 119, 105, 100, 116, 104, 39, 32, 97, 110, 100, 32, > 39, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 95, 118, > 111, 116, 105, 110, 103, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, 49, 46, 53, 32, 45, 104, > 111, 117, 103, 104, 91, 45, 49, 93, 32, 52, 48, 48, 44, 52, 48, 48, > 32, 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, 48, 46, 53, 32, 45, > 43, 91, 45, 49, 93, 32, 49, 32, 45, 108, 111, 103, 91, 45, 49, 93, > 10, 104, 111, 117, 103, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 36, 49, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 109, 112, 117, 116, 101, 32, 36, 49, 120, 36, 50, 32, 104, 111, > 117, 103, 104, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 51, 44, 119, 105, 116, 104, 44, 119, 105, > 116, 104, 111, 117, 116, 125, 34, 32, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 110, 111, 114, 109, 32, 118, 111, 116, 105, 110, 103, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 115, 108, 105, 99, 101, 115, 32, 53, 48, 37, 32, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, > 64, 123, 48, 44, 110, 125, 10, 114, 104, 111, 109, 97, 120, 61, 123, 115, > 113, 114, 116, 40, 119, 94, 50, 43, 104, 94, 50, 41, 47, 50, 125, 10, > 45, 103, 32, 40, 48, 44, 123, 119, 45, 49, 125, 41, 32, 40, 48, 59, > 123, 64, 123, 45, 50, 44, 104, 125, 45, 49, 125, 41, 32, 45, 114, 91, > 45, 50, 44, 45, 49, 93, 32, 64, 123, 45, 51, 44, 119, 125, 44, 64, > 123, 45, 51, 44, 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 45, 91, > 45, 50, 93, 32, 123, 119, 47, 50, 125, 32, 45, 45, 91, 45, 49, 93, > 32, 123, 104, 47, 50, 125, 10, 45, 99, 111, 109, 112, 108, 101, 120, 50, > 112, 111, 108, 97, 114, 91, 45, 52, 45, 45, 49, 93, 32, 45, 45, 91, > 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 112, 111, 108, 97, 114, 50, > 99, 111, 109, 112, 108, 101, 120, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 45, 108, 116, 91, 45, 49, 93, 32, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 123, 112, 105, 125, 32, 45, 43, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, > 32, 45, 37, 91, 45, 50, 93, 32, 123, 50, 42, 112, 105, 125, 10, 45, > 42, 91, 45, 49, 93, 32, 123, 36, 50, 47, 36, 114, 104, 111, 109, 97, > 120, 125, 32, 45, 42, 91, 45, 50, 93, 32, 123, 48, 46, 53, 42, 36, > 49, 47, 112, 105, 125, 10, 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, > 120, 32, 123, 119, 125, 32, 45, 109, 118, 91, 45, 52, 93, 32, 64, 35, > 32, 45, 105, 102, 32, 123, 33, 36, 51, 125, 32, 45, 102, 91, 45, 49, > 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 32, > 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 49, 32, 45, 114, > 32, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, 48, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, > 102, 102, 116, 112, 111, 108, 97, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 105, 110, 118, 101, 114, 115, > 101, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 102, 114, 111, 109, 32, 99, 101, 110, > 116, 101, 114, 101, 100, 32, 109, 97, 103, 110, 105, 116, 117, 100, 101, 47, > 112, 104, 97, 115, 101, 32, 105, 109, 97, 103, 101, 115, 46, 10, 105, 102, > 102, 116, 112, 111, 108, 97, 114, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 105, 110, 118, 101, 114, > 115, 101, 32, 102, 111, 117, 114, 105, 101, 114, 32, 116, 114, 97, 110, 115, > 102, 111, 114, 109, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 102, 114, 111, 109, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 109, > 97, 103, 110, 105, 116, 117, 100, 101, 47, 112, 104, 97, 115, 101, 32, 105, > 109, 97, 103, 101, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, > 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 10, 45, > 115, 104, 105, 102, 116, 32, 123, 114, 111, 117, 110, 100, 40, 119, 47, 50, > 41, 125, 44, 123, 114, 111, 117, 110, 100, 40, 104, 47, 50, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 100, 47, 50, 41, 125, 44, 48, 44, 50, > 32, 45, 112, 111, 108, 97, 114, 50, 99, 111, 109, 112, 108, 101, 120, 32, > 45, 105, 102, 102, 116, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 105, 115, 111, 112, 104, 111, 116, 101, 115, 32, > 58, 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 105, > 115, 111, 112, 104, 111, 116, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 111, 110, 32, 97, > 32, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 32, 98, 97, 99, > 107, 103, 114, 111, 117, 110, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 110, 98, 95, 108, 101, 118, 101, 108, 115, 61, 54, 52, 39, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 50, 32, 45, 105, 115, > 111, 112, 104, 111, 116, 101, 115, 32, 54, 32, 45, 100, 105, 108, 97, 116, > 101, 95, 99, 105, 114, 99, 32, 53, 32, 45, 100, 105, 115, 112, 108, 97, > 121, 95, 114, 103, 98, 97, 10, 105, 115, 111, 112, 104, 111, 116, 101, 115, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 54, 52, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, > 32, 105, 115, 111, 112, 104, 111, 116, 101, 32, 109, 97, 112, 115, 32, 102, > 114, 111, 109, 32, 105, 109, 97, 103, 101, 115, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 36, 49, 32, 108, 101, 118, 101, 108, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 49, 32, 45, 45, 105, 115, 111, 108, 105, 110, 101, 51, > 100, 91, 49, 93, 32, 123, 36, 62, 42, 50, 53, 53, 47, 40, 36, 49, > 45, 49, 41, 125, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 49, > 93, 32, 45, 43, 51, 100, 91, 94, 48, 93, 32, 45, 99, 111, 108, 51, > 100, 91, 45, 49, 93, 32, 49, 10, 91, 48, 93, 44, 91, 48, 93, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, > 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 42, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 108, 97, 98, 101, 108, 32, 58, 32, 95, 116, 111, 108, > 101, 114, 97, 110, 99, 101, 62, 61, 48, 44, 105, 115, 95, 104, 105, 103, > 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 98, 101, 108, 32, 99, 111, > 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, > 116, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 116, 111, 108, 101, 114, 97, 110, 99, 101, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 32, 54, 48, 37, 32, 45, 108, 97, 98, 101, > 108, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, > 53, 53, 32, 45, 109, 97, 112, 32, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 32, 45, 115, 101, > 116, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 32, 49, 32, 45, 109, 111, 100, 32, 49, 54, 32, > 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 56, 32, 45, 108, 97, > 98, 101, 108, 32, 45, 109, 111, 100, 32, 50, 53, 53, 32, 45, 109, 97, > 112, 32, 50, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, 98, 101, 108, > 95, 102, 103, 32, 58, 32, 116, 111, 108, 101, 114, 97, 110, 99, 101, 62, > 61, 48, 44, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 98, 101, 108, > 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 32, 102, 111, 114, 32, 110, 111, 110, 45, 122, 101, > 114, 111, 32, 118, 97, 108, 117, 101, 115, 32, 40, 102, 111, 114, 101, 103, > 114, 111, 117, 110, 100, 41, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 105, 109, 105, 108, 97, 114, 32, 116, 111, 32, 39, > 45, 108, 97, 98, 101, 108, 39, 32, 101, 120, 99, 101, 112, 116, 32, 116, > 104, 97, 116, 32, 48, 45, 118, 97, 108, 117, 101, 100, 32, 112, 105, 120, > 101, 108, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, 108, 97, 98, 101, > 108, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 105, 115, > 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, > 116, 121, 61, 48, 39, 46, 10, 108, 97, 98, 101, 108, 95, 102, 103, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 76, 97, 98, 101, 108, 32, 102, 111, 114, > 101, 103, 114, 111, 117, 110, 100, 32, 99, 111, 110, 110, 101, 99, 116, 101, > 100, 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 32, 91, 49, 93, 44, 32, 119, 105, 116, 104, 32, > 116, 111, 108, 101, 114, 97, 110, 99, 101, 32, 36, 49, 32, 97, 110, 100, > 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, > 104, 105, 103, 104, 44, 108, 111, 119, 125, 34, 32, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 123, 100, 62, 49, 125, 32, 45, 45, 122, 32, 45, > 49, 44, 45, 49, 44, 45, 49, 44, 123, 119, 45, 49, 125, 44, 123, 104, > 45, 49, 125, 44, 123, 100, 45, 49, 125, 32, 45, 108, 97, 98, 101, 108, > 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 32, 45, 122, 91, 45, 49, > 93, 32, 49, 44, 49, 44, 49, 44, 123, 119, 45, 49, 125, 44, 123, 104, > 45, 49, 125, 44, 123, 100, 45, 49, 125, 10, 45, 101, 108, 115, 101, 32, > 45, 45, 122, 32, 45, 49, 44, 45, 49, 44, 123, 119, 45, 49, 125, 44, > 123, 104, 45, 49, 125, 32, 45, 108, 97, 98, 101, 108, 91, 45, 49, 93, > 32, 36, 49, 44, 36, 50, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 44, 123, 119, 45, 49, 125, 44, 123, 104, 45, 49, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 110, 101, 113, 91, 45, 50, 93, 32, 48, 32, > 45, 42, 10, 45, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 123, > 49, 43, 105, 77, 125, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 49, 93, 32, 39, 120, 39, 32, 45, 114, 111, 119, > 115, 91, 45, 49, 93, 32, 45, 49, 44, 48, 32, 45, 108, 97, 98, 101, > 108, 91, 45, 49, 93, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 49, 44, 49, 10, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 109, 97, 120, 95, 112, 97, 116, 99, 104, 32, 58, 32, 95, 112, > 97, 116, 99, 104, 95, 115, 105, 122, 101, 62, 61, 49, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 108, 111, 99, > 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 109, 97, 120, 105, 109, 97, > 108, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 108, 111, 99, 97, > 108, 32, 112, 97, 116, 99, 104, 45, 98, 97, 115, 101, 100, 32, 110, 101, > 105, 103, 104, 98, 111, 114, 104, 111, 111, 100, 32, 111, 102, 32, 103, 105, > 118, 101, 110, 32, 115, 105, 122, 101, 32, 102, 111, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, > 101, 61, 49, 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 110, 111, 114, > 109, 32, 45, 45, 109, 97, 120, 95, 112, 97, 116, 99, 104, 32, 49, 54, > 10, 109, 97, 120, 95, 112, 97, 116, 99, 104, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, > 54, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 49, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 116, 117, 114, 110, 32, 108, 111, > 99, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 109, 97, 120, 105, 109, > 97, 108, 32, 118, 97, 108, 117, 101, 115, 32, 105, 110, 32, 108, 111, 99, > 97, 108, 32, 112, 97, 116, 99, 104, 32, 110, 101, 105, 103, 104, 98, 111, > 114, 104, 111, 111, 100, 32, 111, 102, 32, 115, 105, 122, 101, 32, 36, 49, > 44, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 45, 100, 105, 108, 97, 116, 101, 91, 36, 62, 93, 32, 36, 49, 32, 45, > 61, 61, 91, 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, > 112, 97, 116, 99, 104, 32, 58, 32, 95, 112, 97, 116, 99, 104, 95, 115, > 105, 122, 101, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, > 32, 111, 102, 32, 109, 105, 110, 105, 109, 97, 108, 32, 118, 97, 108, 117, > 101, 115, 32, 105, 110, 32, 108, 111, 99, 97, 108, 32, 112, 97, 116, 99, > 104, 45, 98, 97, 115, 101, 100, 32, 110, 101, 105, 103, 104, 98, 111, 114, > 104, 111, 111, 100, 32, 111, 102, 32, 103, 105, 118, 101, 110, 32, 115, 105, > 122, 101, 32, 102, 111, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 112, 97, 116, 99, 104, 95, 115, 105, 122, 101, 61, 49, 54, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 110, 111, 114, 109, 32, 45, 45, 109, 105, > 110, 95, 112, 97, 116, 99, 104, 32, 49, 54, 10, 109, 105, 110, 95, 112, > 97, 116, 99, 104, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, 54, 125, 41, 32, 38, 38, > 32, 36, 49, 62, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 82, 101, 116, 117, 114, 110, 32, 108, 111, 99, 97, 116, 105, 111, 110, > 115, 32, 111, 102, 32, 109, 105, 110, 105, 109, 97, 108, 32, 118, 97, 108, > 117, 101, 115, 32, 105, 110, 32, 108, 111, 99, 97, 108, 32, 112, 97, 116, > 99, 104, 32, 110, 101, 105, 103, 104, 98, 111, 114, 104, 111, 111, 100, 32, > 111, 102, 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 105, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 101, 114, 111, 100, 101, > 91, 36, 62, 93, 32, 36, 49, 32, 45, 61, 61, 91, 36, 62, 44, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, > 104, 32, 58, 32, 120, 48, 91, 37, 93, 62, 61, 48, 44, 121, 48, 91, > 37, 93, 62, 61, 48, 44, 122, 48, 91, 37, 93, 62, 61, 48, 44, 120, > 49, 91, 37, 93, 62, 61, 48, 44, 121, 49, 91, 37, 93, 62, 61, 48, > 44, 122, 49, 91, 37, 93, 62, 61, 48, 44, 95, 105, 115, 95, 104, 105, > 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 109, 105, 110, 105, 109, > 97, 108, 32, 112, 97, 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 116, 119, 111, 32, 112, 111, 105, 110, 116, 115, 32, 111, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 112, 111, 116, 101, 110, 116, 105, 97, 108, > 32, 109, 97, 112, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, > 118, 105, 116, 121, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 102, > 105, 108, 108, 91, 45, 49, 93, 32, 49, 47, 40, 49, 43, 105, 41, 32, > 45, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 48, 32, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 91, > 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, 56, 48, > 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 101, > 115, 105, 122, 101, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 32, > 45, 111, 114, 10, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, > 32, 38, 38, 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, 51, 62, > 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 55, 61, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 32, 98, > 101, 116, 119, 101, 101, 110, 32, 112, 111, 105, 110, 116, 115, 32, 40, 36, > 49, 44, 36, 50, 44, 36, 51, 41, 32, 97, 110, 100, 32, 40, 36, 52, > 44, 36, 53, 44, 36, 54, 41, 32, 102, 111, 114, 32, 112, 111, 116, 101, > 110, 116, 105, 97, 108, 32, 109, 97, 112, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 55, 44, > 108, 111, 119, 44, 104, 105, 103, 104, 125, 34, 32, 99, 111, 110, 110, 101, > 99, 116, 105, 118, 105, 116, 121, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 45, 32, 123, 105, > 109, 125, 32, 45, 43, 32, 123, 105, 77, 47, 49, 48, 48, 125, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 61, 32, 49, 44, 36, 123, > 52, 45, 54, 125, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, > 49, 93, 32, 49, 44, 91, 48, 93, 44, 123, 105, 102, 40, 36, 55, 44, > 52, 44, 51, 41, 125, 32, 45, 107, 91, 45, 49, 93, 10, 120, 61, 123, > 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 40, > 119, 45, 49, 41, 44, 36, 49, 41, 41, 125, 10, 121, 61, 123, 114, 111, > 117, 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, > 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 40, 104, 45, > 49, 41, 44, 36, 50, 41, 41, 125, 10, 122, 61, 123, 114, 111, 117, 110, > 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 92, 32, 36, 51, 125, 44, 36, 51, 42, 40, 100, 45, 49, 41, > 44, 36, 51, 41, 41, 125, 10, 40, 36, 120, 59, 36, 121, 59, 36, 122, > 41, 10, 45, 100, 111, 10, 112, 61, 64, 123, 48, 44, 40, 36, 120, 44, > 36, 121, 44, 36, 122, 41, 125, 10, 45, 105, 102, 32, 123, 36, 112, 38, > 49, 125, 32, 120, 61, 123, 36, 120, 45, 49, 125, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 112, 38, 50, 125, 32, 120, 61, 123, 36, 120, 43, 49, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 112, > 38, 52, 125, 32, 121, 61, 123, 36, 121, 45, 49, 125, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 112, 38, 56, 125, 32, 121, 61, 123, 36, 121, 43, > 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 112, 38, 49, 54, 125, 32, 122, 61, 123, 36, 122, 45, 49, 125, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 112, 38, 51, 50, 125, 32, 122, 61, 123, > 36, 122, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 40, 36, 120, > 59, 36, 121, 59, 36, 122, 41, 10, 45, 119, 104, 105, 108, 101, 32, 36, > 112, 10, 45, 114, 109, 91, 48, 44, 45, 49, 93, 32, 45, 97, 32, 120, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 115, 101, 32, 58, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, > 77, 83, 69, 32, 40, 77, 101, 97, 110, 45, 83, 113, 117, 97, 114, 101, > 100, 32, 69, 114, 114, 111, 114, 41, 32, 109, 97, 116, 114, 105, 120, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 110, 111, 105, 115, 101, 32, 51, 48, 32, 45, 45, 110, 111, 105, 115, 101, > 91, 48, 93, 32, 51, 53, 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, > 93, 32, 51, 56, 32, 45, 99, 117, 116, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 109, 115, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 97, 116, 99, 104, 101, 115, 32, 58, 32, 112, 97, 116, 99, 104, 95, > 119, 105, 100, 116, 104, 62, 48, 44, 112, 97, 116, 99, 104, 95, 104, 101, > 105, 103, 104, 116, 62, 48, 44, 112, 97, 116, 99, 104, 95, 100, 101, 112, > 116, 104, 62, 48, 44, 120, 48, 44, 121, 48, 44, 122, 48, 44, 95, 120, > 49, 44, 95, 121, 49, 44, 95, 122, 49, 44, 46, 46, 46, 44, 95, 120, > 78, 44, 95, 121, 78, 44, 95, 122, 78, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 116, 114, 97, 99, 116, 32, 78, 43, 49, 32, 112, > 97, 116, 99, 104, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 99, 101, 110, > 116, 101, 114, 101, 100, 32, 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 112, 97, 116, 99, 104, 101, 115, 32, 54, 52, 44, > 54, 52, 44, 49, 44, 49, 53, 51, 44, 49, 50, 52, 44, 48, 44, 49, > 56, 52, 44, 50, 52, 48, 44, 48, 44, 50, 49, 55, 44, 49, 50, 54, > 44, 48, 44, 50, 55, 53, 44, 51, 56, 44, 48, 10, 112, 97, 116, 99, > 104, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, > 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, > 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 50, 41, 32, 38, 38, 32, > 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 51, > 41, 32, 38, 38, 32, 36, 51, 62, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 69, 120, 116, 114, 97, 99, 116, 32, 36, 49, 120, 36, > 50, 120, 36, 51, 32, 112, 97, 116, 99, 104, 101, 115, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 97, 116, 32, 108, 111, > 99, 97, 116, 105, 111, 110, 115, 32, 40, 36, 123, 52, 45, 45, 49, 125, > 41, 46, 34, 10, 45, 118, 32, 45, 10, 40, 36, 123, 52, 45, 45, 49, > 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 119, 47, 51, > 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, > 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 32, 78, 61, 123, 119, 125, > 10, 72, 61, 123, 105, 110, 116, 40, 115, 113, 114, 116, 40, 119, 41, 41, > 125, 32, 87, 61, 123, 114, 111, 117, 110, 100, 40, 119, 47, 36, 72, 44, > 49, 44, 49, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 36, 87, > 42, 36, 72, 125, 44, 49, 44, 49, 44, 51, 44, 48, 32, 45, 114, 91, > 45, 49, 93, 32, 36, 87, 44, 36, 72, 44, 49, 44, 51, 44, 45, 49, > 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 36, 49, 125, 44, 123, > 104, 42, 36, 50, 125, 44, 123, 100, 42, 36, 51, 125, 10, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 49, 44, 120, 45, 123, 105, 110, 116, 40, 36, > 49, 47, 50, 41, 125, 32, 45, 45, 102, 91, 45, 49, 93, 32, 121, 45, > 123, 105, 110, 116, 40, 36, 50, 47, 50, 41, 125, 32, 45, 45, 102, 91, > 45, 49, 93, 32, 122, 45, 123, 105, 110, 116, 40, 36, 51, 47, 50, 41, > 125, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 64, 35, 45, 49, 125, 32, 45, 119, 97, 114, 112, 91, 36, 62, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 32, 45, 115, 32, 121, > 44, 36, 72, 32, 45, 115, 32, 120, 44, 36, 87, 32, 45, 107, 91, 48, > 45, 123, 36, 78, 45, 49, 125, 93, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 108, 111, 116, 50, 118, 97, 108, 117, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 114, 105, 101, 118, 101, 32, 118, 97, > 108, 117, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 50, 100, 32, 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, > 48, 44, 51, 48, 48, 44, 49, 44, 49, 44, 39, 105, 102, 40, 121, 62, > 51, 48, 48, 42, 97, 98, 115, 40, 99, 111, 115, 40, 120, 47, 49, 48, > 43, 50, 42, 63, 41, 41, 44, 49, 44, 48, 41, 39, 32, 45, 45, 112, > 108, 111, 116, 50, 118, 97, 108, 117, 101, 32, 45, 45, 100, 105, 115, 112, > 108, 97, 121, 95, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 52, 48, > 48, 44, 51, 48, 48, 10, 112, 108, 111, 116, 50, 118, 97, 108, 117, 101, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 116, 114, > 105, 101, 118, 101, 32, 118, 97, 108, 117, 101, 115, 32, 102, 114, 111, 109, > 32, 50, 100, 32, 103, 114, 97, 112, 104, 32, 112, 108, 111, 116, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 115, 32, 99, 32, 45, > 103, 101, 32, 53, 48, 37, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 40, 49, 44, 123, 119, 125, 41, > 32, 45, 114, 91, 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 42, 32, > 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 123, 119, 125, 44, 49, > 44, 123, 119, 125, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, > 105, 110, 116, 99, 108, 111, 117, 100, 32, 58, 32, 95, 116, 121, 112, 101, > 32, 61, 32, 123, 32, 45, 88, 61, 45, 88, 45, 111, 112, 97, 99, 105, > 116, 121, 32, 124, 32, 48, 61, 98, 105, 110, 97, 114, 121, 32, 124, 32, > 49, 61, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 32, 124, 32, 50, > 61, 108, 97, 98, 101, 108, 32, 125, 44, 95, 119, 105, 100, 116, 104, 44, > 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 100, 101, 112, 116, 104, > 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 97, 32, 78, 120, 49, 44, 32, 78, 120, 50, 44, 32, > 78, 120, 51, 32, 111, 114, 32, 78, 120, 77, 32, 105, 109, 97, 103, 101, > 32, 97, 115, 32, 97, 32, 112, 111, 105, 110, 116, 32, 99, 108, 111, 117, > 100, 32, 105, 110, 32, 97, 32, 49, 100, 47, 50, 100, 32, 111, 114, 32, > 51, 100, 32, 98, 105, 110, 97, 114, 121, 32, 105, 109, 97, 103, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 77, 39, > 62, 51, 44, 32, 116, 104, 101, 32, 51, 45, 116, 111, 45, 77, 32, 108, > 105, 110, 101, 115, 32, 115, 101, 116, 115, 32, 116, 104, 101, 32, 40, 77, > 45, 51, 41, 45, 100, 105, 109, 101, 110, 115, 105, 111, 110, 97, 108, 32, > 99, 111, 108, 111, 114, 32, 97, 116, 32, 101, 97, 99, 104, 32, 112, 111, > 105, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 97, > 114, 97, 109, 101, 116, 101, 114, 115, 32, 39, 119, 105, 100, 116, 104, 39, > 44, 39, 104, 101, 105, 103, 104, 116, 39, 32, 97, 110, 100, 32, 39, 100, > 101, 112, 116, 104, 39, 32, 97, 114, 101, 32, 114, 101, 108, 97, 116, 101, > 100, 32, 116, 111, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 110, 97, 108, 32, 105, 109, 97, 103, 101, > 32, 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 32, 32, 45, 32, > 73, 102, 32, 115, 101, 116, 32, 116, 111, 32, 48, 44, 32, 116, 104, 101, > 32, 115, 105, 122, 101, 32, 105, 115, 32, 97, 117, 116, 111, 109, 97, 116, > 105, 99, 97, 108, 108, 121, 32, 115, 101, 116, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, > 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 32, 32, > 45, 32, 73, 102, 32, 115, 101, 116, 32, 116, 111, 32, 78, 62, 48, 44, > 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 97, 108, 111, 110, 103, 32, > 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 120, > 105, 115, 32, 105, 115, 32, 78, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 32, 32, 45, 32, 73, 102, 32, 115, 101, 116, 32, 116, 111, 32, > 78, 60, 48, 44, 32, 116, 104, 101, 32, 115, 105, 122, 101, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 97, 120, 105, 115, 32, 105, 115, 32, 97, 116, 32, 109, 111, 115, > 116, 32, 78, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 111, > 105, 110, 116, 115, 32, 119, 105, 116, 104, 32, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 115, 32, 116, 104, 97, 116, 32, 97, 114, 101, 32, 110, > 101, 103, 97, 116, 105, 118, 101, 32, 111, 114, 32, 104, 105, 103, 104, 101, > 114, 32, 116, 104, 97, 110, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 40, 39, 119, 105, 100, 116, 104, 39, 44, 39, 104, 101, 105, 103, 104, > 116, 39, 44, 39, 100, 101, 112, 116, 104, 39, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 97, 114, 101, 32, 110, 111, 116, 32, 112, 108, 111, > 116, 116, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 116, 121, 112, 101, 61, 48, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, > 95, 119, 105, 100, 116, 104, 61, 109, 97, 120, 95, 104, 101, 105, 103, 104, > 116, 61, 109, 97, 120, 95, 100, 101, 112, 116, 104, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 51, 48, 48, 48, 44, > 50, 32, 45, 114, 97, 110, 100, 32, 48, 44, 52, 48, 48, 32, 45, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 48, 32, 45, 100, 105, > 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 51, 48, 48, 48, 44, 50, 32, 45, 114, 97, > 110, 100, 32, 48, 44, 52, 48, 48, 32, 123, 119, 125, 32, 123, 119, 125, > 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, 121, 32, 45, 45, 112, > 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 48, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 49, 61, 48, 125, 60, 51, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 112, 111, 105, 110, 116, 32, 99, 108, 111, 117, 100, 115, 44, 32, 105, 110, > 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 50, 43, 40, 36, 49, 62, > 61, 48, 41, 42, 36, 49, 45, 40, 36, 49, 60, 48, 41, 44, 123, 45, > 36, 49, 125, 45, 111, 112, 97, 99, 105, 116, 121, 44, 98, 105, 110, 97, > 114, 121, 44, 99, 117, 109, 117, 108, 97, 116, 105, 118, 101, 44, 108, 97, > 98, 101, 108, 105, 110, 103, 125, 34, 32, 109, 111, 100, 101, 44, 34, 92, > 10, 34, 119, 105, 116, 104, 32, 40, 36, 50, 44, 36, 51, 44, 36, 52, > 41, 32, 97, 115, 32, 109, 97, 120, 105, 109, 97, 108, 32, 100, 105, 109, > 101, 110, 115, 105, 111, 110, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 105, 102, 32, 123, > 34, 100, 62, 49, 32, 124, 124, 32, 115, 62, 49, 34, 125, 32, 45, 101, > 114, 114, 111, 114, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 39, 58, 32, 73, 110, 118, > 97, 108, 105, 100, 32, 105, 110, 112, 117, 116, 32, 105, 109, 97, 103, 101, > 32, 34, 123, 119, 125, 120, 123, 104, 125, 120, 123, 100, 125, 120, 123, 115, > 125, 34, 46, 32, 83, 104, 111, 117, 108, 100, 32, 98, 101, 32, 78, 120, > 77, 120, 49, 120, 49, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 111, 119, 115, 32, 48, 44, 123, 109, 97, 120, 40, 50, 44, 104, 45, > 49, 41, 125, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 100, > 120, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 36, 50, 61, 61, > 48, 44, 105, 77, 43, 49, 44, 105, 102, 40, 36, 50, 60, 48, 44, 109, > 105, 110, 40, 105, 77, 43, 49, 44, 45, 36, 50, 41, 44, 36, 50, 41, > 41, 41, 125, 10, 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 49, 44, > 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 100, > 121, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 36, 51, 61, 61, > 48, 44, 105, 77, 43, 49, 44, 105, 102, 40, 36, 51, 60, 48, 44, 109, > 105, 110, 40, 105, 77, 43, 49, 44, 45, 36, 51, 41, 44, 36, 51, 41, > 41, 41, 125, 10, 45, 115, 104, 91, 45, 51, 93, 32, 50, 44, 50, 44, > 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 100, > 122, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 36, 52, 61, 61, > 48, 44, 105, 77, 43, 49, 44, 105, 102, 40, 36, 52, 60, 48, 44, 109, > 105, 110, 40, 105, 77, 43, 49, 44, 45, 36, 52, 41, 44, 36, 52, 41, > 41, 41, 125, 10, 45, 42, 91, 45, 49, 93, 32, 36, 100, 121, 32, 45, > 43, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 102, 91, 45, 49, > 93, 32, 48, 32, 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, 45, > 115, 32, 120, 44, 45, 49, 48, 48, 48, 48, 48, 48, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, > 98, 112, 61, 123, 119, 125, 10, 45, 105, 102, 32, 123, 104, 62, 51, 125, > 32, 45, 45, 114, 111, 119, 115, 32, 51, 44, 49, 48, 48, 37, 32, 45, > 114, 111, 119, 115, 91, 45, 50, 93, 32, 48, 44, 50, 32, 45, 101, 108, > 115, 101, 32, 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 44, 49, 32, > 45, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 102, 91, 45, > 49, 93, 32, 49, 43, 120, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, > 110, 100, 105, 102, 10, 115, 112, 101, 99, 116, 114, 117, 109, 61, 123, 104, > 125, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 49, > 59, 49, 59, 123, 104, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, 123, > 119, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, > 105, 91, 45, 51, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, > 125, 41, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 105, 91, 45, 51, 93, 32, 40, 36, 110, 98, > 112, 59, 36, 110, 98, 112, 41, 10, 45, 105, 91, 45, 50, 93, 32, 49, > 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 49, 32, 45, 105, 91, 45, > 50, 93, 32, 49, 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 121, 32, > 45, 97, 91, 45, 51, 44, 45, 50, 93, 32, 120, 10, 49, 44, 36, 110, > 98, 112, 44, 49, 44, 49, 44, 123, 105, 102, 40, 36, 49, 60, 48, 44, > 45, 36, 49, 44, 105, 102, 40, 36, 49, 61, 61, 49, 44, 45, 49, 44, > 49, 41, 41, 125, 10, 45, 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, > 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 43, 51, 100, 10, 36, 100, 120, 44, 123, 36, 100, 121, 42, 36, 100, > 122, 125, 44, 49, 44, 36, 115, 112, 101, 99, 116, 114, 117, 109, 32, 45, > 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 114, 91, 45, 49, 93, 32, 36, > 100, 120, 44, 36, 100, 121, 44, 36, 100, 122, 44, 49, 48, 48, 37, 44, > 45, 49, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 112, 115, 110, 114, 32, 58, 32, 95, 109, 97, 120, > 95, 118, 97, 108, 117, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 80, 83, > 78, 82, 32, 40, 80, 101, 97, 107, 32, 83, 105, 103, 110, 97, 108, 45, > 116, 111, 45, 78, 111, 105, 115, 101, 32, 82, 97, 116, 105, 111, 41, 32, > 109, 97, 116, 114, 105, 120, 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 109, 97, 120, 95, 118, 97, 108, > 117, 101, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 110, 111, 105, 115, 101, 32, 51, 48, 32, 45, 45, 110, 111, 105, 115, 101, > 91, 48, 93, 32, 51, 53, 32, 45, 45, 110, 111, 105, 115, 101, 91, 48, > 93, 32, 51, 56, 32, 45, 99, 117, 116, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 112, 115, 110, 114, 32, 50, 53, 53, 32, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 105, 110, 102, 32, 48, 10, 112, 115, 110, > 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 50, 53, > 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, > 117, 116, 101, 32, 116, 104, 101, 32, 34, 64, 35, 120, 64, 35, 34, 32, > 109, 97, 116, 114, 105, 120, 32, 111, 102, 32, 80, 83, 78, 82, 32, 118, > 97, 108, 117, 101, 115, 44, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 119, 105, 116, 104, 32, 109, 97, 120, 105, 109, 117, 109, > 32, 118, 97, 108, 117, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 109, 115, 101, 32, 45, 108, 111, 103, 49, 48, 32, 45, 45, 32, > 123, 108, 111, 103, 49, 48, 40, 36, 49, 42, 36, 49, 41, 125, 32, 45, > 42, 32, 45, 49, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 80, > 83, 78, 82, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 32, 58, 32, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, > 61, 48, 44, 95, 102, 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 119, 97, 116, 101, 114, 115, 104, 101, > 100, 32, 115, 101, 103, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 61, 50, 39, 32, 97, 110, 100, 32, 39, 102, > 105, 108, 108, 95, 108, 105, 110, 101, 115, 61, 49, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, > 101, 114, 115, 104, 101, 100, 32, 50, 44, 48, 10, 115, 101, 103, 109, 101, > 110, 116, 95, 119, 97, 116, 101, 114, 115, 104, 101, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 119, 97, > 116, 101, 114, 115, 104, 101, 100, 32, 115, 101, 103, 109, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 101, 100, 103, 101, 32, 116, 104, 114, 101, 115, > 104, 111, 108, 100, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 43, 32, 123, 49, 43, 64, 123, 45, 49, 44, 109, 125, 125, 32, > 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 10, > 45, 105, 102, 32, 123, 100, 62, 49, 125, 32, 45, 45, 102, 91, 45, 49, > 93, 32, 34, 105, 102, 40, 105, 60, 36, 49, 32, 38, 38, 32, 105, 60, > 106, 40, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 45, 49, 41, 32, > 38, 38, 32, 105, 60, 106, 40, 48, 44, 49, 41, 32, 38, 38, 32, 105, > 60, 106, 40, 48, 44, 45, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, > 48, 44, 48, 44, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 48, 44, > 48, 44, 45, 49, 41, 44, 49, 44, 48, 41, 34, 10, 45, 101, 108, 115, > 101, 32, 45, 45, 102, 91, 45, 49, 93, 32, 34, 105, 102, 40, 105, 60, > 36, 49, 32, 38, 38, 32, 105, 60, 106, 40, 49, 41, 32, 38, 38, 32, > 105, 60, 106, 40, 45, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 48, > 44, 49, 41, 32, 38, 38, 32, 105, 60, 106, 40, 48, 44, 45, 49, 41, > 44, 49, 44, 48, 41, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, > 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 36, 50, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 107, 101, 108, 101, 116, 111, > 110, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, > 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 109, 112, 117, 116, 101, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, > 111, 102, 32, 98, 105, 110, 97, 114, 121, 32, 115, 104, 97, 112, 101, 115, > 32, 117, 115, 105, 110, 103, 32, 100, 105, 115, 116, 97, 110, 99, 101, 32, > 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 53, 48, 37, 32, 45, 45, 115, 107, 101, 108, 101, 116, 111, > 110, 32, 48, 10, 115, 107, 101, 108, 101, 116, 111, 110, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 48, 125, 62, 61, 48, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, 102, 32, 98, 105, 110, > 97, 114, 121, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 103, 101, 32, 53, 48, 37, 32, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 32, 48, 32, 45, 98, 32, 36, 49, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 32, 49, 101, 49, 48, 32, 45, 103, 101, 32, 49, > 48, 48, 37, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 45, 101, 114, 111, 100, 101, 91, 36, 62, 93, 32, 50, 32, 45, 45, 91, > 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 115, 100, 95, 112, 97, 116, > 99, 104, 32, 58, 32, 95, 117, 115, 101, 95, 102, 111, 117, 114, 105, 101, > 114, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 98, 111, 117, > 110, 100, 97, 114, 121, 95, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 102, 105, > 101, 108, 100, 32, 111, 102, 32, 83, 83, 68, 32, 98, 101, 116, 119, 101, > 101, 110, 32, 97, 110, 32, 105, 109, 97, 103, 101, 32, 97, 110, 100, 32, > 97, 32, 112, 97, 116, 99, 104, 44, 32, 116, 97, 107, 101, 110, 32, 97, > 115, 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 114, 103, 117, 109, 101, 110, 116, > 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 95, 99, 111, 110, 100, 105, > 116, 105, 111, 110, 115, 39, 32, 105, 115, 32, 118, 97, 108, 105, 100, 32, > 111, 110, 108, 121, 32, 119, 104, 101, 110, 32, 39, 117, 115, 101, 95, 102, > 111, 117, 114, 105, 101, 114, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 117, 115, 101, 95, 102, 111, 117, 114, 105, 101, 114, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 95, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 99, 114, 111, 112, 32, 50, 48, 37, 44, > 50, 48, 37, 44, 51, 53, 37, 44, 51, 53, 37, 32, 45, 45, 115, 115, > 100, 95, 112, 97, 116, 99, 104, 32, 48, 44, 48, 10, 115, 115, 100, 95, > 112, 97, 116, 99, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 48, 125, 44, 36, 123, 50, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 102, 105, 101, > 108, 100, 32, 111, 102, 32, 83, 83, 68, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 105, 109, 97, 103, 101, 115, 32, 97, 110, 100, 32, 112, 97, 116, > 99, 104, 115, 32, 117, 115, 105, 110, 103, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 49, 44, 102, 111, 117, 114, 105, 101, 114, > 44, 115, 112, 97, 116, 105, 97, 108, 125, 34, 32, 109, 111, 100, 101, 44, > 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, > 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, > 43, 49, 125, 93, 10, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 64, 123, 45, 109, 97, 120, 95, 115, 125, > 32, 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, > 35, 47, 50, 125, 32, 45, 108, 91, 36, 62, 44, 123, 45, 49, 45, 36, > 60, 125, 93, 10, 45, 45, 115, 113, 114, 91, 49, 93, 32, 118, 97, 108, > 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 45, 115, 113, 114, 91, 48, 93, 32, 45, 45, 102, 91, 49, 93, > 32, 49, 10, 45, 105, 102, 32, 36, 49, 10, 45, 99, 111, 110, 118, 111, > 108, 118, 101, 95, 102, 102, 116, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 109, 105, 114, 114, 111, 114, 91, 49, 93, 32, 120, 121, 122, 32, 45, 99, > 111, 110, 118, 111, 108, 118, 101, 95, 102, 102, 116, 91, 48, 44, 49, 93, > 10, 45, 101, 108, 115, 101, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, > 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 50, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, > 91, 48, 93, 32, 91, 49, 93, 44, 36, 50, 32, 45, 114, 109, 91, 49, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 42, 91, 48, 93, 32, 45, > 50, 32, 45, 43, 91, 48, 44, 49, 93, 32, 45, 43, 32, 36, 118, 97, > 108, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 43, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 104, 105, 110, 110, 105, 110, > 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, 102, 32, 98, > 105, 110, 97, 114, 121, 32, 115, 104, 97, 112, 101, 115, 32, 117, 115, 105, > 110, 103, 32, 109, 111, 114, 112, 104, 111, 108, 111, 103, 105, 99, 97, 108, > 32, 116, 104, 105, 110, 110, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 113, 117, > 105, 116, 101, 32, 115, 108, 111, 119, 32, 105, 116, 101, 114, 97, 116, 105, > 118, 101, 32, 112, 114, 111, 99, 101, 115, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, > 45, 116, 104, 105, 110, 110, 105, 110, 103, 10, 116, 104, 105, 110, 110, 105, > 110, 103, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 109, 112, 117, 116, 101, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, > 102, 32, 98, 105, 110, 97, 114, 121, 32, 105, 109, 97, 103, 101, 36, 63, > 44, 32, 117, 115, 105, 110, 103, 32, 109, 111, 114, 112, 104, 111, 108, 111, > 103, 105, 99, 97, 108, 32, 116, 104, 105, 110, 110, 105, 110, 103, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 103, 101, 32, 53, 48, 37, 32, 45, 42, > 32, 50, 32, 45, 45, 32, 49, 10, 40, 45, 49, 44, 45, 49, 44, 45, > 49, 59, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, 41, 32, 40, > 48, 44, 45, 49, 44, 45, 49, 59, 49, 44, 49, 44, 45, 49, 59, 48, > 44, 49, 44, 48, 41, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, > 50, 44, 45, 49, 93, 32, 57, 48, 32, 45, 45, 114, 111, 116, 97, 116, > 101, 91, 45, 50, 44, 45, 49, 93, 32, 57, 48, 32, 45, 45, 114, 111, > 116, 97, 116, 101, 91, 45, 50, 44, 45, 49, 93, 32, 57, 48, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 56, 125, 10, 98, 97, > 118, 103, 61, 64, 123, 45, 57, 44, 43, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 57, 57, 57, 57, 57, 10, 45, 45, 99, 111, 114, 114, 101, > 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 56, 93, 32, 45, 103, > 101, 91, 45, 49, 93, 32, 55, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, 99, 111, > 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 55, 93, > 32, 45, 103, 101, 91, 45, 49, 93, 32, 54, 32, 45, 42, 91, 45, 49, > 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, > 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, > 45, 54, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 55, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, > 93, 10, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, > 93, 32, 91, 45, 53, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 54, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, > 44, 45, 49, 93, 10, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, > 91, 45, 57, 93, 32, 91, 45, 52, 93, 32, 45, 103, 101, 91, 45, 49, > 93, 32, 55, 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 45, 91, > 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, 99, 111, 114, 114, 101, 108, > 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 51, 93, 32, 45, 103, 101, > 91, 45, 49, 93, 32, 54, 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, > 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, 99, 111, 114, > 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, 50, 93, 32, > 45, 103, 101, 91, 45, 49, 93, 32, 55, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, 10, 45, 45, > 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 45, 57, 93, 32, 91, 45, > 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 54, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 32, 45, 45, 91, 45, 49, 48, 44, 45, 49, 93, > 10, 97, 97, 118, 103, 61, 64, 123, 45, 57, 44, 43, 125, 32, 45, 105, > 102, 32, 123, 36, 97, 97, 118, 103, 61, 61, 36, 98, 97, 118, 103, 125, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 32, 98, > 97, 118, 103, 61, 36, 97, 97, 118, 103, 10, 45, 100, 111, 110, 101, 10, > 45, 109, 118, 91, 45, 57, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, > 45, 114, 109, 91, 45, 56, 45, 45, 49, 93, 32, 45, 43, 32, 49, 32, > 45, 47, 32, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 111, 110, 101, 115, 32, 58, 32, 78, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 71, 101, 116, 32, 78, 32, 116, 111, 110, 101, > 115, 32, 109, 97, 115, 107, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 116, 111, 110, 101, 115, 32, 51, 10, 116, 111, 110, > 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, 62, 48, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, 36, 49, > 32, 116, 111, 110, 101, 115, 32, 109, 97, 115, 107, 115, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 110, 111, 114, 109, 32, 45, 110, 32, 48, 44, 123, 36, 49, 45, > 49, 125, 32, 45, 114, 111, 117, 110, 100, 32, 49, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, 125, 32, 45, 45, 61, > 61, 91, 48, 93, 32, 123, 49, 43, 36, 62, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 61, 61, 91, 48, 93, 32, 48, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 116, 111, 112, 111, 103, 114, 97, 112, 104, 105, 99, 95, 109, > 97, 112, 32, 58, 32, 95, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, > 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, 101, 114, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, > 32, 116, 111, 112, 111, 103, 114, 97, 112, 104, 105, 99, 32, 109, 97, 112, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, > 108, 101, 118, 101, 108, 115, 61, 49, 54, 39, 32, 97, 110, 100, 32, 39, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 50, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 116, 111, 112, 111, 103, 114, 97, 112, 104, 105, > 99, 95, 109, 97, 112, 32, 49, 48, 10, 116, 111, 112, 111, 103, 114, 97, > 112, 104, 105, 99, 95, 109, 97, 112, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, 54, 125, > 41, 32, 38, 38, 32, 36, 49, 62, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 82, 101, 110, 100, 101, 114, 32, 116, 111, 112, 111, 103, 114, 97, 112, > 104, 105, 99, 32, 109, 97, 112, 115, 32, 102, 114, 111, 109, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 108, > 101, 118, 101, 108, 115, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 45, 98, 32, 36, 50, 32, 45, 105, 115, 111, 112, 104, 111, 116, > 101, 115, 91, 45, 49, 93, 32, 36, 49, 32, 45, 99, 111, 109, 112, 111, > 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, > 43, 32, 45, 61, 61, 91, 45, 49, 93, 32, 48, 32, 45, 98, 108, 101, > 110, 100, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 118, 97, 114, 105, 97, 110, 99, > 101, 95, 112, 97, 116, 99, 104, 32, 58, 32, 95, 112, 97, 116, 99, 104, > 95, 115, 105, 122, 101, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 118, 97, 114, 105, 97, 110, > 99, 101, 32, 111, 102, 32, 101, 97, 99, 104, 32, 105, 109, 97, 103, 101, > 115, 32, 112, 97, 116, 99, 104, 32, 99, 101, 110, 116, 101, 114, 101, 100, > 32, 97, 116, 32, 40, 120, 44, 121, 41, 44, 32, 105, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 112, 97, 116, 99, 104, 95, 115, 105, > 122, 101, 61, 49, 54, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 118, 97, > 114, 105, 97, 110, 99, 101, 95, 112, 97, 116, 99, 104, 10, 118, 97, 114, > 105, 97, 110, 99, 101, 95, 112, 97, 116, 99, 104, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 49, 54, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 49, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, > 118, 97, 114, 105, 97, 110, 99, 101, 32, 111, 102, 32, 105, 109, 97, 103, > 101, 32, 112, 97, 116, 99, 104, 101, 115, 32, 105, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 112, 97, 116, 99, 104, > 32, 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 10, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 49, 32, 45, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, > 91, 36, 62, 44, 45, 49, 93, 10, 45, 45, 115, 113, 114, 91, 48, 93, > 32, 45, 99, 111, 110, 118, 111, 108, 118, 101, 91, 48, 44, 50, 93, 32, > 91, 49, 93, 10, 45, 115, 113, 114, 91, 48, 93, 32, 45, 114, 118, 91, > 48, 44, 50, 93, 32, 45, 45, 91, 48, 44, 50, 93, 32, 45, 109, 97, > 120, 91, 48, 93, 32, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 73, 109, 97, 103, 101, 32, > 100, 114, 97, 119, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 120, 101, 115, 32, 58, 32, 120, 48, 44, 120, 49, 44, 121, 48, 44, 121, > 49, 44, 95, 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 62, 61, > 48, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, > 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 120, 121, 45, 97, 120, 101, 115, 32, 111, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, > 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, > 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, > 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, > 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, > 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, > 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 84, 111, 32, 100, 114, 97, 119, 32, 111, 110, 108, 121, 32, > 111, 110, 101, 32, 120, 45, 97, 120, 105, 115, 32, 97, 116, 32, 114, 111, > 119, 32, 89, 44, 32, 115, 101, 116, 32, 98, 111, 116, 104, 32, 39, 121, > 48, 39, 32, 97, 110, 100, 32, 39, 121, 49, 39, 32, 116, 111, 32, 89, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 111, 32, 100, 114, > 97, 119, 32, 111, 110, 108, 121, 32, 111, 110, 101, 32, 121, 45, 97, 120, > 105, 115, 32, 97, 116, 32, 99, 111, 108, 117, 109, 110, 32, 88, 44, 32, > 115, 101, 116, 32, 98, 111, 116, 104, 32, 39, 120, 48, 39, 32, 97, 110, > 100, 32, 39, 120, 49, 39, 32, 116, 111, 32, 88, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 102, 111, 110, 116, 95, 104, 101, 105, 103, > 104, 116, 61, 49, 51, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 97, 120, 101, 115, 32, 45, 49, 44, 49, > 44, 49, 44, 45, 49, 10, 35, 64, 103, 109, 105, 99, 32, 98, 97, 108, > 108, 32, 58, 32, 95, 115, 105, 122, 101, 62, 48, 44, 32, 95, 82, 44, > 95, 71, 44, 95, 66, 44, 48, 60, 61, 95, 115, 112, 101, 99, 117, 108, > 97, 114, 95, 108, 105, 103, 104, 116, 60, 61, 56, 44, 48, 60, 61, 95, > 115, 112, 101, 99, 117, 108, 97, 114, 95, 115, 105, 122, 101, 60, 61, 56, > 44, 95, 115, 104, 97, 100, 111, 119, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 97, 32, 50, 100, 32, > 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 101, 100, 32, 98, 97, 108, > 108, 32, 115, 112, 114, 105, 116, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 115, 105, 122, 101, 61, 54, 52, 39, 44, 32, 39, 82, > 61, 50, 53, 53, 39, 44, 32, 39, 71, 61, 82, 39, 44, 32, 39, 66, > 61, 82, 39, 44, 32, 39, 115, 112, 101, 99, 117, 108, 97, 114, 95, 108, > 105, 103, 104, 116, 61, 48, 46, 56, 39, 44, 32, 39, 115, 112, 101, 99, > 117, 108, 97, 114, 95, 115, 105, 122, 101, 61, 49, 39, 32, 97, 110, 100, > 32, 39, 115, 104, 97, 100, 105, 110, 103, 61, 49, 46, 53, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 57, 32, 45, 98, 97, 108, 108, 32, 123, 49, 46, 53, 94, > 40, 36, 62, 43, 50, 41, 125, 44, 64, 123, 45, 82, 71, 66, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, 100, 32, 120, 10, > 98, 97, 108, 108, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 49, 61, 54, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, > 48, 46, 56, 125, 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 56, > 32, 38, 38, 32, 36, 123, 54, 61, 49, 125, 62, 61, 48, 32, 36, 54, > 60, 61, 56, 32, 38, 38, 32, 36, 123, 55, 61, 49, 46, 53, 125, 62, > 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 53, > 53, 125, 44, 36, 123, 51, 61, 36, 50, 125, 44, 36, 123, 52, 61, 36, > 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 36, 49, 120, 36, 49, 32, 98, 97, 108, 108, 32, 119, 105, 116, > 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, 52, 125, 41, > 44, 32, 115, 112, 101, 99, 117, 108, 97, 114, 32, 108, 105, 103, 104, 116, > 32, 36, 53, 44, 32, 115, 112, 101, 99, 117, 108, 97, 114, 32, 115, 105, > 122, 101, 32, 36, 54, 32, 97, 110, 100, 32, 115, 104, 97, 100, 111, 119, > 32, 102, 97, 99, 116, 111, 114, 32, 36, 55, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 108, 91, 93, 10, 123, 50, 42, 36, 49, 125, 44, 123, 50, > 42, 36, 49, 125, 32, 45, 61, 32, 49, 44, 54, 53, 37, 44, 51, 48, > 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 49, 32, 45, 42, > 32, 45, 49, 10, 45, 45, 110, 32, 48, 44, 49, 32, 45, 94, 91, 49, > 93, 32, 36, 55, 32, 45, 42, 91, 49, 93, 32, 49, 46, 52, 32, 45, > 45, 42, 91, 49, 93, 32, 36, 51, 32, 45, 45, 42, 91, 49, 93, 32, > 36, 52, 32, 45, 42, 91, 49, 93, 32, 36, 50, 32, 45, 97, 91, 94, > 48, 93, 32, 99, 10, 45, 103, 101, 91, 48, 93, 32, 123, 49, 48, 48, > 45, 49, 48, 42, 36, 54, 125, 37, 32, 45, 98, 91, 48, 93, 32, 123, > 51, 42, 36, 54, 125, 37, 32, 45, 110, 91, 48, 93, 32, 48, 44, 123, > 36, 53, 42, 50, 53, 53, 125, 32, 45, 114, 118, 32, 45, 43, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 32, 45, 99, 105, 114, 99, 108, 101, 91, 49, 93, 32, 53, 48, 37, > 44, 53, 48, 37, 44, 51, 52, 37, 44, 49, 44, 49, 32, 45, 42, 91, > 48, 93, 32, 91, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, > 53, 32, 45, 97, 32, 99, 10, 45, 114, 32, 36, 49, 44, 36, 49, 44, > 49, 44, 52, 44, 50, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 104, 101, 115, 115, 98, 111, 97, > 114, 100, 32, 58, 32, 115, 105, 122, 101, 49, 62, 48, 44, 95, 115, 105, > 122, 101, 50, 62, 48, 44, 95, 111, 102, 102, 115, 101, 116, 49, 44, 95, > 111, 102, 102, 115, 101, 116, 50, 44, 95, 97, 110, 103, 108, 101, 44, 95, > 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, 111, 108, 111, 114, 49, 44, > 46, 46, 44, 95, 99, 111, 108, 111, 114, 50, 44, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 99, 104, 101, 115, > 115, 98, 111, 97, 114, 100, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 115, 105, 122, 101, 50, 61, 115, 105, 122, 101, 49, > 39, 44, 32, 39, 111, 102, 102, 115, 101, 116, 49, 61, 111, 102, 102, 115, > 101, 116, 50, 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, > 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 44, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 50, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 99, 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 51, 50, > 44, 51, 50, 44, 48, 44, 48, 44, 50, 53, 44, 48, 46, 51, 44, 50, > 53, 53, 44, 49, 50, 56, 44, 48, 44, 48, 44, 49, 50, 56, 44, 50, > 53, 53, 10, 99, 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 36, 49, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, > 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 49, 125, 44, 36, 123, 55, > 61, 48, 125, 44, 36, 123, 56, 61, 50, 53, 53, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 99, 104, 101, 115, 115, > 98, 111, 97, 114, 100, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 44, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, > 44, 36, 50, 41, 44, 32, 111, 102, 102, 115, 101, 116, 115, 32, 40, 36, > 51, 44, 36, 52, 41, 44, 32, 97, 110, 103, 108, 101, 32, 36, 53, 32, > 100, 101, 103, 46, 44, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 54, > 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 115, 32, 40, 36, 123, 55, > 45, 45, 49, 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 105, 91, > 48, 93, 32, 40, 36, 123, 55, 45, 45, 49, 125, 41, 32, 45, 114, 91, > 48, 93, 32, 123, 64, 123, 48, 44, 119, 125, 47, 50, 125, 44, 49, 44, > 49, 44, 50, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, > 48, 93, 32, 99, 121, 122, 120, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 64, 35, 45, 49, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 32, 116, 104, 101, 116, 97, 61, 123, 36, 53, 42, 112, 105, 47, > 49, 56, 48, 125, 10, 40, 36, 51, 44, 123, 36, 51, 43, 36, 119, 45, > 49, 125, 59, 36, 51, 44, 123, 36, 51, 43, 36, 119, 45, 49, 125, 94, > 36, 52, 44, 36, 52, 59, 123, 36, 52, 43, 36, 104, 45, 49, 125, 44, > 123, 36, 52, 43, 36, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 50, 44, 51, 10, 45, 114, > 91, 45, 49, 93, 32, 123, 36, 119, 42, 36, 104, 125, 44, 50, 44, 49, > 44, 49, 44, 45, 49, 10, 45, 105, 91, 45, 50, 93, 32, 40, 123, 99, > 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 44, 123, 45, 115, 105, > 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 59, 123, 115, 105, 110, 40, > 36, 116, 104, 101, 116, 97, 41, 125, 44, 123, 99, 111, 115, 40, 36, 116, > 104, 101, 116, 97, 41, 125, 41, 32, 45, 42, 42, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, 36, 104, 44, > 49, 44, 50, 44, 45, 49, 10, 45, 37, 91, 45, 49, 93, 32, 123, 36, > 49, 43, 36, 50, 125, 32, 45, 62, 61, 91, 45, 49, 93, 32, 36, 49, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 120, 111, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, > 48, 93, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 91, 45, 50, 93, 10, 45, 106, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, > 54, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 105, 101, > 49, 57, 51, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 67, 73, 69, 45, 49, 57, 51, 49, 32, 99, 104, 114, 111, > 109, 97, 116, 105, 99, 105, 116, 121, 32, 100, 105, 97, 103, 114, 97, 109, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 53, 48, 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, 99, 105, 101, > 49, 57, 51, 49, 10, 99, 105, 101, 49, 57, 51, 49, 32, 58, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 67, 73, 69, > 45, 49, 57, 51, 49, 32, 99, 104, 114, 111, 109, 97, 116, 105, 99, 105, > 116, 121, 32, 100, 105, 97, 103, 114, 97, 109, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 10, 40, 54, 55, > 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, > 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 51, > 55, 59, 51, 54, 41, 10, 40, 50, 56, 48, 44, 52, 50, 48, 44, 48, > 59, 49, 55, 49, 44, 56, 50, 57, 44, 48, 59, 49, 53, 56, 44, 56, > 50, 48, 44, 48, 59, 49, 53, 51, 44, 56, 49, 54, 44, 48, 59, 49, > 52, 55, 44, 56, 49, 49, 44, 48, 59, 49, 52, 48, 44, 56, 48, 52, > 44, 48, 59, 49, 51, 50, 44, 55, 57, 52, 44, 48, 59, 49, 50, 49, > 44, 55, 55, 54, 44, 48, 59, 49, 48, 54, 44, 55, 52, 55, 44, 48, > 59, 56, 56, 44, 55, 48, 49, 44, 48, 59, 92, 10, 54, 53, 44, 54, > 51, 51, 44, 48, 59, 52, 50, 44, 53, 51, 57, 44, 48, 59, 50, 48, > 44, 52, 50, 49, 44, 48, 59, 53, 44, 50, 57, 53, 44, 48, 59, 48, > 44, 49, 55, 57, 44, 48, 59, 52, 44, 49, 49, 53, 44, 48, 59, 49, > 48, 44, 56, 51, 44, 48, 59, 49, 54, 44, 54, 49, 44, 48, 59, 50, > 53, 44, 51, 56, 44, 48, 59, 51, 53, 44, 50, 49, 44, 48, 59, 52, > 55, 44, 49, 48, 44, 48, 59, 53, 56, 44, 51, 44, 48, 59, 92, 10, > 55, 49, 44, 48, 44, 48, 59, 57, 50, 44, 49, 44, 48, 59, 49, 49, > 49, 44, 55, 44, 48, 59, 49, 53, 49, 44, 50, 56, 44, 48, 59, 49, > 56, 57, 44, 53, 50, 44, 48, 59, 50, 50, 54, 44, 55, 57, 44, 48, > 59, 50, 54, 50, 44, 49, 48, 57, 44, 48, 59, 50, 57, 56, 44, 49, > 52, 49, 44, 48, 59, 51, 51, 52, 44, 49, 55, 53, 44, 48, 59, 51, > 55, 48, 44, 50, 48, 57, 44, 48, 59, 52, 48, 53, 44, 50, 52, 52, > 44, 48, 59, 92, 10, 52, 52, 49, 44, 50, 55, 57, 44, 48, 59, 52, > 55, 53, 44, 51, 49, 51, 44, 48, 59, 53, 48, 57, 44, 51, 52, 55, > 44, 48, 59, 55, 51, 49, 44, 53, 54, 56, 44, 48, 41, 10, 120, 77, > 61, 55, 51, 49, 32, 121, 77, 61, 56, 50, 57, 10, 50, 44, 123, 104, > 45, 49, 125, 44, 49, 44, 49, 44, 51, 44, 48, 32, 49, 44, 123, 104, > 125, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, 43, 91, 45, 49, > 93, 32, 49, 32, 45, 37, 91, 45, 49, 93, 32, 123, 104, 125, 32, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 49, 54, 48, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, > 10, 45, 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, 97, 91, 45, 53, > 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 10, 120, 82, 61, 54, 51, 54, 32, 121, 82, 61, 53, 48, 52, 32, 120, > 71, 61, 50, 57, 55, 32, 121, 71, 61, 50, 51, 52, 32, 120, 66, 61, > 49, 52, 55, 32, 121, 66, 61, 55, 55, 52, 10, 53, 49, 50, 44, 53, > 49, 50, 44, 49, 44, 51, 32, 45, 116, 114, 105, 97, 110, 103, 108, 101, > 95, 115, 104, 97, 100, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 123, > 119, 45, 49, 125, 44, 48, 44, 48, 44, 123, 104, 45, 49, 125, 44, 34, > 34, 50, 53, 53, 44, 48, 44, 48, 44, 34, 34, 48, 44, 50, 53, 53, > 44, 48, 44, 34, 34, 48, 44, 48, 44, 50, 53, 53, 32, 45, 114, 103, > 98, 50, 115, 114, 103, 98, 91, 45, 49, 93, 10, 45, 45, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 109, 97, 120, 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, > 56, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 50, 53, 53, 10, 45, 105, 91, 45, 50, 93, 32, 40, 54, > 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, > 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, > 51, 59, 49, 59, 36, 120, 82, 59, 36, 121, 82, 59, 45, 48, 46, 48, > 49, 59, 36, 120, 71, 59, 36, 121, 71, 59, 45, 48, 46, 48, 49, 59, > 36, 120, 66, 59, 36, 121, 66, 59, 45, 48, 46, 48, 49, 59, 57, 59, > 48, 59, 49, 59, 50, 59, 48, 59, 48, 59, 53, 49, 49, 59, 48, 59, > 48, 59, 53, 49, 49, 59, 45, 49, 50, 56, 59, 53, 49, 50, 59, 53, > 49, 50, 59, 51, 41, 10, 45, 121, 91, 45, 49, 93, 32, 40, 49, 41, > 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 50, 125, 10, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 102, 99, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 53, > 53, 44, 50, 53, 53, 32, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, > 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, > 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 49, 44, 48, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 45, 42, > 51, 100, 91, 48, 44, 49, 93, 32, 123, 40, 119, 45, 56, 41, 47, 36, > 120, 77, 125, 44, 123, 40, 104, 45, 51, 50, 41, 47, 36, 121, 77, 125, > 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, > 45, 49, 93, 44, 50, 44, 51, 48, 44, 48, 44, 49, 44, 50, 10, 45, > 45, 110, 101, 113, 91, 45, 51, 93, 32, 48, 32, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, > 93, 32, 45, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, > 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 47, 91, 45, 51, 93, 32, 49, 46, 53, 10, 45, 111, 98, 106, > 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 50, > 44, 51, 48, 44, 48, 44, 49, 44, 50, 10, 45, 112, 51, 100, 91, 45, > 49, 93, 32, 49, 32, 45, 112, 51, 100, 91, 45, 49, 93, 32, 50, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, > 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, > 93, 44, 50, 44, 51, 48, 44, 48, 44, 49, 44, 49, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 64, 123, 45, 50, 44, 119, 125, 44, 64, 123, 45, > 50, 44, 104, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 50, 44, 51, 48, 44, 48, 44, 49, > 44, 50, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 45, 101, 114, 111, > 100, 101, 91, 45, 49, 93, 32, 52, 32, 45, 45, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 32, 45, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, > 42, 91, 45, 51, 44, 45, 49, 93, 10, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 99, 32, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, > 49, 93, 32, 97, 108, 112, 104, 97, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 97, 120, 101, 115, > 91, 45, 49, 93, 32, 48, 44, 48, 46, 55, 53, 44, 48, 46, 56, 53, > 44, 48, 44, 49, 51, 44, 49, 32, 45, 45, 101, 114, 111, 100, 101, 91, > 45, 49, 93, 32, 51, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, > 45, 49, 93, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 50, 93, 10, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 52, 48, 48, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 50, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 44, > 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, > 105, 114, 99, 108, 101, 32, 58, 32, 120, 91, 37, 93, 44, 121, 91, 37, > 93, 44, 82, 91, 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, > 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, > 44, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, > 119, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, > 114, 101, 100, 32, 99, 105, 114, 99, 108, 101, 32, 111, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 32, 114, 97, 100, 105, 117, 115, > 32, 111, 102, 32, 39, 49, 48, 48, 37, 39, 32, 115, 116, 97, 110, 100, > 115, 32, 102, 111, 114, 32, 39, 115, 113, 114, 116, 40, 119, 105, 100, 116, > 104, 94, 50, 43, 104, 101, 105, 103, 104, 116, 94, 50, 41, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, > 110, 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, > 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, > 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, > 116, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, > 110, 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 46, 32, 73, 102, 32, 97, 32, > 112, 97, 116, 116, 101, 114, 110, 32, 105, 115, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 44, 32, 116, 104, 101, 32, 99, 105, 114, 99, 108, 101, > 32, 105, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 114, 97, > 119, 110, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 105, 110, 115, 116, > 101, 97, 100, 32, 111, 102, 32, 102, 105, 108, 108, 101, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 48, 32, 45, 99, 105, 114, > 99, 108, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 51, 48, 41, 125, 44, > 48, 46, 51, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 99, 105, 114, 99, 108, 101, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 49, 48, 48, 44, 48, 46, 55, 44, 50, 53, 53, 10, 99, 105, > 114, 99, 108, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, > 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 118, 32, 45, 32, > 40, 123, 39, 34, 36, 53, 34, 39, 125, 41, 32, 105, 115, 95, 112, 97, > 116, 116, 101, 114, 110, 61, 123, 64, 123, 45, 49, 44, 48, 45, 49, 125, > 39, 61, 61, 39, 123, 39, 48, 120, 39, 125, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 118, 32, 43, 10, 45, 105, 102, 32, 36, 105, 115, > 95, 112, 97, 116, 116, 101, 114, 110, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 68, 114, 97, 119, 32, 111, 117, 116, 108, 105, 110, 101, 100, > 32, 99, 105, 114, 99, 108, 101, 32, 97, 116, 32, 40, 36, 49, 44, 36, > 50, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, > 51, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, > 100, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 54, 45, 45, 49, 125, > 41, 46, 34, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 68, 114, 97, 119, 32, 102, 105, 108, 108, 101, 100, 32, > 99, 105, 114, 99, 108, 101, 32, 97, 116, 32, 40, 36, 49, 44, 36, 50, > 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 51, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, 100, > 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 53, 45, 45, 49, 125, 41, > 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 44, 36, 51, 44, 48, 44, 36, 123, 52, 45, 45, 49, 125, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 108, 105, 112, 115, > 101, 32, 58, 32, 120, 91, 37, 93, 44, 121, 91, 37, 93, 44, 82, 91, > 37, 93, 44, 114, 91, 37, 93, 44, 95, 97, 110, 103, 108, 101, 44, 95, > 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 101, 108, 108, 105, 112, 115, 101, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 32, 114, 97, 100, 105, 117, 115, 32, > 111, 102, 32, 39, 49, 48, 48, 37, 39, 32, 115, 116, 97, 110, 100, 115, > 32, 102, 111, 114, 32, 39, 115, 113, 114, 116, 40, 119, 105, 100, 116, 104, > 94, 50, 43, 104, 101, 105, 103, 104, 116, 94, 50, 41, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, > 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, > 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, > 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, > 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, > 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, > 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 46, 32, 73, 102, 32, 97, 32, 112, > 97, 116, 116, 101, 114, 110, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 44, 32, 116, 104, 101, 32, 101, 108, 108, 105, 112, 115, 101, > 32, 105, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 114, 97, > 119, 110, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 105, 110, 115, 116, > 101, 97, 100, 32, 111, 102, 32, 102, 105, 108, 108, 101, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, > 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 48, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, > 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 51, 48, 41, 125, > 44, 123, 63, 40, 51, 48, 41, 125, 44, 123, 63, 40, 49, 56, 48, 41, > 125, 44, 48, 46, 51, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 53, 48, 37, > 44, 53, 48, 37, 44, 49, 48, 48, 44, 49, 48, 48, 44, 48, 44, 48, > 46, 55, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 102, 108, > 111, 111, 100, 32, 58, 32, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, > 44, 95, 122, 91, 37, 93, 44, 95, 116, 111, 108, 101, 114, 97, 110, 99, > 101, 62, 61, 48, 44, 95, 105, 115, 95, 104, 105, 103, 104, 95, 99, 111, > 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, > 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 70, 108, 111, 111, 100, 45, 102, 105, > 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 32, 117, 115, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 118, 97, 108, 117, 101, 32, 97, 110, 100, 32, 116, 111, 108, > 101, 114, 97, 110, 99, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 121, 61, 122, 61, 48, 39, 44, 32, 39, 116, 111, 108, 101, 114, > 97, 110, 99, 101, 61, 48, 39, 44, 32, 39, 105, 115, 95, 104, 105, 103, > 104, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 48, > 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, 48, > 32, 45, 102, 108, 111, 111, 100, 32, 123, 63, 40, 49, 48, 48, 41, 125, > 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, 44, 50, 48, > 44, 48, 44, 49, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, > 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 103, 97, 117, 115, 115, 105, > 97, 110, 32, 58, 32, 95, 115, 105, 103, 109, 97, 49, 91, 37, 93, 44, > 95, 115, 105, 103, 109, 97, 50, 91, 37, 93, 44, 95, 97, 110, 103, 108, > 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 97, 32, 99, 101, 110, 116, 101, 114, 101, 100, 32, 103, 97, 117, 115, 115, > 105, 97, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, > 100, 101, 118, 105, 97, 116, 105, 111, 110, 115, 32, 97, 110, 100, 32, 111, > 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 115, 105, 103, 109, 97, 49, 61, 51, 39, 44, > 32, 39, 115, 105, 103, 109, 97, 50, 61, 115, 105, 103, 109, 97, 49, 39, > 32, 97, 110, 100, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, > 48, 48, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 32, 49, 48, 48, > 44, 51, 48, 44, 52, 53, 10, 103, 97, 117, 115, 115, 105, 97, 110, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 125, 44, 36, > 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 99, 101, 110, 116, > 101, 114, 101, 100, 32, 103, 97, 117, 115, 115, 105, 97, 110, 32, 111, 110, > 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 115, 116, > 97, 110, 100, 97, 114, 100, 32, 100, 101, 118, 105, 97, 116, 105, 111, 110, > 115, 32, 40, 36, 49, 44, 36, 50, 41, 32, 97, 110, 100, 32, 97, 110, > 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, > 45, 10, 117, 61, 123, 99, 111, 115, 40, 36, 51, 42, 112, 105, 47, 49, > 56, 48, 41, 125, 10, 118, 61, 123, 115, 105, 110, 40, 36, 51, 42, 112, > 105, 47, 49, 56, 48, 41, 125, 10, 100, 109, 97, 120, 61, 123, 109, 97, > 120, 40, 119, 44, 104, 41, 125, 10, 45, 105, 102, 32, 123, 105, 115, 118, > 97, 108, 40, 36, 49, 41, 125, 32, 108, 49, 61, 36, 49, 32, 45, 101, > 108, 115, 101, 32, 108, 49, 61, 123, 36, 123, 49, 125, 49, 48, 48, 48, > 48, 42, 36, 100, 109, 97, 120, 47, 49, 48, 48, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 105, 115, 118, 97, 108, 40, 36, > 50, 41, 125, 32, 108, 50, 61, 36, 50, 32, 45, 101, 108, 115, 101, 32, > 108, 50, 61, 123, 36, 123, 50, 125, 49, 48, 48, 48, 48, 42, 36, 100, > 109, 97, 120, 47, 49, 48, 48, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 108, 49, 61, 123, 49, 47, 40, 50, 42, 109, 97, 120, 40, 49, 47, 51, > 44, 36, 108, 49, 41, 94, 50, 41, 125, 10, 108, 50, 61, 123, 49, 47, > 40, 50, 42, 109, 97, 120, 40, 49, 47, 51, 44, 36, 108, 50, 41, 94, > 50, 41, 125, 10, 65, 61, 123, 36, 108, 49, 42, 36, 117, 42, 36, 117, > 43, 36, 108, 50, 42, 36, 118, 42, 36, 118, 125, 10, 66, 61, 123, 40, > 36, 108, 49, 45, 36, 108, 50, 41, 42, 36, 117, 42, 36, 118, 125, 10, > 67, 61, 123, 36, 108, 49, 42, 36, 118, 42, 36, 118, 43, 36, 108, 50, > 42, 36, 117, 42, 36, 117, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, > 44, 110, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, > 100, 115, 61, 123, 100, 125, 44, 123, 115, 125, 32, 45, 114, 109, 10, 40, > 123, 45, 36, 119, 47, 50, 125, 44, 123, 36, 119, 47, 50, 125, 41, 32, > 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 44, 51, 10, 45, > 102, 91, 45, 49, 93, 32, 34, 89, 61, 121, 45, 34, 123, 36, 104, 47, > 50, 125, 59, 36, 65, 34, 42, 105, 42, 105, 43, 50, 42, 34, 36, 66, > 34, 42, 105, 42, 89, 43, 34, 36, 67, 42, 34, 89, 42, 89, 34, 10, > 45, 42, 32, 45, 49, 32, 45, 101, 120, 112, 32, 45, 114, 32, 36, 119, > 44, 36, 104, 44, 36, 100, 115, 10, 45, 110, 109, 32, 36, 110, 109, 44, > 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, 97, 112, 104, 32, > 58, 32, 91, 102, 117, 110, 99, 116, 105, 111, 110, 95, 105, 109, 97, 103, > 101, 93, 44, 95, 112, 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, > 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, 44, 95, 121, 109, 105, 110, > 44, 95, 121, 109, 97, 120, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, > 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, > 44, 46, 46, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 44, > 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 61, 48, 44, 95, > 112, 108, 111, 116, 95, 116, 121, 112, 101, 44, 95, 118, 101, 114, 116, 101, > 120, 95, 116, 121, 112, 101, 44, 95, 120, 109, 105, 110, 44, 120, 109, 97, > 120, 44, 95, 121, 109, 105, 110, 44, 95, 121, 109, 97, 120, 44, 95, 111, > 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, 44, > 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 117, 110, 99, 116, 105, 111, > 110, 32, 103, 114, 97, 112, 104, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, 101, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 111, 110, 101, > 32, 124, 32, 49, 61, 108, 105, 110, 101, 115, 32, 124, 32, 50, 61, 115, > 112, 108, 105, 110, 101, 115, 32, 124, 32, 51, 61, 98, 97, 114, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 118, 101, 114, 116, > 101, 120, 95, 116, 121, 112, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 110, 111, 110, 101, 32, 124, 32, 49, 61, 112, 111, 105, > 110, 116, 115, 32, 124, 32, 50, 44, 51, 61, 99, 114, 111, 115, 115, 101, > 115, 32, 124, 32, 52, 44, 53, 61, 99, 105, 114, 99, 108, 101, 115, 32, > 124, 32, 54, 44, 55, 61, 115, 113, 117, 97, 114, 101, 115, 32, 125, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, > 114, 110, 39, 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, > 99, 105, 109, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, > 114, 116, 105, 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, > 119, 104, 105, 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, > 116, 116, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, > 101, 110, 32, 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 112, 108, 111, 116, 95, 116, 121, 112, 101, 61, > 49, 39, 44, 32, 39, 118, 101, 114, 116, 101, 120, 95, 116, 121, 112, 101, > 61, 49, 39, 44, 32, 39, 121, 109, 105, 110, 61, 121, 109, 97, 120, 61, > 48, 32, 40, 97, 117, 116, 111, 41, 39, 44, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, > 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, > 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, > 119, 115, 32, 53, 48, 37, 32, 45, 98, 108, 117, 114, 91, 45, 49, 93, > 32, 51, 32, 45, 115, 112, 108, 105, 116, 91, 45, 49, 93, 32, 99, 32, > 45, 100, 105, 118, 91, 48, 93, 32, 49, 46, 53, 32, 45, 103, 114, 97, > 112, 104, 91, 48, 93, 32, 91, 49, 93, 44, 50, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 32, 45, 103, 114, 97, > 112, 104, 91, 48, 93, 32, 91, 50, 93, 44, 50, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 32, 45, 103, 114, 97, > 112, 104, 91, 48, 93, 32, 91, 51, 93, 44, 50, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 48, 44, 48, 44, 50, 53, 53, 32, 45, 107, 101, 101, > 112, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, 32, 103, 114, 105, 100, > 32, 58, 32, 115, 105, 122, 101, 95, 120, 91, 37, 93, 62, 61, 48, 44, > 115, 105, 122, 101, 95, 121, 91, 37, 93, 62, 61, 48, 44, 95, 111, 102, > 102, 115, 101, 116, 95, 120, 91, 37, 93, 44, 95, 111, 102, 102, 115, 101, > 116, 95, 121, 91, 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, > 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, > 44, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, > 119, 32, 120, 121, 45, 103, 114, 105, 100, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, > 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, > 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, > 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, > 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 111, 102, 102, 115, 101, 116, 95, 120, 61, 111, 102, 102, 115, > 101, 116, 95, 121, 61, 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, > 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 103, 114, 105, 100, 32, 49, 48, 37, 44, 49, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 103, 114, 105, 100, 32, 49, 48, 37, 44, > 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, > 67, 67, 67, 67, 67, 67, 44, 49, 50, 56, 44, 51, 50, 44, 49, 54, > 10, 103, 114, 105, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 50, 62, 61, 48, 34, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, > 61, 48, 125, 44, 36, 123, 53, 61, 49, 125, 44, 36, 123, 54, 61, 48, > 125, 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 54, 34, 39, 125, > 41, 32, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 61, 123, 64, 123, > 45, 49, 44, 48, 45, 49, 125, 39, 61, 61, 39, 123, 39, 48, 120, 39, > 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, > 45, 105, 102, 32, 36, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 10, > 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 68, 114, 97, 119, 32, 120, > 121, 45, 103, 114, 105, 100, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 115, 32, 40, 36, > 49, 44, 36, 50, 41, 44, 32, 111, 102, 102, 115, 101, 116, 115, 32, 40, > 36, 51, 44, 36, 52, 41, 44, 32, 111, 112, 97, 99, 105, 116, 121, 32, > 36, 53, 44, 32, 112, 97, 116, 116, 101, 114, 110, 32, 36, 54, 32, 97, > 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 55, 45, 45, 49, > 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 112, 97, 116, 116, 101, 114, > 110, 61, 36, 54, 32, 99, 111, 108, 111, 114, 61, 36, 123, 55, 45, 45, > 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, 51, > 93, 32, 34, 68, 114, 97, 119, 32, 120, 121, 45, 103, 114, 105, 100, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, 44, 36, 50, 41, 44, 32, > 111, 102, 102, 115, 101, 116, 115, 32, 40, 36, 51, 44, 36, 52, 41, 44, > 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 53, 44, 32, 97, 110, 100, > 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 54, 45, 45, 49, 125, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 112, 97, 116, 116, 101, 114, 110, 61, > 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 32, 99, 111, 108, 111, 114, > 61, 36, 123, 54, 45, 45, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 115, 120, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 32, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 115, 121, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 10, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 111, 120, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, 32, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 111, 121, 61, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 52, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 115, 61, > 123, 115, 125, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 36, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 115, 120, 44, 109, 97, 120, 40, 49, > 44, 119, 42, 36, 49, 41, 44, 36, 49, 41, 125, 10, 45, 105, 102, 32, > 123, 36, 115, 105, 122, 101, 62, 61, 49, 125, 10, 111, 102, 102, 115, 101, > 116, 61, 123, 105, 102, 40, 36, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 111, 120, 44, 36, 115, 105, 122, 101, 42, 36, 51, 44, 36, 51, 41, > 125, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, > 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 49, 44, 123, 49, 43, 105, > 110, 116, 40, 36, 119, 47, 36, 115, 105, 122, 101, 41, 125, 44, 49, 44, > 49, 44, 39, 121, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, 115, 105, > 122, 101, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, 111, 102, 102, 115, > 101, 116, 37, 36, 115, 105, 122, 101, 125, 10, 49, 44, 123, 104, 125, 44, > 49, 44, 49, 44, 123, 36, 104, 47, 50, 125, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 110, 61, 123, 104, 125, 32, 45, 105, 91, 45, 50, 93, 32, 40, > 36, 110, 59, 36, 110, 41, 10, 40, 49, 44, 48, 59, 49, 44, 123, 36, > 110, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, 44, 36, > 110, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 10, 40, 45, 49, 50, 56, 59, 49, 59, 36, 104, 59, 36, 115, > 41, 32, 49, 44, 36, 104, 44, 49, 44, 36, 115, 32, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, > 44, 49, 44, 36, 112, 97, 116, 116, 101, 114, 110, 44, 36, 99, 111, 108, > 111, 114, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 49, 44, > 123, 52, 42, 40, 36, 110, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, > 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 40, 45, 49, 50, 56, 59, 49, 59, 36, 104, 59, 49, 41, 32, 49, > 44, 36, 104, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 44, 36, > 112, 97, 116, 116, 101, 114, 110, 44, 49, 10, 45, 105, 102, 32, 123, 36, > 110, 62, 49, 125, 32, 49, 44, 123, 52, 42, 40, 36, 110, 45, 49, 41, > 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 121, 91, 94, 48, 93, 32, 45, > 97, 91, 94, 48, 93, 32, 121, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 36, > 53, 44, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 115, 105, 122, 101, 61, 123, 105, 102, 40, 36, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 115, 121, 44, 109, 97, 120, > 40, 49, 44, 104, 42, 36, 50, 41, 44, 36, 50, 41, 125, 10, 45, 105, > 102, 32, 123, 36, 115, 105, 122, 101, 62, 61, 49, 125, 10, 111, 102, 102, > 115, 101, 116, 61, 123, 105, 102, 40, 36, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 111, 121, 44, 36, 115, 105, 122, 101, 42, 36, 52, 44, 36, > 52, 41, 125, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, > 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 49, 44, 123, 49, > 43, 105, 110, 116, 40, 36, 104, 47, 36, 115, 105, 122, 101, 41, 125, 44, > 49, 44, 49, 44, 39, 121, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 115, 105, 122, 101, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, 111, 102, > 102, 115, 101, 116, 37, 36, 115, 105, 122, 101, 125, 10, 45, 105, 91, 45, > 50, 93, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 123, 36, 119, > 47, 50, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, > 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 110, 61, 123, 104, 125, > 32, 45, 105, 91, 45, 50, 93, 32, 40, 36, 110, 59, 36, 110, 41, 10, > 40, 49, 44, 48, 59, 49, 44, 123, 36, 110, 45, 49, 125, 41, 32, 45, > 114, 91, 45, 49, 93, 32, 50, 44, 36, 110, 44, 49, 44, 49, 44, 51, > 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 40, 45, 49, 50, > 56, 59, 36, 119, 59, 49, 59, 36, 115, 41, 32, 36, 119, 44, 49, 44, > 49, 44, 36, 115, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 49, 48, 48, 37, 44, 48, 44, 49, 44, 36, 112, 97, 116, > 116, 101, 114, 110, 44, 36, 99, 111, 108, 111, 114, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 49, 125, 32, 49, 44, 123, 52, 42, 40, 36, 110, 45, > 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, > 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 40, 45, 49, 50, 56, 59, > 36, 119, 59, 49, 59, 49, 41, 32, 36, 119, 44, 49, 44, 49, 44, 49, > 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, > 48, 48, 37, 44, 48, 44, 49, 44, 36, 112, 97, 116, 116, 101, 114, 110, > 44, 49, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 49, 44, > 123, 52, 42, 40, 36, 110, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, > 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 121, 91, 94, 48, 93, 32, 45, 97, 91, 94, 48, 93, 32, 121, > 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 36, 53, 44, 48, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 106, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 105, 109, 97, 103, 101, 39, 46, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 97, 103, > 101, 32, 58, 32, 91, 115, 112, 114, 105, 116, 101, 93, 44, 95, 120, 91, > 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, 122, 91, 37, 93, 44, 95, > 99, 91, 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 91, > 115, 112, 114, 105, 116, 101, 95, 109, 97, 115, 107, 93, 44, 95, 109, 97, > 120, 95, 111, 112, 97, 99, 105, 116, 121, 95, 109, 97, 115, 107, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 112, 114, > 105, 116, 101, 32, 105, 109, 97, 103, 101, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 106, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 120, 61, 121, 61, 122, 61, 99, 61, 48, 39, 44, 32, 39, 111, 112, 97, > 99, 105, 116, 121, 61, 49, 39, 44, 32, 39, 115, 112, 114, 105, 116, 101, > 95, 109, 97, 115, 107, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 95, 111, 112, 97, 99, > 105, 116, 121, 95, 109, 97, 115, 107, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 99, 114, 111, 112, 32, 52, 48, 37, 44, 52, 48, 37, > 44, 54, 48, 37, 44, 54, 48, 37, 32, 45, 114, 101, 115, 105, 122, 101, > 91, 45, 49, 93, 32, 50, 48, 48, 37, 44, 50, 48, 48, 37, 44, 49, > 44, 51, 44, 53, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, > 50, 44, 50, 44, 48, 32, 45, 105, 109, 97, 103, 101, 91, 48, 93, 32, > 91, 45, 49, 93, 44, 51, 48, 37, 44, 51, 48, 37, 32, 45, 107, 101, > 101, 112, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 110, > 101, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, 48, 91, 37, 93, 44, > 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, 44, 95, 99, > 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, 108, > 105, 110, 101, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, 32, 105, 115, 32, 97, 110, > 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 110, 117, 109, > 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, 116, > 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, 99, 104, 32, 99, 97, 110, > 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, 105, 102, 32, 97, 32, 99, > 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, > 99, 105, 116, 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, > 110, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, > 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, 48, 48, 32, > 45, 108, 105, 110, 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, 123, 63, > 40, 119, 41, 125, 44, 123, 63, 40, 104, 41, 125, 44, 48, 46, 53, 44, > 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 108, > 105, 110, 101, 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, > 53, 53, 32, 45, 108, 105, 110, 101, 32, 49, 48, 48, 37, 44, 48, 44, > 48, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 67, 67, 67, 67, 67, > 67, 67, 67, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 58, 32, 122, 48, 114, 44, > 122, 48, 105, 44, 122, 49, 114, 44, 122, 49, 105, 44, 95, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 62, 61, 48, 44, 95, 105, > 115, 95, 106, 117, 108, 105, 97, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 44, 95, 99, 48, 114, 44, 95, 99, 48, 105, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 114, 97, 119, 32, 109, 97, 110, 100, 101, 108, 98, > 114, 111, 116, 47, 106, 117, 108, 105, 97, 32, 102, 114, 97, 99, 116, 97, > 108, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 95, 109, 97, 120, 61, 49, 48, > 48, 39, 44, 32, 39, 105, 115, 95, 106, 117, 108, 105, 97, 61, 48, 39, > 44, 32, 39, 99, 48, 114, 61, 99, 48, 105, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, > 48, 32, 45, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 45, 50, > 46, 53, 44, 45, 50, 44, 50, 44, 50, 44, 49, 48, 50, 52, 32, 45, > 109, 97, 112, 32, 48, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, > 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 91, 45, 49, 93, 32, > 45, 48, 46, 50, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 114, 98, > 108, 101, 32, 58, 32, 95, 105, 109, 97, 103, 101, 95, 119, 101, 105, 103, > 104, 116, 44, 95, 112, 97, 116, 116, 101, 114, 110, 95, 119, 101, 105, 103, > 104, 116, 44, 95, 97, 110, 103, 108, 101, 44, 95, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 44, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, > 61, 48, 44, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 62, 61, > 48, 44, 95, 97, 108, 112, 104, 97, 44, 95, 115, 105, 103, 109, 97, 44, > 95, 99, 117, 116, 95, 108, 111, 119, 62, 61, 48, 44, 95, 99, 117, 116, > 95, 104, 105, 103, 104, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 110, 100, 101, 114, 32, 109, 97, 114, 98, 108, 101, 32, > 108, 105, 107, 101, 32, 112, 97, 116, 116, 101, 114, 110, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 109, 97, 103, 101, > 95, 119, 101, 105, 103, 104, 116, 61, 48, 46, 50, 39, 44, 32, 39, 112, > 97, 116, 116, 101, 114, 110, 95, 119, 101, 105, 103, 104, 116, 61, 48, 46, > 49, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 52, 53, 39, 44, 32, > 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 48, 39, 44, 32, 39, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, 48, 46, 52, 39, 44, 32, > 39, 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 61, 48, 46, 56, 39, > 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, 108, 112, 104, > 97, 61, 48, 46, 54, 39, 44, 32, 39, 115, 105, 103, 109, 97, 61, 49, > 46, 49, 39, 32, 97, 110, 100, 32, 39, 99, 117, 116, 95, 108, 111, 119, > 61, 99, 117, 116, 95, 104, 105, 103, 104, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 109, 97, 114, 98, 108, 101, 32, 44, 10, 109, 97, > 114, 98, 108, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 48, 46, 50, 125, 44, 36, 123, 50, 61, 48, 46, 49, 125, 44, 36, > 123, 51, 61, 52, 53, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 46, 52, 125, 44, 36, 123, 54, 61, 48, 46, 56, 125, 44, > 36, 123, 55, 61, 48, 46, 54, 125, 44, 36, 123, 56, 61, 49, 46, 49, > 125, 44, 36, 123, 57, 61, 48, 37, 125, 44, 36, 123, 49, 48, 61, 49, > 48, 48, 37, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, > 110, 100, 101, 114, 32, 109, 97, 114, 98, 108, 101, 32, 108, 105, 107, 101, > 32, 112, 97, 116, 116, 101, 114, 110, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 105, 109, 97, 103, 101, 32, > 119, 101, 105, 103, 104, 116, 32, 36, 49, 44, 32, 112, 97, 116, 116, 101, > 114, 110, 32, 119, 101, 105, 103, 104, 116, 32, 36, 50, 44, 32, 97, 110, > 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, 44, 32, 97, 109, 112, > 108, 105, 116, 117, 100, 101, 32, 36, 52, 44, 32, 34, 92, 10, 34, 115, > 104, 97, 114, 112, 110, 101, 115, 115, 32, 36, 53, 44, 32, 97, 110, 105, > 115, 111, 116, 114, 111, 112, 121, 32, 36, 54, 44, 32, 97, 108, 112, 104, > 97, 32, 36, 55, 44, 32, 115, 105, 103, 109, 97, 32, 36, 56, 44, 32, > 97, 110, 100, 32, 99, 117, 116, 32, 40, 36, 57, 44, 36, 49, 48, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 115, 120, 61, 123, 36, 50, 42, 115, > 105, 110, 40, 36, 51, 42, 112, 105, 47, 49, 56, 48, 41, 125, 32, 115, > 121, 61, 123, 36, 50, 42, 99, 111, 115, 40, 36, 51, 42, 112, 105, 47, > 49, 56, 48, 41, 125, 32, 45, 102, 32, 115, 105, 110, 40, 120, 42, 36, > 115, 120, 43, 121, 42, 36, 115, 121, 43, 105, 42, 36, 49, 41, 10, 45, > 105, 102, 32, 123, 36, 52, 125, 32, 45, 115, 109, 111, 111, 116, 104, 32, > 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 99, 32, 36, 57, 44, 36, 49, 48, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 97, 122, 101, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 99, 101, 108, 108, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 109, 97, 122, 101, 32, > 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, > 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 109, 97, 122, 101, 32, 51, 48, 44, 50, 48, 32, 45, 110, 101, 103, > 97, 116, 105, 118, 101, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 32, 48, 44, 50, 53, 53, 10, 109, 97, 122, 101, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 49, 53, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, > 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 36, 49, 125, 41, 32, 38, > 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, > 36, 123, 51, 61, 50, 52, 125, 41, 32, 38, 38, 32, 36, 51, 62, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, > 32, 36, 49, 120, 36, 50, 32, 109, 97, 122, 101, 46, 34, 10, 45, 118, > 32, 45, 10, 40, 123, 114, 111, 117, 110, 100, 40, 63, 40, 36, 49, 45, > 49, 41, 41, 125, 44, 123, 114, 111, 117, 110, 100, 40, 63, 40, 36, 50, > 45, 49, 41, 41, 125, 41, 10, 36, 49, 44, 36, 50, 44, 49, 44, 49, > 44, 49, 53, 32, 45, 45, 102, 91, 45, 49, 93, 32, 48, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 95, 103, 101, 110, 101, > 114, 97, 116, 101, 95, 109, 97, 122, 101, 32, 36, 49, 44, 36, 50, 10, > 45, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 122, 101, 91, 45, 49, > 93, 32, 36, 51, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 109, 97, > 122, 101, 93, 10, 45, 118, 32, 43, 10, 95, 103, 101, 110, 101, 114, 97, > 116, 101, 95, 109, 97, 122, 101, 32, 58, 10, 45, 100, 111, 10, 120, 61, > 64, 123, 45, 50, 44, 45, 50, 125, 32, 121, 61, 64, 123, 45, 50, 44, > 45, 49, 125, 10, 45, 61, 91, 45, 49, 93, 32, 49, 44, 36, 120, 44, > 36, 121, 44, 48, 44, 49, 10, 105, 115, 95, 99, 97, 110, 100, 105, 100, > 97, 116, 101, 61, 48, 10, 117, 112, 61, 45, 49, 32, 45, 105, 102, 32, > 123, 105, 40, 36, 120, 44, 36, 121, 41, 38, 56, 34, 32, 38, 38, 32, > 34, 36, 121, 62, 48, 34, 32, 38, 38, 32, 34, 33, 105, 40, 36, 120, > 44, 36, 121, 45, 49, 44, 48, 44, 49, 41, 125, 32, 117, 112, 61, 36, > 120, 44, 123, 36, 121, 45, 49, 125, 44, 56, 32, 105, 115, 95, 99, 97, > 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 100, 111, 119, 110, 61, 45, 49, 32, 45, 105, 102, 32, 123, 105, 40, > 36, 120, 44, 36, 121, 41, 38, 52, 34, 32, 38, 38, 32, 34, 36, 121, > 60, 36, 50, 45, 49, 34, 32, 38, 38, 32, 34, 33, 105, 40, 36, 120, > 44, 36, 121, 43, 49, 44, 48, 44, 49, 41, 125, 32, 100, 111, 119, 110, > 61, 36, 120, 44, 123, 36, 121, 43, 49, 125, 44, 52, 32, 105, 115, 95, > 99, 97, 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 108, 101, 102, 116, 61, 45, 49, 32, 45, 105, 102, 32, 123, > 105, 40, 36, 120, 44, 36, 121, 41, 38, 50, 34, 32, 38, 38, 32, 34, > 36, 120, 62, 48, 34, 32, 38, 38, 32, 34, 33, 105, 40, 36, 120, 45, > 49, 44, 36, 121, 44, 48, 44, 49, 41, 125, 32, 108, 101, 102, 116, 61, > 123, 36, 120, 45, 49, 125, 44, 36, 121, 44, 50, 32, 105, 115, 95, 99, > 97, 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 114, 105, 103, 104, 116, 61, 45, 49, 32, 45, 105, 102, 32, 123, > 105, 40, 36, 120, 44, 36, 121, 41, 38, 49, 34, 32, 38, 38, 32, 34, > 36, 120, 60, 36, 49, 45, 49, 34, 32, 38, 38, 32, 34, 33, 105, 40, > 36, 120, 43, 49, 44, 36, 121, 44, 48, 44, 49, 41, 125, 32, 114, 105, > 103, 104, 116, 61, 123, 36, 120, 43, 49, 125, 44, 36, 121, 44, 49, 32, > 105, 115, 95, 99, 97, 110, 100, 105, 100, 97, 116, 101, 61, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 105, 115, 95, 99, 97, > 110, 100, 105, 100, 97, 116, 101, 10, 40, 36, 117, 112, 44, 36, 100, 111, > 119, 110, 44, 36, 108, 101, 102, 116, 44, 36, 114, 105, 103, 104, 116, 41, > 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, 49, > 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, > 49, 44, 49, 44, 45, 49, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, > 93, 32, 48, 44, 123, 63, 40, 52, 41, 125, 44, 48, 44, 48, 44, 50, > 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 45, 50, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 105, 115, 95, 99, 97, 110, 100, 105, 100, 97, > 116, 101, 10, 45, 105, 102, 32, 123, 64, 123, 45, 50, 44, 45, 49, 125, > 61, 61, 56, 125, 32, 32, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, > 40, 36, 120, 44, 36, 121, 41, 38, 55, 125, 44, 36, 120, 44, 36, 121, > 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 44, 36, 121, > 45, 49, 41, 38, 49, 49, 125, 44, 36, 120, 44, 123, 36, 121, 45, 49, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 45, 50, 44, 45, 49, > 125, 61, 61, 52, 125, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, > 36, 120, 44, 36, 121, 41, 38, 49, 49, 125, 44, 36, 120, 44, 36, 121, > 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 44, 36, 121, > 43, 49, 41, 38, 55, 125, 44, 36, 120, 44, 123, 36, 121, 43, 49, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 45, 50, 44, 45, 49, 125, > 61, 61, 50, 125, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, > 120, 44, 36, 121, 41, 38, 49, 51, 125, 44, 36, 120, 44, 36, 121, 32, > 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 45, 49, 44, 36, > 121, 41, 38, 49, 52, 125, 44, 123, 36, 120, 45, 49, 125, 44, 36, 121, > 10, 45, 101, 108, 115, 101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, > 32, 32, 32, 32, 32, 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, > 120, 44, 36, 121, 41, 38, 49, 52, 125, 44, 36, 120, 44, 36, 121, 32, > 45, 61, 91, 45, 49, 93, 32, 123, 105, 40, 36, 120, 43, 49, 44, 36, > 121, 41, 38, 49, 51, 125, 44, 123, 36, 120, 43, 49, 125, 44, 36, 121, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 122, 91, 45, 50, 93, 32, 48, > 44, 49, 32, 45, 97, 91, 45, 51, 44, 45, 50, 93, 32, 121, 10, 45, > 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, 64, 123, 45, 50, 44, 104, > 125, 61, 61, 49, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 111, 119, 115, 91, 45, 50, 93, 32, 48, 44, > 123, 64, 123, 45, 50, 44, 104, 125, 45, 50, 125, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 49, 10, 45, 114, 109, 91, > 45, 50, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 48, 10, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 122, 101, > 32, 58, 10, 45, 105, 91, 48, 93, 32, 36, 49, 44, 36, 49, 32, 45, > 105, 91, 49, 93, 32, 91, 48, 93, 120, 49, 53, 10, 45, 108, 105, 110, > 101, 91, 56, 45, 49, 53, 93, 32, 48, 44, 48, 44, 49, 48, 48, 37, > 44, 48, 44, 49, 44, 49, 10, 45, 108, 105, 110, 101, 91, 52, 45, 55, > 44, 49, 50, 45, 49, 53, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, 45, 108, 105, > 110, 101, 91, 50, 45, 51, 44, 54, 45, 55, 44, 49, 48, 45, 49, 49, > 44, 49, 52, 45, 49, 53, 93, 32, 48, 44, 48, 44, 48, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 10, 45, 108, 105, 110, 101, 91, 49, 45, 49, > 53, 58, 50, 93, 32, 49, 48, 48, 37, 44, 48, 44, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, 45, 97, 91, 48, 45, 49, > 53, 93, 32, 120, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 36, > 49, 125, 44, 123, 104, 42, 36, 49, 125, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 49, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 48, 44, 49, 10, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, > 120, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 121, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 50, 44, 48, > 44, 50, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 109, 97, 122, 101, 95, 109, 97, 115, 107, 32, 58, 32, 95, 99, 101, > 108, 108, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 117, 116, 32, 109, 97, 122, 101, 32, 97, 99, 99, > 111, 114, 100, 105, 110, 103, 32, 116, 111, 32, 115, 105, 122, 101, 32, 97, > 110, 100, 32, 115, 104, 97, 112, 101, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 109, 97, 115, 107, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 77, 97, 115, 107, 32, > 109, 97, 121, 32, 99, 111, 110, 116, 97, 105, 110, 32, 100, 105, 115, 99, > 111, 110, 110, 101, 99, 116, 101, 100, 32, 115, 104, 97, 112, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 48, 32, 45, 116, > 101, 120, 116, 32, 34, 71, 39, 77, 73, 67, 34, 44, 48, 44, 48, 44, > 53, 51, 44, 49, 44, 49, 32, 45, 100, 105, 108, 97, 116, 101, 32, 51, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, 32, 45, 102, 114, > 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 109, 97, 122, 101, 95, > 109, 97, 115, 107, 32, 56, 32, 45, 100, 105, 108, 97, 116, 101, 32, 51, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 42, 32, 50, 53, > 53, 10, 109, 97, 122, 101, 95, 109, 97, 115, 107, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, > 50, 52, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 109, 97, 115, > 107, 101, 100, 32, 109, 97, 122, 101, 32, 102, 114, 111, 109, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 99, 101, 108, 108, 32, > 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 110, 111, 114, 109, 32, 45, 103, 101, 32, 53, 48, 37, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 100, 111, 10, 45, 45, 114, 97, 110, 100, 91, 48, 93, 32, 48, 44, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, 93, 32, 40, 123, 120, 77, > 125, 44, 123, 121, 77, 125, 41, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 45, 102, 108, 111, 111, 100, 91, 48, 93, 32, 64, 45, 49, 44, 48, > 44, 48, 44, 48, 44, 49, 44, 50, 32, 45, 103, 101, 91, 45, 49, 93, > 32, 50, 32, 45, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, > 93, 32, 45, 42, 91, 45, 50, 93, 32, 49, 53, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 10, 45, 102, 108, 111, 111, 100, 91, 48, > 93, 32, 64, 45, 50, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, > 45, 95, 103, 101, 110, 101, 114, 97, 116, 101, 95, 109, 97, 122, 101, 32, > 123, 119, 125, 44, 123, 104, 125, 10, 45, 119, 104, 105, 108, 101, 32, 64, > 123, 48, 44, 77, 125, 10, 45, 114, 109, 91, 48, 93, 32, 45, 43, 32, > 45, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 122, 101, 91, 45, 49, > 93, 32, 36, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 109, 97, > 122, 101, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 98, 106, 101, > 99, 116, 51, 100, 32, 58, 32, 91, 111, 98, 106, 101, 99, 116, 51, 100, > 93, 44, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, 122, > 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 114, 101, 110, 100, 101, > 114, 105, 110, 103, 95, 109, 111, 100, 101, 44, 95, 105, 115, 95, 100, 111, > 117, 98, 108, 101, 95, 115, 105, 100, 101, 100, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 44, 95, 105, 115, 95, 122, 98, 117, 102, 102, 101, 114, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 102, 111, 99, 97, > 108, 101, 44, 95, 108, 105, 103, 104, 116, 95, 120, 44, 95, 108, 105, 103, > 104, 116, 95, 121, 44, 95, 108, 105, 103, 104, 116, 95, 122, 44, 95, 115, > 112, 101, 99, 117, 108, 97, 114, 95, 108, 105, 103, 104, 116, 110, 101, 115, > 115, 44, 95, 115, 112, 101, 99, 117, 108, 97, 114, 95, 115, 104, 105, 110, > 105, 110, 101, 115, 115, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 114, 101, 110, 100, > 101, 114, 105, 110, 103, 95, 109, 111, 100, 101, 39, 32, 99, 97, 110, 32, > 98, 101, 32, 123, 32, 48, 61, 100, 111, 116, 115, 32, 124, 32, 49, 61, > 119, 105, 114, 101, 102, 114, 97, 109, 101, 32, 124, 32, 50, 61, 102, 108, > 97, 116, 32, 124, 32, 51, 61, 102, 108, 97, 116, 45, 115, 104, 97, 100, > 101, 100, 32, 124, 32, 52, 61, 103, 111, 117, 114, 97, 117, 100, 45, 115, > 104, 97, 100, 101, 100, 32, 124, 32, 53, 61, 112, 104, 111, 110, 103, 45, > 115, 104, 97, 100, 101, 100, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 120, 61, 121, 61, 122, 61, 48, 39, 44, 32, 39, 111, > 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, > 115, 95, 122, 98, 117, 102, 102, 101, 114, 61, 49, 39, 46, 32, 65, 108, > 108, 32, 111, 116, 104, 101, 114, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 115, 32, 116, 97, 107, 101, 32, 116, 104, 101, 105, 114, 32, 100, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 32, 102, 114, 111, 109, > 32, 116, 104, 101, 32, 51, 100, 32, 101, 110, 118, 105, 114, 111, 110, 109, > 101, 110, 116, 32, 118, 97, 114, 105, 97, 98, 108, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, > 44, 49, 48, 32, 45, 99, 111, 110, 101, 51, 100, 32, 51, 48, 44, 45, > 49, 50, 48, 32, 45, 97, 100, 100, 51, 100, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 49, 44, 48, 44, 54, 48, 32, 45, 111, 98, 106, 101, 99, 116, > 51, 100, 91, 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 107, 101, 101, 112, 91, 48, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 97, 99, 107, 95, 115, 112, 114, 105, 116, 101, 115, 32, > 58, 32, 95, 110, 98, 95, 115, 99, 97, 108, 101, 115, 62, 61, 48, 44, > 48, 60, 61, 95, 109, 105, 110, 95, 115, 99, 97, 108, 101, 60, 61, 49, > 48, 48, 44, 95, 97, 108, 108, 111, 119, 95, 114, 111, 116, 97, 116, 105, > 111, 110, 61, 123, 32, 48, 61, 48, 32, 100, 101, 103, 46, 32, 124, 32, > 49, 61, 49, 56, 48, 32, 100, 101, 103, 46, 32, 124, 32, 50, 61, 57, > 48, 32, 100, 101, 103, 46, 32, 124, 32, 51, 61, 97, 110, 121, 32, 125, > 44, 95, 115, 112, 97, 99, 105, 110, 103, 44, 95, 112, 114, 101, 99, 105, > 115, 105, 111, 110, 62, 61, 48, 44, 109, 97, 120, 95, 105, 116, 101, 114, > 97, 116, 105, 111, 110, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 84, 114, 121, 32, 116, 111, 32, 114, 97, 110, 100, 111, 109, > 108, 121, 32, 112, 97, 99, 107, 32, 97, 115, 32, 109, 97, 110, 121, 32, > 115, 112, 114, 105, 116, 101, 115, 32, 97, 115, 32, 112, 111, 115, 115, 105, > 98, 108, 101, 32, 111, 110, 116, 111, 32, 116, 104, 101, 32, 39, 101, 109, > 112, 116, 121, 39, 32, 97, 114, 101, 97, 115, 32, 111, 102, 32, 97, 110, > 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 83, 112, 114, 105, 116, 101, 115, 32, 99, 97, 110, 32, 98, 101, 32, > 101, 118, 101, 110, 116, 117, 97, 108, 108, 121, 32, 114, 111, 116, 97, 116, > 101, 100, 32, 97, 110, 100, 32, 115, 99, 97, 108, 101, 100, 32, 100, 117, > 114, 105, 110, 103, 32, 116, 104, 101, 32, 112, 97, 99, 107, 105, 110, 103, > 32, 112, 114, 111, 99, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 70, 105, 114, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 116, 104, 101, 32, 99, > 97, 110, 118, 97, 115, 32, 116, 104, 97, 116, 32, 119, 105, 108, 108, 32, > 98, 101, 32, 102, 105, 108, 108, 101, 100, 32, 119, 105, 116, 104, 32, 116, > 104, 101, 32, 115, 112, 114, 105, 116, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 116, 115, 32, 108, 97, 115, 116, 32, 99, 104, > 97, 110, 110, 101, 108, 32, 109, 117, 115, 116, 32, 98, 101, 32, 97, 32, > 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, 32, 119, 104, 111, 115, > 101, 32, 122, 101, 114, 111, 32, 118, 97, 108, 117, 101, 115, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 32, 112, 111, 116, 101, 110, 116, 105, 97, > 108, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 32, 102, 111, 114, 32, > 100, 114, 97, 119, 105, 110, 103, 32, 116, 104, 101, 32, 115, 112, 114, 105, > 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 108, > 108, 32, 111, 116, 104, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 32, 116, 104, 101, 32, 115, 112, 114, 105, 116, 101, 115, 32, 99, 111, > 110, 115, 105, 100, 101, 114, 101, 100, 32, 102, 111, 114, 32, 112, 97, 99, > 107, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, > 104, 101, 105, 114, 32, 108, 97, 115, 116, 32, 99, 104, 97, 110, 110, 101, > 108, 32, 109, 117, 115, 116, 32, 98, 101, 32, 97, 32, 98, 105, 110, 97, > 114, 121, 32, 109, 97, 115, 107, 32, 116, 104, 97, 116, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 115, 32, 116, 104, 101, 32, 115, 112, 114, 105, > 116, 101, 32, 115, 104, 97, 112, 101, 32, 40, 105, 46, 101, 46, 32, 97, > 32, 56, 45, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, 111, 109, > 112, 111, 110, 101, 110, 116, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 84, 104, 101, 32, 111, 114, 100, 101, 114, 32, 111, 102, 32, 115, > 112, 114, 105, 116, 101, 32, 112, 97, 99, 107, 105, 110, 103, 32, 102, 111, > 108, 108, 111, 119, 115, 32, 116, 104, 101, 32, 111, 114, 100, 101, 114, 32, > 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 112, 114, > 105, 116, 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 105, 109, 97, 103, > 101, 32, 108, 105, 115, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 83, 112, 114, 105, 116, 101, 32, 112, 97, 99, 107, 105, 110, 103, 32, > 105, 115, 32, 100, 111, 110, 101, 32, 111, 110, 32, 114, 97, 110, 100, 111, > 109, 32, 108, 111, 99, 97, 116, 105, 111, 110, 115, 32, 97, 110, 100, 32, > 105, 116, 101, 114, 97, 116, 105, 118, 101, 108, 121, 32, 119, 105, 116, 104, > 32, 100, 101, 99, 114, 101, 97, 115, 105, 110, 103, 32, 115, 99, 97, 108, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 110, 98, > 95, 115, 99, 97, 108, 101, 115, 39, 32, 115, 101, 116, 115, 32, 116, 104, > 101, 32, 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 100, 101, 99, 114, > 101, 97, 115, 105, 110, 103, 32, 115, 99, 97, 108, 101, 115, 32, 99, 111, > 110, 115, 105, 100, 101, 114, 101, 100, 32, 102, 111, 114, 32, 97, 108, 108, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 112, 114, 105, 116, > 101, 115, 32, 116, 111, 32, 98, 101, 32, 112, 97, 99, 107, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 109, 105, 110, 95, 115, > 99, 97, 108, 101, 39, 32, 40, 105, 110, 32, 37, 41, 32, 115, 101, 116, > 115, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 115, 105, > 122, 101, 32, 99, 111, 110, 115, 105, 100, 101, 114, 101, 100, 32, 102, 111, > 114, 32, 112, 97, 99, 107, 105, 110, 103, 32, 40, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 97, 115, 32, 97, 32, 112, 101, 114, 99, 101, 110, > 116, 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 111, 114, 105, 103, > 105, 110, 97, 108, 32, 115, 112, 114, 105, 116, 101, 32, 115, 105, 122, 101, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 115, 112, 97, > 99, 105, 110, 103, 39, 32, 99, 97, 110, 32, 98, 101, 32, 112, 111, 115, > 105, 116, 105, 118, 101, 32, 111, 114, 32, 110, 101, 103, 97, 116, 105, 118, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 112, 114, 101, > 99, 105, 115, 105, 111, 110, 39, 32, 116, 101, 108, 108, 115, 32, 97, 98, > 111, 117, 116, 32, 116, 104, 101, 32, 100, 101, 115, 105, 114, 101, 100, 32, > 110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 102, 97, 105, 108, 101, 100, > 32, 116, 114, 105, 97, 108, 115, 32, 98, 101, 102, 111, 114, 101, 32, 101, > 110, 100, 105, 110, 103, 32, 116, 104, 101, 32, 102, 105, 108, 108, 105, 110, > 103, 32, 112, 114, 111, 99, 101, 115, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 115, 61, 53, > 39, 44, 32, 39, 109, 105, 110, 95, 115, 99, 97, 108, 101, 61, 50, 53, > 39, 44, 32, 39, 97, 108, 108, 111, 119, 95, 114, 111, 116, 97, 116, 105, > 111, 110, 61, 51, 39, 44, 32, 39, 115, 112, 97, 99, 105, 110, 103, 61, > 49, 39, 44, 32, 39, 112, 114, 101, 99, 105, 115, 105, 111, 110, 61, 55, > 39, 32, 97, 110, 100, 32, 39, 109, 97, 120, 95, 105, 116, 101, 114, 97, > 116, 105, 111, 110, 115, 61, 50, 53, 54, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 53, 49, 50, 44, 53, 49, 50, 44, 49, > 44, 51, 44, 34, 109, 105, 110, 40, 50, 53, 53, 44, 121, 42, 99, 47, > 50, 41, 34, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 99, > 105, 114, 99, 108, 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, 49, 48, > 48, 44, 49, 44, 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 32, > 99, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 115, > 105, 122, 101, 50, 100, 121, 91, 45, 49, 93, 32, 50, 52, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 112, 97, 99, 107, 95, 115, 112, 114, > 105, 116, 101, 115, 32, 51, 44, 50, 53, 10, 112, 97, 99, 107, 95, 115, > 112, 114, 105, 116, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 53, 125, 41, 32, 38, > 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 50, > 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, 48, > 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, 61, 51, 125, > 41, 32, 38, 38, 32, 36, 51, 62, 61, 48, 32, 38, 38, 32, 36, 51, > 60, 61, 51, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 52, > 61, 49, 125, 41, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 53, 61, 55, 125, 41, 32, 38, 38, 32, 36, 53, 62, 61, 48, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 54, 61, 50, 53, 54, 125, > 41, 32, 38, 38, 32, 36, 54, 62, 61, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 82, 97, 110, 100, 111, 109, 108, 121, 32, 112, 97, > 99, 107, 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, > 36, 49, 32, 115, 99, 97, 108, 101, 115, 44, 32, 109, 105, 110, 105, 109, > 117, 109, 32, 115, 99, 97, 108, 101, 32, 36, 50, 37, 44, 32, 34, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 51, 44, 110, 111, 44, 49, > 56, 48, 92, 34, 92, 32, 92, 34, 100, 101, 103, 46, 44, 57, 48, 92, > 34, 92, 32, 92, 34, 100, 101, 103, 46, 44, 97, 110, 121, 125, 34, 32, > 114, 111, 116, 97, 116, 105, 111, 110, 44, 32, 115, 112, 97, 99, 105, 110, > 103, 32, 36, 52, 44, 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, > 36, 53, 32, 97, 110, 100, 32, 36, 54, 32, 109, 97, 120, 105, 109, 117, > 109, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 46, 34, 10, 45, > 118, 32, 45, 32, 78, 61, 123, 64, 35, 45, 49, 125, 32, 105, 115, 95, > 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 61, 49, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 123, 109, 97, 120, 40, > 50, 44, 64, 123, 36, 62, 44, 115, 125, 41, 125, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 114, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 123, 36, 62, 42, 49, 48, 48, 47, > 36, 49, 125, 10, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, 61, > 48, 10, 114, 97, 116, 105, 111, 61, 123, 105, 102, 40, 36, 49, 62, 49, > 44, 36, 50, 43, 40, 49, 48, 48, 45, 36, 50, 41, 42, 36, 60, 47, > 40, 36, 49, 45, 49, 41, 44, 49, 48, 48, 41, 125, 37, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 78, 32, 45, 45, 108, 91, 123, 49, 43, > 36, 62, 125, 93, 10, 119, 61, 123, 119, 42, 36, 114, 97, 116, 105, 111, > 125, 32, 104, 61, 123, 104, 42, 36, 114, 97, 116, 105, 111, 125, 10, 45, > 105, 102, 32, 123, 36, 119, 60, 49, 124, 124, 36, 104, 60, 49, 125, 32, > 45, 114, 109, 10, 45, 101, 108, 115, 101, 32, 45, 114, 32, 36, 119, 44, > 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 115, 104, 91, > 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, > 101, 113, 91, 45, 49, 93, 32, 48, 32, 97, 114, 101, 97, 123, 49, 43, > 36, 62, 125, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 108, 91, 48, 44, 123, 36, 78, 43, > 49, 125, 45, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 54, 10, 105, 110, 100, 61, 123, 49, 43, 40, 36, 62, 37, 36, 78, 41, > 125, 32, 97, 114, 101, 97, 61, 36, 123, 97, 114, 101, 97, 36, 105, 110, > 100, 125, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, 48, 125, 32, 91, > 36, 105, 110, 100, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, > 61, 49, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 36, 105, 110, > 100, 93, 32, 123, 114, 111, 117, 110, 100, 40, 63, 41, 42, 49, 56, 48, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 50, 125, 32, > 45, 45, 114, 111, 116, 97, 116, 101, 91, 36, 105, 110, 100, 93, 32, 123, > 114, 111, 117, 110, 100, 40, 63, 40, 51, 41, 41, 42, 57, 48, 125, 10, > 45, 101, 108, 115, 101, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 36, > 105, 110, 100, 93, 32, 123, 63, 42, 51, 54, 48, 125, 32, 45, 115, 104, > 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 110, 101, 113, 91, 45, 49, 93, 32, 48, 32, 97, 114, 101, 97, 61, 64, > 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 48, 93, 32, 49, 48, 48, 37, 32, 45, 101, 113, 91, 45, 49, 93, > 32, 48, 10, 45, 105, 102, 32, 123, 36, 52, 62, 49, 125, 32, 45, 101, > 114, 111, 100, 101, 91, 45, 49, 93, 32, 123, 50, 42, 36, 52, 45, 49, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 60, 49, 125, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 123, 45, 50, 42, 36, > 52, 43, 51, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 70, 70, > 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 105, 102, 32, 36, 105, 115, > 95, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 32, 45, 110, 111, 105, > 115, 101, 91, 45, 49, 93, 32, 48, 46, 49, 44, 50, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 48, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, > 44, 49, 10, 45, 109, 97, 120, 95, 112, 97, 116, 99, 104, 91, 45, 49, > 93, 32, 123, 114, 111, 117, 110, 100, 40, 49, 46, 53, 42, 64, 123, 36, > 105, 110, 100, 44, 109, 97, 120, 40, 119, 44, 104, 41, 125, 41, 125, 10, > 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 112, 111, 105, > 110, 116, 99, 108, 111, 117, 100, 51, 100, 91, 45, 49, 93, 10, 45, 105, > 102, 32, 123, 36, 78, 62, 49, 125, 32, 45, 108, 91, 45, 49, 93, 10, > 45, 115, 51, 100, 32, 45, 47, 91, 49, 93, 32, 36, 78, 32, 45, 114, > 111, 117, 110, 100, 91, 49, 93, 32, 45, 109, 97, 120, 91, 49, 93, 32, > 49, 32, 110, 61, 64, 123, 49, 44, 48, 125, 10, 45, 114, 91, 50, 93, > 32, 51, 44, 123, 64, 123, 50, 44, 104, 125, 47, 51, 125, 44, 49, 44, > 49, 44, 45, 49, 10, 45, 105, 91, 50, 93, 32, 49, 44, 64, 123, 50, > 44, 104, 125, 32, 45, 114, 97, 110, 100, 91, 50, 93, 32, 48, 44, 49, > 32, 45, 97, 91, 50, 44, 51, 93, 32, 120, 32, 45, 115, 111, 114, 116, > 91, 50, 93, 32, 43, 44, 121, 32, 45, 122, 91, 50, 93, 32, 49, 44, > 51, 32, 45, 114, 91, 50, 93, 32, 51, 44, 36, 110, 44, 49, 44, 49, > 32, 45, 121, 91, 50, 93, 10, 45, 114, 91, 51, 93, 32, 49, 44, 123, > 50, 42, 36, 110, 125, 44, 49, 44, 49, 44, 48, 32, 45, 114, 91, 52, > 93, 32, 49, 44, 123, 51, 42, 36, 110, 125, 44, 49, 44, 49, 44, 48, > 32, 45, 114, 91, 53, 93, 32, 49, 44, 36, 110, 44, 49, 44, 49, 44, > 48, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, > 100, 105, 102, 10, 110, 61, 64, 123, 45, 49, 44, 55, 125, 10, 45, 105, > 102, 32, 36, 110, 10, 45, 115, 51, 100, 91, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 51, > 61, 61, 48, 125, 10, 91, 45, 54, 93, 32, 45, 105, 91, 45, 50, 93, > 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, > 115, 125, 41, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 52, > 44, 123, 36, 110, 45, 49, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, > 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, 93, 32, 49, 48, 48, > 37, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, > 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 49, 125, 32, 91, 45, 51, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 49, 125, > 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 54, 93, 32, 123, 114, > 111, 117, 110, 100, 40, 63, 40, 49, 41, 41, 42, 49, 56, 48, 125, 32, > 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, > 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, 123, 36, > 110, 62, 49, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, > 93, 32, 49, 56, 48, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, 50, > 125, 32, 52, 44, 123, 36, 110, 45, 50, 125, 44, 49, 44, 49, 44, 45, > 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 45, 52, 93, 32, 49, 48, 48, 37, 32, 45, 105, 91, > 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, > 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, 123, 36, 110, 62, 49, > 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 52, 93, > 32, 49, 48, 48, 37, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, 50, > 125, 32, 91, 45, 53, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 115, 101, 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 54, 93, > 32, 123, 114, 111, 117, 110, 100, 40, 63, 40, 51, 41, 41, 42, 57, 48, > 125, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, > 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 49, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, > 45, 49, 93, 32, 57, 48, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, > 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, > 50, 125, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, > 57, 48, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, > 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 62, 51, 125, 32, 45, > 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 57, 48, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 52, 125, 32, 52, 44, 123, 36, 110, > 45, 52, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, > 44, 48, 32, 49, 44, 49, 48, 48, 37, 32, 45, 114, 97, 110, 100, 91, > 45, 49, 93, 32, 48, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 49, 93, 32, 49, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 56, 93, > 32, 49, 48, 48, 37, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 49, 125, 32, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 56, 93, 32, 49, 48, 48, 37, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 50, 125, 32, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 56, 93, 32, 49, 48, 48, 37, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 51, 125, 32, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 56, 93, 32, 49, 48, 48, 37, 32, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 123, 115, 125, 41, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 52, 125, 32, 91, 45, 57, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 121, > 91, 123, 36, 78, 43, 51, 125, 45, 45, 49, 93, 32, 45, 97, 91, 123, > 36, 78, 43, 51, 125, 45, 45, 49, 93, 32, 121, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 109, 91, 45, 51, 93, 10, 91, 48, 93, 32, 45, > 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 32, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 45, 91, 45, 49, 93, > 32, 91, 45, 52, 93, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 51, 44, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 97, 114, 101, 97, 95, 102, 103, 91, 45, 49, 93, > 32, 48, 44, 49, 32, 45, 101, 113, 91, 45, 49, 93, 32, 36, 97, 114, > 101, 97, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 114, 109, 91, 45, 51, 93, 32, 45, 115, 104, 91, 45, 50, 93, 32, 48, > 44, 64, 123, 45, 50, 44, 115, 45, 50, 125, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 105, 77, 125, 32, 45, 106, 91, 48, 93, 32, 91, 45, > 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, > 115, 101, 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 110, 98, > 95, 97, 116, 116, 101, 109, 112, 116, 115, 61, 123, 36, 110, 98, 95, 97, > 116, 116, 101, 109, 112, 116, 115, 43, 49, 125, 10, 45, 105, 102, 32, 123, > 36, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, 62, 36, 53, 125, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 108, 115, 101, 32, 45, 99, > 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 32, 45, 107, 91, 48, > 93, 32, 45, 101, 110, 100, 108, 10, 45, 100, 111, 110, 101, 32, 45, 107, > 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 105, 101, 99, 104, 97, 114, 116, 32, 58, 32, 108, 97, 98, 101, 108, > 95, 104, 101, 105, 103, 104, 116, 62, 61, 48, 44, 108, 97, 98, 101, 108, > 95, 82, 44, 108, 97, 98, 101, 108, 95, 71, 44, 108, 97, 98, 101, 108, > 95, 66, 44, 34, 108, 97, 98, 101, 108, 49, 34, 44, 118, 97, 108, 117, > 101, 49, 44, 82, 49, 44, 71, 49, 44, 66, 49, 44, 46, 46, 46, 44, > 34, 108, 97, 98, 101, 108, 78, 34, 44, 118, 97, 108, 117, 101, 78, 44, > 82, 78, 44, 71, 78, 44, 66, 78, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 114, 97, 119, 32, 112, 105, 101, 32, 99, 104, 97, 114, 116, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 40, 82, 71, > 66, 41, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 112, 105, 101, 99, 104, 97, 114, 116, 32, 50, 53, 44, 48, 44, 48, > 44, 48, 44, 34, 82, 101, 100, 34, 44, 53, 53, 44, 50, 53, 53, 44, > 48, 44, 48, 44, 34, 71, 114, 101, 101, 110, 34, 44, 52, 48, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 34, 66, 108, 117, 101, 34, 44, 51, 48, > 44, 49, 50, 56, 44, 49, 50, 56, 44, 50, 53, 53, 44, 34, 79, 116, > 104, 101, 114, 34, 44, 53, 44, 49, 50, 56, 44, 49, 50, 56, 44, 49, > 50, 56, 10, 112, 105, 101, 99, 104, 97, 114, 116, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 49, 62, 61, 48, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 68, 114, 97, 119, 32, 112, 105, 101, 32, 99, 104, 97, > 114, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 108, 97, 98, 101, 108, 32, 104, 101, 105, 103, 104, 116, > 32, 36, 49, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, 36, > 50, 44, 36, 51, 44, 36, 52, 41, 46, 34, 10, 45, 118, 32, 45, 32, > 36, 61, 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 108, 108, 105, 112, 115, 101, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 123, 119, 47, 50, 45, 49, 125, > 44, 123, 104, 47, 50, 45, 49, 125, 44, 48, 44, 49, 44, 49, 10, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 53, 48, 37, 44, 53, 48, 37, 44, > 123, 119, 47, 50, 45, 49, 125, 44, 123, 104, 47, 50, 45, 49, 125, 44, > 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 10, 40, > 36, 123, 54, 45, 45, 49, 58, 53, 125, 41, 32, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 10, 116, 104, > 101, 116, 97, 61, 48, 10, 45, 105, 102, 32, 123, 119, 62, 49, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 10, 120, 101, 61, 123, > 48, 46, 53, 42, 64, 123, 45, 50, 44, 119, 125, 42, 40, 49, 43, 99, > 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 41, 125, 10, 121, 101, 61, > 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, 104, 125, 42, 40, 49, 43, > 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 41, 125, 10, 45, 108, > 105, 110, 101, 91, 45, 50, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, > 36, 120, 101, 44, 36, 121, 101, 10, 116, 104, 101, 116, 97, 61, 123, 36, > 116, 104, 101, 116, 97, 45, 50, 42, 112, 105, 42, 105, 40, 36, 62, 41, > 125, 10, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 116, > 104, 101, 116, 97, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 119, 125, 32, 45, 105, 102, 32, 123, 105, 40, 36, 62, 41, 125, 10, 110, > 116, 104, 101, 116, 97, 61, 123, 36, 116, 104, 101, 116, 97, 45, 50, 42, > 112, 105, 42, 105, 40, 36, 62, 41, 125, 10, 120, 99, 61, 123, 48, 46, > 53, 42, 64, 123, 45, 50, 44, 119, 125, 42, 40, 49, 43, 48, 46, 53, > 42, 99, 111, 115, 40, 48, 46, 53, 42, 40, 36, 110, 116, 104, 101, 116, > 97, 43, 36, 116, 104, 101, 116, 97, 41, 41, 41, 125, 10, 121, 99, 61, > 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, 104, 125, 42, 40, 49, 43, > 48, 46, 53, 42, 115, 105, 110, 40, 48, 46, 53, 42, 40, 36, 110, 116, > 104, 101, 116, 97, 43, 36, 116, 104, 101, 116, 97, 41, 41, 41, 125, 10, > 120, 102, 61, 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, 119, 125, 42, > 40, 49, 43, 48, 46, 56, 42, 99, 111, 115, 40, 48, 46, 53, 42, 40, > 36, 110, 116, 104, 101, 116, 97, 43, 36, 116, 104, 101, 116, 97, 41, 41, > 41, 125, 10, 121, 102, 61, 123, 48, 46, 53, 42, 64, 123, 45, 50, 44, > 104, 125, 42, 40, 49, 43, 48, 46, 56, 42, 115, 105, 110, 40, 48, 46, > 53, 42, 40, 36, 110, 116, 104, 101, 116, 97, 43, 36, 116, 104, 101, 116, > 97, 41, 41, 41, 125, 10, 45, 102, 108, 111, 111, 100, 91, 45, 50, 93, > 32, 36, 120, 102, 44, 36, 121, 102, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 36, 123, 97, 114, 103, 123, 55, 43, 53, 42, 36, 62, 125, 125, 44, > 36, 123, 97, 114, 103, 123, 56, 43, 53, 42, 36, 62, 125, 125, 44, 36, > 123, 97, 114, 103, 123, 57, 43, 53, 42, 36, 62, 125, 125, 10, 45, 105, > 102, 32, 123, 97, 98, 115, 40, 36, 110, 116, 104, 101, 116, 97, 45, 36, > 116, 104, 101, 116, 97, 41, 62, 48, 46, 49, 125, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 36, 123, 97, 114, 103, 123, 53, 43, 53, 42, 36, > 62, 125, 125, 44, 48, 44, 48, 44, 36, 49, 44, 49, 44, 49, 10, 40, > 36, 50, 94, 36, 51, 94, 36, 52, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 32, 45, > 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 106, 91, 45, 52, > 93, 32, 91, 45, 49, 93, 44, 123, 36, 120, 99, 45, 119, 47, 50, 125, > 44, 123, 36, 121, 99, 45, 104, 47, 50, 125, 44, 48, 44, 48, 44, 49, > 44, 91, 45, 50, 93, 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 116, 104, 101, 116, 97, 61, 36, 110, > 116, 104, 101, 116, 97, 10, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, > 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 108, 97, 115, 109, 97, 32, 58, 32, 95, 97, 108, 112, > 104, 97, 44, 95, 95, 98, 101, 116, 97, 44, 95, 115, 99, 97, 108, 101, > 62, 61, 48, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 114, 97, 119, 32, 97, 32, 114, 97, 110, 100, 111, 109, > 32, 99, 111, 108, 111, 114, 101, 100, 32, 112, 108, 97, 115, 109, 97, 32, > 102, 114, 97, 99, 116, 97, 108, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 115, 32, 116, 104, 101, > 32, 115, 111, 45, 99, 97, 108, 108, 101, 100, 32, 39, 68, 105, 97, 109, > 111, 110, 100, 45, 83, 113, 117, 97, 114, 101, 39, 32, 97, 108, 103, 111, > 114, 105, 116, 104, 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 97, 108, 112, 104, 97, 61, 49, 39, 44, 32, 39, 98, 101, 116, 97, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 115, 99, 97, 108, 101, 61, 56, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, > 48, 44, 52, 48, 48, 44, 49, 44, 51, 32, 45, 112, 108, 97, 115, 109, > 97, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 105, 110, 116, 32, 58, > 32, 120, 91, 37, 93, 44, 121, 91, 37, 93, 44, 95, 122, 91, 37, 93, > 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, 111, 108, 111, 114, > 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 83, 101, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, 112, 105, 120, 101, 108, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 122, 61, > 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, > 48, 48, 32, 45, 112, 111, 105, 110, 116, 32, 123, 63, 40, 49, 48, 48, > 41, 125, 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, 44, > 49, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 111, 108, 107, 97, 95, 100, 111, 116, > 115, 32, 58, 32, 100, 105, 97, 109, 101, 116, 101, 114, 62, 61, 48, 44, > 95, 100, 101, 110, 115, 105, 116, 121, 44, 95, 111, 102, 102, 115, 101, 116, > 49, 44, 95, 111, 102, 102, 115, 101, 116, 50, 44, 95, 97, 110, 103, 108, > 101, 44, 95, 97, 108, 105, 97, 115, 105, 110, 103, 44, 95, 115, 104, 97, > 100, 105, 110, 103, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 99, > 111, 108, 111, 114, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 114, 97, 119, 32, 100, 111, 116, 115, 32, 112, 97, 116, 116, > 101, 114, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 50, 48, 39, 44, 32, 39, > 111, 102, 102, 115, 101, 116, 49, 61, 111, 102, 102, 115, 101, 116, 50, 61, > 53, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 44, 32, > 39, 97, 108, 105, 97, 115, 105, 110, 103, 61, 49, 48, 39, 44, 32, 39, > 115, 104, 97, 100, 105, 110, 103, 61, 49, 39, 44, 32, 39, 111, 112, 97, > 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, > 111, 114, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, > 111, 108, 107, 97, 95, 100, 111, 116, 115, 32, 49, 48, 44, 49, 53, 44, > 48, 44, 48, 44, 50, 48, 44, 49, 48, 44, 49, 44, 48, 46, 53, 44, > 48, 44, 49, 50, 56, 44, 50, 53, 53, 10, 112, 111, 108, 107, 97, 95, > 100, 111, 116, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 49, > 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 48, > 125, 44, 36, 123, 51, 61, 53, 48, 125, 44, 36, 123, 52, 61, 53, 48, > 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 49, 48, 125, > 44, 36, 123, 55, 61, 49, 125, 44, 36, 123, 56, 61, 49, 125, 44, 36, > 123, 57, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 68, 114, 97, 119, 32, 112, 111, 108, 107, 97, 32, 100, 111, 116, 115, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 100, 105, 97, 109, 101, 116, 101, 114, 32, 36, 49, 44, 32, 100, > 101, 110, 115, 105, 116, 121, 32, 36, 50, 44, 32, 97, 110, 103, 108, 101, > 32, 36, 51, 32, 100, 101, 103, 46, 44, 32, 115, 104, 105, 102, 116, 32, > 40, 36, 52, 44, 36, 53, 41, 44, 32, 97, 108, 105, 97, 115, 105, 110, > 103, 32, 36, 54, 32, 97, 110, 100, 32, 115, 104, 97, 100, 105, 110, 103, > 32, 36, 55, 46, 34, 10, 45, 118, 32, 45, 32, 116, 104, 101, 116, 97, > 61, 123, 36, 53, 42, 112, 105, 47, 49, 56, 48, 125, 32, 99, 116, 61, > 123, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 115, 116, > 61, 123, 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 109, > 105, 100, 49, 61, 123, 36, 49, 47, 50, 125, 32, 109, 105, 100, 50, 61, > 123, 36, 50, 47, 50, 125, 10, 45, 105, 91, 48, 93, 32, 40, 36, 123, > 57, 45, 45, 49, 125, 41, 32, 45, 121, 91, 48, 93, 32, 99, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 87, 72, > 61, 123, 109, 97, 120, 40, 119, 44, 104, 41, 125, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 34, 120, 110, > 32, 61, 32, 49, 48, 48, 42, 120, 47, 34, 36, 87, 72, 34, 45, 36, > 51, 59, 32, 121, 110, 32, 61, 32, 49, 48, 48, 42, 121, 47, 34, 36, > 87, 72, 34, 45, 36, 52, 59, 32, 92, 10, 120, 114, 32, 61, 32, 120, > 110, 42, 34, 36, 99, 116, 34, 45, 121, 110, 42, 34, 36, 115, 116, 34, > 59, 32, 121, 114, 32, 61, 32, 120, 110, 42, 34, 36, 115, 116, 34, 43, > 121, 110, 42, 34, 36, 99, 116, 34, 59, 32, 92, 10, 120, 99, 32, 61, > 32, 120, 114, 37, 36, 50, 45, 34, 36, 109, 105, 100, 50, 34, 59, 32, > 121, 99, 32, 61, 32, 121, 114, 37, 36, 50, 45, 34, 36, 109, 105, 100, > 50, 34, 59, 32, 92, 10, 34, 36, 109, 105, 100, 49, 34, 45, 115, 113, > 114, 116, 40, 120, 99, 42, 120, 99, 43, 121, 99, 42, 121, 99, 41, 34, > 10, 45, 42, 91, 45, 49, 93, 32, 36, 54, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 36, 55, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 36, 56, 32, 40, 36, 123, 57, 45, 45, 49, 125, 41, 32, 45, 121, 91, > 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 91, 45, 50, 93, 10, 45, 106, 91, 45, > 51, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 112, 111, 108, 121, 103, 111, 110, 32, 58, 32, 78, > 62, 61, 49, 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, > 46, 46, 44, 120, 78, 91, 37, 93, 44, 121, 78, 91, 37, 93, 44, 95, > 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 78, 45, 118, 101, 114, 116, 105, 99, 101, 115, 32, 112, 111, 108, > 121, 103, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, 32, 105, 115, 32, 97, > 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 110, 117, > 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, > 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, 99, 104, 32, 99, 97, > 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, 105, 102, 32, 97, 32, > 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 46, 32, 73, 102, 32, 97, 32, 112, 97, 116, 116, 101, 114, 110, > 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 44, 32, 116, > 104, 101, 32, 112, 111, 108, 121, 103, 111, 110, 32, 105, 115, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 100, 114, 97, 119, 110, 32, 111, 117, 116, > 108, 105, 110, 101, 100, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, > 32, 102, 105, 108, 108, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 44, 32, 39, > 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, 110, 100, 101, 102, 105, 110, > 101, 100, 41, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, 111, 108, 121, 103, > 111, 110, 32, 52, 44, 50, 48, 37, 44, 50, 48, 37, 44, 56, 48, 37, > 44, 51, 48, 37, 44, 56, 48, 37, 44, 55, 48, 37, 44, 50, 48, 37, > 44, 56, 48, 37, 44, 48, 46, 51, 44, 48, 44, 50, 53, 53, 44, 48, > 32, 45, 112, 111, 108, 121, 103, 111, 110, 32, 52, 44, 50, 48, 37, 44, > 50, 48, 37, 44, 56, 48, 37, 44, 51, 48, 37, 44, 56, 48, 37, 44, > 55, 48, 37, 44, 50, 48, 37, 44, 56, 48, 37, 44, 49, 44, 48, 120, > 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 50, 44, 49, 54, 44, 49, 44, 49, 44, 39, 63, 40, 105, 102, > 40, 120, 44, 64, 123, 45, 49, 44, 104, 125, 44, 64, 123, 45, 49, 44, > 119, 125, 41, 41, 39, 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, > 50, 93, 32, 123, 104, 125, 44, 64, 45, 49, 44, 48, 46, 54, 44, 50, > 53, 53, 44, 48, 44, 50, 53, 53, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, 105, 118, > 101, 114, 32, 58, 32, 91, 102, 117, 110, 99, 116, 105, 111, 110, 95, 105, > 109, 97, 103, 101, 93, 44, 95, 115, 97, 109, 112, 108, 105, 110, 103, 62, > 48, 44, 95, 102, 97, 99, 116, 111, 114, 44, 95, 105, 115, 95, 97, 114, > 114, 111, 119, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 111, > 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, 116, 101, 114, 110, 44, > 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 50, 100, 32, 118, 101, 99, 116, > 111, 114, 47, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 102, > 105, 101, 108, 100, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, 32, 105, 115, 32, 97, > 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 110, 117, > 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 119, 105, > 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, 99, 104, 32, 99, 97, > 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, 105, 102, 32, 97, 32, > 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 97, > 109, 112, 108, 105, 110, 103, 61, 50, 53, 39, 44, 32, 39, 102, 97, 99, > 116, 111, 114, 61, 45, 50, 48, 39, 44, 32, 39, 105, 115, 95, 97, 114, > 114, 111, 119, 61, 49, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, 49, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, > 48, 48, 44, 49, 48, 48, 44, 49, 44, 50, 44, 39, 105, 102, 40, 99, > 61, 61, 48, 44, 120, 45, 119, 47, 50, 44, 121, 45, 104, 47, 50, 41, > 39, 32, 53, 48, 48, 44, 53, 48, 48, 44, 49, 44, 51, 44, 50, 53, > 53, 32, 45, 113, 117, 105, 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 49, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 101, 115, > 105, 122, 101, 50, 100, 121, 32, 54, 48, 48, 32, 45, 108, 117, 109, 105, > 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 103, 114, 97, 100, 105, 101, > 110, 116, 91, 48, 93, 32, 45, 109, 117, 108, 91, 49, 93, 32, 45, 49, > 32, 45, 114, 101, 118, 101, 114, 115, 101, 91, 48, 44, 49, 93, 32, 45, > 97, 112, 112, 101, 110, 100, 91, 48, 44, 49, 93, 32, 99, 32, 45, 98, > 108, 117, 114, 91, 48, 93, 32, 56, 32, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 48, 93, 32, 45, 113, 117, 105, 118, 101, 114, > 91, 49, 93, 32, 91, 48, 93, 44, 49, 48, 44, 49, 48, 44, 49, 44, > 48, 46, 56, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 101, 99, 116, 97, 110, 103, 108, 101, 32, 58, 32, 120, 48, 91, 37, 93, > 44, 121, 48, 91, 37, 93, 44, 120, 49, 91, 37, 93, 44, 121, 49, 91, > 37, 93, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 112, 97, 116, > 116, 101, 114, 110, 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 112, 97, 116, 116, 101, 114, 110, 39, > 32, 105, 115, 32, 97, 110, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 114, 116, 105, > 110, 103, 32, 119, 105, 116, 104, 32, 39, 48, 120, 39, 32, 119, 104, 105, > 99, 104, 32, 99, 97, 110, 32, 98, 101, 32, 111, 109, 105, 116, 116, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 101, 118, 101, 110, 32, > 105, 102, 32, 97, 32, 99, 111, 108, 111, 114, 32, 105, 115, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 46, 32, 73, 102, 32, 97, 32, 112, 97, > 116, 116, 101, 114, 110, 32, 105, 115, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 44, 32, 116, 104, 101, 32, 114, 101, 99, 116, 97, 110, 103, 108, > 101, 32, 105, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 114, > 97, 119, 110, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 105, 110, 115, > 116, 101, 97, 100, 32, 111, 102, 32, 102, 105, 108, 108, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 44, 32, 39, 112, 97, 116, 116, 101, 114, 110, 61, 40, > 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, 32, 97, 110, 100, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 32, 45, 114, 101, 99, > 116, 97, 110, 103, 108, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, > 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 49, 48, > 48, 41, 125, 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 48, > 46, 51, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, > 10, 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 53, 61, 49, 125, 44, 36, 123, 54, 61, 48, 125, > 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 53, 34, 39, 125, 41, > 32, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 61, 123, 64, 123, 45, > 49, 44, 48, 45, 49, 125, 39, 61, 61, 39, 123, 39, 48, 120, 39, 125, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 45, > 105, 102, 32, 36, 105, 115, 95, 112, 97, 116, 116, 101, 114, 110, 10, 45, > 101, 91, 48, 45, 45, 51, 93, 32, 34, 68, 114, 97, 119, 32, 111, 117, > 116, 108, 105, 110, 101, 100, 32, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 32, 102, 114, 111, 109, 32, 40, 36, 49, 44, 36, 50, 41, 32, 116, 111, > 32, 40, 36, 51, 44, 36, 52, 41, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 53, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 123, 55, 45, 45, 49, 125, 41, 46, 34, 10, 45, 101, 108, 115, 101, > 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 68, 114, 97, 119, 32, > 102, 105, 108, 108, 101, 100, 32, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 32, 102, 114, 111, 109, 32, 40, 36, 49, 44, 36, 50, 41, 32, 116, 111, > 32, 40, 36, 51, 44, 36, 52, 41, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 53, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 123, 54, 45, 45, 49, 125, 41, 46, 34, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 118, 32, 45, 32, 45, 112, 111, 108, 121, 103, 111, 110, 32, > 52, 44, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 50, 44, 36, 51, > 44, 36, 52, 44, 36, 49, 44, 36, 52, 44, 36, 123, 53, 45, 45, 49, > 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 111, > 114, 115, 99, 104, 97, 99, 104, 32, 58, 32, 39, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 39, 44, 39, 109, 105, > 114, 114, 111, 114, 105, 110, 103, 61, 123, 32, 48, 61, 110, 111, 110, 101, > 32, 124, 32, 49, 61, 120, 32, 124, 32, 50, 61, 121, 32, 124, 32, 51, > 61, 120, 121, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 110, 100, 101, 114, 32, 114, 111, 114, 115, 99, 104, 97, 99, 104, 45, > 108, 105, 107, 101, 32, 105, 110, 107, 98, 108, 111, 116, 115, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 61, 53, 37, 39, 32, 97, 110, 100, 32, 39, > 109, 105, 114, 114, 111, 114, 105, 110, 103, 61, 49, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, > 32, 45, 114, 111, 114, 115, 99, 104, 97, 99, 104, 32, 51, 37, 10, 114, > 111, 114, 115, 99, 104, 97, 99, 104, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 53, 37, 125, 62, 61, 48, 32, 38, 38, > 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 49, 125, 41, 32, 38, > 38, 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 51, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, > 114, 32, 114, 111, 114, 115, 99, 104, 97, 99, 104, 45, 108, 105, 107, 101, > 32, 105, 110, 107, 98, 108, 111, 116, 115, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 32, 36, 49, 32, 97, 110, 100, 32, 34, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 36, 50, 44, 110, 111, 44, 120, 44, > 121, 44, 120, 121, 125, 34, 45, 109, 105, 114, 114, 111, 114, 105, 110, 103, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 50, 61, > 61, 48, 125, 10, 45, 114, 97, 110, 100, 32, 45, 49, 44, 49, 32, 45, > 98, 32, 36, 49, 32, 45, 103, 101, 32, 48, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 50, 61, 61, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, > 10, 45, 99, 111, 108, 117, 109, 110, 115, 32, 48, 44, 123, 119, 47, 50, > 45, 49, 125, 32, 45, 114, 97, 110, 100, 32, 45, 49, 44, 49, 32, 45, > 98, 32, 36, 49, 32, 45, 103, 101, 32, 48, 10, 45, 45, 109, 105, 114, > 114, 111, 114, 32, 120, 32, 45, 105, 102, 32, 123, 36, 119, 37, 50, 125, > 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 49, 44, > 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 120, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 104, 61, 123, > 104, 125, 10, 45, 114, 111, 119, 115, 32, 48, 44, 123, 104, 47, 50, 45, > 49, 125, 32, 45, 114, 97, 110, 100, 32, 45, 49, 44, 49, 32, 45, 98, > 32, 36, 49, 32, 45, 103, 101, 32, 48, 10, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 121, 32, 45, 105, 102, 32, 123, 36, 104, 37, 50, 125, 32, > 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 50, 61, 61, 51, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 10, 45, 122, 32, 48, 44, 48, 44, 123, 119, 47, 50, > 45, 49, 125, 44, 123, 104, 47, 50, 45, 49, 125, 32, 45, 114, 97, 110, > 100, 32, 45, 49, 44, 49, 32, 45, 98, 32, 36, 49, 32, 45, 103, 101, > 32, 48, 10, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 105, > 102, 32, 123, 36, 119, 37, 50, 125, 32, 45, 99, 111, 108, 117, 109, 110, > 115, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 97, 32, 120, 10, 45, 45, 109, 105, 114, 114, 111, > 114, 32, 121, 32, 45, 105, 102, 32, 123, 36, 104, 37, 50, 125, 32, 45, > 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 105, 101, 114, 112, > 105, 110, 115, 107, 105, 32, 58, 32, 114, 101, 99, 117, 114, 115, 105, 111, > 110, 95, 108, 101, 118, 101, 108, 62, 61, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 114, 97, 119, 32, 83, 105, 101, 114, 112, 105, 110, > 115, 107, 105, 32, 116, 114, 105, 97, 110, 103, 108, 101, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 101, 99, 117, 114, 115, > 105, 111, 110, 95, 108, 101, 118, 101, 108, 61, 55, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 55, > 10, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 123, 49, 61, 55, 125, 62, 61, 48, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 53, 48, 125, 44, 36, 123, 51, > 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 49, > 48, 48, 125, 44, 36, 123, 54, 61, 49, 48, 48, 125, 44, 36, 123, 55, > 61, 49, 48, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, > 114, 97, 119, 32, 83, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 116, > 114, 105, 97, 110, 103, 108, 101, 32, 111, 102, 32, 100, 101, 103, 114, 101, > 101, 32, 36, 49, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 95, 115, 105, 101, 114, 112, 105, 110, > 115, 107, 105, 32, 36, 123, 50, 45, 55, 125, 44, 36, 49, 32, 32, 45, > 118, 32, 43, 10, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, > 58, 10, 45, 105, 102, 32, 123, 36, 55, 60, 61, 48, 125, 32, 45, 112, > 111, 108, 121, 103, 111, 110, 32, 51, 44, 36, 49, 37, 44, 36, 50, 37, > 44, 36, 51, 37, 44, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, > 44, 49, 44, 50, 53, 53, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, > 107, 105, 32, 36, 49, 44, 36, 50, 44, 123, 40, 36, 49, 43, 36, 51, > 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 52, 41, 47, 50, 125, > 44, 123, 40, 36, 49, 43, 36, 53, 41, 47, 50, 125, 44, 123, 40, 36, > 50, 43, 36, 54, 41, 47, 50, 125, 44, 123, 36, 55, 45, 49, 125, 10, > 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 123, 40, 36, > 49, 43, 36, 51, 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 52, > 41, 47, 50, 125, 44, 36, 51, 44, 36, 52, 44, 123, 40, 36, 51, 43, > 36, 53, 41, 47, 50, 125, 44, 123, 40, 36, 52, 43, 36, 54, 41, 47, > 50, 125, 44, 123, 36, 55, 45, 49, 125, 10, 45, 95, 115, 105, 101, 114, > 112, 105, 110, 115, 107, 105, 32, 123, 40, 36, 49, 43, 36, 53, 41, 47, > 50, 125, 44, 123, 40, 36, 50, 43, 36, 54, 41, 47, 50, 125, 44, 36, > 53, 44, 36, 54, 44, 123, 40, 36, 51, 43, 36, 53, 41, 47, 50, 125, > 44, 123, 40, 36, 52, 43, 36, 54, 41, 47, 50, 125, 44, 123, 36, 55, > 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, 32, 115, 110, 111, 119, 102, > 108, 97, 107, 101, 32, 58, 32, 95, 114, 101, 99, 117, 114, 115, 105, 111, > 110, 62, 61, 48, 44, 95, 120, 48, 44, 95, 121, 48, 44, 95, 120, 49, > 44, 95, 121, 49, 44, 95, 120, 50, 44, 95, 121, 50, 44, 95, 111, 112, > 97, 99, 105, 116, 121, 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, 95, > 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, > 97, 119, 32, 97, 32, 75, 111, 99, 104, 32, 115, 110, 111, 119, 102, 108, > 97, 107, 101, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 114, 101, 99, 117, 114, 115, 105, 111, 110, 61, 52, 39, 44, 32, > 39, 120, 48, 61, 50, 48, 39, 44, 32, 39, 121, 48, 61, 55, 48, 39, > 44, 32, 39, 120, 49, 61, 56, 48, 39, 44, 32, 39, 121, 49, 61, 55, > 48, 39, 44, 32, 39, 120, 50, 61, 53, 48, 39, 44, 32, 39, 121, 50, > 61, 49, 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, > 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 49, 61, 50, 53, 53, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 115, 110, 111, 119, 102, 108, 97, 107, > 101, 32, 52, 10, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 52, 125, 62, 61, 48, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 48, 125, 44, 36, > 123, 51, 61, 55, 48, 125, 44, 36, 123, 52, 61, 56, 48, 125, 44, 36, > 123, 53, 61, 55, 48, 125, 44, 36, 123, 54, 61, 53, 48, 125, 44, 36, > 123, 55, 61, 49, 48, 125, 44, 36, 123, 56, 61, 49, 125, 44, 36, 123, > 57, 61, 50, 53, 53, 125, 10, 45, 118, 32, 45, 10, 45, 112, 111, 108, > 121, 103, 111, 110, 32, 51, 44, 36, 50, 37, 44, 36, 51, 37, 44, 36, > 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 44, 36, 55, 37, 44, 36, > 123, 56, 45, 45, 49, 125, 10, 45, 95, 115, 110, 111, 119, 102, 108, 97, > 107, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 54, 44, 36, > 55, 44, 36, 123, 56, 45, 45, 49, 125, 10, 45, 95, 115, 110, 111, 119, > 102, 108, 97, 107, 101, 32, 36, 49, 44, 36, 54, 44, 36, 55, 44, 36, > 52, 44, 36, 53, 44, 36, 123, 56, 45, 45, 49, 125, 10, 45, 95, 115, > 110, 111, 119, 102, 108, 97, 107, 101, 32, 36, 49, 44, 36, 52, 44, 36, > 53, 44, 36, 50, 44, 36, 51, 44, 36, 123, 56, 45, 45, 49, 125, 10, > 45, 118, 32, 43, 10, 95, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, > 58, 10, 120, 48, 61, 123, 36, 50, 43, 40, 36, 52, 45, 36, 50, 41, > 47, 51, 125, 32, 121, 48, 61, 123, 36, 51, 43, 40, 36, 53, 45, 36, > 51, 41, 47, 51, 125, 10, 120, 49, 61, 123, 36, 50, 43, 50, 42, 40, > 36, 52, 45, 36, 50, 41, 47, 51, 125, 32, 121, 49, 61, 123, 36, 51, > 43, 50, 42, 40, 36, 53, 45, 36, 51, 41, 47, 51, 125, 10, 99, 61, > 123, 99, 111, 115, 40, 45, 112, 105, 47, 51, 41, 125, 32, 115, 61, 123, > 115, 105, 110, 40, 45, 112, 105, 47, 51, 41, 125, 10, 120, 50, 61, 123, > 36, 120, 48, 43, 40, 36, 120, 49, 45, 36, 120, 48, 41, 42, 36, 99, > 45, 40, 36, 121, 49, 45, 36, 121, 48, 41, 42, 36, 115, 125, 32, 121, > 50, 61, 123, 36, 121, 48, 43, 40, 36, 120, 49, 45, 36, 120, 48, 41, > 42, 36, 115, 43, 40, 36, 121, 49, 45, 36, 121, 48, 41, 42, 36, 99, > 125, 10, 45, 112, 111, 108, 121, 103, 111, 110, 32, 51, 44, 36, 120, 48, > 37, 44, 36, 121, 48, 37, 44, 36, 120, 49, 37, 44, 36, 121, 49, 37, > 44, 36, 120, 50, 37, 44, 36, 121, 50, 37, 44, 36, 123, 54, 45, 45, > 49, 125, 10, 45, 105, 102, 32, 36, 49, 10, 45, 95, 115, 110, 111, 119, > 102, 108, 97, 107, 101, 32, 123, 36, 49, 45, 49, 125, 44, 36, 50, 44, > 36, 51, 44, 36, 120, 48, 44, 36, 121, 48, 44, 36, 123, 54, 45, 45, > 49, 125, 10, 45, 95, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 123, > 36, 49, 45, 49, 125, 44, 36, 120, 48, 44, 36, 121, 48, 44, 36, 120, > 50, 44, 36, 121, 50, 44, 36, 123, 54, 45, 45, 49, 125, 10, 45, 95, > 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 123, 36, 49, 45, 49, 125, > 44, 36, 120, 50, 44, 36, 121, 50, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 36, 123, 54, 45, 45, 49, 125, 10, 45, 95, 115, 110, 111, 119, 102, > 108, 97, 107, 101, 32, 123, 36, 49, 45, 49, 125, 44, 36, 120, 49, 44, > 36, 121, 49, 44, 36, 52, 44, 36, 53, 44, 36, 123, 54, 45, 45, 49, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 112, 105, 114, 97, 108, 98, 119, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 114, 97, 119, 32, 40, 115, 113, 117, 97, 114, 101, 100, 41, > 32, 115, 112, 105, 114, 97, 108, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 49, 54, 44, 49, 54, 32, 45, 115, 112, > 105, 114, 97, 108, 98, 119, 10, 115, 112, 105, 114, 97, 108, 98, 119, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, > 40, 115, 113, 117, 97, 114, 101, 100, 41, 32, 98, 108, 97, 99, 107, 32, > 97, 110, 100, 32, 119, 104, 105, 116, 101, 32, 115, 112, 105, 114, 97, 108, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 10, 45, > 102, 32, 34, 114, 61, 109, 105, 110, 40, 120, 44, 121, 44, 119, 45, 49, > 45, 120, 44, 104, 45, 49, 45, 121, 41, 59, 32, 50, 42, 114, 42, 40, > 119, 43, 104, 45, 50, 42, 114, 45, 49, 41, 32, 43, 32, 105, 102, 40, > 109, 105, 110, 40, 120, 44, 104, 45, 49, 45, 121, 41, 62, 61, 109, 105, > 110, 40, 119, 45, 49, 45, 120, 44, 121, 41, 44, 120, 43, 121, 44, 50, > 42, 40, 119, 43, 104, 45, 50, 45, 50, 42, 114, 41, 45, 120, 45, 121, > 41, 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 112, 108, 105, 110, 101, 32, 58, 32, 120, 48, 91, 37, 93, 44, 121, 48, > 91, 37, 93, 44, 117, 48, 91, 37, 93, 44, 118, 48, 91, 37, 93, 44, > 120, 49, 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 117, 49, 91, 37, > 93, 44, 118, 49, 91, 37, 93, 44, 95, 110, 98, 95, 118, 101, 114, 116, > 105, 99, 101, 115, 62, 61, 50, 44, 95, 111, 112, 97, 99, 105, 116, 121, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, 115, 112, 108, 105, > 110, 101, 32, 99, 117, 114, 118, 101, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 99, 117, 98, > 105, 99, 32, 104, 101, 114, 109, 105, 116, 101, 32, 115, 112, 108, 105, 110, > 101, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, > 95, 118, 101, 114, 116, 105, 99, 101, 115, 61, 50, 53, 54, 39, 44, 32, > 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, > 39, 99, 111, 108, 111, 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 51, 48, 32, 45, 115, 112, 108, > 105, 110, 101, 32, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 45, 54, 48, 48, 44, > 54, 48, 48, 41, 125, 44, 123, 63, 40, 45, 54, 48, 48, 44, 54, 48, > 48, 41, 125, 44, 123, 63, 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 45, 54, 48, 48, 44, > 54, 48, 48, 41, 125, 44, 123, 63, 40, 45, 54, 48, 48, 44, 54, 48, > 48, 41, 125, 44, 50, 53, 54, 44, 48, 46, 51, 44, 50, 53, 53, 32, > 45, 100, 111, 110, 101, 10, 115, 112, 108, 105, 110, 101, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 57, 61, 50, 53, 54, 125, 44, 36, 123, > 49, 48, 61, 49, 125, 44, 36, 123, 49, 49, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 115, 112, 108, 105, > 110, 101, 32, 102, 114, 111, 109, 32, 40, 36, 49, 44, 36, 50, 41, 32, > 91, 36, 51, 44, 36, 52, 93, 32, 116, 111, 32, 40, 36, 53, 44, 36, > 54, 41, 32, 91, 36, 55, 44, 36, 56, 93, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 57, 32, 118, > 101, 114, 116, 105, 99, 101, 115, 44, 32, 111, 112, 97, 99, 105, 116, 121, > 32, 36, 49, 48, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 40, > 36, 123, 49, 49, 45, 45, 49, 125, 41, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 120, 48, 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, > 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 49, 34, 125, 44, 36, 49, > 42, 40, 119, 45, 49, 41, 44, 36, 49, 41, 125, 10, 121, 48, 61, 123, > 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 32, 36, 50, 34, 125, 44, 36, 50, 42, 40, 104, 45, 49, 41, 44, > 36, 50, 41, 125, 10, 117, 48, 61, 123, 105, 102, 40, 64, 123, 34, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 51, 34, 125, 44, > 36, 51, 42, 40, 119, 45, 49, 41, 44, 36, 51, 41, 125, 10, 118, 48, > 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 32, 36, 52, 34, 125, 44, 36, 52, 42, 40, 104, 45, 49, > 41, 44, 36, 52, 41, 125, 10, 120, 49, 61, 123, 105, 102, 40, 64, 123, > 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 53, 34, > 125, 44, 36, 53, 42, 40, 119, 45, 49, 41, 44, 36, 53, 41, 125, 10, > 121, 49, 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, > 114, 99, 101, 110, 116, 32, 36, 54, 34, 125, 44, 36, 54, 42, 40, 104, > 45, 49, 41, 44, 36, 54, 41, 125, 10, 117, 49, 61, 123, 105, 102, 40, > 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, > 55, 34, 125, 44, 36, 55, 42, 40, 119, 45, 49, 41, 44, 36, 55, 41, > 125, 10, 118, 49, 61, 123, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, > 112, 101, 114, 99, 101, 110, 116, 32, 36, 56, 34, 125, 44, 36, 56, 42, > 40, 104, 45, 49, 41, 44, 36, 56, 41, 125, 10, 45, 115, 112, 108, 105, > 110, 101, 51, 100, 32, 36, 120, 48, 44, 36, 121, 48, 44, 48, 44, 36, > 117, 48, 44, 36, 118, 48, 44, 48, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 48, 44, 36, 117, 49, 44, 36, 118, 49, 44, 48, 44, 36, 57, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 56, 44, 123, 56, 43, 51, 42, 36, > 57, 45, 49, 125, 44, 48, 44, 48, 32, 45, 114, 111, 117, 110, 100, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 99, 111, 108, > 51, 100, 91, 49, 93, 32, 36, 123, 49, 49, 45, 45, 49, 125, 32, 45, > 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, 32, 91, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 36, 49, 48, 44, 49, 44, 48, 44, 48, 32, > 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 116, 101, 120, 116, > 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 116, 101, 120, 116, 32, 58, 32, 116, 101, 120, 116, 44, 95, 120, 91, 37, > 93, 44, 95, 121, 91, 37, 93, 44, 95, 102, 111, 110, 116, 95, 104, 101, > 105, 103, 104, 116, 62, 61, 48, 44, 95, 111, 112, 97, 99, 105, 116, 121, > 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 116, 101, 120, 116, 32, 115, 116, 114, 105, 110, 103, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 116, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 97, 99, 116, 32, 112, 114, 101, 45, 100, 101, 102, > 105, 110, 101, 100, 32, 115, 105, 122, 101, 115, 32, 97, 114, 101, 32, 39, > 49, 51, 39, 44, 39, 50, 51, 39, 44, 39, 53, 51, 39, 32, 97, 110, > 100, 32, 39, 49, 48, 51, 39, 46, 32, 85, 115, 105, 110, 103, 32, 116, > 104, 101, 115, 101, 32, 115, 105, 122, 101, 115, 32, 101, 110, 115, 117, 114, > 101, 115, 32, 121, 111, 117, 32, 100, 114, 97, 119, 32, 98, 105, 110, 97, > 114, 121, 32, 108, 101, 116, 116, 101, 114, 115, 32, 119, 105, 116, 104, 111, > 117, 116, 32, 97, 110, 116, 105, 45, 97, 108, 105, 97, 115, 105, 110, 103, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 110, 121, 32, 111, > 116, 104, 101, 114, 32, 102, 111, 110, 116, 32, 115, 105, 122, 101, 32, 105, > 115, 32, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 102, > 114, 111, 109, 32, 97, 110, 32, 101, 120, 97, 99, 116, 32, 115, 105, 122, > 101, 32, 40, 116, 104, 101, 32, 117, 112, 112, 101, 114, 32, 119, 104, 101, > 110, 32, 112, 111, 115, 115, 105, 98, 108, 101, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 83, 112, 101, 99, 105, 102, 121, 105, 110, 103, > 32, 97, 110, 32, 101, 109, 112, 116, 121, 32, 116, 97, 114, 103, 101, 116, > 32, 105, 109, 97, 103, 101, 32, 114, 101, 115, 105, 122, 101, 115, 32, 105, > 116, 32, 116, 111, 32, 110, 101, 119, 32, 100, 105, 109, 101, 110, 115, 105, > 111, 110, 115, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, 116, 104, > 101, 32, 105, 109, 97, 103, 101, 32, 99, 111, 110, 116, 97, 105, 110, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 116, 104, 101, 32, 101, 110, > 116, 105, 114, 101, 32, 116, 101, 120, 116, 32, 115, 116, 114, 105, 110, 103, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, > 114, 49, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 115, > 105, 122, 101, 50, 100, 121, 32, 54, 48, 48, 32, 121, 61, 48, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 51, 48, 32, 45, 116, 101, 120, 116, 32, > 123, 50, 42, 36, 62, 125, 34, 32, 58, 32, 84, 104, 105, 115, 32, 105, > 115, 32, 97, 32, 110, 105, 99, 101, 32, 116, 101, 120, 116, 44, 32, 105, > 115, 110, 39, 116, 32, 105, 116, 32, 63, 34, 44, 49, 48, 44, 36, 121, > 44, 123, 50, 42, 36, 62, 125, 44, 48, 46, 57, 44, 50, 53, 53, 32, > 121, 61, 123, 36, 121, 43, 50, 42, 36, 62, 125, 32, 45, 100, 111, 110, > 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 48, 32, 45, > 116, 101, 120, 116, 32, 34, 71, 39, 77, 73, 67, 34, 44, 48, 44, 48, > 44, 50, 51, 44, 49, 44, 50, 53, 53, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 58, 32, > 116, 101, 120, 116, 44, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, > 44, 95, 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, > 95, 111, 117, 116, 108, 105, 110, 101, 62, 61, 48, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 44, 95, 99, 111, 108, 111, 114, 49, 44, 46, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, 114, 101, 100, 32, > 97, 110, 100, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 116, 101, 120, > 116, 32, 115, 116, 114, 105, 110, 103, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 120, 61, 121, 61, 50, 39, 44, 32, 39, > 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 61, 49, 51, 39, 44, > 32, 39, 111, 117, 116, 108, 105, 110, 101, 61, 50, 39, 44, 32, 39, 111, > 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 99, > 111, 108, 111, 114, 49, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, > 72, 105, 32, 116, 104, 101, 114, 101, 33, 34, 44, 49, 48, 44, 49, 48, > 44, 54, 51, 44, 51, 10, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, > 110, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, > 125, 44, 36, 123, 51, 61, 50, 125, 44, 36, 123, 52, 61, 49, 51, 125, > 44, 36, 123, 53, 61, 50, 125, 44, 36, 123, 54, 61, 49, 125, 44, 36, > 123, 55, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 68, 114, 97, 119, 32, 111, 117, 116, 108, 105, 110, 101, 100, 32, 116, > 101, 120, 116, 32, 39, 36, 49, 39, 32, 97, 116, 32, 112, 111, 115, 105, > 116, 105, 111, 110, 32, 40, 36, 50, 44, 36, 51, 41, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 102, 111, > 110, 116, 32, 104, 101, 105, 103, 104, 116, 32, 36, 52, 44, 32, 111, 117, > 116, 108, 105, 110, 101, 32, 36, 53, 44, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 54, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 32, 36, > 123, 55, 45, 45, 49, 125, 46, 34, 10, 45, 118, 32, 45, 32, 45, 105, > 102, 32, 36, 53, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, > 49, 34, 44, 48, 44, 48, 44, 36, 52, 44, 49, 44, 36, 123, 55, 45, > 45, 49, 125, 44, 49, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, > 91, 45, 49, 93, 32, 123, 49, 43, 36, 53, 125, 44, 48, 10, 45, 115, > 91, 45, 49, 93, 32, 99, 44, 123, 45, 110, 97, 114, 103, 40, 36, 123, > 55, 45, 45, 49, 125, 41, 125, 32, 45, 100, 105, 108, 97, 116, 101, 91, > 45, 49, 93, 32, 123, 50, 42, 36, 53, 43, 49, 125, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 32, 45, 108, 91, 36, > 62, 44, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 64, 123, 48, > 44, 119, 125, 10, 45, 105, 102, 32, 123, 64, 123, 48, 44, 115, 125, 61, > 61, 64, 123, 49, 44, 115, 125, 125, 32, 45, 106, 91, 48, 93, 32, 91, > 49, 93, 44, 36, 50, 44, 36, 51, 44, 48, 44, 48, 44, 36, 54, 44, > 91, 50, 93, 10, 45, 101, 108, 115, 101, 32, 45, 45, 114, 91, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 64, 123, 48, > 44, 115, 125, 44, 48, 44, 49, 32, 45, 106, 91, 48, 93, 32, 91, 51, > 93, 44, 36, 50, 44, 36, 51, 44, 48, 44, 48, 44, 36, 54, 44, 91, > 50, 93, 32, 45, 114, 109, 91, 51, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, 105, > 91, 48, 93, 32, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 116, 32, 34, > 36, 49, 34, 44, 36, 123, 50, 45, 52, 125, 44, 36, 123, 54, 45, 45, > 49, 125, 10, 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 116, 114, 105, 97, 110, 103, 108, 101, 95, 115, > 104, 97, 100, 101, 32, 58, 32, 120, 48, 44, 121, 48, 44, 120, 49, 44, > 121, 48, 44, 120, 50, 44, 121, 50, 44, 82, 48, 44, 71, 48, 44, 66, > 48, 44, 46, 46, 46, 44, 82, 49, 44, 71, 49, 44, 66, 49, 44, 46, > 46, 46, 44, 82, 50, 44, 71, 50, 44, 66, 50, 44, 46, 46, 46, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 116, > 114, 105, 97, 110, 103, 108, 101, 32, 119, 105, 116, 104, 32, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, 111, 108, 111, 114, 115, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 114, 105, 97, 110, > 103, 108, 101, 95, 115, 104, 97, 100, 101, 32, 50, 48, 44, 50, 48, 44, > 52, 48, 48, 44, 49, 48, 48, 44, 49, 50, 48, 44, 50, 48, 48, 44, > 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, > 48, 44, 48, 44, 50, 53, 53, 10, 116, 114, 105, 97, 110, 103, 108, 101, > 95, 115, 104, 97, 100, 101, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 68, 114, 97, 119, 32, 116, 114, 105, 97, 110, 103, 108, 101, 32, > 40, 36, 49, 44, 36, 50, 41, 45, 40, 36, 51, 44, 36, 52, 41, 45, > 40, 36, 53, 44, 36, 54, 41, 32, 119, 105, 116, 104, 32, 105, 110, 116, > 101, 114, 112, 111, 108, 97, 116, 101, 100, 32, 99, 111, 108, 111, 114, 115, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 10, 45, 108, 91, 93, 32, 40, 36, 49, 44, 36, 50, 44, 49, > 59, 36, 51, 44, 36, 52, 44, 49, 59, 36, 53, 44, 36, 54, 44, 49, > 41, 32, 40, 36, 123, 55, 45, 45, 49, 125, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 119, 47, 51, 125, 44, 51, 44, 49, 44, 49, 44, 45, > 49, 32, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 115, 111, 108, 118, > 101, 91, 94, 48, 93, 32, 91, 48, 93, 32, 45, 114, 109, 91, 48, 93, > 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 10, 45, 112, 111, 108, > 121, 103, 111, 110, 91, 94, 45, 49, 93, 32, 51, 44, 36, 123, 49, 45, > 54, 125, 44, 49, 44, 45, 54, 53, 53, 51, 53, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, > 44, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, > 44, 115, 125, 10, 97, 61, 123, 105, 40, 48, 44, 48, 44, 48, 44, 36, > 62, 41, 125, 32, 98, 61, 123, 105, 40, 48, 44, 49, 44, 48, 44, 36, > 62, 41, 125, 32, 99, 61, 123, 105, 40, 48, 44, 50, 44, 48, 44, 36, > 62, 41, 125, 10, 45, 115, 104, 91, 48, 93, 32, 36, 62, 44, 36, 62, > 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, > 54, 53, 53, 51, 53, 44, 36, 97, 42, 120, 43, 36, 98, 42, 121, 43, > 36, 99, 44, 105, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 114, 117, 99, 104, 101, 116, 32, 58, 32, 95, > 115, 99, 97, 108, 101, 62, 48, 44, 95, 114, 97, 100, 105, 117, 115, 62, > 61, 48, 44, 95, 112, 97, 116, 116, 101, 114, 110, 95, 116, 121, 112, 101, > 61, 123, 32, 48, 61, 115, 116, 114, 97, 105, 103, 104, 116, 32, 124, 32, > 49, 61, 99, 117, 114, 118, 101, 100, 32, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 70, 105, 108, 108, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 119, 105, 116, 104, 32, 114, 97, > 110, 100, 111, 109, 32, 116, 114, 117, 99, 104, 101, 116, 32, 112, 97, 116, > 116, 101, 114, 110, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 115, 99, 97, 108, 101, 61, 51, 50, 39, 44, 32, 39, 114, 97, 100, > 105, 117, 115, 61, 53, 39, 32, 97, 110, 100, 32, 39, 112, 97, 116, 116, > 101, 114, 110, 95, 116, 121, 112, 101, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 51, 48, 48, 32, > 45, 116, 114, 117, 99, 104, 101, 116, 32, 44, 10, 116, 114, 117, 99, 104, > 101, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, > 110, 116, 40, 36, 123, 49, 61, 51, 50, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 34, > 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 51, 44, 99, 117, > 114, 118, 101, 100, 44, 115, 116, 114, 97, 105, 103, 104, 116, 125, 34, 32, > 116, 114, 117, 99, 104, 101, 116, 32, 112, 97, 116, 116, 101, 114, 110, 115, > 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 115, 99, 97, 108, 101, 32, 36, 49, 32, 97, 110, 100, 32, 114, > 97, 100, 105, 117, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 61, 123, 119, > 125, 32, 104, 61, 123, 104, 125, 32, 115, 61, 123, 115, 125, 32, 45, 114, > 109, 10, 36, 49, 44, 36, 49, 32, 45, 61, 32, 49, 44, 48, 44, 48, > 32, 45, 61, 32, 49, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 49, 44, 123, 49, 43, 36, > 51, 125, 32, 77, 61, 123, 105, 110, 116, 40, 105, 77, 47, 50, 41, 125, > 10, 45, 116, 50, 32, 123, 36, 77, 45, 36, 50, 47, 50, 45, 40, 36, > 49, 37, 50, 41, 125, 44, 123, 36, 77, 43, 36, 50, 47, 50, 125, 32, > 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, 32, 120, 10, > 123, 114, 111, 117, 110, 100, 40, 36, 119, 47, 36, 49, 44, 49, 44, 49, > 41, 125, 44, 123, 114, 111, 117, 110, 100, 40, 36, 104, 47, 36, 49, 44, > 49, 44, 49, 41, 125, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, 32, > 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 36, 49, 125, 44, 123, 104, > 42, 36, 49, 125, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 10, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 49, > 32, 40, 48, 44, 123, 36, 49, 45, 49, 125, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 51, 32, 45, > 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 32, > 53, 48, 37, 32, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, > 44, 48, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 36, 115, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 117, 114, 98, 117, 108, 101, 110, 99, > 101, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, 62, 48, 44, 95, 111, > 99, 116, 97, 118, 101, 115, 61, 123, 49, 44, 50, 44, 51, 46, 46, 46, > 44, 49, 50, 125, 44, 95, 97, 108, 112, 104, 97, 62, 48, 44, 95, 100, > 105, 102, 102, 101, 114, 101, 110, 99, 101, 61, 123, 45, 49, 48, 44, 49, > 48, 125, 44, 95, 109, 111, 100, 101, 61, 123, 48, 44, 49, 44, 50, 44, > 51, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 100, > 101, 114, 32, 102, 114, 97, 99, 116, 97, 108, 32, 110, 111, 105, 115, 101, > 32, 111, 114, 32, 116, 117, 114, 98, 117, 108, 101, 110, 99, 101, 32, 111, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, > 105, 117, 115, 61, 51, 50, 39, 44, 32, 39, 111, 99, 116, 97, 118, 101, > 115, 61, 54, 39, 44, 32, 39, 97, 108, 112, 104, 97, 61, 51, 39, 44, > 32, 39, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 109, 111, 100, 101, 61, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, 44, 52, 48, 48, > 44, 49, 44, 51, 32, 45, 116, 117, 114, 98, 117, 108, 101, 110, 99, 101, > 32, 49, 54, 10, 116, 117, 114, 98, 117, 108, 101, 110, 99, 101, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 50, 125, > 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 54, 125, 62, 48, 34, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 51, 125, 44, 36, 123, 52, > 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 102, 114, 97, 99, 116, > 97, 108, 32, 110, 111, 105, 115, 101, 32, 111, 114, 32, 116, 117, 114, 98, > 117, 108, 101, 110, 99, 101, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, > 49, 44, 32, 111, 99, 116, 97, 118, 101, 115, 32, 36, 50, 44, 32, 100, > 97, 109, 112, 105, 110, 103, 32, 112, 101, 114, 32, 111, 99, 116, 97, 118, > 101, 32, 36, 51, 44, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, > 32, 36, 52, 32, 97, 110, 100, 32, 109, 111, 100, 101, 32, 36, 53, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 45, 105, 102, 32, 123, 36, 52, 125, 32, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, 45, 49, 93, 32, 48, > 32, 45, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, 48, 44, > 48, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 44, 48, 10, 45, 105, > 102, 32, 123, 36, 53, 61, 61, 48, 124, 124, 36, 53, 61, 61, 49, 125, > 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 49, 44, 97, 125, 32, > 45, 97, 98, 115, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 53, 61, 61, 51, 124, 124, 36, 53, 61, 61, 52, 125, 32, 45, 94, > 91, 45, 49, 93, 32, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, > 61, 61, 53, 125, 32, 45, 94, 91, 45, 49, 93, 32, 51, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 50, > 45, 49, 125, 10, 45, 45, 110, 111, 105, 115, 101, 91, 45, 50, 93, 32, > 49, 48, 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 123, 36, 49, 47, > 50, 94, 36, 62, 125, 44, 48, 10, 45, 105, 102, 32, 123, 36, 53, 61, > 61, 48, 125, 32, 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 49, 44, > 97, 125, 32, 45, 97, 98, 115, 91, 45, 49, 93, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 53, 61, 61, 52, 125, 32, 45, 94, 91, 45, 49, 93, > 32, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 53, 125, > 32, 45, 94, 91, 45, 49, 93, 32, 51, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 42, 91, 45, 50, 93, 32, 36, 51, 32, 45, 43, 91, 45, 50, > 45, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 105, 102, 32, 123, 36, 52, 125, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 52, 32, 45, 109, 118, 91, 45, 50, 93, 32, 50, 32, 45, 45, 32, > 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 121, 105, 110, 121, 97, 110, 103, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 97, 32, 121, 105, > 110, 45, 121, 97, 110, 103, 32, 115, 121, 109, 98, 111, 108, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 52, 48, 48, > 44, 52, 48, 48, 32, 45, 121, 105, 110, 121, 97, 110, 103, 10, 121, 105, > 110, 121, 97, 110, 103, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 68, 114, 97, 119, 32, 121, 105, 110, 45, 121, 97, 110, 103, 32, 115, > 121, 109, 98, 111, 108, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 102, 32, 48, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 115, > 61, 123, 115, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, > 10, 114, 61, 123, 114, 111, 117, 110, 100, 40, 48, 46, 57, 53, 42, 109, > 105, 110, 40, 119, 44, 104, 41, 47, 52, 41, 125, 10, 45, 45, 108, 105, > 110, 101, 32, 53, 48, 37, 44, 48, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 49, 44, 50, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 53, 48, 37, 44, 123, 104, 47, 50, 45, 36, 114, 125, 44, 36, > 114, 44, 36, 114, 44, 48, 44, 49, 44, 50, 10, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 32, 45, 101, 108, 108, 105, 112, > 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 123, 104, 47, 50, 43, > 36, 114, 125, 44, 36, 114, 44, 36, 114, 44, 48, 44, 49, 44, 49, 10, > 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, 32, 123, 119, 47, 50, 45, > 36, 114, 125, 44, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 50, 10, 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, 32, 123, 119, 47, > 50, 43, 36, 114, 125, 44, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 49, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 50, 93, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 123, 50, 42, 36, 114, 125, 44, > 123, 50, 42, 36, 114, 125, 44, 48, 44, 49, 44, 49, 10, 45, 42, 10, > 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, > 44, 123, 104, 47, 50, 45, 36, 114, 125, 44, 123, 36, 114, 47, 51, 125, > 44, 123, 36, 114, 47, 51, 125, 44, 48, 44, 49, 44, 49, 10, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 123, > 104, 47, 50, 43, 36, 114, 125, 44, 123, 36, 114, 47, 51, 125, 44, 123, > 36, 114, 47, 51, 125, 44, 48, 44, 49, 44, 50, 10, 45, 114, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 36, 115, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 58, 32, 77, 97, 116, 114, 105, 120, 32, > 99, 111, 109, 112, 117, 116, 97, 116, 105, 111, 110, 10, 35, 64, 103, 109, > 105, 99, 32, 100, 105, 106, 107, 115, 116, 114, 97, 32, 58, 32, 115, 116, > 97, 114, 116, 105, 110, 103, 95, 110, 111, 100, 101, 62, 61, 48, 44, 101, > 110, 100, 105, 110, 103, 95, 110, 111, 100, 101, 62, 61, 48, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, > 112, 117, 116, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 100, 105, 115, > 116, 97, 110, 99, 101, 115, 32, 97, 110, 100, 32, 112, 97, 116, 104, 101, > 115, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 97, 100, 106, 97, 99, 101, 110, 99, 121, 32, 109, 97, 116, 114, 105, > 99, 101, 115, 32, 98, 121, 32, 116, 104, 101, 32, 68, 105, 106, 107, 115, > 116, 114, 97, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 101, 105, 103, 101, 110, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, > 116, 101, 32, 116, 104, 101, 32, 101, 105, 103, 101, 110, 118, 97, 108, 117, > 101, 115, 32, 97, 110, 100, 32, 101, 105, 103, 101, 110, 118, 101, 99, 116, > 111, 114, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 115, 121, 109, 109, 101, 116, 114, 105, 99, 32, 109, 97, 116, 114, 105, 99, > 101, 115, 32, 111, 114, 32, 109, 97, 116, 114, 105, 120, 32, 102, 105, 101, > 108, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, > 32, 111, 110, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 32, 104, 97, 115, 32, 51, 32, 111, 114, 32, 54, 32, 99, > 104, 97, 110, 110, 101, 108, 115, 44, 32, 105, 116, 32, 105, 115, 32, 114, > 101, 103, 97, 114, 100, 101, 100, 32, 97, 115, 32, 97, 32, 102, 105, 101, > 108, 100, 32, 111, 102, 32, 50, 120, 50, 32, 111, 114, 32, 51, 120, 51, > 32, 115, 121, 109, 109, 101, 116, 114, 105, 99, 32, 109, 97, 116, 114, 105, > 99, 101, 115, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 119, 104, > 111, 115, 101, 32, 101, 105, 103, 101, 110, 32, 101, 108, 101, 109, 101, 110, > 116, 115, 32, 97, 114, 101, 32, 99, 111, 109, 112, 117, 116, 101, 100, 32, > 97, 116, 32, 101, 97, 99, 104, 32, 112, 111, 105, 110, 116, 32, 111, 102, > 32, 116, 104, 101, 32, 102, 105, 101, 108, 100, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 40, 49, 44, 48, 44, 48, 59, 48, 44, > 50, 44, 48, 59, 48, 44, 48, 44, 51, 41, 32, 45, 45, 101, 105, 103, > 101, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 116, 114, 117, 99, 116, 117, > 114, 101, 116, 101, 110, 115, 111, 114, 115, 32, 45, 98, 108, 117, 114, 32, > 50, 32, 45, 101, 105, 103, 101, 110, 32, 45, 115, 112, 108, 105, 116, 91, > 48, 93, 32, 99, 10, 35, 64, 103, 109, 105, 99, 32, 105, 110, 118, 101, > 114, 116, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 116, 104, 101, 32, 105, 110, > 118, 101, 114, 115, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, > 48, 59, 48, 44, 48, 44, 49, 59, 49, 44, 48, 44, 48, 41, 32, 45, > 45, 105, 110, 118, 101, 114, 116, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 111, 108, 118, 101, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, > 108, 118, 101, 32, 108, 105, 110, 101, 97, 114, 32, 115, 121, 115, 116, 101, > 109, 32, 65, 88, 32, 61, 32, 66, 32, 102, 111, 114, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 66, 45, 118, 101, 99, 116, 111, 114, 115, 32, > 97, 110, 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 65, 45, > 109, 97, 116, 114, 105, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 102, 32, 116, 104, 101, 32, 115, 121, 115, 116, 101, 109, 32, 105, > 115, 32, 117, 110, 100, 101, 114, 45, 32, 111, 114, 32, 111, 118, 101, 114, > 45, 100, 101, 116, 101, 114, 109, 105, 110, 101, 100, 44, 32, 108, 101, 97, > 115, 116, 32, 115, 113, 117, 97, 114, 101, 32, 115, 111, 108, 117, 116, 105, > 111, 110, 32, 105, 115, 32, 114, 101, 116, 117, 114, 110, 101, 100, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, > 48, 59, 49, 44, 48, 44, 48, 59, 48, 44, 48, 44, 49, 41, 32, 40, > 49, 59, 50, 59, 51, 41, 32, 45, 45, 115, 111, 108, 118, 101, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 118, 100, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 109, 112, 117, 116, 101, 32, 83, 86, 68, 32, 100, 101, > 99, 111, 109, 112, 111, 115, 105, 116, 105, 111, 110, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 48, 44, > 49, 48, 44, 49, 44, 49, 44, 39, 105, 102, 40, 120, 61, 61, 121, 44, > 120, 43, 63, 40, 45, 48, 46, 50, 44, 48, 46, 50, 41, 44, 48, 41, > 39, 32, 45, 45, 115, 118, 100, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 84, 114, 97, 110, 115, 112, 111, 115, 101, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 109, 97, 116, 114, 105, 99, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 10, > 116, 114, 97, 110, 115, 112, 111, 115, 101, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 84, 114, 97, 110, 115, 112, 111, 115, 101, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, > 101, 114, 109, 117, 116, 101, 32, 121, 120, 122, 99, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 116, 114, 105, 115, 111, 108, 118, 101, > 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 111, 108, 118, 101, 32, > 116, 114, 105, 100, 105, 97, 103, 111, 110, 97, 108, 32, 115, 121, 115, 116, > 101, 109, 32, 65, 88, 32, 61, 32, 66, 32, 102, 111, 114, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 66, 45, 118, 101, 99, 116, 111, 114, 115, > 32, 97, 110, 100, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 116, > 114, 105, 100, 105, 97, 103, 111, 110, 97, 108, 32, 65, 45, 109, 97, 116, > 114, 105, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, > 105, 100, 105, 97, 103, 111, 110, 97, 108, 32, 109, 97, 116, 114, 105, 120, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 115, 116, 111, 114, 101, 100, 32, > 97, 115, 32, 97, 32, 51, 32, 99, 111, 108, 117, 109, 110, 32, 118, 101, > 99, 116, 111, 114, 44, 32, 119, 104, 101, 114, 101, 32, 50, 110, 100, 32, > 99, 111, 108, 117, 109, 110, 32, 99, 111, 110, 116, 97, 105, 110, 115, 32, > 116, 104, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 100, 105, 97, > 103, 111, 110, 97, 108, 32, 99, 111, 101, 102, 102, 105, 99, 105, 101, 110, > 116, 115, 44, 32, 119, 104, 105, 108, 101, 32, 49, 115, 116, 32, 97, 110, > 100, 32, 51, 114, 100, 32, 99, 111, 108, 117, 109, 110, 115, 32, 99, 111, > 110, 116, 97, 105, 110, 32, 116, 104, 101, 32, 108, 101, 102, 116, 32, 97, > 110, 100, 32, 114, 105, 103, 104, 116, 32, 99, 111, 101, 102, 102, 105, 99, > 105, 101, 110, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 40, 48, 44, 48, 44, 49, 59, 49, 44, 48, 44, 48, 59, 48, > 44, 49, 44, 48, 41, 32, 40, 49, 59, 50, 59, 51, 41, 32, 45, 45, > 116, 114, 105, 115, 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 51, 100, 32, 114, > 101, 110, 100, 101, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, > 43, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 97, > 100, 100, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 100, 100, 51, 100, 32, 58, 32, 116, 120, 44, 95, > 116, 121, 44, 95, 116, 122, 32, 58, 32, 91, 111, 98, 106, 101, 99, 116, > 51, 100, 93, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 104, > 105, 102, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, > 111, 98, 106, 101, 99, 116, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 100, 105, 115, 112, 108, 97, 99, 101, 109, > 101, 110, 116, 32, 118, 101, 99, 116, 111, 114, 44, 32, 111, 114, 32, 109, > 101, 114, 103, 101, 32, 116, 104, 101, 109, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 44, 32, 111, 114, 32, > 109, 101, 114, 103, 101, 32, 97, 108, 108, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, 111, > 103, 101, 116, 104, 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 43, 51, 100, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 121, 61, 116, > 122, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 48, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 97, 100, 100, 51, 100, 91, > 45, 49, 93, 32, 49, 48, 44, 123, 63, 40, 45, 49, 48, 44, 49, 48, > 41, 125, 44, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 50, 48, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 49, 53, 44, 50, 32, 45, 99, 111, 108, 111, > 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, > 45, 109, 117, 108, 51, 100, 91, 45, 49, 93, 32, 48, 46, 53, 44, 49, > 32, 45, 105, 102, 32, 123, 36, 62, 37, 50, 125, 32, 45, 114, 111, 116, > 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, > 57, 48, 32, 45, 101, 110, 100, 105, 102, 32, 45, 97, 100, 100, 51, 100, > 91, 45, 49, 93, 32, 55, 48, 32, 45, 97, 100, 100, 51, 100, 32, 45, > 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 49, 44, 49, 56, 32, 45, 100, 111, 110, 101, 32, 45, 100, 111, 117, > 98, 108, 101, 51, 100, 32, 48, 10, 35, 64, 103, 109, 105, 99, 32, 97, > 110, 105, 109, 97, 116, 101, 51, 100, 32, 58, 32, 95, 119, 105, 100, 116, > 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 100, > 120, 44, 95, 100, 121, 44, 95, 100, 122, 44, 95, 122, 111, 111, 109, 62, > 61, 48, 44, 95, 102, 105, 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 110, 105, 109, 97, 116, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 115, 32, 105, 110, 32, 97, 32, 119, 105, 110, 100, 111, 119, 46, 10, 97, > 110, 105, 109, 97, 116, 101, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 54, 52, 48, 125, 44, 36, 123, 50, 61, 52, 56, > 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 49, 125, > 44, 36, 123, 53, 61, 48, 125, 44, 34, 36, 123, 55, 61, 34, 34, 125, > 34, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 54, 61, 49, 125, 62, > 61, 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 110, 105, 109, > 97, 116, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 44, > 32, 105, 110, 32, 97, 32, 36, 49, 120, 36, 50, 32, 119, 105, 110, 100, > 111, 119, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 118, 101, > 108, 111, 99, 105, 116, 105, 101, 115, 32, 40, 36, 51, 44, 36, 52, 44, > 36, 53, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 45, 108, 91, 36, 62, 93, 10, 45, 110, > 51, 100, 32, 45, 42, 51, 100, 32, 123, 36, 54, 42, 109, 105, 110, 40, > 36, 49, 44, 36, 50, 41, 47, 49, 46, 53, 125, 32, 45, 99, 51, 100, > 10, 97, 120, 61, 48, 32, 97, 121, 61, 48, 32, 97, 122, 61, 48, 32, > 102, 114, 97, 109, 101, 61, 48, 10, 45, 100, 111, 10, 45, 45, 114, 51, > 100, 32, 49, 44, 48, 44, 48, 44, 36, 97, 120, 32, 45, 114, 51, 100, > 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 36, 97, 121, 32, 45, > 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 36, 97, > 122, 10, 97, 120, 61, 123, 36, 97, 120, 43, 36, 51, 125, 32, 97, 121, > 61, 123, 36, 97, 121, 43, 36, 52, 125, 32, 97, 122, 61, 123, 36, 97, > 122, 43, 36, 53, 125, 10, 36, 49, 44, 36, 50, 44, 49, 44, 51, 44, > 45, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 49, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 55, 34, > 41, 125, 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 32, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, > 49, 93, 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, > 50, 53, 53, 44, 54, 52, 44, 54, 52, 44, 54, 52, 44, 48, 10, 45, > 111, 91, 45, 49, 93, 32, 64, 123, 45, 102, 105, 108, 101, 110, 97, 109, > 101, 92, 32, 34, 36, 55, 34, 44, 36, 62, 44, 36, 102, 114, 97, 109, > 101, 125, 32, 102, 114, 97, 109, 101, 61, 123, 36, 102, 114, 97, 109, 101, > 43, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 91, 45, 49, 93, 32, 45, 49, 44, 54, 52, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 44, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 64, 123, 48, > 44, 110, 125, 32, 45, 119, 97, 105, 116, 32, 50, 48, 32, 45, 107, 91, > 48, 93, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, > 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, > 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 32, 45, 114, 109, 32, 45, > 119, 32, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, > 121, 95, 99, 97, 109, 101, 114, 97, 51, 100, 32, 58, 32, 112, 111, 115, > 95, 120, 44, 112, 111, 115, 95, 121, 44, 112, 111, 115, 95, 122, 44, 116, > 97, 114, 103, 101, 116, 95, 120, 44, 116, 97, 114, 103, 101, 116, 95, 121, > 44, 116, 97, 114, 103, 101, 116, 95, 122, 44, 117, 112, 95, 120, 44, 117, > 112, 95, 121, 44, 117, 112, 95, 122, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 51, 100, 32, 99, 97, 109, 101, 114, > 97, 32, 109, 97, 116, 114, 105, 120, 32, 116, 111, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 97, 114, 103, 101, > 116, 95, 120, 61, 48, 39, 44, 32, 39, 116, 97, 114, 103, 101, 116, 95, > 121, 61, 48, 39, 44, 32, 39, 116, 97, 114, 103, 101, 116, 95, 122, 61, > 48, 39, 44, 32, 39, 117, 112, 95, 120, 61, 48, 39, 44, 32, 39, 117, > 112, 95, 121, 61, 45, 49, 39, 32, 97, 110, 100, 32, 39, 117, 112, 95, > 122, 61, 48, 39, 46, 10, 97, 112, 112, 108, 121, 95, 99, 97, 109, 101, > 114, 97, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, > 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, > 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 45, 49, 125, > 44, 36, 123, 57, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 51, 100, 32, 99, 97, 109, 101, 114, 97, > 32, 109, 97, 116, 114, 105, 120, 32, 116, 111, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 36, 63, 44, 32, 119, 105, 116, 104, 32, 99, 97, 109, > 101, 114, 97, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 36, 49, > 44, 36, 50, 44, 36, 51, 41, 44, 32, 116, 97, 114, 103, 101, 116, 32, > 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 36, 52, 44, 36, 53, 44, > 36, 54, 41, 32, 97, 110, 100, 32, 117, 112, 45, 118, 101, 99, 116, 111, > 114, 32, 40, 36, 55, 44, 36, 56, 44, 36, 57, 41, 46, 34, 10, 45, > 118, 32, 45, 10, 40, 123, 36, 52, 45, 36, 49, 125, 94, 123, 36, 53, > 45, 36, 50, 125, 94, 123, 36, 54, 45, 36, 51, 125, 41, 10, 40, 36, > 55, 94, 36, 56, 94, 36, 57, 41, 10, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 45, 50, 44, 45, 49, 93, 10, 45, 95, 99, > 114, 111, 115, 115, 51, 100, 32, 64, 45, 50, 44, 64, 45, 49, 10, 45, > 95, 99, 114, 111, 115, 115, 51, 100, 32, 64, 45, 49, 44, 64, 45, 51, > 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 121, 91, 45, 51, 45, 45, > 49, 93, 32, 120, 32, 45, 109, 118, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 51, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, 32, 45, > 122, 91, 45, 49, 93, 32, 48, 44, 51, 10, 45, 45, 51, 100, 91, 94, > 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 32, 45, 97, 112, > 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, 91, 94, 45, 49, 93, 32, > 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 51, 100, > 32, 48, 44, 48, 44, 56, 48, 48, 10, 45, 118, 32, 43, 10, 95, 99, > 114, 111, 115, 115, 51, 100, 32, 58, 10, 40, 123, 36, 50, 42, 36, 54, > 45, 36, 51, 42, 36, 53, 125, 94, 123, 36, 51, 42, 36, 52, 45, 36, > 49, 42, 36, 54, 125, 94, 123, 36, 49, 42, 36, 53, 45, 36, 50, 42, > 36, 52, 125, 41, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 91, 45, 49, 93, 32, 45, 121, 91, 45, 49, 93, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, > 32, 58, 32, 112, 49, 44, 46, 46, 44, 112, 49, 50, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 51, 100, 32, 112, > 111, 115, 101, 32, 109, 97, 116, 114, 105, 120, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 50, 48, 32, 45, 97, > 112, 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, 32, 48, 46, 49, 53, > 50, 52, 51, 55, 44, 49, 46, 50, 48, 54, 54, 54, 44, 45, 48, 46, > 53, 52, 54, 51, 54, 54, 44, 48, 44, 45, 48, 46, 53, 51, 53, 57, > 54, 50, 44, 48, 46, 53, 53, 57, 49, 50, 57, 44, 49, 46, 48, 56, > 53, 51, 49, 44, 48, 44, 49, 46, 50, 49, 49, 51, 50, 44, 48, 46, > 48, 57, 53, 53, 52, 51, 49, 44, 48, 46, 53, 52, 56, 57, 54, 54, > 44, 48, 44, 48, 44, 48, 44, 45, 50, 48, 54, 44, 49, 32, 45, 115, > 110, 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, 10, 97, 112, > 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 51, 100, 32, 112, > 111, 115, 101, 32, 109, 97, 116, 114, 105, 120, 32, 91, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 36, 52, 59, 32, 36, 53, 44, 36, 54, 44, > 36, 55, 44, 36, 56, 59, 32, 36, 57, 44, 36, 49, 48, 44, 36, 49, > 49, 44, 36, 49, 50, 32, 93, 32, 116, 111, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 51, 100, 125, 10, 45, 115, > 51, 100, 32, 45, 114, 91, 50, 93, 32, 51, 44, 64, 123, 50, 44, 104, > 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 105, 91, 51, 93, > 32, 49, 44, 64, 123, 50, 44, 104, 125, 44, 49, 44, 49, 44, 49, 32, > 45, 97, 91, 50, 44, 51, 93, 32, 120, 10, 45, 105, 91, 51, 93, 32, > 40, 36, 49, 44, 36, 53, 44, 36, 57, 59, 36, 50, 44, 36, 54, 44, > 36, 49, 48, 59, 36, 51, 44, 36, 55, 44, 36, 49, 49, 59, 36, 52, > 44, 36, 56, 44, 36, 49, 50, 41, 32, 45, 42, 42, 91, 50, 44, 51, > 93, 10, 45, 114, 91, 50, 93, 32, 49, 44, 64, 123, 50, 44, 51, 42, > 104, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 97, 32, 121, 10, 45, > 101, 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, > 109, 97, 110, 100, 32, 39, 45, 97, 112, 112, 108, 121, 95, 112, 111, 115, > 101, 51, 100, 39, 58, 32, 73, 109, 97, 103, 101, 32, 91, 34, 123, 64, > 35, 45, 36, 62, 45, 49, 125, 34, 93, 32, 100, 111, 101, 115, 32, 110, > 111, 116, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 32, 97, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 46, 34, 10, 45, 101, 110, 100, 105, > 102, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 114, 111, 119, 51, > 100, 32, 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, > 121, 49, 44, 122, 49, 44, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, > 62, 61, 48, 44, 95, 104, 101, 97, 100, 95, 108, 101, 110, 103, 116, 104, > 91, 37, 93, 62, 61, 48, 44, 95, 104, 101, 97, 100, 95, 114, 97, 100, > 105, 117, 115, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 97, 114, 114, 111, > 119, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, 97, 110, 100, 32, 101, 110, > 100, 105, 110, 103, 32, 51, 100, 32, 112, 111, 105, 110, 116, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 53, 37, 39, 44, 32, 39, 104, 101, 97, 100, 95, 108, 101, 110, 103, > 116, 104, 61, 50, 53, 37, 39, 32, 97, 110, 100, 32, 39, 104, 101, 97, > 100, 95, 114, 97, 100, 105, 117, 115, 61, 49, 53, 37, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 49, 48, 32, 97, 61, 123, 36, 62, 42, 50, 42, 112, 105, 47, > 49, 48, 125, 32, 45, 97, 114, 114, 111, 119, 51, 100, 32, 48, 44, 48, > 44, 48, 44, 123, 99, 111, 115, 40, 36, 97, 41, 125, 44, 123, 115, 105, > 110, 40, 36, 97, 41, 125, 44, 45, 48, 46, 53, 32, 45, 100, 111, 110, > 101, 32, 45, 43, 51, 100, 10, 97, 114, 114, 111, 119, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 55, 61, 53, 37, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 56, 61, 50, 53, 37, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 57, 61, 49, 53, 37, 125, 62, 61, > 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 97, 114, 114, 111, 119, 44, 32, 102, 114, 111, 109, > 32, 40, 36, 123, 49, 45, 51, 125, 41, 32, 116, 111, 32, 40, 36, 123, > 52, 45, 54, 125, 41, 44, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, > 117, 115, 32, 36, 55, 44, 32, 104, 101, 97, 100, 32, 108, 101, 110, 103, > 116, 104, 32, 36, 56, 32, 97, 110, 100, 32, 104, 101, 97, 100, 32, 114, > 97, 100, 105, 117, 115, 32, 36, 57, 46, 34, 10, 45, 118, 32, 45, 10, > 76, 61, 123, 115, 113, 114, 116, 40, 40, 36, 52, 45, 36, 49, 41, 94, > 50, 43, 40, 36, 53, 45, 36, 50, 41, 94, 50, 43, 40, 36, 54, 45, > 36, 51, 41, 94, 50, 41, 125, 10, 82, 61, 123, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 55, 125, > 44, 36, 55, 42, 36, 76, 44, 36, 55, 41, 125, 10, 108, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 56, 125, 44, 36, 56, 42, 36, 76, 44, 36, 56, 41, 125, 10, > 114, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 57, 125, 44, 36, 57, 42, 36, 76, 44, 36, > 57, 41, 125, 10, 76, 61, 123, 36, 76, 45, 36, 108, 125, 32, 45, 99, > 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 36, 82, 44, 36, 76, 32, > 45, 99, 111, 110, 101, 51, 100, 32, 36, 114, 44, 36, 108, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, 36, 76, 32, 45, 43, > 51, 100, 91, 45, 50, 44, 45, 49, 93, 10, 40, 123, 36, 52, 45, 36, > 49, 125, 94, 123, 36, 53, 45, 36, 50, 125, 94, 123, 36, 54, 45, 36, > 51, 125, 41, 32, 40, 48, 46, 48, 49, 94, 45, 48, 46, 48, 50, 94, > 48, 46, 48, 51, 41, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, > 111, 110, 91, 45, 50, 44, 45, 49, 93, 10, 45, 95, 99, 114, 111, 115, > 115, 51, 100, 32, 64, 45, 50, 44, 64, 45, 49, 32, 45, 95, 99, 114, > 111, 115, 115, 51, 100, 32, 64, 45, 49, 44, 64, 45, 51, 32, 45, 114, > 109, 91, 45, 51, 93, 32, 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, > 120, 32, 45, 109, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 51, 10, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, 10, 45, 115, 51, 100, > 91, 45, 50, 93, 32, 45, 114, 91, 45, 53, 93, 32, 51, 44, 64, 123, > 45, 53, 44, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, > 42, 42, 91, 45, 53, 44, 45, 49, 93, 10, 45, 121, 91, 45, 52, 93, > 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 32, 45, 43, 51, > 100, 91, 45, 49, 93, 32, 36, 123, 49, 45, 51, 125, 32, 45, 114, 118, > 51, 100, 91, 45, 49, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 97, 120, 101, 115, 51, 100, 32, 58, 32, 95, 115, 105, 122, > 101, 95, 120, 44, 95, 115, 105, 122, 101, 95, 121, 44, 95, 115, 105, 122, > 101, 95, 122, 44, 95, 102, 111, 110, 116, 95, 115, 105, 122, 101, 62, 48, > 44, 95, 108, 97, 98, 101, 108, 95, 120, 44, 95, 108, 97, 98, 101, 108, > 95, 121, 44, 95, 108, 97, 98, 101, 108, 95, 122, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 97, 120, > 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 105, 122, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 120, 44, 121, 32, 97, 110, 100, 32, 122, 32, 111, 114, 105, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 115, 105, 122, 101, 95, 120, 61, 115, 105, 122, 101, 95, > 121, 61, 115, 105, 122, 101, 95, 122, 61, 49, 39, 44, 32, 39, 102, 111, > 110, 116, 95, 115, 105, 122, 101, 61, 50, 51, 39, 44, 32, 39, 108, 97, > 98, 101, 108, 95, 120, 61, 88, 39, 44, 32, 39, 108, 97, 98, 101, 108, > 95, 121, 61, 89, 39, 32, 97, 110, 100, 32, 39, 108, 97, 98, 101, 108, > 95, 122, 61, 90, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 45, 97, 120, 101, 115, 51, 100, 32, 44, 10, 97, 120, 101, 115, > 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 52, 61, > 50, 51, 125, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 36, > 50, 125, 44, 34, 36, 123, 53, 61, 88, 125, 44, 36, 123, 54, 61, 89, > 125, 44, 36, 123, 55, 61, 90, 125, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 97, 120, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, 44, > 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 108, > 91, 93, 10, 109, 61, 123, 109, 97, 120, 40, 97, 98, 115, 40, 36, 49, > 41, 44, 97, 98, 115, 40, 36, 50, 41, 44, 97, 98, 115, 40, 36, 51, > 41, 41, 47, 52, 48, 125, 32, 109, 50, 61, 123, 50, 42, 36, 109, 125, > 32, 109, 51, 61, 123, 49, 46, 50, 42, 36, 109, 50, 125, 10, 45, 95, > 97, 120, 101, 115, 51, 100, 32, 34, 79, 34, 44, 36, 52, 32, 45, 45, > 51, 100, 91, 45, 49, 93, 32, 36, 109, 51, 44, 36, 109, 51, 44, 36, > 109, 51, 10, 45, 105, 102, 32, 36, 49, 10, 45, 108, 105, 110, 101, 51, > 100, 32, 48, 44, 48, 44, 48, 44, 36, 49, 44, 48, 44, 48, 10, 45, > 99, 111, 110, 101, 51, 100, 32, 36, 109, 44, 123, 50, 42, 36, 109, 125, > 44, 49, 54, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, > 44, 48, 44, 45, 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, > 123, 36, 49, 45, 36, 109, 50, 125, 44, 48, 44, 48, 10, 45, 95, 97, > 120, 101, 115, 51, 100, 32, 34, 36, 53, 34, 44, 36, 52, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 123, 36, 49, 43, 36, 109, 51, 125, 44, > 48, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, > 50, 10, 45, 108, 105, 110, 101, 51, 100, 32, 48, 44, 48, 44, 48, 44, > 48, 44, 36, 50, 44, 48, 10, 45, 99, 111, 110, 101, 51, 100, 32, 36, > 109, 44, 123, 50, 42, 36, 109, 125, 44, 49, 54, 32, 45, 114, 51, 100, > 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 123, 36, 50, 45, 36, 109, 50, > 125, 44, 48, 10, 45, 95, 97, 120, 101, 115, 51, 100, 32, 34, 36, 54, > 34, 44, 36, 52, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, > 123, 36, 50, 43, 36, 109, 51, 125, 44, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 51, 10, 45, 108, 105, 110, 101, 51, 100, > 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, 51, 10, 45, 99, > 111, 110, 101, 51, 100, 32, 36, 109, 44, 123, 50, 42, 36, 109, 125, 44, > 49, 54, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 123, 36, 51, 45, 36, 109, 50, 125, 10, 45, 95, 97, 120, 101, 115, 51, > 100, 32, 34, 36, 55, 34, 44, 36, 52, 32, 45, 43, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 48, 44, 123, 36, 51, 43, 36, 109, 51, 125, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 43, 51, 100, 32, 45, 110, 109, 32, > 91, 51, 100, 92, 32, 97, 120, 101, 115, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 118, 32, 43, 10, 95, 97, 120, 101, 115, 51, 100, 32, 58, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 50, 44, > 48, 44, 36, 50, 44, 49, 44, 49, 32, 45, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 51, 32, 45, 42, 91, 45, 50, 93, 32, 50, > 53, 53, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 51, 10, 45, 105, 91, 45, 51, 93, 32, 40, > 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, > 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, > 59, 49, 59, 49, 59, 48, 59, 48, 59, 48, 59, 49, 59, 48, 59, 45, > 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 51, 41, 10, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 49, 41, 32, 45, 121, 91, 45, 51, 44, 45, 49, 93, > 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 121, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 51, 100, 39, > 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 98, > 97, 99, 107, 103, 114, 111, 117, 110, 100, 51, 100, 32, 58, 32, 82, 44, > 95, 71, 44, 95, 66, 32, 58, 32, 91, 105, 109, 97, 103, 101, 93, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 105, 110, > 101, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 32, 102, 114, 111, > 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 108, 111, > 114, 32, 111, 114, 32, 101, 120, 105, 115, 116, 105, 110, 103, 32, 105, 109, > 97, 103, 101, 32, 102, 111, 114, 32, 105, 110, 116, 101, 114, 97, 99, 116, > 105, 118, 101, 32, 51, 100, 32, 118, 105, 101, 119, 101, 114, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 98, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 114, 101, 115, 101, > 116, 115, 32, 116, 104, 101, 32, 98, 97, 99, 107, 103, 114, 111, 117, 110, > 100, 32, 116, 111, 32, 100, 101, 102, 97, 117, 108, 116, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 98, 111, 120, 51, 100, 32, 58, 32, 95, 115, 105, > 122, 101, 95, 120, 44, 95, 115, 105, 122, 101, 95, 121, 44, 95, 115, 105, > 122, 101, 95, 122, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 98, 111, 120, 32, 97, 116, 32, 40, 48, > 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 120, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 115, 105, 122, 101, 95, 122, 61, > 115, 105, 122, 101, 95, 121, 61, 115, 105, 122, 101, 95, 120, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 98, 111, 120, 51, > 100, 32, 49, 48, 48, 44, 52, 48, 44, 51, 48, 32, 45, 45, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 45, 99, 111, > 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, 82, 71, 66, > 125, 10, 98, 111, 120, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, > 123, 51, 61, 36, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 98, 111, 120, 44, 32, 119, 105, > 116, 104, 32, 115, 105, 122, 101, 32, 40, 36, 49, 44, 36, 50, 44, 36, > 51, 41, 46, 34, 10, 45, 118, 32, 45, 10, 49, 44, 56, 54, 44, 49, > 44, 49, 44, 92, 10, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, > 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, > 49, 48, 48, 46, 53, 44, 56, 44, 54, 44, 92, 10, 48, 44, 48, 44, > 48, 44, 36, 49, 44, 48, 44, 48, 44, 36, 49, 44, 36, 50, 44, 48, > 44, 48, 44, 36, 50, 44, 48, 44, 92, 10, 48, 44, 48, 44, 36, 51, > 44, 36, 49, 44, 48, 44, 36, 51, 44, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 48, 44, 36, 50, 44, 36, 51, 44, 92, 10, 52, 44, 48, 44, > 51, 44, 50, 44, 49, 44, 52, 44, 52, 44, 53, 44, 54, 44, 55, 44, > 52, 44, 48, 44, 49, 44, 53, 44, 52, 44, 52, 44, 51, 44, 55, 44, > 54, 44, 50, 44, 52, 44, 48, 44, 52, 44, 55, 44, 51, 44, 52, 44, > 49, 44, 50, 44, 54, 44, 53, 44, 92, 10, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, > 48, 44, 92, 10, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 98, 111, 120, > 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 51, > 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, 101, 110, > 116, 101, 114, 51, 100, 39, 46, 10, 99, 51, 100, 32, 58, 10, 45, 95, > 99, 101, 110, 116, 101, 114, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 99, 101, 110, 116, 101, 114, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 101, 110, 116, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 97, 116, 32, > 40, 48, 44, 48, 44, 48, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, 51, 100, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 49, 48, 48, 32, 45, 99, 105, 114, 99, 108, > 101, 51, 100, 32, 123, 63, 40, 49, 48, 48, 41, 125, 44, 123, 63, 40, > 49, 48, 48, 41, 125, 44, 123, 63, 40, 49, 48, 48, 41, 125, 44, 50, > 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 48, > 44, 48, 32, 45, 45, 99, 101, 110, 116, 101, 114, 51, 100, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 44, 48, 32, 45, 97, 100, 100, 51, 100, 10, 99, 101, 110, 116, 101, 114, > 51, 100, 32, 58, 10, 45, 95, 36, 48, 10, 95, 99, 101, 110, 116, 101, > 114, 51, 100, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 67, 101, 110, 116, 101, 114, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 99, 104, 101, 99, 107, > 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 110, 61, 123, 105, 91, 54, 93, 125, 10, > 45, 105, 102, 32, 123, 36, 110, 62, 48, 125, 10, 45, 115, 104, 32, 56, > 44, 123, 55, 43, 51, 42, 36, 110, 125, 44, 48, 44, 48, 32, 45, 114, > 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, > 44, 45, 49, 32, 45, 115, 91, 45, 49, 93, 32, 120, 10, 45, 45, 91, > 45, 51, 93, 32, 64, 123, 45, 51, 44, 40, 105, 77, 43, 105, 109, 41, > 47, 50, 125, 32, 45, 45, 91, 45, 50, 93, 32, 64, 123, 45, 50, 44, > 40, 105, 77, 43, 105, 109, 41, 47, 50, 125, 32, 45, 45, 91, 45, 49, > 93, 32, 123, 40, 105, 77, 43, 105, 109, 41, 47, 50, 125, 10, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, 121, 91, 45, 49, 93, > 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 56, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 105, 114, 99, 108, 101, 51, 100, > 32, 58, 32, 95, 120, 48, 44, 95, 121, 48, 44, 95, 122, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 105, 114, 99, > 108, 101, 32, 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 120, 48, 61, 121, 48, 61, 122, 48, 61, > 48, 39, 32, 97, 110, 100, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 53, 48, 48, 32, 97, 61, 123, 36, 62, 42, > 112, 105, 47, 50, 53, 48, 125, 32, 45, 99, 105, 114, 99, 108, 101, 51, > 100, 32, 123, 99, 111, 115, 40, 51, 42, 36, 97, 41, 125, 44, 123, 115, > 105, 110, 40, 50, 42, 36, 97, 41, 125, 44, 48, 44, 123, 36, 97, 47, > 53, 48, 125, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, > 32, 64, 123, 45, 82, 71, 66, 125, 44, 48, 46, 52, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, 99, 105, 114, 99, 108, 101, > 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, > 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, > 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 105, 114, 99, 108, 101, 32, > 97, 116, 32, 112, 111, 115, 105, 116, 105, 111, 110, 32, 40, 36, 49, 44, > 36, 50, 44, 36, 51, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, > 117, 115, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 114, 61, 123, > 36, 52, 47, 115, 113, 114, 116, 40, 51, 41, 125, 10, 49, 44, 50, 52, > 44, 49, 44, 49, 44, 92, 10, 54, 55, 46, 53, 44, 55, 51, 46, 53, > 44, 49, 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, > 53, 44, 49, 48, 48, 46, 53, 44, 50, 44, 49, 44, 92, 10, 123, 36, > 49, 45, 36, 114, 125, 44, 123, 36, 50, 45, 36, 114, 125, 44, 123, 36, > 51, 45, 36, 114, 125, 44, 92, 10, 123, 36, 49, 43, 36, 114, 125, 44, > 123, 36, 50, 43, 36, 114, 125, 44, 123, 36, 51, 43, 36, 114, 125, 44, > 92, 10, 53, 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 44, 50, 48, > 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 49, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 91, 51, 100, 92, 32, 99, 105, 114, 99, 108, 101, 93, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 105, 114, > 99, 108, 101, 115, 51, 100, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, > 62, 61, 48, 44, 95, 105, 115, 95, 102, 105, 108, 108, 101, 100, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, > 111, 32, 115, 101, 116, 115, 32, 111, 102, 32, 51, 100, 32, 99, 105, 114, > 99, 108, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 114, 97, 100, 105, 117, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 102, 105, 108, 108, 101, 100, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 52, 48, > 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, > 45, 42, 32, 50, 53, 53, 32, 45, 112, 111, 105, 110, 116, 99, 108, 111, > 117, 100, 51, 100, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 99, > 105, 114, 99, 108, 101, 115, 51, 100, 32, 48, 46, 55, 10, 99, 105, 114, > 99, 108, 101, 115, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 49, 61, 49, 125, 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 111, 110, 118, 101, 114, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 36, 63, 32, 116, 111, 32, 115, 101, 116, 115, 32, 111, 102, 32, 51, > 100, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 50, 44, > 119, 105, 114, 101, 102, 114, 97, 109, 101, 44, 102, 105, 108, 108, 101, 100, > 125, 34, 32, 99, 105, 114, 99, 108, 101, 115, 32, 119, 105, 116, 104, 32, > 114, 97, 100, 105, 117, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 112, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, 98, 118, 61, 64, 123, > 45, 49, 44, 54, 125, 32, 110, 98, 112, 61, 64, 123, 45, 49, 44, 55, > 125, 10, 45, 105, 102, 32, 123, 36, 110, 98, 118, 38, 38, 36, 110, 98, > 112, 125, 10, 45, 45, 51, 100, 32, 123, 36, 49, 47, 50, 125, 44, 48, > 44, 48, 32, 45, 45, 43, 51, 100, 32, 36, 49, 44, 48, 44, 48, 32, > 45, 43, 51, 100, 32, 110, 98, 112, 50, 61, 64, 123, 45, 49, 44, 55, > 125, 10, 45, 115, 51, 100, 32, 45, 61, 91, 49, 93, 32, 36, 110, 98, > 112, 44, 48, 44, 49, 10, 45, 114, 91, 51, 93, 32, 50, 44, 36, 110, > 98, 112, 50, 44, 49, 44, 49, 44, 45, 49, 32, 45, 99, 111, 108, 117, > 109, 110, 115, 91, 51, 93, 32, 49, 44, 49, 32, 45, 115, 91, 51, 93, > 32, 121, 44, 50, 32, 45, 105, 91, 51, 93, 32, 49, 44, 36, 110, 98, > 112, 44, 49, 44, 49, 44, 53, 10, 45, 105, 91, 54, 93, 32, 49, 44, > 36, 110, 98, 112, 44, 49, 44, 49, 44, 123, 33, 36, 50, 125, 32, 45, > 97, 91, 51, 45, 54, 93, 32, 120, 32, 45, 99, 111, 108, 117, 109, 110, > 115, 91, 51, 93, 32, 48, 44, 53, 10, 45, 121, 91, 51, 93, 10, 45, > 114, 111, 119, 115, 91, 52, 93, 32, 48, 44, 123, 51, 42, 36, 110, 98, > 112, 45, 49, 125, 32, 45, 114, 111, 119, 115, 91, 53, 93, 32, 48, 44, > 123, 36, 110, 98, 112, 45, 49, 125, 32, 45, 97, 32, 121, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, > 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 99, 111, > 108, 111, 114, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 51, 100, 32, 58, 32, 82, > 44, 95, 71, 44, 95, 66, 44, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 101, 116, 32, 99, 111, 108, 111, 114, 32, 97, 110, 100, 32, 111, 112, 97, > 99, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 99, 111, 108, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 66, 61, 71, 61, 82, 39, 32, 97, 110, 100, 32, 39, 111, 112, > 97, 99, 105, 116, 121, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, > 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 49, 48, 32, 45, > 100, 111, 117, 98, 108, 101, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 55, 32, 45, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 50, 48, 32, 45, 99, 111, > 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, > 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 99, 111, 108, 111, 114, 32, 99, 117, 98, 101, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 99, 111, 108, 111, > 114, 99, 117, 98, 101, 51, 100, 32, 45, 109, 111, 100, 101, 51, 100, 32, > 50, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, > 32, 49, 10, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, 100, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 51, 100, 32, 82, 71, 66, 45, 99, 111, 108, 111, 114, 32, 99, 117, 98, > 101, 46, 34, 10, 45, 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, > 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, > 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 56, 59, 54, 41, 10, > 40, 48, 59, 48, 59, 48, 59, 92, 10, 50, 53, 53, 59, 48, 59, 48, > 59, 92, 10, 50, 53, 53, 59, 50, 53, 53, 59, 48, 59, 92, 10, 48, > 59, 50, 53, 53, 59, 48, 59, 92, 10, 48, 59, 48, 59, 50, 53, 53, > 59, 92, 10, 50, 53, 53, 59, 48, 59, 50, 53, 53, 59, 92, 10, 50, > 53, 53, 59, 50, 53, 53, 59, 50, 53, 53, 59, 92, 10, 48, 59, 50, > 53, 53, 59, 50, 53, 53, 41, 10, 40, 49, 50, 59, 48, 59, 51, 59, > 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 54, 51, 59, 54, 51, 59, > 54, 51, 59, 54, 51, 59, 48, 59, 92, 10, 49, 50, 59, 49, 59, 50, > 59, 54, 59, 53, 59, 48, 59, 48, 59, 48, 59, 54, 51, 59, 54, 51, > 59, 54, 51, 59, 54, 51, 59, 48, 59, 92, 10, 49, 50, 59, 48, 59, > 52, 59, 55, 59, 51, 59, 48, 59, 48, 59, 54, 51, 59, 48, 59, 54, > 51, 59, 54, 51, 59, 48, 59, 54, 51, 59, 92, 10, 49, 50, 59, 52, > 59, 53, 59, 54, 59, 55, 59, 48, 59, 48, 59, 54, 51, 59, 48, 59, > 54, 51, 59, 54, 51, 59, 48, 59, 54, 51, 59, 92, 10, 49, 50, 59, > 48, 59, 49, 59, 53, 59, 52, 59, 48, 59, 48, 59, 54, 51, 59, 48, > 59, 54, 51, 59, 54, 51, 59, 48, 59, 54, 51, 59, 92, 10, 49, 50, > 59, 51, 59, 55, 59, 54, 59, 50, 59, 48, 59, 48, 59, 48, 59, 54, > 51, 59, 54, 51, 59, 54, 51, 59, 54, 51, 59, 48, 41, 10, 40, 48, > 44, 50, 53, 53, 59, 48, 44, 50, 53, 53, 94, 48, 44, 48, 59, 50, > 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 59, 48, 44, 48, 41, 10, > 40, 50, 53, 53, 44, 50, 53, 53, 59, 50, 53, 53, 44, 50, 53, 53, > 94, 48, 44, 48, 59, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 50, > 53, 53, 59, 48, 44, 50, 53, 53, 41, 10, 40, 48, 44, 48, 59, 48, > 44, 48, 94, 48, 44, 48, 59, 50, 53, 53, 44, 50, 53, 53, 94, 48, > 44, 50, 53, 53, 59, 48, 44, 50, 53, 53, 41, 10, 40, 48, 44, 50, > 53, 53, 59, 48, 44, 50, 53, 53, 94, 48, 44, 48, 59, 50, 53, 53, > 44, 50, 53, 53, 94, 50, 53, 53, 44, 50, 53, 53, 59, 50, 53, 53, > 44, 50, 53, 53, 41, 10, 40, 48, 44, 50, 53, 53, 59, 48, 44, 50, > 53, 53, 94, 48, 44, 48, 59, 48, 44, 48, 94, 48, 44, 48, 59, 50, > 53, 53, 44, 50, 53, 53, 41, 10, 40, 48, 44, 50, 53, 53, 59, 48, > 44, 50, 53, 53, 94, 50, 53, 53, 44, 50, 53, 53, 59, 50, 53, 53, > 44, 50, 53, 53, 94, 48, 44, 48, 59, 50, 53, 53, 44, 50, 53, 53, > 41, 10, 45, 114, 91, 45, 54, 45, 45, 49, 93, 32, 54, 52, 44, 54, > 52, 44, 49, 44, 51, 44, 51, 32, 45, 121, 91, 45, 54, 45, 45, 49, > 93, 32, 45, 105, 91, 45, 55, 45, 45, 50, 93, 32, 40, 45, 49, 50, > 56, 59, 54, 52, 59, 54, 52, 59, 51, 41, 10, 40, 49, 59, 49, 59, > 49, 59, 49, 59, 49, 59, 49, 41, 10, 45, 97, 91, 45, 49, 54, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, > 100, 92, 32, 99, 111, 108, 111, 114, 99, 117, 98, 101, 93, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 110, 101, 51, 100, > 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, 44, 95, 104, 101, 105, 103, > 104, 116, 44, 95, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, 105, > 111, 110, 115, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 99, 111, 110, 101, 32, 97, 116, 32, > 40, 48, 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 97, 100, 105, 117, > 115, 61, 49, 39, 44, 39, 104, 101, 105, 103, 104, 116, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, > 105, 111, 110, 115, 61, 50, 52, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 45, 99, 111, 110, 101, 51, 100, 32, 49, 48, 44, > 52, 48, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, > 100, 32, 49, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, > 32, 64, 123, 45, 82, 71, 66, 125, 10, 99, 111, 110, 101, 51, 100, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 51, 61, 50, 52, 125, > 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, 44, > 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 111, 110, 101, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, 32, 104, > 101, 105, 103, 104, 116, 32, 36, 50, 32, 97, 110, 100, 32, 36, 51, 32, > 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 46, 34, 10, 45, > 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, > 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, > 49, 48, 48, 46, 53, 41, 10, 40, 123, 36, 51, 43, 50, 125, 59, 123, > 50, 42, 36, 51, 125, 41, 10, 40, 48, 44, 48, 44, 48, 59, 48, 44, > 48, 44, 36, 50, 41, 10, 40, 48, 59, 123, 50, 42, 112, 105, 125, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, 51, 43, 49, 125, > 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, > 32, 48, 44, 123, 36, 51, 45, 49, 125, 32, 45, 45, 115, 105, 110, 91, > 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, 32, 45, 42, 91, > 45, 50, 44, 45, 49, 93, 32, 36, 49, 32, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 49, 44, 36, > 51, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 48, 44, 45, 49, 32, 45, 43, 91, 45, 50, > 44, 45, 49, 93, 32, 50, 10, 50, 44, 36, 51, 44, 49, 44, 49, 44, > 51, 44, 48, 32, 91, 45, 50, 93, 32, 91, 45, 52, 93, 32, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 120, 10, 45, 105, 91, 45, 52, 93, > 32, 50, 44, 36, 51, 44, 49, 44, 49, 44, 51, 44, 49, 32, 45, 97, > 91, 45, 52, 45, 45, 50, 93, 32, 120, 10, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 121, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, > 50, 48, 48, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, 10, > 45, 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, 97, 91, 45, 54, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, > 100, 92, 32, 99, 111, 110, 101, 93, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 99, 117, 98, 101, 115, 51, 100, 32, 58, 32, 95, > 115, 105, 122, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 116, 111, > 32, 115, 101, 116, 115, 32, 111, 102, 32, 51, 100, 32, 99, 117, 98, 101, > 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 115, 105, 122, 101, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, > 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 115, 105, 122, 101, > 50, 100, 121, 32, 52, 48, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 32, 53, 48, 37, 32, 45, 42, 32, 50, 53, 53, 32, 45, 112, 111, > 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 45, 99, 111, 108, 111, > 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 53, 53, 44, > 50, 53, 53, 32, 45, 99, 117, 98, 101, 115, 51, 100, 32, 49, 10, 99, > 117, 98, 101, 115, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 49, 61, 49, 125, 62, 61, 48, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 51, 100, 32, 111, 98, > 106, 101, 99, 116, 36, 63, 32, 116, 111, 32, 115, 101, 116, 115, 32, 111, > 102, 32, 51, 100, 32, 99, 117, 98, 101, 115, 32, 119, 105, 116, 104, 32, > 115, 105, 122, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 112, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 110, 98, 118, 61, 64, 123, 45, 49, > 44, 54, 125, 32, 110, 98, 112, 61, 64, 123, 45, 49, 44, 55, 125, 10, > 45, 105, 102, 32, 123, 36, 110, 98, 118, 38, 38, 36, 110, 98, 112, 125, > 10, 45, 115, 51, 100, 10, 45, 108, 91, 49, 93, 32, 45, 61, 32, 123, > 56, 42, 105, 91, 48, 93, 125, 32, 45, 61, 32, 123, 54, 42, 105, 91, > 49, 93, 125, 44, 48, 44, 49, 32, 45, 101, 110, 100, 108, 10, 45, 108, > 91, 50, 93, 32, 45, 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, > 44, 49, 44, 45, 49, 10, 104, 97, 108, 102, 61, 123, 36, 49, 47, 50, > 125, 10, 45, 45, 32, 39, 36, 104, 97, 108, 102, 44, 48, 44, 48, 39, > 32, 45, 45, 43, 32, 39, 36, 49, 44, 48, 44, 48, 39, 32, 45, 97, > 32, 120, 10, 45, 45, 32, 39, 48, 44, 36, 104, 97, 108, 102, 44, 48, > 39, 32, 45, 45, 43, 32, 39, 48, 44, 36, 49, 44, 48, 39, 32, 45, > 97, 32, 120, 10, 45, 45, 32, 39, 48, 44, 48, 44, 36, 104, 97, 108, > 102, 39, 32, 45, 45, 43, 32, 39, 48, 44, 48, 44, 36, 49, 39, 32, > 45, 97, 32, 120, 10, 45, 101, 110, 100, 108, 10, 45, 108, 91, 51, 93, > 32, 45, 114, 32, 50, 44, 123, 104, 47, 50, 125, 44, 49, 44, 49, 44, > 45, 49, 10, 45, 122, 32, 49, 44, 49, 32, 45, 42, 32, 56, 32, 45, > 114, 32, 52, 44, 49, 48, 48, 37, 32, 45, 105, 91, 48, 93, 32, 49, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 52, 32, 45, 97, 32, 120, > 32, 91, 45, 49, 93, 120, 53, 32, 45, 97, 32, 120, 10, 45, 43, 32, > 39, 34, 48, 44, 48, 44, 50, 44, 51, 44, 49, 44, 32, 48, 44, 52, > 44, 53, 44, 55, 44, 54, 44, 32, 48, 44, 48, 44, 49, 44, 53, 44, > 52, 44, 32, 48, 44, 50, 44, 54, 44, 55, 44, 51, 44, 32, 48, 44, > 48, 44, 52, 44, 54, 44, 50, 44, 32, 48, 44, 49, 44, 51, 44, 55, > 44, 53, 34, 39, 10, 45, 101, 110, 100, 108, 10, 45, 108, 91, 52, 93, > 32, 45, 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, > 45, 49, 32, 45, 114, 32, 49, 56, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 48, 44, 50, 32, 45, 101, 110, 100, 108, 32, 45, 114, 91, 53, > 93, 32, 54, 44, 49, 48, 48, 37, 10, 45, 121, 32, 45, 97, 32, 121, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 99, 117, 112, 51, 100, 32, 58, 32, 95, 114, 101, 115, 111, 108, 117, 116, > 105, 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 99, 117, 112, 32, 111, 98, 106, 101, > 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 99, 117, 112, 51, 100, 32, 44, 10, 99, 117, 112, 51, 100, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 49, 50, 56, 125, 62, > 48, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 99, 117, 112, 44, 32, 119, 105, 116, 104, 32, 114, 101, > 115, 111, 108, 117, 116, 105, 111, 110, 32, 36, 49, 46, 34, 10, 45, 118, > 32, 45, 10, 49, 48, 48, 44, 50, 48, 48, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 48, 37, 44, 48, 37, 44, 52, 48, > 37, 44, 52, 48, 37, 44, 48, 44, 49, 44, 49, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 51, 53, 37, > 44, 51, 53, 37, 44, 48, 44, 49, 44, 48, 10, 45, 112, 111, 108, 121, > 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, 48, 44, 52, 53, 37, 44, > 56, 37, 44, 52, 53, 37, 44, 50, 48, 37, 44, 57, 48, 37, 44, 48, > 44, 57, 48, 37, 44, 49, 44, 49, 10, 45, 101, 108, 108, 105, 112, 115, > 101, 91, 45, 49, 93, 32, 48, 37, 44, 49, 48, 48, 37, 44, 51, 48, > 37, 44, 49, 48, 37, 44, 48, 44, 49, 44, 49, 32, 45, 98, 91, 45, > 49, 93, 32, 48, 46, 49, 37, 10, 45, 108, 97, 116, 104, 101, 51, 100, > 91, 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 91, 51, 100, 92, 32, 99, 117, 112, 93, 10, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 121, 108, 105, 110, 100, 101, 114, > 51, 100, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, 44, 95, 104, 101, > 105, 103, 104, 116, 44, 95, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, > 115, 105, 111, 110, 115, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 99, 121, 108, 105, 110, 100, > 101, 114, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, 41, 44, 32, 119, > 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, > 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 114, 97, 100, 105, 117, 115, 61, 49, 39, 44, 39, 104, 101, 105, 103, > 104, 116, 61, 49, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 115, 117, > 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 61, 50, 52, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 99, 121, 108, 105, > 110, 100, 101, 114, 51, 100, 32, 49, 48, 44, 52, 48, 32, 45, 45, 112, > 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, 82, 71, > 66, 125, 10, 99, 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 36, 123, 51, 61, 50, 52, 125, 62, 48, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, > 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 99, 121, 108, 105, 110, 100, 101, 114, 44, > 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, > 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 32, 97, 110, 100, 32, 36, > 51, 32, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 46, 34, > 10, 45, 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, > 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, > 53, 59, 49, 48, 48, 46, 53, 41, 10, 40, 123, 50, 42, 36, 51, 43, > 50, 125, 59, 123, 51, 42, 36, 51, 125, 41, 10, 40, 48, 44, 48, 44, > 48, 59, 48, 44, 48, 44, 36, 50, 41, 10, 40, 48, 59, 123, 50, 42, > 112, 105, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, > 51, 43, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 119, 115, > 91, 45, 49, 93, 32, 48, 44, 123, 36, 51, 45, 49, 125, 32, 45, 45, > 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 45, 122, 91, 45, 49, > 93, 32, 48, 44, 50, 32, 49, 44, 36, 51, 44, 49, 44, 49, 44, 36, > 50, 32, 45, 97, 91, 45, 51, 44, 45, 49, 93, 32, 120, 10, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 121, 10, 49, 44, 36, 51, 44, 49, > 44, 49, 44, 39, 121, 39, 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, > 49, 93, 32, 48, 44, 45, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 32, 50, 10, 50, 44, 36, 51, 44, 49, 44, 49, 44, 51, 44, 49, > 32, 91, 45, 51, 93, 32, 91, 45, 51, 93, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 50, 44, 36, 51, 44, 49, 44, 49, 44, > 51, 44, 48, 32, 91, 45, 51, 93, 32, 91, 45, 53, 93, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 36, 51, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 45, 45, 43, 91, 45, 52, 44, 45, 51, > 93, 32, 36, 51, 32, 45, 105, 91, 45, 55, 93, 32, 49, 44, 36, 51, > 44, 49, 44, 49, 44, 52, 32, 45, 114, 118, 91, 45, 54, 44, 45, 53, > 93, 32, 45, 97, 91, 45, 55, 45, 45, 53, 44, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 51, 44, 123, 51, 42, 36, 51, 125, 44, 49, 44, 49, > 44, 50, 48, 48, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, > 10, 45, 121, 91, 45, 54, 45, 45, 50, 93, 32, 45, 97, 91, 45, 56, > 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 99, 121, 108, 105, 110, 100, 101, 114, 93, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 105, 115, 116, 114, 105, > 98, 117, 116, 105, 111, 110, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 71, 101, 116, 32, 51, 100, 32, 99, 111, 108, 111, 114, 32, 100, > 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, > 111, 110, 51, 100, 32, 45, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, > 100, 32, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 91, > 45, 49, 93, 32, 49, 32, 45, 97, 100, 100, 51, 100, 10, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, 51, 100, 32, 99, 111, > 108, 111, 114, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, > 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 112, 101, 114, 109, > 117, 116, 101, 32, 34, 99, 120, 121, 122, 34, 32, 45, 121, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 110, 98, 112, 61, 123, 104, 47, 51, 125, 10, 45, 105, 91, 45, 50, 93, > 32, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, > 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, > 46, 53, 59, 92, 10, 36, 110, 98, 112, 59, 36, 110, 98, 112, 41, 10, > 40, 49, 44, 48, 59, 49, 44, 123, 36, 110, 98, 112, 45, 49, 125, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 50, 44, 36, 110, 98, 112, 44, 49, > 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, > 49, 32, 45, 121, 91, 45, 49, 93, 10, 91, 45, 50, 93, 10, 49, 44, > 36, 110, 98, 112, 44, 49, 44, 49, 44, 49, 10, 45, 97, 32, 121, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 100, 105, 115, > 116, 114, 105, 98, 117, 116, 105, 111, 110, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 47, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 100, 105, 118, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 100, 105, 118, 51, 100, 32, 58, 32, 102, > 97, 99, 116, 111, 114, 32, 58, 32, 102, 97, 99, 116, 111, 114, 95, 120, > 44, 102, 97, 99, 116, 111, 114, 95, 121, 44, 95, 102, 97, 99, 116, 111, > 114, 95, 122, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 83, 99, 97, 108, 101, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 105, 115, 111, > 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 32, 111, 114, 32, 97, 110, > 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 44, 32, 119, > 105, 116, 104, 32, 116, 104, 101, 32, 105, 110, 118, 101, 114, 115, 101, 32, > 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 102, 97, 99, 116, 111, 114, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, > 39, 45, 47, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 102, 97, 99, 116, 111, 114, 95, 122, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, 115, > 51, 100, 32, 53, 44, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, > 32, 45, 45, 97, 100, 100, 51, 100, 91, 45, 49, 93, 32, 49, 50, 44, > 48, 44, 48, 32, 45, 100, 105, 118, 51, 100, 91, 45, 49, 93, 32, 49, > 46, 50, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, > 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, > 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 100, 98, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, 111, 117, 98, > 108, 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 111, 117, 98, 108, 101, 51, 100, 32, 58, 32, 95, > 105, 115, 95, 100, 111, 117, 98, 108, 101, 95, 115, 105, 100, 101, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 110, 97, 98, 108, 101, 47, > 100, 105, 115, 97, 98, 108, 101, 32, 100, 111, 117, 98, 108, 101, 45, 115, > 105, 100, 101, 100, 32, 109, 111, 100, 101, 32, 102, 111, 114, 32, 51, 100, > 32, 114, 101, 110, 100, 101, 114, 105, 110, 103, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 100, > 98, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 105, 115, 95, 100, 111, 117, 98, 108, 101, 95, 115, 105, 100, 101, 100, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 109, 111, 100, 101, 51, 100, 32, 49, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 50, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, > 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 48, 44, 54, 48, 32, 45, 100, 111, 117, 98, 108, > 101, 51, 100, 32, 36, 62, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, > 51, 100, 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 101, 118, 97, 116, 105, 111, > 110, 51, 100, 32, 58, 32, 122, 45, 102, 97, 99, 116, 111, 114, 32, 58, > 32, 91, 101, 108, 101, 118, 97, 116, 105, 111, 110, 95, 109, 97, 112, 93, > 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 32, 58, 32, 40, > 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 66, 117, 105, 108, 100, 32, 51, 100, > 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, > 105, 116, 104, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 101, 108, 101, 118, 97, 116, 105, 111, 110, 32, 109, 97, 112, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 87, 104, 101, 110, 32, 105, 110, 118, > 111, 107, 101, 100, 32, 119, 105, 116, 104, 32, 40, 110, 111, 32, 97, 114, > 103, 115, 41, 32, 111, 114, 32, 39, 122, 45, 102, 97, 99, 116, 111, 114, > 39, 44, 32, 116, 104, 101, 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, > 32, 109, 97, 112, 32, 105, 115, 32, 99, 111, 109, 112, 117, 116, 101, 100, > 32, 97, 115, 32, 116, 104, 101, 32, 112, 111, 105, 110, 116, 119, 105, 115, > 101, 32, 76, 50, 32, 110, 111, 114, 109, 32, 111, 102, 32, 116, 104, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 112, 105, 120, 101, 108, 32, > 118, 97, 108, 117, 101, 115, 46, 32, 79, 116, 104, 101, 114, 119, 105, 115, > 101, 44, 32, 116, 104, 101, 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, > 32, 109, 97, 112, 32, 105, 115, 32, 116, 97, 107, 101, 110, 32, 102, 114, > 111, 109, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 105, 109, 97, 103, 101, 32, 111, 114, 32, 102, 111, 114, 109, 117, 108, > 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 98, 108, 117, 114, 32, 53, 32, > 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 48, 46, 53, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 49, 50, 56, 44, > 49, 50, 56, 44, 49, 44, 51, 44, 63, 40, 50, 53, 53, 41, 32, 45, > 112, 108, 97, 115, 109, 97, 32, 49, 48, 44, 51, 32, 45, 98, 108, 117, > 114, 32, 52, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, 48, 48, > 48, 48, 32, 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 91, > 45, 49, 93, 32, 39, 88, 61, 40, 120, 45, 54, 52, 41, 47, 54, 59, > 89, 61, 40, 121, 45, 54, 52, 41, 47, 54, 59, 49, 48, 48, 42, 101, > 120, 112, 40, 45, 40, 88, 94, 50, 43, 89, 94, 50, 41, 47, 51, 48, > 41, 42, 97, 98, 115, 40, 99, 111, 115, 40, 88, 41, 42, 115, 105, 110, > 40, 89, 41, 41, 39, 10, 35, 64, 103, 109, 105, 99, 32, 101, 109, 112, > 116, 121, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 101, 109, 112, 116, 121, 32, 51, 100, 32, 111, 98, 106, > 101, 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 101, 109, 112, 116, 121, 51, 100, 10, 101, 109, 112, 116, 121, 51, 100, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, > 116, 32, 101, 109, 112, 116, 121, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 46, 34, 10, 45, 118, 32, 45, 32, 40, 54, 55, 46, 53, 59, 55, > 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, > 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 48, 59, 48, 41, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 101, 109, 112, > 116, 121, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 58, 32, 95, 100, 101, 112, > 116, 104, 62, 48, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, > 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, > 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 101, 120, 116, 114, 117, 100, 101, 100, 32, > 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 98, 105, 110, 97, 114, 121, 32, 88, > 89, 45, 112, 114, 111, 102, 105, 108, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 100, 101, 112, 116, 104, 61, 49, 54, 39, 44, > 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 61, 49, 48, 50, > 52, 39, 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 61, 48, 46, 53, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 101, > 120, 116, 114, 117, 100, 101, 51, 100, 32, 49, 54, 10, 101, 120, 116, 114, > 117, 100, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 49, 54, 125, 62, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 49, 48, 50, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, > 48, 46, 53, 37, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 101, 120, 116, 114, > 117, 100, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 102, > 114, 111, 109, 32, 88, 89, 45, 112, 114, 111, 102, 105, 108, 101, 36, 63, > 44, 32, 119, 105, 116, 104, 32, 100, 101, 112, 116, 104, 32, 36, 49, 44, > 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 32, 36, 50, 32, 97, > 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, 109, 32, 45, 110, > 32, 48, 44, 49, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 114, 61, > 123, 114, 111, 117, 110, 100, 40, 109, 97, 120, 40, 49, 44, 105, 102, 40, > 119, 62, 104, 44, 109, 105, 110, 40, 36, 50, 44, 119, 41, 44, 109, 105, > 110, 40, 36, 50, 44, 104, 41, 42, 119, 47, 104, 41, 41, 41, 125, 10, > 104, 114, 61, 123, 114, 111, 117, 110, 100, 40, 109, 97, 120, 40, 49, 44, > 105, 102, 40, 119, 62, 104, 44, 109, 105, 110, 40, 36, 50, 44, 119, 41, > 42, 104, 47, 119, 44, 109, 105, 110, 40, 36, 50, 44, 104, 41, 41, 41, > 41, 125, 10, 102, 97, 99, 116, 61, 123, 36, 49, 47, 109, 97, 120, 40, > 119, 47, 36, 119, 114, 44, 104, 47, 36, 104, 114, 41, 125, 10, 45, 98, > 32, 36, 51, 44, 48, 32, 45, 114, 32, 36, 119, 114, 44, 36, 104, 114, > 44, 49, 44, 49, 44, 50, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, > 121, 122, 32, 49, 44, 48, 10, 45, 105, 115, 111, 115, 117, 114, 102, 97, > 99, 101, 51, 100, 32, 53, 48, 37, 32, 45, 42, 51, 100, 32, 49, 44, > 49, 44, 36, 102, 97, 99, 116, 32, 45, 114, 118, 51, 100, 10, 45, 110, > 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, > 111, 99, 97, 108, 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 111, 99, 97, 108, 101, 51, 100, 32, > 58, 32, 102, 111, 99, 97, 108, 101, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 51, 100, 32, 102, > 111, 99, 97, 108, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 51, 100, 39, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 39, 102, > 111, 99, 97, 108, 101, 39, 32, 116, 111, 32, 48, 32, 116, 111, 32, 101, > 110, 97, 98, 108, 101, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, 112, > 114, 111, 106, 101, 99, 116, 105, 111, 110, 32, 40, 105, 110, 115, 116, 101, > 97, 100, 32, 111, 102, 32, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, > 101, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 110, 101, 103, 97, 116, 105, 118, 101, 32, 39, 102, 111, 99, 97, 108, > 101, 39, 32, 119, 105, 108, 108, 32, 100, 105, 115, 97, 98, 108, 101, 32, > 51, 100, 32, 115, 112, 114, 105, 116, 101, 32, 122, 111, 111, 109, 105, 110, > 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 102, 111, 99, 97, > 108, 101, 61, 55, 48, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 116, > 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, 114, > 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, > 48, 44, 54, 48, 32, 45, 102, 111, 99, 97, 108, 101, 51, 100, 32, 123, > 36, 60, 42, 57, 48, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, > 51, 100, 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, > 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 103, 97, 117, 115, 115, 105, 97, 110, 115, 51, 100, 32, 58, > 32, 95, 115, 105, 122, 101, 62, 48, 44, 95, 111, 112, 97, 99, 105, 116, > 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, > 98, 106, 101, 99, 116, 115, 32, 105, 110, 116, 111, 32, 115, 101, 116, 32, > 111, 102, 32, 51, 100, 32, 103, 97, 117, 115, 115, 105, 97, 110, 45, 115, > 104, 97, 112, 101, 100, 32, 115, 112, 114, 105, 116, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 114, 50, 100, 121, 32, 51, 50, 32, 45, 100, 105, > 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, 32, 45, 103, 97, > 117, 115, 115, 105, 97, 110, 115, 51, 100, 32, 50, 48, 32, 45, 99, 111, > 108, 111, 114, 99, 117, 98, 101, 51, 100, 32, 45, 112, 114, 105, 109, 105, > 116, 105, 118, 101, 115, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, > 51, 100, 10, 103, 97, 117, 115, 115, 105, 97, 110, 115, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 50, 125, > 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 46, > 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, > 101, 114, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 32, > 105, 110, 116, 111, 32, 115, 101, 116, 115, 32, 111, 102, 32, 103, 97, 117, > 115, 115, 105, 97, 110, 45, 115, 104, 97, 112, 101, 100, 32, 51, 100, 32, > 115, 112, 114, 105, 116, 101, 115, 44, 32, 119, 105, 116, 104, 32, 115, 105, > 122, 101, 32, 36, 49, 32, 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 112, 51, 100, > 32, 50, 32, 45, 112, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 32, 45, 115, 51, 100, 10, 110, 98, 118, 61, 123, > 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 40, 45, 49, 50, 56, > 59, 36, 49, 59, 36, 49, 59, 49, 41, 10, 36, 49, 44, 36, 49, 32, > 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, 45, 49, 93, 32, 51, 53, > 37, 44, 51, 53, 37, 44, 48, 32, 45, 99, 91, 45, 49, 93, 32, 51, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 36, 50, 32, 45, 121, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 121, 10, 45, 105, 102, 32, 123, 36, 110, 98, 118, > 62, 49, 125, 32, 52, 44, 123, 36, 110, 98, 118, 45, 49, 125, 44, 49, > 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 121, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 10, > 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 103, 109, 105, 99, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 73, 110, 112, 117, 116, 32, 97, 32, 51, 100, 32, 71, 39, 77, > 73, 67, 32, 108, 111, 103, 111, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 103, 109, 105, 99, 51, 100, 32, 45, 45, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 10, 103, 109, 105, > 99, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 71, 92, 52, 55, 77, 73, 67, 32, > 108, 111, 103, 111, 46, 34, 10, 45, 118, 32, 45, 10, 45, 116, 101, 120, > 116, 51, 100, 32, 71, 44, 54, 48, 44, 50, 48, 44, 50, 32, 45, 99, > 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 54, 44, 54, 52, 44, 50, > 53, 53, 10, 45, 116, 101, 120, 116, 51, 100, 32, 92, 39, 44, 54, 48, > 44, 50, 48, 44, 50, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 52, > 48, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 54, 52, 44, > 49, 50, 56, 44, 50, 53, 53, 10, 45, 116, 101, 120, 116, 51, 100, 32, > 77, 44, 54, 48, 44, 50, 48, 44, 50, 32, 45, 43, 51, 100, 91, 45, > 49, 93, 32, 53, 48, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, > 32, 57, 54, 44, 49, 57, 54, 44, 50, 53, 53, 10, 45, 116, 101, 120, > 116, 51, 100, 32, 73, 44, 54, 48, 44, 50, 48, 44, 50, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 57, 48, 32, 45, 99, 111, 108, 51, 100, > 91, 45, 49, 93, 32, 54, 52, 44, 49, 50, 56, 44, 50, 53, 53, 10, > 45, 116, 101, 120, 116, 51, 100, 32, 67, 44, 54, 48, 44, 50, 48, 44, > 50, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 54, 44, 54, 52, 44, > 50, 53, 53, 10, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 56, 32, > 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, 50, 44, 45, 51, 44, > 49, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 57, > 50, 44, 49, 50, 56, 44, 50, 53, 53, 10, 45, 43, 51, 100, 91, 45, > 54, 45, 45, 49, 93, 32, 45, 99, 51, 100, 91, 45, 49, 93, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 51, 48, 10, 45, 98, 111, 120, 51, 100, > 32, 123, 109, 105, 110, 40, 51, 43, 64, 123, 60, 44, 45, 49, 125, 47, > 50, 44, 49, 48, 41, 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, > 93, 32, 123, 51, 48, 42, 36, 62, 125, 44, 123, 50, 48, 43, 56, 48, > 42, 36, 62, 125, 44, 123, 49, 48, 42, 36, 62, 125, 44, 48, 46, 53, > 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, 49, 44, > 123, 36, 62, 42, 49, 50, 125, 10, 45, 43, 51, 100, 91, 45, 49, 93, > 32, 123, 56, 48, 42, 99, 111, 115, 40, 48, 46, 53, 43, 49, 46, 48, > 50, 42, 36, 62, 42, 49, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, > 44, 123, 51, 48, 42, 115, 105, 110, 40, 48, 46, 56, 43, 36, 62, 42, > 49, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, 44, 123, 50, 42, 36, > 62, 45, 54, 48, 125, 10, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, > 91, 45, 51, 48, 45, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 53, 44, 51, 48, 32, 45, 43, 51, 100, 91, 45, 50, > 45, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 103, 109, 105, 99, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 103, 121, 114, 111, 105, 100, 51, 100, 32, 58, 32, 95, > 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 48, 44, 95, 122, 111, > 111, 109, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 103, 121, 114, 111, 105, 100, 32, 97, 116, 32, 40, > 48, 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, > 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, > 111, 108, 117, 116, 105, 111, 110, 61, 51, 50, 39, 32, 97, 110, 100, 32, > 39, 122, 111, 111, 109, 61, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 45, 103, 121, 114, 111, 105, 100, 51, 100, 32, 52, > 56, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, > 32, 49, 10, 103, 121, 114, 111, 105, 100, 51, 100, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 36, 123, 49, 61, 51, 50, 125, 62, 48, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 53, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 103, 121, > 114, 111, 105, 100, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, 108, > 117, 116, 105, 111, 110, 32, 36, 49, 32, 97, 110, 100, 32, 114, 97, 110, > 103, 101, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 115, > 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 34, 39, 48, 46, 52, > 57, 42, 40, 92, 10, 99, 111, 115, 40, 32, 50, 42, 120, 32, 43, 32, > 121, 32, 43, 32, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, > 115, 40, 32, 50, 42, 120, 32, 45, 32, 121, 32, 43, 32, 122, 32, 45, > 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, > 120, 32, 43, 32, 121, 32, 45, 32, 122, 32, 45, 32, 112, 105, 41, 32, > 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 120, 32, 45, 32, 121, 32, > 45, 32, 122, 32, 45, 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, > 40, 32, 120, 32, 43, 32, 50, 42, 121, 32, 43, 32, 122, 32, 45, 32, > 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 32, 120, 32, 43, 32, 50, > 42, 121, 32, 45, 32, 122, 32, 45, 32, 112, 105, 41, 92, 10, 43, 32, > 99, 111, 115, 40, 45, 32, 120, 32, 45, 32, 50, 42, 121, 32, 43, 32, > 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, 32, > 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 122, 32, 45, 32, 112, 105, > 41, 92, 10, 43, 32, 99, 111, 115, 40, 32, 120, 32, 43, 32, 121, 32, > 43, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, > 115, 40, 45, 32, 120, 32, 43, 32, 121, 32, 43, 32, 50, 42, 122, 32, > 45, 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, 40, 32, 120, 32, > 45, 32, 121, 32, 45, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, 32, > 43, 32, 99, 111, 115, 40, 45, 32, 120, 32, 45, 32, 121, 32, 45, 32, > 50, 42, 122, 32, 45, 32, 112, 105, 41, 92, 10, 43, 32, 99, 111, 115, > 40, 45, 32, 50, 42, 120, 32, 43, 32, 121, 32, 43, 32, 122, 41, 32, > 43, 32, 99, 111, 115, 40, 32, 50, 42, 120, 32, 43, 32, 121, 32, 45, > 32, 122, 41, 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 120, > 32, 45, 32, 121, 32, 43, 32, 122, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 120, 32, 45, 32, 121, 32, 45, 32, 122, 41, 92, 10, 43, > 32, 99, 111, 115, 40, 45, 32, 120, 32, 43, 32, 50, 42, 121, 32, 43, > 32, 122, 41, 32, 43, 32, 99, 111, 115, 40, 32, 120, 32, 45, 32, 50, > 42, 121, 32, 43, 32, 122, 41, 92, 10, 43, 32, 99, 111, 115, 40, 45, > 32, 120, 32, 43, 32, 50, 42, 121, 32, 45, 32, 122, 41, 32, 43, 32, > 99, 111, 115, 40, 32, 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 122, > 41, 92, 10, 43, 32, 99, 111, 115, 40, 32, 120, 32, 45, 32, 121, 32, > 43, 32, 50, 42, 122, 41, 32, 43, 32, 99, 111, 115, 40, 32, 120, 32, > 43, 32, 121, 32, 45, 32, 50, 42, 122, 41, 92, 10, 43, 32, 99, 111, > 115, 40, 45, 32, 120, 32, 45, 32, 121, 32, 43, 32, 50, 42, 122, 41, > 32, 43, 32, 99, 111, 115, 40, 45, 32, 120, 32, 43, 32, 121, 32, 45, > 32, 50, 42, 122, 41, 92, 10, 41, 32, 43, 32, 48, 46, 50, 55, 42, > 40, 32, 92, 10, 99, 111, 115, 40, 45, 32, 50, 42, 120, 32, 43, 32, > 50, 42, 121, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 32, 50, 42, 120, 32, 43, 32, 50, > 42, 121, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, > 32, 50, 42, 120, 32, 45, 32, 50, 42, 121, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 121, 32, 43, 32, > 50, 42, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 121, 32, 45, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 32, 50, 42, 121, 32, 43, 32, 50, > 42, 122, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, > 32, 50, 42, 121, 32, 45, 32, 50, 42, 122, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 45, 32, 50, 42, 122, 32, 43, 32, > 50, 42, 120, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, > 32, 50, 42, 122, 32, 45, 32, 50, 42, 120, 32, 45, 32, 112, 105, 41, > 92, 10, 43, 32, 99, 111, 115, 40, 32, 50, 42, 122, 32, 43, 32, 50, > 42, 120, 32, 45, 32, 112, 105, 41, 32, 43, 32, 99, 111, 115, 40, 45, > 32, 50, 42, 122, 32, 45, 32, 50, 42, 120, 32, 45, 32, 112, 105, 41, > 92, 10, 41, 32, 45, 32, 48, 46, 54, 57, 39, 34, 44, 48, 44, 123, > 45, 36, 50, 125, 44, 123, 45, 36, 50, 125, 44, 123, 45, 36, 50, 125, > 44, 36, 50, 44, 36, 50, 44, 36, 50, 44, 36, 49, 44, 36, 49, 44, > 36, 49, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, > 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 103, 121, 114, 111, 105, 100, 93, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 116, 32, 51, > 100, 32, 99, 111, 108, 111, 114, 32, 104, 105, 115, 116, 111, 103, 114, 97, > 109, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 51, 100, 32, 45, 99, 111, 108, 111, 114, 99, 117, > 98, 101, 51, 100, 32, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, > 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 97, 100, 100, 51, 100, 10, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 51, 100, 32, 58, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, 51, 100, 32, 99, 111, > 108, 111, 114, 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 111, 102, > 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 32, 123, 119, 42, > 104, 125, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 111, 105, > 110, 116, 99, 108, 111, 117, 100, 32, 49, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 32, 45, 109, 97, 112, 32, 51, 32, 45, 112, 111, 105, 110, 116, > 99, 108, 111, 117, 100, 51, 100, 32, 45, 110, 109, 32, 34, 91, 51, 100, > 32, 104, 105, 115, 116, 111, 103, 114, 97, 109, 93, 34, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 109, 97, 103, 101, 54, 99, 117, 98, 101, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, > 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 99, 117, > 98, 101, 115, 32, 102, 114, 111, 109, 32, 54, 45, 115, 101, 116, 115, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 110, 105, 109, 97, 116, > 101, 32, 102, 108, 111, 119, 101, 114, 44, 34, 51, 48, 44, 48, 34, 44, > 34, 51, 48, 44, 53, 34, 44, 54, 32, 45, 105, 109, 97, 103, 101, 54, > 99, 117, 98, 101, 51, 100, 10, 105, 109, 97, 103, 101, 54, 99, 117, 98, > 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, > 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, > 100, 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 77, 61, 123, 109, > 97, 120, 40, 64, 123, 45, 109, 97, 120, 95, 119, 104, 125, 41, 125, 32, > 45, 114, 32, 36, 77, 44, 36, 77, 44, 49, 44, 51, 32, 45, 105, 109, > 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 32, 45, 110, 51, 100, 32, > 45, 99, 51, 100, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, > 116, 40, 64, 35, 47, 54, 41, 125, 10, 45, 43, 51, 100, 91, 45, 54, > 93, 32, 48, 44, 48, 44, 45, 48, 46, 53, 10, 45, 114, 51, 100, 91, > 45, 53, 93, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 32, 45, 43, > 51, 100, 91, 45, 53, 93, 32, 48, 44, 48, 44, 48, 46, 53, 10, 45, > 114, 51, 100, 91, 45, 52, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, > 48, 32, 45, 43, 51, 100, 91, 45, 52, 93, 32, 45, 48, 46, 53, 44, > 48, 44, 48, 10, 45, 114, 51, 100, 91, 45, 51, 93, 32, 48, 44, 49, > 44, 48, 44, 57, 48, 32, 45, 43, 51, 100, 91, 45, 51, 93, 32, 48, > 46, 53, 44, 48, 44, 48, 10, 45, 114, 51, 100, 91, 45, 50, 93, 32, > 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 43, 51, 100, 91, 45, 50, > 93, 32, 48, 44, 45, 48, 46, 53, 44, 48, 10, 45, 114, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 45, 57, 48, 32, 45, 43, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 46, 53, 44, 48, 10, 45, > 43, 51, 100, 91, 45, 54, 45, 45, 49, 93, 32, 45, 110, 109, 91, 45, > 49, 93, 32, 34, 91, 51, 100, 32, 105, 109, 97, 103, 101, 32, 99, 117, > 98, 101, 93, 34, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 109, 97, 103, 101, 98, 108, 111, 99, 107, 115, 51, 100, 32, 58, > 32, 95, 109, 97, 120, 105, 109, 117, 109, 95, 101, 108, 101, 118, 97, 116, > 105, 111, 110, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, > 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, > 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 98, 108, 111, 99, 107, > 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 84, 114, 97, 110, 115, 112, 97, 114, 101, 110, 99, 121, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 105, 115, 32, 116, 97, 107, 101, 110, 32, 105, 110, 116, 111, 32, 97, > 99, 99, 111, 117, 110, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 109, 97, 120, 105, 109, 117, 109, 95, 101, 108, 101, 118, 97, 116, > 105, 111, 110, 61, 49, 48, 39, 32, 97, 110, 100, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, 51, 50, 32, 45, > 105, 109, 97, 103, 101, 98, 108, 111, 99, 107, 115, 51, 100, 32, 45, 50, > 48, 32, 45, 109, 51, 100, 32, 51, 10, 105, 109, 97, 103, 101, 98, 108, > 111, 99, 107, 115, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 50, 61, 48, 125, 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 49, 48, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, > 32, 51, 100, 32, 98, 108, 111, 99, 107, 115, 32, 102, 114, 111, 109, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 109, 97, > 120, 105, 109, 117, 109, 32, 101, 108, 101, 118, 97, 116, 105, 111, 110, 32, > 36, 49, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, 98, > 91, 48, 93, 32, 105, 115, 95, 111, 112, 97, 99, 105, 116, 121, 61, 123, > 64, 35, 61, 61, 50, 125, 10, 45, 108, 91, 93, 32, 45, 98, 111, 120, > 51, 100, 32, 49, 44, 49, 44, 48, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 119, 45, 49, 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 49, 44, 48, 44, 48, 32, 45, 100, 111, 110, 101, 32, 45, 43, > 51, 100, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 104, 45, 49, > 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, > 48, 32, 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 10, 45, 101, 110, > 100, 108, 10, 45, 115, 51, 100, 91, 45, 49, 93, 10, 45, 45, 110, 111, > 114, 109, 91, 48, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, 50, 10, > 45, 121, 91, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 36, 49, 10, 45, 114, 91, 45, 53, 93, 32, 50, 52, 44, 64, 123, 45, > 53, 44, 114, 111, 117, 110, 100, 40, 119, 42, 104, 47, 50, 52, 41, 125, > 44, 49, 44, 49, 44, 45, 49, 10, 45, 105, 102, 32, 123, 36, 49, 60, > 48, 125, 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 50, > 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 53, 32, 45, > 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 56, 32, 45, 106, 91, > 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 49, 10, 45, 101, 108, 115, > 101, 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 52, > 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 55, 32, > 45, 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 50, 48, 32, 45, > 106, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 50, 51, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 121, 91, > 45, 52, 93, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 114, 91, 48, > 93, 32, 64, 123, 48, 44, 119, 42, 104, 125, 44, 49, 44, 49, 44, 49, > 48, 48, 37, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, > 48, 93, 32, 99, 120, 121, 122, 32, 45, 114, 91, 48, 93, 32, 54, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, 50, 32, > 45, 121, 91, 48, 93, 32, 45, 109, 118, 91, 48, 93, 32, 45, 49, 10, > 45, 105, 102, 32, 36, 105, 115, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 109, 118, 91, 48, 93, 32, 64, > 35, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 121, 91, > 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 54, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 32, 45, 121, 91, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 109, 97, 103, 101, 99, 117, 98, 101, 51, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, > 100, 32, 109, 97, 112, 112, 101, 100, 32, 99, 117, 98, 101, 115, 32, 102, > 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 109, 97, 103, 101, > 99, 117, 98, 101, 51, 100, 10, 105, 109, 97, 103, 101, 99, 117, 98, 101, > 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, > 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, > 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 115, 108, 105, 99, > 101, 115, 32, 53, 48, 37, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 49, 61, 123, 119, > 45, 49, 125, 32, 104, 49, 61, 123, 104, 45, 49, 125, 10, 45, 105, 91, > 45, 50, 93, 32, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, > 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, > 49, 48, 48, 46, 53, 59, 92, 10, 56, 59, 54, 59, 92, 10, 45, 48, > 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 48, > 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 48, > 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 45, 48, > 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, 53, 59, 92, 10, 45, 48, > 46, 53, 59, 45, 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 48, 46, > 53, 59, 45, 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 48, 46, 53, > 59, 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 45, 48, 46, 53, 59, > 48, 46, 53, 59, 48, 46, 53, 59, 92, 10, 49, 50, 59, 48, 59, 51, > 59, 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, > 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, 59, 92, 10, 49, > 50, 59, 49, 59, 50, 59, 54, 59, 53, 59, 48, 59, 48, 59, 48, 59, > 36, 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, > 48, 59, 92, 10, 49, 50, 59, 53, 59, 54, 59, 55, 59, 52, 59, 48, > 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, > 59, 36, 119, 49, 59, 48, 59, 92, 10, 49, 50, 59, 52, 59, 55, 59, > 51, 59, 48, 59, 48, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, > 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, 59, 92, 10, 49, 50, > 59, 52, 59, 48, 59, 49, 59, 53, 59, 48, 59, 48, 59, 48, 59, 36, > 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, > 59, 92, 10, 49, 50, 59, 51, 59, 55, 59, 54, 59, 50, 59, 48, 59, > 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, > 36, 119, 49, 59, 48, 59, 92, 10, 45, 49, 50, 56, 59, 123, 119, 125, > 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 121, 91, 45, 49, 93, > 10, 40, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, 50, > 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, 50, 56, 59, 48, 59, 48, > 59, 48, 59, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, > 50, 56, 59, 48, 59, 48, 59, 48, 59, 49, 59, 49, 59, 49, 59, 49, > 59, 49, 59, 49, 41, 10, 45, 97, 32, 121, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 97, > 103, 101, 112, 108, 97, 110, 101, 51, 100, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, > 97, 112, 112, 101, 100, 32, 112, 108, 97, 110, 101, 115, 32, 102, 114, 111, > 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 109, 97, 103, 101, 112, 108, > 97, 110, 101, 51, 100, 10, 105, 109, 97, 103, 101, 112, 108, 97, 110, 101, > 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, > 32, 112, 108, 97, 110, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 115, 108, 105, > 99, 101, 115, 32, 53, 48, 37, 32, 45, 116, 111, 95, 114, 103, 98, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 119, 49, 61, 123, > 119, 45, 49, 125, 32, 104, 49, 61, 123, 104, 45, 49, 125, 10, 45, 105, > 91, 45, 50, 93, 32, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, > 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, > 59, 49, 48, 48, 46, 53, 59, 92, 10, 52, 59, 49, 59, 92, 10, 48, > 59, 48, 59, 48, 59, 92, 10, 123, 119, 125, 59, 48, 59, 48, 59, 92, > 10, 123, 119, 125, 59, 123, 104, 125, 59, 48, 59, 92, 10, 123, 48, 125, > 59, 123, 104, 125, 59, 48, 59, 92, 10, 49, 50, 59, 48, 59, 51, 59, > 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, 119, > 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, 59, 92, 10, 45, 49, > 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, > 45, 121, 91, 45, 49, 93, 10, 40, 49, 41, 10, 45, 97, 32, 121, 10, > 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 105, 109, 97, 103, 101, 112, 121, 114, 97, 109, 105, 100, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, > 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 112, 121, 114, > 97, 109, 105, 100, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 105, 109, 97, 103, 101, 112, 121, 114, 97, 109, 105, 100, 51, > 100, 10, 105, 109, 97, 103, 101, 112, 121, 114, 97, 109, 105, 100, 51, 100, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, > 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 112, > 121, 114, 97, 109, 105, 100, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, > 61, 64, 123, 48, 44, 110, 125, 10, 119, 49, 61, 123, 119, 45, 49, 125, > 32, 104, 49, 61, 123, 104, 45, 49, 125, 32, 119, 50, 61, 123, 119, 47, > 50, 125, 10, 45, 105, 91, 45, 50, 93, 32, 40, 54, 55, 46, 53, 59, > 55, 51, 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, > 59, 53, 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 92, 10, 53, 59, > 53, 59, 92, 10, 45, 48, 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, > 46, 53, 59, 92, 10, 48, 46, 53, 59, 45, 48, 46, 53, 59, 45, 48, > 46, 53, 59, 92, 10, 48, 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, > 53, 59, 92, 10, 45, 48, 46, 53, 59, 48, 46, 53, 59, 45, 48, 46, > 53, 59, 92, 10, 48, 59, 48, 59, 48, 46, 53, 59, 92, 10, 49, 50, > 59, 48, 59, 51, 59, 50, 59, 49, 59, 48, 59, 48, 59, 48, 59, 36, > 104, 49, 59, 36, 119, 49, 59, 36, 104, 49, 59, 36, 119, 49, 59, 48, > 59, 92, 10, 57, 59, 48, 59, 52, 59, 51, 59, 48, 59, 36, 104, 49, > 59, 36, 119, 50, 59, 48, 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, > 10, 57, 59, 49, 59, 52, 59, 48, 59, 48, 59, 36, 104, 49, 59, 36, > 119, 50, 59, 48, 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, 10, 57, > 59, 50, 59, 52, 59, 49, 59, 48, 59, 36, 104, 49, 59, 36, 119, 50, > 59, 48, 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, 10, 57, 59, 51, > 59, 52, 59, 50, 59, 48, 59, 36, 104, 49, 59, 36, 119, 50, 59, 48, > 59, 36, 119, 49, 59, 36, 104, 49, 59, 92, 10, 45, 49, 50, 56, 59, > 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, 125, 41, 10, 45, 121, 91, > 45, 49, 93, 10, 40, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, > 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, 59, 45, 49, 50, 56, 59, > 48, 59, 48, 59, 48, 59, 45, 49, 50, 56, 59, 48, 59, 48, 59, 48, > 59, 49, 59, 49, 59, 49, 59, 49, 59, 49, 41, 10, 45, 97, 32, 121, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 109, 97, 103, 101, 114, 117, 98, 105, 107, 51, 100, 32, > 58, 32, 95, 120, 121, 95, 116, 105, 108, 101, 115, 62, 61, 49, 44, 48, > 60, 61, 120, 121, 95, 115, 104, 105, 102, 116, 60, 61, 49, 48, 48, 44, > 48, 60, 61, 122, 95, 115, 104, 105, 102, 116, 60, 61, 49, 48, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, 101, 114, 97, 116, > 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, 114, 117, 98, 105, > 107, 39, 115, 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 120, 121, 95, 116, 105, 108, > 101, 115, 61, 51, 39, 44, 32, 39, 120, 121, 95, 115, 104, 105, 102, 116, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 122, 95, 115, 104, 105, 102, 116, > 61, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 109, 97, 103, 101, > 114, 117, 98, 105, 107, 51, 100, 32, 44, 10, 105, 109, 97, 103, 101, 114, > 117, 98, 105, 107, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 51, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, > 50, 61, 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, > 48, 48, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 51, 60, 61, 49, 48, 48, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, > 32, 109, 97, 112, 112, 101, 100, 32, 114, 117, 98, 105, 107, 92, 52, 55, > 115, 32, 99, 117, 98, 101, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 36, 49, 32, 120, 121, 45, > 116, 105, 108, 101, 115, 44, 32, 120, 121, 45, 115, 104, 105, 102, 116, 32, > 36, 50, 32, 97, 110, 100, 32, 122, 45, 115, 104, 105, 102, 116, 32, 36, > 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, > 48, 44, 110, 125, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 40, 56, 44, > 53, 41, 10, 40, 48, 44, 48, 44, 48, 59, 92, 10, 49, 48, 48, 44, > 48, 44, 48, 59, 92, 10, 49, 48, 48, 44, 49, 48, 48, 44, 48, 59, > 92, 10, 48, 44, 49, 48, 48, 44, 48, 59, 92, 10, 36, 50, 44, 36, > 50, 44, 123, 45, 36, 51, 125, 59, 92, 10, 123, 49, 48, 48, 45, 36, > 50, 125, 44, 36, 50, 44, 123, 45, 36, 51, 125, 59, 92, 10, 123, 49, > 48, 48, 45, 36, 50, 125, 44, 123, 49, 48, 48, 45, 36, 50, 125, 44, > 123, 45, 36, 51, 125, 59, 92, 10, 36, 50, 44, 123, 49, 48, 48, 45, > 36, 50, 125, 44, 123, 45, 36, 51, 125, 41, 10, 40, 52, 44, 52, 44, > 55, 44, 54, 44, 53, 59, 92, 10, 52, 44, 48, 44, 52, 44, 53, 44, > 49, 59, 92, 10, 52, 44, 51, 44, 50, 44, 54, 44, 55, 59, 92, 10, > 52, 44, 48, 44, 51, 44, 55, 44, 52, 59, 92, 10, 52, 44, 49, 44, > 53, 44, 54, 44, 50, 41, 10, 51, 44, 53, 44, 49, 44, 49, 44, 50, > 48, 48, 10, 49, 44, 53, 44, 49, 44, 49, 44, 49, 10, 45, 121, 91, > 45, 54, 45, 45, 49, 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, > 32, 121, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, 48, 32, > 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 91, 45, 36, 49, 45, 45, > 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, > 125, 32, 45, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 48, > 48, 32, 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 91, 45, 36, 49, > 45, 45, 49, 93, 10, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 47, 51, 100, 91, > 45, 49, 93, 32, 36, 49, 32, 45, 45, 51, 100, 91, 45, 49, 93, 32, > 53, 48, 44, 53, 48, 44, 53, 48, 10, 45, 45, 114, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, 48, 32, 45, 45, 114, > 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, 48, > 32, 45, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, > 44, 45, 57, 48, 10, 45, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 49, 44, 45, 57, 48, 32, 45, 45, 114, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 48, 44, 49, 44, 49, 56, 48, 10, 45, 43, 51, > 100, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 105, 109, 97, 103, 101, 115, 112, 104, 101, 114, 101, 51, > 100, 32, 58, 32, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 49, > 62, 61, 51, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 50, > 62, 61, 51, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 110, > 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, 97, 112, 112, 101, 100, 32, > 115, 112, 104, 101, 114, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, > 110, 49, 61, 51, 50, 39, 32, 97, 110, 100, 32, 39, 114, 101, 115, 111, > 108, 117, 116, 105, 111, 110, 115, 50, 61, 49, 54, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 105, 109, 97, 103, 101, 115, 112, 104, 101, 114, 101, 51, > 100, 32, 51, 50, 44, 49, 54, 10, 105, 109, 97, 103, 101, 115, 112, 104, > 101, 114, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 51, 50, 125, 62, 61, 51, 32, 38, 38, 32, 36, 123, > 50, 61, 49, 54, 125, 62, 61, 51, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 109, > 97, 112, 112, 101, 100, 32, 115, 112, 104, 101, 114, 101, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, > 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 115, 32, 40, 36, 49, 44, > 36, 50, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 116, > 119, 61, 123, 119, 45, 49, 125, 32, 116, 104, 61, 123, 104, 45, 49, 125, > 10, 110, 98, 118, 61, 123, 50, 43, 36, 49, 42, 40, 36, 50, 45, 50, > 41, 125, 10, 110, 98, 112, 61, 123, 36, 49, 42, 40, 36, 50, 45, 49, > 41, 125, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, > 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, > 48, 48, 46, 53, 59, 92, 10, 36, 110, 98, 118, 59, 36, 110, 98, 112, > 41, 10, 40, 48, 59, 48, 59, 49, 41, 32, 40, 48, 59, 48, 59, 45, > 49, 41, 32, 40, 48, 44, 123, 50, 42, 112, 105, 125, 59, 48, 44, 123, > 50, 42, 112, 105, 125, 94, 48, 44, 48, 59, 123, 112, 105, 125, 44, 123, > 112, 105, 125, 41, 10, 45, 114, 91, 45, 49, 93, 32, 123, 36, 49, 43, > 49, 125, 44, 36, 50, 44, 49, 44, 50, 44, 51, 32, 45, 122, 91, 45, > 49, 93, 32, 48, 44, 49, 44, 123, 119, 45, 50, 125, 44, 123, 104, 45, > 50, 125, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 45, 115, 105, > 110, 91, 45, 49, 93, 32, 45, 45, 115, 105, 110, 91, 45, 51, 93, 32, > 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 45, 99, 111, 115, 91, > 45, 50, 93, 32, 45, 115, 105, 110, 91, 45, 51, 93, 32, 45, 99, 111, > 115, 91, 45, 52, 93, 32, 45, 42, 91, 45, 52, 44, 45, 51, 93, 10, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 112, 101, 114, > 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, 122, 32, 45, 121, > 91, 45, 49, 93, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 121, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 116, 120, 48, 61, > 123, 36, 62, 42, 36, 116, 119, 47, 36, 49, 125, 32, 116, 120, 49, 61, > 123, 40, 36, 62, 43, 49, 41, 42, 36, 116, 119, 47, 36, 49, 125, 32, > 116, 121, 49, 61, 123, 36, 116, 104, 47, 40, 36, 50, 45, 49, 41, 125, > 10, 40, 57, 59, 48, 59, 123, 50, 43, 36, 62, 125, 59, 123, 50, 43, > 40, 36, 62, 43, 49, 41, 37, 36, 49, 125, 59, 123, 36, 116, 119, 47, > 50, 125, 59, 48, 59, 36, 116, 120, 48, 59, 36, 116, 121, 49, 59, 36, > 116, 120, 49, 59, 36, 116, 121, 49, 41, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 36, 50, 45, 51, 125, 10, 116, 121, 48, 61, 36, 116, 121, > 49, 32, 116, 121, 49, 61, 123, 40, 36, 62, 43, 50, 41, 42, 36, 116, > 104, 47, 40, 36, 50, 45, 49, 41, 125, 32, 105, 48, 61, 123, 50, 43, > 36, 62, 42, 36, 49, 43, 64, 123, 62, 44, 45, 50, 125, 125, 32, 105, > 49, 61, 123, 50, 43, 36, 62, 42, 36, 49, 43, 40, 64, 123, 62, 44, > 45, 50, 125, 43, 49, 41, 37, 36, 49, 125, 10, 40, 49, 50, 59, 36, > 105, 48, 59, 123, 36, 105, 48, 43, 36, 49, 125, 59, 123, 36, 105, 49, > 43, 36, 49, 125, 59, 36, 105, 49, 59, 36, 116, 120, 48, 59, 36, 116, > 121, 48, 59, 36, 116, 120, 48, 59, 36, 116, 121, 49, 59, 36, 116, 120, > 49, 59, 36, 116, 121, 49, 59, 36, 116, 120, 49, 59, 36, 116, 121, 48, > 41, 10, 45, 100, 111, 110, 101, 10, 40, 57, 59, 49, 59, 123, 50, 43, > 36, 49, 42, 40, 36, 50, 45, 51, 41, 43, 40, 36, 62, 43, 49, 41, > 37, 36, 49, 125, 59, 123, 50, 43, 36, 49, 42, 40, 36, 50, 45, 51, > 41, 43, 36, 62, 125, 59, 123, 36, 116, 119, 47, 50, 125, 59, 36, 116, > 104, 59, 36, 116, 120, 49, 59, 36, 116, 121, 49, 59, 36, 116, 120, 48, > 59, 36, 116, 121, 49, 41, 10, 45, 100, 111, 110, 101, 10, 45, 97, 91, > 45, 36, 110, 98, 112, 45, 45, 49, 93, 32, 121, 10, 45, 109, 118, 91, > 45, 52, 93, 32, 64, 35, 32, 45, 105, 91, 45, 50, 93, 32, 40, 45, > 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 51, 41, 32, 45, > 121, 91, 45, 49, 93, 32, 49, 44, 123, 52, 42, 40, 36, 110, 98, 112, > 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, > 48, 44, 48, 32, 49, 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 49, > 32, 45, 97, 32, 121, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 105, 115, 111, 108, 105, 110, 101, 51, > 100, 32, 58, 32, 105, 115, 111, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 44, 118, 97, 108, 117, > 101, 44, 95, 120, 48, 44, 95, 121, 48, 44, 95, 120, 49, 44, 95, 121, > 49, 44, 95, 115, 105, 122, 101, 95, 120, 62, 48, 91, 37, 93, 44, 95, > 115, 105, 122, 101, 95, 121, 62, 48, 91, 37, 93, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, 116, 114, 97, > 99, 116, 32, 51, 100, 32, 105, 115, 111, 108, 105, 110, 101, 115, 32, 119, > 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, > 108, 117, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 111, 114, 32, 102, 114, 111, 109, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 111, 114, 109, 117, > 108, 97, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 120, 48, > 61, 121, 48, 61, 45, 51, 39, 44, 32, 39, 120, 49, 61, 121, 49, 61, > 51, 39, 32, 97, 110, 100, 32, 39, 115, 105, 122, 101, 95, 120, 61, 115, > 105, 122, 101, 95, 121, 61, 50, 53, 54, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 98, 108, 117, 114, 32, 49, 32, 45, 105, 115, 111, 108, 105, 110, > 101, 51, 100, 32, 53, 48, 37, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 45, 105, 115, 111, 108, 105, 110, 101, 51, 100, 32, 39, 88, > 61, 120, 45, 119, 47, 50, 59, 89, 61, 121, 45, 104, 47, 50, 59, 40, > 88, 94, 50, 43, 89, 94, 50, 41, 37, 50, 48, 39, 44, 49, 48, 44, > 45, 49, 48, 44, 45, 49, 48, 44, 49, 48, 44, 49, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, > 100, 32, 58, 32, 105, 115, 111, 118, 97, 108, 117, 101, 91, 37, 93, 32, > 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, 39, 44, 118, 97, 108, 117, > 101, 44, 95, 120, 48, 44, 95, 121, 48, 44, 95, 122, 48, 44, 95, 120, > 49, 44, 95, 121, 49, 44, 95, 122, 49, 44, 95, 115, 105, 122, 101, 95, > 120, 62, 48, 91, 37, 93, 44, 95, 115, 105, 122, 101, 95, 121, 62, 48, > 91, 37, 93, 44, 95, 115, 105, 122, 101, 95, 122, 62, 48, 91, 37, 93, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 69, 120, 116, 114, 97, 99, 116, 32, 51, 100, 32, 105, 115, 111, 115, 117, > 114, 102, 97, 99, 101, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 111, 114, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 102, 111, 114, 109, 117, 108, 97, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 120, 48, 61, 121, 48, 61, 122, 48, 61, 45, > 51, 39, 44, 32, 39, 120, 49, 61, 121, 49, 61, 122, 49, 61, 51, 39, > 32, 97, 110, 100, 32, 39, 115, 105, 122, 101, 95, 120, 61, 115, 105, 122, > 101, 95, 121, 61, 115, 105, 122, 101, 95, 122, 61, 51, 50, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 32, > 49, 50, 56, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, 45, 101, > 120, 112, 97, 110, 100, 95, 122, 32, 50, 44, 48, 32, 45, 98, 108, 117, > 114, 32, 49, 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, > 100, 32, 53, 48, 37, 32, 45, 109, 117, 108, 51, 100, 32, 49, 44, 49, > 44, 51, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 39, 120, 94, > 50, 43, 121, 94, 50, 43, 97, 98, 115, 40, 122, 41, 94, 97, 98, 115, > 40, 52, 42, 99, 111, 115, 40, 120, 42, 121, 42, 122, 42, 51, 41, 41, > 39, 44, 51, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, 98, 101, 108, > 95, 112, 111, 105, 110, 116, 115, 51, 100, 32, 58, 32, 95, 108, 97, 98, > 101, 108, 95, 115, 105, 122, 101, 62, 48, 44, 95, 111, 112, 97, 99, 105, > 116, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, > 97, 32, 110, 117, 109, 98, 101, 114, 101, 100, 32, 108, 97, 98, 101, 108, > 32, 116, 111, 32, 97, 108, 108, 32, 118, 101, 114, 116, 105, 99, 101, 115, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, > 111, 98, 106, 101, 99, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 49, 51, > 39, 32, 97, 110, 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, > 46, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 52, 48, 44, > 54, 44, 54, 32, 45, 108, 97, 98, 101, 108, 95, 112, 111, 105, 110, 116, > 115, 51, 100, 32, 50, 51, 44, 49, 32, 45, 109, 111, 100, 101, 51, 100, > 32, 49, 10, 108, 97, 98, 101, 108, 95, 112, 111, 105, 110, 116, 115, 51, > 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 49, > 51, 125, 62, 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, > 46, 56, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 76, 97, 98, > 101, 108, 32, 118, 101, 114, 116, 105, 99, 101, 115, 32, 111, 102, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 112, > 51, 100, 91, 36, 62, 93, 32, 48, 32, 45, 108, 91, 45, 49, 93, 32, > 45, 115, 51, 100, 32, 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, > 110, 98, 112, 61, 64, 123, 45, 50, 44, 48, 125, 32, 45, 61, 91, 45, > 50, 93, 32, 36, 110, 98, 112, 44, 48, 44, 49, 10, 40, 49, 44, 48, > 59, 49, 44, 123, 36, 110, 98, 112, 45, 49, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 50, 44, 36, 110, 98, 112, 44, 49, 44, 49, 44, 51, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 50, 42, 104, 125, 44, > 49, 44, 49, 44, 45, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 110, 98, 112, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 62, 44, > 48, 44, 48, 44, 36, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, > 49, 93, 32, 48, 10, 45, 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, > 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 51, 41, 32, 45, 121, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 110, 98, 112, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, > 36, 62, 44, 48, 44, 48, 44, 36, 49, 44, 49, 44, 36, 50, 32, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 48, 10, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 49, 41, 32, 45, 121, 91, 45, 49, 93, 10, 45, 100, > 111, 110, 101, 10, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 10, 45, > 43, 51, 100, 91, 36, 62, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 97, 116, > 104, 101, 51, 100, 32, 58, 32, 95, 114, 101, 115, 111, 108, 117, 116, 105, > 111, 110, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 91, 37, 93, 62, 61, 48, 44, 95, 109, 97, 120, 95, 97, 110, 103, 108, > 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 98, > 105, 110, 97, 114, 121, 32, 88, 89, 45, 112, 114, 111, 102, 105, 108, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, > 111, 108, 117, 116, 105, 111, 110, 61, 49, 50, 56, 39, 44, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 53, 37, 39, 32, > 97, 110, 100, 32, 39, 109, 97, 120, 95, 97, 110, 103, 108, 101, 61, 51, > 54, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 51, 48, 48, 44, 51, 48, 48, 32, 45, 114, 97, 110, 100, 32, 45, 49, > 44, 49, 32, 45, 98, 108, 117, 114, 32, 52, 48, 32, 45, 115, 105, 103, > 110, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, > 53, 53, 32, 45, 108, 97, 116, 104, 101, 51, 100, 32, 44, 10, 108, 97, > 116, 104, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 49, 50, 56, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 48, 46, 53, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 51, 61, 51, 54, 49, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 108, 97, 116, > 104, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, > 111, 109, 32, 88, 89, 45, 112, 114, 111, 102, 105, 108, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, > 32, 36, 49, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, > 36, 50, 32, 97, 110, 100, 32, 109, 97, 120, 105, 109, 117, 109, 32, 97, > 110, 103, 108, 101, 32, 36, 51, 32, 100, 101, 103, 46, 34, 10, 45, 118, > 32, 45, 32, 116, 109, 97, 120, 61, 123, 40, 36, 51, 45, 49, 56, 48, > 41, 42, 112, 105, 47, 49, 56, 48, 125, 32, 45, 110, 111, 114, 109, 32, > 45, 110, 32, 48, 44, 49, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 119, 114, 61, 123, 109, 97, 120, 40, 49, 44, 119, > 50, 61, 50, 42, 119, 59, 105, 102, 40, 119, 50, 62, 104, 44, 109, 105, > 110, 40, 36, 49, 44, 119, 50, 41, 44, 109, 105, 110, 40, 36, 49, 44, > 104, 41, 42, 119, 50, 47, 104, 41, 41, 125, 10, 104, 114, 61, 123, 109, > 97, 120, 40, 49, 44, 119, 50, 61, 50, 42, 119, 59, 105, 102, 40, 119, > 50, 62, 104, 44, 109, 105, 110, 40, 36, 49, 44, 119, 50, 41, 42, 104, > 47, 119, 50, 44, 109, 105, 110, 40, 36, 49, 44, 104, 41, 41, 41, 125, > 10, 114, 109, 97, 120, 61, 123, 115, 113, 114, 116, 40, 40, 36, 119, 114, > 41, 94, 50, 43, 40, 36, 104, 114, 41, 94, 50, 41, 47, 50, 125, 10, > 36, 119, 114, 44, 49, 44, 36, 119, 114, 44, 49, 44, 34, 120, 99, 61, > 120, 45, 119, 47, 50, 59, 32, 122, 99, 61, 122, 45, 100, 47, 50, 59, > 32, 116, 61, 97, 116, 97, 110, 50, 40, 122, 99, 44, 120, 99, 41, 59, > 32, 105, 102, 40, 116, 62, 34, 36, 116, 109, 97, 120, 34, 44, 34, 36, > 114, 109, 97, 120, 34, 44, 115, 113, 114, 116, 40, 120, 99, 42, 120, 99, > 43, 122, 99, 42, 122, 99, 41, 41, 34, 10, 45, 42, 91, 45, 49, 93, > 32, 123, 50, 42, 40, 64, 123, 45, 50, 44, 119, 125, 45, 49, 41, 47, > 40, 119, 45, 49, 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, > 114, 44, 36, 104, 114, 44, 36, 119, 114, 10, 40, 48, 59, 123, 64, 123, > 45, 50, 44, 104, 125, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 36, 119, 114, 44, 36, 104, 114, 44, 36, 119, 114, 44, 49, 44, 51, > 32, 45, 97, 91, 45, 50, 45, 45, 49, 93, 32, 99, 10, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 122, 32, 49, 48, 44, 48, 32, 45, 98, 32, 36, 50, > 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 32, 53, > 48, 37, 32, 45, 114, 118, 51, 100, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 108, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 108, 105, 103, 104, 116, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 108, 105, 103, 104, 116, 51, 100, 32, 58, > 32, 112, 111, 115, 105, 116, 105, 111, 110, 95, 120, 44, 112, 111, 115, 105, > 116, 105, 111, 110, 95, 121, 44, 112, 111, 115, 105, 116, 105, 111, 110, 95, > 122, 32, 58, 32, 91, 116, 101, 120, 116, 117, 114, 101, 93, 32, 58, 32, > 40, 110, 111, 32, 97, 114, 103, 115, 41, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 116, 104, 101, > 32, 108, 105, 103, 104, 116, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, > 101, 115, 32, 111, 114, 32, 116, 104, 101, 32, 108, 105, 103, 104, 116, 32, > 116, 101, 120, 116, 117, 114, 101, 32, 102, 111, 114, 32, 51, 100, 32, 114, > 101, 110, 100, 101, 114, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 108, 51, 100, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 110, 111, > 97, 114, 103, 115, 41, 32, 114, 101, 115, 101, 116, 115, 32, 116, 104, 101, > 32, 51, 100, 32, 108, 105, 103, 104, 116, 32, 116, 111, 32, 100, 101, 102, > 97, 117, 108, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, > 32, 45, 100, 111, 117, 98, 108, 101, 51, 100, 32, 48, 32, 45, 115, 112, > 101, 99, 115, 51, 100, 32, 49, 46, 50, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 53, 32, 45, 108, 105, 103, 104, 116, 51, 100, 32, 123, 36, 62, > 42, 49, 48, 48, 125, 44, 48, 44, 45, 51, 48, 48, 32, 45, 45, 115, > 110, 97, 112, 115, 104, 111, 116, 51, 100, 91, 48, 93, 32, 52, 48, 48, > 32, 45, 100, 111, 110, 101, 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, > 93, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 110, 101, 51, 100, 32, > 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, 121, 49, > 44, 122, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, > 117, 116, 32, 51, 100, 32, 108, 105, 110, 101, 32, 97, 116, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, > 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 48, 32, 97, 61, 123, 36, > 62, 42, 112, 105, 47, 53, 48, 125, 32, 45, 108, 105, 110, 101, 51, 100, > 32, 48, 44, 48, 44, 48, 44, 123, 99, 111, 115, 40, 51, 42, 36, 97, > 41, 125, 44, 123, 115, 105, 110, 40, 50, 42, 36, 97, 41, 125, 44, 48, > 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, > 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, > 51, 100, 10, 108, 105, 110, 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 108, 105, > 110, 101, 32, 40, 36, 123, 49, 45, 51, 125, 41, 45, 40, 36, 123, 52, > 45, 54, 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 50, 49, > 44, 49, 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, > 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, > 49, 48, 48, 46, 53, 44, 50, 44, 49, 44, 36, 123, 49, 45, 54, 125, > 44, 50, 44, 48, 44, 49, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, > 48, 48, 44, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 108, 105, 110, 101, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, 32, > 58, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 62, 49, 44, 97, > 44, 65, 44, 98, 44, 66, 44, 99, 44, 67, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 108, 105, 115, > 115, 97, 106, 111, 117, 115, 32, 99, 117, 114, 118, 101, 115, 32, 40, 120, > 40, 116, 41, 61, 115, 105, 110, 40, 97, 42, 116, 43, 65, 42, 50, 42, > 112, 105, 41, 44, 121, 40, 116, 41, 61, 115, 105, 110, 40, 98, 42, 116, > 43, 66, 42, 50, 42, 112, 105, 41, 44, 122, 40, 116, 41, 61, 115, 105, > 110, 40, 99, 42, 116, 43, 67, 42, 50, 42, 112, 105, 41, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 101, 115, 111, 108, 117, > 116, 105, 111, 110, 61, 49, 48, 50, 52, 39, 44, 32, 39, 97, 61, 50, > 39, 44, 32, 39, 65, 61, 48, 39, 44, 32, 39, 98, 61, 49, 39, 44, > 32, 39, 66, 61, 48, 39, 44, 32, 39, 99, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 67, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, > 32, 44, 10, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 36, 123, 49, 61, 49, 48, 50, 52, > 125, 62, 49, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 125, > 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 49, 125, 44, 36, > 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, 55, > 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, > 117, 116, 32, 51, 100, 32, 108, 105, 115, 115, 97, 106, 111, 117, 115, 32, > 99, 117, 114, 118, 101, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, > 108, 117, 116, 105, 111, 110, 32, 36, 49, 44, 32, 40, 97, 44, 65, 41, > 61, 40, 36, 50, 44, 36, 51, 41, 44, 32, 40, 98, 44, 66, 41, 61, > 40, 36, 52, 44, 36, 53, 41, 32, 97, 110, 100, 32, 40, 99, 44, 67, > 41, 61, 40, 36, 54, 44, 36, 55, 41, 46, 34, 10, 45, 118, 32, 45, > 10, 114, 101, 115, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, > 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, > 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, > 46, 53, 59, 36, 114, 101, 115, 59, 123, 36, 114, 101, 115, 45, 49, 125, > 41, 10, 40, 48, 44, 123, 50, 42, 112, 105, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 36, 114, 101, 115, 44, 49, 44, 49, 44, 49, 44, 51, > 32, 91, 45, 49, 93, 120, 50, 10, 45, 42, 91, 45, 51, 93, 32, 36, > 50, 32, 45, 43, 91, 45, 51, 93, 32, 123, 36, 51, 42, 50, 42, 112, > 105, 125, 32, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, 45, 43, 91, > 45, 50, 93, 32, 123, 36, 53, 42, 50, 42, 112, 105, 125, 32, 45, 42, > 91, 45, 49, 93, 32, 36, 54, 32, 45, 43, 91, 45, 49, 93, 32, 123, > 36, 55, 42, 50, 42, 112, 105, 125, 10, 45, 97, 91, 45, 51, 45, 45, > 49, 93, 32, 121, 32, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 114, 91, > 45, 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, 49, 44, 49, 44, > 45, 49, 10, 49, 44, 123, 36, 114, 101, 115, 45, 49, 125, 44, 49, 44, > 49, 44, 50, 32, 40, 48, 59, 123, 36, 114, 101, 115, 45, 50, 125, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, 114, 101, 115, 45, > 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 45, 43, 91, 45, 49, 93, > 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, 49, 44, 49, 44, 45, > 49, 10, 49, 44, 123, 51, 42, 40, 36, 114, 101, 115, 45, 49, 41, 125, > 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 123, 36, 114, 101, 115, > 45, 49, 125, 44, 49, 44, 49, 44, 49, 32, 45, 97, 91, 45, 53, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, > 100, 92, 32, 108, 105, 115, 115, 97, 106, 111, 117, 93, 10, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 51, 100, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 109, 111, 100, 101, 51, 100, 39, 46, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 111, > 100, 101, 51, 100, 32, 58, 32, 95, 109, 111, 100, 101, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, > 115, 116, 97, 116, 105, 99, 32, 51, 100, 32, 114, 101, 110, 100, 101, 114, > 105, 110, 103, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 109, 51, 100, > 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 109, 111, > 100, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 45, 49, 61, > 98, 111, 117, 110, 100, 105, 110, 103, 45, 98, 111, 120, 32, 124, 32, 48, > 61, 100, 111, 116, 115, 32, 124, 32, 49, 61, 119, 105, 114, 101, 102, 114, > 97, 109, 101, 32, 124, 32, 50, 61, 102, 108, 97, 116, 32, 124, 32, 51, > 61, 102, 108, 97, 116, 45, 115, 104, 97, 100, 101, 100, 32, 124, 32, 52, > 61, 103, 111, 117, 114, 97, 117, 100, 45, 115, 104, 97, 100, 101, 100, 32, > 124, 32, 53, 61, 112, 104, 111, 110, 103, 45, 115, 104, 97, 100, 101, 100, > 32, 125, 46, 34, 41, 59, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 66, 111, 117, 110, 100, 105, 110, 103, 45, 98, 111, 120, 32, 109, 111, 100, > 101, 32, 40, 39, 109, 111, 100, 101, 61, 61, 45, 49, 39, 41, 32, 105, > 115, 32, 97, 99, 116, 105, 118, 101, 32, 111, 110, 108, 121, 32, 102, 111, > 114, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 97, 99, 116, 105, 118, > 101, 32, 51, 100, 32, 118, 105, 101, 119, 101, 114, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 109, 111, 100, 101, 61, 52, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 49, 44, 50, > 44, 51, 44, 52, 44, 53, 41, 32, 45, 100, 111, 117, 98, 108, 101, 51, > 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 32, > 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, > 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 49, 44, > 49, 44, 48, 44, 54, 48, 32, 45, 109, 111, 100, 101, 51, 100, 32, 64, > 123, 48, 44, 36, 62, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, > 51, 100, 91, 45, 49, 93, 32, 51, 48, 48, 32, 45, 100, 111, 110, 101, > 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 109, 100, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 109, 111, 100, 101, 100, 51, 100, 39, 46, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 111, 100, 101, 100, 51, > 100, 32, 58, 32, 95, 109, 111, 100, 101, 32, 58, 32, 40, 43, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 100, 121, 110, > 97, 109, 105, 99, 32, 51, 100, 32, 114, 101, 110, 100, 101, 114, 105, 110, > 103, 32, 109, 111, 100, 101, 32, 102, 111, 114, 32, 105, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 51, 100, 32, 118, 105, 101, 119, 101, 114, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 109, 100, 51, 100, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 39, 109, 111, 100, 101, 39, 32, 99, 97, 110, > 32, 98, 101, 32, 123, 32, 45, 49, 61, 98, 111, 117, 110, 100, 105, 110, > 103, 45, 98, 111, 120, 32, 124, 32, 48, 61, 100, 111, 116, 115, 32, 124, > 32, 49, 61, 119, 105, 114, 101, 102, 114, 97, 109, 101, 32, 124, 32, 50, > 61, 102, 108, 97, 116, 32, 124, 32, 51, 61, 102, 108, 97, 116, 45, 115, > 104, 97, 100, 101, 100, 32, 124, 32, 52, 61, 103, 111, 117, 114, 97, 117, > 100, 45, 115, 104, 97, 100, 101, 100, 32, 124, 32, 53, 61, 112, 104, 111, > 110, 103, 45, 115, 104, 97, 100, 101, 100, 32, 125, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 109, 111, 100, 101, 61, 45, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 42, 51, 100, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 109, 117, 108, 51, 100, 39, 46, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 109, 117, 108, 51, 100, > 32, 58, 32, 102, 97, 99, 116, 111, 114, 32, 58, 32, 102, 97, 99, 116, > 111, 114, 95, 120, 44, 102, 97, 99, 116, 111, 114, 95, 121, 44, 95, 102, > 97, 99, 116, 111, 114, 95, 122, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 99, 97, 108, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, > 32, 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, 121, 32, 111, > 114, 32, 97, 110, 105, 115, 111, 116, 114, 111, 112, 105, 99, 97, 108, 108, > 121, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 102, 97, 99, 116, 111, 114, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 42, 51, > 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 102, 97, > 99, 116, 111, 114, 95, 122, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 53, > 44, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, 32, 45, 45, 97, > 100, 100, 51, 100, 91, 45, 49, 93, 32, 49, 48, 44, 48, 44, 48, 32, > 45, 109, 117, 108, 51, 100, 91, 45, 49, 93, 32, 49, 46, 50, 32, 45, > 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, > 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 110, 51, 100, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 51, 100, 39, 46, 10, 110, 51, 100, 32, 58, 10, 45, 95, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 51, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 115, 32, 116, 111, 32, 117, 110, 105, 116, 32, 115, 105, 122, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 110, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, > 48, 32, 45, 99, 105, 114, 99, 108, 101, 51, 100, 32, 123, 63, 40, 51, > 41, 125, 44, 123, 63, 40, 51, 41, 125, 44, 123, 63, 40, 51, 41, 125, > 44, 48, 46, 49, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, > 100, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, > 53, 53, 44, 48, 44, 48, 32, 45, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 51, 100, 91, 45, 49, 93, 32, 45, 99, 111, 108, 111, 114, 51, > 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, 48, 32, 45, 97, > 100, 100, 51, 100, 10, 110, 111, 114, 109, 97, 108, 105, 122, 101, 51, 100, > 32, 58, 10, 45, 95, 36, 48, 10, 95, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 51, 100, 32, 58, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, > 34, 78, 111, 114, 109, 97, 108, 105, 122, 101, 32, 115, 105, 122, 101, 32, > 111, 102, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 99, 104, 101, 99, 107, 51, 100, 32, 48, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 110, 61, 123, 105, 91, 54, 93, 125, 10, 45, 105, 102, 32, > 123, 36, 110, 62, 48, 125, 10, 45, 115, 104, 32, 56, 44, 123, 55, 43, > 51, 42, 36, 110, 125, 44, 48, 44, 48, 32, 45, 114, 91, 45, 49, 93, > 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, > 45, 115, 91, 45, 49, 93, 32, 120, 10, 45, 115, 104, 91, 45, 52, 93, > 32, 56, 44, 123, 55, 43, 51, 42, 36, 110, 125, 44, 48, 44, 48, 32, > 45, 47, 91, 45, 49, 93, 32, 123, 118, 97, 108, 61, 109, 97, 120, 40, > 64, 123, 45, 51, 44, 105, 77, 125, 45, 64, 123, 45, 51, 44, 105, 109, > 125, 44, 64, 123, 45, 50, 44, 105, 77, 125, 45, 64, 123, 45, 50, 44, > 105, 109, 125, 44, 105, 77, 45, 105, 109, 41, 59, 105, 102, 40, 118, 97, > 108, 44, 118, 97, 108, 44, 49, 41, 125, 10, 45, 114, 109, 91, 45, 52, > 45, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 32, > 64, 123, 48, 44, 110, 125, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 111, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, > 111, 112, 97, 99, 105, 116, 121, 51, 100, 39, 46, 32, 58, 32, 40, 43, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 111, 112, 97, 99, 105, 116, 121, > 51, 100, 32, 58, 32, 95, 111, 112, 97, 99, 105, 116, 121, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 111, 112, 97, 99, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 111, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, > 115, 51, 100, 32, 49, 48, 48, 44, 49, 48, 32, 45, 100, 111, 117, 98, > 108, 101, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 55, > 32, 45, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 48, 44, 48, 44, 50, 48, 32, 45, 111, 112, 97, 99, 105, 116, > 121, 51, 100, 91, 45, 49, 93, 32, 123, 63, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 51, 100, 32, 58, 32, 95, > 120, 40, 97, 44, 98, 41, 44, 95, 121, 40, 97, 44, 98, 41, 44, 95, > 122, 40, 97, 44, 98, 41, 44, 95, 97, 109, 105, 110, 44, 95, 97, 109, > 97, 120, 44, 95, 98, 109, 105, 110, 44, 95, 98, 109, 97, 120, 44, 95, > 114, 101, 115, 95, 97, 62, 48, 44, 95, 114, 101, 115, 95, 98, 62, 48, > 44, 95, 114, 101, 115, 95, 120, 62, 48, 44, 95, 114, 101, 115, 95, 121, > 62, 48, 44, 95, 114, 101, 115, 95, 122, 62, 48, 44, 95, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 105, 115, 111, 118, > 97, 108, 117, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 115, 117, 114, 102, 97, > 99, 101, 32, 40, 120, 40, 97, 44, 98, 41, 44, 121, 40, 97, 44, 98, > 41, 44, 122, 40, 97, 44, 98, 41, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 120, 61, 40, 50, 43, 99, 111, 115, 40, 98, 41, > 41, 42, 115, 105, 110, 40, 97, 41, 39, 44, 32, 39, 121, 61, 40, 50, > 43, 99, 111, 115, 40, 98, 41, 41, 42, 99, 111, 115, 40, 97, 41, 39, > 44, 32, 39, 99, 61, 115, 105, 110, 40, 98, 41, 39, 44, 32, 39, 97, > 109, 105, 110, 61, 45, 112, 105, 39, 44, 32, 39, 97, 109, 97, 120, 61, > 39, 112, 105, 39, 44, 32, 39, 98, 109, 105, 110, 61, 45, 112, 105, 39, > 44, 32, 39, 98, 109, 97, 120, 61, 39, 112, 105, 39, 44, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 114, 101, 115, 95, 97, 61, 53, 49, > 50, 39, 44, 32, 39, 114, 101, 115, 95, 98, 61, 114, 101, 115, 95, 97, > 39, 44, 32, 39, 114, 101, 115, 95, 120, 61, 54, 52, 39, 44, 32, 39, > 114, 101, 115, 95, 121, 61, 114, 101, 115, 95, 120, 39, 44, 32, 39, 114, > 101, 115, 95, 122, 61, 114, 101, 115, 95, 121, 39, 44, 32, 39, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 61, 50, 37, 39, 32, 97, 110, 100, > 32, 39, 105, 115, 111, 118, 97, 108, 117, 101, 61, 49, 48, 37, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 112, 97, 114, > 97, 109, 101, 116, 114, 105, 99, 51, 100, 32, 44, 10, 112, 97, 114, 97, > 109, 101, 116, 114, 105, 99, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 49, 61, 40, 50, 43, 99, 111, 115, 40, 98, 41, 41, > 42, 115, 105, 110, 40, 97, 41, 125, 34, 44, 34, 36, 123, 50, 61, 40, > 50, 43, 99, 111, 115, 40, 98, 41, 41, 42, 99, 111, 115, 40, 97, 41, > 125, 34, 44, 34, 36, 123, 51, 61, 115, 105, 110, 40, 98, 41, 125, 34, > 10, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 123, 45, 112, 105, 125, > 125, 44, 36, 123, 53, 61, 123, 112, 105, 125, 125, 44, 36, 123, 54, 61, > 123, 45, 112, 105, 125, 125, 44, 36, 123, 55, 61, 123, 112, 105, 125, 125, > 10, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 56, 61, 53, 49, 50, > 125, 62, 48, 32, 38, 38, 32, 36, 123, 57, 61, 36, 56, 125, 62, 48, > 32, 38, 38, 32, 36, 123, 49, 48, 61, 54, 52, 125, 62, 48, 32, 38, > 38, 32, 36, 123, 49, 49, 61, 36, 49, 48, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 49, 50, 61, 36, 49, 49, 125, 62, 48, 32, 38, 38, 32, > 92, 10, 36, 123, 49, 51, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 49, 52, 61, 49, 48, 37, 125, 62, 61, 48, 34, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, > 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 112, 97, 114, > 97, 109, 101, 116, 114, 105, 99, 32, 115, 117, 114, 102, 97, 99, 101, 32, > 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, > 45, 10, 40, 36, 52, 44, 36, 53, 59, 36, 52, 44, 36, 53, 94, 36, > 54, 44, 36, 54, 59, 36, 55, 44, 36, 55, 41, 32, 45, 114, 91, 45, > 49, 93, 32, 36, 56, 44, 36, 57, 44, 49, 44, 50, 44, 51, 32, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 50, > 10, 45, 102, 91, 45, 49, 93, 32, 34, 97, 61, 105, 40, 120, 44, 121, > 44, 48, 44, 48, 41, 59, 98, 61, 105, 40, 120, 44, 121, 44, 48, 44, > 49, 41, 59, 105, 102, 40, 99, 61, 61, 48, 44, 36, 49, 44, 105, 102, > 40, 99, 61, 61, 49, 44, 36, 50, 44, 36, 51, 41, 41, 34, 10, 45, > 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 120, 109, 105, 110, 61, > 123, 105, 109, 125, 32, 120, 109, 97, 120, 61, 123, 105, 77, 125, 32, 45, > 110, 91, 45, 49, 93, 32, 49, 54, 44, 123, 36, 49, 48, 45, 49, 55, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 49, 44, 49, 32, 121, 109, 105, 110, 61, 123, 105, 109, 125, 32, > 121, 109, 97, 120, 61, 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, > 32, 49, 54, 44, 123, 36, 49, 49, 45, 49, 55, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, > 32, 122, 109, 105, 110, 61, 123, 105, 109, 125, 32, 122, 109, 97, 120, 61, > 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 49, 54, 44, 123, > 36, 49, 50, 45, 49, 55, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 104, 125, 44, 51, 44, 49, > 44, 49, 44, 45, 49, 10, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, > 100, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, 36, > 49, 48, 44, 36, 49, 49, 44, 36, 49, 50, 44, 49, 44, 48, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 49, 51, 44, 48, 10, 45, 105, 115, 111, > 115, 117, 114, 102, 97, 99, 101, 51, 100, 91, 45, 49, 93, 32, 36, 49, > 52, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, 91, > 45, 49, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 123, 36, 120, > 109, 97, 120, 45, 36, 120, 109, 105, 110, 125, 44, 123, 36, 121, 109, 97, > 120, 45, 36, 121, 109, 105, 110, 125, 44, 123, 36, 122, 109, 97, 120, 45, > 36, 122, 109, 105, 110, 125, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 93, 10, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 99, 97, 95, > 112, 97, 116, 99, 104, 51, 100, 32, 58, 32, 95, 112, 97, 116, 99, 104, > 95, 115, 105, 122, 101, 62, 48, 44, 95, 77, 62, 48, 44, 95, 78, 62, > 48, 44, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 105, 110, 112, > 117, 116, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 95, 111, 117, 116, 112, 117, 116, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 108, 97, 109, 98, 100, 97, > 95, 120, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, 116, > 32, 51, 100, 32, 112, 97, 116, 99, 104, 45, 112, 99, 97, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, 32, 51, 100, > 32, 112, 97, 116, 99, 104, 45, 112, 99, 97, 32, 105, 115, 32, 101, 115, > 116, 105, 109, 97, 116, 101, 100, 32, 102, 114, 111, 109, 32, 77, 32, 112, > 97, 116, 99, 104, 101, 115, 32, 111, 110, 32, 116, 104, 101, 32, 105, 110, > 112, 117, 116, 32, 105, 109, 97, 103, 101, 44, 32, 97, 110, 100, 32, 100, > 105, 115, 112, 108, 97, 121, 101, 100, 32, 97, 115, 32, 97, 32, 99, 108, > 111, 117, 100, 32, 111, 102, 32, 78, 32, 51, 100, 32, 112, 111, 105, 110, > 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 112, 97, > 116, 99, 104, 95, 115, 105, 122, 101, 61, 55, 39, 44, 32, 39, 77, 61, > 49, 48, 48, 48, 39, 44, 32, 39, 78, 61, 51, 48, 48, 48, 39, 44, > 32, 39, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 105, 110, 112, 117, > 116, 61, 49, 39, 44, 32, 39, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 95, 111, 117, 116, 112, 117, 116, 61, 48, 39, 44, 32, 97, 110, 100, 32, > 39, 108, 97, 109, 98, 100, 97, 95, 120, 121, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 112, 99, 97, 95, 112, 97, 116, 99, 104, 51, 100, > 32, 55, 10, 112, 99, 97, 95, 112, 97, 116, 99, 104, 51, 100, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, > 123, 49, 61, 55, 125, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 49, 48, 48, 48, > 125, 41, 32, 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, > 105, 110, 116, 40, 36, 123, 51, 61, 51, 48, 48, 48, 125, 41, 32, 38, > 38, 32, 36, 51, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 52, 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 116, 32, > 51, 100, 32, 112, 97, 116, 99, 104, 45, 112, 99, 97, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 34, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 40, 64, 35, 62, 49, 41, 44, 115, 44, 34, > 34, 125, 34, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 102, 114, 111, 109, 32, 36, 50, 32, 36, 49, 120, 36, 49, 32, 105, 110, > 112, 117, 116, 32, 112, 97, 116, 99, 104, 115, 44, 32, 34, 92, 10, 34, > 119, 105, 116, 104, 32, 36, 51, 32, 111, 117, 116, 112, 117, 116, 32, 112, > 97, 116, 99, 104, 115, 44, 32, 105, 110, 112, 117, 116, 32, 110, 111, 114, > 109, 97, 108, 105, 122, 97, 116, 105, 111, 110, 32, 34, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 33, 36, 52, 44, 101, 110, 97, 98, 108, 101, > 100, 44, 100, 105, 115, 97, 98, 108, 101, 100, 125, 34, 44, 32, 111, 117, > 116, 112, 117, 116, 32, 110, 111, 114, 109, 97, 108, 105, 122, 97, 116, 105, > 111, 110, 32, 34, 92, 10, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 33, 36, 53, 44, 101, 110, 97, 98, 108, 101, 100, 44, 100, 105, 115, 97, > 98, 108, 101, 100, 125, 34, 32, 97, 110, 100, 32, 108, 97, 109, 98, 100, > 97, 95, 120, 121, 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 10, 80, > 49, 61, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 10, 80, 50, > 61, 123, 36, 49, 45, 36, 80, 49, 45, 49, 125, 10, 45, 110, 32, 48, > 44, 50, 53, 53, 32, 45, 114, 111, 117, 110, 100, 32, 49, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 115, 61, 123, 115, 125, 10, > 49, 44, 36, 50, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, > 44, 64, 123, 48, 44, 119, 45, 49, 125, 32, 45, 45, 114, 97, 110, 100, > 91, 45, 49, 93, 32, 48, 44, 64, 123, 48, 44, 104, 45, 49, 125, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 48, 32, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 120, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, > 32, 49, 32, 45, 45, 112, 97, 116, 99, 104, 101, 115, 91, 48, 93, 32, > 36, 49, 44, 36, 49, 44, 49, 44, 64, 45, 49, 32, 45, 121, 91, 50, > 45, 45, 49, 93, 32, 45, 97, 91, 50, 45, 45, 49, 93, 32, 120, 10, > 45, 122, 91, 49, 93, 32, 48, 44, 49, 32, 45, 116, 114, 97, 110, 115, > 112, 111, 115, 101, 91, 49, 93, 32, 45, 42, 91, 49, 93, 32, 36, 54, > 32, 45, 97, 91, 49, 44, 50, 93, 32, 121, 32, 45, 115, 91, 94, 48, > 93, 32, 120, 10, 45, 45, 43, 91, 94, 48, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 36, 50, 32, 45, 45, 91, 49, 45, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 97, 91, 94, > 48, 93, 32, 120, 10, 45, 105, 102, 32, 36, 52, 32, 45, 108, 91, 45, > 49, 93, 32, 45, 115, 32, 121, 32, 45, 47, 32, 39, 115, 113, 114, 116, > 40, 49, 101, 45, 56, 43, 105, 118, 41, 39, 32, 45, 97, 32, 121, 32, > 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 42, 42, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 105, 103, 101, 110, 91, 45, > 49, 93, 32, 45, 114, 111, 119, 115, 91, 45, 50, 93, 32, 48, 44, 50, > 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 115, 113, 114, 116, 91, 45, 50, > 93, 32, 45, 47, 91, 45, 50, 93, 32, 64, 123, 45, 50, 44, 77, 125, > 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 47, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 109, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 51, 10, 120, 61, 123, 114, 111, 117, 110, 100, 40, 63, 40, 64, 123, > 48, 44, 119, 125, 41, 41, 125, 10, 121, 61, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 64, 123, 48, 44, 104, 125, 41, 41, 125, 10, 40, 123, 36, > 54, 42, 36, 120, 125, 59, 123, 36, 54, 42, 36, 121, 125, 41, 10, 45, > 45, 122, 91, 48, 93, 32, 123, 36, 120, 45, 36, 80, 49, 125, 44, 123, > 36, 121, 45, 36, 80, 49, 125, 44, 123, 36, 120, 43, 36, 80, 50, 125, > 44, 123, 36, 121, 43, 36, 80, 50, 125, 44, 49, 10, 45, 121, 91, 45, > 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 45, > 100, 111, 110, 101, 10, 45, 45, 97, 91, 50, 45, 45, 49, 93, 32, 120, > 32, 45, 42, 42, 91, 49, 44, 45, 49, 93, 32, 45, 116, 114, 97, 110, > 115, 112, 111, 115, 101, 91, 49, 93, 10, 45, 114, 111, 119, 115, 91, 50, > 45, 45, 49, 93, 32, 50, 44, 49, 48, 48, 37, 10, 45, 105, 102, 32, > 123, 36, 115, 33, 61, 51, 125, 10, 45, 114, 91, 50, 45, 45, 49, 93, > 32, 36, 49, 44, 36, 49, 44, 49, 44, 123, 109, 105, 110, 40, 51, 44, > 36, 115, 41, 125, 44, 45, 49, 10, 45, 114, 91, 50, 45, 45, 49, 93, > 32, 36, 49, 44, 36, 49, 44, 49, 44, 51, 44, 123, 105, 102, 40, 36, > 115, 33, 61, 49, 44, 48, 44, 49, 41, 125, 10, 45, 121, 91, 50, 45, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 50, 45, > 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 36, 49, 59, 36, 49, 59, > 51, 41, 32, 45, 97, 91, 50, 45, 45, 49, 93, 32, 121, 10, 45, 114, > 109, 91, 48, 93, 10, 45, 105, 91, 48, 93, 32, 40, 123, 39, 67, 73, > 109, 103, 51, 100, 39, 125, 41, 10, 45, 105, 91, 49, 93, 32, 40, 36, > 51, 59, 36, 51, 41, 10, 45, 105, 91, 51, 93, 32, 50, 44, 36, 51, > 44, 49, 44, 49, 44, 105, 102, 40, 120, 61, 61, 48, 44, 49, 44, 121, > 41, 10, 49, 44, 36, 51, 44, 49, 44, 49, 44, 49, 10, 45, 121, 32, > 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 110, 109, 32, > 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 108, > 97, 110, 101, 51, 100, 32, 58, 32, 95, 115, 105, 122, 101, 95, 120, 44, > 95, 115, 105, 122, 101, 95, 121, 44, 95, 110, 98, 95, 115, 117, 98, 100, > 105, 118, 105, 115, 105, 111, 110, 115, 95, 120, 62, 48, 44, 95, 110, 98, > 95, 115, 117, 98, 100, 105, 115, 105, 118, 105, 111, 110, 115, 95, 121, 62, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 112, 108, 97, 110, 101, 32, 97, 116, 32, 40, 48, 44, > 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 120, 61, > 49, 39, 44, 32, 39, 115, 105, 122, 101, 95, 121, 61, 115, 105, 122, 101, > 95, 120, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 115, 117, 98, 100, > 105, 118, 105, 115, 105, 111, 110, 115, 95, 120, 61, 110, 98, 95, 115, 117, > 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 95, 121, 61, 50, 52, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 112, 108, > 97, 110, 101, 51, 100, 32, 53, 48, 44, 51, 48, 32, 45, 45, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 45, 99, 111, > 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, 82, 71, 66, > 125, 10, 112, 108, 97, 110, 101, 51, 100, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 51, 61, 50, 52, 125, 62, 48, 32, 38, 38, > 32, 36, 123, 52, 61, 50, 52, 125, 62, 48, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, 36, 49, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 51, 100, 32, 112, 108, 97, 110, 101, 44, 32, 119, 105, 116, 104, 32, 115, > 105, 122, 101, 32, 40, 36, 123, 49, 44, 50, 125, 41, 32, 97, 110, 100, > 32, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 32, 40, 36, > 123, 51, 44, 52, 125, 41, 46, 34, 10, 45, 118, 32, 45, 32, 123, 36, > 51, 43, 49, 125, 44, 123, 36, 52, 43, 49, 125, 32, 45, 101, 108, 101, > 118, 97, 116, 105, 111, 110, 51, 100, 91, 45, 49, 93, 32, 48, 32, 45, > 42, 51, 100, 91, 45, 49, 93, 32, 123, 36, 49, 47, 36, 51, 125, 44, > 123, 36, 50, 47, 36, 52, 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, > 49, 93, 32, 50, 48, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 112, 108, 97, 110, 101, 93, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 111, 105, 110, 116, 51, 100, 32, 58, > 32, 120, 48, 44, 121, 48, 44, 122, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 112, 111, 105, 110, > 116, 32, 97, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, > 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 48, 48, 48, 32, 97, 61, 123, 36, 62, 42, 112, 105, 47, 53, 48, 48, > 125, 32, 45, 112, 111, 105, 110, 116, 51, 100, 32, 123, 99, 111, 115, 40, > 51, 42, 36, 97, 41, 125, 44, 123, 115, 105, 110, 40, 50, 42, 36, 97, > 41, 125, 44, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 100, 100, 51, 100, 10, 112, 111, 105, 110, 116, 51, 100, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 51, 100, 32, 112, 111, 105, 110, 116, 32, 40, 36, 49, 44, 36, 50, 44, > 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 49, 55, 44, > 49, 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, 48, > 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, 49, > 48, 48, 46, 53, 44, 49, 44, 49, 44, 36, 123, 49, 45, 51, 125, 44, > 49, 44, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, > 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 112, > 111, 105, 110, 116, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 112, 108, 97, 110, 97, 114, 32, > 111, 114, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, 109, > 97, 103, 101, 115, 32, 116, 111, 32, 51, 100, 32, 112, 111, 105, 110, 116, > 32, 99, 108, 111, 117, 100, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, > 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 115, 105, 122, 101, > 50, 100, 121, 32, 49, 48, 48, 32, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 53, 48, 37, 32, 45, 42, 32, 50, 53, 53, 32, 45, 112, > 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 45, 99, 111, 108, > 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 10, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, > 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, > 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 116, 111, 32, > 51, 100, 32, 112, 111, 105, 110, 116, 32, 99, 108, 111, 117, 100, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 45, 115, 32, 122, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 110, 111, 114, 109, > 32, 45, 33, 61, 91, 45, 49, 93, 32, 48, 10, 45, 105, 91, 45, 50, > 93, 32, 40, 49, 44, 123, 119, 125, 59, 49, 44, 123, 119, 125, 94, 49, > 44, 49, 59, 123, 104, 125, 44, 123, 104, 125, 41, 32, 45, 114, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 50, > 44, 51, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 112, 101, 114, 109, 117, 116, 101, > 91, 45, 49, 93, 32, 99, 120, 121, 122, 10, 45, 108, 91, 45, 49, 93, > 32, 45, 115, 32, 45, 44, 48, 32, 45, 97, 32, 121, 32, 105, 115, 95, > 112, 111, 105, 110, 116, 115, 61, 64, 35, 32, 45, 101, 110, 100, 108, 10, > 45, 105, 102, 32, 36, 105, 115, 95, 112, 111, 105, 110, 116, 115, 10, 45, > 45, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, 50, > 44, 123, 104, 47, 50, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, > 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 121, 122, 120, 32, > 45, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 112, 101, 114, > 109, 117, 116, 101, 91, 45, 50, 93, 32, 99, 121, 122, 120, 32, 45, 105, > 91, 45, 50, 93, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 36, > 62, 32, 45, 97, 91, 45, 51, 44, 45, 50, 93, 32, 120, 10, 45, 105, > 91, 45, 51, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 105, 91, 45, 51, 93, 32, 40, 123, 104, 125, 44, 123, 104, > 125, 41, 10, 45, 105, 91, 45, 50, 93, 32, 49, 44, 123, 104, 125, 44, > 49, 44, 49, 44, 49, 32, 45, 105, 91, 45, 50, 93, 32, 49, 44, 123, > 104, 125, 44, 49, 44, 49, 44, 121, 32, 45, 97, 91, 45, 51, 44, 45, > 50, 93, 32, 120, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, > 93, 32, 99, 121, 122, 120, 10, 45, 105, 102, 32, 123, 119, 61, 61, 49, > 125, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 125, 44, 49, > 44, 49, 10, 45, 101, 108, 105, 102, 32, 123, 119, 62, 51, 125, 32, 45, > 105, 91, 45, 50, 93, 32, 52, 44, 123, 104, 125, 44, 49, 44, 49, 44, > 45, 49, 50, 56, 44, 49, 44, 49, 44, 123, 119, 125, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 101, 108, 115, 101, 32, 45, > 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, > 48, 10, 45, 101, 110, 100, 105, 102, 10, 49, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 49, 10, 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, 45, > 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 101, 108, 115, 101, > 32, 45, 114, 109, 32, 45, 101, 109, 112, 116, 121, 51, 100, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 43, 51, 100, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 115, 101, 51, 100, 32, 58, > 32, 118, 97, 108, 117, 101, 49, 44, 46, 46, 44, 118, 97, 108, 117, 101, > 49, 54, 32, 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 58, 32, > 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 116, 104, 101, 32, 99, 111, 101, 102, 102, 105, 99, 105, 101, 110, 116, > 115, 32, 111, 102, 32, 116, 104, 101, 32, 51, 100, 32, 112, 111, 115, 101, > 32, 109, 97, 116, 114, 105, 120, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 110, 111, 97, 114, 103, 115, 41, 32, 114, 101, 115, 101, 116, > 115, 32, 116, 104, 101, 32, 51, 100, 32, 112, 111, 115, 101, 32, 109, 97, > 116, 114, 105, 120, 32, 116, 111, 32, 100, 101, 102, 97, 117, 108, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 51, 100, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, > 115, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, > 58, 32, 109, 111, 100, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 112, 114, > 105, 109, 105, 116, 105, 118, 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 112, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 39, 109, 111, 100, 101, 39, 32, 99, 97, 110, 32, 98, > 101, 32, 123, 32, 48, 61, 112, 111, 105, 110, 116, 115, 32, 124, 32, 49, > 61, 115, 101, 103, 109, 101, 110, 116, 115, 32, 124, 32, 50, 61, 110, 111, > 110, 45, 116, 101, 120, 116, 117, 114, 101, 100, 32, 125, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 115, 112, 104, 101, 114, 101, > 51, 100, 32, 51, 48, 32, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, > 115, 51, 100, 32, 49, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 53, > 48, 44, 49, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 97, 100, 100, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 114, 111, 106, 101, 99, 116, 105, > 111, 110, 115, 51, 100, 32, 58, 32, 95, 120, 91, 37, 93, 44, 95, 121, > 91, 37, 93, 44, 95, 122, 91, 37, 93, 44, 95, 105, 115, 95, 98, 111, > 117, 110, 100, 105, 110, 103, 95, 98, 111, 120, 61, 123, 32, 48, 32, 124, > 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 101, > 110, 101, 114, 97, 116, 101, 32, 51, 100, 32, 120, 121, 44, 120, 122, 44, > 121, 122, 32, 112, 114, 111, 106, 101, 99, 116, 105, 111, 110, 32, 112, 108, > 97, 110, 101, 115, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 112, 114, 111, 106, 101, 99, 116, 105, 111, > 110, 115, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 53, 48, 37, 125, 44, 36, 123, 50, 61, 53, 48, 37, 125, 44, 36, > 123, 51, 61, 53, 48, 37, 125, 44, 36, 123, 52, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, > 32, 51, 100, 32, 120, 121, 44, 120, 122, 44, 121, 122, 32, 112, 114, 111, > 106, 101, 99, 116, 105, 111, 110, 32, 112, 108, 97, 110, 101, 115, 32, 102, > 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 10, > 120, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 49, 125, 44, 36, 49, 42, 119, 44, 36, 49, > 41, 125, 10, 121, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 36, 50, 42, 104, > 44, 36, 50, 41, 125, 10, 122, 61, 123, 105, 102, 40, 64, 123, 45, 105, > 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, 125, 44, 36, > 51, 42, 100, 44, 36, 51, 41, 125, 10, 45, 45, 114, 111, 119, 115, 32, > 36, 50, 44, 36, 50, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 125, > 44, 123, 100, 125, 44, 49, 44, 49, 48, 48, 37, 44, 45, 49, 10, 45, > 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 50, 93, 32, 36, 49, 44, > 36, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, > 122, 121, 120, 99, 10, 45, 115, 108, 105, 99, 101, 115, 91, 45, 51, 93, > 32, 36, 51, 44, 36, 51, 32, 45, 114, 91, 45, 51, 45, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, > 105, 109, 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, > 44, 48, 44, 57, 48, 32, 45, 114, 51, 100, 91, 45, 50, 93, 32, 49, > 44, 48, 44, 48, 44, 45, 57, 48, 10, 45, 43, 51, 100, 91, 45, 51, > 93, 32, 48, 44, 48, 44, 36, 122, 32, 45, 43, 51, 100, 91, 45, 50, > 93, 32, 48, 44, 36, 121, 44, 48, 32, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 36, 120, 44, 48, 44, 48, 10, 45, 43, 51, 100, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 48, 46, > 56, 10, 45, 105, 102, 32, 36, 52, 32, 45, 98, 111, 120, 51, 100, 32, > 36, 119, 44, 36, 104, 44, 36, 100, 32, 45, 112, 51, 100, 91, 45, 49, > 93, 32, 49, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 48, 46, 52, > 32, 45, 43, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 121, 114, 97, > 109, 105, 100, 51, 100, 32, 58, 32, 119, 105, 100, 116, 104, 44, 104, 101, > 105, 103, 104, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 112, 121, 114, 97, 109, 105, 100, 32, 97, > 116, 32, 40, 48, 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, > 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, > 112, 121, 114, 97, 109, 105, 100, 51, 100, 32, 49, 48, 48, 44, 49, 48, > 48, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, > 32, 49, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, > 64, 123, 45, 82, 71, 66, 125, 10, 112, 121, 114, 97, 109, 105, 100, 51, > 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, > 117, 116, 32, 110, 101, 119, 32, 51, 100, 32, 112, 121, 114, 97, 109, 105, > 100, 44, 32, 119, 105, 116, 104, 32, 119, 105, 100, 116, 104, 32, 36, 49, > 32, 97, 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, > 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, > 53, 59, 49, 48, 48, 46, 53, 59, 92, 10, 53, 59, 53, 59, 92, 10, > 123, 45, 36, 49, 47, 50, 125, 59, 123, 45, 36, 49, 47, 50, 125, 59, > 123, 45, 36, 50, 47, 50, 125, 59, 92, 10, 123, 36, 49, 47, 50, 125, > 59, 123, 45, 36, 49, 47, 50, 125, 59, 123, 45, 36, 50, 47, 50, 125, > 59, 92, 10, 123, 36, 49, 47, 50, 125, 59, 123, 36, 49, 47, 50, 125, > 59, 123, 45, 36, 50, 47, 50, 125, 59, 92, 10, 123, 45, 36, 49, 47, > 50, 125, 59, 123, 36, 49, 47, 50, 125, 59, 123, 45, 36, 50, 47, 50, > 125, 59, 92, 10, 48, 59, 48, 59, 123, 36, 50, 47, 50, 125, 59, 92, > 10, 52, 59, 48, 59, 51, 59, 50, 59, 49, 59, 92, 10, 51, 59, 48, > 59, 52, 59, 51, 59, 92, 10, 51, 59, 49, 59, 52, 59, 48, 59, 92, > 10, 51, 59, 50, 59, 52, 59, 49, 59, 92, 10, 51, 59, 51, 59, 52, > 59, 50, 41, 10, 49, 44, 49, 53, 44, 49, 44, 49, 44, 50, 48, 48, > 32, 49, 44, 53, 44, 49, 44, 49, 44, 49, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 112, 121, 114, 97, 109, 105, 100, 93, 10, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, 97, 100, 114, 97, 110, > 103, 108, 101, 51, 100, 32, 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, > 44, 120, 49, 44, 121, 49, 44, 122, 49, 44, 120, 50, 44, 121, 50, 44, > 122, 50, 44, 120, 51, 44, 121, 51, 44, 122, 51, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 113, 117, > 97, 100, 114, 97, 110, 103, 108, 101, 32, 97, 116, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 113, > 117, 97, 100, 114, 97, 110, 103, 108, 101, 51, 100, 32, 45, 49, 48, 44, > 45, 49, 48, 44, 49, 48, 44, 49, 48, 44, 45, 49, 48, 44, 49, 48, > 44, 49, 48, 44, 49, 48, 44, 49, 48, 44, 45, 49, 48, 44, 49, 48, > 44, 49, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 32, 45, > 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, 93, 32, 48, 44, > 49, 44, 48, 44, 51, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, > 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 44, 48, 46, 54, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 32, 45, 109, 111, > 100, 101, 51, 100, 32, 50, 10, 113, 117, 97, 100, 114, 97, 110, 103, 108, > 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, > 110, 112, 117, 116, 32, 51, 100, 32, 113, 117, 97, 100, 114, 97, 110, 103, > 108, 101, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 45, 40, 36, > 52, 44, 36, 53, 44, 36, 54, 41, 45, 40, 36, 55, 44, 36, 56, 44, > 36, 57, 41, 45, 40, 36, 49, 48, 44, 36, 49, 49, 44, 36, 49, 50, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 50, 57, 44, 49, 44, > 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, 48, 57, 46, > 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, 49, 48, 48, > 46, 53, 44, 52, 44, 49, 44, 36, 123, 49, 45, 49, 50, 125, 44, 52, > 44, 48, 44, 49, 44, 50, 44, 51, 44, 50, 48, 48, 44, 50, 48, 48, > 44, 50, 48, 48, 44, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, > 51, 100, 92, 32, 113, 117, 97, 100, 114, 97, 110, 103, 108, 101, 93, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 118, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 101, 118, 101, > 114, 115, 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 101, 118, 101, 114, 115, 101, 51, 100, 32, 58, > 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 118, 101, 114, 115, 101, 32, 112, 114, 105, 109, 105, 116, 105, 118, 101, 32, > 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 114, 118, 51, 100, 39, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, > 115, 51, 100, 32, 49, 48, 48, 44, 52, 48, 32, 45, 100, 111, 117, 98, > 108, 101, 51, 100, 32, 48, 32, 45, 45, 114, 101, 118, 101, 114, 115, 101, > 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 114, 51, 100, 32, 58, 32, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 111, 116, 97, 116, 101, 51, > 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 111, 116, 97, 116, 101, 51, 100, 32, 58, 32, 117, 44, 118, 44, > 119, 44, 97, 110, 103, 108, 101, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 111, 116, 97, 116, 101, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, > 115, 32, 97, 114, 111, 117, 110, 100, 32, 115, 112, 101, 99, 105, 102, 105, > 101, 100, 32, 97, 120, 105, 115, 32, 119, 105, 116, 104, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 97, 110, 103, 108, 101, 32, 40, 105, 110, > 32, 100, 101, 103, 46, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 114, 51, 100, 39, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 49, 48, 32, 45, 100, 111, > 117, 98, 108, 101, 51, 100, 32, 48, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 55, 32, 45, 45, 114, 111, 116, 97, 116, 101, 51, 100, 91, 45, 49, > 93, 32, 49, 44, 48, 44, 48, 44, 50, 48, 32, 45, 100, 111, 110, 101, > 32, 45, 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 111, 116, 97, 116, 105, 111, 110, 51, 100, 32, 58, 32, 117, 44, 118, 44, > 119, 44, 97, 110, 103, 108, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 51, 120, 51, 32, 114, 111, 116, 97, 116, > 105, 111, 110, 32, 109, 97, 116, 114, 105, 120, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 97, 120, 105, 115, 32, 97, > 110, 100, 32, 97, 110, 103, 108, 101, 32, 40, 105, 110, 32, 100, 101, 103, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, > 111, 116, 97, 116, 105, 111, 110, 51, 100, 32, 49, 44, 48, 44, 48, 44, > 48, 32, 45, 114, 111, 116, 97, 116, 105, 111, 110, 51, 100, 32, 49, 44, > 48, 44, 48, 44, 57, 48, 32, 45, 114, 111, 116, 97, 116, 105, 111, 110, > 51, 100, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 10, 114, 111, 116, > 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 114, 111, 116, 97, > 116, 105, 111, 110, 32, 109, 97, 116, 114, 105, 120, 32, 97, 114, 111, 117, > 110, 100, 32, 97, 120, 105, 115, 32, 40, 36, 49, 44, 36, 50, 44, 36, > 51, 41, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 52, > 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 10, 40, 36, 49, 94, > 36, 50, 94, 36, 51, 94, 48, 41, 32, 45, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 91, 45, 49, 93, 32, 45, 121, 91, 45, 49, 93, > 32, 120, 32, 45, 42, 91, 45, 49, 93, 32, 123, 115, 105, 110, 40, 36, > 52, 42, 112, 105, 47, 51, 54, 48, 41, 125, 32, 45, 61, 91, 45, 49, > 93, 32, 123, 99, 111, 115, 40, 36, 52, 42, 112, 105, 47, 51, 54, 48, > 41, 125, 44, 51, 10, 120, 120, 61, 123, 105, 40, 48, 41, 42, 105, 40, > 48, 41, 125, 32, 120, 121, 61, 123, 105, 40, 48, 41, 42, 105, 40, 49, > 41, 125, 32, 120, 122, 61, 123, 105, 40, 48, 41, 42, 105, 40, 50, 41, > 125, 32, 120, 119, 61, 123, 105, 40, 48, 41, 42, 105, 40, 51, 41, 125, > 10, 121, 121, 61, 123, 105, 40, 49, 41, 42, 105, 40, 49, 41, 125, 32, > 121, 122, 61, 123, 105, 40, 49, 41, 42, 105, 40, 50, 41, 125, 32, 121, > 119, 61, 123, 105, 40, 49, 41, 42, 105, 40, 51, 41, 125, 10, 122, 122, > 61, 123, 105, 40, 50, 41, 42, 105, 40, 50, 41, 125, 32, 122, 119, 61, > 123, 105, 40, 50, 41, 42, 105, 40, 51, 41, 125, 10, 45, 114, 109, 91, > 45, 49, 93, 10, 40, 123, 49, 45, 50, 42, 40, 36, 121, 121, 43, 36, > 122, 122, 41, 125, 44, 123, 50, 42, 40, 36, 120, 121, 43, 36, 122, 119, > 41, 125, 44, 123, 50, 42, 40, 36, 120, 122, 45, 36, 121, 119, 41, 125, > 59, 92, 10, 123, 50, 42, 40, 36, 120, 121, 45, 36, 122, 119, 41, 125, > 44, 123, 49, 45, 50, 42, 40, 36, 120, 120, 43, 36, 122, 122, 41, 125, > 44, 123, 50, 42, 40, 36, 121, 122, 43, 36, 120, 119, 41, 125, 59, 92, > 10, 123, 50, 42, 40, 36, 120, 122, 43, 36, 121, 119, 41, 125, 44, 123, > 50, 42, 40, 36, 121, 122, 45, 36, 120, 119, 41, 125, 44, 123, 49, 45, > 50, 42, 40, 36, 120, 120, 43, 36, 121, 121, 41, 125, 41, 10, 45, 110, > 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 114, 111, 116, 97, 116, > 105, 111, 110, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 58, 32, > 95, 114, 101, 99, 117, 114, 115, 105, 111, 110, 95, 108, 101, 118, 101, 108, > 62, 61, 48, 44, 95, 119, 105, 100, 116, 104, 44, 95, 104, 101, 105, 103, > 104, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 83, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, > 112, 121, 114, 97, 109, 105, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, > 100, 32, 51, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, > 51, 100, 32, 49, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 10, 115, 105, 101, 114, 112, 105, > 110, 115, 107, 105, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 36, 123, 49, 61, 52, 125, 62, 61, 48, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 50, 61, 49, 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, > 83, 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 112, 121, 114, 97, 109, > 105, 100, 32, 111, 102, 32, 100, 101, 103, 114, 101, 101, 32, 36, 49, 44, > 32, 119, 105, 116, 104, 32, 119, 105, 100, 116, 104, 32, 36, 50, 32, 97, > 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 36, 51, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 108, 91, 93, 32, 45, 95, 115, 105, 101, 114, 112, > 105, 110, 115, 107, 105, 51, 100, 32, 123, 45, 36, 50, 47, 50, 125, 44, > 123, 45, 36, 50, 47, 50, 125, 44, 123, 45, 36, 51, 47, 50, 125, 44, > 123, 36, 50, 47, 50, 125, 44, 123, 45, 36, 50, 47, 50, 125, 44, 123, > 45, 36, 51, 47, 50, 125, 44, 123, 36, 50, 47, 50, 125, 44, 123, 36, > 50, 47, 50, 125, 44, 123, 45, 36, 51, 47, 50, 125, 44, 123, 45, 36, > 50, 47, 50, 125, 44, 123, 36, 50, 47, 50, 125, 44, 123, 45, 36, 51, > 47, 50, 125, 44, 48, 44, 48, 44, 123, 36, 51, 47, 50, 125, 44, 36, > 49, 32, 45, 43, 51, 100, 32, 45, 101, 110, 100, 108, 10, 45, 110, 109, > 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 115, 105, 101, 114, 112, 105, > 110, 115, 107, 105, 93, 32, 45, 118, 32, 43, 10, 95, 115, 105, 101, 114, > 112, 105, 110, 115, 107, 105, 51, 100, 32, 58, 10, 45, 105, 102, 32, 123, > 36, 49, 54, 60, 61, 48, 125, 10, 40, 54, 55, 46, 53, 59, 55, 51, > 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, > 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 92, 10, 53, 59, 53, 59, > 92, 10, 36, 49, 59, 36, 50, 59, 36, 51, 59, 92, 10, 36, 52, 59, > 36, 53, 59, 36, 54, 59, 92, 10, 36, 55, 59, 36, 56, 59, 36, 57, > 59, 92, 10, 36, 49, 48, 59, 36, 49, 49, 59, 36, 49, 50, 59, 92, > 10, 36, 49, 51, 59, 36, 49, 52, 59, 36, 49, 53, 59, 92, 10, 52, > 59, 48, 59, 51, 59, 50, 59, 49, 59, 92, 10, 51, 59, 48, 59, 52, > 59, 51, 59, 92, 10, 51, 59, 49, 59, 52, 59, 48, 59, 92, 10, 51, > 59, 50, 59, 52, 59, 49, 59, 92, 10, 51, 59, 51, 59, 52, 59, 50, > 41, 10, 49, 44, 49, 53, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, > 44, 53, 44, 49, 44, 49, 44, 49, 32, 45, 97, 91, 45, 51, 45, 45, > 49, 93, 32, 121, 10, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, > 51, 100, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 92, 10, 123, 40, > 36, 49, 43, 36, 52, 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, > 53, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 54, 41, 47, 50, > 125, 44, 92, 10, 123, 40, 36, 49, 43, 36, 52, 43, 36, 55, 43, 36, > 49, 48, 41, 47, 52, 125, 44, 123, 40, 36, 50, 43, 36, 53, 43, 36, > 56, 43, 36, 49, 49, 41, 47, 52, 125, 44, 123, 40, 36, 51, 43, 36, > 54, 43, 36, 57, 43, 36, 49, 50, 41, 47, 52, 125, 44, 92, 10, 123, > 40, 36, 49, 43, 36, 49, 48, 41, 47, 50, 125, 44, 123, 40, 36, 50, > 43, 36, 49, 49, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 49, > 50, 41, 47, 50, 125, 44, 92, 10, 123, 40, 36, 49, 43, 36, 49, 51, > 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 49, 52, 41, 47, 50, > 125, 44, 123, 40, 36, 51, 43, 36, 49, 53, 41, 47, 50, 125, 44, 92, > 10, 123, 36, 49, 54, 45, 49, 125, 10, 45, 95, 115, 105, 101, 114, 112, > 105, 110, 115, 107, 105, 51, 100, 32, 123, 40, 36, 49, 43, 36, 52, 41, > 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, 53, 41, 47, 50, 125, 44, > 123, 40, 36, 51, 43, 36, 54, 41, 47, 50, 125, 44, 92, 10, 36, 52, > 44, 36, 53, 44, 36, 54, 44, 92, 10, 123, 40, 36, 52, 43, 36, 55, > 41, 47, 50, 125, 44, 123, 40, 36, 53, 43, 36, 56, 41, 47, 50, 125, > 44, 123, 40, 36, 54, 43, 36, 57, 41, 47, 50, 125, 44, 92, 10, 123, > 40, 36, 49, 43, 36, 52, 43, 36, 55, 43, 36, 49, 48, 41, 47, 52, > 125, 44, 123, 40, 36, 50, 43, 36, 53, 43, 36, 56, 43, 36, 49, 49, > 41, 47, 52, 125, 44, 123, 40, 36, 51, 43, 36, 54, 43, 36, 57, 43, > 36, 49, 50, 41, 47, 52, 125, 44, 92, 10, 123, 40, 36, 52, 43, 36, > 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 53, 43, 36, 49, 52, 41, > 47, 50, 125, 44, 123, 40, 36, 54, 43, 36, 49, 53, 41, 47, 50, 125, > 44, 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, 45, 95, 115, 105, 101, > 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 123, 40, 36, 49, 43, 36, > 52, 43, 36, 55, 43, 36, 49, 48, 41, 47, 52, 125, 44, 123, 40, 36, > 50, 43, 36, 53, 43, 36, 56, 43, 36, 49, 49, 41, 47, 52, 125, 44, > 123, 40, 36, 51, 43, 36, 54, 43, 36, 57, 43, 36, 49, 50, 41, 47, > 52, 125, 44, 92, 10, 123, 40, 36, 52, 43, 36, 55, 41, 47, 50, 125, > 44, 123, 40, 36, 53, 43, 36, 56, 41, 47, 50, 125, 44, 123, 40, 36, > 54, 43, 36, 57, 41, 47, 50, 125, 44, 92, 10, 36, 55, 44, 36, 56, > 44, 36, 57, 44, 92, 10, 123, 40, 36, 55, 43, 36, 49, 48, 41, 47, > 50, 125, 44, 123, 40, 36, 56, 43, 36, 49, 49, 41, 47, 50, 125, 44, > 123, 40, 36, 57, 43, 36, 49, 50, 41, 47, 50, 125, 44, 92, 10, 123, > 40, 36, 55, 43, 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 56, > 43, 36, 49, 52, 41, 47, 50, 125, 44, 123, 40, 36, 57, 43, 36, 49, > 53, 41, 47, 50, 125, 44, 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, > 45, 95, 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 123, > 40, 36, 49, 43, 36, 49, 48, 41, 47, 50, 125, 44, 123, 40, 36, 50, > 43, 36, 49, 49, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 49, > 50, 41, 47, 50, 125, 44, 92, 10, 123, 40, 36, 49, 43, 36, 52, 43, > 36, 55, 43, 36, 49, 48, 41, 47, 52, 125, 44, 123, 40, 36, 50, 43, > 36, 53, 43, 36, 56, 43, 36, 49, 49, 41, 47, 52, 125, 44, 123, 40, > 36, 51, 43, 36, 54, 43, 36, 57, 43, 36, 49, 50, 41, 47, 52, 125, > 44, 92, 10, 123, 40, 36, 55, 43, 36, 49, 48, 41, 47, 50, 125, 44, > 123, 40, 36, 56, 43, 36, 49, 49, 41, 47, 50, 125, 44, 123, 40, 36, > 57, 43, 36, 49, 50, 41, 47, 50, 125, 44, 92, 10, 36, 49, 48, 44, > 36, 49, 49, 44, 36, 49, 50, 44, 92, 10, 123, 40, 36, 49, 48, 43, > 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 49, 49, 43, 36, 49, > 52, 41, 47, 50, 125, 44, 123, 40, 36, 49, 50, 43, 36, 49, 53, 41, > 47, 50, 125, 44, 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, 45, 95, > 115, 105, 101, 114, 112, 105, 110, 115, 107, 105, 51, 100, 32, 123, 40, 36, > 49, 43, 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 50, 43, 36, > 49, 52, 41, 47, 50, 125, 44, 123, 40, 36, 51, 43, 36, 49, 53, 41, > 47, 50, 125, 44, 92, 10, 123, 40, 36, 52, 43, 36, 49, 51, 41, 47, > 50, 125, 44, 123, 40, 36, 53, 43, 36, 49, 52, 41, 47, 50, 125, 44, > 123, 40, 36, 54, 43, 36, 49, 53, 41, 47, 50, 125, 44, 92, 10, 123, > 40, 36, 55, 43, 36, 49, 51, 41, 47, 50, 125, 44, 123, 40, 36, 56, > 43, 36, 49, 52, 41, 47, 50, 125, 44, 123, 40, 36, 57, 43, 36, 49, > 53, 41, 47, 50, 125, 44, 92, 10, 123, 40, 36, 49, 48, 43, 36, 49, > 51, 41, 47, 50, 125, 44, 123, 40, 36, 49, 49, 43, 36, 49, 52, 41, > 47, 50, 125, 44, 123, 40, 36, 49, 50, 43, 36, 49, 53, 41, 47, 50, > 125, 44, 92, 10, 36, 49, 51, 44, 36, 49, 52, 44, 36, 49, 53, 44, > 92, 10, 123, 36, 49, 54, 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 51, 100, 32, 58, 32, 95, 109, > 101, 116, 114, 105, 99, 44, 95, 102, 114, 97, 109, 101, 95, 116, 121, 112, > 101, 61, 123, 32, 48, 61, 115, 113, 117, 97, 114, 101, 115, 32, 124, 32, > 49, 61, 100, 105, 97, 109, 111, 110, 100, 115, 32, 124, 32, 50, 61, 99, > 105, 114, 99, 108, 101, 115, 32, 124, 32, 51, 61, 97, 117, 116, 111, 32, > 125, 44, 95, 115, 107, 101, 108, 101, 116, 111, 110, 95, 111, 112, 97, 99, > 105, 116, 121, 44, 95, 102, 114, 97, 109, 101, 95, 111, 112, 97, 99, 105, > 116, 121, 44, 95, 105, 115, 95, 102, 114, 97, 109, 101, 95, 119, 105, 114, > 101, 102, 114, 97, 109, 101, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 117, 105, 108, 100, 32, > 51, 100, 32, 115, 107, 101, 108, 101, 116, 97, 108, 32, 115, 116, 114, 117, > 99, 116, 117, 114, 101, 32, 111, 98, 106, 101, 99, 116, 32, 102, 114, 111, > 109, 32, 50, 100, 32, 98, 105, 110, 97, 114, 121, 32, 115, 104, 97, 112, > 101, 115, 32, 108, 111, 99, 97, 116, 101, 100, 32, 105, 110, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 109, 101, 116, 114, 105, 99, 39, > 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 99, 104, 101, 98, > 121, 115, 104, 101, 118, 32, 124, 32, 49, 61, 109, 97, 110, 104, 97, 116, > 116, 97, 110, 32, 124, 32, 50, 61, 101, 117, 99, 108, 105, 100, 101, 97, > 110, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, > 101, 116, 114, 105, 99, 61, 50, 39, 44, 32, 39, 98, 111, 110, 101, 115, > 95, 116, 121, 112, 101, 61, 51, 39, 44, 32, 39, 115, 107, 101, 108, 101, > 116, 111, 110, 95, 111, 112, 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, > 110, 100, 32, 39, 102, 114, 97, 109, 101, 95, 111, 112, 97, 99, 105, 116, > 121, 61, 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 45, 99, 117, 112, 105, 100, 32, 52, 56, 48, 32, 45, 45, > 115, 107, 101, 108, 101, 116, 111, 110, 51, 100, 32, 44, 10, 115, 107, 101, > 108, 101, 116, 111, 110, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 50, 125, 41, 32, > 38, 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 49, 60, 61, > 50, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 51, > 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, > 50, 60, 61, 51, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 49, 125, 44, 36, 123, 52, 61, 48, 46, 49, 125, 44, 36, 123, 53, 61, > 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 117, 105, 108, > 100, 32, 51, 100, 32, 115, 107, 101, 108, 101, 116, 97, 108, 32, 115, 116, > 114, 117, 99, 116, 117, 114, 101, 32, 111, 98, 106, 101, 99, 116, 32, 102, > 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 49, 44, > 99, 104, 101, 98, 121, 115, 104, 101, 118, 44, 109, 97, 110, 104, 97, 116, > 116, 97, 110, 44, 101, 117, 99, 108, 105, 100, 101, 97, 110, 125, 34, 32, > 109, 101, 116, 114, 105, 99, 44, 32, 34, 92, 10, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 36, 50, 44, 115, 113, 117, 97, 114, 101, 115, 44, > 100, 105, 97, 109, 111, 110, 100, 115, 44, 99, 105, 114, 99, 108, 101, 115, > 44, 97, 117, 116, 111, 125, 34, 32, 98, 111, 110, 101, 115, 44, 32, 115, > 107, 101, 108, 101, 116, 111, 110, 32, 111, 112, 97, 99, 105, 116, 121, 32, > 36, 51, 32, 97, 110, 100, 32, 102, 114, 97, 109, 101, 32, 111, 112, 97, > 99, 105, 116, 121, 32, 36, 52, 32, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 10, 45, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 32, 48, 44, 36, 49, 10, 45, 45, > 102, 91, 45, 49, 93, 32, 34, 40, 105, 62, 106, 40, 45, 49, 41, 38, > 38, 105, 62, 106, 40, 49, 41, 41, 32, 124, 124, 32, 40, 105, 62, 106, > 40, 48, 44, 45, 49, 41, 38, 38, 105, 62, 106, 40, 48, 44, 49, 41, > 41, 32, 124, 124, 32, 40, 105, 62, 106, 40, 45, 49, 44, 45, 49, 41, > 38, 38, 105, 62, 106, 40, 49, 44, 49, 41, 41, 32, 124, 124, 32, 40, > 105, 62, 106, 40, 45, 49, 44, 49, 41, 38, 38, 105, 62, 106, 40, 49, > 44, 45, 49, 41, 41, 34, 10, 45, 105, 102, 32, 36, 51, 32, 45, 45, > 115, 108, 105, 99, 101, 115, 91, 45, 49, 93, 32, 45, 49, 44, 48, 32, > 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 36, > 51, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, > 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 42, 91, 48, > 45, 50, 93, 32, 45, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, > 100, 91, 48, 93, 10, 45, 105, 102, 32, 36, 52, 32, 45, 108, 91, 48, > 93, 32, 45, 115, 51, 100, 32, 49, 10, 110, 61, 64, 123, 49, 44, 48, > 125, 10, 45, 114, 91, 50, 93, 32, 51, 44, 36, 110, 44, 49, 44, 49, > 44, 45, 49, 32, 45, 114, 91, 51, 93, 32, 50, 44, 36, 110, 44, 49, > 44, 49, 44, 45, 49, 32, 45, 114, 91, 52, 93, 32, 51, 44, 36, 110, > 44, 49, 44, 49, 44, 45, 49, 10, 45, 105, 102, 32, 123, 36, 50, 61, > 61, 48, 34, 32, 124, 124, 32, 34, 40, 36, 50, 61, 61, 51, 34, 32, > 38, 38, 32, 34, 36, 49, 61, 61, 48, 41, 125, 10, 45, 61, 91, 49, > 93, 32, 123, 52, 42, 36, 110, 125, 10, 45, 105, 91, 51, 93, 32, 91, > 50, 93, 120, 51, 32, 45, 45, 122, 91, 45, 50, 93, 32, 48, 44, 49, > 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 45, 91, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 52, 93, 32, 91, 45, 49, > 93, 10, 45, 115, 91, 45, 49, 93, 32, 120, 32, 45, 42, 91, 45, 50, > 93, 32, 45, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, > 32, 45, 43, 91, 51, 93, 32, 91, 45, 49, 93, 32, 45, 45, 91, 53, > 44, 45, 49, 93, 32, 45, 97, 91, 50, 45, 53, 93, 32, 120, 10, 45, > 114, 109, 91, 51, 93, 32, 49, 44, 36, 110, 44, 49, 44, 49, 44, 52, > 32, 45, 45, 102, 91, 45, 49, 93, 32, 52, 42, 121, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 114, 118, 91, 45, > 51, 44, 45, 49, 93, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, > 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, 51, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 50, 61, 61, 49, 34, 32, 124, 124, 32, 34, 40, 36, > 50, 61, 61, 51, 34, 32, 38, 38, 32, 34, 36, 49, 61, 61, 49, 41, > 125, 10, 45, 61, 91, 49, 93, 32, 123, 52, 42, 36, 110, 125, 10, 45, > 105, 91, 51, 93, 32, 91, 50, 93, 120, 51, 32, 45, 45, 122, 91, 45, > 50, 93, 32, 48, 44, 48, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 45, 45, 91, 50, 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, > 52, 93, 32, 91, 45, 49, 93, 10, 45, 115, 104, 105, 102, 116, 91, 45, > 49, 93, 32, 49, 44, 48, 32, 45, 45, 91, 51, 93, 32, 91, 45, 49, > 93, 32, 45, 43, 91, 53, 44, 45, 49, 93, 32, 45, 97, 91, 50, 45, > 53, 93, 32, 120, 10, 45, 114, 109, 91, 51, 93, 32, 49, 44, 36, 110, > 44, 49, 44, 49, 44, 52, 32, 45, 45, 102, 91, 45, 49, 93, 32, 52, > 42, 121, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 114, 118, 91, 45, 51, 44, 45, 49, 93, 32, 45, 97, 91, 45, > 53, 45, 45, 49, 93, 32, 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 51, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 34, 32, > 124, 124, 32, 34, 40, 36, 50, 61, 61, 51, 34, 32, 38, 38, 32, 34, > 36, 49, 61, 61, 50, 41, 125, 10, 45, 61, 91, 49, 93, 32, 123, 50, > 42, 36, 110, 125, 10, 45, 45, 122, 91, 52, 93, 32, 48, 44, 48, 32, > 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 45, 43, 91, 50, > 44, 45, 49, 93, 32, 45, 45, 91, 50, 44, 45, 50, 93, 32, 45, 97, > 91, 50, 44, 45, 49, 93, 32, 120, 10, 45, 114, 109, 91, 51, 93, 32, > 49, 44, 36, 110, 44, 49, 44, 49, 44, 53, 32, 45, 45, 102, 91, 45, > 49, 93, 32, 50, 42, 121, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 51, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 52, 45, 45, 49, > 93, 32, 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, 51, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 121, 32, 45, 97, 32, 121, 32, 45, 111, 51, > 100, 32, 36, 52, 32, 45, 105, 102, 32, 36, 53, 32, 45, 112, 51, 100, > 32, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 99, 111, 108, 51, 100, > 32, 50, 48, 48, 10, 45, 101, 110, 100, 108, 32, 45, 101, 108, 115, 101, > 32, 45, 114, 109, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 43, 51, 100, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 110, 97, 112, > 115, 104, 111, 116, 51, 100, 32, 58, 32, 95, 115, 105, 122, 101, 62, 48, > 44, 95, 122, 111, 111, 109, 62, 61, 48, 44, 95, 98, 97, 99, 107, 103, > 114, 111, 117, 110, 100, 82, 44, 95, 98, 97, 99, 107, 103, 114, 111, 117, > 110, 100, 71, 44, 95, 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 66, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 97, 107, 101, 32, 50, > 100, 32, 115, 110, 97, 112, 115, 104, 111, 116, 115, 32, 111, 102, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, > 32, 39, 122, 111, 111, 109, 39, 32, 116, 111, 32, 48, 32, 116, 111, 32, > 100, 105, 115, 97, 98, 108, 101, 32, 111, 98, 106, 101, 99, 116, 32, 97, > 117, 116, 111, 45, 115, 99, 97, 108, 105, 110, 103, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 61, 53, 49, 50, 39, > 44, 32, 39, 122, 111, 111, 109, 61, 49, 39, 32, 97, 110, 100, 32, 39, > 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 82, 61, 98, 97, 99, 107, > 103, 114, 111, 117, 110, 100, 71, 61, 98, 97, 99, 107, 103, 114, 111, 117, > 110, 100, 66, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 50, 48, 32, 45, 115, 110, > 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, 44, 49, 46, 50, > 44, 49, 50, 56, 44, 54, 52, 44, 51, 50, 10, 115, 110, 97, 112, 115, > 104, 111, 116, 51, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 51, 61, 34, 34, 125, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, > 40, 36, 51, 41, 125, 10, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 84, 97, 107, 101, 32, 36, 49, 120, 36, 49, 32, 115, 110, 97, 112, 115, > 104, 111, 116, 36, 63, 32, 111, 102, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 36, 63, 44, 32, 119, 105, 116, 104, 32, 122, 111, 111, 109, 32, > 102, 97, 99, 116, 111, 114, 32, 36, 50, 32, 97, 110, 100, 32, 98, 97, > 99, 107, 103, 114, 111, 117, 110, 100, 32, 99, 111, 108, 111, 114, 32, 36, > 123, 51, 45, 45, 49, 125, 46, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 101, 91, 48, 45, 45, 51, 93, 32, 34, 84, 97, 107, 101, 32, 36, 49, > 120, 36, 49, 32, 115, 110, 97, 112, 115, 104, 111, 116, 36, 63, 32, 111, > 102, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 122, 111, 111, 109, 32, 102, 97, 99, 116, 111, 114, 32, > 36, 50, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 105, 102, 32, 123, 36, 50, 33, 61, 48, 125, 32, 45, > 99, 51, 100, 32, 45, 110, 51, 100, 32, 45, 42, 51, 100, 32, 123, 51, > 42, 36, 49, 42, 36, 50, 47, 52, 125, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 51, 41, 125, 32, > 40, 36, 123, 51, 45, 45, 49, 125, 41, 32, 45, 121, 91, 45, 49, 93, > 32, 99, 32, 45, 101, 108, 115, 101, 32, 49, 44, 50, 44, 49, 44, 51, > 44, 51, 50, 44, 54, 52, 44, 51, 50, 44, 49, 49, 54, 44, 54, 52, > 44, 57, 54, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 49, 44, 49, 44, 51, 44, 51, 10, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 110, 125, 44, 49, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 108, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, > 112, 101, 99, 108, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 115, 112, 101, 99, 108, 51, 100, 32, 58, 32, > 118, 97, 108, 117, 101, 62, 61, 48, 32, 58, 32, 40, 43, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 108, 105, 103, 104, > 116, 110, 101, 115, 115, 32, 111, 102, 32, 51, 100, 32, 115, 112, 101, 99, > 117, 108, 97, 114, 32, 108, 105, 103, 104, 116, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, > 108, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 118, 97, 108, 117, 101, 61, 48, 46, 49, 53, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 48, 46, 51, 44, 48, > 46, 54, 44, 48, 46, 57, 44, 49, 46, 50, 41, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 119, 125, 32, 45, 116, 111, 114, 117, 115, 51, 100, > 32, 49, 48, 48, 44, 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, 51, > 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 54, 48, 32, 45, > 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, > 48, 44, 48, 32, 45, 115, 112, 101, 99, 108, 51, 100, 32, 64, 123, 48, > 44, 36, 62, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, 51, 100, > 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, 32, 45, > 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 115, 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 115, 112, 101, 99, 115, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 101, 99, 115, 51, 100, 32, > 58, 32, 118, 97, 108, 117, 101, 62, 61, 48, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 115, 104, > 105, 110, 105, 110, 101, 115, 115, 32, 111, 102, 32, 51, 100, 32, 115, 112, > 101, 99, 117, 108, 97, 114, 32, 108, 105, 103, 104, 116, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 115, 115, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 118, 97, 108, 117, 101, 61, 48, 46, 56, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 40, 48, 44, 48, 46, 51, 44, > 48, 46, 54, 44, 48, 46, 57, 44, 49, 46, 50, 41, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 119, 125, 32, 45, 116, 111, 114, 117, 115, 51, > 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, > 51, 100, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 54, 48, 32, > 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, > 44, 48, 44, 48, 32, 45, 115, 112, 101, 99, 115, 51, 100, 32, 64, 123, > 48, 44, 36, 62, 125, 32, 45, 115, 110, 97, 112, 115, 104, 111, 116, 51, > 100, 91, 45, 49, 93, 32, 52, 48, 48, 32, 45, 100, 111, 110, 101, 32, > 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 10, 35, 64, 103, 109, 105, > 99, 32, 115, 112, 104, 101, 114, 101, 51, 100, 32, 58, 32, 114, 97, 100, > 105, 117, 115, 44, 95, 110, 98, 95, 114, 101, 99, 117, 114, 115, 105, 111, > 110, 115, 62, 61, 48, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 115, 112, > 104, 101, 114, 101, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, 41, 44, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 58, 32, 39, 110, 98, 95, 114, 101, 99, 117, 114, 115, 105, 111, 110, 115, > 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 48, 48, 32, 45, 45, > 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, 32, > 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, > 82, 71, 66, 125, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 104, 101, > 114, 105, 99, 97, 108, 51, 100, 32, 58, 32, 95, 110, 98, 95, 97, 122, > 105, 109, 117, 116, 104, 62, 61, 51, 44, 95, 110, 98, 95, 122, 101, 110, > 105, 116, 104, 62, 61, 51, 44, 95, 114, 97, 100, 105, 117, 115, 95, 102, > 117, 110, 99, 116, 105, 111, 110, 40, 112, 104, 105, 44, 116, 104, 101, 116, > 97, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 115, 112, 104, 101, 114, 105, 99, 97, 108, 32, 111, > 98, 106, 101, 99, 116, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, 41, > 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 110, 98, 95, 122, 101, 110, 105, 116, 104, 61, 110, > 98, 95, 97, 122, 105, 109, 117, 116, 61, 54, 52, 39, 32, 97, 110, 100, > 32, 39, 114, 97, 100, 105, 117, 115, 95, 102, 117, 110, 99, 116, 105, 111, > 110, 61, 34, 97, 98, 115, 40, 49, 43, 48, 46, 53, 42, 99, 111, 115, > 40, 51, 42, 112, 104, 105, 41, 42, 115, 105, 110, 40, 52, 42, 116, 104, > 101, 116, 97, 41, 41, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 115, 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, > 32, 54, 52, 32, 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, > 51, 100, 32, 49, 10, 115, 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 54, > 52, 125, 62, 61, 51, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, > 62, 61, 51, 34, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 51, 61, > 97, 98, 115, 40, 49, 43, 48, 46, 53, 42, 99, 111, 115, 40, 51, 42, > 112, 104, 105, 41, 42, 115, 105, 110, 40, 52, 42, 116, 104, 101, 116, 97, > 41, 41, 125, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 115, 112, 104, 101, 114, 105, 99, 97, 108, > 32, 111, 98, 106, 101, 99, 116, 44, 32, 119, 105, 116, 104, 32, 115, 117, > 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 32, 40, 36, 49, 44, 36, > 50, 41, 32, 97, 110, 100, 32, 104, 101, 105, 103, 104, 116, 32, 102, 117, > 110, 99, 116, 105, 111, 110, 32, 39, 36, 51, 39, 46, 34, 10, 45, 118, > 32, 45, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, > 45, 121, 91, 45, 49, 93, 10, 110, 49, 61, 123, 114, 111, 117, 110, 100, > 40, 36, 49, 41, 125, 32, 110, 50, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 50, 41, 125, 10, 36, 110, 49, 44, 123, 36, 110, 50, 45, 49, 125, > 44, 49, 44, 51, 44, 34, 112, 104, 105, 61, 50, 42, 112, 105, 42, 40, > 120, 43, 48, 46, 53, 41, 47, 119, 59, 92, 10, 116, 104, 101, 116, 97, > 61, 45, 112, 105, 47, 50, 43, 112, 105, 42, 40, 121, 43, 48, 46, 53, > 41, 47, 104, 59, 92, 10, 99, 112, 61, 99, 111, 115, 40, 112, 104, 105, > 41, 59, 92, 10, 115, 112, 61, 115, 105, 110, 40, 112, 104, 105, 41, 59, > 92, 10, 99, 116, 61, 99, 111, 115, 40, 116, 104, 101, 116, 97, 41, 59, > 92, 10, 40, 36, 51, 41, 42, 105, 102, 40, 99, 61, 61, 48, 44, 99, > 116, 42, 99, 112, 44, 105, 102, 40, 99, 61, 61, 49, 44, 99, 116, 42, > 115, 112, 44, 115, 105, 110, 40, 116, 104, 101, 116, 97, 41, 41, 41, 34, > 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 104, 125, 44, 51, 44, > 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, > 45, 49, 93, 32, 121, 120, 122, 99, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 48, 44, 48, 44, 123, 112, 104, 105, 61, 48, 59, 116, 104, 101, 116, > 97, 61, 45, 112, 105, 47, 50, 59, 45, 36, 51, 125, 59, 48, 44, 48, > 44, 123, 112, 104, 105, 61, 48, 59, 116, 104, 101, 116, 97, 61, 112, 105, > 47, 50, 59, 36, 51, 125, 41, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 10, 110, 98, 118, 61, 123, 104, 125, 32, 45, 121, 91, 45, > 49, 93, 10, 36, 110, 49, 44, 123, 36, 110, 50, 45, 50, 125, 44, 49, > 44, 52, 44, 34, 110, 120, 61, 40, 120, 43, 49, 41, 37, 119, 59, 110, > 121, 61, 40, 121, 43, 49, 41, 59, 50, 43, 105, 102, 40, 99, 61, 61, > 48, 44, 120, 43, 121, 42, 34, 36, 110, 49, 34, 44, 105, 102, 40, 99, > 61, 61, 49, 44, 110, 120, 43, 121, 42, 34, 36, 110, 49, 34, 44, 105, > 102, 40, 99, 61, 61, 50, 44, 110, 120, 43, 110, 121, 42, 34, 36, 110, > 49, 34, 44, 120, 43, 110, 121, 42, 34, 36, 110, 49, 34, 41, 41, 41, > 34, 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 42, 104, 125, 44, 52, > 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, 101, > 91, 45, 49, 93, 32, 121, 120, 122, 99, 32, 45, 105, 91, 45, 50, 93, > 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 52, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 120, 10, 50, 44, 36, 110, 49, 44, 49, > 44, 49, 44, 51, 44, 48, 32, 49, 44, 36, 110, 49, 44, 49, 44, 49, > 44, 39, 121, 39, 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, > 37, 91, 45, 49, 93, 32, 123, 104, 125, 32, 50, 44, 36, 110, 49, 44, > 49, 44, 49, 44, 51, 44, 49, 32, 91, 45, 51, 44, 45, 50, 93, 10, > 45, 43, 91, 45, 53, 44, 45, 52, 93, 32, 50, 32, 45, 114, 118, 91, > 45, 53, 44, 45, 52, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 32, 123, 36, 110, 98, 118, 45, 36, 110, 49, 125, 32, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 120, 32, 45, 97, 91, 45, 52, 45, 45, 50, > 93, 32, 120, 10, 110, 98, 112, 61, 123, 104, 43, 64, 123, 45, 50, 44, > 104, 125, 43, 64, 123, 45, 51, 44, 104, 125, 125, 10, 45, 121, 91, 45, > 51, 45, 45, 49, 93, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, > 121, 10, 45, 105, 91, 45, 51, 93, 32, 40, 36, 110, 98, 118, 59, 36, > 110, 98, 112, 41, 10, 49, 44, 123, 51, 42, 36, 110, 98, 112, 125, 44, > 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 36, 110, 98, 112, 44, 49, > 44, 49, 44, 49, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, > 10, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 34, 91, 51, 100, 32, 115, 112, 104, 101, 114, 105, > 99, 97, 108, 32, 115, 117, 114, 102, 97, 99, 101, 32, 39, 36, 51, 39, > 93, 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 112, 108, 105, 110, 101, 51, 100, 32, 58, 32, 120, 48, 91, 37, 93, 44, > 121, 48, 91, 37, 93, 44, 122, 48, 91, 37, 93, 44, 117, 48, 91, 37, > 93, 44, 118, 48, 91, 37, 93, 44, 119, 48, 91, 37, 93, 44, 120, 49, > 91, 37, 93, 44, 121, 49, 91, 37, 93, 44, 122, 49, 91, 37, 93, 44, > 117, 49, 91, 37, 93, 44, 118, 49, 91, 37, 93, 44, 119, 49, 91, 37, > 93, 44, 95, 110, 98, 95, 118, 101, 114, 116, 105, 99, 101, 115, 62, 61, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 51, 100, 32, 115, 112, 108, 105, 110, 101, 32, 119, 105, 116, 104, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, > 114, 121, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, > 95, 118, 101, 114, 116, 105, 99, 101, 115, 61, 49, 50, 56, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 49, 48, 48, 32, 45, 115, 112, 108, 105, 110, 101, 51, 100, > 32, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, > 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, > 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, > 44, 49, 50, 56, 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, 110, 101, 32, > 45, 98, 111, 120, 51, 100, 32, 49, 32, 45, 112, 114, 105, 109, 105, 116, > 105, 118, 101, 115, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, 51, > 100, 10, 115, 112, 108, 105, 110, 101, 51, 100, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 36, 123, 49, 51, 61, 49, 50, 56, 125, 62, 61, 50, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 110, 101, 119, 32, 51, 100, 32, 115, 112, 108, 105, 110, 101, 32, 102, 114, > 111, 109, 32, 40, 36, 123, 49, 45, 51, 125, 41, 32, 91, 36, 123, 52, > 45, 54, 125, 93, 32, 116, 111, 32, 40, 36, 123, 55, 45, 57, 125, 41, > 32, 91, 36, 123, 49, 48, 45, 49, 50, 125, 93, 32, 119, 105, 116, 104, > 32, 36, 49, 51, 32, 118, 101, 114, 116, 105, 99, 101, 115, 46, 34, 10, > 45, 118, 32, 45, 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, > 41, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 10, 40, 36, 49, > 51, 59, 123, 36, 49, 51, 45, 49, 125, 41, 10, 49, 44, 36, 49, 51, > 44, 49, 44, 49, 44, 49, 32, 40, 48, 59, 49, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 49, 44, 36, 49, 51, 44, 49, 44, 49, 44, 51, 32, > 45, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 120, > 10, 45, 45, 42, 91, 45, 49, 93, 32, 39, 36, 50, 44, 36, 53, 44, > 123, 51, 42, 40, 40, 36, 56, 41, 45, 40, 36, 50, 41, 41, 45, 50, > 42, 40, 36, 53, 41, 45, 40, 36, 49, 49, 41, 125, 44, 123, 40, 36, > 53, 41, 43, 40, 36, 49, 49, 41, 43, 50, 42, 40, 40, 36, 50, 41, > 45, 40, 36, 56, 41, 41, 125, 39, 32, 45, 108, 91, 45, 49, 93, 32, > 45, 115, 32, 120, 32, 45, 43, 32, 45, 101, 110, 100, 108, 10, 45, 45, > 42, 91, 45, 50, 93, 32, 39, 36, 51, 44, 36, 54, 44, 123, 51, 42, > 40, 40, 36, 57, 41, 45, 40, 36, 51, 41, 41, 45, 50, 42, 40, 36, > 54, 41, 45, 40, 36, 49, 50, 41, 125, 44, 123, 40, 36, 54, 41, 43, > 40, 36, 49, 50, 41, 43, 50, 42, 40, 40, 36, 51, 41, 45, 40, 36, > 57, 41, 41, 125, 39, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 32, > 120, 32, 45, 43, 32, 45, 101, 110, 100, 108, 10, 45, 42, 91, 45, 51, > 93, 32, 39, 36, 49, 44, 36, 52, 44, 123, 51, 42, 40, 40, 36, 55, > 41, 45, 40, 36, 49, 41, 41, 45, 50, 42, 40, 36, 52, 41, 45, 40, > 36, 49, 48, 41, 125, 44, 123, 40, 36, 52, 41, 43, 40, 36, 49, 48, > 41, 43, 50, 42, 40, 40, 36, 49, 41, 45, 40, 36, 55, 41, 41, 125, > 39, 32, 45, 108, 91, 45, 51, 93, 32, 45, 115, 32, 120, 32, 45, 43, > 32, 45, 101, 110, 100, 108, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 120, 10, 49, 44, 123, 36, 49, 51, 45, 49, 125, 44, 49, 44, 49, > 44, 50, 32, 40, 48, 44, 49, 59, 123, 36, 49, 51, 45, 50, 125, 44, > 123, 36, 49, 51, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 49, 44, 123, 51, 42, 40, 36, 49, 51, 45, 49, 41, > 125, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 123, 36, 49, 51, > 45, 49, 125, 44, 49, 44, 49, 44, 49, 10, 45, 121, 91, 45, 51, 44, > 45, 52, 44, 45, 54, 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, > 32, 121, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 51, 100, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 112, > 108, 105, 116, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 115, 112, 108, 105, 116, 51, 100, 32, 58, 32, 95, > 107, 101, 101, 112, 95, 115, 104, 97, 114, 101, 100, 95, 100, 97, 116, 97, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 43, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 108, 105, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 115, 32, 105, 110, 116, 111, 32, 54, 32, 102, 101, 97, 116, 117, > 114, 101, 32, 118, 101, 99, 116, 111, 114, 115, 32, 58, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 123, 32, 104, 101, 97, 100, 101, 114, 44, 32, > 115, 105, 122, 101, 115, 44, 32, 118, 101, 114, 116, 105, 99, 101, 115, 44, > 32, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 44, 32, 99, 111, 108, > 111, 114, 115, 44, 32, 111, 112, 97, 99, 105, 116, 105, 101, 115, 32, 125, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 115, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 84, 111, 32, 114, 101, 99, 114, 101, 97, 116, 101, > 32, 116, 104, 101, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 44, 32, > 97, 112, 112, 101, 110, 100, 32, 116, 104, 101, 115, 101, 32, 54, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, > 121, 45, 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 107, 101, 101, 112, 95, 115, 104, 97, 114, 101, 100, 95, 100, 97, 116, > 97, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 98, 111, 120, 51, 100, 32, 49, 48, 48, 32, 45, 45, 115, 112, > 108, 105, 116, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 114, > 105, 116, 101, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 111, 110, 118, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 51, 100, 32, 115, 112, 114, > 105, 116, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 119, 105, > 116, 104, 32, 97, 108, 112, 104, 97, 32, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 97, 114, 101, 32, 109, 97, 110, 97, 103, 101, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 115, 112, 114, 105, 116, 101, 51, 100, 10, 115, 112, > 114, 105, 116, 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 97, 115, 32, 51, 100, 32, 115, 112, 114, 105, 116, 101, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 10, 45, 105, 91, 48, 93, 32, 40, 54, 55, 46, 53, 59, 55, 51, > 46, 53, 59, 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, > 49, 46, 53, 59, 49, 48, 48, 46, 53, 59, 49, 59, 49, 59, 48, 59, > 48, 59, 48, 59, 49, 59, 48, 59, 45, 49, 50, 56, 59, 123, 119, 125, > 59, 123, 104, 125, 59, 64, 123, 48, 44, 115, 125, 41, 32, 45, 121, 91, > 49, 93, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 40, > 49, 41, 32, 45, 97, 32, 121, 10, 45, 101, 108, 115, 101, 32, 45, 47, > 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 105, 91, 45, 50, 93, 32, > 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, 123, 115, > 125, 41, 32, 45, 121, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 32, 121, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 114, 105, 116, 101, 115, 51, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, > 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, 111, > 98, 106, 101, 99, 116, 115, 32, 97, 115, 32, 115, 112, 114, 105, 116, 101, > 115, 32, 99, 108, 111, 117, 100, 115, 44, 32, 119, 104, 101, 114, 101, 32, > 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 50, 100, > 32, 115, 112, 114, 105, 116, 101, 32, 105, 115, 32, 116, 104, 101, 32, 108, > 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 102, 32, > 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 115, 112, 114, > 105, 116, 101, 32, 104, 97, 115, 32, 97, 32, 52, 116, 104, 32, 99, 104, > 97, 110, 110, 101, 108, 44, 32, 105, 116, 32, 115, 116, 97, 110, 100, 115, > 32, 102, 111, 114, 32, 116, 104, 101, 32, 115, 112, 114, 105, 116, 101, 32, > 97, 108, 112, 104, 97, 45, 99, 104, 97, 110, 110, 101, 108, 32, 40, 105, > 110, 32, 91, 48, 44, 50, 53, 53, 93, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, > 49, 48, 48, 44, 50, 48, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 91, 45, 49, 93, 32, > 54, 52, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 103, 97, > 117, 115, 115, 105, 97, 110, 91, 45, 49, 93, 32, 51, 48, 37, 44, 51, > 48, 37, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, > 112, 112, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, > 45, 115, 112, 114, 105, 116, 101, 115, 51, 100, 32, 45, 100, 114, 103, 98, > 97, 91, 45, 50, 93, 10, 115, 112, 114, 105, 116, 101, 115, 51, 100, 32, > 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, > 114, 116, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 115, 32, 51, 100, > 32, 115, 112, 114, 105, 116, 101, 115, 32, 99, 108, 111, 117, 100, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 49, 125, 10, 45, 105, 102, 32, 123, 33, 64, 123, 36, 62, > 44, 40, 48, 44, 55, 41, 125, 125, 32, 45, 99, 111, 110, 116, 105, 110, > 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 91, 45, 49, 93, 32, 45, > 108, 91, 36, 62, 44, 45, 49, 93, 10, 45, 115, 51, 100, 91, 48, 93, > 32, 78, 61, 64, 123, 49, 44, 48, 125, 32, 45, 61, 91, 49, 93, 32, > 36, 78, 44, 48, 44, 49, 10, 45, 114, 109, 91, 51, 45, 53, 93, 32, > 45, 105, 91, 51, 93, 32, 40, 49, 44, 48, 59, 49, 44, 123, 36, 78, > 45, 49, 125, 41, 32, 45, 114, 91, 51, 93, 32, 50, 44, 36, 78, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 51, 93, 10, > 45, 105, 102, 32, 123, 115, 61, 61, 52, 125, 10, 45, 115, 91, 45, 49, > 93, 32, 99, 44, 45, 51, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, > 53, 10, 45, 105, 91, 45, 51, 93, 32, 40, 45, 49, 50, 56, 59, 123, > 119, 125, 59, 123, 104, 125, 59, 51, 41, 10, 45, 105, 102, 32, 123, 36, > 78, 62, 49, 125, 32, 45, 105, 91, 45, 50, 93, 32, 49, 44, 123, 52, > 42, 40, 36, 78, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, > 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 91, 45, 50, 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, > 123, 104, 125, 59, 49, 41, 10, 45, 105, 102, 32, 123, 36, 78, 62, 49, > 125, 32, 49, 44, 123, 52, 42, 40, 36, 78, 45, 49, 41, 125, 44, 49, > 44, 49, 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 105, 91, 45, 50, > 93, 32, 40, 45, 49, 50, 56, 59, 123, 119, 125, 59, 123, 104, 125, 59, > 123, 115, 125, 41, 32, 45, 121, 91, 45, 51, 44, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 36, 78, 62, 49, 125, 32, 49, 44, 123, 52, 42, 40, > 36, 78, 45, 49, 41, 125, 44, 49, 44, 49, 44, 45, 49, 50, 56, 44, > 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 49, 44, 36, > 78, 44, 49, 44, 49, 44, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 121, 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, 114, 51, 100, 32, 58, 32, > 95, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 62, 48, 44, 48, > 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, 49, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, > 100, 32, 115, 116, 97, 114, 32, 97, 116, 32, 40, 48, 44, 48, 44, 48, > 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, > 115, 61, 53, 39, 32, 97, 110, 100, 32, 39, 116, 104, 105, 99, 107, 110, > 101, 115, 115, 61, 48, 46, 51, 56, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 115, 116, 97, 114, 51, 100, 32, 44, 32, > 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, > 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, > 45, 82, 71, 66, 125, 10, 115, 116, 97, 114, 51, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 48, 46, 51, 56, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 50, 60, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 115, 116, 97, 114, > 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 98, 114, 97, 110, 99, 104, > 101, 115, 32, 97, 110, 100, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 10, 78, 61, 123, 50, 42, > 36, 49, 125, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, > 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 53, 32, 40, 123, 36, 78, > 43, 49, 125, 59, 36, 78, 41, 10, 40, 123, 45, 112, 105, 47, 50, 125, > 59, 123, 51, 42, 112, 105, 47, 50, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 44, 123, 36, 78, 43, 49, 125, 44, 49, 44, 49, 44, 51, > 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, 123, 104, 45, > 50, 125, 32, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, > 115, 91, 45, 50, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 120, 10, 40, 49, 44, 49, 59, 36, 50, 44, 36, 50, 41, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 122, 91, 45, 49, 93, 32, 48, > 44, 50, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 43, 49, > 125, 44, 49, 44, 49, 44, 48, 10, 40, 51, 44, 36, 78, 44, 49, 44, > 48, 59, 51, 44, 36, 78, 44, 36, 78, 44, 123, 36, 78, 45, 49, 125, > 41, 32, 45, 114, 91, 45, 49, 93, 32, 52, 44, 36, 78, 44, 49, 44, > 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 45, > 61, 91, 45, 49, 93, 32, 48, 44, 50, 44, 49, 48, 48, 37, 10, 51, > 44, 36, 78, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 36, 78, > 44, 49, 44, 49, 44, 49, 32, 45, 121, 91, 45, 54, 44, 45, 52, 45, > 45, 50, 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 32, > 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, 92, 32, 115, 116, 97, > 114, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 116, 114, 101, 97, 109, 108, 105, 110, 101, 51, 100, 32, 58, 32, 120, 91, > 37, 93, 44, 121, 91, 37, 93, 44, 122, 91, 37, 93, 44, 95, 76, 62, > 61, 48, 44, 95, 100, 108, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, > 111, 108, 97, 116, 105, 111, 110, 44, 95, 105, 115, 95, 98, 97, 99, 107, > 119, 97, 114, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, > 105, 115, 95, 111, 114, 105, 101, 110, 116, 101, 100, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 32, 58, 32, 39, 102, 111, 114, 109, 117, 108, 97, > 39, 44, 120, 44, 121, 44, 122, 44, 95, 76, 62, 61, 48, 44, 95, 100, > 108, 62, 48, 44, 95, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, > 111, 110, 44, 95, 105, 115, 95, 98, 97, 99, 107, 119, 97, 114, 100, 61, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, 115, 95, 111, 114, > 105, 101, 110, 116, 101, 100, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, > 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 69, 120, 116, 114, 97, 99, 116, 32, 51, 100, 32, 115, 116, 114, 101, 97, > 109, 108, 105, 110, 101, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 118, 101, 99, 116, 111, 114, 32, 102, 105, 101, 108, > 100, 115, 32, 111, 114, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 102, 111, 114, 109, 117, 108, 97, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, > 48, 61, 110, 101, 97, 114, 101, 115, 116, 32, 105, 110, 116, 101, 103, 101, > 114, 32, 124, 32, 49, 61, 49, 115, 116, 45, 111, 114, 100, 101, 114, 32, > 124, 32, 50, 61, 50, 110, 100, 45, 111, 114, 100, 101, 114, 32, 124, 32, > 51, 61, 52, 116, 104, 45, 111, 114, 100, 101, 114, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 108, 61, 48, 46, 49, 39, > 44, 32, 39, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 61, 50, 39, 44, 32, 39, 105, 115, 95, 98, 97, 99, 107, 119, 97, 114, > 100, 61, 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 111, 114, 105, > 101, 110, 116, 101, 100, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 49, 48, 48, 44, 49, 48, 48, 44, 49, 48, 48, > 44, 51, 32, 45, 114, 97, 110, 100, 32, 45, 49, 48, 44, 49, 48, 32, > 45, 98, 108, 117, 114, 32, 51, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 51, 48, 48, 32, 45, 45, 115, 116, 114, 101, 97, 109, 108, 105, 110, 101, > 51, 100, 91, 48, 93, 32, 123, 63, 40, 49, 48, 48, 41, 125, 44, 123, > 63, 40, 49, 48, 48, 41, 125, 44, 123, 63, 40, 49, 48, 48, 41, 125, > 44, 49, 48, 48, 48, 44, 49, 44, 49, 32, 45, 99, 111, 108, 111, 114, > 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, > 100, 111, 110, 101, 32, 45, 114, 101, 109, 111, 118, 101, 91, 48, 93, 32, > 45, 98, 111, 120, 51, 100, 32, 49, 48, 48, 32, 45, 112, 114, 105, 109, > 105, 116, 105, 118, 101, 115, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, > 97, 100, 100, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 45, 51, 100, > 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 115, 117, 98, 51, > 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 115, 117, 98, 51, 100, 32, 58, 32, 116, 120, 44, 95, 116, 121, 44, > 95, 116, 122, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 83, 104, 105, 102, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 51, 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 119, 105, 116, > 104, 32, 116, 104, 101, 32, 111, 112, 112, 111, 115, 105, 116, 101, 32, 111, > 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 105, 115, 112, > 108, 97, 99, 101, 109, 101, 110, 116, 32, 118, 101, 99, 116, 111, 114, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 45, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 116, 121, 61, 116, 122, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 115, 112, 104, 101, 114, > 101, 51, 100, 32, 49, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 53, > 32, 45, 45, 115, 117, 98, 51, 100, 91, 45, 49, 93, 32, 49, 48, 44, > 123, 63, 40, 45, 49, 48, 44, 49, 48, 41, 125, 44, 48, 32, 45, 99, > 111, 108, 111, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, > 66, 125, 32, 45, 100, 111, 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, > 117, 108, 97, 51, 100, 32, 58, 32, 114, 101, 115, 111, 108, 117, 116, 105, > 111, 110, 62, 49, 44, 109, 62, 61, 49, 44, 110, 49, 44, 110, 50, 44, > 110, 51, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 50, 100, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, > 97, 32, 99, 117, 114, 118, 101, 32, 97, 115, 32, 97, 32, 51, 100, 32, > 111, 98, 106, 101, 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 61, 49, 48, 50, > 52, 39, 44, 32, 39, 109, 61, 56, 39, 44, 32, 39, 110, 49, 61, 49, > 39, 44, 32, 39, 110, 50, 61, 53, 39, 32, 97, 110, 100, 32, 39, 110, > 51, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 51, 100, > 32, 44, 10, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 51, > 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 49, 48, 50, 52, 125, 62, 49, 32, 38, 38, 32, 36, 123, 50, 61, 56, > 125, 62, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 49, 125, 44, 36, 123, 52, 61, 53, 125, 44, 36, 123, 53, 61, 56, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, > 50, 100, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 32, > 99, 117, 114, 118, 101, 44, 32, 119, 105, 116, 104, 32, 114, 101, 115, 111, > 108, 117, 116, 105, 111, 110, 32, 36, 49, 44, 32, 109, 61, 36, 50, 32, > 97, 110, 100, 32, 40, 110, 49, 44, 110, 50, 44, 110, 51, 41, 61, 40, > 36, 51, 44, 36, 52, 44, 36, 53, 41, 46, 34, 10, 45, 118, 32, 45, > 10, 114, 101, 115, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 41, 125, > 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, 49, 48, 57, 46, > 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, 59, 49, 48, 48, > 46, 53, 59, 36, 114, 101, 115, 59, 123, 36, 114, 101, 115, 45, 49, 125, > 41, 10, 40, 48, 44, 123, 50, 42, 112, 105, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 36, 114, 101, 115, 44, 49, 44, 49, 44, 49, 44, 51, > 32, 91, 45, 49, 93, 10, 45, 42, 91, 45, 49, 93, 32, 123, 36, 50, > 47, 52, 125, 32, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, > 111, 115, 91, 45, 50, 93, 32, 45, 97, 98, 115, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 94, 91, 45, 50, 93, 32, 36, 52, 32, 45, 94, 91, > 45, 49, 93, 32, 36, 53, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 94, 91, 45, 49, 93, 32, 123, 45, 49, 47, 36, 51, 125, 10, > 45, 45, 115, 105, 110, 91, 45, 50, 93, 32, 45, 99, 111, 115, 91, 45, > 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 51, 44, 45, 50, 93, 32, 45, 110, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 49, 44, 49, 10, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, > 50, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, > 49, 44, 49, 44, 45, 49, 10, 49, 44, 123, 36, 114, 101, 115, 45, 49, > 125, 44, 49, 44, 49, 44, 50, 32, 40, 48, 59, 123, 36, 114, 101, 115, > 45, 50, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 36, > 114, 101, 115, 45, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 120, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, > 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 119, 42, 104, 125, 44, 49, > 44, 49, 44, 45, 49, 10, 49, 44, 123, 51, 42, 40, 36, 114, 101, 115, > 45, 49, 41, 125, 44, 49, 44, 49, 44, 50, 48, 48, 32, 49, 44, 123, > 36, 114, 101, 115, 45, 49, 125, 44, 49, 44, 49, 44, 49, 32, 45, 97, > 91, 45, 53, 45, 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 91, 51, 100, 92, 32, 115, 117, 112, 101, 114, 102, 111, 114, 109, > 117, 108, 97, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 101, 120, 116, 95, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, > 51, 100, 32, 58, 32, 95, 34, 116, 101, 120, 116, 49, 34, 44, 95, 34, > 116, 101, 120, 116, 50, 34, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 116, 101, 120, 116, 32, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 116, 119, > 111, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, > 110, 103, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, > 101, 120, 116, 49, 61, 34, 116, 101, 120, 116, 49, 34, 39, 44, 32, 39, > 116, 101, 120, 116, 50, 61, 34, 116, 101, 120, 116, 50, 34, 39, 32, 97, > 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 101, 120, 116, 95, 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, > 32, 34, 71, 39, 77, 73, 67, 34, 44, 34, 82, 111, 99, 107, 115, 33, > 34, 10, 116, 101, 120, 116, 95, 112, 111, 105, 110, 116, 99, 108, 111, 117, > 100, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 34, 116, 101, 120, 116, 49, 34, 125, 44, 36, 123, 50, 61, 34, 116, 101, > 120, 116, 50, 34, 125, 44, 36, 123, 51, 61, 49, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, 112, > 111, 105, 110, 116, 99, 108, 111, 117, 100, 32, 116, 101, 120, 116, 32, 111, > 98, 106, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 116, 114, 105, 110, > 103, 115, 32, 39, 36, 49, 39, 32, 97, 110, 100, 32, 39, 36, 50, 39, > 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 48, 44, 48, 44, 53, 51, > 44, 49, 44, 49, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, > 50, 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 49, 32, 45, 109, > 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 10, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 91, 45, 50, 44, 45, 49, 93, 32, 48, 10, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 50, 44, 45, 49, 93, > 32, 50, 44, 48, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 44, > 45, 49, 93, 32, 50, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 122, 121, 120, 99, 32, 45, 114, 91, 45, 50, 44, 45, 49, > 93, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 100, 125, 32, 45, 97, > 110, 100, 91, 45, 50, 44, 45, 49, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, > 123, 64, 123, 45, 50, 44, 100, 125, 45, 49, 125, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 122, 61, > 61, 105, 44, 49, 44, 48, 41, 39, 10, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 32, 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 114, 118, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 123, 100, > 125, 32, 45, 61, 61, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 10, 49, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, > 44, 123, 64, 123, 45, 50, 44, 119, 125, 45, 49, 125, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 120, > 61, 61, 105, 44, 49, 44, 48, 41, 39, 10, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 43, 91, 45, 49, 93, > 32, 49, 32, 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 114, 118, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 10, 45, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 123, > 100, 125, 32, 45, 61, 61, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 10, 45, 111, 114, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 45, 105, 115, > 111, 115, 117, 114, 102, 97, 99, 101, 51, 100, 91, 45, 49, 93, 32, 50, > 53, 37, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, > 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 51, > 100, 32, 116, 101, 120, 116, 32, 112, 111, 105, 110, 116, 99, 108, 111, 117, > 100, 93, 34, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 116, 101, 120, 116, 51, 100, 32, 58, 32, 116, 101, 120, 116, 44, 95, 102, > 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, 100, 101, > 112, 116, 104, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 97, 32, 51, 100, 32, 116, 101, 120, 116, 32, 111, 98, 106, 101, 99, > 116, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 116, 101, 120, 116, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 102, 111, 110, 116, 95, 104, 101, 105, 103, 104, 116, 61, 53, 51, 39, > 44, 32, 39, 100, 101, 112, 116, 104, 61, 49, 48, 39, 32, 97, 110, 100, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 46, 53, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 116, > 101, 120, 116, 51, 100, 32, 34, 71, 39, 77, 73, 67, 32, 97, 115, 32, > 97, 92, 110, 51, 68, 32, 108, 111, 103, 111, 33, 34, 10, 116, 101, 120, > 116, 51, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, > 53, 51, 125, 44, 36, 123, 51, 61, 49, 48, 125, 44, 36, 123, 52, 61, > 49, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 116, 101, 120, 116, 32, 111, 98, 106, 101, > 99, 116, 32, 39, 36, 49, 39, 32, 119, 105, 116, 104, 32, 115, 105, 122, > 101, 32, 36, 50, 44, 32, 100, 101, 112, 116, 104, 32, 36, 51, 32, 97, > 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 52, > 46, 34, 10, 45, 118, 32, 45, 32, 48, 32, 45, 116, 91, 45, 49, 93, > 32, 34, 36, 49, 34, 44, 48, 44, 48, 44, 36, 50, 44, 49, 44, 49, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 48, > 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 36, 51, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 122, > 91, 45, 49, 93, 32, 49, 48, 44, 48, 10, 45, 98, 91, 45, 49, 93, > 32, 36, 52, 32, 45, 105, 115, 111, 115, 117, 114, 102, 97, 99, 101, 51, > 100, 91, 45, 49, 93, 32, 52, 48, 37, 32, 45, 114, 118, 51, 100, 91, > 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, 91, 51, 100, > 32, 116, 101, 120, 116, 32, 39, 36, 49, 39, 93, 34, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 51, 100, 32, 58, 32, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 116, 101, 120, 116, 117, 114, 105, 122, > 101, 51, 100, 39, 46, 32, 58, 32, 40, 43, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 116, 101, 120, 116, 117, 114, 105, 122, 101, 51, 100, 32, 58, > 32, 91, 105, 110, 100, 95, 116, 101, 120, 116, 117, 114, 101, 93, 44, 95, > 91, 105, 110, 100, 95, 99, 111, 111, 114, 100, 115, 93, 32, 58, 32, 40, > 43, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 101, 120, 116, > 117, 114, 105, 122, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, > 100, 32, 111, 98, 106, 101, 99, 116, 115, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 116, 101, 120, 116, 117, 114, 101, > 32, 97, 110, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, > 116, 111, 32, 39, 45, 116, 51, 100, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 87, 104, 101, 110, 32, 39, 91, 105, 110, 100, 95, > 99, 111, 111, 114, 100, 115, 93, 39, 32, 105, 115, 32, 111, 109, 105, 116, > 116, 101, 100, 44, 32, 100, 101, 102, 97, 117, 108, 116, 32, 88, 89, 32, > 116, 101, 120, 116, 117, 114, 101, 32, 112, 114, 111, 106, 101, 99, 116, 105, > 111, 110, 32, 105, 115, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 105, 110, 100, 95, 99, 111, > 111, 114, 100, 115, 61, 40, 117, 110, 100, 101, 102, 105, 110, 101, 100, 41, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 111, 114, 117, 115, 51, 100, > 32, 49, 48, 48, 44, 51, 48, 32, 45, 116, 101, 120, 116, 117, 114, 105, > 122, 101, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 107, > 101, 101, 112, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 111, 114, 117, 115, 51, 100, 32, 58, 32, 95, 114, 97, 100, 105, 117, 115, > 49, 44, 95, 114, 97, 100, 105, 117, 115, 50, 44, 95, 110, 98, 95, 115, > 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 49, 62, 50, 44, 95, > 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 50, > 62, 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, > 116, 32, 51, 100, 32, 116, 111, 114, 117, 115, 32, 97, 116, 32, 40, 48, > 44, 48, 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, > 49, 61, 49, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 50, 61, 48, > 46, 51, 39, 44, 32, 39, 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, > 115, 105, 111, 110, 115, 49, 61, 50, 52, 39, 32, 97, 110, 100, 32, 39, > 110, 98, 95, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, 115, 50, > 61, 49, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 44, 51, 32, 45, > 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, 32, > 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, 45, > 82, 71, 66, 125, 10, 116, 111, 114, 117, 115, 51, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 51, 61, 50, 52, 125, 62, 50, > 32, 38, 38, 32, 36, 123, 52, 61, 49, 50, 125, 62, 50, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, 44, 36, 123, 50, 61, > 48, 46, 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 112, 117, 116, 32, 51, 100, 32, 116, 111, 114, 117, 115, 44, 32, 119, 105, > 116, 104, 32, 114, 97, 100, 105, 105, 32, 40, 36, 49, 44, 36, 50, 41, > 32, 97, 110, 100, 32, 115, 117, 98, 100, 105, 118, 105, 115, 105, 111, 110, > 115, 32, 40, 36, 51, 44, 36, 52, 41, 46, 34, 10, 45, 118, 32, 45, > 10, 110, 98, 112, 61, 123, 36, 51, 42, 36, 52, 125, 10, 49, 44, 56, > 44, 49, 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, > 48, 57, 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, > 49, 48, 48, 46, 53, 44, 36, 110, 98, 112, 44, 123, 36, 52, 42, 36, > 51, 125, 10, 40, 48, 59, 123, 50, 42, 112, 105, 125, 41, 32, 45, 45, > 121, 91, 45, 49, 93, 32, 120, 10, 45, 114, 91, 45, 50, 93, 32, 49, > 44, 123, 36, 51, 43, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 122, > 91, 45, 50, 93, 32, 48, 44, 48, 44, 48, 44, 123, 36, 51, 45, 49, > 125, 10, 45, 114, 91, 45, 49, 93, 32, 123, 36, 52, 43, 49, 125, 44, > 49, 44, 49, 44, 49, 44, 51, 32, 45, 122, 91, 45, 49, 93, 32, 48, > 44, 123, 36, 52, 45, 49, 125, 10, 45, 45, 115, 105, 110, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 52, 44, 45, 51, 93, > 32, 45, 114, 91, 45, 52, 45, 45, 49, 93, 32, 36, 52, 44, 36, 51, > 10, 45, 42, 91, 45, 51, 93, 32, 36, 50, 32, 45, 43, 91, 45, 51, > 93, 32, 36, 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, > 42, 91, 45, 52, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, 45, 51, > 44, 45, 50, 93, 10, 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, 45, > 97, 91, 45, 51, 45, 45, 49, 93, 32, 120, 10, 49, 44, 36, 51, 44, > 49, 44, 49, 44, 39, 121, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 52, 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 48, 44, > 45, 49, 32, 36, 52, 44, 49, 44, 49, 44, 49, 44, 39, 120, 39, 32, > 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 45, 49, 32, 45, > 114, 91, 45, 52, 45, 45, 49, 93, 32, 36, 52, 44, 36, 51, 10, 45, > 45, 43, 91, 45, 52, 44, 45, 49, 93, 32, 45, 43, 91, 45, 50, 93, > 32, 91, 45, 52, 93, 32, 45, 43, 91, 45, 53, 93, 32, 91, 45, 51, > 93, 32, 45, 43, 91, 45, 52, 44, 45, 51, 93, 32, 45, 121, 91, 45, > 52, 45, 45, 49, 93, 32, 45, 105, 91, 45, 53, 93, 32, 49, 44, 123, > 104, 125, 44, 49, 44, 49, 44, 52, 32, 45, 97, 91, 45, 53, 45, 45, > 49, 93, 32, 120, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, > 48, 48, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 49, 32, 45, > 121, 91, 45, 52, 45, 45, 50, 93, 32, 45, 97, 91, 45, 53, 45, 45, > 49, 93, 32, 121, 10, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 116, 111, 114, 117, 115, 93, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 114, 105, 97, 110, 103, 108, 101, 51, 100, 32, > 58, 32, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, 121, 49, > 44, 122, 49, 44, 120, 50, 44, 121, 50, 44, 122, 50, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 116, > 114, 105, 97, 110, 103, 108, 101, 32, 97, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 49, 48, 48, 32, 97, 61, 123, 36, 62, 42, 112, > 105, 47, 53, 48, 125, 32, 45, 116, 114, 105, 97, 110, 103, 108, 101, 51, > 100, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 51, 44, 123, 99, > 111, 115, 40, 51, 42, 36, 97, 41, 125, 44, 123, 115, 105, 110, 40, 50, > 42, 36, 97, 41, 125, 44, 48, 32, 45, 99, 111, 108, 111, 114, 51, 100, > 91, 45, 49, 93, 32, 64, 123, 45, 82, 71, 66, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 97, 100, 100, 51, 100, 10, 116, 114, 105, 97, 110, 103, > 108, 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 73, 110, 112, 117, 116, 32, 51, 100, 32, 116, 114, 105, 97, 110, 103, 108, > 101, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 45, 40, 36, 52, > 44, 36, 53, 44, 36, 54, 41, 45, 40, 36, 55, 44, 36, 56, 44, 36, > 57, 41, 46, 34, 10, 45, 118, 32, 45, 32, 49, 44, 50, 53, 44, 49, > 44, 49, 44, 54, 55, 46, 53, 44, 55, 51, 46, 53, 44, 49, 48, 57, > 46, 53, 44, 49, 48, 51, 46, 53, 44, 53, 49, 46, 53, 44, 49, 48, > 48, 46, 53, 44, 51, 44, 49, 44, 36, 123, 49, 45, 57, 125, 44, 51, > 44, 48, 44, 49, 44, 50, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, > 48, 48, 44, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 116, 114, 105, 97, 110, 103, 108, 101, 93, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 118, 111, 108, 117, 109, 101, 51, 100, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 51, 100, 32, > 118, 111, 108, 117, 109, 101, 116, 114, 105, 99, 32, 105, 109, 97, 103, 101, > 115, 32, 97, 115, 32, 51, 100, 32, 112, 97, 114, 97, 108, 108, 101, 108, > 101, 112, 105, 112, 101, 100, 105, 99, 32, 111, 98, 106, 101, 99, 116, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 97, 110, 105, 109, 97, 116, 101, 32, > 98, 108, 117, 114, 44, 48, 44, 53, 44, 51, 48, 32, 45, 97, 32, 122, > 32, 45, 118, 111, 108, 117, 109, 101, 51, 100, 10, 118, 111, 108, 117, 109, > 101, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 84, > 114, 97, 110, 115, 102, 111, 114, 109, 32, 105, 109, 97, 103, 101, 36, 63, > 32, 97, 115, 32, 51, 100, 32, 112, 97, 114, 97, 108, 108, 101, 108, 101, > 112, 105, 112, 101, 100, 105, 99, 32, 111, 98, 106, 101, 99, 116, 115, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 10, 45, 45, 115, 108, 105, > 99, 101, 115, 32, 48, 32, 45, 45, 115, 108, 105, 99, 101, 115, 91, 48, > 93, 32, 49, 48, 48, 37, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 49, 93, 32, 121, 10, 45, 45, 99, 111, 108, 117, 109, 110, 115, 91, 48, > 93, 32, 48, 32, 45, 45, 99, 111, 108, 117, 109, 110, 115, 91, 48, 93, > 32, 49, 48, 48, 37, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 50, 44, 45, 49, 93, 32, 122, 121, 120, 99, 32, 45, 109, 105, 114, 114, > 111, 114, 91, 45, 50, 93, 32, 120, 10, 45, 45, 114, 111, 119, 115, 91, > 48, 93, 32, 48, 32, 45, 45, 114, 111, 119, 115, 91, 48, 93, 32, 49, > 48, 48, 37, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 50, 44, > 45, 49, 93, 32, 120, 122, 121, 99, 32, 45, 109, 105, 114, 114, 111, 114, > 91, 45, 50, 93, 32, 121, 10, 45, 114, 109, 91, 48, 93, 32, 45, 105, > 109, 97, 103, 101, 54, 99, 117, 98, 101, 51, 100, 32, 45, 42, 51, 100, > 32, 36, 119, 44, 36, 104, 44, 36, 100, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 119, 101, 105, 114, 100, 51, 100, 32, 58, 32, 95, 114, 101, 115, > 111, 108, 117, 116, 105, 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 112, 117, 116, 32, 51, 100, 32, 119, 101, 105, 114, > 100, 32, 111, 98, 106, 101, 99, 116, 32, 97, 116, 32, 40, 48, 44, 48, > 44, 48, 41, 44, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 58, 32, 39, 114, 101, 115, 111, 108, 117, 116, > 105, 111, 110, 61, 51, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 45, 119, 101, 105, 114, 100, 51, 100, 32, 52, 56, 32, > 45, 45, 112, 114, 105, 109, 105, 116, 105, 118, 101, 115, 51, 100, 32, 49, > 32, 45, 99, 111, 108, 111, 114, 51, 100, 91, 45, 50, 93, 32, 64, 123, > 45, 82, 71, 66, 125, 10, 119, 101, 105, 114, 100, 51, 100, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 50, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 51, 100, 32, > 119, 101, 105, 114, 100, 32, 111, 98, 106, 101, 99, 116, 44, 32, 119, 105, > 116, 104, 32, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 115, 111, 115, 117, 114, 102, > 97, 99, 101, 51, 100, 32, 34, 39, 92, 10, 84, 32, 61, 32, 49, 46, > 54, 49, 56, 48, 51, 51, 57, 57, 59, 92, 10, 50, 32, 45, 32, 40, > 99, 111, 115, 40, 120, 32, 43, 32, 84, 42, 121, 41, 32, 43, 32, 99, > 111, 115, 40, 120, 32, 45, 32, 84, 42, 121, 41, 32, 43, 32, 99, 111, > 115, 40, 121, 32, 43, 32, 84, 42, 122, 41, 32, 43, 32, 99, 111, 115, > 40, 121, 32, 45, 32, 84, 42, 122, 41, 32, 43, 32, 99, 111, 115, 40, > 122, 32, 45, 32, 84, 42, 120, 41, 32, 43, 32, 99, 111, 115, 40, 122, > 32, 43, 32, 84, 42, 120, 41, 41, 92, 10, 39, 34, 44, 48, 44, 45, > 52, 46, 55, 44, 45, 52, 46, 55, 44, 45, 52, 46, 55, 44, 52, 46, > 55, 44, 52, 46, 55, 44, 52, 46, 55, 44, 36, 49, 44, 36, 49, 44, > 36, 49, 10, 45, 99, 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, > 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 91, 51, 100, > 92, 32, 119, 101, 105, 114, 100, 93, 10, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 58, 32, 80, 114, 111, 103, 114, 97, 109, 32, > 99, 111, 110, 116, 114, 111, 108, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 32, 58, > 32, 34, 99, 111, 109, 109, 97, 110, 100, 34, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 111, 110, 32, 101, 97, 99, 104, 32, 111, 102, 32, 116, 104, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 44, 32, 98, 121, 32, 112, 97, 114, 97, 108, 108, 101, 108, 105, 122, 105, > 110, 103, 32, 105, 116, 32, 102, 111, 114, 32, 97, 108, 108, 32, 105, 109, > 97, 103, 101, 32, 111, 102, 32, 116, 104, 101, 32, 108, 105, 115, 116, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, 112, 112, > 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, 98, 108, > 117, 114, 32, 51, 34, 10, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 69, 120, 101, 99, 117, 116, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, > 39, 36, 42, 39, 32, 111, 110, 32, 97, 108, 108, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 105, 110, 32, 112, 97, 114, 97, 108, 108, 101, 108, 44, > 32, 117, 115, 105, 110, 103, 32, 34, 64, 42, 34, 32, 116, 104, 114, 101, > 97, 100, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 109, 32, 34, 95, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 32, 58, > 32, 36, 42, 34, 10, 99, 111, 109, 109, 97, 110, 100, 49, 61, 34, 34, > 32, 99, 111, 109, 109, 97, 110, 100, 50, 61, 34, 34, 10, 45, 105, 102, > 32, 123, 64, 35, 62, 61, 64, 42, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 42, 32, 45, 105, 102, 32, 36, 62, 32, 99, 111, 109, 109, > 97, 110, 100, 49, 61, 36, 99, 111, 109, 109, 97, 110, 100, 49, 44, 45, > 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 91, > 36, 62, 93, 32, 45, 101, 108, 115, 101, 32, 99, 111, 109, 109, 97, 110, > 100, 49, 61, 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, > 108, 101, 108, 91, 36, 62, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 37, 64, 42, 125, 32, 45, 105, 102, 32, > 36, 62, 32, 99, 111, 109, 109, 97, 110, 100, 50, 61, 36, 99, 111, 109, > 109, 97, 110, 100, 50, 44, 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, > 114, 97, 108, 108, 101, 108, 91, 36, 62, 93, 32, 45, 101, 108, 115, 101, > 32, 99, 111, 109, 109, 97, 110, 100, 50, 61, 45, 95, 97, 112, 112, 108, > 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 91, 36, 62, 93, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 78, 61, 123, 105, > 110, 116, 40, 64, 35, 47, 64, 42, 41, 125, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 78, 32, 45, 108, 91, 123, 64, 42, 42, 36, 62, 125, > 45, 123, 64, 42, 42, 40, 36, 62, 43, 49, 41, 45, 49, 125, 93, 32, > 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 36, 99, 111, 109, 109, 97, > 110, 100, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 78, 61, 123, 64, 35, 37, 64, 42, 125, 32, 45, 105, 102, 32, 36, 78, > 32, 45, 108, 91, 45, 36, 78, 45, 45, 49, 93, 32, 45, 112, 97, 114, > 97, 108, 108, 101, 108, 32, 36, 99, 111, 109, 109, 97, 110, 100, 50, 32, > 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, 117, 110, > 99, 111, 109, 109, 97, 110, 100, 32, 95, 97, 112, 112, 108, 121, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 32, 34, 99, > 111, 109, 109, 97, 110, 100, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 99, 111, 109, 109, 97, 110, 100, 32, 111, 110, 32, 101, 97, 99, 104, > 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 44, 32, 98, 121, 32, 112, 97, 114, 97, > 108, 108, 101, 108, 105, 122, 105, 110, 103, 32, 105, 116, 32, 102, 111, 114, > 32, 97, 108, 108, 32, 99, 104, 97, 110, 110, 101, 108, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 115, 32, 105, 110, 100, 101, 112, > 101, 110, 100, 101, 110, 116, 108, 121, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 98, 108, 117, 114, 32, 51, > 34, 10, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 58, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 69, 120, 101, 99, 117, 116, 101, 32, 99, 111, 109, > 109, 97, 110, 100, 32, 39, 36, 42, 39, 32, 111, 110, 32, 97, 108, 108, > 32, 99, 104, 97, 110, 110, 101, 108, 115, 32, 111, 102, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 105, 110, 32, 112, 97, 114, 97, 108, 108, 101, 108, > 44, 32, 117, 115, 105, 110, 103, 32, 34, 64, 42, 34, 32, 116, 104, 114, > 101, 97, 100, 115, 46, 34, 10, 45, 118, 32, 45, 32, 78, 61, 64, 35, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 32, 115, 36, 62, 61, > 64, 123, 36, 62, 44, 115, 125, 32, 45, 100, 111, 110, 101, 32, 45, 115, > 32, 99, 10, 45, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 32, 34, 36, 49, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 78, 32, 45, 97, 91, 36, 62, 45, 123, 36, 62, 43, 36, 123, 115, > 36, 62, 125, 45, 49, 125, 93, 32, 99, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 112, 112, 108, > 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 32, 58, 32, 34, 99, 111, 109, 109, 97, 110, 100, 34, 44, 111, > 118, 101, 114, 108, 97, 112, 91, 37, 93, 44, 110, 98, 95, 116, 104, 114, > 101, 97, 100, 115, 61, 123, 32, 48, 61, 97, 117, 116, 111, 32, 124, 32, > 49, 32, 124, 32, 50, 32, 124, 32, 52, 32, 124, 32, 56, 32, 124, 32, > 49, 54, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, > 109, 109, 97, 110, 100, 32, 111, 110, 32, 101, 97, 99, 104, 32, 111, 102, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 44, 32, 98, 121, 32, 112, 97, 114, 97, 108, 108, 101, > 108, 105, 122, 105, 110, 103, 32, 105, 116, 32, 111, 110, 32, 39, 110, 98, > 95, 116, 104, 114, 101, 97, 100, 115, 39, 32, 111, 118, 101, 114, 108, 97, > 112, 112, 101, 100, 32, 115, 117, 98, 45, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 110, 98, 95, 116, 104, > 114, 101, 97, 100, 115, 39, 32, 109, 117, 115, 116, 32, 98, 101, 32, 97, > 32, 112, 111, 119, 101, 114, 32, 111, 102, 32, 50, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 111, 118, 101, 114, 108, 97, 112, 61, 48, > 39, 44, 39, 110, 98, 95, 116, 104, 114, 101, 97, 100, 115, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 97, 112, 112, 108, 121, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, > 34, 45, 115, 109, 111, 111, 116, 104, 32, 53, 48, 48, 44, 48, 44, 49, > 34, 44, 49, 54, 10, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, > 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 48, 125, 62, 61, 48, 32, > 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, 61, 48, 125, 41, > 32, 38, 38, 32, 36, 51, 62, 61, 48, 34, 10, 45, 118, 32, 45, 32, > 78, 61, 123, 105, 102, 40, 36, 51, 44, 109, 97, 120, 40, 49, 44, 114, > 111, 117, 110, 100, 40, 36, 51, 41, 41, 44, 64, 42, 41, 125, 32, 78, > 61, 123, 50, 94, 105, 110, 116, 40, 108, 111, 103, 50, 40, 109, 105, 110, > 40, 49, 54, 44, 36, 78, 41, 41, 41, 125, 32, 45, 118, 32, 43, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 112, > 97, 114, 97, 108, 108, 101, 108, 105, 122, 101, 100, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 39, 36, 49, 39, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 118, 101, 114, 108, 97, > 112, 32, 36, 50, 32, 97, 110, 100, 32, 34, 36, 78, 34, 32, 116, 104, > 114, 101, 97, 100, 115, 46, 34, 10, 45, 118, 32, 45, 10, 45, 109, 32, > 34, 95, 99, 104, 101, 99, 107, 49, 32, 58, 32, 45, 105, 102, 32, 123, > 64, 35, 33, 61, 49, 125, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, > 45, 57, 93, 32, 92, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 39, 58, > 32, 83, 112, 101, 99, 105, 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, > 110, 100, 32, 39, 36, 49, 39, 32, 99, 104, 97, 110, 103, 101, 115, 32, > 116, 104, 101, 32, 115, 105, 122, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 115, 116, 97, 99, 107, 46, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 95, 97, 112, 112, 108, 121, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 36, 78, 32, 34, 36, 49, 34, 44, 36, 50, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 45, 117, 110, 99, 111, 109, 109, 97, > 110, 100, 32, 95, 99, 104, 101, 99, 107, 49, 10, 45, 118, 32, 43, 10, > 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, > 111, 118, 101, 114, 108, 97, 112, 49, 32, 58, 10, 36, 49, 10, 95, 97, > 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, > 101, 114, 108, 97, 112, 50, 32, 58, 10, 45, 105, 102, 32, 123, 119, 62, > 61, 104, 125, 10, 111, 118, 120, 61, 123, 114, 111, 117, 110, 100, 40, 105, > 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, > 32, 36, 50, 34, 125, 44, 119, 42, 36, 50, 44, 36, 50, 41, 41, 125, > 32, 119, 50, 61, 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, 10, 45, > 45, 122, 91, 48, 93, 32, 123, 36, 119, 50, 45, 36, 111, 118, 120, 125, > 44, 49, 48, 48, 37, 32, 45, 122, 91, 48, 93, 32, 48, 44, 123, 36, > 119, 50, 43, 36, 111, 118, 120, 45, 49, 125, 10, 45, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 34, 45, 108, 91, 48, 93, 32, 36, 49, 32, 45, > 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, 44, 34, > 45, 108, 91, 49, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, > 49, 32, 45, 101, 110, 100, 108, 34, 10, 45, 122, 91, 48, 93, 32, 48, > 44, 64, 123, 48, 44, 119, 45, 49, 45, 36, 111, 118, 120, 125, 32, 45, > 122, 91, 49, 93, 32, 36, 111, 118, 120, 44, 49, 48, 48, 37, 32, 45, > 97, 32, 120, 10, 45, 101, 108, 115, 101, 10, 111, 118, 121, 61, 123, 114, > 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 32, 36, 50, 34, 125, 44, 104, 42, 36, 50, > 44, 36, 50, 41, 41, 125, 32, 104, 50, 61, 123, 105, 110, 116, 40, 104, > 47, 50, 41, 125, 10, 45, 45, 114, 111, 119, 115, 91, 48, 93, 32, 123, > 36, 104, 50, 45, 36, 111, 118, 121, 125, 44, 49, 48, 48, 37, 32, 45, > 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, 123, 36, 104, 50, 43, 36, > 111, 118, 121, 45, 49, 125, 10, 45, 112, 97, 114, 97, 108, 108, 101, 108, > 32, 34, 45, 108, 91, 48, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, > 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, 44, 34, 45, 108, 91, 49, > 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, > 110, 100, 108, 34, 10, 45, 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, > 64, 123, 48, 44, 104, 45, 49, 45, 36, 111, 118, 121, 125, 32, 45, 114, > 111, 119, 115, 91, 49, 93, 32, 36, 111, 118, 121, 44, 49, 48, 48, 37, > 32, 45, 97, 32, 121, 10, 45, 101, 110, 100, 105, 102, 10, 95, 97, 112, > 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, > 114, 108, 97, 112, 52, 32, 58, 10, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 47, 109, 105, 110, 40, 119, 44, 104, 41, 62, 61, > 51, 125, 10, 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, > 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 50, 32, 34, 45, 95, > 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, > 118, 101, 114, 108, 97, 112, 50, 32, 34, 64, 123, 34, 45, 113, 117, 111, > 116, 101, 32, 36, 49, 34, 125, 34, 44, 36, 50, 34, 44, 36, 50, 10, > 45, 101, 108, 115, 101, 10, 111, 118, 120, 61, 123, 114, 111, 117, 110, 100, > 40, 105, 102, 40, 64, 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 32, 36, 50, 34, 125, 44, 119, 42, 36, 50, 44, 36, 50, 41, > 41, 125, 32, 119, 50, 61, 123, 105, 110, 116, 40, 119, 47, 50, 41, 125, > 10, 111, 118, 121, 61, 123, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, > 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 50, > 34, 125, 44, 104, 42, 36, 50, 44, 36, 50, 41, 41, 125, 32, 104, 50, > 61, 123, 105, 110, 116, 40, 104, 47, 50, 41, 125, 10, 45, 45, 122, 91, > 48, 93, 32, 123, 36, 119, 50, 45, 36, 111, 118, 120, 125, 44, 48, 44, > 49, 48, 48, 37, 44, 123, 36, 104, 50, 43, 36, 111, 118, 121, 45, 49, > 125, 32, 45, 45, 122, 91, 48, 93, 32, 48, 44, 123, 36, 104, 50, 45, > 36, 111, 118, 121, 125, 44, 123, 36, 119, 50, 43, 36, 111, 118, 120, 45, > 49, 125, 44, 49, 48, 48, 37, 10, 45, 45, 122, 91, 48, 93, 32, 123, > 36, 119, 50, 45, 36, 111, 118, 120, 125, 44, 123, 36, 104, 50, 45, 36, > 111, 118, 121, 125, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 122, 91, 48, 93, 32, 48, 44, 48, 44, 123, 36, 119, 50, 43, 36, 111, > 118, 120, 45, 49, 125, 44, 123, 36, 104, 50, 43, 36, 111, 118, 121, 45, > 49, 125, 10, 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, 108, > 91, 48, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, > 45, 101, 110, 100, 108, 34, 44, 34, 45, 108, 91, 49, 93, 32, 36, 49, > 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, > 44, 34, 45, 108, 91, 50, 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, > 99, 107, 49, 32, 45, 101, 110, 100, 108, 34, 44, 34, 45, 108, 91, 51, > 93, 32, 36, 49, 32, 45, 95, 99, 104, 101, 99, 107, 49, 32, 45, 101, > 110, 100, 108, 34, 10, 45, 122, 91, 48, 93, 32, 48, 44, 48, 44, 64, > 123, 48, 44, 119, 45, 49, 45, 36, 111, 118, 120, 125, 44, 64, 123, 48, > 44, 104, 45, 49, 45, 36, 111, 118, 121, 125, 32, 45, 122, 91, 49, 93, > 32, 36, 111, 118, 120, 44, 48, 44, 49, 48, 48, 37, 44, 64, 123, 49, > 44, 104, 45, 49, 45, 36, 111, 118, 121, 125, 10, 45, 122, 91, 50, 93, > 32, 48, 44, 36, 111, 118, 121, 44, 64, 123, 50, 44, 119, 45, 49, 45, > 36, 111, 118, 120, 125, 44, 49, 48, 48, 37, 32, 45, 122, 91, 51, 93, > 32, 36, 111, 118, 120, 44, 36, 111, 118, 121, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 10, 45, 97, 91, 48, 44, 49, 93, 32, 120, 32, 45, > 97, 91, 49, 44, 50, 93, 32, 120, 32, 45, 97, 32, 121, 10, 45, 101, > 110, 100, 105, 102, 10, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, > 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 56, 32, 58, 10, > 45, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, > 95, 111, 118, 101, 114, 108, 97, 112, 50, 32, 34, 45, 95, 97, 112, 112, > 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, > 108, 97, 112, 52, 32, 92, 34, 36, 49, 92, 34, 44, 36, 50, 34, 44, > 36, 50, 10, 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 49, 54, 32, 58, 10, 45, > 95, 97, 112, 112, 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, > 111, 118, 101, 114, 108, 97, 112, 50, 32, 34, 45, 95, 97, 112, 112, 108, > 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 56, 32, 92, 34, 36, 49, 92, 34, 44, 36, 50, 34, 44, 36, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 99, 104, 101, 99, 107, 32, 58, > 32, 101, 120, 112, 114, 101, 115, 115, 105, 111, 110, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 118, 97, 108, 117, > 97, 116, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 101, 120, > 112, 114, 101, 115, 115, 105, 111, 110, 32, 97, 110, 100, 32, 100, 105, 115, > 112, 108, 97, 121, 32, 97, 110, 32, 101, 114, 114, 111, 114, 32, 109, 101, > 115, 115, 97, 103, 101, 32, 105, 102, 32, 101, 118, 97, 108, 117, 97, 116, > 101, 100, 32, 116, 111, 32, 102, 97, 108, 115, 101, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 102, 32, 39, 101, 120, 112, 114, 101, 115, > 115, 105, 111, 110, 39, 32, 105, 115, 32, 110, 111, 116, 32, 101, 118, 97, > 108, 117, 97, 98, 108, 101, 44, 32, 105, 116, 32, 105, 115, 32, 114, 101, > 103, 97, 114, 100, 101, 100, 32, 97, 115, 32, 97, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 32, 97, 110, 100, 32, 99, 104, 101, 99, 107, 101, 100, > 32, 105, 102, 32, 105, 116, 32, 101, 120, 105, 115, 116, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 104, 101, 99, 107, 51, 100, 32, 58, 32, > 95, 105, 115, 95, 102, 117, 108, 108, 95, 99, 104, 101, 99, 107, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 104, 101, 99, 107, 32, 118, 97, > 108, 105, 100, 105, 116, 121, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 51, 100, 32, 118, 101, 99, 116, 111, 114, 32, 111, 98, 106, > 101, 99, 116, 115, 44, 32, 97, 110, 100, 32, 100, 105, 115, 112, 108, 97, > 121, 32, 97, 110, 32, 101, 114, 114, 111, 114, 32, 109, 101, 115, 115, 97, > 103, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 105, 102, 32, 111, > 110, 101, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 32, 105, 115, 32, 110, 111, 116, 32, > 97, 32, 118, 97, 108, 105, 100, 32, 51, 100, 32, 118, 101, 99, 116, 111, > 114, 32, 111, 98, 106, 101, 99, 116, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 70, 117, 108, 108, 32, 51, 100, 32, 111, 98, 106, 101, 99, > 116, 32, 99, 104, 101, 99, 107, 32, 105, 115, 32, 115, 108, 111, 119, 101, > 114, 32, 98, 117, 116, 32, 109, 111, 114, 101, 32, 112, 114, 101, 99, 105, > 115, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 105, 115, 95, > 102, 117, 108, 108, 95, 99, 104, 101, 99, 107, 61, 49, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 111, 110, 116, 105, 110, 117, 101, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 111, > 32, 116, 111, 32, 101, 110, 100, 32, 111, 102, 32, 99, 117, 114, 114, 101, > 110, 116, 32, 98, 108, 111, 99, 107, 32, 39, 114, 101, 112, 101, 97, 116, > 46, 46, 100, 111, 110, 101, 39, 44, 32, 39, 100, 111, 46, 46, 119, 104, > 105, 108, 101, 39, 32, 111, 114, 32, 39, 108, 111, 99, 97, 108, 46, 46, > 101, 110, 100, 108, 111, 99, 97, 108, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 49, 48, 32, 45, 98, 108, 117, 114, > 32, 49, 32, 45, 105, 102, 32, 123, 49, 61, 61, 49, 125, 32, 45, 99, > 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 32, 45, > 100, 101, 102, 111, 114, 109, 32, 49, 48, 32, 45, 100, 111, 110, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 98, 114, 101, 97, 107, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 114, 101, 97, > 107, 32, 99, 117, 114, 114, 101, 110, 116, 32, 39, 114, 101, 112, 101, 97, > 116, 46, 46, 100, 111, 110, 101, 39, 44, 32, 39, 100, 111, 46, 46, 119, > 104, 105, 108, 101, 39, 32, 111, 114, 32, 39, 108, 111, 99, 97, 108, 46, > 46, 101, 110, 100, 108, 111, 99, 97, 108, 39, 32, 98, 108, 111, 99, 107, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 48, 32, 45, 98, 108, 117, 114, 32, 49, 32, 45, 105, 102, 32, 123, 49, > 61, 61, 49, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 101, 102, 111, 114, 109, 32, 49, 48, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 100, 111, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, > 114, 116, 32, 97, 32, 39, 100, 111, 46, 46, 119, 104, 105, 108, 101, 39, > 32, 98, 108, 111, 99, 107, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 32, 105, 61, 123, 105, 97, 43, 50, 125, > 32, 45, 100, 111, 32, 45, 115, 101, 116, 32, 50, 53, 53, 44, 123, 63, > 40, 49, 48, 48, 41, 125, 37, 44, 123, 63, 40, 49, 48, 48, 41, 125, > 37, 32, 45, 119, 104, 105, 108, 101, 32, 123, 105, 97, 60, 36, 105, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 100, 111, 110, 101, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 110, 100, 32, > 97, 32, 39, 114, 101, 112, 101, 97, 116, 46, 46, 100, 111, 110, 101, 39, > 32, 98, 108, 111, 99, 107, 44, 32, 97, 110, 100, 32, 103, 111, 32, 116, > 111, 32, 97, 115, 115, 111, 99, 105, 97, 116, 101, 100, 32, 39, 45, 114, > 101, 112, 101, 97, 116, 39, 32, 112, 111, 115, 105, 116, 105, 111, 110, 44, > 32, 105, 102, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 114, > 101, 109, 97, 105, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, > 105, 102, 32, 58, 32, 98, 111, 111, 108, 101, 97, 110, 32, 58, 32, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, 114, 116, 32, 97, 32, 39, > 101, 108, 105, 102, 46, 46, 91, 101, 108, 115, 101, 93, 46, 46, 101, 110, > 100, 105, 102, 39, 32, 98, 108, 111, 99, 107, 32, 105, 102, 32, 112, 114, > 101, 118, 105, 111, 117, 115, 32, 39, 45, 105, 102, 39, 32, 119, 97, 115, > 32, 110, 111, 116, 32, 118, 101, 114, 105, 102, 105, 101, 100, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 97, 110, 100, 32, 116, 101, 115, 116, 32, > 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 111, 111, > 108, 101, 97, 110, 32, 105, 115, 32, 116, 114, 117, 101, 44, 32, 111, 114, > 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 32, 101, 120, 105, 115, 116, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 111, 108, 101, 97, 110, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 97, 32, 102, 108, 111, 97, 116, > 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 110, 100, 105, 110, 103, > 32, 102, 111, 114, 32, 123, 32, 48, 61, 102, 97, 108, 115, 101, 32, 124, > 32, 111, 116, 104, 101, 114, 61, 116, 114, 117, 101, 32, 125, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 101, 108, 115, 101, 32, 58, 32, 40, 42, 41, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, 101, 99, 117, 116, > 101, 32, 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 32, 105, 102, 32, 112, 114, 101, 118, 105, 111, 117, 115, > 32, 39, 45, 105, 102, 39, 32, 111, 114, 32, 39, 45, 101, 108, 105, 102, > 39, 32, 99, 111, 110, 100, 105, 116, 105, 111, 110, 115, 32, 102, 97, 105, > 108, 101, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 101, 110, 100, 105, > 102, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 69, 110, 100, 32, 97, 32, 39, 105, 102, 46, 46, 91, 101, 108, 105, > 102, 93, 46, 46, 91, 101, 108, 115, 101, 93, 46, 46, 101, 110, 100, 105, > 102, 39, 32, 98, 108, 111, 99, 107, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 101, 110, 100, 108, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 101, 110, 100, 108, 111, 99, 97, 108, 39, 46, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 101, 110, 100, 108, 111, 99, 97, > 108, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 69, 110, 100, 32, 97, 32, 39, 108, 111, 99, 97, 108, 46, 46, 101, > 110, 100, 108, 111, 99, 97, 108, 39, 32, 98, 108, 111, 99, 107, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, 111, > 32, 39, 45, 101, 110, 100, 108, 39, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 101, 114, 114, 111, 114, 32, 58, 32, 109, 101, 115, 115, 97, 103, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 101, 114, 114, 111, 114, 32, 109, 101, 115, 115, 97, 103, 101, 32, 111, > 110, 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 101, > 114, 114, 111, 114, 32, 40, 115, 116, 100, 101, 114, 114, 41, 32, 97, 110, > 100, 32, 101, 120, 105, 116, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, > 101, 114, 44, 32, 101, 120, 99, 101, 112, 116, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 105, 102, 32, 101, 114, 114, 111, 114, 32, 105, 115, 32, > 99, 97, 117, 103, 104, 116, 32, 98, 121, 32, 97, 32, 39, 45, 111, 110, > 102, 97, 105, 108, 39, 32, 99, 111, 109, 109, 97, 110, 100, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 109, 97, 110, 100, 32, > 115, 117, 98, 115, 101, 116, 32, 40, 105, 102, 32, 97, 110, 121, 41, 32, > 115, 116, 97, 110, 100, 115, 32, 102, 111, 114, 32, 100, 105, 115, 112, 108, > 97, 121, 101, 100, 32, 115, 99, 111, 112, 101, 32, 105, 110, 100, 105, 99, > 101, 115, 32, 105, 110, 115, 116, 101, 97, 100, 32, 111, 102, 32, 105, 109, > 97, 103, 101, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, > 45, 101, 120, 101, 99, 39, 46, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 101, 120, 101, 99, 32, 58, 32, 99, 111, 109, 109, > 97, 110, 100, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 69, 120, 101, 99, 117, 116, 101, 32, 101, 120, 116, 101, 114, > 110, 97, 108, 32, 99, 111, 109, 109, 97, 110, 100, 32, 117, 115, 105, 110, > 103, 32, 97, 32, 115, 121, 115, 116, 101, 109, 32, 99, 97, 108, 108, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, 32, 115, 116, > 97, 116, 117, 115, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 116, 104, > 101, 110, 32, 115, 101, 116, 32, 116, 111, 32, 116, 104, 101, 32, 101, 114, > 114, 111, 114, 32, 99, 111, 100, 101, 32, 114, 101, 116, 117, 114, 110, 101, > 100, 32, 98, 121, 32, 116, 104, 101, 32, 115, 121, 115, 116, 101, 109, 32, > 99, 97, 108, 108, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 101, 113, 46, 32, 116, 111, 32, 39, 45, 120, 39, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 105, 102, 32, 58, 32, 98, 111, 111, 108, 101, 97, > 110, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 40, > 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, 114, > 116, 32, 97, 32, 39, 105, 102, 46, 46, 91, 101, 108, 105, 102, 93, 46, > 46, 91, 101, 108, 115, 101, 93, 46, 46, 101, 110, 100, 105, 102, 39, 32, > 98, 108, 111, 99, 107, 32, 97, 110, 100, 32, 116, 101, 115, 116, 32, 105, > 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 111, 111, 108, > 101, 97, 110, 32, 105, 115, 32, 116, 114, 117, 101, 44, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 111, 114, 32, 105, 102, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 101, > 120, 105, 115, 116, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 39, 98, 111, 111, 108, 101, 97, 110, 39, 32, 99, 97, 110, 32, 98, 101, > 32, 97, 32, 102, 108, 111, 97, 116, 32, 110, 117, 109, 98, 101, 114, 32, > 115, 116, 97, 110, 100, 105, 110, 103, 32, 102, 111, 114, 32, 123, 32, 48, > 61, 102, 97, 108, 115, 101, 32, 124, 32, 111, 116, 104, 101, 114, 61, 116, > 114, 117, 101, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 105, 102, 32, > 123, 105, 97, 60, 54, 52, 125, 32, 45, 97, 100, 100, 32, 53, 48, 37, > 32, 45, 101, 108, 105, 102, 32, 123, 105, 97, 60, 49, 50, 56, 125, 32, > 45, 97, 100, 100, 32, 50, 53, 37, 32, 45, 101, 108, 105, 102, 32, 123, > 105, 97, 60, 49, 57, 50, 125, 32, 45, 115, 117, 98, 32, 50, 53, 37, > 32, 45, 101, 108, 115, 101, 32, 45, 115, 117, 98, 32, 53, 48, 37, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, > 53, 10, 35, 64, 103, 109, 105, 99, 32, 108, 32, 58, 32, 101, 113, 46, > 32, 116, 111, 32, 39, 45, 108, 111, 99, 97, 108, 39, 46, 32, 58, 32, > 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 108, 111, 99, 97, 108, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 83, 116, 97, 114, 116, 32, 97, 32, 39, 108, 111, 99, 97, 108, 46, 46, > 91, 111, 110, 102, 97, 105, 108, 93, 46, 46, 101, 110, 100, 108, 111, 99, > 97, 108, 39, 32, 98, 108, 111, 99, 107, 44, 32, 119, 105, 116, 104, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, 46, 32, 116, > 111, 32, 39, 45, 108, 39, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 108, > 111, 99, 97, 108, 91, 93, 32, 51, 48, 48, 44, 51, 48, 48, 44, 49, > 44, 51, 32, 45, 114, 97, 110, 100, 91, 48, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 98, 108, 117, 114, 32, 52, 32, 45, 115, 104, 97, 114, 112, > 101, 110, 32, 49, 48, 48, 48, 32, 45, 101, 110, 100, 108, 111, 99, 97, > 108, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 111, 99, 97, 108, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, 100, 101, 102, 111, 114, 109, > 32, 50, 48, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 111, > 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 109, 117, 116, 101, 120, > 32, 58, 32, 105, 110, 100, 105, 99, 101, 44, 95, 97, 99, 116, 105, 111, > 110, 61, 123, 32, 48, 61, 117, 110, 108, 111, 99, 107, 32, 124, 32, 49, > 61, 108, 111, 99, 107, 32, 125, 32, 58, 32, 40, 42, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 76, 111, 99, 107, 32, 111, 114, 32, 117, > 110, 108, 111, 99, 107, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 109, 117, 116, 101, 120, 32, 102, 111, 114, 32, 109, 117, 108, 116, 105, 45, > 116, 104, 114, 101, 97, 100, 101, 100, 32, 112, 114, 111, 103, 114, 97, 109, > 109, 105, 110, 103, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 32, 108, 111, 99, 107, 101, 100, 32, 109, 117, 116, 101, 120, 32, 99, 97, > 110, 32, 98, 101, 32, 117, 110, 108, 111, 99, 107, 101, 100, 32, 111, 110, > 108, 121, 32, 98, 121, 32, 116, 104, 101, 32, 115, 97, 109, 101, 32, 116, > 104, 114, 101, 97, 100, 46, 32, 65, 108, 108, 32, 109, 117, 116, 101, 120, > 101, 115, 32, 97, 114, 101, 32, 117, 110, 108, 111, 99, 107, 101, 100, 32, > 98, 121, 32, 100, 101, 102, 97, 117, 108, 116, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 39, 105, 110, 100, 105, 99, 101, 39, 32, 100, 101, > 115, 105, 103, 110, 97, 116, 101, 115, 32, 116, 104, 101, 32, 109, 117, 116, > 101, 120, 32, 105, 110, 100, 105, 99, 101, 44, 32, 105, 110, 32, 91, 48, > 44, 50, 53, 53, 93, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 97, 99, 116, 105, 111, 110, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 111, 110, 102, 97, 105, 108, 32, 58, 32, 40, 42, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, 101, 99, 117, 116, 101, 32, > 102, 111, 108, 108, 111, 119, 105, 110, 103, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 32, 119, 104, 101, 110, 32, 97, 110, 32, 101, 114, 114, 111, 114, > 32, 105, 115, 32, 101, 110, 99, 111, 117, 110, 116, 101, 114, 101, 100, 32, > 105, 110, 32, 116, 104, 101, 32, 98, 111, 100, 121, 32, 111, 102, 32, 116, > 104, 101, 32, 39, 108, 111, 99, 97, 108, 46, 46, 101, 110, 100, 108, 111, > 99, 97, 108, 39, 32, 98, 108, 111, 99, 107, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 84, 104, 101, 32, 115, 116, 97, 116, 117, 115, 32, > 118, 97, 108, 117, 101, 32, 105, 115, 32, 115, 101, 116, 32, 119, 105, 116, > 104, 32, 116, 104, 101, 32, 99, 111, 114, 114, 101, 115, 112, 111, 110, 100, > 105, 110, 103, 32, 101, 114, 114, 111, 114, 32, 109, 101, 115, 115, 97, 103, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 111, 99, 97, 108, 32, > 45, 98, 108, 117, 114, 32, 45, 51, 32, 45, 111, 110, 102, 97, 105, 108, > 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 108, > 111, 99, 97, 108, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 58, 32, 95, 119, 97, 105, 116, 95, 116, 104, 114, > 101, 97, 100, 115, 44, 34, 99, 111, 109, 109, 97, 110, 100, 49, 34, 44, > 34, 99, 111, 109, 109, 97, 110, 100, 50, 34, 44, 46, 46, 46, 32, 58, > 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 69, 120, > 101, 99, 117, 116, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 99, 111, 109, 109, 97, 110, 100, 115, 32, 105, 110, 32, 112, 97, 114, 97, > 108, 108, 101, 108, 44, 32, 101, 97, 99, 104, 32, 105, 110, 32, 97, 32, > 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 116, 104, 114, 101, 97, 100, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 108, 108, 32, 114, > 117, 110, 110, 105, 110, 103, 32, 116, 104, 114, 101, 97, 100, 115, 32, 115, > 104, 97, 114, 101, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 108, 105, 115, 116, 32, 111, 102, 32, 105, 109, 97, 103, 101, 115, 32, > 97, 110, 100, 32, 116, 104, 101, 32, 103, 108, 111, 98, 97, 108, 32, 118, > 97, 114, 105, 97, 98, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 39, 119, 97, 105, 116, 95, 116, 104, 114, 101, 97, 100, 115, > 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 48, 61, 110, 101, 118, > 101, 114, 32, 124, 32, 49, 61, 119, 104, 101, 110, 32, 112, 114, 111, 99, > 101, 115, 115, 32, 114, 101, 116, 117, 114, 110, 115, 32, 124, 32, 50, 61, > 119, 104, 101, 110, 32, 99, 111, 109, 109, 97, 110, 100, 32, 114, 101, 116, > 117, 114, 110, 115, 32, 124, 32, 51, 61, 105, 109, 109, 101, 100, 105, 97, > 116, 101, 108, 121, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 119, 97, 105, 116, 95, 116, 104, 114, 101, 97, 100, 115, 61, 51, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 91, 48, 93, 32, 45, 112, 97, 114, 97, > 108, 108, 101, 108, 32, 34, 45, 98, 108, 117, 114, 91, 48, 93, 32, 51, > 34, 44, 34, 45, 109, 105, 114, 114, 111, 114, 91, 49, 93, 32, 99, 34, > 10, 112, 97, 114, 97, 108, 108, 101, 108, 32, 58, 10, 45, 105, 102, 32, > 123, 36, 49, 61, 61, 48, 124, 124, 36, 49, 61, 61, 49, 124, 124, 36, > 49, 61, 61, 50, 125, 32, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, > 69, 120, 101, 99, 117, 116, 101, 32, 34, 123, 36, 35, 45, 49, 125, 34, > 32, 99, 111, 109, 109, 97, 110, 100, 115, 32, 39, 36, 123, 50, 45, 45, > 49, 125, 39, 32, 105, 110, 32, 112, 97, 114, 97, 108, 108, 101, 108, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 101, 108, > 115, 101, 32, 45, 101, 91, 48, 45, 45, 51, 93, 32, 34, 69, 120, 101, > 99, 117, 116, 101, 32, 34, 36, 35, 34, 32, 99, 111, 109, 109, 97, 110, > 100, 115, 32, 39, 36, 42, 39, 32, 105, 110, 32, 112, 97, 114, 97, 108, > 108, 101, 108, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 112, 97, > 114, 97, 108, 108, 101, 108, 32, 36, 34, 42, 34, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 114, 111, 103, 114, 101, 115, 115, > 32, 58, 32, 48, 60, 61, 118, 97, 108, 117, 101, 60, 61, 49, 48, 48, > 32, 58, 32, 45, 49, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 83, 101, 116, 32, 116, 104, 101, 32, 112, 114, 111, > 103, 114, 101, 115, 115, 32, 105, 110, 100, 105, 99, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, 110, 101, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, 99, > 111, 109, 109, 97, 110, 100, 32, 105, 115, 32, 117, 115, 101, 102, 117, 108, > 32, 111, 110, 108, 121, 32, 119, 104, 101, 110, 32, 71, 39, 77, 73, 67, > 32, 105, 115, 32, 117, 115, 101, 100, 32, 98, 121, 32, 97, 110, 32, 101, > 109, 98, 101, 100, 100, 105, 110, 103, 32, 97, 112, 112, 108, 105, 99, 97, > 116, 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 113, 32, 58, > 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 113, 117, 105, 116, 39, 46, > 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, > 105, 116, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 81, 117, 105, 116, 32, 105, 110, 116, 101, 114, 112, 114, 101, 116, > 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 113, 39, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 114, 101, 112, 101, 97, 116, 32, 58, 32, 110, 98, 95, 105, > 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 58, 32, 40, 42, 41, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 116, 97, 114, 116, 32, 105, > 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 111, 102, 32, 97, 32, 39, > 114, 101, 112, 101, 97, 116, 46, 46, 100, 111, 110, 101, 39, 32, 98, 108, > 111, 99, 107, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 112, 108, 105, 116, > 32, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, > 104, 105, 102, 116, 91, 36, 62, 93, 32, 36, 60, 44, 48, 44, 48, 44, > 48, 44, 50, 32, 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, > 100, 32, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 109, 111, 100, 101, 51, 100, > 32, 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, 32, 45, 105, 109, > 97, 103, 101, 99, 117, 98, 101, 51, 100, 32, 45, 114, 111, 116, 97, 116, > 101, 51, 100, 32, 49, 44, 49, 44, 48, 44, 52, 48, 32, 45, 115, 110, > 97, 112, 115, 104, 111, 116, 51, 100, 32, 52, 48, 48, 44, 49, 46, 52, > 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, > 116, 117, 114, 110, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 102, 114, 111, 109, 32, > 99, 117, 114, 114, 101, 110, 116, 32, 99, 117, 115, 116, 111, 109, 32, 99, > 111, 109, 109, 97, 110, 100, 46, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 112, 114, 111, 103, 114, 101, 115, 115, 32, 58, 32, 48, 60, 61, 118, 97, > 108, 117, 101, 60, 61, 49, 48, 48, 32, 124, 32, 45, 49, 32, 124, 32, > 34, 99, 111, 109, 109, 97, 110, 100, 34, 44, 48, 60, 61, 118, 97, 108, > 117, 101, 95, 109, 105, 110, 60, 61, 49, 48, 48, 44, 48, 60, 61, 118, > 97, 108, 117, 101, 95, 109, 97, 120, 60, 61, 49, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 116, 104, 101, 32, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 105, 110, 100, 105, 99, 101, 32, 111, > 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 112, 114, > 111, 99, 101, 115, 115, 105, 110, 103, 32, 112, 105, 112, 101, 108, 105, 110, > 101, 32, 40, 114, 101, 108, 97, 116, 105, 118, 101, 108, 121, 32, 116, 111, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 112, 114, 101, 118, 105, 111, > 117, 115, 108, 121, 32, 100, 101, 102, 105, 110, 101, 100, 32, 112, 114, 111, > 103, 114, 101, 115, 115, 32, 98, 111, 117, 110, 100, 115, 41, 44, 32, 111, > 114, 32, 99, 97, 108, 108, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 99, 111, 109, 109, 97, 110, 100, 32, 119, 105, 116, > 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 112, 114, 111, 103, 114, 101, 115, 115, 32, 98, 111, > 117, 110, 100, 115, 46, 10, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 34, 34, 125, 10, > 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, > 36, 95, 112, 114, 111, 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, > 115, 41, 125, 32, 95, 112, 114, 111, 103, 114, 101, 115, 115, 95, 98, 111, > 117, 110, 100, 115, 61, 48, 44, 49, 48, 48, 32, 45, 101, 110, 100, 105, > 102, 10, 109, 61, 123, 97, 114, 103, 40, 45, 50, 44, 36, 95, 112, 114, > 111, 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 41, 125, 32, > 77, 61, 123, 97, 114, 103, 40, 45, 49, 44, 36, 95, 112, 114, 111, 103, > 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 41, 125, 10, 45, 105, > 102, 32, 123, 36, 35, 61, 61, 50, 38, 38, 33, 110, 97, 114, 103, 40, > 36, 50, 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 83, 101, 116, 32, 114, 101, 108, 97, 116, 105, 118, 101, > 32, 112, 114, 111, 103, 114, 101, 115, 115, 32, 105, 110, 100, 105, 99, 101, > 32, 116, 111, 32, 36, 49, 37, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 105, 102, 40, 36, 49, 60, > 48, 44, 45, 49, 44, 109, 105, 110, 40, 49, 48, 48, 44, 109, 97, 120, > 40, 48, 44, 36, 109, 43, 40, 36, 77, 45, 36, 109, 41, 42, 36, 49, > 37, 41, 41, 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 35, 61, > 61, 51, 125, 10, 110, 109, 61, 123, 109, 105, 110, 40, 36, 50, 44, 36, > 45, 49, 41, 125, 32, 110, 77, 61, 123, 109, 97, 120, 40, 36, 50, 44, > 36, 45, 49, 41, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, > 45, 51, 93, 32, 34, 67, 97, 108, 108, 32, 99, 111, 109, 109, 97, 110, > 100, 32, 39, 36, 49, 39, 32, 119, 105, 116, 104, 32, 112, 114, 111, 103, > 114, 101, 115, 115, 32, 98, 111, 117, 110, 100, 115, 32, 91, 34, 36, 110, > 109, 44, 36, 110, 77, 34, 93, 46, 34, 32, 45, 118, 32, 45, 10, 45, > 112, 114, 111, 103, 114, 101, 115, 115, 32, 36, 109, 32, 95, 112, 114, 111, > 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 61, 36, 95, 112, > 114, 111, 103, 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 44, 123, > 36, 109, 43, 36, 110, 109, 42, 40, 36, 77, 45, 36, 109, 41, 47, 49, > 48, 48, 125, 44, 123, 36, 109, 43, 36, 110, 77, 42, 40, 36, 77, 45, > 36, 109, 41, 47, 49, 48, 48, 125, 10, 45, 95, 114, 112, 114, 111, 103, > 114, 101, 115, 115, 32, 34, 36, 49, 34, 10, 45, 112, 114, 111, 103, 114, > 101, 115, 115, 32, 36, 77, 32, 40, 36, 95, 112, 114, 111, 103, 114, 101, > 115, 115, 95, 98, 111, 117, 110, 100, 115, 41, 32, 95, 112, 114, 111, 103, > 114, 101, 115, 115, 95, 98, 111, 117, 110, 100, 115, 61, 64, 123, 45, 49, > 44, 48, 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 91, 48, 45, 45, 51, > 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 114, 112, 114, > 111, 103, 114, 101, 115, 115, 39, 58, 32, 73, 110, 118, 97, 108, 105, 100, > 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 39, 36, 42, 39, 46, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 95, 114, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 58, 32, 36, 42, 10, 35, 64, 103, > 109, 105, 99, 32, 115, 107, 105, 112, 32, 58, 32, 105, 116, 101, 109, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 111, 32, 110, 111, 116, 104, 105, 110, 103, 32, 98, 117, 116, 32, 115, 107, > 105, 112, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 105, 116, 101, > 109, 46, 10, 35, 64, 103, 109, 105, 99, 32, 117, 32, 58, 32, 101, 113, > 46, 32, 116, 111, 32, 39, 45, 115, 116, 97, 116, 117, 115, 39, 46, 32, > 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, > 116, 117, 115, 32, 58, 32, 118, 97, 108, 117, 101, 32, 58, 32, 40, 42, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 101, 116, 32, 99, > 117, 114, 114, 101, 110, 116, 32, 115, 116, 97, 116, 117, 115, 32, 118, 97, > 108, 117, 101, 46, 32, 85, 115, 101, 100, 32, 116, 111, 32, 100, 101, 102, > 105, 110, 101, 32, 97, 32, 114, 101, 116, 117, 114, 110, 105, 110, 103, 32, > 118, 97, 108, 117, 101, 32, 105, 110, 32, 97, 32, 102, 117, 110, 99, 116, > 105, 111, 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 101, > 113, 46, 32, 116, 111, 32, 39, 45, 117, 39, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 99, 111, 109, 109, 97, 110, 100, 32, 34, 102, 111, 111, 32, > 58, 32, 117, 48, 61, 68, 97, 114, 107, 32, 117, 49, 61, 66, 114, 105, > 103, 104, 116, 32, 45, 115, 116, 97, 116, 117, 115, 32, 36, 123, 117, 123, > 105, 97, 62, 61, 49, 50, 56, 125, 125, 34, 32, 45, 116, 101, 120, 116, > 95, 111, 117, 116, 108, 105, 110, 101, 32, 64, 123, 45, 102, 111, 111, 125, > 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, 53, 10, > 35, 64, 103, 109, 105, 99, 32, 119, 104, 105, 108, 101, 32, 58, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, > 101, 32, 58, 32, 40, 42, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 69, 110, 100, 32, 97, 32, 39, 100, 111, 46, 46, 119, 104, 105, 108, > 101, 39, 32, 98, 108, 111, 99, 107, 32, 97, 110, 100, 32, 103, 111, 32, > 98, 97, 99, 107, 32, 116, 111, 32, 97, 115, 115, 111, 99, 105, 97, 116, > 101, 100, 32, 39, 45, 100, 111, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, > 111, 111, 108, 101, 97, 110, 32, 105, 115, 32, 116, 114, 117, 101, 32, 111, > 114, 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 101, 120, 105, 115, 116, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 98, 111, 111, 108, 101, 97, > 110, 39, 32, 99, 97, 110, 32, 98, 101, 32, 97, 32, 102, 108, 111, 97, > 116, 32, 110, 117, 109, 98, 101, 114, 32, 115, 116, 97, 110, 100, 105, 110, > 103, 32, 102, 111, 114, 32, 123, 32, 48, 61, 102, 97, 108, 115, 101, 32, > 124, 32, 111, 116, 104, 101, 114, 61, 116, 114, 117, 101, 32, 125, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 65, 114, 114, 97, 121, 115, > 44, 32, 116, 105, 108, 101, 115, 32, 97, 110, 100, 32, 102, 114, 97, 109, > 101, 115, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 114, 97, 121, 32, > 58, 32, 77, 62, 48, 44, 95, 78, 62, 48, 44, 95, 101, 120, 112, 97, > 110, 100, 95, 116, 121, 112, 101, 61, 123, 32, 48, 61, 109, 105, 110, 32, > 124, 32, 49, 61, 109, 97, 120, 32, 124, 32, 50, 61, 97, 108, 108, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, > 101, 32, 77, 120, 78, 32, 97, 114, 114, 97, 121, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 78, 61, 77, 39, > 32, 97, 110, 100, 32, 39, 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, > 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 114, 114, 97, > 121, 32, 51, 44, 50, 44, 50, 10, 97, 114, 114, 97, 121, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, > 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, 105, 115, 105, > 110, 116, 40, 36, 123, 50, 61, 36, 49, 125, 41, 32, 38, 38, 32, 36, > 50, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, > 101, 32, 36, 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 32, 102, 114, > 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 101, 120, 112, 97, 110, 100, 32, 116, 121, 112, 101, 32, 36, 51, 46, > 34, 10, 45, 118, 32, 45, 32, 114, 48, 61, 123, 49, 48, 48, 47, 109, > 97, 120, 40, 36, 49, 44, 36, 50, 41, 125, 32, 114, 49, 61, 123, 49, > 48, 48, 47, 109, 105, 110, 40, 36, 49, 44, 36, 50, 41, 125, 32, 114, > 50, 61, 49, 48, 48, 10, 45, 114, 32, 36, 123, 114, 36, 51, 125, 37, > 44, 36, 123, 114, 36, 51, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 50, 32, 45, 114, 32, 123, 36, 49, 42, 49, 48, 48, 125, 37, 44, 123, > 36, 50, 42, 49, 48, 48, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 97, 114, 114, 97, 121, 95, 102, 97, 100, 101, 32, 58, 32, 77, 62, 48, > 44, 95, 78, 62, 48, 44, 48, 60, 61, 95, 102, 97, 100, 101, 95, 115, > 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 102, 97, > 100, 101, 95, 101, 110, 100, 60, 61, 49, 48, 48, 44, 95, 101, 120, 112, > 97, 110, 100, 95, 116, 121, 112, 101, 61, 123, 48, 61, 109, 105, 110, 32, > 124, 32, 49, 61, 109, 97, 120, 32, 124, 32, 50, 61, 97, 108, 108, 125, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, > 32, 77, 120, 78, 32, 97, 114, 114, 97, 121, 32, 102, 114, 111, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 78, 61, 77, 39, 44, > 32, 39, 102, 97, 100, 101, 95, 115, 116, 97, 114, 116, 61, 54, 48, 39, > 44, 32, 39, 102, 97, 100, 101, 95, 101, 110, 100, 61, 57, 48, 39, 32, > 97, 110, 100, 32, 39, 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, 101, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 97, 114, 114, 97, 121, > 95, 102, 97, 100, 101, 32, 51, 44, 50, 10, 97, 114, 114, 97, 121, 95, > 102, 97, 100, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 36, 49, 125, 44, 36, 123, 51, 61, 54, 48, 125, 44, 36, 123, 52, > 61, 57, 48, 125, 44, 36, 123, 53, 61, 49, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 36, 49, 120, 36, > 50, 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 40, 36, 51, 37, 44, > 36, 52, 37, 41, 32, 102, 97, 100, 101, 100, 32, 116, 105, 108, 101, 115, > 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 101, 120, 112, 97, 110, 100, 32, 116, 121, 112, 101, 32, > 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 91, 45, 49, 93, > 32, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 53, 48, 37, 44, > 53, 48, 37, 44, 49, 44, 49, 44, 50, 32, 45, 102, 97, 100, 101, 95, > 100, 105, 97, 109, 111, 110, 100, 32, 36, 51, 44, 36, 52, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 97, 114, 114, 97, 121, > 32, 36, 49, 44, 36, 50, 44, 36, 53, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, > 111, 114, 32, 58, 32, 78, 62, 61, 48, 44, 95, 100, 105, 114, 61, 123, > 32, 48, 61, 120, 32, 124, 32, 49, 61, 121, 32, 124, 32, 50, 61, 120, > 121, 32, 124, 32, 51, 61, 116, 114, 105, 45, 120, 121, 32, 125, 44, 95, > 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, 101, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 114, 101, 97, 116, 101, 32, 50, 94, 78, 120, 50, 94, 78, 32, 97, 114, > 114, 97, 121, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 100, 105, 114, 61, 50, 39, 32, 97, 110, 100, 32, 39, > 101, 120, 112, 97, 110, 100, 95, 116, 121, 112, 101, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, > 111, 114, 32, 50, 10, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, 111, > 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 50, 125, > 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 114, 101, 97, 116, 101, 32, 97, 32, 50, 94, 36, 49, 120, 50, > 94, 36, 49, 32, 109, 105, 114, 114, 111, 114, 101, 100, 45, 97, 114, 114, > 97, 121, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 101, 120, 112, 97, 110, 100, 32, 116, 121, 112, > 101, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 49, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, > 48, 125, 10, 45, 105, 102, 32, 123, 36, 50, 62, 61, 51, 125, 32, 45, > 114, 32, 51, 51, 37, 44, 51, 51, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 50, 10, 45, 101, 108, 115, 101, 32, 45, 114, 32, 53, > 48, 37, 44, 53, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 50, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, 125, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 97, 32, 120, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 49, 125, 32, 45, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, 32, 121, 10, 45, 101, 108, > 115, 101, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 97, > 32, 120, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 97, > 32, 121, 32, 45, 105, 102, 32, 123, 36, 50, 61, 61, 51, 125, 32, 45, > 114, 32, 49, 53, 48, 37, 44, 49, 53, 48, 37, 44, 49, 44, 49, 48, > 48, 37, 44, 48, 44, 50, 44, 49, 44, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 97, 114, 114, 97, 121, 95, 114, 97, 110, > 100, 111, 109, 32, 58, 32, 77, 115, 62, 48, 44, 95, 78, 115, 62, 48, > 44, 95, 77, 100, 62, 48, 44, 95, 78, 100, 62, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 77, 100, 120, > 78, 100, 32, 97, 114, 114, 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, > 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 77, 115, 120, 78, 115, 32, 115, 111, 117, 114, 99, 101, 32, 97, 114, 114, > 97, 121, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 78, > 115, 61, 77, 115, 39, 44, 32, 39, 77, 100, 61, 77, 115, 39, 32, 97, > 110, 100, 32, 39, 78, 100, 61, 78, 115, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 97, 114, 114, 97, 121, 95, 114, 97, 110, 100, 111, 109, 32, > 56, 44, 56, 44, 49, 53, 44, 49, 48, 10, 97, 114, 114, 97, 121, 95, > 114, 97, 110, 100, 111, 109, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 36, 49, 125, 44, 36, > 123, 52, 61, 36, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 67, 114, 101, 97, 116, 101, 32, 36, 51, 120, 36, 52, 32, 97, 114, 114, > 97, 121, 32, 111, 102, 32, 116, 105, 108, 101, 115, 32, 102, 114, 111, 109, > 32, 36, 49, 120, 36, 50, 32, 97, 114, 114, 97, 121, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, > 125, 10, 45, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, > 49, 44, 36, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 52, 32, 91, 123, 63, 40, 36, > 49, 42, 36, 50, 45, 49, 41, 125, 93, 32, 45, 100, 111, 110, 101, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 45, 123, 36, 49, 42, > 36, 50, 45, 49, 125, 93, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 36, 51, 44, 36, 52, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, > 109, 101, 32, 58, 32, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 114, > 97, 109, 101, 95, 120, 121, 39, 46, 10, 102, 114, 97, 109, 101, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 61, 48, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 50, 53, 53, 125, 44, 36, 123, 52, > 61, 36, 51, 125, 44, 36, 123, 53, 61, 36, 52, 125, 44, 36, 123, 54, > 61, 50, 53, 53, 125, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, > 63, 34, 32, 45, 118, 32, 43, 10, 45, 95, 102, 114, 97, 109, 101, 95, > 120, 121, 32, 36, 123, 49, 45, 45, 49, 125, 10, 35, 64, 103, 109, 105, > 99, 32, 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, 32, 58, 32, 95, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, 48, 44, 95, 115, 105, 122, > 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 44, 95, 115, 104, 97, 100, 105, 110, 103, 44, 95, 98, 108, 117, 114, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, 32, 82, 71, > 66, 65, 45, 99, 111, 108, 111, 114, 101, 100, 32, 114, 111, 117, 110, 100, > 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, 49, > 48, 39, 44, 32, 39, 115, 105, 122, 101, 61, 51, 48, 39, 44, 32, 39, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, 44, 32, 39, > 115, 104, 97, 100, 105, 110, 103, 61, 49, 39, 32, 97, 110, 100, 32, 39, > 98, 108, 117, 114, 61, 51, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, 32, 51, 44, 51, 48, 44, > 56, 44, 49, 48, 37, 10, 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, > 44, 36, 123, 50, 61, 51, 48, 125, 44, 36, 123, 51, 61, 48, 125, 44, > 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 51, 37, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 114, 111, 117, > 110, 100, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 104, 97, 114, 112, 110, > 101, 115, 115, 32, 36, 49, 44, 32, 115, 105, 122, 101, 32, 36, 50, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, > 115, 104, 97, 100, 105, 110, 103, 32, 36, 52, 32, 97, 110, 100, 32, 98, > 108, 117, 114, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, > 110, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 34, 45, 40, 97, 98, 115, 40, 120, 47, 119, 45, 48, 46, 53, 41, > 94, 36, 49, 32, 43, 32, 97, 98, 115, 40, 121, 47, 104, 45, 48, 46, > 53, 41, 94, 36, 49, 41, 94, 40, 49, 47, 36, 49, 41, 34, 32, 45, > 103, 101, 91, 45, 49, 93, 32, 36, 50, 37, 10, 45, 105, 102, 32, 36, > 52, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, > 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, > 45, 94, 91, 45, 49, 93, 32, 123, 49, 47, 36, 52, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 45, > 45, 98, 91, 45, 50, 93, 32, 36, 53, 32, 45, 109, 118, 91, 45, 49, > 93, 32, 45, 51, 32, 45, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, > 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 32, 58, 32, > 95, 100, 101, 112, 116, 104, 62, 61, 48, 44, 95, 120, 95, 99, 101, 110, > 116, 101, 114, 44, 95, 121, 95, 99, 101, 110, 116, 101, 114, 44, 95, 108, > 101, 102, 116, 95, 115, 105, 100, 101, 61, 123, 48, 61, 110, 111, 114, 109, > 97, 108, 32, 124, 32, 49, 61, 109, 105, 114, 114, 111, 114, 45, 120, 32, > 124, 32, 50, 61, 109, 105, 114, 114, 111, 114, 45, 121, 32, 124, 32, 51, > 61, 109, 105, 114, 114, 111, 114, 45, 120, 121, 125, 44, 95, 114, 105, 103, > 104, 116, 95, 115, 105, 100, 101, 44, 95, 108, 111, 119, 101, 114, 95, 115, > 105, 100, 101, 44, 95, 117, 112, 112, 101, 114, 95, 115, 105, 100, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, > 51, 100, 32, 102, 114, 97, 109, 101, 115, 32, 105, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 112, 116, 104, 61, 49, 39, > 44, 32, 39, 120, 95, 99, 101, 110, 116, 101, 114, 61, 121, 95, 99, 101, > 110, 116, 101, 114, 61, 48, 39, 32, 97, 110, 100, 32, 39, 108, 101, 102, > 116, 95, 115, 105, 100, 101, 61, 114, 105, 103, 104, 116, 95, 115, 105, 100, > 101, 44, 108, 111, 119, 101, 114, 95, 115, 105, 100, 101, 61, 117, 112, 112, > 101, 114, 95, 115, 105, 100, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 32, 44, 10, 102, > 114, 97, 109, 101, 95, 99, 117, 98, 101, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 49, 125, 62, 61, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, > 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, > 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 51, > 100, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 112, 116, 104, 32, 36, > 49, 44, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 50, 44, 36, 51, > 41, 32, 97, 110, 100, 32, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 115, 32, 40, 36, 123, 52, 45, 45, 49, 125, 41, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, > 105, 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 45, 102, 114, 97, 109, > 101, 95, 99, 117, 98, 101, 32, 36, 123, 49, 45, 45, 49, 125, 32, 45, > 97, 32, 99, 10, 45, 101, 108, 115, 101, 10, 109, 61, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 125, 32, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 32, 115, 61, 123, 115, 125, 10, 45, 105, 109, 97, 103, 101, 112, > 108, 97, 110, 101, 51, 100, 32, 45, 99, 51, 100, 32, 45, 47, 51, 100, > 91, 45, 49, 93, 32, 36, 119, 44, 36, 104, 44, 49, 10, 45, 45, 95, > 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 91, 48, 93, 32, 36, 52, > 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, > 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 45, 48, 46, 53, > 44, 48, 44, 45, 48, 46, 53, 10, 45, 45, 95, 102, 114, 97, 109, 101, > 95, 99, 117, 98, 101, 91, 48, 93, 32, 36, 53, 32, 45, 114, 51, 100, > 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 45, 57, 48, 32, 45, > 43, 51, 100, 91, 45, 49, 93, 32, 48, 46, 53, 44, 48, 44, 45, 48, > 46, 53, 10, 45, 45, 95, 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, > 91, 48, 93, 32, 36, 54, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 48, 44, 48, 44, 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 48, 46, 53, 44, 45, 48, 46, 53, 10, 45, 45, 95, > 102, 114, 97, 109, 101, 95, 99, 117, 98, 101, 91, 48, 93, 32, 36, 55, > 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, > 45, 57, 48, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 48, 44, 45, > 48, 46, 53, 44, 45, 48, 46, 53, 10, 45, 43, 51, 100, 32, 48, 44, > 48, 44, 49, 32, 45, 43, 51, 100, 32, 45, 42, 51, 100, 32, 36, 119, > 44, 36, 104, 44, 36, 109, 10, 102, 61, 49, 48, 48, 48, 10, 99, 120, > 61, 36, 50, 42, 36, 119, 47, 50, 42, 40, 36, 102, 43, 36, 109, 42, > 36, 49, 41, 47, 36, 102, 10, 99, 121, 61, 36, 51, 42, 36, 104, 47, > 50, 42, 40, 36, 102, 43, 36, 109, 42, 36, 49, 41, 47, 36, 102, 10, > 45, 115, 51, 100, 32, 45, 114, 91, 50, 93, 32, 51, 44, 123, 64, 123, > 50, 44, 104, 125, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, 45, > 102, 91, 50, 93, 32, 34, 105, 102, 40, 105, 40, 50, 44, 121, 41, 60, > 48, 46, 53, 44, 105, 44, 105, 43, 105, 102, 40, 120, 61, 61, 48, 44, > 34, 36, 99, 120, 34, 44, 105, 102, 40, 120, 61, 61, 49, 44, 34, 36, > 99, 121, 34, 44, 40, 36, 49, 45, 49, 41, 42, 34, 36, 109, 34, 41, > 41, 41, 34, 10, 45, 121, 91, 50, 93, 32, 45, 97, 32, 121, 10, 45, > 42, 51, 100, 32, 50, 32, 123, 50, 42, 36, 119, 125, 44, 123, 50, 42, > 36, 104, 125, 44, 49, 44, 36, 115, 32, 45, 102, 51, 100, 32, 123, 50, > 42, 36, 102, 125, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 49, 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, 48, > 37, 44, 50, 10, 45, 101, 110, 100, 105, 102, 10, 45, 110, 109, 32, 36, > 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 45, 118, 32, 43, 10, 95, 102, 114, 97, 109, 101, 95, 99, 117, 98, > 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, > 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 49, > 56, 48, 32, 45, 114, 118, 51, 100, 91, 45, 49, 93, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 114, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 32, 45, 114, > 118, 51, 100, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 49, 61, 61, 51, 125, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 49, 44, 49, 56, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 102, 117, 122, > 122, 121, 32, 58, 32, 115, 105, 122, 101, 95, 120, 62, 61, 48, 44, 95, > 115, 105, 122, 101, 95, 121, 62, 61, 48, 44, 95, 102, 117, 122, 122, 121, > 110, 101, 115, 115, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 62, 61, 48, 44, 95, 82, 44, 95, 71, 44, 95, 66, 44, > 95, 65, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 114, 97, 119, > 32, 82, 71, 66, 65, 45, 99, 111, 108, 111, 114, 101, 100, 32, 102, 117, > 122, 122, 121, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 121, 61, 115, > 105, 122, 101, 95, 120, 39, 44, 32, 39, 102, 117, 122, 122, 121, 110, 101, > 115, 115, 61, 53, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 61, 49, 39, 32, 97, 110, 100, 32, 39, 82, 61, 71, 61, 66, > 61, 65, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, > 114, 97, 109, 101, 95, 102, 117, 122, 122, 121, 32, 50, 48, 10, 102, 114, > 97, 109, 101, 95, 102, 117, 122, 122, 121, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, 51, 61, 53, 125, > 44, 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 50, 53, 53, 125, > 44, 36, 123, 54, 61, 36, 53, 125, 44, 36, 123, 55, 61, 36, 54, 125, > 44, 36, 123, 56, 61, 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 68, 114, 97, 119, 32, 36, 49, 120, 36, 50, 32, 102, 117, > 122, 122, 121, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 102, 117, 122, 122, 121, > 110, 101, 115, 115, 32, 36, 51, 44, 32, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 32, 36, 52, 32, 97, 110, 100, 32, 82, 71, 66, 65, 32, > 99, 111, 108, 111, 114, 32, 40, 36, 53, 44, 36, 54, 44, 36, 55, 44, > 36, 56, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 97, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, > 45, 105, 91, 48, 93, 32, 40, 36, 49, 59, 36, 50, 41, 32, 45, 42, > 91, 48, 93, 32, 50, 32, 40, 36, 53, 94, 36, 54, 94, 36, 55, 94, > 36, 56, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 114, 101, 99, 116, 97, > 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 48, 48, > 37, 44, 64, 123, 48, 44, 49, 125, 44, 49, 44, 49, 10, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, > 64, 123, 48, 44, 48, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, > 45, 114, 109, 91, 48, 93, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, > 93, 32, 45, 36, 49, 44, 45, 36, 50, 44, 48, 44, 48, 44, 50, 32, > 45, 115, 112, 114, 101, 97, 100, 91, 45, 49, 93, 32, 36, 51, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 52, 32, 45, 95, 102, 97, 100, 101, 32, > 53, 48, 44, 56, 48, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 112, 97, > 105, 110, 116, 105, 110, 103, 32, 58, 32, 95, 115, 105, 122, 101, 91, 37, > 93, 62, 61, 48, 44, 48, 60, 61, 95, 99, 111, 110, 116, 114, 97, 115, > 116, 60, 61, 49, 44, 95, 112, 114, 111, 102, 105, 108, 101, 95, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 82, 44, 95, 71, 44, 95, 66, 44, 95, 118, 105, 103, 110, 101, 116, 116, > 101, 95, 115, 105, 122, 101, 91, 37, 93, 62, 61, 48, 44, 95, 118, 105, > 103, 110, 101, 116, 116, 101, 95, 99, 111, 110, 116, 114, 97, 115, 116, 62, > 61, 48, 44, 95, 100, 101, 102, 101, 99, 116, 115, 95, 99, 111, 110, 116, > 114, 97, 115, 116, 62, 61, 48, 44, 48, 60, 61, 95, 100, 101, 102, 101, > 99, 116, 115, 95, 100, 101, 110, 115, 105, 116, 121, 60, 61, 49, 48, 48, > 44, 95, 100, 101, 102, 101, 99, 116, 115, 95, 115, 105, 122, 101, 62, 61, > 48, 44, 95, 100, 101, 102, 101, 99, 116, 115, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, 115, 101, 114, > 105, 97, 108, 95, 110, 117, 109, 98, 101, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 100, 100, 32, 97, 32, 112, 97, 105, 110, 116, 105, > 110, 103, 32, 102, 114, 97, 109, 101, 32, 116, 111, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 61, 49, 48, 37, 39, > 44, 32, 39, 99, 111, 110, 116, 114, 97, 115, 116, 61, 48, 46, 52, 39, > 44, 32, 39, 112, 114, 111, 102, 105, 108, 101, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 54, 37, 39, 44, 32, 39, 82, 61, 50, 50, > 53, 39, 44, 32, 39, 71, 61, 50, 48, 48, 39, 44, 32, 39, 66, 61, > 49, 50, 48, 39, 44, 32, 39, 118, 105, 103, 110, 101, 116, 116, 101, 95, > 115, 105, 122, 101, 61, 50, 37, 39, 44, 32, 39, 118, 105, 103, 110, 101, > 116, 116, 101, 95, 99, 111, 110, 116, 114, 97, 115, 116, 61, 52, 48, 48, > 39, 44, 32, 39, 100, 101, 102, 101, 99, 116, 115, 95, 99, 111, 110, 116, > 114, 97, 115, 116, 61, 53, 48, 39, 44, 32, 39, 100, 101, 102, 101, 99, > 116, 115, 95, 100, 101, 110, 115, 105, 116, 121, 61, 49, 48, 39, 44, 32, > 39, 100, 101, 102, 101, 99, 116, 115, 95, 115, 105, 122, 101, 61, 49, 39, > 44, 32, 39, 100, 101, 102, 101, 99, 116, 115, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 48, 46, 53, 37, 39, 32, 97, 110, 100, 32, > 39, 115, 101, 114, 105, 97, 108, 95, 110, 117, 109, 98, 101, 114, 61, 49, > 50, 51, 52, 53, 54, 55, 56, 57, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, > 44, 10, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, > 32, 58, 10, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, > 48, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 48, 46, > 52, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 32, 38, > 38, 32, 36, 123, 51, 61, 54, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 55, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 56, 61, 52, 48, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 57, > 61, 53, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 49, 48, 61, > 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 49, 48, 60, 61, 49, > 48, 48, 32, 38, 38, 32, 36, 123, 49, 49, 61, 49, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 49, 50, 61, 48, 46, 53, 37, 125, 62, 61, > 48, 34, 10, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 50, 50, 53, > 125, 44, 36, 123, 53, 61, 50, 48, 48, 125, 44, 36, 123, 54, 61, 49, > 50, 48, 125, 44, 36, 123, 49, 51, 61, 49, 50, 51, 52, 53, 54, 55, > 56, 57, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, > 32, 112, 97, 105, 110, 116, 105, 110, 103, 32, 102, 114, 97, 109, 101, 32, > 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 115, 105, 122, 101, 32, 36, 49, 44, 32, 99, 111, 110, 116, 114, 97, > 115, 116, 32, 36, 50, 44, 32, 112, 114, 111, 102, 105, 108, 101, 32, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, 99, 111, > 108, 111, 114, 32, 40, 36, 123, 52, 45, 54, 125, 41, 44, 32, 118, 105, > 103, 110, 101, 116, 116, 101, 32, 115, 105, 122, 101, 32, 36, 55, 44, 32, > 34, 92, 10, 34, 118, 105, 103, 110, 101, 116, 116, 101, 32, 115, 116, 114, > 101, 110, 103, 116, 104, 32, 36, 56, 44, 32, 100, 101, 102, 101, 99, 116, > 115, 32, 99, 111, 110, 116, 114, 97, 115, 116, 32, 36, 57, 44, 32, 100, > 101, 102, 101, 99, 116, 115, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, > 49, 48, 44, 32, 100, 101, 102, 101, 99, 116, 115, 32, 115, 105, 122, 101, > 32, 36, 49, 49, 44, 32, 100, 101, 102, 101, 99, 116, 115, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 50, 32, 97, 110, 100, > 32, 115, 101, 114, 105, 97, 108, 32, 110, 117, 109, 98, 101, 114, 32, 36, > 49, 51, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, > 123, 33, 36, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, > 110, 100, 105, 102, 10, 36, 49, 44, 36, 49, 32, 115, 61, 123, 109, 97, > 120, 40, 119, 44, 104, 41, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 40, 123, 39, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, 32, 36, > 49, 51, 125, 39, 125, 41, 32, 45, 45, 91, 45, 49, 93, 32, 123, 39, > 48, 39, 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 115, 10, 45, 116, > 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 98, 91, > 45, 49, 93, 32, 36, 51, 32, 45, 110, 91, 45, 49, 93, 32, 123, 49, > 45, 36, 50, 125, 44, 123, 49, 43, 36, 50, 125, 10, 45, 45, 114, 91, > 45, 49, 93, 32, 123, 64, 123, 45, 50, 44, 119, 125, 43, 50, 42, 36, > 115, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 10, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 10, 45, 109, 118, 91, 45, > 51, 93, 32, 64, 35, 32, 45, 116, 114, 97, 110, 115, 112, 111, 115, 101, > 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, > 44, 123, 64, 123, 45, 52, 44, 104, 125, 43, 50, 42, 36, 115, 125, 44, > 49, 44, 49, 10, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, > 32, 120, 10, 91, 45, 51, 93, 44, 91, 45, 51, 93, 44, 49, 44, 49, > 44, 49, 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, > 51, 44, 48, 44, 48, 44, 123, 36, 115, 45, 49, 125, 44, 123, 36, 115, > 45, 49, 125, 44, 48, 44, 123, 36, 115, 45, 49, 125, 44, 49, 44, 48, > 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 51, 44, > 49, 48, 48, 37, 44, 48, 44, 123, 119, 45, 36, 115, 125, 44, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, > 10, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 49, > 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 51, 44, > 49, 44, 48, 44, 49, 48, 48, 37, 44, 123, 36, 115, 45, 50, 125, 44, > 49, 48, 48, 37, 44, 48, 32, 45, 112, 111, 108, 121, 103, 111, 110, 91, > 45, 49, 93, 32, 51, 44, 49, 44, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 123, 104, 45, 36, 115, 43, 49, 125, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 48, 10, 45, 95, 102, 114, 97, 109, 101, > 95, 112, 97, 105, 110, 116, 105, 110, 103, 91, 45, 54, 45, 45, 51, 93, > 32, 36, 123, 52, 45, 54, 125, 44, 36, 123, 57, 45, 49, 50, 125, 10, > 123, 64, 123, 45, 55, 44, 119, 125, 43, 50, 42, 36, 115, 125, 44, 123, > 64, 123, 45, 55, 44, 104, 125, 43, 50, 42, 36, 115, 125, 44, 49, 44, > 51, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 55, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 51, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 55, 93, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 51, 93, 32, 121, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 54, 93, > 44, 48, 44, 123, 104, 45, 36, 115, 125, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 51, 93, 44, 49, 32, 45, 114, 109, 91, 45, 54, 44, 45, 51, > 93, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 52, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 52, 93, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 50, 93, 32, 120, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 123, 119, 45, 36, 115, 125, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 50, 93, 44, 49, 32, 45, 114, 109, 91, 45, 51, 44, 45, 50, > 93, 10, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, > 45, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 32, 45, 43, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 98, 91, 45, 49, 93, 32, 36, 55, 32, 45, 110, 91, 45, > 49, 93, 32, 48, 44, 36, 56, 32, 45, 109, 97, 120, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 97, 91, 45, 50, 45, 45, 49, 93, 32, 99, 10, 45, 114, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, > 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, > 42, 91, 45, 50, 93, 32, 36, 51, 32, 45, 42, 91, 45, 51, 93, 32, > 36, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 10, 105, 61, 48, 32, 45, 100, 111, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, > 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, 101, 108, 115, 91, 45, 49, > 93, 32, 123, 49, 48, 48, 45, 36, 53, 125, 32, 45, 98, 91, 45, 49, > 93, 32, 36, 54, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, > 32, 105, 61, 123, 36, 105, 43, 49, 125, 32, 45, 119, 104, 105, 108, 101, > 32, 123, 34, 109, 61, 36, 53, 47, 50, 48, 48, 59, 40, 105, 97, 60, > 109, 45, 48, 46, 50, 32, 124, 124, 32, 105, 97, 62, 109, 43, 48, 46, > 50, 41, 32, 38, 38, 32, 34, 36, 105, 34, 60, 49, 48, 34, 125, 10, > 45, 98, 91, 45, 49, 93, 32, 36, 55, 32, 45, 103, 91, 45, 49, 93, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, > 93, 32, 45, 36, 52, 44, 36, 52, 10, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, 110, > 32, 58, 32, 77, 62, 61, 51, 44, 95, 112, 97, 116, 116, 101, 114, 110, > 32, 61, 32, 123, 32, 48, 61, 102, 105, 114, 115, 116, 32, 105, 109, 97, > 103, 101, 32, 124, 32, 49, 61, 115, 101, 108, 102, 32, 125, 44, 95, 99, > 111, 110, 115, 116, 114, 97, 105, 110, 95, 115, 105, 122, 101, 32, 61, 32, > 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 112, 97, 116, 116, 101, 114, 110, 32, 102, 114, 97, 109, 101, > 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 112, > 97, 116, 116, 101, 114, 110, 61, 48, 39, 32, 97, 110, 100, 32, 39, 99, > 111, 110, 115, 116, 114, 97, 105, 110, 95, 115, 105, 122, 101, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, 97, 109, 101, 95, 112, 97, > 116, 116, 101, 114, 110, 32, 56, 10, 102, 114, 97, 109, 101, 95, 112, 97, > 116, 116, 101, 114, 110, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 36, > 49, 62, 61, 51, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, > 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, 118, 32, 45, 32, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 32, 48, 10, 45, 105, > 102, 32, 123, 64, 35, 61, 61, 49, 124, 124, 36, 50, 125, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, 101, > 114, 116, 32, 36, 49, 120, 36, 49, 32, 115, 101, 108, 102, 45, 112, 97, > 116, 116, 101, 114, 110, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 45, 114, 32, 123, > 119, 47, 40, 36, 49, 45, 50, 41, 125, 44, 123, 104, 47, 40, 36, 49, > 45, 50, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 114, > 91, 45, 50, 93, 32, 123, 36, 49, 42, 119, 125, 44, 123, 36, 49, 42, > 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 91, 45, 49, 93, 120, 123, 36, 49, 43, 50, > 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, 125, 45, 45, 49, 93, > 32, 120, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 48, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 123, 64, 123, 45, 51, 44, 104, 125, 45, 49, 45, 104, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 91, 45, 49, 93, 120, 123, 36, 49, 43, > 49, 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, 125, 45, 45, 49, > 93, 32, 121, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 64, 123, 45, 50, 44, 119, 125, 45, 49, 45, 119, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 32, > 36, 119, 104, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 115, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 36, 49, 120, 36, 49, > 32, 112, 97, 116, 116, 101, 114, 110, 32, 102, 114, 97, 109, 101, 32, 111, > 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 117, 115, 105, 110, 103, > 32, 102, 105, 114, 115, 116, 32, 105, 109, 97, 103, 101, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 45, > 114, 91, 48, 93, 32, 123, 119, 47, 40, 36, 49, 45, 50, 41, 125, 44, > 123, 104, 47, 40, 36, 49, 45, 50, 41, 125, 44, 49, 44, 49, 48, 48, > 37, 44, 50, 10, 45, 114, 91, 45, 50, 93, 32, 123, 64, 123, 45, 50, > 44, 119, 125, 43, 50, 42, 119, 125, 44, 123, 64, 123, 45, 50, 44, 104, > 125, 43, 50, 42, 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 91, 45, 49, 93, 120, 123, > 36, 49, 43, 50, 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, 125, > 45, 45, 49, 93, 32, 120, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 48, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 123, 64, 123, 45, 51, 44, 104, 125, 45, 49, 45, > 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 91, 45, 49, 93, 120, > 123, 36, 49, 43, 49, 125, 32, 45, 97, 91, 123, 45, 36, 49, 45, 50, > 125, 45, 45, 49, 93, 32, 121, 32, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 32, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 123, 64, 123, 45, 50, 44, 119, 125, 45, 49, 45, 119, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 51, > 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, 104, 44, 49, 44, 49, 48, > 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, > 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, > 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 114, 111, 117, 110, > 100, 32, 58, 32, 95, 115, 104, 97, 114, 112, 110, 101, 115, 115, 62, 48, > 44, 95, 115, 105, 122, 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 44, 95, 115, 104, 97, 100, 105, 110, 103, 44, 95, > 82, 44, 95, 71, 44, 95, 66, 44, 95, 65, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 114, 97, 119, 32, 82, 71, 66, 65, 45, 99, 111, > 108, 111, 114, 101, 100, 32, 114, 111, 117, 110, 100, 32, 102, 114, 97, 109, > 101, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, 49, 48, 39, 44, 32, 39, > 115, 105, 122, 101, 61, 49, 48, 39, 44, 32, 39, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 48, 39, 44, 32, 39, 115, 104, 97, 100, 105, > 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 82, 61, 71, 61, 66, > 61, 65, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, > 114, 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 49, 48, 10, 102, 114, > 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 49, 48, 125, 44, 36, 123, 50, 61, 49, 48, > 125, 44, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, > 36, 123, 53, 61, 50, 53, 53, 125, 44, 36, 123, 54, 61, 36, 53, 125, > 44, 36, 123, 55, 61, 36, 54, 125, 44, 36, 123, 56, 61, 50, 53, 53, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, > 114, 111, 117, 110, 100, 32, 102, 114, 97, 109, 101, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 104, 97, > 114, 112, 110, 101, 115, 115, 32, 36, 49, 44, 32, 115, 105, 122, 101, 32, > 36, 50, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, > 51, 44, 32, 115, 104, 97, 100, 105, 110, 103, 32, 36, 52, 32, 97, 110, > 100, 32, 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 32, 40, 36, 53, > 44, 36, 54, 44, 36, 55, 44, 36, 56, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, > 64, 123, 48, 44, 110, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 44, 34, 45, 40, 97, 98, 115, 40, 120, 47, 119, 45, > 48, 46, 53, 41, 94, 36, 49, 32, 43, 32, 97, 98, 115, 40, 121, 47, > 104, 45, 48, 46, 53, 41, 94, 36, 49, 41, 94, 40, 49, 47, 36, 49, > 41, 34, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 50, 37, 10, 45, > 105, 102, 32, 36, 52, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, > 93, 32, 49, 32, 45, 94, 91, 45, 49, 93, 32, 123, 49, 47, 36, 52, > 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 45, 49, 93, 32, > 36, 51, 32, 45, 105, 91, 45, 51, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 52, 32, 45, 102, 99, 91, 45, 51, 93, 32, > 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 32, 45, 98, 108, 101, > 110, 100, 95, 102, 97, 100, 101, 10, 45, 110, 109, 32, 36, 110, 109, 44, > 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, > 120, 32, 58, 32, 115, 105, 122, 101, 95, 120, 91, 37, 93, 62, 61, 48, > 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, 44, 95, 99, 111, 108, 78, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, > 32, 99, 111, 108, 111, 114, 101, 100, 32, 102, 114, 97, 109, 101, 32, 97, > 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 32, > 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, > 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, 108, 51, 61, 50, 53, 53, > 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 52, 61, 50, 53, 53, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, 97, 109, 101, 95, 120, 32, > 50, 48, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 102, 114, 97, > 109, 101, 95, 120, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 49, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, > 50, 53, 53, 125, 44, 36, 123, 51, 61, 36, 50, 125, 44, 36, 123, 52, > 61, 36, 51, 125, 44, 36, 123, 53, 61, 50, 53, 53, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 36, 49, > 32, 111, 117, 116, 101, 114, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, > 101, 32, 120, 45, 97, 120, 105, 115, 44, 32, 119, 105, 116, 104, 32, 99, > 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, 45, 49, 125, 41, 46, 34, > 10, 45, 95, 102, 114, 97, 109, 101, 32, 36, 49, 44, 48, 44, 48, 44, > 36, 123, 50, 45, 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, 32, 102, > 114, 97, 109, 101, 95, 120, 121, 32, 58, 32, 115, 105, 122, 101, 95, 120, > 91, 37, 93, 62, 61, 48, 44, 95, 115, 105, 122, 101, 95, 121, 91, 37, > 93, 62, 61, 48, 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, 44, 95, > 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, > 115, 101, 114, 116, 32, 99, 111, 108, 111, 114, 101, 100, 32, 102, 114, 97, > 109, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 45, 97, > 120, 105, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 122, 101, 95, 121, 61, 115, 105, 122, 101, 95, 120, 39, > 44, 32, 39, 99, 111, 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, 108, > 51, 61, 50, 53, 53, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 52, > 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 40, 101, 113, 46, 32, 116, 111, 32, 39, 45, 102, 114, 97, 109, 101, 39, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, 97, 109, 101, 95, 120, > 121, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, 95, 120, > 121, 32, 50, 48, 44, 49, 48, 44, 50, 53, 53, 44, 48, 44, 50, 53, > 53, 10, 102, 114, 97, 109, 101, 95, 120, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 36, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 51, 61, 50, 53, 53, 125, 44, 36, 123, 52, 61, 36, 51, 125, > 44, 36, 123, 53, 61, 36, 52, 125, 44, 36, 123, 54, 61, 50, 53, 53, > 125, 10, 45, 118, 32, 45, 32, 95, 95, 115, 61, 34, 36, 63, 34, 32, > 45, 118, 32, 43, 10, 45, 95, 36, 48, 32, 36, 123, 49, 45, 45, 49, > 125, 10, 95, 102, 114, 97, 109, 101, 95, 120, 121, 32, 58, 10, 45, 101, > 91, 48, 45, 45, 51, 93, 32, 34, 73, 110, 115, 101, 114, 116, 32, 36, > 49, 120, 36, 50, 32, 111, 117, 116, 101, 114, 32, 102, 114, 97, 109, 101, > 32, 105, 110, 32, 105, 109, 97, 103, 101, 34, 36, 95, 95, 115, 34, 32, > 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, 121, 45, 97, 120, 101, > 115, 44, 32, 119, 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, > 123, 51, 45, 45, 49, 125, 41, 46, 34, 10, 45, 95, 102, 114, 97, 109, > 101, 32, 36, 49, 44, 36, 50, 44, 48, 44, 36, 123, 51, 45, 45, 49, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 102, 114, 97, 109, 101, 95, 120, > 121, 122, 32, 58, 32, 115, 105, 122, 101, 95, 120, 91, 37, 93, 62, 61, > 48, 44, 95, 115, 105, 122, 101, 95, 121, 91, 37, 93, 62, 61, 48, 44, > 95, 115, 105, 122, 101, 95, 122, 91, 37, 93, 62, 61, 48, 95, 99, 111, > 108, 49, 44, 46, 46, 46, 44, 95, 99, 111, 108, 78, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 73, 110, 115, 101, 114, 116, 32, 99, 111, 108, > 111, 114, 101, 100, 32, 102, 114, 97, 109, 101, 32, 97, 108, 111, 110, 103, > 32, 116, 104, 101, 32, 120, 45, 97, 120, 105, 115, 32, 105, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 105, 122, 101, 95, 121, > 61, 115, 105, 122, 101, 95, 120, 61, 115, 105, 122, 101, 95, 122, 39, 44, > 32, 39, 99, 111, 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, 108, 51, > 61, 50, 53, 53, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 52, 61, > 50, 53, 53, 39, 46, 10, 102, 114, 97, 109, 101, 95, 120, 121, 122, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 51, 61, 36, 50, 125, 62, 61, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 52, 61, 50, 53, 53, 125, 44, 36, 123, 53, 61, > 36, 52, 125, 44, 36, 123, 54, 61, 36, 53, 125, 44, 36, 123, 55, 61, > 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, > 115, 101, 114, 116, 32, 36, 49, 120, 36, 50, 120, 36, 51, 32, 111, 117, > 116, 101, 114, 32, 102, 114, 97, 109, 101, 32, 105, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 120, > 121, 122, 45, 97, 120, 101, 115, 44, 32, 119, 105, 116, 104, 32, 99, 111, > 108, 111, 114, 32, 40, 36, 123, 52, 45, 45, 49, 125, 41, 46, 34, 10, > 45, 95, 102, 114, 97, 109, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 44, 36, 123, 52, 45, 45, 49, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 114, 97, 109, 101, 95, 121, 32, 58, 32, 115, 105, 122, 101, 95, 121, > 91, 37, 93, 62, 61, 48, 44, 95, 99, 111, 108, 49, 44, 46, 46, 46, > 44, 95, 99, 111, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 110, 115, 101, 114, 116, 32, 99, 111, 108, 111, 114, 101, 100, 32, 102, > 114, 97, 109, 101, 32, 97, 108, 111, 110, 103, 32, 116, 104, 101, 32, 121, > 45, 97, 120, 105, 115, 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 99, 111, 108, 49, 61, 99, 111, 108, 50, 61, 99, 111, > 108, 51, 61, 50, 53, 53, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, > 52, 61, 50, 53, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 114, > 97, 109, 101, 95, 121, 32, 50, 48, 44, 50, 53, 53, 44, 48, 44, 50, > 53, 53, 10, 102, 114, 97, 109, 101, 95, 121, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 49, 62, 61, 48, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 50, 53, 53, 125, 44, 36, 123, 51, 61, 36, > 50, 125, 44, 36, 123, 52, 61, 36, 51, 125, 44, 36, 123, 53, 61, 50, > 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 73, 110, 115, > 101, 114, 116, 32, 36, 49, 32, 111, 117, 116, 101, 114, 32, 102, 114, 97, > 109, 101, 32, 105, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 97, 108, > 111, 110, 103, 32, 116, 104, 101, 32, 121, 45, 97, 120, 105, 115, 44, 32, > 119, 105, 116, 104, 32, 99, 111, 108, 111, 114, 32, 40, 36, 123, 50, 45, > 45, 49, 125, 41, 46, 34, 10, 45, 95, 102, 114, 97, 109, 101, 32, 48, > 44, 36, 49, 44, 48, 44, 36, 123, 50, 45, 45, 49, 125, 10, 95, 102, > 114, 97, 109, 101, 32, 58, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 114, 111, 117, 110, 100, 40, 36, 49, 42, 105, 102, 40, 64, 123, 45, > 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, > 119, 44, 49, 41, 41, 125, 10, 104, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 50, 42, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 50, 125, 44, 104, 44, 49, 41, 41, 125, 10, > 100, 61, 123, 114, 111, 117, 110, 100, 40, 36, 51, 42, 105, 102, 40, 64, > 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 51, > 125, 44, 100, 44, 49, 41, 41, 125, 10, 123, 119, 43, 50, 42, 36, 119, > 125, 44, 123, 104, 43, 50, 42, 36, 104, 125, 44, 123, 100, 43, 50, 42, > 36, 100, 125, 44, 49, 48, 48, 37, 32, 45, 102, 99, 91, 49, 93, 32, > 36, 123, 52, 45, 45, 49, 125, 10, 45, 106, 91, 49, 93, 32, 91, 48, > 93, 44, 36, 119, 44, 36, 104, 44, 36, 100, 32, 45, 114, 109, 91, 48, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 103, 50, 97, 115, > 99, 105, 105, 32, 58, 32, 95, 99, 104, 97, 114, 115, 101, 116, 44, 95, > 97, 110, 97, 108, 121, 115, 105, 115, 95, 115, 99, 97, 108, 101, 62, 48, > 44, 95, 97, 110, 97, 108, 121, 115, 105, 115, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, 115, 121, 110, > 116, 104, 101, 115, 105, 115, 95, 115, 99, 97, 108, 101, 62, 48, 44, 95, > 111, 117, 116, 112, 117, 116, 95, 97, 115, 99, 105, 105, 95, 102, 105, 108, > 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 110, 100, 101, 114, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 32, 97, 115, 32, 98, 105, 110, 97, 114, 121, 32, > 97, 115, 99, 105, 105, 32, 97, 114, 116, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 84, 104, 105, 115, 32, 99, 111, 109, 109, 97, 110, 100, > 32, 114, 101, 116, 117, 114, 110, 115, 32, 116, 104, 101, 32, 99, 111, 114, > 114, 101, 115, 112, 111, 110, 100, 105, 110, 103, 32, 116, 104, 101, 32, 108, > 105, 115, 116, 32, 111, 102, 32, 119, 105, 100, 116, 104, 115, 32, 97, 110, > 100, 32, 104, 101, 105, 103, 104, 116, 115, 32, 40, 101, 120, 112, 114, 101, > 115, 115, 101, 100, 32, 97, 115, 32, 97, 32, 110, 117, 109, 98, 101, 114, > 32, 111, 102, 32, 99, 104, 97, 114, 97, 99, 116, 101, 114, 115, 41, 32, > 102, 111, 114, 32, 101, 97, 99, 104, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 99, 104, 97, 114, 115, 101, 116, 61, 91, 97, 115, 99, 105, > 105, 32, 99, 104, 97, 114, 115, 101, 116, 93, 39, 44, 32, 39, 97, 110, > 97, 108, 121, 115, 105, 115, 95, 115, 99, 97, 108, 101, 61, 49, 54, 39, > 44, 32, 39, 97, 110, 97, 108, 121, 115, 105, 115, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 61, 50, 48, 37, 39, 44, 32, 39, 115, 121, > 110, 116, 104, 101, 115, 105, 115, 95, 115, 99, 97, 108, 101, 61, 49, 54, > 39, 32, 97, 110, 100, 32, 39, 95, 111, 117, 116, 112, 117, 116, 95, 97, > 115, 99, 105, 105, 95, 102, 105, 108, 101, 110, 97, 109, 101, 61, 91, 117, > 110, 100, 101, 102, 105, 110, 101, 100, 93, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 105, 109, 103, 50, 97, 115, 99, 105, 105, 32, 44, 32, 45, > 114, 91, 48, 93, 32, 91, 49, 93, 44, 91, 49, 93, 44, 49, 44, 51, > 32, 45, 45, 109, 117, 108, 10, 105, 109, 103, 50, 97, 115, 99, 105, 105, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 32, 33, > 92, 48, 52, 50, 92, 35, 36, 37, 38, 92, 48, 52, 55, 40, 41, 42, > 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, > 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, > 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, > 92, 49, 51, 51, 92, 92, 92, 49, 51, 53, 94, 95, 92, 49, 52, 48, > 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, > 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 92, 49, 55, 51, 124, 92, > 49, 55, 52, 126, 125, 34, 44, 34, 36, 123, 53, 61, 125, 34, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 49, 54, 125, 62, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 50, 48, 37, 125, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 52, 61, 49, 54, 125, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 82, 101, 110, 100, 101, 114, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 97, 115, 32, 98, 105, 110, 97, 114, 121, 32, > 97, 115, 99, 105, 105, 32, 97, 114, 116, 44, 32, 119, 105, 116, 104, 32, > 99, 104, 97, 114, 115, 101, 116, 32, 39, 36, 49, 39, 44, 32, 97, 110, > 97, 108, 121, 115, 105, 115, 32, 115, 99, 97, 108, 101, 32, 36, 50, 44, > 32, 97, 110, 97, 108, 121, 115, 105, 115, 32, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 32, 36, 51, 44, 32, 115, 121, 110, 116, 104, 101, 115, > 105, 115, 32, 115, 99, 97, 108, 101, 32, 36, 52, 32, 97, 110, 100, 32, > 111, 117, 116, 112, 117, 116, 32, 97, 115, 99, 105, 105, 32, 102, 105, 108, > 101, 110, 97, 109, 101, 32, 39, 36, 53, 39, 46, 34, 10, 45, 118, 32, > 45, 10, 105, 115, 95, 109, 117, 108, 116, 105, 61, 123, 64, 35, 62, 49, > 125, 10, 45, 108, 91, 93, 10, 40, 123, 39, 34, 36, 49, 34, 39, 125, > 41, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 10, 67, 61, > 123, 96, 57, 50, 96, 125, 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, > 92, 32, 64, 123, 48, 44, 36, 62, 125, 125, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 36, 67, 44, 48, 44, 48, 44, 36, 50, 44, 49, 44, > 49, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 67, 44, 48, 44, > 48, 44, 36, 52, 44, 49, 44, 49, 10, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 48, 93, 10, 45, 61, 32, 45, 49, 32, 45, 61, 32, 45, > 49, 44, 48, 44, 49, 48, 48, 37, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 32, 45, 61, 32, 48, 32, 45, 61, 32, 48, 44, 48, 44, 49, > 48, 48, 37, 10, 45, 108, 91, 48, 45, 45, 50, 58, 50, 93, 32, 45, > 114, 32, 123, 64, 123, 45, 109, 97, 120, 95, 119, 125, 43, 49, 125, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, > 32, 45, 98, 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 97, 32, 122, 32, 45, 101, 110, 100, 108, 10, 45, 108, 91, 49, 45, > 45, 49, 93, 32, 45, 114, 32, 123, 64, 123, 45, 109, 97, 120, 95, 119, > 125, 43, 49, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 32, 45, 97, 32, 122, 32, 45, 101, 110, 100, 108, > 10, 45, 101, 110, 100, 108, 10, 119, 61, 64, 123, 45, 50, 44, 119, 125, > 32, 104, 61, 64, 123, 45, 50, 44, 104, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 50, 125, 32, 45, 108, 91, 36, 62, 44, > 45, 50, 44, 45, 49, 93, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 91, 48, 93, 32, 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, > 10, 110, 119, 61, 64, 123, 48, 44, 114, 111, 117, 110, 100, 40, 119, 47, > 36, 119, 44, 49, 44, 49, 41, 125, 10, 110, 104, 61, 64, 123, 48, 44, > 114, 111, 117, 110, 100, 40, 104, 47, 36, 104, 44, 49, 44, 49, 41, 125, > 10, 45, 105, 102, 32, 36, 62, 32, 108, 105, 115, 116, 95, 119, 104, 61, > 36, 108, 105, 115, 116, 95, 119, 104, 44, 36, 110, 119, 44, 36, 110, 104, > 32, 45, 101, 108, 115, 101, 32, 108, 105, 115, 116, 95, 119, 104, 61, 36, > 110, 119, 44, 36, 110, 104, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, > 91, 48, 93, 32, 121, 44, 45, 36, 104, 32, 45, 115, 91, 48, 45, 45, > 51, 93, 32, 120, 44, 45, 36, 119, 32, 45, 114, 91, 48, 45, 45, 51, > 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 44, 48, 44, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 32, 45, > 108, 91, 36, 62, 44, 45, 50, 44, 45, 49, 93, 10, 45, 114, 112, 114, > 111, 103, 114, 101, 115, 115, 32, 123, 36, 62, 42, 49, 48, 48, 47, 40, > 64, 35, 45, 50, 41, 125, 10, 45, 114, 91, 48, 93, 32, 91, 49, 93, > 32, 45, 45, 91, 48, 93, 32, 91, 49, 93, 32, 45, 115, 113, 114, 91, > 48, 93, 32, 45, 114, 91, 48, 93, 32, 49, 44, 49, 44, 49, 48, 48, > 37, 44, 49, 44, 50, 32, 45, 121, 91, 48, 93, 10, 67, 61, 64, 123, > 48, 44, 121, 109, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, 45, 115, > 108, 105, 99, 101, 115, 91, 49, 93, 32, 36, 67, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, > 34, 36, 53, 34, 41, 125, 32, 45, 45, 102, 91, 48, 93, 32, 36, 67, > 32, 45, 97, 91, 48, 44, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 91, 48, 45, 45, > 50, 93, 32, 36, 110, 119, 44, 36, 110, 104, 10, 45, 105, 102, 32, 123, > 110, 97, 114, 103, 40, 34, 36, 53, 34, 41, 125, 32, 45, 115, 91, 48, > 93, 32, 99, 32, 45, 108, 91, 49, 93, 10, 45, 114, 32, 36, 110, 119, > 44, 36, 110, 104, 44, 49, 44, 49, 44, 49, 10, 40, 123, 39, 34, 36, > 49, 34, 39, 125, 41, 32, 45, 109, 97, 112, 91, 48, 93, 32, 91, 45, > 49, 93, 32, 45, 107, 91, 48, 93, 10, 45, 115, 32, 121, 32, 45, 105, > 91, 49, 45, 64, 35, 93, 32, 40, 123, 39, 92, 110, 39, 125, 41, 10, > 45, 97, 32, 120, 10, 45, 105, 102, 32, 36, 105, 115, 95, 109, 117, 108, > 116, 105, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 102, > 105, 108, 101, 110, 97, 109, 101, 92, 32, 34, 36, 53, 34, 44, 36, 62, > 125, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 61, 34, 36, 53, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 111, 32, > 114, 97, 119, 58, 36, 102, 105, 108, 101, 110, 97, 109, 101, 44, 99, 104, > 97, 114, 32, 45, 114, 109, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 117, 32, 36, 108, > 105, 115, 116, 95, 119, 104, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 109, 97, 103, 101, 103, 114, 105, 100, 32, 58, 32, 77, > 62, 48, 44, 95, 78, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 114, 101, 97, 116, 101, 32, 77, 120, 78, 32, 105, 109, 97, 103, > 101, 32, 103, 114, 105, 100, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 105, 109, 97, 103, 101, 103, 114, 105, 100, 32, 49, 54, 10, 105, > 109, 97, 103, 101, 103, 114, 105, 100, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 36, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 67, 114, 101, 97, 116, 101, 32, 36, 49, 120, 36, 50, 32, 105, > 109, 97, 103, 101, 32, 103, 114, 105, 100, 32, 102, 114, 111, 109, 32, 105, > 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 40, 123, 119, 125, 44, 123, 104, 125, 41, 32, 40, 36, 49, 44, 36, 50, > 41, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 50, 93, 32, > 64, 45, 49, 44, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 50, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 40, 123, 119, 125, 44, 123, 104, 125, > 41, 32, 40, 36, 49, 44, 36, 50, 41, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 114, 91, 45, 50, 93, 32, 64, 45, 49, 44, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 36, 49, 44, 36, 50, 44, 49, 44, 91, 45, 49, 93, 44, > 49, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 49, 44, 49, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, > 32, 45, 42, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, 110, 101, > 97, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 58, 32, 77, 62, > 48, 44, 95, 78, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 105, 110, 101, 97, 114, 105, 122, 101, 32, 77, 120, 78, 32, 116, 105, > 108, 101, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 108, 105, > 110, 101, 97, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 49, 54, > 10, 108, 105, 110, 101, 97, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 49, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, 48, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 76, 105, 110, 101, 97, 114, 105, 122, 101, > 32, 36, 49, 120, 36, 50, 32, 116, 105, 108, 101, 115, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 115, 61, 123, 115, 125, > 32, 45, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 49, > 44, 36, 50, 32, 45, 115, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 104, 61, 123, 119, > 125, 44, 123, 104, 125, 10, 45, 45, 102, 32, 120, 32, 45, 45, 102, 91, > 45, 49, 93, 32, 121, 32, 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, > 45, 121, 32, 45, 97, 91, 94, 48, 93, 32, 120, 32, 45, 115, 111, 108, > 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 36, 119, 104, 44, 49, 44, 49, 44, 64, 123, 45, 49, > 44, 48, 125, 34, 42, 120, 32, 43, 32, 34, 64, 123, 45, 49, 44, 49, > 125, 34, 42, 121, 32, 43, 32, 34, 64, 123, 45, 49, 44, 50, 125, 32, > 45, 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, > 40, 64, 35, 47, 36, 115, 41, 125, 32, 45, 97, 91, 45, 36, 115, 45, > 45, 49, 93, 32, 99, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, > 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, 45, 110, 109, 32, 36, 110, > 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 112, 95, > 115, 112, 114, 105, 116, 101, 115, 32, 58, 32, 95, 110, 98, 95, 115, 112, > 114, 105, 116, 101, 115, 62, 61, 49, 44, 95, 97, 108, 108, 111, 119, 95, > 114, 111, 116, 97, 116, 105, 111, 110, 61, 123, 32, 48, 61, 110, 111, 110, > 101, 32, 124, 32, 49, 61, 57, 48, 32, 100, 101, 103, 46, 32, 124, 32, > 50, 61, 49, 56, 48, 32, 100, 101, 103, 46, 32, 125, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 77, 97, 112, 32, 115, 101, 116, 32, 111, 102, > 32, 115, 112, 114, 105, 116, 101, 115, 32, 40, 100, 101, 102, 105, 110, 101, > 100, 32, 97, 115, 32, 116, 104, 101, 32, 39, 110, 98, 95, 115, 112, 114, > 105, 116, 101, 115, 39, 32, 108, 97, 116, 101, 115, 116, 32, 105, 109, 97, > 103, 101, 115, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 41, 32, 116, 111, 32, 111, 116, 104, 101, 114, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 97, 99, 99, 111, 114, 100, 105, > 110, 103, 32, 116, 111, 32, 116, 104, 101, 32, 108, 117, 109, 105, 110, 111, > 115, 105, 116, 121, 32, 111, 102, 32, 116, 104, 101, 105, 114, 32, 112, 105, > 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 114, 50, 100, 121, 32, 52, 56, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 49, 54, 32, 45, 98, 97, 108, 108, 32, 123, 56, 43, 50, 42, > 36, 62, 125, 44, 64, 123, 45, 82, 71, 66, 125, 32, 45, 42, 91, 45, > 49, 93, 32, 123, 40, 49, 43, 36, 62, 41, 47, 49, 54, 125, 32, 45, > 100, 111, 110, 101, 32, 45, 109, 97, 112, 95, 115, 112, 114, 105, 116, 101, > 115, 32, 49, 54, 10, 109, 97, 112, 95, 115, 112, 114, 105, 116, 101, 115, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, > 40, 36, 49, 41, 32, 38, 38, 32, 36, 49, 62, 48, 32, 38, 38, 32, > 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 48, 125, 41, 32, 38, 38, > 32, 36, 50, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 50, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 77, 97, 112, 32, 115, 101, > 116, 32, 111, 102, 32, 36, 49, 32, 115, 112, 114, 105, 116, 101, 115, 32, > 116, 111, 32, 105, 109, 97, 103, 101, 32, 115, 101, 108, 101, 99, 116, 105, > 111, 110, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 110, 111, 114, > 109, 91, 48, 45, 45, 123, 36, 49, 43, 49, 125, 93, 32, 45, 113, 117, > 97, 110, 116, 105, 122, 101, 91, 48, 45, 45, 123, 36, 49, 43, 49, 125, > 93, 32, 36, 49, 44, 48, 44, 49, 10, 45, 115, 108, 105, 99, 101, 115, > 91, 45, 36, 49, 45, 45, 49, 93, 32, 48, 32, 45, 114, 91, 45, 36, > 49, 45, 45, 49, 93, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 91, > 45, 36, 49, 45, 45, 49, 93, 125, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 102, 32, > 123, 36, 50, 61, 61, 49, 125, 10, 78, 61, 123, 52, 42, 36, 49, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 36, 49, 125, > 32, 45, 42, 91, 36, 62, 93, 32, 52, 32, 45, 45, 114, 97, 110, 100, > 91, 36, 62, 93, 32, 48, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, > 45, 49, 93, 32, 45, 43, 91, 36, 62, 44, 45, 49, 93, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, > 108, 91, 123, 49, 43, 36, 60, 125, 93, 32, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 120, 121, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 57, > 48, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 10, 78, 61, 123, 50, > 42, 36, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, > 45, 36, 49, 125, 32, 45, 42, 91, 36, 62, 93, 32, 50, 32, 45, 45, > 114, 97, 110, 100, 91, 36, 62, 93, 32, 48, 44, 49, 32, 45, 114, 111, > 117, 110, 100, 91, 45, 49, 93, 32, 45, 43, 91, 36, 62, 44, 45, 49, > 93, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 32, 45, 108, 91, 123, 49, 43, 36, 60, 125, 93, 32, 45, 45, > 109, 105, 114, 114, 111, 114, 32, 120, 121, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 78, 61, 36, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 36, 78, 45, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 64, > 123, 45, 109, 97, 120, 95, 115, 91, 45, 36, 78, 45, 45, 49, 93, 125, > 32, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 97, 91, > 45, 36, 78, 45, 45, 49, 93, 32, 120, 10, 45, 114, 91, 94, 45, 49, > 93, 32, 36, 123, 119, 125, 48, 48, 37, 44, 36, 123, 104, 125, 48, 48, > 37, 44, 49, 44, 49, 32, 45, 42, 91, 94, 45, 49, 93, 32, 36, 119, > 10, 40, 48, 44, 123, 36, 119, 45, 49, 125, 59, 48, 44, 123, 36, 119, > 45, 49, 125, 94, 48, 44, 48, 59, 123, 36, 104, 45, 49, 125, 44, 123, > 36, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, > 44, 36, 104, 44, 49, 44, 50, 44, 51, 32, 45, 114, 111, 117, 110, 100, > 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, > 45, 50, 125, 32, 45, 45, 114, 91, 45, 49, 93, 32, 91, 36, 62, 93, > 44, 91, 36, 62, 93, 44, 49, 44, 50, 44, 48, 44, 50, 32, 45, 114, > 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 50, 44, 48, 32, 45, 43, 91, 36, 62, 44, 45, 49, 93, 32, 45, > 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 36, 62, 93, 44, 48, > 44, 48, 32, 45, 114, 118, 91, 36, 62, 44, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 117, 122, 122, 108, 101, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 77, 62, 61, 49, 44, 95, 78, 62, 61, 49, 44, 95, 99, 117, 114, 118, > 97, 116, 117, 114, 101, 44, 95, 99, 101, 110, 116, 101, 114, 105, 110, 103, > 44, 95, 99, 111, 110, 110, 101, 99, 116, 111, 114, 115, 95, 118, 97, 114, > 105, 97, 98, 105, 108, 105, 116, 121, 44, 95, 114, 101, 115, 111, 108, 117, > 116, 105, 111, 110, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 73, 110, 112, 117, 116, 32, 112, 117, 122, 122, 108, 101, 32, 98, 105, > 110, 97, 114, 121, 32, 109, 97, 115, 107, 32, 119, 105, 116, 104, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 105, 122, 101, 32, 97, 110, > 100, 32, 103, 101, 111, 109, 101, 116, 114, 121, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, > 104, 116, 61, 53, 49, 50, 39, 44, 32, 39, 77, 61, 78, 61, 53, 39, > 44, 32, 39, 99, 117, 114, 118, 97, 116, 117, 114, 101, 61, 48, 46, 53, > 39, 44, 32, 39, 99, 101, 110, 116, 101, 114, 105, 110, 103, 61, 48, 46, > 53, 39, 44, 32, 39, 99, 111, 110, 110, 101, 99, 116, 111, 114, 115, 95, > 118, 97, 114, 105, 97, 98, 105, 108, 105, 116, 121, 61, 48, 46, 53, 39, > 32, 97, 110, 100, 32, 39, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, > 61, 54, 52, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 45, 112, 117, 122, 122, 108, 101, 32, 44, 10, 112, 117, 122, 122, 108, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 123, 49, 61, 53, 49, 50, 125, 41, 32, 38, 38, 32, 36, > 49, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, > 61, 36, 49, 125, 41, 32, 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, > 32, 105, 115, 105, 110, 116, 40, 36, 123, 51, 61, 53, 125, 41, 32, 38, > 38, 32, 36, 51, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, > 36, 123, 52, 61, 36, 51, 125, 41, 32, 38, 38, 32, 36, 52, 62, 48, > 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 56, 61, 54, 52, > 125, 41, 32, 38, 38, 32, 36, 56, 62, 48, 34, 10, 45, 115, 107, 105, > 112, 32, 36, 123, 53, 61, 48, 46, 53, 125, 44, 36, 123, 54, 61, 48, > 46, 53, 125, 44, 36, 123, 55, 61, 48, 46, 53, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 68, 114, 97, 119, 32, 36, 51, 120, 36, 52, > 32, 112, 117, 122, 122, 108, 101, 32, 112, 97, 116, 116, 101, 114, 110, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 36, 53, 44, 32, 99, > 101, 110, 116, 101, 114, 105, 110, 103, 32, 36, 54, 44, 32, 99, 111, 110, > 110, 101, 99, 116, 111, 114, 115, 32, 118, 97, 114, 105, 97, 98, 105, 108, > 105, 116, 121, 32, 36, 55, 32, 97, 110, 100, 32, 114, 101, 115, 111, 108, > 117, 116, 105, 111, 110, 32, 36, 56, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 108, 91, 93, 10, 45, 105, 102, 32, 123, 36, 52, 62, 61, 50, 125, > 32, 45, 95, 112, 117, 122, 122, 108, 101, 91, 93, 32, 36, 51, 44, 123, > 36, 52, 45, 49, 125, 44, 36, 123, 53, 45, 56, 125, 32, 45, 43, 51, > 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 51, 62, 61, 50, 125, 32, 45, 95, 112, > 117, 122, 122, 108, 101, 91, 93, 32, 36, 52, 44, 123, 36, 51, 45, 49, > 125, 44, 36, 123, 53, 45, 56, 125, 32, 45, 114, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 49, 44, 57, 48, 32, 45, 43, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 36, 52, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 51, 100, 32, 123, 36, 49, 47, 36, 51, 125, 44, 123, 36, 50, > 47, 36, 52, 125, 32, 45, 113, 117, 97, 100, 114, 97, 110, 103, 108, 101, > 51, 100, 32, 48, 44, 48, 44, 48, 44, 123, 36, 49, 45, 49, 125, 44, > 48, 44, 48, 44, 123, 36, 49, 45, 49, 125, 44, 123, 36, 50, 45, 49, > 125, 44, 48, 44, 48, 44, 123, 36, 50, 45, 49, 125, 44, 48, 32, 45, > 112, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, 51, 100, 32, 45, > 99, 111, 108, 51, 100, 32, 49, 10, 36, 49, 44, 36, 50, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, > 43, 10, 95, 112, 117, 122, 122, 108, 101, 32, 58, 10, 82, 61, 123, 36, > 54, 42, 36, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, > 10, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 44, 36, 82, 44, > 123, 36, 82, 45, 49, 125, 41, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 10, 115, 105, 103, 110, 61, 123, 105, 102, 40, 63, 60, 61, 48, > 46, 53, 44, 45, 49, 44, 49, 41, 125, 10, 99, 101, 110, 116, 101, 114, > 61, 123, 36, 52, 42, 63, 40, 45, 48, 46, 50, 53, 44, 48, 46, 50, > 53, 41, 125, 10, 107, 110, 111, 98, 61, 123, 36, 53, 42, 63, 40, 45, > 48, 46, 48, 53, 44, 48, 46, 49, 50, 41, 125, 10, 40, 36, 62, 44, > 48, 59, 92, 10, 123, 48, 46, 50, 43, 36, 99, 101, 110, 116, 101, 114, > 43, 36, 62, 125, 44, 123, 45, 36, 115, 105, 103, 110, 42, 36, 51, 42, > 48, 46, 49, 125, 59, 92, 10, 123, 48, 46, 52, 43, 36, 99, 101, 110, > 116, 101, 114, 43, 36, 62, 125, 44, 48, 59, 92, 10, 123, 48, 46, 51, > 53, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, 123, 48, > 46, 49, 42, 36, 115, 105, 103, 110, 125, 59, 92, 10, 123, 48, 46, 52, > 53, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, 123, 40, > 48, 46, 49, 53, 43, 36, 107, 110, 111, 98, 41, 42, 36, 115, 105, 103, > 110, 125, 59, 92, 10, 123, 48, 46, 53, 53, 43, 36, 99, 101, 110, 116, > 101, 114, 43, 36, 62, 125, 44, 123, 40, 48, 46, 49, 53, 43, 36, 107, > 110, 111, 98, 41, 42, 36, 115, 105, 103, 110, 125, 59, 92, 10, 123, 48, > 46, 54, 53, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, > 123, 48, 46, 49, 42, 36, 115, 105, 103, 110, 125, 59, 92, 10, 123, 48, > 46, 54, 43, 36, 99, 101, 110, 116, 101, 114, 43, 36, 62, 125, 44, 48, > 59, 92, 10, 123, 48, 46, 56, 43, 36, 99, 101, 110, 116, 101, 114, 43, > 36, 62, 125, 44, 123, 45, 36, 115, 105, 103, 110, 42, 36, 51, 42, 48, > 46, 49, 125, 41, 10, 45, 100, 111, 110, 101, 10, 40, 36, 49, 44, 48, > 41, 32, 45, 97, 91, 45, 123, 36, 49, 43, 49, 125, 45, 45, 49, 93, > 32, 121, 32, 45, 114, 91, 45, 49, 93, 32, 50, 44, 36, 82, 44, 49, > 44, 49, 44, 53, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 10, > 40, 50, 44, 48, 44, 49, 59, 50, 44, 123, 36, 82, 45, 50, 125, 44, > 123, 36, 82, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 51, > 44, 123, 36, 82, 45, 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 10, 51, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 50, 53, 53, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 50, 53, 53, 32, 45, 121, 91, 45, 53, 45, 45, 49, 93, 32, 121, > 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 121, 32, 45, 43, 51, > 100, 91, 45, 49, 93, 32, 48, 44, 36, 62, 10, 45, 100, 111, 110, 101, > 32, 45, 43, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 113, 117, 97, > 100, 114, 97, 116, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 58, 32, > 77, 62, 48, 44, 95, 78, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 81, 117, 97, 100, 114, 97, 116, 105, 122, 101, 32, 77, 120, 78, > 32, 116, 105, 108, 101, 115, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 113, 117, 97, 100, 114, 97, 116, 105, 122, 101, 95, 116, 105, 108, 101, > 115, 32, 49, 54, 10, 113, 117, 97, 100, 114, 97, 116, 105, 122, 101, 95, > 116, 105, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 49, 62, 48, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, 125, 62, > 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 81, 117, 97, 100, > 114, 97, 116, 105, 122, 101, 32, 36, 49, 120, 36, 50, 32, 116, 105, 108, > 101, 115, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, > 10, 115, 61, 123, 115, 125, 32, 45, 115, 112, 108, 105, 116, 95, 116, 105, > 108, 101, 115, 32, 36, 49, 44, 36, 50, 32, 45, 115, 32, 99, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 10, 45, 45, 102, 32, > 120, 94, 50, 32, 45, 45, 102, 91, 45, 49, 93, 32, 121, 94, 50, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 120, 42, 121, 32, 45, 45, 102, 91, > 45, 49, 93, 32, 120, 32, 45, 45, 102, 91, 45, 49, 93, 32, 121, 32, > 45, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 121, 32, 45, 97, 91, > 94, 48, 93, 32, 120, 10, 45, 115, 111, 108, 118, 101, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 36, 119, > 104, 44, 49, 44, 49, 44, 64, 123, 45, 49, 44, 48, 125, 34, 42, 120, > 94, 50, 32, 43, 32, 34, 64, 123, 45, 49, 44, 49, 125, 34, 42, 121, > 94, 50, 32, 43, 32, 34, 64, 123, 45, 49, 44, 50, 125, 34, 42, 120, > 42, 121, 32, 43, 34, 64, 123, 45, 49, 44, 51, 125, 34, 42, 120, 32, > 43, 32, 34, 64, 123, 45, 49, 44, 52, 125, 34, 42, 121, 32, 43, 32, > 34, 64, 123, 45, 49, 44, 53, 125, 32, 45, 114, 109, 91, 45, 50, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 115, 41, > 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, 32, 99, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, 45, > 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, > 36, 50, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, 101, > 115, 32, 58, 32, 97, 110, 103, 108, 101, 44, 95, 77, 62, 48, 44, 78, > 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 77, 120, 78, 32, 116, 105, 108, 101, 100, 45, 114, 111, 116, 97, > 116, 105, 111, 110, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 77, 61, 56, 39, 32, 97, > 110, 100, 32, 39, 78, 61, 77, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 111, 116, 97, 116, 101, 95, > 116, 105, 108, 101, 115, 32, 49, 48, 44, 56, 32, 45, 100, 114, 111, 112, > 95, 115, 104, 97, 100, 111, 119, 32, 49, 48, 44, 49, 48, 32, 45, 100, > 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 10, 114, 111, 116, 97, > 116, 101, 95, 116, 105, 108, 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 56, 125, 44, 36, 123, 51, 61, 36, 50, 125, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 36, > 50, 120, 36, 51, 32, 116, 105, 108, 101, 100, 45, 114, 111, 116, 97, 116, > 105, 111, 110, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, > 101, 32, 36, 49, 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 50, 44, > 36, 51, 44, 49, 32, 45, 114, 111, 116, 97, 116, 101, 32, 36, 49, 32, > 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, 50, > 44, 36, 51, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 115, 104, 105, 102, 116, 95, 116, 105, 108, 101, 115, 32, 58, 32, 77, 62, > 48, 44, 95, 78, 62, 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, > 32, 77, 120, 78, 32, 116, 105, 108, 101, 100, 45, 115, 104, 105, 102, 116, > 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 78, 61, 77, 39, 32, 97, 110, 100, 32, 39, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 50, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 115, 104, 105, 102, 116, 95, 116, 105, 108, 101, > 115, 32, 56, 44, 56, 44, 49, 48, 10, 115, 104, 105, 102, 116, 95, 116, > 105, 108, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, > 123, 50, 61, 36, 49, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 51, 61, 50, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 65, 112, 112, 108, 121, 32, 36, 49, 120, 36, 50, 32, 116, 105, > 108, 101, 100, 45, 115, 104, 105, 102, 116, 32, 101, 102, 102, 101, 99, 116, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 51, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 36, 49, 44, 36, 50, 44, 49, 44, > 50, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 36, 51, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, > 44, 49, 44, 50, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 49, 44, 48, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 97, 113, 117, 105, 110, > 32, 58, 32, 77, 62, 48, 44, 95, 78, 62, 48, 44, 95, 114, 101, 109, > 111, 118, 101, 95, 116, 105, 108, 101, 61, 123, 32, 48, 61, 110, 111, 110, > 101, 32, 124, 32, 49, 61, 102, 105, 114, 115, 116, 32, 124, 32, 50, 61, > 108, 97, 115, 116, 32, 124, 32, 51, 61, 114, 97, 110, 100, 111, 109, 32, > 125, 44, 95, 114, 101, 108, 105, 101, 102, 44, 95, 98, 111, 114, 100, 101, > 114, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 91, 37, 93, 44, 95, > 98, 111, 114, 100, 101, 114, 95, 111, 117, 116, 108, 105, 110, 101, 91, 37, > 93, 44, 95, 111, 117, 116, 108, 105, 110, 101, 95, 99, 111, 108, 111, 114, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, > 32, 77, 120, 78, 32, 116, 97, 113, 117, 105, 110, 32, 112, 117, 122, 122, > 108, 101, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 78, 61, 77, 39, 44, 32, 39, 114, 101, 108, 105, 101, 102, 61, > 53, 48, 39, 44, 32, 39, 98, 111, 114, 100, 101, 114, 95, 116, 104, 105, > 99, 107, 110, 101, 115, 115, 61, 53, 39, 44, 32, 39, 98, 111, 114, 100, > 101, 114, 95, 111, 117, 116, 108, 105, 110, 101, 61, 48, 39, 32, 97, 110, > 100, 32, 39, 114, 101, 109, 111, 118, 101, 95, 116, 105, 108, 101, 61, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 97, 113, 117, 105, 110, > 32, 56, 10, 116, 97, 113, 117, 105, 110, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 49, 41, 32, 38, 38, > 32, 36, 49, 62, 48, 32, 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, > 50, 61, 36, 49, 125, 41, 32, 38, 38, 32, 36, 50, 62, 48, 34, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, > 61, 53, 48, 125, 44, 36, 123, 53, 61, 53, 37, 125, 44, 36, 123, 54, > 61, 48, 125, 44, 36, 123, 55, 61, 48, 125, 44, 36, 123, 56, 61, 36, > 55, 125, 44, 36, 123, 57, 61, 36, 56, 125, 44, 36, 123, 49, 48, 61, > 50, 53, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, > 101, 97, 116, 101, 32, 36, 49, 120, 36, 50, 32, 116, 97, 113, 117, 105, > 110, 32, 112, 117, 122, 122, 108, 101, 32, 102, 114, 111, 109, 32, 105, 109, > 97, 103, 101, 32, 36, 63, 44, 32, 119, 105, 116, 104, 32, 114, 101, 108, > 105, 101, 102, 32, 36, 52, 44, 32, 98, 111, 114, 100, 101, 114, 32, 116, > 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, 53, 44, 32, 98, 111, 114, > 100, 101, 114, 32, 111, 117, 116, 108, 105, 110, 101, 32, 36, 54, 32, 97, > 110, 100, 32, 111, 117, 116, 108, 105, 110, 101, 32, 99, 111, 108, 111, 114, > 32, 40, 36, 123, 55, 45, 45, 49, 125, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 115, > 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, > 32, 45, 114, 32, 64, 123, 45, 109, 105, 110, 95, 119, 104, 125, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 10, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 10, 45, 105, 102, 32, 64, > 123, 34, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 36, 53, > 34, 125, 32, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, > 93, 32, 123, 49, 48, 48, 42, 36, 53, 47, 50, 125, 37, 44, 123, 49, > 48, 48, 42, 36, 53, 47, 50, 125, 37, 44, 123, 49, 48, 48, 45, 53, > 48, 42, 36, 53, 125, 37, 44, 123, 49, 48, 48, 45, 53, 48, 42, 36, > 53, 125, 37, 44, 49, 44, 48, 10, 45, 101, 108, 115, 101, 32, 45, 114, > 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 36, 53, 44, > 36, 53, 44, 123, 119, 45, 49, 45, 36, 53, 125, 44, 123, 104, 45, 49, > 45, 36, 53, 125, 44, 49, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 91, 45, 49, 93, 32, 39, 49, 45, 50, 42, 40, 120, 60, 121, > 41, 39, 32, 45, 42, 91, 45, 49, 93, 32, 36, 52, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, > 62, 44, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 91, 48, 93, 32, 45, 43, 91, 48, 93, 32, 91, 45, > 49, 93, 32, 45, 97, 91, 94, 45, 49, 93, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 102, 114, 97, 109, 101, > 32, 36, 54, 44, 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 10, 45, > 105, 102, 32, 123, 36, 51, 61, 61, 51, 125, 32, 45, 102, 91, 45, 49, > 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 109, 118, 91, 36, 62, 93, 32, 123, 63, > 40, 64, 35, 41, 125, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, > 123, 36, 51, 61, 61, 49, 125, 32, 45, 102, 91, 48, 93, 32, 48, 32, > 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 50, 125, 32, 45, 102, > 91, 45, 49, 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, > 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, > 50, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 116, 117, 110, 110, 101, 108, 32, 58, 32, 95, 108, 101, > 118, 101, 108, 62, 61, 48, 44, 95, 102, 97, 99, 116, 111, 114, 62, 48, > 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 111, 112, 97, 99, 105, 116, > 121, 44, 95, 97, 110, 103, 108, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 116, 117, 110, 110, 101, 108, 32, 101, > 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 108, 101, 118, 101, 108, 61, 57, 39, 44, 32, 39, 102, > 97, 99, 116, 111, 114, 61, 56, 48, 37, 39, 44, 32, 39, 99, 120, 61, > 99, 121, 61, 48, 46, 53, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 97, 110, 103, 108, 101, 61, > 48, 39, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 117, 110, 110, 101, 108, > 32, 50, 48, 10, 116, 117, 110, 110, 101, 108, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 57, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 56, 48, 37, 125, 62, 48, 34, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 51, 61, 48, 46, 53, 125, 44, 36, 123, 52, > 61, 48, 46, 53, 125, 44, 36, 123, 53, 61, 48, 46, 49, 125, 44, 36, > 123, 54, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 116, 117, 110, 110, 101, 108, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 100, 101, 112, 116, 104, 32, 36, 49, 44, 32, 102, 97, > 99, 116, 111, 114, 32, 36, 50, 44, 32, 99, 101, 110, 116, 101, 114, 105, > 110, 103, 32, 40, 36, 51, 44, 36, 52, 41, 44, 32, 111, 112, 97, 99, > 105, 116, 121, 32, 36, 53, 32, 97, 110, 100, 32, 97, 110, 103, 108, 101, > 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 49, 32, 45, 45, 114, 91, 45, 49, 93, 32, > 36, 50, 44, 36, 50, 44, 49, 44, 49, 48, 48, 37, 44, 53, 10, 45, > 105, 102, 32, 36, 54, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 49, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 50, > 44, 45, 49, 93, 32, 36, 54, 44, 49, 44, 48, 32, 45, 101, 114, 111, > 100, 101, 91, 45, 49, 93, 32, 51, 32, 45, 106, 91, 45, 51, 93, 32, > 91, 45, 50, 93, 44, 123, 40, 64, 123, 45, 51, 44, 119, 125, 45, 119, > 41, 42, 36, 51, 125, 44, 123, 40, 64, 123, 45, 51, 44, 104, 125, 45, > 104, 41, 42, 36, 52, 125, 44, 48, 44, 48, 44, 36, 53, 44, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 108, 115, 101, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 42, 36, 51, 125, > 44, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 104, 41, 42, 36, 52, > 125, 44, 48, 44, 48, 44, 36, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, > 53, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 65, 114, 116, 105, 115, 116, 105, 99, 10, 35, 64, 103, 109, 105, > 99, 32, 98, 111, 120, 102, 105, 116, 116, 105, 110, 103, 32, 58, 32, 95, > 109, 105, 110, 95, 98, 111, 120, 95, 115, 105, 122, 101, 62, 61, 49, 44, > 95, 109, 97, 120, 95, 98, 111, 120, 95, 115, 105, 122, 101, 62, 61, 48, > 44, 95, 105, 110, 105, 116, 105, 97, 108, 95, 100, 101, 110, 115, 105, 116, > 121, 62, 61, 48, 44, 95, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, > 115, 62, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 98, 111, 120, 32, 102, 105, 116, 116, 105, 110, 103, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 44, 32, 97, 115, 32, 100, 105, > 115, 112, 108, 97, 121, 101, 100, 32, 116, 104, 101, 32, 119, 101, 98, 32, > 112, 97, 103, 101, 58, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 91, > 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 99, 111, 109, 112, 108, > 101, 120, 105, 102, 105, 99, 97, 116, 105, 111, 110, 46, 110, 101, 116, 47, > 103, 97, 108, 108, 101, 114, 121, 47, 109, 97, 99, 104, 105, 110, 101, 115, > 47, 98, 111, 120, 70, 105, 116, 116, 105, 110, 103, 73, 109, 103, 47, 93, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 109, 105, 110, 95, 98, > 111, 120, 95, 115, 105, 122, 101, 61, 49, 39, 44, 32, 39, 109, 97, 120, > 95, 98, 111, 120, 95, 115, 105, 122, 101, 61, 48, 39, 44, 32, 39, 105, > 110, 105, 116, 105, 97, 108, 95, 100, 101, 110, 115, 105, 116, 121, 61, 48, > 46, 49, 39, 32, 97, 110, 100, 32, 39, 110, 98, 95, 116, 114, 105, 101, > 115, 61, 51, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 111, 120, > 102, 105, 116, 116, 105, 110, 103, 32, 44, 10, 98, 111, 120, 102, 105, 116, > 116, 105, 110, 103, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 51, 125, 41, 32, 38, 38, 32, > 36, 49, 62, 61, 49, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, > 123, 50, 61, 48, 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, 48, 32, > 38, 38, 32, 36, 123, 51, 61, 48, 46, 49, 125, 62, 61, 48, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 52, 61, 51, 125, 41, 32, > 38, 38, 32, 36, 52, 62, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 98, 111, 120, 32, 102, 105, 116, > 116, 105, 110, 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 98, 111, 120, > 32, 115, 105, 122, 101, 115, 32, 40, 36, 49, 44, 36, 50, 41, 44, 32, > 100, 101, 110, 115, 105, 116, 121, 32, 36, 51, 32, 97, 110, 100, 32, 36, > 52, 32, 97, 116, 116, 101, 109, 112, 116, 115, 46, 34, 10, 45, 118, 32, > 45, 10, 109, 105, 110, 95, 115, 105, 122, 101, 61, 36, 49, 10, 109, 97, > 120, 95, 115, 105, 122, 101, 61, 123, 105, 102, 40, 36, 50, 44, 36, 50, > 44, 109, 97, 120, 40, 119, 44, 104, 41, 41, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 110, 98, > 95, 97, 116, 116, 101, 109, 112, 116, 115, 61, 48, 32, 112, 114, 101, 99, > 61, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 49, 101, 56, 10, 45, 105, 102, 32, 123, 36, 62, > 60, 49, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, > 111, 105, 115, 101, 91, 45, 49, 93, 32, 123, 109, 97, 120, 40, 49, 101, > 45, 51, 44, 36, 51, 41, 125, 44, 50, 10, 45, 101, 108, 115, 101, 10, > 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, > 32, 45, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 109, 97, 120, 95, 112, > 97, 116, 99, 104, 91, 45, 49, 93, 32, 123, 114, 111, 117, 110, 100, 40, > 36, 112, 114, 101, 99, 42, 36, 109, 105, 110, 95, 115, 105, 122, 101, 41, > 125, 10, 112, 114, 101, 99, 61, 123, 109, 97, 120, 40, 49, 44, 36, 112, > 114, 101, 99, 42, 48, 46, 57, 41, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 36, 109, 105, > 110, 95, 115, 105, 122, 101, 32, 45, 97, 114, 101, 97, 95, 102, 103, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 113, 91, 45, 49, 93, 32, > 123, 40, 36, 109, 105, 110, 95, 115, 105, 122, 101, 41, 94, 50, 125, 10, > 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, 32, 51, 32, 45, > 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 97, 114, 101, 97, 95, 102, 103, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 101, 113, 91, 45, 49, 93, 32, 123, 40, 36, 109, > 105, 110, 95, 115, 105, 122, 101, 41, 94, 50, 125, 10, 45, 105, 102, 32, > 123, 33, 105, 77, 125, 32, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, > 115, 61, 123, 36, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, 43, > 49, 125, 32, 45, 105, 102, 32, 123, 36, 110, 98, 95, 97, 116, 116, 101, > 109, 112, 116, 115, 62, 36, 52, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 108, 115, 101, 32, 110, 98, 95, 97, 116, 116, 101, 109, 112, 116, 115, > 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, > 40, 40, 36, 109, 97, 120, 95, 115, 105, 122, 101, 45, 36, 109, 105, 110, > 95, 115, 105, 122, 101, 41, 47, 50, 41, 125, 10, 45, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 97, 114, 101, 97, 95, > 102, 103, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 113, 91, 45, > 49, 93, 32, 123, 40, 36, 109, 105, 110, 95, 115, 105, 122, 101, 43, 50, > 42, 36, 62, 43, 50, 41, 94, 50, 125, 10, 45, 105, 102, 32, 123, 33, > 105, 77, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 98, 114, 101, > 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, 111, 114, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, 101, > 10, 45, 98, 108, 101, 110, 100, 32, 115, 104, 97, 112, 101, 97, 118, 101, > 114, 97, 103, 101, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 97, > 114, 116, 111, 111, 110, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 44, 95, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 44, > 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 116, > 104, 105, 99, 107, 110, 101, 115, 115, 62, 61, 48, 44, 95, 99, 111, 108, > 111, 114, 62, 61, 48, 44, 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, > 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 99, 97, 114, 116, 111, 111, 110, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 51, 39, 44, 32, > 39, 115, 104, 97, 114, 112, 101, 110, 105, 110, 103, 61, 49, 53, 48, 39, > 44, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 48, 39, > 44, 32, 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 48, 46, 50, > 53, 39, 44, 32, 39, 99, 111, 108, 111, 114, 61, 49, 46, 53, 39, 32, > 97, 110, 100, 32, 39, 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, 111, > 110, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 97, 114, > 116, 111, 111, 110, 32, 51, 44, 56, 48, 44, 49, 53, 10, 99, 97, 114, > 116, 111, 111, 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 51, 125, 44, 36, 123, 50, 61, 49, 53, 48, 125, 44, 36, 123, 51, > 61, 50, 48, 125, 44, 36, 123, 52, 61, 48, 46, 50, 53, 125, 44, 36, > 123, 53, 61, 49, 46, 53, 125, 44, 36, 123, 54, 61, 56, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 97, > 114, 116, 111, 111, 110, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 44, 32, 115, 104, 97, > 114, 112, 101, 110, 105, 110, 103, 32, 36, 50, 44, 32, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 32, 36, 51, 44, 32, 116, 104, 105, 99, 107, 110, > 101, 115, 115, 32, 36, 52, 44, 32, 99, 111, 108, 111, 114, 32, 36, 53, > 32, 97, 110, 100, 32, 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, 111, > 110, 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, > 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 98, 32, 36, 49, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 50, 44, 49, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 10, 45, 45, 101, 100, 103, 101, 115, 32, 36, 51, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 52, 32, 45, 103, 101, 91, 45, 49, 93, 32, 48, 46, > 57, 10, 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 50, 93, 32, 45, > 115, 91, 45, 50, 93, 32, 99, 32, 45, 42, 91, 45, 51, 44, 45, 50, > 93, 32, 36, 53, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, > 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 50, 93, 32, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 45, 50, 93, 32, 36, 54, 44, 49, > 44, 48, 32, 45, 110, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 42, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 99, 105, 114, 99, 108, 105, 115, 109, 32, 58, > 32, 95, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 62, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 95, 109, 97, 120, 62, 48, 44, 95, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 95, 108, 105, 110, 101, 97, 114, 105, 116, 121, > 62, 61, 48, 44, 95, 108, 111, 99, 97, 116, 105, 111, 110, 95, 108, 105, > 110, 101, 97, 114, 105, 116, 121, 62, 61, 48, 44, 95, 115, 104, 97, 112, > 101, 61, 123, 48, 61, 115, 113, 117, 97, 114, 101, 115, 32, 124, 32, 49, > 61, 100, 105, 97, 109, 111, 110, 100, 115, 32, 124, 32, 50, 61, 99, 105, > 114, 99, 108, 101, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 99, 105, 114, 99, 108, 105, 115, 109, 32, 101, > 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 32, 40, 101, 102, 102, 101, 99, 116, > 32, 105, 110, 115, 112, 105, 114, 101, 100, 32, 98, 121, 32, 66, 101, 110, > 32, 72, 101, 105, 110, 101, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 61, 50, 39, > 44, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 97, 120, 61, 50, 48, > 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, > 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 95, 108, 105, 110, 101, 97, > 114, 105, 116, 121, 61, 48, 46, 52, 39, 44, 32, 39, 108, 111, 99, 97, > 116, 105, 111, 110, 95, 108, 105, 110, 101, 97, 114, 105, 116, 121, 61, 51, > 39, 32, 97, 110, 100, 32, 39, 115, 104, 97, 112, 101, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 99, 105, 114, 99, 108, 105, 115, 109, > 32, 44, 10, 99, 105, 114, 99, 108, 105, 115, 109, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, 125, 62, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 50, 48, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 51, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 52, 61, > 48, 46, 52, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, 51, 125, > 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 54, 61, 50, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 99, 105, 114, 99, 108, 105, 115, 109, 32, 101, 102, 102, 101, 99, 116, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 114, 97, 100, 105, 105, 32, 40, 36, 49, 44, 36, 50, 41, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, > 114, 97, 100, 105, 117, 115, 32, 108, 105, 110, 101, 97, 114, 105, 116, 121, > 32, 36, 52, 32, 97, 110, 100, 32, 108, 111, 99, 97, 116, 105, 111, 110, > 32, 108, 105, 110, 101, 97, 114, 105, 116, 121, 32, 36, 53, 46, 92, 110, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 103, 114, 97, 100, 105, > 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 51, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 45, > 94, 91, 45, 49, 93, 32, 36, 53, 32, 45, 94, 91, 45, 50, 93, 32, > 36, 52, 32, 115, 117, 109, 103, 48, 61, 64, 123, 45, 49, 44, 43, 125, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 105, 116, 61, 48, 32, > 102, 97, 105, 108, 101, 100, 61, 48, 32, 110, 111, 101, 100, 103, 101, 115, > 61, 48, 32, 115, 118, 103, 61, 34, 45, 49, 44, 45, 49, 34, 10, 45, > 100, 111, 10, 45, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 49, 44, 51, 10, 45, 105, 102, 32, 36, 110, 111, 101, 100, 103, > 101, 115, 32, 120, 121, 122, 99, 61, 64, 123, 45, 49, 44, 67, 125, 32, > 45, 101, 108, 115, 101, 32, 45, 45, 42, 91, 45, 51, 44, 45, 49, 93, > 32, 120, 121, 122, 99, 61, 64, 123, 45, 49, 44, 67, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 110, 61, 64, > 123, 45, 52, 44, 40, 36, 120, 121, 122, 99, 41, 125, 10, 120, 61, 123, > 97, 114, 103, 40, 49, 44, 36, 120, 121, 122, 99, 41, 125, 10, 121, 61, > 123, 97, 114, 103, 40, 50, 44, 36, 120, 121, 122, 99, 41, 125, 10, 114, > 61, 123, 109, 105, 110, 40, 109, 97, 120, 40, 36, 49, 44, 36, 50, 42, > 40, 49, 45, 36, 110, 41, 41, 44, 115, 113, 114, 116, 40, 64, 123, 45, > 49, 44, 40, 36, 120, 121, 122, 99, 41, 125, 41, 45, 50, 41, 125, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 114, 62, > 61, 36, 49, 125, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 50, 125, > 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, 120, > 44, 36, 121, 44, 36, 114, 44, 36, 114, 44, 48, 44, 49, 44, 49, 32, > 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 50, 93, 32, 36, 120, 44, > 36, 121, 44, 123, 36, 114, 43, 36, 49, 125, 44, 123, 36, 114, 43, 36, > 49, 125, 44, 48, 44, 49, 44, 45, 49, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 54, 61, 61, 49, 125, 10, 120, 48, 61, 123, 36, 120, 45, 36, > 114, 47, 50, 125, 32, 121, 48, 61, 123, 36, 121, 45, 36, 114, 47, 50, > 125, 32, 120, 49, 61, 123, 36, 120, 43, 36, 114, 47, 50, 125, 32, 121, > 49, 61, 123, 36, 121, 43, 36, 114, 47, 50, 125, 10, 45, 114, 101, 99, > 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 36, 120, 48, 44, 36, > 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 49, 44, 49, 10, 120, > 48, 61, 123, 36, 120, 45, 40, 36, 114, 43, 36, 49, 41, 47, 50, 125, > 32, 121, 48, 61, 123, 36, 121, 45, 40, 36, 114, 43, 36, 49, 41, 47, > 50, 125, 32, 120, 49, 61, 123, 36, 120, 43, 40, 36, 114, 43, 36, 49, > 41, 47, 50, 125, 32, 121, 49, 61, 123, 36, 121, 43, 40, 36, 114, 43, > 36, 49, 41, 47, 50, 125, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, > 101, 91, 45, 50, 93, 32, 36, 120, 48, 44, 36, 121, 48, 44, 36, 120, > 49, 44, 36, 121, 49, 44, 49, 44, 45, 49, 10, 45, 101, 108, 115, 101, > 10, 120, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, 120, 45, 36, 114, > 47, 50, 41, 125, 32, 121, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, > 121, 45, 36, 114, 47, 50, 41, 125, 32, 120, 49, 61, 123, 114, 111, 117, > 110, 100, 40, 36, 120, 43, 36, 114, 47, 50, 41, 125, 32, 121, 49, 61, > 123, 114, 111, 117, 110, 100, 40, 36, 121, 43, 36, 114, 47, 50, 41, 125, > 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, > 36, 120, 48, 44, 36, 121, 44, 36, 120, 44, 36, 121, 48, 44, 36, 120, > 49, 44, 36, 121, 44, 36, 120, 44, 36, 121, 49, 44, 49, 44, 49, 10, > 120, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, 120, 45, 40, 36, 114, > 43, 36, 49, 41, 47, 50, 41, 125, 32, 121, 48, 61, 123, 114, 111, 117, > 110, 100, 40, 36, 121, 45, 40, 36, 114, 43, 36, 49, 41, 47, 50, 41, > 125, 32, 120, 49, 61, 123, 114, 111, 117, 110, 100, 40, 36, 120, 43, 40, > 36, 114, 43, 36, 49, 41, 47, 50, 41, 125, 32, 121, 49, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 121, 43, 40, 36, 114, 43, 36, 49, 41, 47, > 50, 41, 125, 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 50, 93, > 32, 52, 44, 36, 120, 48, 44, 36, 121, 44, 36, 120, 44, 36, 121, 48, > 44, 36, 120, 49, 44, 36, 121, 44, 36, 120, 44, 36, 121, 49, 44, 49, > 44, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 102, 97, 105, 108, 101, > 100, 61, 48, 10, 45, 101, 108, 115, 101, 10, 45, 61, 91, 45, 50, 93, > 32, 45, 49, 44, 36, 120, 44, 36, 121, 10, 102, 97, 105, 108, 101, 100, > 61, 123, 36, 102, 97, 105, 108, 101, 100, 43, 49, 125, 10, 45, 105, 102, > 32, 123, 36, 102, 97, 105, 108, 101, 100, 61, 61, 49, 48, 48, 125, 32, > 102, 97, 105, 108, 101, 100, 61, 48, 32, 45, 105, 102, 32, 36, 110, 111, > 101, 100, 103, 101, 115, 32, 110, 61, 45, 49, 32, 45, 101, 108, 115, 101, > 32, 110, 111, 101, 100, 103, 101, 115, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 105, 116, 61, 123, 36, 105, 116, 43, 49, 125, 10, 45, 105, 102, 32, 123, > 33, 40, 36, 105, 116, 37, 53, 48, 41, 125, 10, 112, 61, 123, 114, 111, > 117, 110, 100, 40, 49, 48, 48, 42, 40, 40, 36, 115, 117, 109, 103, 48, > 45, 64, 123, 45, 50, 44, 43, 125, 41, 47, 64, 123, 45, 50, 44, 119, > 104, 125, 41, 94, 51, 41, 125, 10, 45, 114, 112, 114, 111, 103, 114, 101, > 115, 115, 32, 36, 112, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 92, 114, 32, 32, 34, 36, 112, 37, 32, 45, 118, 32, 45, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 110, > 62, 61, 48, 125, 10, 45, 114, 109, 91, 45, 51, 44, 45, 50, 93, 32, > 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 45, 49, 10, 45, 98, > 108, 101, 110, 100, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, > 101, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, > 95, 101, 108, 108, 105, 112, 115, 101, 115, 32, 58, 32, 95, 99, 111, 117, > 110, 116, 62, 48, 44, 95, 114, 97, 100, 105, 117, 115, 62, 61, 48, 44, > 95, 111, 112, 97, 99, 105, 116, 121, 62, 61, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 65, 100, 100, 32, 114, 97, 110, 100, 111, 109, 32, > 99, 111, 108, 111, 114, 32, 101, 108, 108, 105, 112, 115, 101, 115, 32, 116, > 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 117, > 110, 116, 61, 52, 48, 48, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 48, 46, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 111, > 108, 111, 114, 95, 101, 108, 108, 105, 112, 115, 101, 115, 32, 44, 44, 48, > 46, 49, 53, 10, 99, 111, 108, 111, 114, 95, 101, 108, 108, 105, 112, 115, > 101, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, > 52, 48, 48, 125, 44, 36, 123, 50, 61, 53, 125, 44, 36, 123, 51, 61, > 48, 46, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, > 100, 32, 36, 49, 32, 114, 97, 110, 100, 111, 109, 32, 99, 111, 108, 111, > 114, 32, 101, 108, 108, 105, 112, 115, 101, 115, 32, 116, 111, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 109, 97, 120, 105, > 109, 117, 109, 32, 114, 97, 100, 105, 117, 115, 32, 36, 50, 32, 97, 110, > 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 123, 63, 40, 48, 44, 49, 48, 48, > 41, 125, 37, 44, 123, 63, 40, 48, 44, 49, 48, 48, 41, 125, 37, 44, > 123, 63, 40, 48, 44, 36, 50, 41, 125, 37, 44, 123, 63, 40, 48, 44, > 36, 50, 41, 125, 37, 44, 123, 63, 40, 48, 44, 51, 54, 48, 41, 125, > 44, 36, 51, 44, 123, 63, 40, 54, 48, 44, 50, 53, 53, 41, 125, 44, > 123, 63, 40, 54, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 54, > 48, 44, 50, 53, 53, 41, 125, 44, 50, 53, 53, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 99, 117, > 98, 105, 115, 109, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, > 61, 48, 44, 48, 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 60, 61, 53, 48, 44, 95, 109, 97, 120, 95, 97, 110, 103, 108, 101, 44, > 95, 111, 112, 97, 99, 105, 116, 121, 44, 95, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 99, 117, 98, 105, 115, 109, 32, 101, 102, > 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 53, 48, 39, 44, 32, > 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 49, 48, 39, 44, 32, > 39, 109, 97, 120, 95, 97, 110, 103, 108, 101, 61, 55, 53, 39, 44, 32, > 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, 46, 55, 39, 32, 97, 110, > 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 117, 98, 105, 115, 109, 32, > 44, 10, 99, 117, 98, 105, 115, 109, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 53, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 50, 61, 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 50, 60, 61, 53, 48, 32, 38, 38, 32, 36, 123, 53, 61, 48, 125, 62, > 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, 55, 53, > 125, 44, 36, 123, 52, 61, 48, 46, 55, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 99, 117, 98, 105, 115, 109, > 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, 121, > 32, 36, 49, 44, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, > 50, 44, 32, 109, 97, 120, 105, 109, 117, 109, 32, 97, 110, 103, 108, 101, > 32, 36, 51, 32, 100, 101, 103, 46, 44, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 52, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 32, 36, 53, 46, 34, 10, 45, 105, 102, 32, 123, 34, 33, > 36, 49, 32, 124, 124, 32, 33, 36, 50, 32, 124, 124, 32, 33, 36, 51, > 32, 124, 124, 32, 33, 36, 52, 34, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 115, 61, 123, 115, > 125, 10, 80, 61, 123, 114, 111, 117, 110, 100, 40, 36, 50, 42, 109, 97, > 120, 40, 119, 44, 104, 41, 47, 50, 48, 48, 41, 125, 10, 78, 61, 123, > 114, 111, 117, 110, 100, 40, 49, 46, 53, 42, 36, 49, 42, 119, 42, 104, > 47, 40, 52, 42, 36, 80, 41, 47, 49, 48, 48, 41, 125, 10, 40, 123, > 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, 43, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 40, 123, 52, 42, 36, 78, 125, 59, 36, 78, > 41, 10, 49, 44, 36, 78, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 36, 80, 44, 123, 36, 119, 45, 49, 45, 36, 80, 125, 32, 45, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 36, 80, 44, 123, 36, 104, 45, > 49, 45, 36, 80, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 120, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 45, 45, 43, > 91, 45, 49, 93, 32, 39, 45, 36, 80, 44, 45, 36, 80, 39, 32, 45, > 45, 43, 91, 45, 50, 93, 32, 39, 36, 80, 44, 45, 36, 80, 39, 32, > 45, 45, 43, 91, 45, 51, 93, 32, 39, 36, 80, 44, 36, 80, 39, 32, > 45, 45, 43, 91, 45, 52, 93, 32, 39, 45, 36, 80, 44, 36, 80, 39, > 10, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 105, 91, > 45, 50, 93, 32, 40, 49, 50, 44, 48, 44, 49, 44, 50, 44, 51, 59, > 49, 50, 44, 123, 52, 42, 40, 36, 78, 45, 49, 41, 125, 44, 123, 52, > 42, 40, 36, 78, 45, 49, 41, 43, 49, 125, 44, 123, 52, 42, 40, 36, > 78, 45, 49, 41, 43, 50, 125, 44, 123, 52, 42, 40, 36, 78, 45, 49, > 41, 43, 51, 125, 41, 10, 45, 114, 91, 45, 50, 93, 32, 53, 44, 36, > 78, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, 100, 91, 45, > 50, 93, 32, 49, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, > 10, 49, 44, 36, 78, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 123, 50, 50, 53, 45, 36, 51, 125, 44, 123, 50, 50, 53, 43, 36, 51, > 125, 32, 45, 42, 91, 45, 49, 93, 32, 123, 112, 105, 47, 49, 56, 48, > 125, 10, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 99, 111, 115, > 91, 45, 50, 93, 32, 45, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, > 91, 45, 51, 93, 32, 45, 97, 91, 45, 52, 45, 45, 51, 93, 32, 120, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 122, 91, > 45, 52, 44, 45, 50, 44, 45, 49, 93, 32, 48, 44, 50, 32, 45, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 49, 32, 45, 97, 91, 45, > 52, 45, 45, 49, 93, 32, 120, 32, 45, 42, 91, 45, 49, 93, 32, 123, > 115, 113, 114, 116, 40, 50, 41, 42, 36, 80, 125, 10, 45, 114, 91, 45, > 51, 93, 32, 52, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 48, 44, 50, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, 10, 40, > 45, 49, 50, 56, 59, 36, 119, 59, 36, 104, 59, 36, 115, 41, 32, 45, > 45, 98, 91, 48, 93, 32, 36, 53, 10, 45, 105, 102, 32, 123, 36, 78, > 62, 49, 125, 32, 52, 44, 123, 36, 78, 45, 49, 125, 44, 49, 44, 49, > 44, 45, 49, 50, 56, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 49, 10, 45, 121, > 91, 49, 45, 45, 49, 93, 32, 45, 97, 91, 49, 45, 45, 49, 93, 32, > 121, 32, 45, 114, 118, 51, 100, 91, 45, 49, 93, 10, 45, 105, 102, 32, > 123, 36, 52, 62, 61, 49, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 50, 44, 48, 44, 48, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, > 108, 115, 101, 32, 45, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, > 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 50, 44, > 48, 44, 48, 32, 45, 114, 109, 91, 49, 93, 32, 45, 98, 108, 101, 110, > 100, 32, 97, 108, 112, 104, 97, 44, 36, 52, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 114, 97, 119, 95, 119, > 104, 105, 114, 108, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 119, 104, 105, 114, 108, 32, 100, 114, 97, 119, 105, 110, > 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, > 49, 48, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 114, 97, > 119, 95, 119, 104, 105, 114, 108, 32, 44, 10, 100, 114, 97, 119, 95, 119, > 104, 105, 114, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 49, 48, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 119, 104, 105, 114, 108, 32, 100, 114, 97, 119, 105, > 110, 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, > 91, 45, 49, 93, 32, 55, 48, 44, 50, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 97, 110, 100, 91, 45, 49, 44, 45, 50, 93, 32, 45, 115, 109, > 111, 111, 116, 104, 91, 45, 49, 93, 32, 36, 49, 44, 48, 44, 49, 44, > 50, 44, 50, 10, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 113, 117, 97, > 108, 105, 122, 101, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 100, 114, 97, 119, 105, 110, 103, 32, 58, 32, 95, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 100, 114, 97, 119, 105, 110, 103, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 50, 48, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 100, 114, 97, 119, 105, > 110, 103, 32, 44, 10, 100, 114, 97, 119, 105, 110, 103, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 50, 48, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 100, 114, 97, > 119, 105, 110, 103, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 108, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, > 115, 109, 111, 111, 116, 104, 32, 36, 49, 44, 48, 46, 50, 44, 49, 44, > 51, 44, 51, 32, 45, 98, 32, 50, 32, 45, 115, 104, 97, 114, 112, 101, > 110, 32, 49, 48, 48, 48, 32, 91, 48, 93, 10, 45, 114, 91, 48, 93, > 32, 50, 48, 44, 50, 48, 44, 49, 44, 51, 44, 50, 32, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 48, 93, 32, 45, 105, 110, 100, 101, 120, > 91, 49, 93, 32, 91, 48, 93, 44, 49, 44, 49, 10, 45, 110, 109, 91, > 49, 93, 32, 64, 123, 48, 44, 110, 125, 44, 49, 32, 45, 114, 109, 91, > 48, 93, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 32, 58, 32, 95, 111, 102, 102, 115, 101, 116, 95, 120, 91, 37, 93, > 44, 95, 111, 102, 102, 115, 101, 116, 95, 121, 91, 37, 93, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, > 48, 60, 61, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, 60, 61, 49, > 44, 95, 101, 120, 112, 97, 110, 100, 95, 115, 105, 122, 101, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 114, 111, 112, 32, 115, 104, 97, 100, 111, 119, 32, 98, 101, 104, > 105, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 111, > 102, 102, 115, 101, 116, 95, 120, 61, 50, 48, 39, 44, 32, 39, 111, 102, > 102, 115, 101, 116, 95, 121, 61, 111, 102, 102, 115, 101, 116, 95, 120, 39, > 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 53, 39, > 44, 32, 39, 99, 117, 114, 118, 97, 116, 117, 114, 101, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 101, 120, 112, 97, 110, 100, 95, 115, 105, 122, 101, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 100, 114, 111, 112, 95, > 115, 104, 97, 100, 111, 119, 32, 49, 48, 44, 50, 48, 44, 53, 44, 48, > 46, 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 50, 48, > 44, 48, 32, 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, > 10, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 51, 61, 53, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 52, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 52, 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 50, 48, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, > 53, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 68, 114, > 111, 112, 32, 115, 104, 97, 100, 111, 119, 32, 98, 101, 104, 105, 110, 100, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, > 102, 102, 115, 101, 116, 115, 32, 40, 36, 49, 44, 36, 50, 41, 44, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 32, 97, 110, > 100, 32, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 36, 52, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 97, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 100, 120, > 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, > 110, 116, 92, 32, 36, 49, 125, 44, 119, 42, 36, 49, 44, 36, 49, 41, > 125, 10, 100, 121, 61, 123, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 50, 125, 44, 104, 42, 36, 50, > 44, 36, 50, 41, 125, 10, 115, 105, 103, 109, 97, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 51, 125, 44, 109, 97, 120, 40, 119, 44, 104, 41, 42, 36, 51, 44, 36, > 51, 41, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, > 115, 61, 123, 115, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 49, 48, 48, 37, 32, 99, 111, 111, 114, 100, 115, 61, 64, 123, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, 115, 91, > 45, 49, 93, 92, 32, 48, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 122, 32, 36, 99, 111, 111, 114, 100, 115, 10, 45, 114, 32, 123, 119, > 43, 97, 98, 115, 40, 36, 100, 120, 41, 125, 44, 123, 104, 43, 97, 98, > 115, 40, 36, 100, 121, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 123, 105, 102, 40, 36, 100, 120, 62, 48, 44, 48, 44, 49, > 41, 125, 44, 123, 105, 102, 40, 36, 100, 121, 62, 48, 44, 48, 44, 49, > 41, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 52, 42, 36, > 115, 105, 103, 109, 97, 125, 44, 123, 104, 43, 52, 42, 36, 115, 105, 103, > 109, 97, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 49, 93, 32, 49, 48, 48, 37, 10, 45, 105, 102, 32, 123, > 33, 36, 52, 125, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, > 36, 100, 120, 44, 36, 100, 121, 10, 45, 101, 108, 115, 101, 10, 40, 48, > 59, 123, 112, 105, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 51, 32, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 45, 36, 52, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 100, 120, 10, 40, 48, 44, > 123, 112, 105, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 51, 32, 45, 115, 105, 110, 91, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 36, 52, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 42, 91, 45, 49, 93, 32, 36, 100, 121, 10, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 45, > 49, 93, 32, 36, 115, 105, 103, 109, 97, 44, 48, 10, 45, 114, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 48, 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, > 112, 104, 97, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 32, 45, 103, 101, 91, 45, 49, 93, 32, > 49, 32, 45, 42, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, > 10, 45, 105, 102, 32, 123, 33, 36, 53, 125, 32, 36, 119, 44, 36, 104, > 44, 49, 44, 36, 115, 32, 45, 106, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 123, 97, 114, 103, 40, 49, 44, 36, 99, 111, 111, 114, 100, 115, > 41, 125, 44, 123, 97, 114, 103, 40, 50, 44, 36, 99, 111, 111, 114, 100, > 115, 41, 125, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 101, 108, 108, 105, 112, > 115, 105, 111, 110, 105, 115, 109, 32, 58, 32, 95, 82, 62, 48, 91, 37, > 93, 44, 95, 114, 62, 48, 91, 37, 93, 44, 95, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 62, 61, 48, 91, 37, 93, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 44, 95, 111, 117, 116, 108, 105, 110, 101, 62, 48, 44, > 95, 100, 101, 110, 115, 105, 116, 121, 62, 48, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 101, 108, 108, 105, 112, 115, > 105, 111, 110, 105, 115, 109, 32, 102, 105, 108, 116, 101, 114, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 82, 61, 49, 48, > 39, 44, 32, 39, 114, 61, 51, 39, 44, 32, 39, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 61, 49, 37, 39, 44, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 48, 46, 55, 39, 44, 32, 39, 111, 117, 116, 108, 105, > 115, 101, 61, 56, 39, 32, 97, 110, 100, 32, 39, 100, 101, 110, 115, 105, > 116, 121, 61, 48, 46, 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 101, 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 44, 10, 101, > 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 58, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 125, 62, 48, 32, > 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 53, 61, 56, 125, 62, 48, 32, 38, 38, 32, 36, 123, 54, 61, 48, > 46, 54, 125, 62, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, > 61, 49, 37, 125, 44, 36, 123, 52, 61, 48, 46, 55, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 101, 108, 108, > 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 102, 105, 108, 116, 101, 114, > 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 114, 97, 100, 105, 105, 32, 40, 36, 49, 44, 36, 50, 41, 44, > 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, > 111, 112, 97, 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, 100, 32, 111, > 117, 116, 108, 105, 110, 101, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 32, 45, 103, 91, 45, 49, 93, 32, 120, > 121, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 51, 32, 45, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 48, 44, 48, 32, 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 49, > 32, 45, 97, 116, 97, 110, 50, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 123, 49, 56, 48, 47, 112, 105, 125, > 32, 45, 43, 91, 45, 49, 93, 32, 57, 48, 32, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 49, 44, 49, 10, 91, 45, 50, 93, 44, 91, 45, 50, > 93, 44, 49, 44, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 36, 54, 42, 119, 42, 104, 47, 109, 97, 120, 40, 36, 49, 44, > 36, 50, 41, 125, 10, 120, 121, 61, 123, 63, 40, 119, 41, 125, 44, 123, > 63, 40, 104, 41, 125, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, > 49, 93, 32, 36, 120, 121, 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, > 50, 44, 40, 36, 120, 121, 41, 125, 44, 36, 52, 44, 92, 10, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 48, 41, 125, 44, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 49, 41, 125, 44, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 50, 41, 125, 44, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 51, 41, 125, 10, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, 120, 121, 44, 36, > 49, 44, 36, 50, 44, 64, 123, 45, 50, 44, 40, 36, 120, 121, 41, 125, > 44, 36, 52, 44, 48, 120, 49, 44, 92, 10, 123, 64, 123, 45, 51, 44, > 40, 36, 120, 121, 44, 48, 44, 48, 41, 125, 47, 36, 53, 125, 44, 123, > 64, 123, 45, 51, 44, 40, 36, 120, 121, 44, 48, 44, 49, 41, 125, 47, > 36, 53, 125, 44, 123, 64, 123, 45, 51, 44, 40, 36, 120, 121, 44, 48, > 44, 50, 41, 125, 47, 36, 53, 125, 44, 123, 64, 123, 45, 51, 44, 40, > 36, 120, 121, 44, 48, 44, 51, 41, 125, 47, 36, 53, 125, 10, 45, 100, > 111, 110, 101, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 98, 108, 101, 110, 100, 91, 45, > 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 102, 105, 114, 101, 95, 101, 100, 103, 101, 115, 32, 58, > 32, 95, 101, 100, 103, 101, 115, 62, 61, 48, 44, 48, 60, 61, 95, 97, > 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 60, 61, 49, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 62, 61, 48, 44, 95, 110, 98, 95, 102, > 114, 97, 109, 101, 115, 62, 48, 44, 95, 115, 116, 97, 114, 116, 105, 110, > 103, 95, 102, 114, 97, 109, 101, 62, 61, 48, 44, 102, 114, 97, 109, 101, > 95, 115, 107, 105, 112, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 102, 105, 114, 101, 32, > 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 101, 100, 103, 101, > 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 101, 100, 103, 101, 115, 61, 48, 46, 55, 39, 44, 32, 39, 97, 116, 116, > 101, 110, 117, 97, 116, 105, 111, 110, 61, 48, 46, 50, 53, 39, 44, 32, > 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 53, 39, > 44, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 53, 39, > 44, 32, 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 49, 39, 44, > 32, 39, 115, 116, 97, 114, 116, 105, 110, 103, 95, 102, 114, 97, 109, 101, > 61, 50, 48, 39, 32, 97, 110, 100, 32, 39, 102, 114, 97, 109, 101, 95, > 115, 107, 105, 112, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, > 105, 114, 101, 95, 101, 100, 103, 101, 115, 32, 44, 10, 102, 105, 114, 101, > 95, 101, 100, 103, 101, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 48, 46, 55, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 48, 46, 50, 53, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 50, 60, 61, 49, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, > 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 52, 61, 50, 53, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 53, 61, 49, 125, 62, 48, 32, 38, > 38, 32, 36, 123, 54, 61, 50, 48, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 55, 61, 48, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 102, 105, 114, > 101, 32, 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 101, 100, > 103, 101, 115, 32, 111, 102, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, > 119, 105, 116, 104, 32, 101, 100, 103, 101, 115, 32, 36, 49, 44, 32, 97, > 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 32, 36, 50, 44, 32, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 51, 44, 32, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 32, 36, 52, 44, 32, 34, 92, 10, 34, > 36, 53, 32, 102, 114, 97, 109, 101, 115, 44, 32, 115, 116, 97, 114, 116, > 105, 110, 103, 32, 102, 114, 97, 109, 101, 32, 36, 54, 32, 97, 110, 100, > 32, 102, 114, 97, 109, 101, 32, 115, 107, 105, 112, 32, 36, 55, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, > 125, 10, 45, 110, 111, 114, 109, 32, 45, 45, 103, 114, 97, 100, 105, 101, > 110, 116, 95, 110, 111, 114, 109, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 49, 32, 45, 114, 111, 117, 110, 100, 105, 102, 121, 91, 45, 49, 93, > 32, 36, 49, 32, 45, 102, 91, 48, 93, 32, 48, 10, 40, 48, 44, 48, > 44, 48, 59, 48, 44, 48, 44, 48, 59, 49, 44, 49, 44, 49, 59, 48, > 44, 49, 44, 48, 41, 32, 45, 42, 91, 45, 49, 93, 32, 123, 40, 49, > 45, 36, 50, 94, 52, 41, 47, 52, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 36, 53, 42, 40, 49, 43, 36, 55, 41, 43, 36, 54, 125, > 10, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 42, 91, 45, 49, 93, 32, 91, 49, 93, 10, 45, 98, 91, 45, 49, 93, > 32, 36, 51, 10, 45, 105, 102, 32, 36, 52, 32, 45, 103, 101, 91, 45, > 49, 93, 32, 36, 52, 37, 32, 45, 101, 108, 115, 101, 32, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 106, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 91, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, 91, 48, 93, 32, > 91, 50, 93, 10, 45, 105, 102, 32, 123, 36, 62, 62, 61, 36, 54, 34, > 32, 38, 38, 32, 34, 40, 36, 62, 45, 36, 54, 41, 37, 40, 36, 55, > 43, 49, 41, 61, 61, 48, 125, 32, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 45, 50, > 93, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 40, 48, 44, 50, 53, 53, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, > 44, 49, 50, 56, 44, 50, 53, 53, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 50, 53, 54, 44, 49, 44, 49, 44, 51, 44, 51, 10, 45, 109, 97, > 112, 91, 94, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 114, 97, 99, 116, 97, 108, 105, 122, 101, 32, 58, 32, 48, 60, 61, > 100, 101, 116, 97, 105, 108, 95, 108, 101, 118, 101, 108, 60, 61, 49, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 97, 110, 100, 111, 109, 108, > 121, 32, 102, 114, 97, 99, 116, 97, 108, 105, 122, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 100, 101, 116, 97, 105, 108, 95, 108, 101, > 118, 101, 108, 61, 48, 46, 56, 39, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 102, 114, 97, 99, 116, 97, 108, 105, 122, 101, 32, 44, 10, 102, 114, 97, > 99, 116, 97, 108, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 49, 61, 48, 46, 56, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 49, 60, 61, 49, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 82, 97, 110, 100, 111, 109, 108, 121, 32, 102, 114, 97, 99, 116, 97, > 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 100, 101, 116, 97, 105, 108, 32, 108, 101, 118, 101, 108, 32, > 36, 49, 46, 34, 10, 45, 118, 32, 45, 10, 120, 99, 61, 48, 46, 52, > 52, 51, 51, 10, 121, 99, 61, 48, 46, 50, 54, 52, 53, 10, 100, 101, > 108, 116, 97, 61, 48, 46, 49, 10, 99, 48, 114, 61, 48, 46, 51, 49, > 55, 10, 99, 48, 105, 61, 48, 46, 48, 51, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 32, 45, 101, 113, 117, 97, 108, 105, 122, > 101, 32, 50, 53, 54, 32, 45, 98, 32, 48, 46, 50, 53, 37, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 10, 100, 120, 61, 123, 36, 100, 101, 108, 116, 97, 42, 119, 47, 109, > 97, 120, 40, 119, 44, 104, 41, 125, 10, 100, 121, 61, 123, 36, 100, 101, > 108, 116, 97, 42, 104, 47, 109, 97, 120, 40, 119, 44, 104, 41, 125, 10, > 120, 48, 61, 123, 36, 120, 99, 45, 36, 100, 120, 47, 50, 125, 10, 121, > 48, 61, 123, 36, 121, 99, 45, 36, 100, 121, 47, 50, 125, 10, 120, 49, > 61, 123, 36, 120, 99, 43, 36, 100, 120, 47, 50, 125, 10, 121, 49, 61, > 123, 36, 121, 99, 43, 36, 100, 121, 47, 50, 125, 10, 45, 109, 97, 110, > 100, 101, 108, 98, 114, 111, 116, 91, 45, 49, 93, 32, 36, 120, 48, 44, > 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 50, 53, 54, 44, > 49, 44, 36, 99, 48, 114, 44, 36, 99, 48, 105, 10, 45, 45, 101, 113, > 91, 45, 49, 93, 32, 48, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 54, 10, 49, 54, > 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, > 54, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 109, 97, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 91, 45, 49, 93, 32, 99, 10, 45, 105, 91, 50, 44, 51, 93, > 32, 91, 48, 93, 10, 115, 61, 123, 48, 46, 49, 42, 40, 49, 45, 36, > 49, 41, 125, 10, 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 34, 45, > 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, 103, 105, > 100, 91, 48, 44, 49, 93, 32, 34, 36, 115, 34, 44, 53, 34, 44, 34, > 45, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, 103, > 105, 100, 91, 50, 44, 51, 93, 32, 34, 36, 115, 34, 44, 53, 34, 44, > 34, 45, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, > 103, 105, 100, 91, 52, 44, 53, 93, 32, 34, 36, 115, 34, 44, 53, 34, > 10, 45, 114, 109, 91, 48, 44, 50, 44, 52, 93, 32, 45, 97, 32, 99, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 103, 108, 111, 119, 32, 58, 32, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 115, 111, 102, 116, 32, > 103, 108, 111, 119, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 37, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 103, 108, 111, 119, 32, 44, 10, 103, > 108, 111, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 37, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, > 32, 115, 111, 102, 116, 32, 103, 108, 111, 119, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 45, 98, 91, 48, 93, 32, 36, 49, 32, 45, 110, 91, 45, 49, > 93, 32, 91, 48, 93, 32, 45, 98, 108, 101, 110, 100, 95, 101, 100, 103, > 101, 115, 91, 48, 44, 45, 49, 93, 32, 49, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 104, 97, 108, 102, 116, 111, 110, 101, > 32, 58, 32, 110, 98, 95, 108, 101, 118, 101, 108, 115, 62, 61, 50, 44, > 95, 115, 105, 122, 101, 95, 100, 97, 114, 107, 62, 61, 50, 44, 95, 115, > 105, 122, 101, 95, 98, 114, 105, 103, 104, 116, 62, 61, 50, 44, 95, 115, > 104, 97, 112, 101, 61, 123, 32, 48, 61, 115, 113, 117, 97, 114, 101, 32, > 124, 32, 49, 61, 100, 105, 97, 109, 111, 110, 100, 32, 124, 32, 50, 61, > 99, 105, 114, 99, 108, 101, 32, 124, 32, 51, 61, 105, 110, 118, 45, 115, > 113, 117, 97, 114, 101, 32, 124, 32, 52, 61, 105, 110, 118, 45, 100, 105, > 97, 109, 111, 110, 100, 32, 124, 32, 53, 61, 105, 110, 118, 45, 99, 105, > 114, 99, 108, 101, 32, 125, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 91, 37, 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 104, 97, 108, 102, 116, 111, 110, 101, > 32, 100, 105, 116, 104, 101, 114, 105, 110, 103, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 108, 101, 118, 101, > 108, 115, 61, 53, 39, 44, 32, 39, 115, 105, 122, 101, 95, 100, 97, 114, > 107, 61, 56, 39, 44, 32, 39, 115, 105, 122, 101, 95, 98, 114, 105, 103, > 104, 116, 61, 56, 39, 44, 32, 39, 115, 104, 97, 112, 101, 61, 53, 39, > 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 97, 108, > 102, 116, 111, 110, 101, 32, 44, 10, 104, 97, 108, 102, 116, 111, 110, 101, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 53, > 125, 62, 61, 50, 32, 38, 38, 32, 36, 123, 50, 61, 56, 125, 62, 61, > 50, 32, 38, 38, 32, 36, 123, 51, 61, 56, 125, 62, 61, 50, 32, 38, > 38, 32, 36, 123, 53, 61, 48, 125, 62, 61, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 52, 61, 53, 125, 10, 45, 118, 32, 45, 32, 115, > 48, 61, 34, 115, 113, 117, 97, 114, 101, 34, 32, 115, 49, 61, 34, 100, > 105, 97, 109, 111, 110, 100, 34, 32, 115, 50, 61, 34, 99, 105, 114, 99, > 108, 101, 34, 32, 115, 51, 61, 34, 105, 110, 118, 45, 115, 113, 117, 97, > 114, 101, 34, 32, 115, 52, 61, 34, 105, 110, 118, 45, 100, 105, 97, 109, > 111, 110, 100, 34, 32, 115, 53, 61, 34, 105, 110, 118, 45, 99, 105, 114, > 99, 108, 101, 34, 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 104, 97, 108, 102, 116, 111, 110, > 101, 32, 100, 105, 116, 104, 101, 114, 105, 110, 103, 32, 116, 111, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, > 108, 101, 118, 101, 108, 115, 44, 32, 100, 97, 114, 107, 32, 115, 105, 122, > 101, 32, 36, 51, 44, 32, 98, 114, 105, 103, 104, 116, 32, 115, 105, 122, > 101, 32, 36, 52, 44, 32, 34, 36, 123, 115, 36, 52, 125, 34, 32, 115, > 104, 97, 112, 101, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, > 101, 115, 115, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 32, 99, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 40, 48, 44, 50, 53, 53, 41, 32, 45, > 97, 32, 121, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 36, 49, > 44, 48, 32, 45, 114, 111, 119, 115, 32, 48, 44, 123, 104, 45, 50, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 115, 61, 123, 114, > 111, 117, 110, 100, 40, 40, 36, 50, 42, 36, 60, 43, 36, 51, 42, 36, > 62, 41, 47, 40, 36, 49, 45, 49, 41, 41, 125, 10, 36, 115, 44, 36, > 115, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 49, 44, 123, 36, 52, 37, 51, 125, 32, 45, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 48, 44, 50, 32, 45, 109, 105, 110, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 36, 52, 62, 61, 51, 125, 32, 45, 108, 116, 91, > 45, 49, 93, 32, 123, 49, 48, 48, 42, 36, 60, 47, 40, 36, 49, 45, > 49, 46, 49, 41, 125, 37, 32, 45, 42, 91, 45, 49, 93, 32, 123, 45, > 50, 53, 53, 125, 32, 45, 43, 91, 45, 49, 93, 32, 123, 50, 53, 53, > 45, 36, 62, 125, 10, 45, 101, 108, 115, 101, 32, 45, 108, 116, 91, 45, > 49, 93, 32, 123, 49, 48, 48, 42, 36, 62, 47, 40, 36, 49, 45, 49, > 46, 49, 41, 125, 37, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 91, 45, 49, 93, 32, 36, 62, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 50, 32, 45, 98, 91, 45, 49, 93, 32, 36, 53, 32, 45, 45, 101, 113, > 91, 45, 50, 93, 32, 36, 62, 32, 45, 42, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, > 101, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 97, > 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 97, 114, 100, 115, > 107, 101, 116, 99, 104, 98, 119, 32, 58, 32, 95, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 62, 61, 48, 44, 95, 100, 101, 110, 115, 105, 116, 121, > 62, 61, 48, 44, 95, 111, 112, 97, 99, 105, 116, 121, 44, 48, 60, 61, > 95, 101, 100, 103, 101, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 60, > 61, 49, 48, 48, 44, 95, 105, 115, 95, 102, 97, 115, 116, 61, 123, 32, > 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 112, 112, 108, 121, 32, 104, 97, 114, 100, 32, 66, 38, 87, 32, > 115, 107, 101, 116, 99, 104, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 61, 49, 48, 48, 48, 39, 44, 32, 39, 115, 97, > 109, 112, 108, 105, 110, 103, 61, 51, 39, 44, 32, 39, 111, 112, 97, 99, > 105, 116, 121, 61, 48, 46, 49, 39, 44, 32, 39, 101, 100, 103, 101, 95, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 61, 50, 48, 39, 32, 97, 110, > 100, 32, 39, 105, 115, 95, 102, 97, 115, 116, 61, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, > 98, 119, 32, 50, 48, 48, 44, 55, 48, 44, 48, 46, 49, 44, 49, 48, > 32, 45, 109, 101, 100, 105, 97, 110, 91, 45, 49, 93, 32, 50, 32, 45, > 45, 108, 111, 99, 97, 108, 32, 45, 114, 101, 118, 101, 114, 115, 101, 32, > 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, 51, 32, 45, 98, 108, 101, > 110, 100, 32, 111, 118, 101, 114, 108, 97, 121, 32, 45, 101, 110, 100, 108, > 111, 99, 97, 108, 10, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, > 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, > 48, 125, 44, 36, 123, 50, 61, 53, 48, 125, 44, 36, 123, 51, 61, 48, > 46, 49, 125, 44, 36, 123, 52, 61, 50, 48, 125, 44, 36, 123, 53, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 104, 97, 114, 100, 32, 66, 38, 87, 32, 115, 107, 101, 116, 99, > 104, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 49, 44, 32, 100, 101, 110, 115, 105, 116, 121, 32, > 36, 50, 44, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 51, 32, 97, > 110, 100, 32, 101, 100, 103, 101, 32, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 32, 36, 52, 46, 34, 10, 45, 105, 102, 32, 123, 33, 36, 50, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, 102, 32, > 50, 53, 53, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 45, 32, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 32, 45, 110, 32, 48, 44, 49, 10, 45, 105, 102, 32, 36, 53, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 110, 109, 61, 64, 123, 48, 44, 110, 125, 10, 45, 103, 32, > 120, 121, 32, 45, 114, 118, 32, 45, 42, 91, 45, 50, 93, 32, 45, 49, > 32, 45, 97, 32, 99, 10, 45, 105, 102, 32, 36, 52, 32, 45, 45, 110, > 111, 114, 109, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 52, 37, 32, > 45, 42, 32, 45, 101, 110, 100, 105, 102, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 113, 117, 105, > 118, 101, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 123, 109, 97, > 120, 40, 49, 44, 49, 48, 45, 36, 50, 47, 54, 41, 125, 44, 36, 49, > 44, 48, 44, 36, 51, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, > 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 32, 45, 103, 32, 120, 121, 32, 45, 114, 118, 32, 45, 42, 91, 45, > 50, 93, 32, 45, 49, 32, 45, 97, 32, 99, 32, 45, 42, 32, 36, 49, > 10, 45, 45, 110, 111, 114, 109, 32, 45, 103, 101, 91, 45, 49, 93, 32, > 36, 52, 37, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, > 111, 105, 115, 101, 91, 45, 49, 93, 32, 36, 50, 44, 50, 32, 45, 42, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 112, 111, 105, 110, 116, 99, 108, > 111, 117, 100, 51, 100, 91, 45, 49, 93, 32, 45, 115, 51, 100, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 54, 45, 45, 53, 44, 45, 51, 45, > 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, > 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 115, 91, 45, 49, 93, > 32, 120, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 32, 45, 45, 45, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 43, 91, 45, 51, 44, 45, 50, 93, > 32, 45, 115, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 105, 91, > 45, 51, 93, 32, 49, 44, 123, 104, 125, 32, 49, 44, 123, 104, 125, 32, > 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 120, 10, 45, 105, 91, 45, > 50, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, > 45, 105, 91, 45, 50, 93, 32, 40, 123, 50, 42, 104, 125, 44, 123, 104, > 125, 41, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, 32, 49, > 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, 42, 121, 32, 45, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 120, 10, 51, 44, 123, 104, 125, 32, 49, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 36, 51, 32, 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, > 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 36, 119, 44, 36, > 104, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, > 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 45, 110, 109, 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 104, 101, 97, 114, > 116, 115, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, > 104, 101, 97, 114, 116, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 100, 101, 110, 115, 105, 116, > 121, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 104, 101, > 97, 114, 116, 115, 32, 44, 10, 104, 101, 97, 114, 116, 115, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 104, 101, 97, > 114, 116, 32, 102, 105, 108, 116, 101, 114, 32, 111, 110, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, > 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 32, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 49, 32, 45, 42, 91, 45, 49, 44, 45, 50, 93, 32, 45, 95, 104, 101, > 97, 114, 116, 57, 120, 55, 10, 45, 109, 105, 114, 114, 111, 114, 91, 45, > 49, 93, 32, 121, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, > 104, 101, 97, 114, 116, 57, 120, 55, 32, 58, 10, 40, 48, 44, 49, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, 48, 59, 49, 44, > 49, 44, 49, 44, 49, 44, 48, 44, 49, 44, 49, 44, 49, 44, 49, 59, > 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, > 49, 59, 48, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, > 49, 44, 48, 59, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, 49, 44, > 49, 44, 48, 44, 48, 59, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, > 49, 44, 48, 44, 48, 44, 48, 59, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, > 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, 44, 95, 114, > 97, 100, 105, 117, 115, 62, 48, 44, 48, 60, 61, 95, 116, 104, 114, 101, > 115, 104, 111, 108, 100, 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 111, > 112, 97, 99, 105, 116, 121, 60, 61, 49, 44, 95, 118, 111, 116, 101, 115, > 105, 122, 101, 91, 37, 93, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 104, 111, 117, 103, 104, 32, 66, 38, > 87, 32, 115, 107, 101, 116, 99, 104, 32, 101, 102, 102, 101, 99, 116, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, > 110, 115, 105, 116, 121, 61, 56, 39, 44, 32, 39, 114, 97, 100, 105, 117, > 115, 61, 53, 39, 44, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, 100, > 61, 56, 48, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, > 46, 49, 39, 32, 97, 110, 100, 32, 39, 118, 111, 116, 101, 115, 105, 122, > 101, 61, 49, 48, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 44, 10, > 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 58, 32, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 56, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 50, 61, 53, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 51, 61, 56, 48, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 51, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 52, 61, 48, > 46, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 52, 60, 61, 49, 32, > 38, 38, 32, 36, 123, 53, 61, 49, 48, 48, 37, 125, 62, 48, 34, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 104, > 111, 117, 103, 104, 32, 66, 38, 87, 32, 115, 107, 101, 116, 99, 104, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, 121, 32, > 36, 49, 44, 32, 114, 97, 100, 105, 117, 115, 32, 36, 50, 44, 32, 116, > 104, 114, 101, 115, 104, 111, 108, 100, 32, 36, 51, 44, 32, 111, 112, 97, > 99, 105, 116, 121, 32, 36, 52, 32, 97, 110, 100, 32, 118, 111, 116, 101, > 115, 105, 122, 101, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 110, 109, 61, 64, > 123, 48, 44, 110, 125, 10, 114, 101, 115, 61, 123, 114, 111, 117, 110, 100, > 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 53, 125, 44, 36, 53, 42, 109, 97, 120, 40, 119, 44, > 104, 41, 44, 36, 53, 41, 41, 125, 32, 119, 61, 123, 119, 125, 32, 104, > 61, 123, 104, 125, 32, 114, 104, 111, 109, 97, 120, 61, 123, 115, 113, 114, > 116, 40, 119, 94, 50, 43, 104, 94, 50, 41, 47, 50, 125, 10, 45, 104, > 111, 117, 103, 104, 32, 36, 114, 101, 115, 44, 36, 114, 101, 115, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 10, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 51, 37, 32, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 91, 45, 49, 93, > 10, 45, 115, 51, 100, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 54, > 45, 45, 53, 44, 45, 51, 45, 45, 49, 93, 32, 45, 114, 91, 45, 49, > 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, > 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 48, 44, > 49, 10, 45, 115, 91, 45, 49, 93, 32, 120, 44, 50, 10, 45, 42, 91, > 45, 50, 93, 32, 123, 50, 42, 112, 105, 47, 36, 114, 101, 115, 125, 10, > 45, 42, 91, 45, 49, 93, 32, 123, 36, 114, 104, 111, 109, 97, 120, 47, > 36, 114, 101, 115, 125, 10, 45, 45, 99, 111, 115, 91, 45, 50, 93, 32, > 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 43, 91, 45, > 49, 93, 32, 123, 36, 119, 47, 50, 125, 10, 45, 45, 115, 105, 110, 91, > 45, 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, > 45, 43, 91, 45, 49, 93, 32, 123, 36, 104, 47, 50, 125, 10, 45, 114, > 109, 91, 45, 51, 93, 10, 45, 105, 91, 45, 51, 93, 32, 91, 45, 51, > 93, 10, 45, 99, 111, 115, 91, 45, 52, 93, 32, 45, 115, 105, 110, 91, > 45, 51, 93, 32, 45, 42, 91, 45, 52, 44, 45, 51, 93, 32, 49, 48, > 48, 48, 48, 10, 45, 45, 43, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 10, 45, 45, 45, 91, 45, 50, 93, 32, 91, 45, 53, 93, 10, 45, 45, > 91, 45, 52, 93, 32, 91, 45, 53, 93, 10, 45, 43, 91, 45, 51, 93, > 32, 91, 45, 54, 93, 10, 45, 114, 109, 91, 45, 54, 44, 45, 53, 93, > 10, 45, 105, 91, 45, 51, 93, 32, 49, 44, 123, 104, 125, 32, 49, 44, > 123, 104, 125, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 120, 10, > 45, 105, 91, 45, 50, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, > 39, 125, 41, 32, 45, 105, 91, 45, 50, 93, 32, 40, 123, 50, 42, 104, > 125, 44, 123, 104, 125, 41, 10, 49, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 50, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 50, 42, 121, > 32, 45, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 120, 10, 51, 44, 123, 104, 125, 44, 49, 44, 49, > 44, 48, 32, 49, 44, 123, 104, 125, 44, 49, 44, 49, 44, 36, 52, 10, > 45, 121, 91, 45, 54, 45, 45, 49, 93, 32, 45, 97, 91, 45, 54, 45, > 45, 49, 93, 32, 121, 10, 36, 119, 44, 36, 104, 44, 49, 44, 49, 44, > 50, 53, 53, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, > 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, 109, > 32, 36, 110, 109, 44, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, > 105, 103, 104, 116, 114, 97, 121, 115, 32, 58, 32, 49, 48, 48, 60, 61, > 95, 100, 101, 110, 115, 105, 116, 121, 60, 61, 48, 44, 95, 99, 120, 44, > 95, 99, 121, 44, 95, 114, 97, 121, 95, 108, 101, 110, 103, 116, 104, 62, > 61, 48, 44, 95, 114, 97, 121, 95, 97, 116, 116, 101, 110, 117, 97, 116, > 105, 111, 110, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 71, 101, 110, 101, 114, 97, 116, 101, 32, 114, 97, 121, 32, 108, 105, 103, > 104, 116, 115, 32, 102, 114, 111, 109, 32, 116, 104, 101, 32, 101, 100, 103, > 101, 115, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 115, 32, 118, 97, 108, 117, 101, 115, 32, > 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 53, 48, 37, 39, 44, > 32, 39, 99, 120, 61, 48, 46, 53, 39, 44, 32, 39, 99, 121, 61, 48, > 46, 53, 39, 44, 32, 39, 114, 97, 121, 95, 108, 101, 110, 103, 116, 104, > 61, 48, 46, 57, 39, 32, 97, 110, 100, 32, 39, 114, 97, 121, 95, 97, > 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 61, 48, 46, 53, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 108, 105, 103, 104, 116, 114, 97, 121, > 115, 32, 44, 32, 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, > 108, 105, 103, 104, 116, 114, 97, 121, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 53, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 52, > 61, 49, 125, 32, 38, 38, 32, 36, 123, 53, 61, 49, 125, 62, 61, 48, > 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 48, 46, 53, 125, > 44, 36, 123, 51, 61, 48, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 71, 101, 110, 101, 114, 97, 116, 101, 32, 114, 97, 121, 32, > 108, 105, 103, 104, 116, 115, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, > 121, 32, 36, 49, 44, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 50, > 44, 36, 51, 41, 44, 32, 114, 97, 121, 32, 108, 101, 110, 103, 116, 104, > 32, 36, 52, 32, 97, 110, 100, 32, 97, 116, 116, 101, 110, 117, 97, 116, > 105, 111, 110, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, > 42, 32, 45, 49, 32, 45, 108, 116, 32, 36, 49, 37, 32, 45, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 50, > 44, 36, 51, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 108, 111, 103, > 50, 40, 119, 41, 125, 32, 45, 45, 115, 104, 105, 102, 116, 91, 45, 49, > 93, 32, 123, 50, 94, 36, 62, 125, 32, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 102, 117, 110, 99, 116, 105, > 111, 110, 49, 100, 32, 48, 46, 53, 44, 48, 44, 49, 44, 123, 36, 52, > 42, 119, 125, 44, 49, 44, 123, 49, 43, 40, 36, 52, 43, 49, 45, 36, > 53, 41, 42, 119, 125, 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 64, > 123, 45, 50, 44, 119, 125, 44, 49, 44, 49, 44, 49, 44, 48, 10, 40, > 49, 44, 123, 119, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 119, 125, 44, 49, 44, 49, 44, 49, 44, 51, 32, 45, 47, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 112, > 111, 108, 97, 114, 50, 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, > 50, 44, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 108, 105, 103, 104, 116, 95, 114, 101, 108, 105, > 101, 102, 32, 58, 32, 95, 97, 109, 98, 105, 101, 110, 116, 95, 108, 105, > 103, 104, 116, 44, 95, 115, 112, 101, 99, 117, 108, 97, 114, 95, 108, 105, > 103, 104, 116, 110, 101, 115, 115, 44, 95, 115, 112, 101, 99, 117, 108, 97, > 114, 95, 115, 105, 122, 101, 44, 95, 108, 105, 103, 104, 116, 95, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 44, 95, 100, 97, 114, 107, 110, 101, > 115, 115, 44, 95, 120, 108, 44, 95, 121, 108, 44, 95, 122, 108, 44, 95, > 122, 115, 99, 97, 108, 101, 44, 95, 111, 112, 97, 99, 105, 116, 121, 95, > 98, 117, 109, 112, 109, 97, 112, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, > 32, 114, 101, 108, 105, 101, 102, 32, 108, 105, 103, 104, 116, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 40, 115, 41, 32, 58, 32, 39, > 97, 109, 98, 105, 101, 110, 116, 95, 108, 105, 103, 104, 116, 61, 48, 46, > 51, 39, 44, 32, 39, 115, 112, 101, 99, 117, 108, 97, 114, 95, 108, 105, > 103, 104, 116, 110, 101, 115, 115, 61, 48, 46, 53, 39, 44, 32, 39, 115, > 112, 101, 99, 117, 108, 97, 114, 95, 115, 105, 122, 101, 61, 48, 46, 50, > 39, 44, 32, 39, 100, 97, 114, 107, 110, 101, 115, 115, 61, 48, 39, 44, > 32, 39, 120, 108, 61, 48, 46, 50, 39, 44, 32, 39, 121, 108, 61, 122, > 108, 61, 48, 46, 53, 39, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 122, 115, 99, 97, 108, 101, 61, 49, 39, 44, 32, 39, 111, 112, > 97, 99, 105, 116, 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 111, 112, > 97, 99, 105, 116, 121, 95, 98, 117, 109, 112, 109, 97, 112, 61, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, > 45, 108, 105, 103, 104, 116, 95, 114, 101, 108, 105, 101, 102, 91, 45, 49, > 93, 32, 48, 46, 51, 44, 52, 44, 48, 46, 49, 44, 48, 10, 108, 105, > 103, 104, 116, 95, 114, 101, 108, 105, 101, 102, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 48, 46, 51, 125, 44, 36, 123, 50, 61, > 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, 50, 125, 44, 36, 123, > 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 46, 50, 125, 44, 36, 123, > 54, 61, 48, 46, 53, 125, 44, 36, 123, 55, 61, 48, 46, 53, 125, 44, > 36, 123, 56, 61, 49, 125, 44, 36, 123, 57, 61, 49, 125, 44, 36, 123, > 49, 48, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 114, 101, 108, 105, 101, 102, 32, 108, 105, 103, 104, > 116, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 40, 123, 45, 36, 54, 125, 44, 123, 49, 45, > 36, 54, 125, 59, 123, 45, 36, 54, 125, 44, 123, 49, 45, 36, 54, 125, > 94, 123, 45, 36, 55, 125, 44, 123, 45, 36, 55, 125, 59, 123, 49, 45, > 36, 55, 125, 44, 123, 49, 45, 36, 55, 125, 94, 36, 56, 44, 36, 56, > 59, 36, 56, 44, 36, 56, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 44, 51, 10, 45, > 105, 102, 32, 36, 49, 48, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 50, 93, 32, 51, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 45, 51, 93, 32, 45, 101, 108, 115, 101, 32, 45, 45, 116, 111, 95, 114, > 103, 98, 91, 45, 50, 93, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 45, 49, 93, 32, 36, > 53, 37, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 57, 32, 32, 45, > 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 45, 111, 114, 105, 101, > 110, 116, 97, 116, 105, 111, 110, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, > 99, 32, 45, 43, 91, 45, 51, 45, 45, 49, 93, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 123, > 36, 54, 42, 49, 48, 48, 125, 37, 44, 123, 36, 55, 42, 49, 48, 48, > 125, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 49, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 45, 49, 10, 45, 47, 91, 45, 49, 93, 32, 123, 40, 36, > 51, 42, 109, 97, 120, 40, 119, 44, 104, 41, 41, 94, 50, 125, 32, 45, > 101, 120, 112, 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 50, 32, 45, 43, 91, 45, 49, 93, 32, 36, 49, 10, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 36, 52, 32, > 45, 42, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 77, 125, 10, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 91, 48, 93, > 32, 45, 43, 91, 48, 44, 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 111, 115, 97, 105, 99, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, > 121, 62, 61, 48, 44, 95, 101, 100, 103, 101, 115, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, > 114, 101, 97, 116, 101, 32, 114, 97, 110, 100, 111, 109, 32, 109, 111, 115, > 97, 105, 99, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, 48, 46, 56, 39, > 32, 97, 110, 100, 32, 39, 101, 100, 103, 101, 115, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 109, 111, 115, 97, 105, 99, 32, 44, 10, > 109, 111, 115, 97, 105, 99, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 48, 46, 56, 125, 44, 36, 123, 50, 61, 49, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 109, 111, > 115, 97, 105, 99, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, 101, 110, > 115, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 108, 97, 98, 101, 108, 48, 61, 123, 49, 43, 105, 109, 125, 32, 45, > 43, 32, 36, 108, 97, 98, 101, 108, 48, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 123, > 36, 49, 42, 50, 125, 44, 50, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 119, > 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 123, 105, 102, 40, 36, 50, 44, 48, 44, 49, 41, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 50, 32, 45, 45, > 108, 91, 45, 49, 93, 32, 45, 103, 116, 32, 48, 32, 45, 115, 32, 99, > 32, 45, 97, 110, 100, 32, 45, 101, 110, 100, 108, 32, 45, 45, 91, 45, > 50, 93, 32, 36, 108, 97, 98, 101, 108, 48, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 101, 108, 115, 101, 32, 45, 45, 91, 45, 49, > 93, 32, 36, 108, 97, 98, 101, 108, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 111, 108, 100, 95, 112, 104, 111, > 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 111, 108, 100, 32, 112, 104, 111, 116, 111, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 111, 108, > 100, 95, 112, 104, 111, 116, 111, 10, 111, 108, 100, 95, 112, 104, 111, 116, > 111, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 111, 108, 100, 32, 112, 104, 111, 116, 111, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 110, 111, 105, 115, 101, 32, 50, 48, 32, > 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 51, 48, 44, 54, 48, > 32, 45, 98, 32, 50, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, > 48, 48, 32, 45, 102, 114, 97, 109, 101, 95, 102, 117, 122, 122, 121, 32, > 50, 48, 44, 50, 48, 44, 54, 44, 51, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 115, 104, 97, 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, > 48, 46, 55, 53, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 115, > 101, 112, 105, 97, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 101, 110, 99, 105, 108, 98, 119, 32, 58, 32, 95, 115, 105, 122, > 101, 62, 61, 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 66, 38, 87, 32, 112, 101, 110, 99, 105, 108, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 105, 122, 101, 61, 48, 46, 51, 39, 32, 97, 110, 100, 32, > 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 54, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 112, 101, 110, 99, 105, 108, 98, 119, 32, > 44, 10, 112, 101, 110, 99, 105, 108, 98, 119, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 48, 46, 51, 125, 44, 36, 123, 50, 61, > 54, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 66, 38, 87, 32, 112, 101, 110, 99, 105, 108, 32, 101, 102, > 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 115, 105, 122, 101, 32, 36, 49, 32, 97, 110, > 100, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 32, 45, 110, 111, > 114, 109, 32, 45, 98, 32, 36, 49, 32, 45, 115, 104, 97, 114, 112, 101, > 110, 32, 52, 48, 48, 48, 32, 45, 115, 109, 111, 111, 116, 104, 32, 36, > 50, 44, 48, 44, 49, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 45, 115, 113, 114, 116, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, > 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 112, 111, 108, 97, 114, 111, 105, 100, 32, 58, 32, 95, 115, 105, > 122, 101, 49, 62, 61, 48, 44, 95, 115, 105, 122, 101, 50, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, > 32, 112, 111, 108, 97, 114, 111, 105, 100, 32, 101, 102, 102, 101, 99, 116, > 32, 105, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, > 105, 122, 101, 49, 61, 49, 48, 39, 32, 97, 110, 100, 32, 39, 115, 105, > 122, 101, 50, 61, 50, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 112, 111, 108, 97, 114, 111, 105, 100, > 32, 53, 44, 51, 48, 32, 45, 114, 111, 116, 97, 116, 101, 32, 50, 48, > 32, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 44, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 114, 103, 98, 97, 10, 112, 111, > 108, 97, 114, 111, 105, 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 50, 48, 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 112, 111, 108, 97, 114, > 111, 105, 100, 32, 101, 102, 102, 101, 99, 116, 32, 105, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 98, 111, 114, 100, > 101, 114, 115, 32, 115, 105, 122, 101, 115, 32, 36, 49, 32, 97, 110, 100, > 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 45, 32, 50, 53, > 53, 32, 45, 114, 32, 123, 49, 48, 48, 43, 36, 49, 125, 37, 44, 123, > 49, 48, 48, 43, 36, 49, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 114, 32, 49, > 48, 48, 37, 44, 123, 49, 48, 48, 43, 36, 50, 125, 37, 44, 49, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 32, 45, 43, 32, 50, 53, > 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, > 108, 121, 103, 111, 110, 105, 122, 101, 32, 58, 32, 95, 119, 97, 114, 112, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, 61, 48, 44, > 95, 109, 105, 110, 95, 97, 114, 101, 97, 91, 37, 93, 62, 61, 48, 44, > 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 95, 120, 91, 37, 93, > 62, 48, 44, 95, 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 95, 121, > 91, 37, 93, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 112, 111, 108, 121, 103, 111, 110, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 119, 97, 114, 112, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 51, 48, 48, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 61, 50, 37, 39, 44, 32, 39, 109, 105, 110, 95, 97, 114, 101, > 97, 61, 48, 46, 49, 37, 39, 44, 32, 39, 114, 101, 115, 111, 108, 117, > 116, 105, 111, 110, 95, 120, 61, 114, 101, 115, 111, 108, 117, 116, 105, 111, > 110, 95, 121, 61, 49, 48, 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 112, 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 44, 10, 112, 111, > 108, 121, 103, 111, 110, 105, 122, 101, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 51, 48, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 50, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 51, 61, 48, 46, 49, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 52, 61, 49, 48, 37, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 53, 61, 36, 52, 125, 62, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 80, 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 105, 109, 97, > 103, 101, 36, 63, 32, 119, 105, 116, 104, 32, 119, 97, 114, 112, 32, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 44, 32, 109, 105, 110, 105, > 109, 97, 108, 32, 97, 114, 101, 97, 32, 36, 51, 32, 97, 110, 100, 32, > 114, 101, 115, 111, 108, 117, 116, 105, 111, 110, 115, 32, 40, 36, 52, 44, > 36, 53, 41, 46, 34, 10, 45, 118, 32, 45, 32, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, > 98, 32, 36, 50, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, > 111, 114, 109, 91, 45, 49, 93, 32, 45, 103, 91, 45, 49, 93, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 42, 91, > 45, 49, 93, 32, 123, 49, 47, 48, 46, 49, 43, 109, 97, 120, 40, 97, > 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, 105, 77, 41, 41, 125, > 10, 114, 101, 115, 120, 61, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, > 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 92, 32, 36, 52, 125, 44, 119, 42, 36, 52, 44, 119, 47, > 36, 52, 41, 45, 49, 41, 41, 125, 10, 114, 101, 115, 121, 61, 123, 109, > 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 53, 125, > 44, 104, 42, 36, 53, 44, 104, 47, 36, 53, 41, 45, 49, 41, 41, 125, > 10, 45, 112, 108, 97, 110, 101, 51, 100, 32, 49, 44, 49, 44, 36, 114, > 101, 115, 120, 44, 36, 114, 101, 115, 121, 32, 45, 42, 51, 100, 91, 45, > 49, 93, 32, 64, 123, 48, 44, 119, 45, 49, 125, 44, 64, 123, 48, 44, > 104, 45, 49, 125, 44, 49, 10, 45, 115, 51, 100, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 105, 91, 45, 50, 93, 32, 40, > 48, 59, 123, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, > 51, 44, 123, 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 50, 93, 32, 45, 121, 91, 45, 50, 93, 10, 91, 45, > 52, 93, 32, 45, 97, 91, 45, 55, 45, 45, 50, 93, 32, 121, 32, 45, > 114, 91, 45, 49, 93, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, > 49, 44, 45, 49, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, > 120, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 45, 119, > 97, 114, 112, 91, 49, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 32, > 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, > 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, > 122, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 121, 91, > 45, 49, 93, 32, 45, 106, 91, 50, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 56, 32, 45, 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 91, 48, > 93, 44, 91, 48, 93, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 49, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 50, 32, 45, 114, 109, 91, 49, 93, 10, 45, 105, 102, 32, 123, 36, 51, > 62, 48, 125, 10, 109, 105, 110, 95, 97, 114, 101, 97, 61, 64, 123, 48, > 44, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, > 116, 92, 32, 36, 51, 125, 44, 36, 51, 42, 119, 42, 104, 44, 36, 51, > 41, 125, 10, 45, 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 48, 44, > 49, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 109, 105, 110, 95, 97, > 114, 101, 97, 32, 45, 43, 91, 45, 50, 93, 32, 49, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 108, 101, 110, 100, 91, 48, 44, 45, > 49, 93, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 115, 116, 101, 114, 95, 101, > 100, 103, 101, 115, 32, 58, 32, 48, 60, 61, 95, 101, 100, 103, 101, 95, > 116, 104, 114, 101, 115, 104, 111, 108, 100, 60, 61, 49, 48, 48, 44, 48, > 60, 61, 95, 101, 100, 103, 101, 95, 115, 104, 97, 100, 101, 60, 61, 49, > 48, 48, 44, 95, 101, 100, 103, 101, 95, 116, 104, 105, 99, 107, 110, 101, > 115, 115, 62, 61, 48, 44, 95, 101, 100, 103, 101, 95, 97, 110, 116, 105, > 97, 108, 105, 97, 115, 105, 110, 103, 62, 61, 48, 44, 48, 60, 61, 95, > 112, 111, 115, 116, 101, 114, 105, 122, 97, 116, 105, 111, 110, 95, 108, 101, > 118, 101, 108, 60, 61, 49, 53, 44, 95, 112, 111, 115, 116, 101, 114, 105, > 122, 97, 116, 105, 111, 110, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, > 105, 110, 103, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 112, 111, 115, 116, 101, 114, 32, 101, 100, 103, > 101, 115, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 101, 100, 103, 101, 95, 116, 104, 114, > 101, 115, 104, 111, 108, 100, 61, 52, 48, 39, 44, 32, 39, 101, 100, 103, > 101, 95, 115, 104, 97, 100, 101, 61, 53, 39, 44, 32, 39, 101, 100, 103, > 101, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 48, 46, 53, 39, > 44, 32, 39, 101, 100, 103, 101, 95, 97, 110, 116, 105, 97, 108, 105, 97, > 115, 105, 110, 103, 61, 49, 48, 39, 44, 32, 39, 112, 111, 115, 116, 101, > 114, 105, 122, 97, 116, 105, 111, 110, 95, 108, 101, 118, 101, 108, 61, 49, > 50, 39, 32, 97, 110, 100, 32, 39, 112, 111, 115, 116, 101, 114, 105, 122, > 97, 116, 105, 111, 110, 95, 97, 110, 116, 105, 97, 108, 105, 97, 115, 105, > 110, 103, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, 111, > 115, 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 44, 10, 112, 111, 115, > 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 52, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 52, 61, 49, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 53, 61, 49, 50, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 53, 60, 61, 49, 53, 32, 38, 38, 32, 36, 123, 54, 61, 48, 125, > 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 112, 111, 115, 116, 101, 114, 32, 101, 100, 103, 101, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 101, 100, 103, 101, 32, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, > 36, 49, 44, 32, 101, 100, 103, 101, 32, 115, 104, 97, 100, 101, 32, 36, > 50, 44, 32, 101, 100, 103, 101, 32, 116, 104, 105, 99, 107, 110, 101, 115, > 115, 32, 36, 51, 44, 32, 101, 100, 103, 101, 32, 97, 110, 116, 105, 97, > 108, 105, 97, 115, 105, 110, 103, 32, 36, 52, 44, 32, 36, 53, 32, 108, > 101, 118, 101, 108, 32, 111, 102, 32, 112, 111, 115, 116, 101, 114, 105, 122, > 97, 116, 105, 111, 110, 32, 97, 110, 100, 32, 112, 111, 115, 116, 101, 114, > 105, 122, 97, 116, 105, 111, 110, 32, 97, 110, 116, 105, 97, 108, 105, 97, > 115, 105, 110, 103, 32, 36, 54, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 108, 91, 48, 93, 10, 45, 45, 103, 32, 120, 121, 44, 49, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 111, 114, 109, > 91, 45, 49, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 45, > 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 49, 44, 48, > 44, 49, 44, 123, 109, 97, 120, 40, 48, 44, 40, 49, 48, 48, 45, 40, > 36, 49, 37, 41, 94, 48, 46, 49, 42, 49, 48, 48, 41, 42, 50, 53, > 53, 37, 41, 125, 44, 48, 46, 57, 57, 44, 123, 109, 105, 110, 40, 50, > 53, 53, 44, 40, 49, 48, 49, 45, 40, 36, 49, 37, 41, 94, 48, 46, > 49, 42, 49, 48, 48, 43, 36, 50, 41, 42, 50, 53, 53, 37, 41, 125, > 44, 48, 46, 48, 49, 44, 50, 53, 53, 44, 48, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 49, 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, > 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 123, 109, 105, 110, 40, 53, > 48, 44, 36, 52, 41, 125, 44, 48, 44, 49, 44, 123, 36, 52, 47, 52, > 48, 125, 44, 123, 36, 52, 47, 52, 48, 125, 44, 48, 46, 56, 44, 57, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 53, 32, > 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, 32, 123, 114, > 111, 117, 110, 100, 40, 40, 52, 45, 115, 113, 114, 116, 40, 36, 53, 43, > 49, 41, 41, 42, 51, 50, 43, 50, 41, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 54, 32, 45, 115, 109, 111, 111, 116, 104, > 91, 48, 93, 32, 123, 109, 105, 110, 40, 53, 48, 44, 36, 54, 41, 125, > 44, 48, 44, 49, 44, 123, 36, 54, 47, 52, 48, 125, 44, 123, 36, 54, > 47, 52, 48, 125, 44, 48, 46, 56, 44, 57, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 42, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 111, 115, 116, 101, 114, 95, > 104, 111, 112, 101, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 72, 111, 112, 101, 32, 115, 116, 101, 110, 99, 105, > 108, 32, 112, 111, 115, 116, 101, 114, 32, 101, 102, 102, 101, 99, 116, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 61, 51, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 112, 111, 115, 116, 101, 114, 95, 104, 111, 112, 101, 32, 44, > 10, 112, 111, 115, 116, 101, 114, 95, 104, 111, 112, 101, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 51, 125, 62, 61, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, > 32, 72, 111, 112, 101, 32, 115, 116, 101, 110, 99, 105, 108, 32, 112, 111, > 115, 116, 101, 114, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, > 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 97, 112, 112, > 108, 121, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 115, 109, 111, 111, 116, 104, 32, 50, 48, > 48, 44, 48, 44, 49, 44, 36, 49, 44, 49, 34, 10, 45, 113, 117, 97, > 110, 116, 105, 122, 101, 32, 55, 44, 48, 32, 45, 102, 32, 39, 105, 102, > 40, 105, 33, 61, 53, 44, 105, 44, 105, 43, 49, 45, 50, 42, 40, 121, > 37, 50, 41, 41, 39, 10, 40, 48, 44, 51, 50, 44, 52, 55, 59, 48, > 44, 51, 50, 44, 52, 55, 59, 50, 48, 57, 44, 49, 44, 50, 51, 59, > 50, 48, 57, 44, 49, 44, 50, 51, 59, 57, 48, 44, 49, 52, 49, 44, > 49, 52, 53, 59, 45, 49, 44, 45, 49, 44, 45, 49, 59, 50, 53, 51, > 44, 50, 50, 49, 44, 49, 51, 56, 41, 32, 45, 112, 101, 114, 109, 117, > 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 109, 97, 112, > 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 114, 111, 100, 105, 108, 105, 117, 115, 32, > 58, 32, 48, 60, 61, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 60, > 61, 49, 48, 48, 44, 95, 48, 60, 61, 116, 104, 105, 99, 107, 110, 101, > 115, 115, 60, 61, 49, 48, 48, 44, 95, 115, 104, 97, 114, 112, 110, 101, > 115, 115, 62, 61, 48, 44, 95, 110, 98, 95, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 115, 62, 48, 44, 95, 111, 102, 102, 115, 101, 116, > 44, 95, 99, 111, 108, 111, 114, 95, 109, 111, 100, 101, 61, 123, 32, 48, > 61, 100, 97, 114, 107, 101, 114, 32, 124, 32, 49, 61, 98, 114, 105, 103, > 104, 116, 101, 114, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 114, 111, 100, 105, 108, 105, 117, 115, 32, 40, > 102, 114, 97, 99, 116, 97, 108, 105, 117, 115, 45, 108, 105, 107, 101, 41, > 32, 102, 105, 108, 116, 101, 114, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, > 49, 48, 39, 44, 32, 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, > 49, 48, 39, 44, 32, 39, 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, > 52, 48, 48, 39, 44, 32, 39, 110, 98, 95, 111, 114, 105, 101, 110, 116, > 97, 116, 105, 111, 110, 115, 61, 55, 39, 44, 32, 39, 111, 102, 102, 115, > 101, 116, 61, 48, 39, 32, 97, 110, 100, 32, 39, 99, 111, 108, 111, 114, > 95, 109, 111, 100, 101, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 114, 111, 100, 105, 108, 105, 117, 115, 32, 49, 50, 44, 49, 48, 44, > 51, 48, 48, 44, 49, 48, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 49, 48, 44, 54, > 10, 114, 111, 100, 105, 108, 105, 117, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 36, 123, 49, 61, 49, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 49, 60, 61, 50, 48, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 49, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, > 48, 48, 32, 38, 38, 32, 36, 123, 51, 61, 52, 48, 48, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 55, 125, 62, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 53, 61, 48, 125, 44, 36, 123, 54, 61, > 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 114, 111, 100, 105, 108, 105, 117, 115, 32, 102, 105, 108, 116, 101, > 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 32, 119, 105, 116, > 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, > 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, 50, 44, 32, 115, 104, > 97, 114, 112, 110, 101, 115, 115, 32, 36, 51, 44, 32, 36, 52, 32, 111, > 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 115, 44, 32, 111, 102, 102, > 115, 101, 116, 32, 36, 53, 32, 97, 110, 100, 32, 34, 92, 10, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 54, 44, 98, 114, 105, 103, > 104, 116, 101, 114, 44, 100, 97, 114, 107, 101, 114, 125, 34, 32, 99, 111, > 108, 111, 114, 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 114, 118, 10, 45, 105, 102, 32, 123, 33, 36, 54, 125, 32, 45, > 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 45, 102, 91, 45, 49, 93, 32, 48, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 110, 125, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 114, 111, 117, 110, 100, 40, 36, 52, 41, > 125, 10, 97, 110, 103, 108, 101, 61, 123, 36, 53, 43, 36, 62, 42, 49, > 56, 48, 47, 114, 111, 117, 110, 100, 40, 36, 52, 41, 125, 10, 45, 45, > 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 91, 45, 50, 93, 32, > 36, 49, 37, 44, 123, 36, 49, 42, 36, 50, 47, 49, 48, 48, 125, 37, > 44, 36, 97, 110, 103, 108, 101, 44, 49, 32, 45, 98, 91, 45, 49, 93, > 32, 48, 46, 55, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, > 93, 32, 36, 51, 32, 45, 109, 97, 120, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, > 105, 102, 32, 123, 33, 36, 54, 125, 32, 45, 110, 101, 103, 97, 116, 105, > 118, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 118, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, 32, 58, 32, 95, > 101, 100, 103, 101, 115, 91, 37, 93, 62, 61, 48, 44, 32, 115, 104, 97, > 100, 105, 110, 103, 62, 61, 48, 44, 32, 105, 115, 95, 116, 104, 105, 110, > 95, 115, 101, 112, 97, 114, 97, 116, 111, 114, 115, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, > 101, 110, 101, 114, 97, 116, 101, 32, 115, 116, 97, 105, 110, 101, 100, 32, > 103, 108, 97, 115, 115, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 101, 100, 103, 101, 115, 61, 52, 48, 37, 39, > 44, 32, 39, 115, 104, 97, 100, 105, 110, 103, 61, 48, 46, 50, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 112, 114, 101, 99, 105, 115, 101, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 116, 97, 105, 110, > 101, 100, 95, 103, 108, 97, 115, 115, 32, 44, 10, 115, 116, 97, 105, 110, > 101, 100, 95, 103, 108, 97, 115, 115, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 52, 48, 37, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 123, 50, 61, 48, 46, 50, 125, 62, 61, 48, 34, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 115, 116, 97, 105, 110, > 101, 100, 32, 103, 108, 97, 115, 115, 32, 101, 102, 102, 101, 99, 116, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 101, 100, 103, 101, 115, 32, 36, 49, 44, 32, 115, 104, 97, 100, 105, > 110, 103, 32, 36, 50, 32, 97, 110, 100, 32, 116, 104, 105, 110, 45, 115, > 101, 112, 97, 114, 97, 116, 111, 114, 115, 32, 34, 64, 123, 45, 97, 114, > 103, 92, 32, 49, 43, 33, 36, 51, 44, 101, 110, 97, 98, 108, 101, 100, > 44, 100, 105, 115, 97, 98, 108, 101, 100, 125, 34, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 105, 109, 61, 123, 105, 109, 45, 49, 125, 32, 45, > 45, 32, 36, 105, 109, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 49, > 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 10, 45, 100, 105, > 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 49, 101, 49, 48, 32, 45, > 110, 101, 113, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, 36, 51, > 32, 45, 115, 107, 101, 108, 101, 116, 111, 110, 91, 45, 49, 93, 32, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 105, 115, 116, 97, 110, 99, > 101, 91, 45, 49, 93, 32, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, > 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 45, > 50, 93, 32, 36, 105, 109, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 49, 32, 32, 45, 94, 91, 45, 49, 93, 32, 36, 50, 32, 45, 42, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, 114, 32, 58, 32, 95, > 119, 105, 100, 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, > 48, 44, 95, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 62, 48, > 44, 48, 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, > 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 112, 117, 116, > 32, 115, 116, 97, 114, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, > 107, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, > 32, 115, 105, 122, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, 104, 116, 61, 53, 49, > 50, 39, 44, 32, 39, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, > 61, 53, 39, 32, 97, 110, 100, 32, 39, 116, 104, 105, 99, 107, 110, 101, > 115, 115, 61, 48, 46, 51, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 45, 115, 116, 97, 114, 32, 44, 10, 115, 116, 97, > 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 53, 49, 50, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 50, 61, 36, > 49, 125, 62, 61, 49, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 48, 46, 53, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 52, 60, 61, 49, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 73, 110, 112, 117, 116, 32, 36, 49, 120, 36, 50, 32, > 115, 116, 97, 114, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, 115, 107, > 44, 32, 119, 105, 116, 104, 32, 36, 51, 32, 98, 114, 97, 110, 99, 104, > 101, 115, 32, 97, 110, 100, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, > 45, 115, 116, 97, 114, 51, 100, 32, 36, 51, 44, 36, 52, 32, 45, 99, > 111, 108, 51, 100, 32, 49, 32, 45, 99, 51, 100, 32, 45, 110, 51, 100, > 32, 45, 42, 51, 100, 32, 36, 49, 44, 36, 50, 10, 36, 49, 44, 36, > 50, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, > 44, 50, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 110, 109, 32, 34, > 91, 72, 101, 97, 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 109, 97, > 115, 107, 93, 34, 10, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 115, 116, 97, 114, 115, 32, 58, 32, 95, > 100, 101, 110, 115, 105, 116, 121, 91, 37, 93, 62, 61, 48, 44, 95, 100, > 101, 112, 116, 104, 62, 61, 48, 44, 95, 115, 105, 122, 101, 62, 48, 44, > 95, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 62, 61, 49, 44, > 48, 60, 61, 95, 116, 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, 49, > 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, > 61, 48, 44, 95, 82, 44, 95, 71, 44, 95, 66, 44, 95, 111, 112, 97, > 99, 105, 116, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, > 100, 32, 114, 97, 110, 100, 111, 109, 32, 115, 116, 97, 114, 115, 32, 116, > 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 110, > 115, 105, 116, 121, 61, 49, 48, 37, 39, 44, 32, 39, 100, 101, 112, 116, > 104, 61, 49, 39, 44, 32, 39, 115, 105, 122, 101, 61, 51, 50, 39, 44, > 32, 39, 110, 98, 95, 98, 114, 97, 110, 99, 104, 101, 115, 61, 53, 39, > 44, 32, 39, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, 48, 46, 51, > 56, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, > 48, 46, 53, 39, 44, 32, 39, 82, 61, 71, 61, 66, 61, 50, 48, 48, > 39, 32, 97, 110, 100, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 115, 116, 97, 114, 115, 32, 44, > 10, 115, 116, 97, 114, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 49, 61, 49, 48, 37, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 50, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, > 61, 51, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 52, 61, 53, 125, > 62, 61, 49, 32, 38, 38, 32, 36, 123, 53, 61, 48, 46, 51, 56, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 53, 60, 61, 49, 32, 38, 38, 32, > 36, 123, 54, 61, 48, 46, 53, 125, 62, 61, 48, 34, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 55, 61, 50, 48, 48, 125, 44, 36, 123, 56, 61, > 36, 55, 125, 44, 36, 123, 57, 61, 36, 56, 125, 44, 36, 123, 49, 48, > 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, > 32, 36, 49, 32, 114, 97, 110, 100, 111, 109, 32, 115, 116, 97, 114, 115, > 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 100, 101, 112, 116, 104, 32, 36, 50, 44, 32, 115, 105, 122, 101, > 32, 36, 51, 44, 32, 36, 52, 32, 98, 114, 97, 110, 99, 104, 101, 115, > 44, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, 36, 53, 44, 32, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 54, 44, 32, 99, > 111, 108, 111, 114, 32, 40, 36, 55, 44, 36, 56, 44, 36, 57, 41, 32, > 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 49, 48, 46, > 34, 10, 45, 118, 32, 45, 10, 45, 115, 116, 97, 114, 51, 100, 32, 36, > 52, 44, 36, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 50, 53, 53, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 51, 10, > 45, 108, 91, 45, 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, > 32, 123, 114, 111, 117, 110, 100, 40, 50, 42, 36, 51, 41, 125, 44, 123, > 114, 111, 117, 110, 100, 40, 50, 42, 36, 51, 41, 125, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 48, 93, 44, 53, > 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 44, 48, > 32, 45, 114, 51, 100, 91, 48, 93, 32, 48, 44, 48, 44, 49, 44, 57, > 48, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, > 101, 110, 100, 108, 10, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, > 52, 45, 45, 49, 93, 32, 48, 32, 45, 114, 50, 100, 121, 91, 45, 52, > 45, 45, 49, 93, 32, 36, 51, 32, 45, 98, 91, 45, 52, 45, 45, 49, > 93, 32, 36, 54, 44, 48, 32, 45, 114, 91, 45, 52, 45, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 52, 32, 45, 115, 104, 91, 123, 45, 49, > 45, 36, 62, 125, 93, 32, 48, 44, 50, 32, 45, 102, 99, 91, 45, 49, > 93, 32, 36, 55, 44, 36, 56, 44, 36, 57, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 32, 91, 45, 52, 45, 45, 49, 93, 32, > 45, 108, 91, 36, 62, 44, 45, 52, 45, 45, 49, 93, 10, 78, 61, 123, > 114, 111, 117, 110, 100, 40, 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, > 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, 44, 119, 42, 104, 42, > 36, 49, 44, 36, 49, 41, 47, 52, 44, 49, 44, 49, 41, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 52, 10, 50, 44, 36, 78, 32, 45, 114, > 97, 110, 100, 91, 45, 49, 93, 32, 45, 49, 44, 49, 32, 49, 44, 36, > 78, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 105, 91, 45, > 50, 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, > 45, 43, 91, 45, 50, 93, 32, 48, 46, 53, 32, 45, 105, 91, 45, 50, > 93, 32, 40, 36, 78, 59, 36, 78, 41, 10, 40, 49, 44, 48, 59, 49, > 44, 123, 36, 78, 45, 49, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, 45, 114, 111, 117, 110, > 100, 91, 45, 49, 93, 32, 52, 44, 36, 78, 44, 49, 44, 49, 44, 49, > 32, 45, 121, 91, 45, 53, 44, 45, 51, 45, 45, 49, 93, 32, 45, 97, > 91, 45, 53, 45, 45, 49, 93, 32, 121, 10, 45, 114, 118, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 115, 112, 114, 105, 116, 101, 115, 51, 100, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 123, 48, 46, 55, 53, 42, 64, 123, 48, 44, 119, 125, 125, 44, 123, 48, > 46, 55, 53, 42, 64, 123, 48, 44, 104, 125, 125, 44, 123, 49, 48, 48, > 48, 42, 36, 50, 125, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 36, 49, 48, 44, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 52, 45, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 107, 101, > 116, 99, 104, 98, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 95, > 110, 98, 95, 111, 114, 105, 101, 110, 116, 115, 62, 48, 44, 95, 115, 116, > 97, 114, 116, 95, 97, 110, 103, 108, 101, 44, 95, 97, 110, 103, 108, 101, > 95, 114, 97, 110, 103, 101, 62, 61, 48, 44, 95, 108, 101, 110, 103, 116, > 104, 62, 61, 48, 44, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 62, > 61, 48, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 95, 111, 112, > 97, 99, 105, 116, 121, 44, 95, 98, 103, 102, 97, 99, 116, 111, 114, 62, > 61, 48, 44, 95, 100, 101, 110, 115, 105, 116, 121, 62, 48, 44, 95, 115, > 104, 97, 114, 112, 110, 101, 115, 115, 62, 61, 48, 44, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, > 121, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 99, 111, 104, 101, 114, 101, 110, 99, 101, 62, 61, > 48, 44, 95, 105, 115, 95, 98, 111, 111, 115, 116, 61, 123, 32, 48, 32, > 124, 32, 49, 32, 125, 44, 95, 105, 115, 95, 99, 117, 114, 118, 101, 100, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 92, 110, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 107, 101, 116, > 99, 104, 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 111, 114, 105, 101, 110, > 116, 115, 61, 50, 39, 44, 32, 39, 115, 116, 97, 114, 116, 95, 97, 110, > 103, 108, 101, 61, 52, 53, 39, 44, 32, 39, 97, 110, 103, 108, 101, 95, > 114, 97, 110, 103, 101, 61, 49, 56, 48, 39, 44, 32, 39, 108, 101, 110, > 103, 116, 104, 61, 51, 48, 39, 44, 32, 39, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 61, 49, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, 121, > 61, 48, 46, 48, 51, 39, 44, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 98, 103, 102, 97, 99, 116, 111, 114, 61, 48, 39, 44, 32, 39, > 100, 101, 110, 115, 105, 116, 121, 61, 48, 46, 54, 39, 44, 32, 39, 115, > 104, 97, 114, 112, 110, 101, 115, 115, 61, 48, 46, 49, 39, 44, 32, 39, > 97, 110, 105, 115, 111, 116, 114, 111, 112, 121, 61, 48, 46, 54, 39, 44, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 50, > 53, 39, 44, 32, 39, 99, 111, 104, 101, 114, 101, 110, 99, 101, 61, 49, > 39, 44, 32, 39, 105, 115, 95, 98, 111, 111, 115, 116, 61, 48, 39, 32, > 97, 110, 100, 32, 39, 105, 115, 95, 99, 117, 114, 118, 101, 100, 61, 49, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 107, 101, 116, 99, 104, > 98, 119, 32, 49, 32, 45, 45, 108, 111, 99, 97, 108, 32, 45, 114, 101, > 118, 101, 114, 115, 101, 32, 45, 98, 108, 117, 114, 91, 45, 49, 93, 32, > 51, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, 114, 108, 97, 121, > 32, 45, 101, 110, 100, 108, 111, 99, 97, 108, 10, 115, 107, 101, 116, 99, > 104, 98, 119, 32, 58, 10, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 51, 61, 49, 56, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 52, 61, 51, 48, 125, > 62, 61, 48, 32, 38, 38, 32, 36, 123, 53, 61, 49, 125, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 55, 61, 48, 125, 62, 61, 48, 32, 38, 38, > 32, 36, 123, 56, 61, 48, 46, 54, 125, 62, 48, 32, 38, 38, 32, 36, > 123, 57, 61, 48, 46, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 49, 48, 61, 48, 46, 54, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, > 49, 49, 61, 48, 46, 50, 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 49, 50, 61, 49, 125, 62, 61, 48, 34, 10, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 52, 53, 125, 44, 36, 123, 54, 61, 48, 46, 48, > 51, 125, 44, 36, 123, 49, 51, 61, 48, 125, 44, 36, 123, 49, 52, 61, > 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 66, 38, 87, 32, 115, 107, 101, 116, 99, 104, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 100, 105, 102, 102, 117, 115, 105, 111, 110, > 116, 101, 110, 115, 111, 114, 115, 32, 36, 57, 44, 36, 49, 48, 44, 36, > 49, 49, 44, 36, 49, 50, 10, 119, 61, 49, 32, 104, 61, 49, 32, 45, > 105, 91, 48, 93, 32, 49, 32, 45, 109, 51, 100, 32, 48, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 47, 91, > 45, 49, 93, 32, 123, 109, 97, 120, 40, 105, 77, 44, 105, 109, 41, 125, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 64, 123, 45, 52, 44, 110, 125, 44, 49, 10, 45, 105, > 102, 32, 123, 36, 119, 33, 61, 119, 124, 124, 36, 104, 33, 61, 104, 125, > 10, 45, 114, 109, 91, 48, 93, 32, 123, 36, 56, 42, 119, 42, 104, 47, > 40, 36, 49, 42, 115, 113, 114, 116, 40, 36, 52, 41, 41, 125, 10, 45, > 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 123, 64, 123, 45, > 50, 44, 104, 125, 45, 49, 125, 32, 45, 114, 97, 110, 100, 91, 45, 50, > 93, 32, 48, 44, 123, 64, 123, 45, 51, 44, 119, 125, 45, 49, 125, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 52, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 97, 108, 112, 104, > 97, 61, 123, 40, 36, 50, 43, 36, 62, 42, 36, 51, 47, 36, 49, 41, > 42, 112, 105, 47, 49, 56, 48, 125, 10, 45, 45, 42, 91, 45, 52, 93, > 32, 123, 99, 111, 115, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, > 45, 42, 91, 45, 52, 93, 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, > 104, 97, 41, 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 45, 42, 91, 45, 52, 93, 32, 123, 99, 111, 115, 40, 36, 97, 108, 112, > 104, 97, 41, 125, 32, 45, 45, 42, 91, 45, 52, 93, 32, 123, 115, 105, > 110, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, 43, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 44, 50, 10, 45, 105, 102, 32, 36, 49, 51, 32, 45, 111, 114, 105, 101, > 110, 116, 97, 116, 105, 111, 110, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, 44, 119, > 125, 10, 120, 121, 61, 64, 123, 48, 44, 40, 36, 62, 44, 48, 41, 125, > 44, 64, 123, 48, 44, 40, 36, 62, 44, 49, 41, 125, 10, 45, 105, 102, > 32, 123, 64, 123, 45, 53, 44, 40, 36, 120, 121, 41, 125, 43, 64, 123, > 45, 51, 44, 40, 36, 120, 121, 41, 125, 60, 36, 53, 125, 32, 111, 112, > 97, 99, 61, 36, 54, 32, 45, 101, 108, 115, 101, 32, 111, 112, 97, 99, > 61, 123, 36, 55, 42, 36, 54, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 36, 111, 112, 97, 99, 10, 45, 45, 115, 116, 114, 101, > 97, 109, 108, 105, 110, 101, 51, 100, 91, 45, 49, 93, 32, 36, 120, 121, > 44, 48, 44, 36, 52, 44, 48, 46, 56, 44, 48, 44, 48, 44, 49, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 48, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 36, 111, 112, 97, 99, 44, 49, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 115, 116, 114, 101, > 97, 109, 108, 105, 110, 101, 51, 100, 91, 45, 49, 93, 32, 36, 120, 121, > 44, 48, 44, 36, 52, 44, 48, 46, 56, 44, 48, 44, 49, 44, 49, 32, > 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 48, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 36, 111, 112, 97, 99, 44, 49, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 49, 10, 97, 108, 112, 104, 97, 61, 123, 40, 36, 50, > 43, 36, 62, 42, 36, 51, 47, 36, 49, 41, 42, 112, 105, 47, 49, 56, > 48, 125, 10, 45, 45, 42, 91, 45, 52, 93, 32, 123, 99, 111, 115, 40, > 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, 45, 42, 91, 45, 52, 93, > 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 42, 91, 45, 52, 93, > 32, 123, 99, 111, 115, 40, 36, 97, 108, 112, 104, 97, 41, 125, 32, 45, > 45, 42, 91, 45, 52, 93, 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, > 104, 97, 41, 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 105, 102, 32, 36, > 49, 51, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 91, > 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 123, 48, 44, 119, 125, 10, 120, 61, 64, 123, 48, 44, > 40, 36, 62, 44, 48, 41, 125, 32, 121, 61, 64, 123, 48, 44, 40, 36, > 62, 44, 49, 41, 125, 10, 45, 105, 102, 32, 123, 64, 123, 45, 53, 44, > 40, 36, 120, 44, 36, 121, 41, 125, 43, 64, 123, 45, 51, 44, 40, 36, > 120, 44, 36, 121, 41, 125, 60, 36, 53, 125, 32, 111, 112, 97, 99, 61, > 36, 54, 32, 45, 101, 108, 115, 101, 32, 111, 112, 97, 99, 61, 123, 36, > 55, 42, 36, 54, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 111, 112, 97, 99, 10, 45, 108, 105, 110, 101, 91, 45, 50, 93, > 32, 123, 36, 120, 45, 36, 52, 42, 64, 123, 45, 49, 44, 40, 36, 120, > 44, 36, 121, 44, 48, 44, 48, 41, 125, 125, 44, 123, 36, 121, 45, 36, > 52, 42, 64, 123, 45, 49, 44, 40, 36, 120, 44, 36, 121, 44, 48, 44, > 49, 41, 125, 125, 44, 92, 10, 123, 36, 120, 43, 36, 52, 42, 64, 123, > 45, 49, 44, 40, 36, 120, 44, 36, 121, 44, 48, 44, 48, 41, 125, 125, > 44, 123, 36, 121, 43, 36, 52, 42, 64, 123, 45, 49, 44, 40, 36, 120, > 44, 36, 121, 44, 48, 44, 49, 41, 125, 125, 44, 92, 10, 123, 51, 42, > 36, 111, 112, 97, 99, 125, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, > 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, > 52, 45, 45, 50, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 112, 111, 110, 103, 101, 32, > 58, 32, 95, 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 112, 111, 110, 103, 101, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 58, 32, 39, 115, 105, 122, 101, 61, 49, 51, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 115, 112, 111, 110, 103, 101, 32, 44, 10, 115, 112, > 111, 110, 103, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 49, 51, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 115, 112, 111, 110, 103, 101, 32, 102, 105, 108, 116, 101, > 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 98, 114, 117, 115, 104, 32, 115, 105, 122, 101, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 32, 45, 110, 111, 105, 115, 101, 91, 45, > 49, 93, 32, 50, 48, 44, 50, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, > 42, 91, 45, 49, 44, 45, 50, 93, 10, 45, 95, 99, 105, 114, 99, 108, > 101, 32, 36, 49, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 95, > 99, 105, 114, 99, 108, 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, > 37, 50, 61, 61, 48, 125, 32, 45, 105, 32, 50, 44, 50, 32, 45, 101, > 108, 115, 101, 32, 45, 105, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, > 32, 45, 115, 113, 114, 116, 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 46, 56, 53, 44, 48, 46, 56, 54, 32, 45, 42, 91, 45, > 49, 93, 32, 45, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 101, 110, 99, 105, 108, 32, > 58, 32, 95, 114, 97, 100, 105, 117, 115, 91, 37, 93, 62, 61, 48, 44, > 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, > 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 115, 116, 101, > 110, 99, 105, 108, 32, 102, 105, 108, 116, 101, 114, 32, 111, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 114, 97, 100, 105, 117, 115, > 61, 51, 39, 44, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 49, 39, 32, 97, 110, 100, 32, 39, 105, 116, 101, 114, 97, 116, 105, > 111, 110, 115, 61, 56, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, > 116, 101, 110, 99, 105, 108, 32, 49, 44, 49, 48, 44, 51, 10, 115, 116, > 101, 110, 99, 105, 108, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 51, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, > 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 56, 125, > 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 115, 116, 101, 110, 99, 105, 108, 32, 102, 105, 108, 116, > 101, 114, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 49, 44, 32, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, > 32, 36, 51, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 110, 32, 48, 44, 49, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 51, 32, 45, 98, 32, 36, 49, 32, 45, 117, > 110, 115, 104, 97, 114, 112, 32, 123, 36, 49, 43, 36, 50, 125, 44, 49, > 48, 48, 48, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, > 116, 101, 110, 99, 105, 108, 98, 119, 32, 58, 32, 95, 101, 100, 103, 101, > 115, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 66, 38, 87, 32, 115, 116, 101, 110, 99, 105, 108, 32, 101, > 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 101, 100, 103, 101, 115, 61, 49, 53, 39, 32, 97, 110, > 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 116, 101, 110, 99, 105, > 108, 98, 119, 32, 52, 48, 44, 52, 10, 115, 116, 101, 110, 99, 105, 108, > 98, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, > 53, 125, 44, 36, 123, 50, 61, 49, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 66, 38, 87, 32, 115, 116, > 101, 110, 99, 105, 108, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 101, 100, > 103, 101, 115, 32, 36, 49, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, > 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 101, 100, 103, > 101, 115, 91, 48, 93, 32, 36, 49, 32, 45, 113, 117, 97, 110, 116, 105, > 122, 101, 91, 48, 93, 32, 51, 44, 48, 44, 49, 32, 45, 98, 91, 48, > 93, 32, 36, 50, 10, 45, 115, 104, 97, 114, 112, 101, 110, 91, 48, 93, > 32, 49, 48, 48, 48, 48, 48, 48, 32, 45, 110, 91, 48, 93, 32, 48, > 44, 49, 32, 45, 42, 91, 48, 44, 45, 49, 93, 32, 45, 110, 91, 48, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 101, 116, 114, 105, 115, 32, 58, 32, 95, 115, > 99, 97, 108, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 65, 112, 112, 108, 121, 32, 116, 101, 116, 114, 105, 115, 32, 101, 102, 102, > 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, > 39, 115, 99, 97, 108, 101, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 116, 101, 116, 114, 105, 115, 32, 49, 48, 10, 116, 101, 116, > 114, 105, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 116, 101, 116, 114, 105, 115, 32, 101, 102, 102, 101, 99, 116, > 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 115, 99, 97, 108, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 44, 49, > 44, 123, 115, 125, 32, 45, 114, 32, 36, 49, 37, 44, 36, 49, 37, 44, > 36, 49, 37, 44, 49, 48, 48, 37, 44, 50, 32, 45, 110, 32, 48, 44, > 50, 53, 53, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 49, 48, > 44, 49, 44, 48, 32, 45, 114, 32, 36, 119, 104, 32, 45, 98, 32, 50, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 51, 48, 48, 44, 49, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, 114, 104, 111, 108, 32, 58, > 32, 95, 77, 62, 48, 44, 95, 78, 62, 48, 44, 95, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 62, 61, 48, 44, 95, 99, 111, 108, 111, 114, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, > 97, 116, 101, 32, 77, 120, 78, 32, 65, 110, 100, 121, 32, 87, 97, 114, > 104, 111, 108, 45, 108, 105, 107, 101, 32, 97, 114, 116, 119, 111, 114, 107, > 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 77, 61, 51, 39, 44, 32, 39, 78, 61, 77, 39, 44, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 50, 39, 32, 97, 110, 100, > 32, 39, 99, 111, 108, 111, 114, 61, 50, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 119, 97, 114, 104, 111, 108, 32, 53, 44, 51, 44, 51, > 44, 52, 48, 10, 119, 97, 114, 104, 111, 108, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 51, 125, 44, 36, 123, 50, 61, 36, 49, > 125, 44, 36, 123, 51, 61, 50, 125, 44, 36, 123, 52, 61, 50, 48, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, > 32, 36, 49, 120, 36, 50, 32, 65, 110, 100, 121, 32, 87, 97, 114, 104, > 111, 108, 45, 108, 105, 107, 101, 32, 97, 114, 116, 119, 111, 114, 107, 32, > 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, > 118, 32, 45, 32, 114, 48, 61, 123, 49, 48, 48, 47, 109, 97, 120, 40, > 36, 49, 44, 36, 50, 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 110, 111, 114, 109, 32, > 45, 98, 32, 36, 51, 32, 45, 114, 32, 36, 114, 48, 37, 44, 36, 114, > 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 113, 117, 97, > 110, 116, 105, 122, 101, 32, 54, 32, 45, 110, 32, 48, 44, 53, 32, 45, > 114, 111, 117, 110, 100, 32, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 40, 48, > 44, 49, 44, 50, 44, 51, 44, 52, 44, 53, 41, 32, 45, 110, 91, 45, > 49, 93, 32, 51, 50, 44, 50, 50, 52, 32, 54, 44, 49, 44, 49, 44, > 50, 44, 49, 50, 56, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 36, 52, 44, 48, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, > 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 45, > 109, 97, 112, 91, 48, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 100, 111, 110, 101, 32, 45, 100, 111, 110, 101, 32, > 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 91, 94, 48, > 93, 32, 36, 49, 44, 36, 50, 32, 45, 110, 109, 91, 49, 93, 32, 64, > 123, 48, 44, 110, 125, 44, 49, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 119, 101, 97, 118, 101, 32, 58, 32, 95, > 100, 101, 110, 115, 105, 116, 121, 62, 61, 48, 44, 48, 60, 61, 95, 116, > 104, 105, 99, 107, 110, 101, 115, 115, 60, 61, 49, 48, 48, 44, 48, 60, > 61, 95, 115, 104, 97, 100, 111, 119, 60, 61, 49, 48, 48, 44, 95, 115, > 104, 97, 100, 105, 110, 103, 62, 61, 48, 44, 95, 102, 105, 98, 101, 114, > 115, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, > 102, 105, 98, 101, 114, 115, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 62, 61, 48, 44, 95, 97, 110, 103, 108, 101, 44, 45, 49, 60, 61, > 95, 120, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, 60, 61, 49, 44, > 45, 49, 60, 61, 95, 121, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 60, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 119, 101, 97, 118, 101, 32, 101, 102, 102, 101, 99, 116, 32, > 116, 111, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 39, 97, 110, 103, 108, 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, > 123, 32, 48, 61, 48, 32, 100, 101, 103, 46, 32, 124, 32, 49, 61, 50, > 50, 46, 53, 32, 100, 101, 103, 46, 32, 124, 32, 50, 61, 52, 53, 32, > 100, 101, 103, 46, 32, 124, 32, 51, 61, 54, 55, 46, 53, 32, 100, 101, > 103, 46, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 100, 101, 110, 115, 105, 116, 121, 61, 54, 39, 44, 32, 39, 116, 104, 105, > 99, 107, 110, 101, 115, 115, 61, 54, 53, 39, 44, 32, 39, 115, 104, 97, > 100, 111, 119, 61, 52, 48, 39, 44, 32, 39, 115, 104, 97, 100, 105, 110, > 103, 61, 48, 46, 53, 39, 44, 32, 39, 102, 105, 98, 101, 114, 115, 95, > 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 48, 39, 44, 32, 39, 102, > 105, 98, 101, 114, 115, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 32, 97, > 110, 100, 32, 39, 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 120, 61, > 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 121, 61, 48, 39, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 119, 101, 97, 118, 101, 32, 44, 10, 119, 101, > 97, 118, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 49, 61, 54, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 54, > 53, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 52, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 51, 60, 61, 49, 48, 48, 32, 38, 38, 32, 36, 123, 52, > 61, 48, 46, 53, 125, 62, 61, 48, 34, 10, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 53, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 54, 61, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 55, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 55, 60, 61, 51, 32, 38, > 38, 32, 36, 123, 56, 61, 48, 125, 62, 61, 45, 49, 32, 38, 38, 32, > 36, 56, 60, 61, 49, 32, 38, 38, 32, 36, 123, 57, 61, 48, 125, 62, > 61, 45, 49, 32, 38, 38, 32, 36, 57, 60, 61, 49, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 119, 101, 97, > 118, 101, 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 115, 116, > 114, 105, 112, 115, 44, 32, 116, 104, 105, 99, 107, 110, 101, 115, 115, 32, > 36, 50, 44, 32, 115, 104, 97, 100, 111, 119, 32, 36, 51, 44, 32, 115, > 104, 97, 100, 105, 110, 103, 32, 36, 52, 44, 32, 34, 92, 10, 34, 102, > 105, 98, 101, 114, 115, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, > 36, 53, 32, 97, 110, 100, 32, 102, 105, 98, 101, 114, 115, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 54, 44, 32, 97, 110, 103, > 108, 101, 32, 34, 123, 36, 55, 42, 50, 50, 46, 53, 125, 34, 32, 100, > 101, 103, 46, 32, 97, 110, 100, 32, 99, 117, 114, 118, 97, 116, 117, 114, > 101, 115, 32, 40, 36, 56, 44, 36, 57, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 108, 91, 48, 93, 10, 119, 61, 123, 114, 111, 117, 110, > 100, 40, 109, 97, 120, 40, 119, 44, 104, 41, 47, 36, 49, 44, 49, 44, > 49, 41, 125, 32, 104, 61, 36, 119, 32, 115, 61, 123, 40, 49, 48, 48, > 45, 36, 51, 41, 42, 50, 53, 53, 37, 125, 32, 112, 61, 123, 109, 97, > 120, 40, 48, 46, 48, 49, 44, 36, 52, 41, 125, 10, 49, 44, 36, 104, > 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 48, 44, 53, 48, 37, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, > 45, 94, 91, 45, 49, 93, 32, 36, 112, 32, 45, 99, 91, 45, 49, 93, > 32, 53, 48, 37, 44, 49, 48, 48, 37, 32, 45, 114, 91, 45, 49, 93, > 32, 123, 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 36, 50, > 42, 36, 119, 37, 41, 41, 125, 44, 49, 48, 48, 37, 10, 36, 119, 44, > 49, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 53, 48, 37, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, > 94, 91, 45, 49, 93, 32, 36, 112, 32, 45, 99, 91, 45, 49, 93, 32, > 53, 48, 37, 44, 49, 48, 48, 37, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 123, > 109, 97, 120, 40, 49, 44, 114, 111, 117, 110, 100, 40, 36, 50, 42, 36, > 104, 37, 41, 41, 125, 10, 45, 45, 42, 91, 45, 49, 93, 32, 45, 49, > 32, 45, 45, 42, 91, 45, 51, 93, 32, 45, 49, 32, 45, 110, 91, 45, > 52, 44, 45, 50, 93, 32, 48, 44, 36, 115, 32, 45, 110, 91, 45, 51, > 44, 45, 49, 93, 32, 36, 115, 44, 50, 53, 53, 10, 123, 119, 125, 44, > 49, 32, 49, 44, 91, 45, 51, 93, 32, 45, 114, 97, 110, 100, 91, 45, > 50, 44, 45, 49, 93, 32, 48, 44, 49, 32, 45, 98, 91, 45, 50, 44, > 45, 49, 93, 32, 36, 54, 37, 32, 45, 110, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 36, 53, 44, 36, 53, 32, 45, 114, 91, 45, 49, 93, 32, > 91, 45, 52, 93, 32, 45, 43, 91, 45, 53, 93, 32, 91, 45, 49, 93, > 32, 45, 43, 91, 45, 52, 44, 45, 49, 93, 32, 45, 43, 91, 45, 53, > 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 45, 102, 91, 45, 51, 93, 32, 50, 53, 53, 32, 45, 97, 91, > 45, 52, 44, 45, 49, 93, 32, 99, 32, 45, 45, 102, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 97, 109, 112, 95, 120, 61, 123, 36, 56, 42, 40, 36, 119, 45, 119, > 41, 47, 50, 125, 32, 97, 109, 112, 95, 121, 61, 123, 36, 57, 42, 40, > 36, 119, 45, 119, 41, 47, 50, 125, 10, 45, 114, 91, 45, 52, 45, 45, > 49, 93, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 102, 91, 45, > 52, 93, 32, 39, 105, 40, 120, 43, 36, 97, 109, 112, 95, 120, 42, 115, > 105, 110, 40, 121, 47, 104, 42, 112, 105, 41, 44, 121, 44, 48, 44, 99, > 44, 49, 44, 50, 41, 39, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, > 40, 120, 45, 36, 97, 109, 112, 95, 120, 42, 115, 105, 110, 40, 121, 47, > 104, 42, 112, 105, 41, 44, 121, 44, 48, 44, 99, 44, 49, 44, 50, 41, > 39, 10, 45, 102, 91, 45, 51, 93, 32, 39, 105, 40, 120, 44, 121, 43, > 36, 97, 109, 112, 95, 121, 42, 115, 105, 110, 40, 120, 47, 119, 42, 112, > 105, 41, 44, 48, 44, 99, 44, 49, 44, 50, 41, 39, 32, 45, 102, 91, > 45, 50, 93, 32, 39, 105, 40, 120, 44, 121, 45, 36, 97, 109, 112, 95, > 121, 42, 115, 105, 110, 40, 120, 47, 119, 42, 112, 105, 41, 44, 48, 44, > 99, 44, 49, 44, 50, 41, 39, 10, 45, 98, 108, 101, 110, 100, 91, 45, > 52, 44, 45, 51, 93, 32, 97, 108, 112, 104, 97, 32, 45, 98, 108, 101, > 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, 32, > 45, 99, 91, 45, 50, 44, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 50, 53, 53, 32, 91, 45, > 49, 93, 32, 91, 45, 51, 93, 32, 45, 97, 91, 45, 52, 44, 45, 50, > 93, 32, 120, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, 114, 111, 116, > 97, 116, 101, 95, 116, 105, 108, 101, 97, 98, 108, 101, 91, 45, 49, 93, > 32, 123, 36, 55, 42, 50, 50, 46, 53, 125, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, > 48, 44, 50, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 119, 104, 105, 114, 108, 115, 32, 58, 32, 95, 116, 101, 120, 116, 117, > 114, 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 62, 61, 48, 44, 95, 100, 97, 114, 107, 110, 101, 115, 115, 62, 61, > 48, 44, 95, 108, 105, 103, 104, 116, 110, 101, 115, 115, 62, 61, 48, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 114, 97, 110, > 100, 111, 109, 32, 119, 104, 105, 114, 108, 32, 116, 101, 120, 116, 117, 114, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 116, 101, 120, 116, 117, 114, 101, 61, 51, 39, 44, 32, 39, 115, 109, 111, > 111, 116, 104, 110, 101, 115, 115, 61, 54, 39, 44, 32, 39, 100, 97, 114, > 107, 110, 101, 115, 115, 61, 48, 46, 53, 39, 32, 97, 110, 100, 32, 39, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 61, 49, 46, 56, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 119, 104, 105, 114, 108, 115, 32, 44, 10, > 119, 104, 105, 114, 108, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 51, 125, 44, 36, 123, 50, 61, 54, 125, 44, 36, 123, 51, > 61, 48, 46, 53, 125, 44, 36, 123, 52, 61, 49, 46, 56, 125, 10, 45, > 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 114, 97, 110, 100, > 111, 109, 32, 119, 104, 105, 114, 108, 32, 116, 101, 120, 116, 117, 114, 101, > 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 116, 101, 120, 116, 117, 114, 101, 32, 36, 49, 44, 32, 115, 109, > 111, 111, 116, 104, 110, 101, 115, 115, 32, 36, 50, 44, 32, 100, 97, 114, > 107, 110, 101, 115, 115, 32, 36, 51, 32, 97, 110, 100, 32, 108, 105, 103, > 104, 116, 110, 101, 115, 115, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, > 105, 115, 101, 91, 45, 49, 93, 32, 48, 46, 51, 44, 50, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 50, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, > 109, 91, 45, 49, 93, 32, 45, 94, 91, 45, 49, 93, 32, 48, 46, 50, > 32, 45, 100, 111, 110, 101, 10, 45, 110, 91, 45, 49, 93, 32, 36, 51, > 44, 36, 52, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 42, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 58, 32, 87, 97, 114, 112, 105, 110, 103, 115, 10, > 35, 64, 103, 109, 105, 99, 32, 101, 117, 99, 108, 105, 100, 101, 97, 110, > 50, 112, 111, 108, 97, 114, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, > 44, 95, 110, 62, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, > 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, > 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 101, 117, 99, 108, 105, 100, 101, 97, > 110, 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, > 102, 111, 114, 109, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, 44, 32, 39, > 110, 61, 49, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 44, 10, > 101, 117, 99, 108, 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 46, 53, 125, > 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 49, 125, > 44, 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 101, 117, 99, 108, 105, 100, 101, 97, 110, > 32, 116, 111, 32, 112, 111, 108, 97, 114, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 40, 123, 119, 125, 44, 123, 104, 125, > 41, 32, 40, 36, 49, 44, 36, 50, 41, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 32, 40, 123, 34, 115, 113, 114, 116, 40, 109, 97, 120, 40, > 34, 64, 123, 45, 49, 44, 48, 125, 34, 44, 34, 64, 123, 45, 50, 44, > 119, 125, 34, 45, 34, 64, 123, 45, 49, 44, 48, 125, 34, 41, 94, 50, > 32, 43, 32, 109, 97, 120, 40, 34, 64, 123, 45, 49, 44, 49, 125, 34, > 44, 34, 64, 123, 45, 50, 44, 104, 125, 34, 45, 34, 64, 123, 45, 49, > 44, 49, 125, 34, 41, 94, 50, 41, 34, 125, 41, 10, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 120, 10, 91, 45, 50, 93, 44, 91, 45, 50, > 93, 44, 49, 44, 49, 44, 64, 123, 45, 49, 44, 50, 125, 34, 42, 40, > 120, 47, 119, 41, 94, 36, 51, 42, 99, 111, 115, 40, 121, 42, 50, 42, > 112, 105, 47, 104, 41, 34, 32, 45, 43, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 48, 125, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, > 49, 44, 49, 44, 64, 123, 45, 50, 44, 50, 125, 34, 42, 40, 120, 47, > 119, 41, 94, 36, 51, 42, 115, 105, 110, 40, 121, 42, 50, 42, 112, 105, > 47, 104, 41, 34, 32, 45, 43, 91, 45, 49, 93, 32, 64, 123, 45, 51, > 44, 49, 125, 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 52, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, > 102, 111, 114, 109, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 114, 97, 110, 100, 111, 109, 32, 115, 109, 111, 111, 116, > 104, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 61, 49, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 100, 101, 102, 111, 114, 109, 91, 48, 93, 32, 49, 48, 32, 45, 45, > 100, 101, 102, 111, 114, 109, 91, 48, 93, 32, 50, 48, 10, 100, 101, 102, > 111, 114, 109, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 114, 97, 110, 100, 111, 109, 32, 115, 109, 111, 111, 116, 104, > 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, > 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 50, 37, 44, 50, 37, 44, 49, 44, 50, 32, 45, 110, > 111, 105, 115, 101, 91, 45, 49, 93, 32, 36, 49, 32, 45, 114, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 50, > 44, 53, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 115, 104, 101, 121, 101, 32, > 58, 32, 95, 120, 44, 95, 121, 44, 48, 60, 61, 95, 114, 97, 100, 105, > 117, 115, 60, 61, 49, 48, 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 102, 105, 115, 104, 45, 101, 121, 101, 32, 100, 101, > 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 120, 61, 121, 61, 53, 48, 39, 44, > 32, 39, 114, 97, 100, 105, 117, 115, 61, 53, 48, 39, 32, 97, 110, 100, > 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 46, 50, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 102, 105, 115, 104, 101, 121, 101, > 32, 44, 10, 102, 105, 115, 104, 101, 121, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 53, 48, 125, 44, 36, 123, 50, 61, 53, > 48, 125, 44, 36, 123, 51, 61, 53, 48, 125, 44, 36, 123, 52, 61, 49, > 46, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 70, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, > 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 99, > 101, 110, 116, 101, 114, 101, 100, 32, 97, 116, 32, 40, 36, 49, 37, 44, > 36, 50, 37, 41, 32, 119, 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, > 32, 36, 51, 37, 32, 97, 110, 100, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 52, 46, 34, 10, 45, 105, 102, 32, 123, 36, 52, 61, > 61, 48, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 49, 32, 45, 61, 91, 45, 49, 93, 32, 49, > 44, 36, 49, 37, 44, 36, 50, 37, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 99, 91, 45, 49, 93, 32, > 48, 44, 36, 51, 37, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, > 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 94, 91, 45, 49, > 93, 32, 123, 49, 47, 36, 52, 125, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 123, 45, 36, 49, 47, 49, 48, 48, 125, 44, 123, 49, 45, 36, 49, > 47, 49, 48, 48, 125, 59, 123, 45, 36, 49, 47, 49, 48, 48, 125, 44, > 123, 49, 45, 36, 49, 47, 49, 48, 48, 125, 94, 123, 45, 36, 50, 47, > 49, 48, 48, 125, 44, 123, 45, 36, 50, 47, 49, 48, 48, 125, 59, 123, > 49, 45, 36, 50, 47, 49, 48, 48, 125, 44, 123, 49, 45, 36, 50, 47, > 49, 48, 48, 125, 41, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 91, 45, 49, 93, 44, 49, 44, 50, 44, 51, 10, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 123, 109, 97, 120, 40, 119, 44, 104, 41, 125, > 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 119, 97, 114, 112, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 108, 111, 119, 101, 114, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 44, 95, 102, 114, 101, 113, 117, 101, 110, 99, 121, 44, 95, > 111, 102, 102, 115, 101, 116, 95, 114, 91, 37, 93, 44, 95, 97, 110, 103, > 108, 101, 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 98, 111, 117, 110, > 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, > 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, > 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 102, 108, 111, > 119, 101, 114, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, > 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 109, > 112, 108, 105, 116, 117, 100, 101, 61, 51, 48, 39, 44, 32, 39, 102, 114, > 101, 113, 117, 101, 110, 99, 121, 61, 54, 39, 44, 32, 39, 111, 102, 102, > 115, 101, 116, 95, 114, 61, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, > 61, 48, 39, 44, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, > 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 50, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 102, 108, 111, 119, 101, 114, 32, > 44, 10, 102, 108, 111, 119, 101, 114, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, 61, 54, 125, 44, > 36, 123, 51, 61, 48, 125, 44, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 46, 53, 125, 44, 36, 123, 54, 61, 48, 46, 53, 125, 44, > 36, 123, 55, 61, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, > 65, 112, 112, 108, 121, 32, 102, 108, 111, 119, 101, 114, 32, 100, 101, 102, > 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, > 117, 100, 101, 32, 36, 49, 44, 32, 102, 114, 101, 113, 117, 101, 110, 99, > 121, 32, 36, 50, 44, 32, 111, 102, 102, 115, 101, 116, 32, 36, 51, 44, > 32, 97, 110, 103, 108, 101, 32, 36, 52, 32, 100, 101, 103, 46, 32, 97, > 110, 100, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 49, 44, 36, 50, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 101, 117, 99, 108, > 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 53, 44, 36, > 54, 44, 49, 44, 36, 55, 32, 45, 115, 104, 105, 102, 116, 32, 36, 51, > 44, 48, 44, 48, 44, 48, 44, 50, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 44, 121, 32, 45, 47, 91, 45, 49, 93, 32, > 123, 104, 125, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 40, 123, > 36, 52, 47, 51, 54, 48, 125, 41, 32, 45, 43, 91, 45, 50, 93, 32, > 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 54, 46, 50, 56, 51, 49, 56, 53, 51, 32, 45, 115, 105, > 110, 91, 45, 49, 93, 10, 45, 42, 91, 45, 49, 93, 32, 36, 49, 32, > 45, 42, 91, 45, 49, 93, 32, 123, 119, 125, 32, 45, 47, 91, 45, 49, > 93, 32, 49, 48, 48, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 119, 97, 114, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 36, 55, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 112, 111, 108, 97, 114, 50, 101, 117, 99, > 108, 105, 100, 101, 97, 110, 32, 36, 53, 44, 36, 54, 44, 49, 44, 49, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 107, 97, 108, 101, 105, 100, 111, > 115, 99, 111, 112, 101, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, 44, > 95, 114, 97, 100, 105, 117, 115, 44, 95, 97, 110, 103, 108, 101, 44, 95, > 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, > 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, > 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, > 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, > 101, 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 101, > 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, > 44, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 48, 48, 39, 44, 32, > 39, 97, 110, 103, 108, 101, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, > 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, > 32, 44, 10, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 46, 53, 125, > 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 49, 48, > 48, 125, 44, 36, 123, 52, 61, 51, 48, 125, 44, 36, 123, 53, 61, 49, > 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, > 101, 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 101, > 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 32, > 40, 36, 49, 44, 36, 50, 41, 44, 32, 114, 97, 100, 105, 117, 115, 32, > 36, 51, 44, 32, 97, 110, 103, 108, 101, 32, 36, 52, 32, 100, 101, 103, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 49, 44, 36, 50, 44, 49, > 44, 36, 53, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 45, 99, 111, 108, 117, 109, 110, 115, 32, > 48, 44, 36, 51, 37, 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 48, 44, 36, 52, 37, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 50, 32, 45, 110, 109, 91, 49, 93, 32, 64, 123, 48, > 44, 110, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 112, 111, 108, 97, 114, 50, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 32, 36, 49, 44, 36, 50, 44, 49, 44, > 36, 53, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 112, 95, 115, 112, 104, 101, 114, 101, 32, 58, 32, 95, 119, 105, 100, > 116, 104, 62, 48, 44, 95, 104, 101, 105, 103, 104, 116, 62, 48, 44, 95, > 114, 97, 100, 105, 117, 115, 44, 95, 100, 105, 108, 97, 116, 105, 111, 110, > 62, 48, 44, 95, 102, 97, 100, 105, 110, 103, 62, 61, 48, 44, 95, 102, > 97, 100, 105, 110, 103, 95, 112, 111, 119, 101, 114, 62, 61, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 77, 97, 112, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 111, 110, 32, 97, > 32, 115, 112, 104, 101, 114, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 119, 105, 100, 116, 104, 61, 104, 101, 105, 103, 104, 116, 61, > 53, 49, 50, 39, 44, 32, 39, 114, 97, 100, 105, 117, 115, 61, 49, 48, > 48, 39, 44, 32, 39, 100, 105, 108, 97, 116, 105, 111, 110, 61, 48, 46, > 53, 39, 44, 32, 39, 102, 97, 100, 105, 110, 103, 61, 48, 39, 32, 97, > 110, 100, 32, 39, 102, 97, 100, 105, 110, 103, 95, 112, 111, 119, 101, 114, > 61, 48, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 109, 97, > 112, 95, 115, 112, 104, 101, 114, 101, 32, 44, 10, 109, 97, 112, 95, 115, > 112, 104, 101, 114, 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, > 50, 61, 53, 49, 50, 125, 62, 48, 32, 38, 38, 32, 36, 123, 53, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 54, 61, 48, 46, 53, > 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 51, 61, > 49, 48, 48, 125, 44, 36, 123, 52, 61, 48, 46, 53, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 77, 97, 112, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 111, 110, 32, 115, 112, 104, 101, 114, 101, 115, 32, 105, 110, > 32, 36, 49, 120, 36, 50, 32, 105, 109, 97, 103, 101, 115, 44, 32, 119, > 105, 116, 104, 32, 114, 97, 100, 105, 117, 115, 32, 36, 51, 44, 32, 100, > 105, 108, 97, 116, 105, 111, 110, 32, 36, 52, 32, 97, 110, 100, 32, 102, > 97, 100, 105, 110, 103, 32, 36, 53, 46, 34, 10, 45, 118, 32, 45, 32, > 114, 50, 61, 123, 40, 36, 51, 42, 109, 105, 110, 40, 36, 49, 44, 36, > 50, 41, 47, 50, 48, 48, 41, 94, 50, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 91, > 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 44, 49, 44, 49, 48, 48, > 37, 44, 48, 32, 45, 110, 109, 91, 48, 93, 32, 64, 123, 49, 44, 110, > 125, 32, 45, 97, 32, 121, 10, 40, 123, 45, 36, 49, 47, 50, 125, 44, > 123, 36, 49, 47, 50, 125, 41, 32, 40, 123, 45, 36, 50, 47, 50, 125, > 59, 123, 36, 50, 47, 50, 125, 41, 32, 45, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, 51, 32, 45, > 97, 116, 97, 110, 50, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 36, 49, 44, 36, 50, 32, 45, 61, 91, > 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, > 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 44, 51, 32, > 45, 47, 91, 45, 49, 93, 32, 36, 114, 50, 32, 45, 115, 113, 114, 116, > 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 49, 10, > 45, 97, 115, 105, 110, 91, 45, 49, 93, 10, 45, 43, 91, 45, 50, 93, > 32, 123, 112, 105, 125, 32, 45, 42, 91, 45, 50, 93, 32, 123, 40, 64, > 123, 45, 51, 44, 119, 125, 45, 49, 41, 47, 40, 50, 42, 112, 105, 41, > 125, 10, 45, 42, 91, 45, 49, 93, 32, 123, 50, 47, 112, 105, 125, 32, > 45, 94, 91, 45, 49, 93, 32, 36, 52, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 64, 123, 45, 51, 44, 104, 125, 45, 49, 125, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 123, 64, > 123, 45, 51, 44, 104, 125, 45, 49, 125, 10, 45, 105, 102, 32, 36, 53, > 32, 45, 45, 103, 101, 91, 45, 49, 93, 32, 49, 32, 45, 100, 105, 115, > 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 36, 53, 37, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 94, 91, 45, 49, 93, 32, 36, 54, 32, 45, 99, > 91, 45, 50, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 45, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, > 45, 49, 44, 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 64, 123, 45, 51, 44, 100, 125, 10, 45, 45, 102, 91, 45, 49, 93, > 32, 122, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 45, > 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 112, 111, 108, 97, 114, 50, 101, 117, 99, 108, 105, 100, > 101, 97, 110, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, 44, 95, 110, > 62, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, > 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, > 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, > 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 112, 111, 108, 97, 114, 32, 116, 111, 32, 101, 117, > 99, 108, 105, 100, 101, 97, 110, 32, 116, 114, 97, 110, 115, 102, 111, 114, > 109, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 99, 120, 61, 99, 121, 61, 48, 46, 53, 39, 44, 32, 39, 110, 61, 49, > 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 101, 117, 99, 108, 105, > 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 44, 32, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 112, 111, 108, 97, > 114, 50, 101, 117, 99, 108, 105, 100, 101, 97, 110, 91, 45, 49, 93, 32, > 44, 10, 112, 111, 108, 97, 114, 50, 101, 117, 99, 108, 105, 100, 101, 97, > 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, 46, > 53, 125, 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, > 49, 125, 44, 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 112, 111, 108, 97, 114, 32, 116, > 111, 32, 101, 117, 99, 108, 105, 100, 101, 97, 110, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 40, 123, 119, 125, 44, 123, > 104, 125, 41, 32, 40, 36, 49, 44, 36, 50, 41, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 40, 123, 34, 115, 113, 114, 116, 40, 109, 97, > 120, 40, 34, 64, 123, 45, 49, 44, 48, 125, 34, 44, 34, 64, 123, 45, > 50, 44, 119, 125, 34, 45, 34, 64, 123, 45, 49, 44, 48, 125, 34, 41, > 94, 50, 32, 43, 32, 109, 97, 120, 40, 34, 64, 123, 45, 49, 44, 49, > 125, 34, 44, 34, 64, 123, 45, 50, 44, 104, 125, 34, 45, 34, 64, 123, > 45, 49, 44, 49, 125, 34, 41, 94, 50, 41, 34, 125, 41, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 49, 44, 34, 119, 42, 40, 115, 113, 114, 116, > 40, 40, 120, 45, 34, 64, 123, 45, 49, 44, 48, 125, 34, 41, 94, 50, > 32, 43, 32, 40, 121, 45, 34, 64, 123, 45, 49, 44, 49, 125, 34, 41, > 94, 50, 41, 47, 34, 64, 123, 45, 49, 44, 50, 125, 34, 41, 94, 40, > 49, 47, 36, 51, 41, 34, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, > 44, 49, 44, 49, 44, 34, 40, 97, 116, 97, 110, 50, 40, 121, 45, 34, > 64, 123, 45, 50, 44, 49, 125, 34, 44, 120, 45, 34, 64, 123, 45, 50, > 44, 48, 125, 34, 41, 42, 104, 47, 40, 50, 42, 112, 105, 41, 43, 104, > 41, 37, 104, 34, 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 52, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, > 97, 105, 110, 100, 114, 111, 112, 115, 32, 58, 32, 95, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 44, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, > 48, 44, 95, 119, 97, 118, 101, 108, 101, 110, 103, 116, 104, 62, 61, 48, > 44, 95, 109, 101, 114, 103, 105, 110, 103, 95, 115, 116, 101, 112, 115, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, > 121, 32, 114, 97, 105, 110, 100, 114, 111, 112, 115, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 32, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 56, 48, 39, 44, 39, 100, 101, 110, 115, 105, 116, 121, 61, 48, 46, > 49, 39, 44, 32, 39, 119, 97, 118, 101, 108, 101, 110, 103, 116, 104, 61, > 49, 39, 32, 97, 110, 100, 32, 39, 109, 101, 114, 103, 105, 110, 103, 95, > 115, 116, 101, 112, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 114, 97, 105, 110, 100, 114, 111, 112, 115, 32, 44, 10, 114, 97, 105, > 110, 100, 114, 111, 112, 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 34, 36, 123, 50, 61, 48, 46, 49, 125, 62, 61, 48, 32, 38, 38, 32, > 36, 123, 51, 61, 49, 125, 62, 61, 48, 32, 38, 38, 32, 105, 115, 105, > 110, 116, 40, 36, 123, 52, 61, 48, 125, 41, 32, 38, 38, 32, 36, 52, > 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 56, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, > 121, 32, 114, 97, 105, 110, 100, 114, 111, 112, 115, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 49, 44, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, > 50, 44, 32, 119, 97, 118, 101, 108, 101, 110, 103, 116, 104, 32, 36, 51, > 32, 97, 110, 100, 32, 36, 52, 32, 109, 101, 114, 103, 105, 110, 103, 32, > 115, 116, 101, 112, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, > 45, 49, 93, 32, 36, 50, 44, 50, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 102, 91, 45, 49, 93, 32, > 39, 99, 111, 115, 40, 105, 41, 47, 40, 49, 43, 105, 47, 36, 51, 41, > 39, 10, 45, 105, 102, 32, 36, 52, 10, 45, 105, 91, 45, 50, 93, 32, > 40, 48, 44, 49, 44, 48, 59, 49, 44, 48, 44, 49, 59, 48, 44, 49, > 44, 48, 41, 32, 45, 47, 91, 45, 50, 93, 32, 50, 32, 91, 45, 49, > 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 52, 32, 45, 45, 99, > 111, 110, 118, 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 49, 32, 45, 45, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 114, 109, 91, 45, 51, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, > 91, 45, 51, 44, 45, 50, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 103, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 49, 47, 40, 49, 101, > 45, 53, 43, 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, 44, 97, > 98, 115, 40, 105, 77, 41, 41, 41, 125, 10, 45, 119, 97, 114, 112, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 105, 112, 112, 108, > 101, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 44, 95, > 102, 114, 101, 113, 117, 101, 110, 99, 121, 44, 95, 115, 104, 97, 112, 101, > 61, 123, 32, 48, 61, 98, 108, 111, 99, 32, 124, 32, 49, 61, 116, 114, > 105, 97, 110, 103, 108, 101, 32, 124, 32, 50, 61, 115, 105, 110, 101, 32, > 124, 32, 51, 61, 115, 105, 110, 101, 43, 32, 124, 32, 52, 61, 114, 97, > 110, 100, 111, 109, 32, 125, 44, 95, 97, 110, 103, 108, 101, 44, 95, 111, > 102, 102, 115, 101, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 112, 112, 108, 121, 32, 114, 105, 112, 112, 108, 101, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, > 49, 48, 39, 44, 32, 39, 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, > 49, 48, 39, 44, 32, 39, 115, 104, 97, 112, 101, 61, 50, 39, 44, 32, > 39, 97, 110, 103, 108, 101, 61, 48, 39, 32, 97, 110, 100, 32, 39, 111, > 102, 102, 115, 101, 116, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 114, 105, 112, 112, 108, 101, 32, 44, 10, 114, 105, 112, 112, 108, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, > 44, 36, 123, 50, 61, 50, 48, 125, 44, 36, 123, 51, 61, 50, 125, 44, > 36, 123, 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 114, 105, 112, > 112, 108, 101, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, > 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, 36, 49, 44, 32, 102, > 114, 101, 113, 117, 101, 110, 99, 121, 32, 36, 50, 44, 32, 115, 104, 97, > 112, 101, 32, 36, 51, 44, 32, 97, 110, 103, 108, 101, 32, 36, 52, 32, > 100, 101, 103, 46, 32, 97, 110, 100, 32, 111, 102, 102, 115, 101, 116, 32, > 36, 53, 46, 34, 10, 45, 118, 32, 45, 10, 116, 104, 101, 116, 97, 61, > 123, 36, 52, 42, 112, 105, 47, 49, 56, 48, 125, 32, 67, 61, 123, 99, > 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 83, 61, 123, 45, > 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 34, 120, 34, > 32, 45, 45, 91, 45, 49, 93, 32, 123, 119, 47, 50, 125, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 121, 39, 10, > 45, 45, 91, 45, 49, 93, 32, 123, 104, 47, 50, 45, 36, 53, 125, 32, > 45, 42, 91, 45, 50, 93, 32, 36, 83, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 67, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 95, > 114, 105, 112, 112, 108, 101, 36, 51, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 10, 45, 45, 42, 91, 45, 49, 93, 32, 123, 45, 36, 83, 125, > 32, 45, 42, 91, 45, 50, 93, 32, 36, 67, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 95, 114, 105, 112, 112, 108, 101, 48, 32, 58, 32, 45, 102, 32, 123, > 36, 49, 47, 50, 125, 42, 34, 40, 49, 45, 50, 42, 40, 105, 37, 34, > 123, 50, 42, 36, 50, 125, 34, 60, 36, 50, 41, 41, 34, 10, 95, 114, > 105, 112, 112, 108, 101, 49, 32, 58, 32, 45, 102, 32, 34, 73, 61, 40, > 105, 37, 36, 50, 41, 47, 36, 50, 59, 36, 49, 42, 40, 50, 42, 105, > 102, 40, 73, 60, 48, 46, 53, 44, 73, 44, 49, 45, 73, 41, 45, 48, > 46, 53, 41, 34, 10, 95, 114, 105, 112, 112, 108, 101, 50, 32, 58, 32, > 45, 102, 32, 123, 45, 36, 49, 47, 50, 125, 42, 34, 99, 111, 115, 40, > 105, 42, 34, 123, 50, 42, 112, 105, 47, 36, 50, 125, 34, 41, 34, 10, > 95, 114, 105, 112, 112, 108, 101, 51, 32, 58, 32, 45, 102, 32, 123, 45, > 36, 49, 47, 50, 125, 42, 34, 97, 98, 115, 40, 99, 111, 115, 40, 105, > 42, 34, 123, 50, 42, 112, 105, 47, 36, 50, 125, 34, 41, 41, 34, 10, > 95, 114, 105, 112, 112, 108, 101, 52, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 42, 32, 45, 110, 32, 48, 44, 123, 104, 45, 49, 125, 32, 49, > 44, 123, 104, 125, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, > 45, 36, 49, 47, 50, 125, 44, 123, 36, 49, 47, 50, 125, 32, 109, 61, > 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, 125, 32, 45, 98, 91, 45, > 49, 93, 32, 123, 36, 50, 47, 49, 48, 125, 32, 45, 110, 91, 45, 49, > 93, 32, 36, 109, 44, 36, 77, 32, 45, 109, 97, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 35, 64, > 103, 109, 105, 99, 32, 114, 111, 116, 111, 105, 100, 111, 115, 99, 111, 112, > 101, 32, 58, 32, 95, 99, 120, 44, 95, 99, 121, 44, 95, 116, 105, 108, > 101, 115, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 91, 37, 93, 62, 61, 48, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, > 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, > 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 114, 111, 116, 97, 116, 105, > 111, 110, 97, 108, 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, > 101, 32, 101, 102, 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 120, 61, 99, 121, 61, 53, > 48, 37, 39, 44, 32, 39, 116, 105, 108, 101, 115, 61, 49, 48, 39, 44, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 49, 39, 32, > 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, 111, 105, 100, 111, > 115, 99, 111, 112, 101, 32, 44, 10, 114, 111, 116, 111, 105, 100, 111, 115, > 99, 111, 112, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 53, 48, 37, 125, 44, 36, 123, 50, 61, 53, 48, 37, 125, 44, 36, > 123, 53, 61, 49, 125, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, > 51, 61, 49, 48, 125, 62, 48, 32, 38, 38, 32, 36, 123, 52, 61, 49, > 125, 62, 61, 48, 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 114, 101, 97, 116, 101, 32, 114, 111, 116, 97, 116, 105, 111, 110, 97, 108, > 32, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 101, 102, > 102, 101, 99, 116, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 99, 101, 110, 116, 101, 114, 32, 40, > 36, 49, 44, 36, 50, 41, 44, 32, 36, 51, 32, 116, 105, 108, 101, 115, > 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, > 36, 52, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 51, 32, 45, 45, 114, 111, 116, 97, 116, 101, 91, > 48, 93, 32, 123, 51, 54, 48, 47, 36, 51, 125, 44, 49, 44, 36, 53, > 44, 36, 49, 44, 36, 50, 32, 45, 98, 108, 101, 110, 100, 95, 101, 100, > 103, 101, 115, 32, 36, 52, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, > 58, 32, 95, 120, 91, 37, 93, 44, 95, 121, 91, 37, 93, 44, 95, 97, > 110, 103, 108, 101, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, > 32, 48, 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, > 61, 110, 101, 117, 109, 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, > 105, 111, 100, 105, 99, 32, 125, 44, 95, 105, 115, 95, 97, 110, 116, 105, > 115, 121, 109, 109, 101, 116, 114, 121, 61, 123, 32, 48, 32, 124, 32, 49, > 32, 125, 44, 95, 115, 119, 97, 112, 95, 115, 105, 100, 101, 115, 61, 123, > 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 83, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 114, 101, 103, 97, > 114, 100, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 97, 120, 105, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 120, 61, 121, 61, 53, 48, 37, 39, 44, 32, 39, 97, 110, 103, 108, 101, > 61, 57, 48, 39, 44, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, > 49, 39, 44, 32, 39, 105, 115, 95, 97, 110, 116, 105, 115, 121, 109, 109, > 101, 116, 114, 121, 61, 48, 39, 32, 97, 110, 100, 32, 39, 115, 119, 97, > 112, 95, 115, 105, 100, 101, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 53, 48, > 37, 44, 53, 48, 37, 44, 52, 53, 32, 45, 45, 115, 121, 109, 109, 101, > 116, 114, 105, 122, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 45, 52, 53, 10, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 53, 48, 37, > 125, 44, 36, 123, 50, 61, 53, 48, 37, 125, 44, 36, 123, 51, 61, 57, > 48, 125, 44, 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, > 44, 36, 123, 54, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 83, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 114, 101, 103, 97, 114, 100, 105, 110, 103, 32, 97, > 120, 105, 115, 32, 40, 36, 49, 44, 36, 50, 44, 36, 51, 32, 100, 101, > 103, 46, 41, 46, 34, 10, 45, 118, 32, 45, 10, 116, 104, 101, 116, 97, > 61, 123, 36, 51, 42, 112, 105, 47, 49, 56, 48, 125, 32, 117, 61, 123, > 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 32, 118, 61, 123, > 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 45, 105, 102, > 32, 36, 54, 32, 115, 121, 109, 109, 101, 116, 114, 121, 95, 99, 111, 110, > 100, 61, 65, 60, 48, 32, 45, 101, 108, 115, 101, 32, 115, 121, 109, 109, > 101, 116, 114, 121, 95, 99, 111, 110, 100, 61, 65, 62, 48, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 120, 48, 61, 123, 105, 102, 40, 64, 123, > 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, 49, 125, > 44, 119, 42, 36, 49, 44, 36, 49, 41, 125, 10, 121, 48, 61, 123, 105, > 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, > 32, 36, 50, 125, 44, 104, 42, 36, 50, 44, 36, 50, 41, 125, 10, 45, > 105, 102, 32, 36, 53, 32, 45, 102, 32, 39, 65, 61, 40, 36, 121, 48, > 45, 121, 41, 42, 36, 117, 45, 40, 36, 120, 48, 45, 120, 41, 42, 36, > 118, 59, 88, 61, 120, 43, 50, 42, 40, 36, 120, 48, 45, 120, 41, 59, > 89, 61, 121, 43, 50, 42, 40, 36, 121, 48, 45, 121, 41, 59, 105, 102, > 40, 36, 115, 121, 109, 109, 101, 116, 114, 121, 95, 99, 111, 110, 100, 44, > 105, 40, 88, 44, 89, 44, 122, 44, 99, 44, 49, 44, 36, 52, 41, 44, > 105, 41, 39, 10, 45, 101, 108, 115, 101, 32, 45, 102, 32, 39, 65, 61, > 40, 36, 121, 48, 45, 121, 41, 42, 36, 117, 45, 40, 36, 120, 48, 45, > 120, 41, 42, 36, 118, 59, 88, 61, 120, 45, 50, 42, 36, 118, 42, 65, > 59, 89, 61, 121, 43, 50, 42, 36, 117, 42, 65, 59, 105, 102, 40, 36, > 115, 121, 109, 109, 101, 116, 114, 121, 95, 99, 111, 110, 100, 44, 105, 40, > 88, 44, 89, 44, 122, 44, 99, 44, 49, 44, 36, 52, 41, 44, 105, 41, > 39, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, 97, 114, > 32, 58, 32, 34, 101, 120, 112, 114, 95, 114, 97, 100, 105, 117, 115, 34, > 44, 95, 34, 101, 120, 112, 114, 95, 97, 110, 103, 108, 101, 34, 44, 95, > 120, 95, 99, 101, 110, 116, 101, 114, 44, 95, 121, 95, 99, 101, 110, 116, > 101, 114, 44, 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, > 61, 100, 105, 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, > 101, 117, 109, 97, 110, 110, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 65, 112, 112, 108, 121, 32, 117, 115, 101, 114, 45, 100, 101, 102, > 105, 110, 101, 100, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 111, > 110, 32, 112, 111, 108, 97, 114, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 101, 120, 112, 114, 95, 114, 97, 100, 105, 117, 115, > 61, 82, 45, 114, 39, 44, 32, 39, 101, 120, 112, 114, 95, 114, 97, 110, > 103, 108, 101, 61, 97, 39, 44, 32, 39, 120, 95, 99, 101, 110, 116, 101, > 114, 61, 121, 95, 99, 101, 110, 116, 101, 114, 61, 53, 48, 39, 32, 97, > 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 116, 114, 97, 110, 115, 102, 111, 114, > 109, 95, 112, 111, 108, 97, 114, 91, 48, 93, 32, 82, 42, 40, 114, 47, > 82, 41, 94, 50, 44, 97, 32, 45, 45, 116, 114, 97, 110, 115, 102, 111, > 114, 109, 95, 112, 111, 108, 97, 114, 91, 48, 93, 32, 114, 44, 50, 42, > 97, 10, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, 97, > 114, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 82, > 45, 114, 125, 34, 44, 34, 36, 123, 50, 61, 97, 125, 34, 44, 36, 123, > 51, 61, 53, 48, 125, 44, 36, 123, 52, 61, 53, 48, 125, 44, 36, 123, > 53, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 99, 117, 115, 116, 111, 109, 32, 112, 111, 108, 97, 114, > 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 119, 105, 116, 104, 32, > 39, 110, 101, 119, 95, 114, 32, 61, 32, 36, 49, 39, 44, 32, 39, 110, > 101, 119, 95, 97, 32, 61, 32, 36, 50, 39, 44, 32, 99, 101, 110, 116, > 101, 114, 101, 100, 32, 97, 116, 32, 40, 36, 51, 37, 44, 36, 52, 37, > 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 82, 61, 123, 34, 115, > 113, 114, 116, 40, 40, 109, 97, 120, 40, 36, 51, 44, 49, 48, 48, 45, > 36, 51, 41, 42, 119, 47, 49, 48, 48, 41, 94, 50, 32, 43, 32, 40, > 109, 97, 120, 40, 36, 52, 44, 49, 48, 48, 45, 36, 52, 41, 42, 104, > 47, 49, 48, 48, 41, 94, 50, 41, 34, 125, 10, 119, 61, 123, 34, 36, > 51, 42, 119, 47, 49, 48, 48, 34, 125, 10, 104, 61, 123, 34, 36, 52, > 42, 104, 47, 49, 48, 48, 34, 125, 10, 45, 102, 32, 34, 82, 32, 61, > 34, 36, 82, 34, 59, 10, 114, 32, 61, 32, 115, 113, 114, 116, 40, 40, > 120, 45, 34, 36, 119, 34, 41, 94, 50, 32, 43, 32, 40, 121, 45, 34, > 36, 104, 34, 41, 94, 50, 41, 59, 10, 97, 32, 61, 32, 97, 116, 97, > 110, 50, 40, 121, 45, 34, 36, 104, 34, 44, 120, 45, 34, 36, 119, 34, > 41, 59, 10, 110, 114, 32, 61, 32, 36, 49, 59, 10, 110, 97, 32, 61, > 32, 36, 50, 59, 10, 105, 40, 34, 36, 119, 34, 32, 43, 32, 110, 114, > 42, 99, 111, 115, 40, 110, 97, 41, 44, 32, 34, 36, 104, 34, 32, 43, > 32, 110, 114, 42, 115, 105, 110, 40, 110, 97, 41, 44, 32, 122, 44, 32, > 99, 44, 32, 49, 44, 36, 53, 41, 34, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 116, 119, 105, 114, 108, 32, 58, 32, 95, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 116, > 119, 105, 114, 108, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 39, 44, 32, 39, 99, 120, > 61, 99, 121, 61, 48, 46, 53, 39, 32, 97, 110, 100, 32, 39, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 116, 119, 105, 114, 108, 32, 48, 46, 54, 10, 116, 119, 105, 114, > 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 125, > 44, 36, 123, 50, 61, 48, 46, 53, 125, 44, 36, 123, 51, 61, 48, 46, > 53, 125, 44, 36, 123, 52, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 65, 112, 112, 108, 121, 32, 116, 119, 105, 114, 108, 32, 100, > 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, > 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 32, 36, 49, 32, 97, 110, 100, 32, 99, 101, 110, > 116, 101, 114, 32, 97, 116, 32, 40, 36, 50, 37, 44, 36, 51, 37, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 50, 44, 36, 51, 44, 49, > 44, 36, 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 91, > 36, 62, 93, 44, 91, 36, 62, 93, 44, 49, 44, 49, 44, 36, 49, 42, > 120, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, > 45, 49, 44, 48, 32, 45, 119, 97, 114, 112, 91, 36, 62, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 49, 44, 50, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 112, 111, 108, 97, 114, 50, 101, > 117, 99, 108, 105, 100, 101, 97, 110, 32, 36, 50, 44, 36, 51, 44, 49, > 44, 49, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, > 97, 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, 101, 32, > 58, 32, 95, 120, 45, 97, 110, 103, 108, 101, 44, 95, 121, 45, 97, 110, > 103, 108, 101, 44, 95, 122, 111, 111, 109, 62, 48, 44, 95, 120, 45, 99, > 101, 110, 116, 101, 114, 44, 95, 121, 45, 99, 101, 110, 116, 101, 114, 44, > 95, 98, 111, 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, > 114, 105, 99, 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, > 97, 110, 110, 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, > 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 97, 114, 112, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, > 101, 32, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 120, 45, 97, 110, 103, 108, 101, > 61, 49, 46, 53, 39, 44, 32, 39, 121, 45, 97, 110, 103, 108, 101, 61, > 48, 39, 44, 32, 39, 122, 111, 111, 109, 61, 49, 39, 44, 32, 39, 120, > 45, 99, 101, 110, 116, 101, 114, 61, 121, 45, 99, 101, 110, 116, 101, 114, > 61, 53, 48, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, > 114, 121, 61, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 119, 97, > 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, 101, 32, 44, > 10, 119, 97, 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, > 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 46, > 53, 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 49, 125, > 44, 36, 123, 52, 61, 53, 48, 125, 44, 36, 123, 53, 61, 53, 48, 125, > 44, 36, 123, 54, 61, 50, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 112, 101, 114, 115, 112, 101, 99, 116, 105, > 118, 101, 32, 119, 97, 114, 112, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 115, 32, > 40, 36, 49, 32, 100, 101, 103, 46, 44, 36, 50, 32, 100, 101, 103, 46, > 41, 44, 32, 122, 111, 111, 109, 32, 36, 51, 32, 97, 110, 100, 32, 111, > 102, 102, 115, 101, 116, 115, 32, 40, 36, 52, 44, 36, 53, 41, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 40, 48, 44, 49, 48, 48, 41, 32, > 45, 45, 91, 45, 49, 93, 32, 36, 52, 32, 45, 47, 91, 45, 49, 93, > 32, 49, 48, 48, 32, 40, 48, 59, 49, 48, 48, 41, 32, 45, 45, 91, > 45, 49, 93, 32, 36, 53, 32, 45, 47, 91, 45, 49, 93, 32, 49, 48, > 48, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 91, 45, 51, 93, 44, 91, 45, 51, 93, 44, 49, 44, 51, 10, 45, > 45, 42, 91, 45, 50, 93, 32, 36, 50, 32, 45, 45, 42, 91, 45, 50, > 93, 32, 36, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 43, 91, 45, 49, 93, 32, 36, 51, 32, 45, 47, 91, 45, 51, 93, 32, > 91, 45, 49, 93, 32, 45, 47, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 42, 91, 45, 50, 93, 32, 49, 48, 48, 32, 45, 43, 91, 45, 50, 93, > 32, 36, 52, 32, 45, 47, 91, 45, 50, 93, 32, 49, 48, 48, 32, 45, > 42, 91, 45, 50, 93, 32, 64, 123, 45, 51, 44, 119, 125, 10, 45, 42, > 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 43, 91, 45, 49, 93, 32, > 36, 53, 32, 45, 47, 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 42, > 91, 45, 49, 93, 32, 64, 123, 45, 51, 44, 104, 125, 10, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 54, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, > 97, 116, 101, 114, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 62, 61, 48, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, > 108, 121, 32, 119, 97, 116, 101, 114, 32, 100, 101, 102, 111, 114, 109, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 51, 48, 39, > 32, 97, 110, 100, 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 61, 49, 46, 53, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 119, 97, > 116, 101, 114, 32, 44, 10, 119, 97, 116, 101, 114, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, 61, > 49, 46, 53, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, > 112, 108, 121, 32, 119, 97, 116, 101, 114, 32, 100, 101, 102, 111, 114, 109, > 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, > 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 32, 36, 49, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 32, 36, 50, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 50, > 53, 37, 44, 50, 53, 37, 44, 50, 53, 37, 44, 49, 32, 45, 110, 111, > 105, 115, 101, 91, 45, 49, 93, 32, 36, 49, 32, 45, 103, 91, 45, 49, > 93, 32, 120, 121, 122, 32, 45, 43, 91, 45, 49, 44, 45, 50, 44, 45, > 51, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, 50, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 49, 44, 50, 44, 51, 32, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 119, 97, > 118, 101, 32, 58, 32, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, > 61, 48, 44, 95, 102, 114, 101, 113, 117, 101, 110, 99, 121, 62, 61, 48, > 44, 95, 99, 101, 110, 116, 101, 114, 95, 120, 44, 95, 99, 101, 110, 116, > 101, 114, 95, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, > 112, 108, 121, 32, 119, 97, 118, 101, 32, 100, 101, 102, 111, 114, 109, 97, > 116, 105, 111, 110, 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, 61, 52, 39, 44, > 32, 39, 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, 48, 46, 52, 39, > 32, 97, 110, 100, 32, 39, 99, 101, 110, 116, 101, 114, 95, 120, 61, 99, > 101, 110, 116, 101, 114, 95, 121, 61, 53, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 119, 97, 118, 101, 32, 44, 10, 119, 97, 118, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 52, 125, 44, 36, > 123, 50, 61, 48, 46, 52, 125, 44, 36, 123, 51, 61, 53, 48, 125, 44, > 36, 123, 52, 61, 53, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 65, 112, 112, 108, 121, 32, 119, 97, 118, 101, 32, 100, 101, 102, 111, > 114, 109, 97, 116, 105, 111, 110, 32, 111, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, > 100, 101, 32, 36, 49, 44, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, > 32, 36, 50, 32, 97, 110, 100, 32, 99, 101, 110, 116, 101, 114, 32, 97, > 116, 32, 40, 36, 51, 37, 44, 36, 52, 37, 41, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 61, 91, 45, 49, 93, 32, 49, 44, 36, 51, 37, 44, 36, 52, 37, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 10, > 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, 115, 105, 110, 91, > 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 50, 93, 32, 45, 97, 91, > 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 49, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 119, 105, 110, 100, 32, 58, 32, 95, 97, 109, 112, 108, > 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 97, 110, 103, 108, 101, 44, > 48, 60, 61, 95, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 60, > 61, 49, 44, 95, 116, 104, 114, 101, 115, 104, 111, 108, 100, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 119, 105, 110, > 100, 32, 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 50, 48, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 48, 39, 44, > 32, 39, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, 110, 61, 48, 46, > 55, 39, 32, 97, 110, 100, 32, 39, 116, 104, 114, 101, 115, 104, 111, 108, > 100, 61, 50, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 119, 105, > 110, 100, 32, 44, 10, 119, 105, 110, 100, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, 61, 50, 48, > 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, 32, 38, 38, 32, 36, > 123, 51, 61, 48, 46, 55, 125, 62, 61, 48, 32, 38, 38, 32, 36, 51, > 60, 61, 49, 34, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 50, 61, > 48, 125, 44, 36, 123, 52, 61, 50, 48, 125, 34, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 119, 105, 110, 100, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, > 101, 32, 36, 49, 44, 32, 97, 110, 103, 108, 101, 32, 34, 123, 114, 111, > 117, 110, 100, 40, 36, 50, 47, 52, 53, 41, 42, 52, 53, 125, 34, 32, > 100, 101, 103, 46, 44, 32, 97, 116, 116, 101, 110, 117, 97, 116, 105, 111, > 110, 32, 36, 51, 32, 97, 110, 100, 32, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 52, 46, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, > 32, 123, 33, 36, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 100, 120, 100, 121, 61, 64, 123, 45, 95, 119, > 105, 110, 100, 123, 114, 111, 117, 110, 100, 40, 36, 50, 47, 52, 53, 41, > 37, 56, 125, 125, 10, 102, 97, 99, 116, 61, 123, 40, 49, 45, 36, 51, > 41, 94, 40, 49, 47, 36, 49, 41, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 103, 101, 91, > 45, 49, 93, 32, 36, 52, 37, 10, 115, 117, 109, 61, 64, 123, 45, 49, > 44, 43, 125, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 91, 45, 50, 93, 32, 45, 42, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 10, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 36, 100, > 120, 100, 121, 44, 48, 44, 48, 44, 48, 32, 45, 109, 97, 120, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 102, 97, 99, 116, 10, 45, 114, 101, 109, 111, 118, 101, 95, 112, 105, 120, > 101, 108, 115, 91, 45, 49, 93, 32, 123, 49, 48, 48, 47, 36, 49, 125, > 44, 36, 115, 117, 109, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 95, 119, 105, 110, 100, 48, 32, 58, 32, 45, 117, > 32, 49, 44, 48, 10, 95, 119, 105, 110, 100, 49, 32, 58, 32, 45, 117, > 32, 49, 44, 49, 10, 95, 119, 105, 110, 100, 50, 32, 58, 32, 45, 117, > 32, 48, 44, 49, 10, 95, 119, 105, 110, 100, 51, 32, 58, 32, 45, 117, > 32, 45, 49, 44, 49, 10, 95, 119, 105, 110, 100, 52, 32, 58, 32, 45, > 117, 32, 45, 49, 44, 48, 10, 95, 119, 105, 110, 100, 53, 32, 58, 32, > 45, 117, 32, 45, 49, 44, 45, 49, 10, 95, 119, 105, 110, 100, 54, 32, > 58, 32, 45, 117, 32, 48, 44, 45, 49, 10, 95, 119, 105, 110, 100, 55, > 32, 58, 32, 45, 117, 32, 49, 44, 45, 49, 10, 35, 64, 103, 109, 105, > 99, 32, 122, 111, 111, 109, 32, 58, 32, 95, 102, 97, 99, 116, 111, 114, > 44, 95, 99, 120, 44, 95, 99, 121, 44, 95, 99, 122, 44, 95, 98, 111, > 117, 110, 100, 97, 114, 121, 61, 123, 32, 48, 61, 100, 105, 114, 105, 99, > 104, 108, 101, 116, 32, 124, 32, 49, 61, 110, 101, 117, 109, 97, 110, 110, > 32, 124, 32, 50, 61, 112, 101, 114, 105, 111, 100, 105, 99, 32, 125, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 112, 112, 108, 121, 32, 122, > 111, 111, 109, 32, 102, 97, 99, 116, 111, 114, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 102, 97, 99, 116, 111, 114, 61, > 49, 39, 44, 32, 39, 99, 120, 61, 99, 121, 61, 99, 122, 61, 48, 46, > 53, 39, 32, 97, 110, 100, 32, 39, 98, 111, 117, 110, 100, 97, 114, 121, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 122, 111, 111, 109, > 91, 48, 93, 32, 48, 46, 54, 32, 45, 45, 122, 111, 111, 109, 91, 48, > 93, 32, 49, 46, 53, 10, 122, 111, 111, 109, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 50, 125, 44, 36, 123, 50, 61, 48, 46, > 53, 125, 44, 36, 123, 51, 61, 48, 46, 53, 125, 44, 36, 123, 52, 61, > 48, 46, 53, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 122, 111, 111, 109, 32, > 101, 102, 102, 101, 99, 116, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 102, 97, 99, 116, 111, 114, 32, 36, > 49, 32, 97, 110, 100, 32, 99, 101, 110, 116, 101, 114, 32, 40, 36, 50, > 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 123, 100, 61, 61, 49, 125, 10, 40, 123, 40, 119, 45, 49, 41, > 42, 36, 50, 42, 40, 49, 45, 49, 47, 36, 49, 41, 125, 44, 123, 40, > 119, 45, 49, 41, 42, 40, 36, 50, 43, 40, 49, 45, 36, 50, 41, 47, > 36, 49, 41, 125, 41, 10, 40, 123, 40, 64, 123, 45, 50, 44, 104, 125, > 45, 49, 41, 42, 36, 51, 42, 40, 49, 45, 49, 47, 36, 49, 41, 125, > 59, 123, 40, 64, 123, 45, 50, 44, 104, 125, 45, 49, 41, 42, 40, 36, > 51, 43, 40, 49, 45, 36, 51, 41, 47, 36, 49, 41, 125, 41, 10, 45, > 114, 91, 45, 50, 45, 45, 49, 93, 32, 91, 45, 51, 93, 44, 91, 45, > 51, 93, 44, 49, 44, 49, 44, 51, 32, 45, 97, 91, 45, 50, 45, 45, > 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 49, 44, 36, 53, 10, 45, 101, 108, 115, 101, > 10, 40, 123, 40, 119, 45, 49, 41, 42, 36, 50, 42, 40, 49, 45, 49, > 47, 36, 49, 41, 125, 44, 123, 40, 119, 45, 49, 41, 42, 40, 36, 50, > 43, 40, 49, 45, 36, 50, 41, 47, 36, 49, 41, 125, 41, 10, 40, 123, > 40, 64, 123, 45, 50, 44, 104, 125, 45, 49, 41, 42, 36, 51, 42, 40, > 49, 45, 49, 47, 36, 49, 41, 125, 59, 123, 40, 64, 123, 45, 50, 44, > 104, 125, 45, 49, 41, 42, 40, 36, 51, 43, 40, 49, 45, 36, 51, 41, > 47, 36, 49, 41, 125, 41, 10, 40, 123, 40, 64, 123, 45, 51, 44, 100, > 125, 45, 49, 41, 42, 36, 52, 42, 40, 49, 45, 49, 47, 36, 49, 41, > 125, 47, 123, 40, 64, 123, 45, 51, 44, 100, 125, 45, 49, 41, 42, 40, > 36, 52, 43, 40, 49, 45, 36, 52, 41, 47, 36, 49, 41, 125, 41, 10, > 45, 114, 91, 45, 51, 45, 45, 49, 93, 32, 91, 45, 52, 93, 44, 91, > 45, 52, 93, 44, 91, 45, 52, 93, 44, 49, 44, 51, 32, 45, 97, 91, > 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 119, 97, 114, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, 36, 53, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 58, 32, 68, 101, 103, 114, 97, 100, 97, > 116, 105, 111, 110, 115, 10, 35, 64, 103, 109, 105, 99, 32, 99, 114, 97, > 99, 107, 115, 32, 58, 32, 95, 100, 101, 110, 115, 105, 116, 121, 62, 61, > 48, 44, 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 44, 95, 114, 101, > 108, 105, 101, 102, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 114, 97, 110, 100, > 111, 109, 32, 99, 114, 97, 99, 107, 115, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 110, 115, 105, 116, 121, 61, > 48, 46, 50, 39, 44, 32, 39, 97, 109, 112, 108, 105, 116, 117, 100, 101, > 61, 52, 48, 39, 32, 97, 110, 100, 32, 39, 114, 101, 108, 105, 101, 102, > 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 99, 114, 97, 99, > 107, 115, 32, 48, 46, 50, 44, 54, 48, 44, 49, 10, 99, 114, 97, 99, > 107, 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 48, > 46, 50, 125, 44, 36, 123, 50, 61, 52, 48, 125, 44, 36, 123, 51, 61, > 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, > 114, 97, 110, 100, 111, 109, 32, 99, 114, 97, 99, 107, 115, 32, 116, 111, > 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 100, > 101, 110, 115, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 40, 123, 105, 109, 125, 44, 123, 105, 77, 125, 41, 32, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 32, 45, 110, 111, > 105, 115, 101, 91, 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 100, 105, > 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 49, 48, 48, 48, 48, 10, > 45, 105, 102, 32, 36, 51, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, > 93, 32, 45, 49, 44, 49, 32, 45, 101, 108, 115, 101, 32, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 43, 91, 45, 51, 44, 45, > 49, 93, 32, 45, 99, 91, 45, 50, 93, 32, 64, 45, 49, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 108, 105, > 103, 104, 116, 95, 112, 97, 116, 99, 104, 32, 58, 32, 95, 100, 101, 110, > 115, 105, 116, 121, 62, 48, 44, 95, 100, 97, 114, 107, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 108, 105, 103, 104, 116, 110, 101, 115, 115, 62, 61, > 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 108, > 105, 103, 104, 116, 32, 112, 97, 116, 99, 104, 101, 115, 32, 116, 111, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 100, 101, 110, 115, 105, > 116, 121, 61, 49, 48, 39, 44, 32, 39, 100, 97, 114, 107, 110, 101, 115, > 115, 61, 48, 46, 57, 39, 32, 97, 110, 100, 32, 39, 108, 105, 103, 104, > 116, 110, 101, 115, 115, 61, 49, 46, 55, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 108, 105, 103, 104, 116, 95, 112, 97, 116, 99, 104, 32, 50, > 48, 44, 48, 46, 57, 44, 52, 10, 108, 105, 103, 104, 116, 95, 112, 97, > 116, 99, 104, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 49, 48, 125, 44, 36, 123, 50, 61, 48, 46, 57, 125, 44, 36, 123, 51, > 61, 49, 46, 55, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, > 112, 112, 108, 121, 32, 108, 105, 103, 104, 116, 32, 112, 97, 116, 99, 104, > 101, 115, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, > 105, 116, 104, 32, 100, 101, 110, 115, 105, 116, 121, 32, 36, 49, 44, 32, > 100, 97, 114, 107, 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, 32, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 32, 36, 51, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 110, 32, 48, 44, 50, 53, 53, 32, 36, > 49, 44, 36, 49, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, > 52, 48, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, > 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 110, > 91, 45, 49, 93, 32, 36, 50, 44, 36, 51, 32, 45, 42, 32, 45, 99, > 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 110, > 111, 105, 115, 101, 95, 104, 117, 114, 108, 32, 58, 32, 95, 97, 109, 112, > 108, 105, 116, 117, 100, 101, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 100, 100, 32, 104, 117, 114, 108, 32, 110, 111, 105, 115, > 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 49, 48, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 45, 110, 111, 105, 115, 101, 95, 104, 117, 114, 108, 32, > 44, 10, 110, 111, 105, 115, 101, 95, 104, 117, 114, 108, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 104, 117, 114, 108, 32, 110, > 111, 105, 115, 101, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 32, > 36, 49, 37, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 102, > 32, 48, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, 48, > 32, 45, 110, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 109, 125, 44, > 64, 123, 45, 50, 44, 77, 125, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 44, 45, 50, 10, 45, 110, 111, 105, 115, 101, 91, > 45, 49, 93, 32, 36, 49, 44, 50, 32, 45, 103, 101, 91, 45, 49, 93, > 32, 48, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, > 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 49, > 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 43, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 112, 105, 120, 101, 108, 105, 122, 101, 32, 58, 32, 95, 115, > 99, 97, 108, 101, 95, 120, 62, 48, 44, 95, 115, 99, 97, 108, 101, 95, > 121, 62, 48, 44, 95, 115, 99, 97, 108, 101, 95, 122, 62, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 80, 105, 120, 101, 108, 105, 122, 101, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 115, 99, 97, 108, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 99, 97, 108, 101, 95, 120, 61, 50, 48, 39, 32, 97, 110, > 100, 32, 39, 115, 99, 97, 108, 101, 95, 121, 61, 115, 99, 97, 108, 101, > 95, 122, 61, 115, 99, 97, 108, 101, 95, 120, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 112, 105, 120, 101, 108, 105, 122, 101, 32, 44, 10, 112, > 105, 120, 101, 108, 105, 122, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 49, 61, 50, 48, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, > 36, 123, 51, 61, 36, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 80, 105, 120, 101, 108, 105, 122, 101, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 119, 105, 116, 104, 32, 115, 99, 97, 108, 101, 115, 32, 40, 36, > 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, 41, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 119, 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, > 44, 123, 100, 125, 32, 45, 114, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 36, 51, 37, 44, 49, 48, 48, 37, 44, 50, 32, 45, 114, 32, 36, 119, > 104, 100, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 104, 97, 100, 101, > 95, 115, 116, 114, 105, 112, 101, 115, 32, 58, 32, 95, 102, 114, 101, 113, > 117, 101, 110, 99, 121, 62, 61, 48, 44, 95, 100, 105, 114, 101, 99, 116, > 105, 111, 110, 61, 123, 32, 48, 61, 104, 111, 114, 105, 122, 111, 110, 116, > 97, 108, 32, 124, 32, 49, 61, 118, 101, 114, 116, 105, 99, 97, 108, 32, > 125, 44, 95, 100, 97, 114, 107, 110, 101, 115, 115, 62, 61, 48, 44, 95, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 115, 104, 97, 100, 101, 32, > 115, 116, 114, 105, 112, 101, 115, 32, 116, 111, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, > 117, 101, 115, 58, 32, 39, 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, > 53, 39, 44, 32, 39, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, 49, > 39, 44, 32, 39, 100, 97, 114, 107, 110, 101, 115, 115, 61, 48, 46, 56, > 39, 32, 97, 110, 100, 32, 39, 108, 105, 103, 104, 116, 110, 101, 115, 115, > 61, 50, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 97, 100, > 101, 95, 115, 116, 114, 105, 112, 101, 115, 32, 51, 48, 10, 115, 104, 97, > 100, 101, 95, 115, 116, 114, 105, 112, 101, 115, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 53, 125, 44, 36, 123, 50, 61, 49, 125, > 44, 36, 123, 51, 61, 48, 46, 56, 125, 44, 36, 123, 52, 61, 50, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 34, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 50, 44, 118, 101, 114, > 116, 105, 99, 97, 108, 44, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, > 125, 34, 32, 115, 104, 97, 100, 101, 100, 32, 115, 116, 114, 105, 112, 101, > 115, 32, 116, 111, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 36, 49, 44, > 32, 100, 97, 114, 107, 110, 101, 115, 115, 32, 36, 51, 32, 97, 110, 100, > 32, 108, 105, 103, 104, 116, 110, 101, 115, 115, 32, 36, 52, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 123, 109, 97, 120, 40, 49, 44, 119, 42, 40, 36, 50, 33, 61, 48, 41, > 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 104, 42, 40, 36, 50, 61, > 61, 48, 41, 41, 125, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 36, 49, 44, 50, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 110, 91, 45, 49, 93, 32, 36, 51, 44, 36, 52, 32, 45, > 42, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 104, 97, 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, > 58, 32, 95, 111, 112, 97, 99, 105, 116, 121, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 115, 104, 97, 100, 111, > 119, 32, 112, 97, 116, 99, 104, 101, 115, 32, 116, 111, 32, 115, 101, 108, > 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, > 46, 55, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 115, 104, 97, 100, > 111, 119, 95, 112, 97, 116, 99, 104, 32, 48, 46, 52, 10, 115, 104, 97, > 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 48, 46, 55, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 112, 112, 108, 121, 32, 115, 104, 97, 100, 111, 119, > 32, 112, 97, 116, 99, 104, 101, 115, 32, 116, 111, 32, 105, 109, 97, 103, > 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, > 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 32, 45, 115, 104, 105, > 102, 116, 91, 45, 49, 93, 32, 45, 50, 44, 45, 50, 32, 45, 115, 104, > 105, 102, 116, 91, 45, 49, 93, 32, 49, 44, 49, 10, 45, 112, 108, 97, > 115, 109, 97, 91, 45, 49, 93, 32, 51, 44, 48, 46, 51, 44, 56, 32, > 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 98, 91, 45, 49, 93, 32, > 49, 32, 45, 99, 91, 45, 49, 93, 32, 51, 37, 44, 49, 53, 37, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 110, 91, 45, > 49, 93, 32, 36, 49, 44, 49, 32, 45, 42, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 112, 114, 101, 97, 100, 32, 58, 32, 95, 100, 120, 62, > 61, 48, 44, 95, 100, 121, 62, 61, 48, 44, 95, 100, 122, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, 112, 114, 101, 97, 100, > 32, 112, 105, 120, 101, 108, 32, 118, 97, 108, 117, 101, 115, 32, 111, 102, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 32, 114, 97, 110, 100, 111, 109, 108, 121, 32, 97, 108, 111, 110, 103, 32, > 120, 44, 121, 32, 97, 110, 100, 32, 122, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 100, 120, 61, 51, 39, 44, 32, 39, 100, 121, 61, > 100, 120, 39, 32, 97, 110, 100, 32, 39, 100, 122, 61, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 115, 112, 114, 101, 97, 100, 32, 51, 10, > 115, 112, 114, 101, 97, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 51, 125, 44, 36, 123, 50, 61, 36, 49, 125, 44, 36, 123, > 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 83, 112, > 114, 101, 97, 100, 32, 112, 105, 120, 101, 108, 32, 111, 102, 32, 105, 109, > 97, 103, 101, 36, 63, 32, 114, 97, 110, 100, 111, 109, 108, 121, 44, 32, > 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, 116, 117, 100, 101, 115, 32, > 40, 36, 49, 44, 36, 50, 44, 36, 51, 41, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 51, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 45, 36, 49, 125, > 44, 36, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, > 45, 49, 93, 32, 49, 44, 49, 32, 45, 114, 97, 110, 100, 91, 45, 49, > 93, 32, 123, 45, 36, 50, 125, 44, 36, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 45, 36, 51, 125, 44, 36, > 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 114, 112, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 105, 112, > 101, 115, 95, 121, 32, 58, 32, 95, 102, 114, 101, 113, 117, 101, 110, 99, > 121, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, > 100, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 115, 116, 114, 105, 112, > 101, 115, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, > 102, 114, 101, 113, 117, 101, 110, 99, 121, 61, 49, 48, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, > 44, 10, 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 49, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 65, 100, 100, 32, 118, 101, 114, 116, 105, 99, 97, > 108, 32, 115, 116, 114, 105, 112, 101, 115, 32, 116, 111, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 102, 114, 101, 113, 117, > 101, 110, 99, 121, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 36, 49, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 42, 91, > 45, 49, 93, 32, 48, 46, 49, 53, 32, 45, 43, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 101, 120, > 116, 117, 114, 105, 122, 101, 95, 99, 97, 110, 118, 97, 115, 32, 58, 32, > 95, 97, 109, 112, 108, 105, 116, 117, 100, 101, 62, 61, 48, 44, 95, 102, > 105, 98, 114, 111, 117, 115, 110, 101, 115, 115, 62, 61, 48, 44, 95, 101, > 109, 98, 111, 115, 115, 95, 108, 101, 118, 101, 108, 62, 61, 48, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 65, 100, 100, 32, 112, 97, 105, 110, > 116, 32, 99, 97, 110, 118, 97, 115, 32, 116, 101, 120, 116, 117, 114, 101, > 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, > 109, 112, 108, 105, 116, 117, 100, 101, 61, 50, 48, 39, 44, 32, 39, 102, > 105, 98, 114, 111, 117, 115, 110, 101, 115, 115, 61, 51, 39, 32, 97, 110, > 100, 32, 39, 101, 109, 98, 111, 115, 115, 95, 108, 101, 118, 101, 108, 61, > 48, 46, 54, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 116, 101, 120, > 116, 117, 114, 105, 122, 101, 95, 99, 97, 110, 118, 97, 115, 32, 44, 10, > 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 99, 97, 110, 118, 97, 115, > 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 50, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 51, 125, 62, > 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 54, 125, 62, 61, > 48, 32, 38, 38, 32, 36, 123, 52, 61, 56, 48, 125, 34, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, 99, 97, 110, 118, 97, > 115, 32, 116, 101, 120, 116, 117, 114, 101, 32, 116, 111, 32, 105, 109, 97, > 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, 32, 97, 109, 112, 108, 105, > 116, 117, 100, 101, 32, 36, 49, 44, 32, 102, 105, 98, 114, 111, 117, 115, > 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, 32, 101, 109, 98, 111, > 115, 115, 32, 108, 101, 118, 101, 108, 32, 36, 51, 46, 34, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 114, 97, 110, 100, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 45, 98, 108, 117, 114, 95, 120, > 91, 45, 49, 93, 32, 36, 50, 32, 45, 98, 108, 117, 114, 95, 121, 91, > 45, 50, 93, 32, 36, 50, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 103, 91, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 45, 45, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 43, 32, 45, 111, 114, > 105, 101, 110, 116, 97, 116, 105, 111, 110, 91, 45, 50, 93, 32, 45, 99, > 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 50, 93, 32, 43, 32, 45, 110, 91, 45, 50, 93, 32, 36, 51, 44, > 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 56, 48, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, > 45, 36, 49, 44, 36, 49, 32, 45, 43, 32, 45, 99, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 101, 120, 116, 117, > 114, 105, 122, 101, 95, 112, 97, 112, 101, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 65, 100, 100, 32, 112, 97, 112, 101, 114, 32, 116, 101, > 120, 116, 117, 114, 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 45, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 112, 97, 112, 101, 114, > 10, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 112, 97, 112, 101, 114, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 100, 100, 32, > 112, 97, 112, 101, 114, 32, 116, 101, 120, 116, 117, 114, 101, 32, 116, 111, > 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 91, 45, 49, 93, 32, 51, 48, 37, 44, 51, 48, 37, 32, 45, > 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 48, 32, 45, 105, 102, 102, 116, 91, 45, 49, > 93, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 105, 102, 116, > 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 50, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, > 93, 32, 49, 32, 45, 110, 91, 45, 49, 93, 32, 49, 44, 49, 46, 50, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 10, 45, 42, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 118, 105, 103, 110, 101, 116, 116, 101, > 32, 58, 32, 95, 115, 116, 114, 101, 110, 103, 116, 104, 62, 61, 48, 44, > 48, 60, 61, 95, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 60, 61, > 49, 48, 48, 44, 48, 60, 61, 95, 114, 97, 100, 105, 117, 115, 95, 109, > 97, 120, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 65, 100, 100, 32, 118, 105, 103, 110, 101, 116, 116, 101, 32, 101, 102, > 102, 101, 99, 116, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 115, 116, 114, 101, 110, 103, 116, 104, 61, 49, 48, 48, 39, > 44, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 105, 110, 61, 55, 48, > 39, 32, 97, 110, 100, 32, 39, 114, 97, 100, 105, 117, 115, 95, 109, 97, > 120, 61, 57, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 118, 105, > 103, 110, 101, 116, 116, 101, 32, 44, 10, 118, 105, 103, 110, 101, 116, 116, > 101, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, > 49, 48, 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 50, 61, 55, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 50, 60, 61, 49, 48, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 57, 48, 125, 62, 61, 48, 32, 38, > 38, 32, 36, 51, 60, 61, 49, 48, 48, 34, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 65, 100, 100, 32, 118, 105, 103, 110, 101, 116, 116, 101, > 32, 101, 102, 102, 101, 99, 116, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 115, 116, 114, 101, 110, 103, 116, > 104, 32, 36, 49, 32, 97, 110, 100, 32, 115, 105, 122, 101, 32, 36, 50, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 109, 77, 61, 123, 105, 109, > 125, 44, 123, 105, 77, 125, 32, 100, 61, 123, 109, 97, 120, 40, 119, 44, > 104, 41, 125, 10, 36, 100, 44, 36, 100, 32, 45, 61, 91, 45, 49, 93, > 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 50, 10, 45, 99, 91, 45, 49, 93, 32, > 36, 50, 37, 44, 36, 51, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 36, 49, 32, 45, 45, 32, 45, 99, 32, 36, 109, 77, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, > 118, 105, 115, 105, 98, 108, 101, 32, 58, 32, 95, 116, 101, 120, 116, 44, > 48, 60, 95, 111, 112, 97, 99, 105, 116, 121, 60, 49, 44, 95, 115, 105, > 122, 101, 62, 48, 44, 95, 97, 110, 103, 108, 101, 44, 95, 109, 111, 100, > 101, 61, 123, 32, 48, 61, 114, 101, 109, 111, 118, 101, 32, 124, 32, 49, > 61, 97, 100, 100, 32, 125, 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, > 100, 100, 32, 111, 114, 32, 114, 101, 109, 111, 118, 101, 32, 97, 32, 118, > 105, 115, 105, 98, 108, 101, 32, 119, 97, 116, 101, 114, 109, 97, 114, 107, > 32, 111, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 40, 118, 97, 108, 117, 101, 32, 114, 97, 110, 103, 101, > 32, 109, 117, 115, 116, 32, 98, 101, 32, 91, 48, 44, 50, 53, 53, 93, > 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 101, 120, > 116, 61, 40, 99, 41, 32, 71, 39, 77, 73, 67, 39, 44, 32, 39, 111, > 112, 97, 99, 105, 116, 121, 61, 48, 46, 51, 39, 44, 32, 39, 115, 105, > 122, 101, 61, 53, 51, 39, 44, 32, 39, 97, 110, 103, 108, 101, 61, 50, > 53, 39, 44, 32, 39, 109, 111, 100, 101, 61, 49, 39, 32, 97, 110, 100, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 119, 97, 116, 101, 114, 109, 97, 114, > 107, 95, 118, 105, 115, 105, 98, 108, 101, 32, 44, 48, 46, 55, 10, 119, > 97, 116, 101, 114, 109, 97, 114, 107, 95, 118, 105, 115, 105, 98, 108, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 92, 50, > 53, 49, 92, 32, 71, 92, 52, 55, 77, 73, 67, 125, 34, 32, 45, 99, > 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, 48, 46, 51, 125, 62, 48, > 32, 38, 38, 32, 36, 50, 60, 49, 32, 38, 38, 32, 36, 123, 51, 61, > 53, 51, 125, 62, 48, 32, 38, 38, 32, 36, 123, 54, 61, 48, 46, 53, > 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, > 50, 53, 125, 44, 36, 123, 53, 61, 49, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 33, 36, 53, > 44, 65, 100, 100, 44, 82, 101, 109, 111, 118, 101, 125, 34, 32, 118, 105, > 115, 105, 98, 108, 101, 32, 119, 97, 116, 101, 114, 109, 97, 114, 107, 32, > 39, 36, 49, 39, 32, 111, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 50, > 44, 32, 115, 105, 122, 101, 32, 36, 51, 44, 32, 97, 110, 103, 108, 101, > 32, 36, 52, 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 48, > 44, 48, 44, 36, 51, 44, 49, 44, 50, 53, 53, 32, 45, 114, 111, 116, > 97, 116, 101, 91, 45, 49, 93, 32, 36, 52, 44, 48, 44, 48, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 54, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 50, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, > 105, 102, 32, 36, 53, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, > 45, 42, 91, 45, 50, 93, 32, 123, 49, 45, 36, 50, 125, 32, 45, 43, > 10, 45, 101, 108, 115, 101, 32, 45, 42, 91, 45, 49, 93, 32, 36, 50, > 32, 45, 45, 32, 45, 47, 32, 123, 49, 45, 36, 50, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 58, 32, 66, 108, 101, 110, 100, 105, 110, > 103, 32, 97, 110, 100, 32, 102, 97, 100, 105, 110, 103, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 108, 101, 110, 100, 32, 58, 32, 98, 108, 101, 110, > 100, 105, 110, 103, 95, 109, 111, 100, 101, 44, 48, 60, 61, 95, 111, 112, > 97, 99, 105, 116, 121, 60, 61, 49, 44, 95, 114, 101, 118, 101, 114, 116, > 95, 108, 97, 121, 101, 114, 95, 111, 114, 100, 101, 114, 61, 123, 32, 48, > 32, 124, 32, 49, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 66, 108, 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 71, > 44, 71, 65, 44, 82, 71, 66, 32, 111, 114, 32, 82, 71, 66, 65, 32, > 105, 109, 97, 103, 101, 115, 44, 32, 116, 119, 111, 45, 98, 121, 45, 116, > 119, 111, 44, 32, 117, 115, 105, 110, 103, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 109, 111, 100, 101, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 39, 98, 108, 101, 110, 100, 105, 110, 103, 95, 109, 111, 100, > 101, 39, 32, 99, 97, 110, 32, 98, 101, 32, 123, 32, 97, 100, 100, 32, > 124, 32, 97, 108, 112, 104, 97, 32, 124, 32, 97, 110, 100, 32, 124, 32, > 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 98, 108, 117, 101, 32, 124, > 32, 98, 117, 114, 110, 32, 124, 32, 100, 97, 114, 107, 101, 110, 32, 124, > 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 124, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 100, 105, 118, 105, 100, 101, 32, 124, 32, > 100, 111, 100, 103, 101, 32, 124, 32, 101, 100, 103, 101, 115, 32, 124, 32, > 101, 120, 99, 108, 117, 115, 105, 111, 110, 32, 124, 32, 102, 114, 101, 101, > 122, 101, 32, 124, 32, 103, 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, > 116, 32, 124, 32, 103, 114, 97, 105, 110, 109, 101, 114, 103, 101, 32, 124, > 32, 103, 114, 101, 101, 110, 32, 124, 32, 104, 97, 114, 100, 108, 105, 103, > 104, 116, 32, 124, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 104, 97, > 114, 100, 109, 105, 120, 32, 124, 32, 104, 117, 101, 32, 124, 32, 105, 110, > 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 124, 32, 108, 105, > 103, 104, 116, 101, 110, 32, 124, 32, 108, 105, 103, 104, 116, 110, 101, 115, > 115, 32, 124, 32, 108, 105, 110, 101, 97, 114, 98, 117, 114, 110, 32, 124, > 32, 108, 105, 110, 101, 97, 114, 108, 105, 103, 104, 116, 32, 124, 32, 108, > 117, 109, 105, 110, 97, 110, 99, 101, 32, 124, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 109, 117, 108, 116, 105, 112, 108, 121, 32, 124, 32, 110, > 101, 103, 97, 116, 105, 111, 110, 32, 124, 32, 111, 114, 32, 124, 32, 111, > 118, 101, 114, 108, 97, 121, 32, 124, 32, 112, 105, 110, 108, 105, 103, 104, > 116, 32, 124, 32, 114, 101, 100, 32, 124, 32, 114, 101, 102, 108, 101, 99, > 116, 32, 124, 32, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 124, > 32, 115, 101, 97, 109, 108, 101, 115, 115, 32, 124, 32, 115, 101, 97, 109, > 108, 101, 115, 115, 95, 109, 105, 120, 101, 100, 32, 124, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 115, 99, 114, 101, 101, 110, 32, 124, 32, 115, > 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 32, 124, 32, 115, 104, > 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 32, 124, 32, 115, 111, > 102, 116, 98, 117, 114, 110, 32, 124, 32, 115, 111, 102, 116, 100, 111, 100, > 103, 101, 32, 124, 32, 115, 111, 102, 116, 108, 105, 103, 104, 116, 32, 124, > 32, 115, 116, 97, 109, 112, 32, 124, 32, 115, 117, 98, 116, 114, 97, 99, > 116, 32, 124, 32, 118, 97, 108, 117, 101, 32, 124, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 118, 105, 118, 105, 100, 108, 105, 103, 104, 116, 32, > 124, 32, 120, 111, 114, 32, 125, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, > 58, 32, 39, 98, 108, 101, 110, 100, 105, 110, 103, 95, 109, 111, 100, 101, > 61, 97, 108, 112, 104, 97, 39, 44, 32, 39, 111, 112, 97, 99, 105, 116, > 121, 61, 49, 39, 32, 97, 110, 100, 32, 39, 114, 101, 118, 101, 114, 116, > 95, 108, 97, 121, 101, 114, 115, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 44, > 32, 45, 114, 101, 115, 105, 122, 101, 50, 100, 121, 91, 45, 49, 93, 32, > 50, 48, 48, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, > 50, 48, 32, 45, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, > 32, 45, 100, 114, 103, 98, 97, 91, 45, 50, 93, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, > 125, 44, 123, 104, 125, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, > 114, 108, 97, 121, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, 34, 34, 61, 97, 114, 103, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 34, 34, 35, 32, 45, 45, > 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 36, 123, 97, 114, 103, > 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, 101, 120, 116, 95, 111, 117, > 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 77, 111, 100, 101, 58, 92, > 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, > 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, 53, 32, > 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, > 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, 97, 100, 100, 44, 97, 108, > 112, 104, 97, 44, 97, 110, 100, 44, 97, 118, 101, 114, 97, 103, 101, 44, > 98, 108, 117, 101, 44, 98, 117, 114, 110, 44, 100, 97, 114, 107, 101, 110, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 45, 109, 32, 34, > 101, 120, 32, 58, 32, 36, 34, 34, 61, 97, 114, 103, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 36, 34, 34, 35, 32, 45, 45, 98, 108, 101, 110, > 100, 91, 48, 44, 49, 93, 32, 36, 123, 97, 114, 103, 123, 36, 62, 43, > 49, 125, 125, 32, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 77, 111, 100, 101, 58, 92, 34, 32, 92, 34, > 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 44, 50, 44, 50, > 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, 53, 32, 45, 100, 111, 110, > 101, 34, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, > 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, > 125, 32, 45, 101, 120, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, > 44, 100, 105, 118, 105, 100, 101, 44, 100, 111, 100, 103, 101, 44, 101, 120, > 99, 108, 117, 115, 105, 111, 110, 44, 102, 114, 101, 101, 122, 101, 44, 103, > 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, 116, 44, 103, 114, 97, 105, > 110, 109, 101, 114, 103, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, 34, 34, 61, 97, > 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 34, 34, 35, 32, > 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 36, 123, 97, > 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, 101, 120, 116, 95, > 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 77, 111, 100, 101, > 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, > 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, 53, > 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, 103, 114, 101, 101, > 110, 44, 104, 97, 114, 100, 108, 105, 103, 104, 116, 44, 104, 97, 114, 100, > 109, 105, 120, 44, 104, 117, 101, 44, 105, 110, 116, 101, 114, 112, 111, 108, > 97, 116, 105, 111, 110, 44, 108, 105, 103, 104, 116, 101, 110, 44, 108, 105, > 103, 104, 116, 110, 101, 115, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, 34, 34, 61, > 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 34, 34, 35, > 32, 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 36, 123, > 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, 101, 120, 116, > 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 77, 111, 100, > 101, 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, 36, 62, 43, > 49, 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, 49, 44, 50, > 53, 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, > 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, 108, 105, 110, > 101, 97, 114, 98, 117, 114, 110, 44, 108, 105, 110, 101, 97, 114, 108, 105, > 103, 104, 116, 44, 108, 117, 109, 105, 110, 97, 110, 99, 101, 44, 109, 117, > 108, 116, 105, 112, 108, 121, 44, 110, 101, 103, 97, 116, 105, 111, 110, 44, > 111, 114, 44, 111, 118, 101, 114, 108, 97, 121, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, 32, 36, > 34, 34, 61, 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 34, 34, 35, 32, 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, > 32, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, 45, 116, > 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 77, 111, 100, 101, 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, 103, 123, > 36, 62, 43, 49, 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, 50, 44, > 49, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 120, 32, > 112, 105, 110, 108, 105, 103, 104, 116, 44, 114, 101, 100, 44, 114, 101, 102, > 108, 101, 99, 116, 44, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 44, > 115, 99, 114, 101, 101, 110, 44, 115, 104, 97, 112, 101, 97, 118, 101, 114, > 97, 103, 101, 44, 115, 111, 102, 116, 98, 117, 114, 110, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 45, 109, 32, 34, 101, 120, 32, 58, > 32, 36, 34, 34, 61, 97, 114, 103, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 36, 34, 34, 35, 32, 45, 45, 98, 108, 101, 110, 100, 91, 48, 44, > 49, 93, 32, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, 32, > 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 77, 111, 100, 101, 58, 92, 34, 32, 92, 34, 36, 123, 97, 114, > 103, 123, 36, 62, 43, 49, 125, 125, 44, 50, 44, 50, 44, 50, 51, 44, > 50, 44, 49, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 34, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, > 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, > 120, 32, 115, 111, 102, 116, 100, 111, 100, 103, 101, 44, 115, 111, 102, 116, > 108, 105, 103, 104, 116, 44, 115, 116, 97, 109, 112, 44, 115, 117, 98, 116, > 114, 97, 99, 116, 44, 118, 97, 108, 117, 101, 44, 118, 105, 118, 105, 100, > 108, 105, 103, 104, 116, 44, 120, 111, 114, 10, 98, 108, 101, 110, 100, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 97, 108, 112, 104, > 97, 125, 44, 36, 123, 50, 61, 49, 125, 44, 36, 123, 51, 61, 48, 125, > 44, 36, 123, 52, 61, 49, 125, 10, 45, 118, 32, 45, 32, 115, 48, 61, > 34, 34, 32, 115, 49, 61, 34, 40, 114, 101, 118, 101, 114, 116, 101, 100, > 32, 108, 97, 121, 101, 114, 115, 41, 32, 34, 32, 45, 118, 32, 43, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 66, 108, 101, 110, 100, 32, 105, > 109, 97, 103, 101, 36, 63, 32, 116, 119, 111, 45, 98, 121, 45, 116, 119, > 111, 44, 32, 117, 115, 105, 110, 103, 32, 39, 36, 49, 39, 32, 109, 111, > 100, 101, 32, 34, 36, 123, 115, 123, 36, 51, 33, 61, 48, 125, 125, 34, > 97, 110, 100, 32, 111, 112, 97, 99, 105, 116, 121, 32, 36, 50, 46, 34, > 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 32, 99, 111, 100, 101, 61, > 64, 123, 45, 95, 98, 108, 101, 110, 100, 95, 36, 49, 91, 93, 125, 10, > 45, 111, 110, 102, 97, 105, 108, 32, 45, 118, 32, 43, 32, 45, 101, 114, > 114, 111, 114, 91, 48, 45, 45, 50, 93, 32, 34, 67, 111, 109, 109, 97, > 110, 100, 32, 39, 45, 98, 108, 101, 110, 100, 39, 58, 32, 85, 110, 107, > 110, 111, 119, 110, 32, 98, 108, 101, 110, 100, 105, 110, 103, 32, 109, 111, > 100, 101, 32, 39, 36, 49, 39, 32, 114, 101, 113, 117, 101, 115, 116, 101, > 100, 46, 34, 10, 45, 101, 110, 100, 108, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 45, 105, 102, 32, > 36, 51, 32, 45, 114, 118, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 91, 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 91, 48, 93, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 10, 115, 61, 123, 115, 48, 61, 105, 102, 40, 64, 123, 48, 44, 115, 125, > 60, 51, 44, 49, 44, 51, 41, 59, 115, 49, 61, 105, 102, 40, 115, 60, > 51, 44, 49, 44, 51, 41, 59, 109, 97, 120, 40, 115, 48, 44, 115, 49, > 41, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, > 91, 48, 93, 32, 123, 36, 115, 43, 49, 45, 40, 64, 123, 48, 44, 115, > 125, 37, 50, 41, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, > 111, 100, 101, 91, 49, 93, 32, 123, 36, 115, 43, 49, 45, 40, 115, 37, > 50, 41, 125, 10, 45, 105, 102, 32, 123, 64, 123, 48, 44, 115, 125, 61, > 61, 50, 124, 124, 64, 123, 48, 44, 115, 125, 61, 61, 52, 125, 10, 45, > 105, 102, 32, 123, 115, 61, 61, 50, 124, 124, 115, 61, 61, 52, 125, 10, > 45, 115, 104, 91, 48, 44, 49, 93, 32, 48, 44, 123, 115, 45, 50, 125, > 32, 45, 95, 98, 108, 101, 110, 100, 91, 50, 44, 51, 93, 32, 36, 99, > 111, 100, 101, 32, 45, 114, 109, 91, 50, 44, 51, 93, 10, 45, 105, 102, > 32, 123, 36, 49, 39, 61, 61, 39, 97, 108, 112, 104, 97, 125, 10, 45, > 115, 104, 91, 48, 44, 49, 93, 32, 48, 44, 123, 64, 123, 48, 44, 115, > 125, 45, 50, 125, 32, 45, 115, 104, 91, 48, 44, 49, 93, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 42, 91, 50, 44, 52, 93, 32, > 45, 42, 91, 51, 44, 52, 93, 32, 45, 114, 109, 91, 50, 44, 51, 93, > 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 49, 93, 32, 49, > 48, 48, 37, 32, 45, 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 102, 91, 51, 93, 32, 50, 53, 53, 32, 45, > 114, 109, 91, 51, 93, 10, 45, 106, 91, 48, 93, 32, 91, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, 44, 109, > 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 44, 91, 50, 93, 44, 50, > 53, 53, 32, 45, 114, 109, 91, 49, 44, 50, 93, 10, 45, 115, 104, 91, > 48, 93, 32, 48, 44, 123, 115, 45, 50, 125, 32, 45, 115, 104, 91, 48, > 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 43, 91, 50, > 93, 32, 49, 101, 45, 49, 48, 32, 45, 47, 91, 49, 44, 50, 93, 32, > 45, 114, 109, 91, 49, 93, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 108, 115, 101, 10, 45, 115, 104, 91, 49, 93, 32, 48, 44, 123, > 115, 45, 50, 125, 32, 45, 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 106, 91, 48, 93, 32, 91, 50, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, 44, 109, > 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 44, 91, 51, 93, 44, 50, > 53, 53, 32, 45, 114, 109, 91, 94, 48, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 108, 115, 101, 10, 45, 115, 104, 91, 48, 93, 32, 48, > 44, 123, 64, 123, 48, 44, 115, 125, 45, 50, 125, 32, 45, 114, 118, 91, > 49, 44, 50, 93, 32, 45, 95, 98, 108, 101, 110, 100, 91, 49, 44, 50, > 93, 32, 36, 99, 111, 100, 101, 32, 45, 106, 91, 49, 93, 32, 91, 50, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, > 44, 109, 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 32, 45, 114, 109, > 91, 94, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, > 101, 10, 45, 105, 102, 32, 123, 115, 61, 61, 50, 124, 124, 115, 61, 61, > 52, 125, 10, 45, 115, 104, 91, 49, 93, 32, 48, 44, 123, 115, 45, 50, > 125, 32, 45, 95, 98, 108, 101, 110, 100, 91, 48, 44, 50, 93, 32, 36, > 99, 111, 100, 101, 32, 45, 114, 109, 91, 50, 93, 10, 45, 115, 104, 91, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 106, 91, > 48, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 123, > 109, 97, 120, 40, 48, 44, 109, 105, 110, 40, 49, 44, 36, 50, 41, 41, > 125, 44, 91, 50, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 94, 48, > 93, 10, 45, 101, 108, 115, 101, 10, 45, 95, 98, 108, 101, 110, 100, 32, > 36, 99, 111, 100, 101, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 109, 97, 120, 40, 48, 44, 109, > 105, 110, 40, 49, 44, 36, 50, 41, 41, 125, 32, 45, 114, 109, 91, 49, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, > 10, 95, 98, 108, 101, 110, 100, 32, 58, 32, 36, 42, 10, 95, 98, 108, > 101, 110, 100, 95, 97, 108, 112, 104, 97, 32, 58, 10, 45, 117, 32, 34, > 34, 10, 95, 98, 108, 101, 110, 100, 95, 97, 110, 100, 32, 58, 10, 45, > 117, 32, 34, 45, 97, 110, 100, 91, 49, 93, 32, 91, 48, 93, 34, 10, > 95, 98, 108, 101, 110, 100, 95, 97, 100, 100, 32, 58, 10, 45, 117, 32, > 34, 45, 43, 91, 49, 93, 32, 91, 48, 93, 32, 45, 99, 91, 49, 93, > 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 97, > 118, 101, 114, 97, 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, > 49, 93, 32, 91, 48, 93, 32, 45, 47, 91, 49, 93, 32, 50, 34, 10, > 95, 98, 108, 101, 110, 100, 95, 98, 108, 117, 101, 32, 58, 10, 45, 117, > 32, 34, 45, 115, 104, 91, 48, 93, 32, 48, 44, 49, 32, 45, 106, 91, > 49, 93, 32, 91, 50, 93, 32, 45, 114, 109, 91, 50, 93, 34, 10, 95, > 98, 108, 101, 110, 100, 95, 98, 117, 114, 110, 32, 58, 10, 45, 117, 32, > 34, 45, 45, 45, 91, 48, 93, 32, 50, 53, 53, 32, 45, 43, 91, 49, > 93, 32, 48, 46, 49, 32, 45, 47, 91, 50, 93, 32, 91, 49, 93, 32, > 45, 114, 109, 91, 49, 93, 32, 45, 43, 91, 49, 93, 32, 49, 32, 45, > 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 99, 91, 49, 93, 32, 48, > 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 100, 97, 114, > 107, 101, 110, 32, 58, 10, 45, 117, 32, 34, 45, 109, 105, 110, 91, 49, > 93, 32, 91, 48, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 100, 105, > 102, 102, 101, 114, 101, 110, 99, 101, 32, 58, 10, 45, 117, 32, 34, 45, > 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 97, 98, 115, 91, 49, 93, > 34, 10, 95, 98, 108, 101, 110, 100, 95, 100, 105, 118, 105, 100, 101, 32, > 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, 93, 32, 48, 46, 49, 32, > 45, 94, 91, 49, 93, 32, 45, 49, 32, 45, 42, 91, 49, 93, 32, 91, > 48, 93, 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 99, 91, > 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, > 95, 100, 111, 100, 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 45, 91, > 49, 93, 32, 50, 53, 53, 46, 49, 32, 45, 94, 91, 49, 93, 32, 45, > 49, 32, 45, 42, 91, 49, 93, 32, 91, 48, 93, 32, 45, 42, 91, 49, > 93, 32, 45, 50, 53, 53, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, > 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 101, 100, 103, 101, 115, > 32, 58, 10, 45, 117, 32, 34, 45, 45, 98, 108, 101, 110, 100, 95, 101, > 100, 103, 101, 115, 32, 48, 46, 53, 32, 45, 114, 109, 91, 49, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 101, 120, 99, 108, 117, 115, 105, 111, > 110, 32, 58, 10, 45, 117, 32, 34, 45, 45, 42, 91, 48, 44, 49, 93, > 32, 45, 47, 91, 50, 93, 32, 45, 49, 50, 55, 46, 53, 32, 45, 43, > 91, 49, 44, 50, 93, 32, 45, 43, 91, 49, 93, 32, 91, 48, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 102, 114, 101, 101, 122, 101, 32, 58, > 10, 45, 117, 32, 34, 45, 42, 91, 49, 93, 32, 45, 50, 53, 53, 32, > 45, 45, 91, 49, 93, 32, 48, 46, 49, 32, 45, 45, 45, 91, 48, 93, > 32, 50, 53, 53, 32, 45, 115, 113, 114, 91, 50, 93, 32, 45, 47, 91, > 50, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, 32, 45, 43, > 91, 49, 93, 32, 49, 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, > 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, > 101, 110, 100, 95, 103, 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, 116, > 32, 58, 10, 45, 117, 32, 34, 45, 45, 91, 49, 93, 32, 91, 48, 93, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 43, 91, 49, 93, 32, > 49, 50, 56, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 103, 114, 97, 105, 110, 109, 101, 114, > 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, 93, 32, 91, > 48, 93, 32, 45, 45, 91, 49, 93, 32, 49, 50, 56, 32, 45, 99, 91, > 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, > 95, 103, 114, 101, 101, 110, 32, 58, 10, 45, 117, 32, 34, 45, 115, 104, > 91, 48, 93, 32, 48, 44, 48, 32, 45, 115, 104, 91, 48, 93, 32, 50, > 44, 50, 32, 45, 106, 91, 49, 93, 32, 91, 50, 93, 32, 45, 106, 91, > 49, 93, 32, 91, 51, 93, 44, 48, 44, 48, 44, 48, 44, 50, 32, 45, > 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, > 104, 97, 114, 100, 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, > 45, 45, 42, 91, 48, 44, 49, 93, 32, 45, 47, 91, 50, 93, 32, 49, > 50, 55, 46, 53, 32, 45, 45, 43, 91, 48, 44, 49, 93, 32, 45, 42, > 91, 51, 93, 32, 50, 32, 45, 45, 91, 51, 93, 32, 50, 53, 53, 32, > 45, 45, 91, 51, 93, 32, 91, 50, 93, 32, 45, 103, 116, 91, 49, 93, > 32, 49, 50, 56, 32, 34, 92, 10, 34, 45, 106, 91, 50, 93, 32, 91, > 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, 93, > 32, 45, 114, 109, 91, 49, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 104, 97, > 114, 100, 109, 105, 120, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, > 93, 32, 91, 48, 93, 32, 45, 103, 101, 91, 49, 93, 32, 50, 53, 53, > 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 104, 117, 101, 32, 58, 10, 45, 117, 32, 34, 45, 116, 111, > 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, 32, 48, 44, 50, 32, 45, > 114, 103, 98, 50, 104, 115, 118, 91, 50, 44, 51, 93, 32, 45, 115, 104, > 91, 50, 93, 32, 49, 44, 50, 32, 45, 106, 91, 49, 93, 32, 91, 52, > 93, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 114, 109, 91, 52, 93, > 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 50, 44, 51, 93, 32, 45, > 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, > 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, 32, 58, 10, > 45, 117, 32, 34, 45, 45, 42, 91, 48, 93, 32, 123, 112, 105, 47, 50, > 53, 53, 125, 32, 45, 42, 91, 49, 93, 32, 123, 112, 105, 47, 50, 53, > 53, 125, 32, 45, 99, 111, 115, 91, 49, 44, 50, 93, 32, 45, 43, 91, > 49, 44, 50, 93, 32, 45, 45, 91, 49, 93, 32, 50, 32, 45, 42, 91, > 49, 93, 32, 45, 54, 51, 46, 55, 53, 32, 45, 99, 91, 49, 93, 32, > 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 108, 105, > 103, 104, 116, 101, 110, 32, 58, 10, 45, 117, 32, 34, 45, 109, 97, 120, > 91, 49, 93, 32, 91, 48, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, > 108, 105, 103, 104, 116, 110, 101, 115, 115, 32, 58, 10, 45, 117, 32, 34, > 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, 32, 48, 44, > 50, 32, 45, 114, 103, 98, 50, 108, 97, 98, 91, 50, 44, 51, 93, 32, > 45, 115, 104, 91, 50, 93, 32, 49, 44, 50, 32, 45, 106, 91, 49, 93, > 32, 91, 52, 93, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 114, 109, > 91, 52, 93, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 50, 44, 51, > 93, 32, 45, 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 58, 10, 45, > 117, 32, 34, 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, > 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, > 50, 44, 51, 93, 32, 45, 115, 104, 91, 50, 93, 32, 49, 44, 50, 32, > 45, 106, 91, 49, 93, 32, 91, 52, 93, 44, 48, 44, 48, 44, 48, 44, > 49, 32, 45, 114, 109, 91, 52, 93, 32, 45, 121, 99, 98, 99, 114, 50, > 114, 103, 98, 91, 50, 44, 51, 93, 32, 45, 114, 109, 91, 50, 44, 51, > 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 108, 105, 110, 101, 97, 114, > 98, 117, 114, 110, 32, 58, 10, 45, 117, 32, 34, 45, 43, 91, 49, 93, > 32, 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, 50, 53, 53, 32, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, > 101, 110, 100, 95, 108, 105, 110, 101, 97, 114, 108, 105, 103, 104, 116, 32, > 58, 10, 45, 117, 32, 34, 45, 42, 91, 49, 93, 32, 50, 32, 45, 43, > 91, 49, 93, 32, 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, > 98, 108, 101, 110, 100, 95, 109, 117, 108, 116, 105, 112, 108, 121, 32, 58, > 10, 45, 117, 32, 34, 45, 42, 91, 49, 93, 32, 91, 48, 93, 32, 45, > 47, 91, 49, 93, 32, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, > 95, 110, 101, 103, 97, 116, 105, 111, 110, 32, 58, 10, 45, 117, 32, 34, > 45, 43, 91, 49, 93, 32, 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, > 50, 53, 53, 32, 45, 97, 98, 115, 91, 49, 93, 32, 45, 42, 91, 49, > 93, 32, 45, 49, 32, 45, 43, 91, 49, 93, 32, 50, 53, 53, 34, 10, > 95, 98, 108, 101, 110, 100, 95, 111, 114, 32, 58, 10, 45, 117, 32, 34, > 45, 111, 114, 91, 49, 93, 32, 91, 48, 93, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 111, 118, 101, 114, 108, 97, 121, 32, 58, 10, 45, 117, 32, > 34, 45, 45, 42, 91, 48, 44, 49, 93, 32, 45, 47, 91, 50, 93, 32, > 49, 50, 55, 46, 53, 32, 45, 43, 91, 49, 93, 32, 91, 48, 93, 32, > 45, 42, 91, 49, 93, 32, 50, 32, 45, 45, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 45, 91, 49, 93, 32, 91, 50, 93, 32, 45, 45, 108, 116, > 91, 48, 93, 32, 49, 50, 56, 32, 45, 106, 91, 49, 93, 32, 91, 50, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 51, 93, 32, > 45, 114, 109, 91, 50, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, 48, > 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 112, 105, 110, > 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, 45, 42, 91, 49, > 93, 32, 50, 32, 45, 45, 98, 108, 101, 110, 100, 32, 100, 97, 114, 107, > 101, 110, 32, 45, 45, 91, 49, 93, 32, 50, 53, 54, 32, 45, 45, 98, > 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 108, 105, 103, 104, 116, 101, > 110, 32, 45, 103, 101, 91, 49, 93, 32, 48, 32, 34, 92, 10, 34, 45, > 106, 91, 50, 93, 32, 91, 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 49, 93, 32, 45, 114, 109, 91, 49, 44, 51, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 114, 101, 102, 108, 101, 99, 116, 32, > 58, 10, 45, 117, 32, 34, 45, 45, 91, 49, 93, 32, 50, 53, 53, 46, > 49, 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 45, 115, 113, 114, > 91, 48, 93, 32, 45, 47, 91, 50, 93, 32, 91, 49, 93, 32, 45, 114, > 109, 91, 49, 93, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, > 34, 10, 95, 98, 108, 101, 110, 100, 95, 114, 101, 100, 32, 58, 10, 45, > 117, 32, 34, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 48, 48, 37, > 32, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 48, 44, 48, 44, 48, > 44, 49, 32, 45, 114, 109, 91, 50, 93, 34, 10, 95, 98, 108, 101, 110, > 100, 95, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 58, 10, 45, > 117, 32, 34, 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, 104, > 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 50, 44, > 51, 93, 32, 45, 115, 104, 105, 102, 116, 91, 50, 44, 51, 93, 32, 48, > 44, 48, 44, 48, 44, 45, 49, 44, 50, 32, 45, 115, 104, 91, 50, 93, > 32, 49, 44, 50, 32, 45, 106, 91, 49, 93, 32, 91, 52, 93, 44, 48, > 44, 48, 44, 48, 44, 49, 32, 45, 114, 109, 91, 52, 93, 32, 45, 115, > 104, 105, 102, 116, 91, 50, 44, 51, 93, 32, 48, 44, 48, 44, 48, 44, > 49, 44, 50, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 50, 44, 51, > 93, 32, 45, 114, 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, > 110, 100, 95, 115, 99, 114, 101, 101, 110, 32, 58, 10, 45, 117, 32, 34, > 45, 45, 45, 91, 48, 93, 32, 50, 53, 53, 32, 45, 45, 91, 49, 93, > 32, 50, 53, 53, 32, 45, 42, 91, 49, 44, 50, 93, 32, 45, 47, 91, > 49, 93, 32, 50, 53, 53, 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, > 45, 43, 91, 49, 93, 32, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, > 100, 95, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 32, 58, > 10, 45, 117, 32, 34, 45, 110, 111, 114, 109, 91, 49, 93, 32, 45, 108, > 97, 98, 101, 108, 91, 49, 93, 32, 78, 61, 123, 105, 77, 43, 49, 125, > 32, 34, 92, 10, 34, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 48, > 44, 115, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, > 93, 32, 36, 62, 32, 109, 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, > 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 123, 49, 45, 49, > 47, 50, 53, 54, 125, 32, 45, 43, 91, 45, 49, 93, 32, 91, 49, 93, > 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, > 123, 36, 78, 42, 50, 53, 54, 125, 44, 48, 44, 123, 36, 78, 45, 49, > 47, 50, 53, 54, 125, 32, 34, 92, 10, 34, 45, 105, 91, 45, 50, 93, > 32, 50, 53, 54, 44, 49, 44, 49, 44, 49, 44, 39, 120, 42, 40, 36, > 77, 45, 36, 109, 41, 47, 50, 53, 53, 43, 36, 109, 39, 32, 45, 114, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 50, 32, 45, 42, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 91, 45, 50, 44, > 45, 49, 93, 32, 36, 78, 44, 49, 44, 49, 44, 49, 44, 50, 32, 45, > 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, 47, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 34, 92, 10, 34, 45, > 97, 91, 50, 45, 45, 49, 93, 32, 99, 32, 45, 109, 97, 112, 91, 49, > 93, 32, 91, 50, 93, 32, 45, 114, 109, 91, 50, 93, 34, 10, 95, 98, > 108, 101, 110, 100, 95, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, > 101, 48, 32, 58, 10, 45, 117, 32, 34, 45, 110, 111, 114, 109, 91, 49, > 93, 32, 45, 45, 110, 101, 113, 91, 49, 93, 32, 48, 32, 45, 108, 97, > 98, 101, 108, 91, 49, 93, 32, 78, 61, 64, 123, 49, 44, 105, 77, 43, > 49, 125, 32, 34, 92, 10, 34, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 123, 48, 44, 115, 125, 32, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 91, 48, 93, 32, 36, 62, 32, 109, 61, 123, 105, 109, 125, 32, 77, 61, > 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 123, 49, > 45, 49, 47, 50, 53, 54, 125, 32, 45, 43, 91, 45, 49, 93, 32, 91, > 49, 93, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, > 93, 32, 123, 36, 78, 42, 50, 53, 54, 125, 44, 48, 44, 123, 36, 78, > 45, 49, 47, 50, 53, 54, 125, 32, 34, 92, 10, 34, 45, 105, 91, 45, > 50, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 49, 44, 39, 120, 42, > 40, 36, 77, 45, 36, 109, 41, 47, 50, 53, 53, 43, 36, 109, 39, 32, > 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 50, 32, > 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 36, 78, 44, 49, 44, 49, 44, 49, 44, 50, > 32, 45, 43, 91, 45, 49, 93, 32, 49, 101, 45, 56, 32, 45, 47, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 34, 92, 10, > 34, 45, 97, 91, 51, 45, 45, 49, 93, 32, 99, 32, 45, 109, 97, 112, > 91, 49, 93, 32, 91, 51, 93, 32, 45, 114, 109, 91, 51, 93, 32, 45, > 42, 91, 49, 44, 50, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 115, > 111, 102, 116, 98, 117, 114, 110, 32, 58, 10, 45, 117, 32, 34, 45, 45, > 45, 91, 48, 93, 32, 50, 53, 53, 46, 49, 32, 45, 94, 91, 50, 93, > 32, 45, 49, 32, 45, 42, 91, 50, 93, 32, 91, 49, 93, 32, 45, 42, > 91, 50, 93, 32, 45, 49, 50, 55, 46, 53, 32, 45, 45, 45, 91, 48, > 93, 32, 50, 53, 53, 32, 45, 45, 43, 91, 49, 93, 32, 48, 46, 49, > 32, 45, 47, 91, 51, 44, 52, 93, 32, 45, 42, 91, 51, 93, 32, 49, > 50, 55, 46, 53, 32, 45, 43, 91, 51, 93, 32, 50, 53, 53, 32, 45, > 43, 91, 49, 93, 32, 91, 48, 93, 32, 45, 103, 116, 91, 49, 93, 32, > 50, 53, 53, 32, 34, 92, 10, 34, 45, 106, 91, 50, 93, 32, 91, 51, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, 93, 32, > 45, 114, 109, 91, 49, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, 48, > 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 115, 111, 102, > 116, 100, 111, 100, 103, 101, 32, 58, 10, 45, 117, 32, 34, 45, 45, 45, > 91, 49, 93, 32, 50, 53, 53, 46, 49, 32, 45, 94, 91, 50, 93, 32, > 45, 49, 32, 45, 42, 91, 50, 93, 32, 91, 48, 93, 32, 45, 42, 91, > 50, 93, 32, 45, 49, 50, 55, 46, 53, 32, 45, 45, 45, 91, 49, 93, > 32, 50, 53, 53, 32, 45, 45, 43, 91, 48, 93, 32, 48, 46, 49, 32, > 45, 47, 91, 51, 44, 52, 93, 32, 45, 42, 91, 51, 93, 32, 49, 50, > 55, 46, 53, 32, 45, 43, 91, 51, 93, 32, 50, 53, 53, 32, 45, 43, > 91, 49, 93, 32, 91, 48, 93, 32, 45, 103, 116, 91, 49, 93, 32, 50, > 53, 53, 32, 34, 92, 10, 34, 45, 106, 91, 50, 93, 32, 91, 51, 93, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 49, 93, 32, 45, > 114, 109, 91, 49, 44, 51, 93, 32, 45, 99, 91, 49, 93, 32, 48, 44, > 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, 100, 95, 115, 111, 102, 116, > 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, 45, 45, 47, 91, > 48, 93, 32, 50, 53, 53, 32, 45, 47, 91, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 42, 91, 50, 93, > 32, 91, 49, 93, 32, 45, 42, 91, 49, 93, 32, 91, 51, 93, 32, 45, > 42, 91, 49, 93, 32, 45, 50, 32, 45, 42, 91, 50, 93, 32, 50, 32, > 45, 43, 91, 49, 45, 51, 93, 32, 45, 42, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, > 98, 108, 101, 110, 100, 95, 115, 116, 97, 109, 112, 32, 58, 10, 45, 117, > 32, 34, 45, 42, 91, 49, 93, 32, 50, 32, 45, 43, 91, 49, 93, 32, > 91, 48, 93, 32, 45, 45, 91, 49, 93, 32, 50, 53, 53, 32, 45, 99, > 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, 10, 95, 98, 108, 101, 110, > 100, 95, 115, 117, 98, 116, 114, 97, 99, 116, 32, 58, 10, 45, 117, 32, > 34, 45, 45, 91, 49, 93, 32, 91, 48, 93, 32, 45, 42, 91, 49, 93, > 32, 45, 49, 32, 45, 99, 91, 49, 93, 32, 48, 44, 50, 53, 53, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 118, 97, 108, 117, 101, 32, 58, 10, > 45, 117, 32, 34, 45, 116, 111, 95, 99, 111, 108, 111, 114, 32, 45, 115, > 104, 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 50, > 44, 51, 93, 32, 45, 115, 104, 91, 50, 93, 32, 48, 44, 49, 32, 45, > 106, 91, 49, 93, 32, 91, 52, 93, 32, 45, 114, 109, 91, 52, 93, 32, > 45, 104, 115, 118, 50, 114, 103, 98, 91, 50, 44, 51, 93, 32, 45, 114, > 109, 91, 50, 44, 51, 93, 34, 10, 95, 98, 108, 101, 110, 100, 95, 118, > 105, 118, 105, 100, 108, 105, 103, 104, 116, 32, 58, 10, 45, 117, 32, 34, > 45, 42, 91, 49, 93, 32, 50, 32, 45, 45, 98, 108, 101, 110, 100, 32, > 98, 117, 114, 110, 32, 45, 45, 91, 49, 93, 32, 50, 53, 54, 32, 45, > 45, 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 100, 111, 100, 103, > 101, 32, 45, 103, 101, 91, 49, 93, 32, 48, 32, 34, 92, 10, 34, 45, > 106, 91, 50, 93, 32, 91, 51, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 49, 93, 32, 45, 114, 109, 91, 49, 44, 51, 93, 34, > 10, 95, 98, 108, 101, 110, 100, 95, 120, 111, 114, 32, 58, 10, 45, 117, > 32, 34, 45, 120, 111, 114, 91, 49, 93, 32, 91, 48, 93, 34, 10, 35, > 64, 103, 109, 105, 99, 32, 98, 108, 101, 110, 100, 95, 101, 100, 103, 101, > 115, 32, 58, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, > 93, 62, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, > 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 32, 116, 111, 103, 101, 116, 104, 101, 114, 115, 32, 117, 115, > 105, 110, 103, 32, 39, 101, 100, 103, 101, 115, 39, 32, 109, 111, 100, 101, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 98, 108, > 101, 110, 100, 95, 101, 100, 103, 101, 115, 32, 48, 46, 56, 10, 98, 108, > 101, 110, 100, 95, 101, 100, 103, 101, 115, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 123, 36, 49, 62, 61, 48, 125, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, > 63, 32, 117, 115, 105, 110, 103, 32, 39, 101, 100, 103, 101, 115, 39, 32, > 109, 111, 100, 101, 44, 32, 119, 105, 116, 104, 32, 115, 109, 111, 111, 116, > 104, 110, 101, 115, 115, 32, 36, 49, 46, 34, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 49, 125, 32, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 114, 91, 94, 48, 93, 32, 91, 48, 93, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 32, 45, > 110, 91, 45, 49, 93, 32, 49, 44, 49, 48, 32, 45, 115, 113, 114, 91, > 45, 49, 93, 32, 45, 115, 91, 45, 50, 93, 32, 99, 32, 45, 42, 91, > 45, 52, 45, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 97, 91, 45, > 52, 45, 45, 49, 93, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 91, 94, 48, 93, 32, 91, 48, 93, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 43, 32, 45, 115, > 91, 45, 49, 93, 32, 99, 32, 45, 47, 91, 45, 52, 45, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 118, 32, 43, 32, 45, > 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 101, > 110, 100, 95, 102, 97, 100, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 66, 108, 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 32, 116, 111, 103, 101, 116, 104, 101, 114, 32, > 117, 115, 105, 110, 103, 32, 97, 32, 103, 105, 118, 101, 110, 32, 102, 97, > 100, 105, 110, 103, 32, 112, 97, 116, 116, 101, 114, 110, 32, 40, 100, 101, > 102, 105, 110, 101, 100, 32, 97, 115, 32, 116, 104, 101, 32, 108, 97, 116, > 101, 115, 116, 32, 105, 109, 97, 103, 101, 41, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, > 125, 44, 123, 104, 125, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 39, 99, 111, 115, 40, 121, 47, 49, 48, 41, 39, 32, > 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 48, > 44, 49, 32, 45, 45, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 10, > 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 32, 58, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, > 101, 36, 63, 32, 117, 115, 105, 110, 103, 32, 39, 102, 97, 100, 101, 39, > 32, 109, 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 91, > 94, 45, 49, 93, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 100, 115, > 91, 94, 45, 49, 93, 125, 44, 48, 10, 45, 114, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, > 48, 48, 37, 44, 49, 32, 45, 109, 97, 120, 91, 45, 49, 93, 32, 48, > 32, 45, 109, 105, 110, 91, 45, 49, 93, 32, 123, 64, 35, 45, 50, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, > 45, 45, 45, 91, 45, 49, 93, 32, 36, 62, 32, 45, 97, 98, 115, 91, > 45, 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 49, 32, 45, 109, 97, 120, 91, 45, 49, 93, 32, > 48, 32, 45, 42, 91, 36, 62, 44, 45, 49, 93, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 43, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 108, 101, 110, 100, 95, 109, > 101, 100, 105, 97, 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, > 108, 101, 110, 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 115, 32, 116, 111, 103, 101, 116, 104, 101, 114, 32, 117, 115, > 105, 110, 103, 32, 39, 109, 101, 100, 105, 97, 110, 39, 32, 109, 111, 100, > 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, > 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 109, > 105, 114, 114, 111, 114, 91, 48, 93, 32, 121, 32, 45, 45, 98, 108, 101, > 110, 100, 95, 109, 101, 100, 105, 97, 110, 10, 98, 108, 101, 110, 100, 95, > 109, 101, 100, 105, 97, 110, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 117, 115, 105, 110, 103, 32, 39, 109, 101, 100, 105, 97, 110, 39, 32, 109, > 111, 100, 101, 46, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 99, > 111, 108, 111, 114, 109, 111, 100, 101, 32, 48, 32, 45, 114, 32, 64, 123, > 45, 109, 97, 120, 95, 119, 104, 100, 125, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, 53, 32, 119, > 104, 100, 61, 123, 119, 125, 44, 123, 104, 125, 44, 123, 100, 125, 32, 45, > 114, 32, 49, 48, 48, 37, 44, 123, 104, 42, 100, 125, 44, 49, 44, 49, > 48, 48, 37, 44, 45, 49, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 50, 125, 32, 45, 43, 32, 45, 47, 32, 50, 10, 45, 101, 108, 105, 102, > 32, 123, 64, 35, 62, 50, 125, 10, 45, 112, 101, 114, 109, 117, 116, 101, > 32, 120, 121, 99, 122, 32, 45, 97, 32, 99, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 115, 45, 49, 45, 36, 62, 125, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 36, 62, 44, 36, 62, 32, 45, 115, 104, 91, 45, 50, 93, 32, 123, 36, > 62, 43, 49, 125, 44, 123, 36, 62, 43, 49, 125, 32, 45, 45, 103, 116, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 106, 91, 45, 51, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 52, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 32, 45, > 106, 91, 45, 52, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 52, 45, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 115, 37, 50, 125, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 53, 48, 37, 32, 45, 101, 108, 115, 101, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 123, 115, 47, 50, 45, 49, > 125, 44, 123, 115, 47, 50, 125, 32, 45, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 43, 32, 45, 47, 32, 50, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 101, 114, 109, 117, 116, 101, > 32, 120, 121, 99, 122, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, > 45, 49, 93, 32, 36, 119, 104, 100, 44, 49, 48, 48, 37, 44, 45, 49, > 32, 45, 118, 32, 43, 10, 95, 102, 97, 100, 101, 32, 58, 10, 45, 114, > 91, 45, 50, 93, 32, 91, 45, 51, 93, 44, 53, 32, 45, 114, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 44, 51, 32, 45, 99, 91, 45, 49, 93, > 32, 36, 49, 37, 44, 36, 50, 37, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, > 32, 98, 108, 101, 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, > 58, 32, 95, 105, 115, 95, 109, 105, 120, 101, 100, 95, 109, 111, 100, 101, > 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 105, 110, 110, 101, > 114, 95, 102, 97, 100, 105, 110, 103, 91, 37, 93, 62, 61, 48, 44, 95, > 111, 117, 116, 101, 114, 95, 102, 97, 100, 105, 110, 103, 91, 37, 93, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 66, 108, 101, 110, > 100, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 32, 117, 115, 105, 110, 103, 32, 97, 32, 115, 101, 97, 109, 108, 101, > 115, 115, 32, 98, 108, 101, 110, 100, 105, 110, 103, 32, 109, 111, 100, 101, > 32, 40, 80, 111, 105, 115, 115, 111, 110, 45, 98, 97, 115, 101, 100, 41, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 105, 115, 95, 109, > 105, 120, 101, 100, 61, 48, 39, 44, 32, 39, 105, 110, 110, 101, 114, 95, > 102, 97, 100, 105, 110, 103, 61, 48, 39, 32, 97, 110, 100, 32, 39, 111, > 117, 116, 101, 114, 95, 102, 97, 100, 105, 110, 103, 61, 49, 48, 48, 37, > 39, 46, 10, 98, 108, 101, 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, > 115, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 50, 61, > 48, 125, 62, 61, 48, 32, 38, 38, 32, 36, 123, 51, 61, 49, 48, 48, > 37, 125, 62, 61, 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 48, 125, 10, 45, 118, 32, 45, 32, 115, 48, 61, 34, 110, 111, 110, > 45, 109, 105, 120, 101, 100, 34, 32, 115, 49, 61, 34, 109, 105, 120, 101, > 100, 34, 10, 45, 118, 32, 43, 32, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 66, 108, 101, 110, 100, 32, 105, 109, 97, 103, 101, 36, 63, 32, 117, > 115, 105, 110, 103, 32, 115, 101, 97, 109, 108, 101, 115, 115, 32, 109, 111, > 100, 101, 32, 40, 80, 111, 105, 115, 115, 111, 110, 45, 98, 97, 115, 101, > 100, 41, 44, 32, 105, 110, 32, 34, 36, 123, 115, 123, 36, 49, 33, 61, > 48, 125, 125, 34, 32, 109, 111, 100, 101, 32, 119, 105, 116, 104, 32, 105, > 110, 110, 101, 114, 32, 102, 97, 100, 105, 110, 103, 32, 36, 50, 32, 97, > 110, 100, 32, 111, 117, 116, 101, 114, 32, 102, 97, 100, 105, 110, 103, 32, > 36, 51, 46, 34, 32, 45, 118, 32, 45, 10, 45, 116, 111, 95, 97, 91, > 94, 48, 93, 32, 45, 114, 32, 64, 123, 48, 44, 119, 43, 51, 50, 125, > 44, 64, 123, 48, 44, 104, 43, 51, 50, 125, 44, 49, 44, 49, 48, 48, > 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, > 102, 32, 123, 36, 51, 39, 33, 61, 39, 49, 48, 48, 37, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, > 91, 48, 44, 49, 93, 10, 45, 45, 98, 108, 101, 110, 100, 95, 115, 101, > 97, 109, 108, 101, 115, 115, 32, 36, 49, 44, 36, 50, 44, 49, 48, 48, > 37, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, 93, 32, > 49, 48, 48, 37, 32, 45, 110, 101, 113, 91, 45, 50, 93, 32, 48, 32, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 50, 93, 32, 49, 10, > 105, 77, 61, 64, 123, 45, 50, 44, 105, 77, 125, 32, 105, 99, 61, 123, > 105, 102, 40, 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, > 92, 32, 36, 51, 125, 44, 50, 42, 36, 51, 42, 36, 105, 77, 44, 49, > 43, 36, 51, 41, 125, 10, 45, 105, 102, 32, 123, 36, 105, 99, 60, 61, > 36, 105, 77, 125, 32, 45, 99, 91, 45, 50, 93, 32, 48, 44, 123, 109, > 97, 120, 40, 49, 44, 36, 105, 99, 41, 125, 32, 45, 110, 91, 45, 50, > 93, 32, 48, 44, 49, 10, 45, 101, 108, 115, 101, 32, 45, 110, 91, 45, > 50, 93, 32, 48, 44, 123, 109, 97, 120, 40, 48, 44, 50, 45, 36, 105, > 99, 47, 36, 105, 77, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 91, 45, 50, 93, 32, 45, 49, 32, 45, 43, 91, 45, 50, 93, 32, > 49, 10, 45, 106, 91, 48, 93, 32, 91, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 91, 49, 93, 32, 45, 114, 109, 91, 49, 44, > 50, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, > 45, 49, 125, 32, 45, 108, 91, 48, 44, 49, 93, 10, 45, 45, 114, 91, > 48, 93, 32, 49, 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, > 97, 118, 103, 61, 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 91, 45, > 49, 93, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 101, 114, 111, 100, 101, > 91, 45, 49, 93, 32, 51, 10, 45, 103, 91, 48, 44, 49, 93, 32, 120, > 121, 44, 49, 10, 45, 42, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 36, 49, 10, 45, 45, 97, 91, 48, 44, > 49, 93, 32, 99, 32, 45, 45, 97, 91, 50, 44, 51, 93, 32, 99, 32, > 45, 110, 111, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 60, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 50, 125, > 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 48, > 10, 105, 77, 61, 123, 105, 77, 125, 32, 105, 99, 61, 123, 105, 102, 40, > 64, 123, 45, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 92, 32, 36, > 50, 125, 44, 50, 42, 36, 50, 42, 36, 105, 77, 44, 49, 43, 36, 50, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 105, 99, 60, 61, 36, 105, 77, > 125, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 123, 109, 97, 120, 40, > 49, 44, 36, 105, 99, 41, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 49, 10, 45, 101, 108, 115, 101, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 123, 109, 97, 120, 40, 48, 44, 50, 45, 36, 105, 99, 47, 36, > 105, 77, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 106, 91, 45, 53, 93, 32, 91, 45, 51, 93, 44, 48, > 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 10, 45, 106, > 91, 45, 52, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 103, 91, 48, 93, 32, 120, 44, 45, 49, 32, 45, > 103, 91, 49, 93, 32, 121, 44, 45, 49, 32, 45, 43, 10, 45, 102, 102, > 116, 91, 48, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 49, 44, 39, 45, 40, 52, 45, 50, 42, 99, 111, 115, 40, 50, 42, > 120, 42, 112, 105, 47, 119, 41, 45, 50, 42, 99, 111, 115, 40, 50, 42, > 121, 42, 112, 105, 47, 104, 41, 41, 39, 10, 45, 61, 91, 45, 49, 93, > 32, 49, 32, 45, 47, 91, 45, 51, 44, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 61, 91, 45, 50, 93, > 32, 48, 32, 45, 61, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 102, > 116, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 45, 102, 99, 91, 45, 49, 93, 32, 36, 97, 118, 103, 10, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 99, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 122, 32, 49, 54, 44, 49, 54, 44, 123, 119, > 45, 49, 55, 125, 44, 123, 104, 45, 49, 55, 125, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, 101, 95, 100, 105, 97, > 109, 111, 110, 100, 32, 58, 32, 48, 60, 61, 95, 115, 116, 97, 114, 116, > 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 101, 110, 100, 60, 61, 49, > 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, > 116, 101, 32, 100, 105, 97, 109, 111, 110, 100, 32, 102, 97, 100, 105, 110, > 103, 32, 102, 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, > 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 115, 116, 97, 114, 116, 61, 56, 48, 39, 32, 97, 110, 100, 32, > 39, 101, 110, 100, 61, 57, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, > 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, > 123, 104, 125, 32, 45, 45, 102, 97, 100, 101, 95, 100, 105, 97, 109, 111, > 110, 100, 32, 56, 48, 44, 56, 53, 10, 102, 97, 100, 101, 95, 100, 105, > 97, 109, 111, 110, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 55, 48, 125, 44, 36, 123, 50, 61, 57, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, > 49, 37, 44, 36, 50, 37, 41, 32, 100, 105, 97, 109, 111, 110, 100, 45, > 115, 104, 97, 112, 101, 100, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, > 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, > 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, > 49, 125, 93, 10, 40, 48, 44, 49, 44, 48, 59, 49, 44, 49, 44, 49, > 59, 48, 44, 49, 44, 48, 41, 32, 45, 95, 102, 97, 100, 101, 32, 36, > 49, 44, 36, 50, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, > 101, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 95, 97, 110, 103, 108, > 101, 44, 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, > 44, 48, 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 108, 105, > 110, 101, 97, 114, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 97, 110, 103, 108, > 101, 61, 52, 53, 39, 44, 32, 39, 115, 116, 97, 114, 116, 61, 51, 48, > 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, 48, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, > 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 102, 97, 100, 101, > 95, 108, 105, 110, 101, 97, 114, 32, 52, 53, 44, 52, 56, 44, 53, 50, > 10, 102, 97, 100, 101, 95, 108, 105, 110, 101, 97, 114, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 52, 53, 125, 44, 36, 123, 50, > 61, 51, 48, 125, 44, 36, 123, 51, 61, 55, 48, 125, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, 50, > 37, 44, 36, 51, 37, 41, 32, 108, 105, 110, 101, 97, 114, 32, 102, 97, > 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 119, 105, 116, 104, 32, 97, 110, 103, 108, 101, 32, 36, 49, > 32, 100, 101, 103, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, > 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 10, 54, 52, > 44, 54, 52, 44, 49, 44, 49, 44, 34, 120, 42, 99, 111, 115, 40, 36, > 49, 42, 112, 105, 47, 49, 56, 48, 41, 32, 43, 32, 121, 42, 115, 105, > 110, 40, 36, 49, 42, 112, 105, 47, 49, 56, 48, 41, 34, 32, 45, 95, > 102, 97, 100, 101, 32, 36, 50, 44, 36, 51, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 97, 100, 101, 95, 114, 97, 100, 105, 97, 108, 32, 58, > 32, 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, > 48, 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 114, 97, 100, > 105, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, 114, 116, > 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, 48, > 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, > 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, > 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 102, > 97, 100, 101, 95, 114, 97, 100, 105, 97, 108, 32, 51, 48, 44, 55, 48, > 10, 102, 97, 100, 101, 95, 114, 97, 100, 105, 97, 108, 32, 58, 32, 45, > 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, > 61, 55, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, > 101, 97, 116, 101, 32, 40, 36, 49, 37, 44, 36, 50, 37, 41, 32, 114, > 97, 100, 105, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, > 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, > 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, 44, 123, 36, 62, 43, 49, > 125, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 61, 91, > 45, 49, 93, 32, 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 100, > 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 95, > 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 97, 100, 101, 95, 120, 32, 58, 32, 48, 60, 61, 95, > 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, 60, 61, 95, 101, > 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 67, 114, 101, 97, 116, 101, 32, 104, 111, 114, 105, 122, 111, 110, 116, > 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, 114, 116, 61, > 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, 48, 39, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, > 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, > 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, 102, 97, > 100, 101, 95, 120, 32, 51, 48, 44, 55, 48, 10, 102, 97, 100, 101, 95, > 120, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, > 125, 44, 36, 123, 50, 61, 55, 48, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, 49, 37, 44, 36, > 50, 37, 41, 32, 104, 111, 114, 105, 122, 111, 110, 116, 97, 108, 32, 102, > 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 40, 48, 44, 49, > 41, 32, 45, 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, 101, 95, 121, 32, 58, 32, > 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, > 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 118, 101, 114, 116, > 105, 99, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, > 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 116, 97, 114, > 116, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, 100, 61, 55, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, > 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 45, > 102, 97, 100, 101, 95, 121, 32, 51, 48, 44, 55, 48, 10, 102, 97, 100, > 101, 95, 121, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 51, 48, 125, 44, 36, 123, 50, 61, 55, 48, 125, 10, 45, 101, 91, 94, > 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, 32, 40, 36, 49, 37, > 44, 36, 50, 37, 41, 32, 118, 101, 114, 116, 105, 99, 97, 108, 32, 102, > 97, 100, 105, 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 40, 48, 59, 49, > 41, 32, 45, 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 102, 97, 100, 101, 95, 122, 32, 58, 32, > 48, 60, 61, 95, 115, 116, 97, 114, 116, 60, 61, 49, 48, 48, 44, 48, > 60, 61, 95, 101, 110, 100, 60, 61, 49, 48, 48, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 116, 114, 97, 110, > 115, 118, 101, 114, 115, 97, 108, 32, 102, 97, 100, 105, 110, 103, 32, 102, > 114, 111, 109, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, > 116, 97, 114, 116, 61, 51, 48, 39, 32, 97, 110, 100, 32, 39, 101, 110, > 100, 61, 55, 48, 39, 46, 10, 102, 97, 100, 101, 95, 122, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, > 50, 61, 55, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 114, 101, 97, 116, 101, 32, 40, 36, 49, 37, 44, 36, 50, 37, 41, 32, > 116, 114, 97, 110, 115, 118, 101, 114, 115, 97, 108, 32, 102, 97, 100, 105, > 110, 103, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 36, 63, 46, > 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, 62, > 44, 123, 36, 62, 43, 49, 125, 93, 32, 40, 48, 47, 49, 41, 32, 45, > 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 58, 32, > 95, 111, 112, 97, 99, 105, 116, 121, 95, 103, 97, 105, 110, 62, 61, 49, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 109, 112, 117, 116, > 101, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 97, 108, > 112, 104, 97, 45, 99, 104, 97, 110, 110, 101, 108, 32, 100, 105, 102, 102, > 101, 114, 101, 110, 99, 101, 32, 40, 111, 112, 112, 111, 115, 105, 116, 101, > 32, 111, 102, 32, 97, 108, 112, 104, 97, 32, 98, 108, 101, 110, 100, 105, > 110, 103, 41, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 119, 111, 32, > 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, 101, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 101, > 32, 97, 108, 112, 104, 97, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, > 101, 32, 65, 45, 66, 32, 105, 115, 32, 100, 101, 102, 105, 110, 101, 100, > 32, 97, 115, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, 104, 97, > 118, 105, 110, 103, 32, 109, 105, 110, 105, 109, 97, 108, 32, 111, 112, 97, > 99, 105, 116, 121, 44, 32, 115, 117, 99, 104, 32, 116, 104, 97, 116, 32, > 97, 108, 112, 104, 97, 95, 98, 108, 101, 110, 100, 40, 66, 44, 65, 45, > 66, 41, 32, 61, 32, 66, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, > 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, > 125, 32, 45, 45, 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 44, 10, > 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 36, 123, 49, 61, 49, 125, 62, 61, 49, 10, 45, 101, 91, > 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 109, 105, > 110, 105, 109, 97, 108, 32, 97, 108, 112, 104, 97, 45, 99, 104, 97, 110, > 110, 101, 108, 32, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 32, 98, > 101, 116, 119, 101, 101, 110, 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, > 118, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, 104, > 32, 111, 112, 97, 99, 105, 116, 121, 32, 103, 97, 105, 110, 32, 36, 49, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 109, 111, 118, 101, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, 91, 36, > 62, 44, 123, 49, 43, 36, 62, 125, 93, 10, 45, 116, 111, 95, 99, 111, > 108, 111, 114, 109, 111, 100, 101, 32, 48, 32, 45, 114, 32, 64, 123, 45, > 109, 97, 120, 95, 119, 104, 100, 125, 44, 49, 48, 48, 37, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 45, 62, 91, 48, 44, > 49, 93, 32, 45, 42, 91, 50, 93, 32, 50, 53, 53, 10, 45, 45, 91, > 48, 44, 50, 93, 32, 91, 49, 93, 32, 45, 114, 101, 112, 108, 97, 99, > 101, 91, 50, 93, 32, 48, 44, 49, 10, 45, 105, 91, 50, 93, 32, 91, > 48, 93, 32, 45, 47, 91, 50, 44, 51, 93, 10, 45, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 50, 93, 32, > 109, 97, 120, 10, 45, 42, 91, 50, 93, 32, 36, 49, 32, 45, 99, 91, > 50, 93, 32, 48, 44, 49, 10, 45, 45, 114, 101, 112, 108, 97, 99, 101, > 91, 50, 93, 32, 48, 44, 49, 32, 45, 47, 91, 48, 44, 51, 93, 32, > 45, 43, 91, 48, 44, 49, 93, 32, 45, 42, 91, 49, 93, 32, 50, 53, > 53, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 58, 32, 73, 109, 97, 103, 101, 32, 115, 101, 113, 117, 101, 110, 99, 101, > 115, 10, 35, 64, 103, 109, 105, 99, 32, 97, 110, 105, 109, 97, 116, 101, > 32, 58, 32, 102, 105, 108, 116, 101, 114, 95, 110, 97, 109, 101, 44, 34, > 112, 97, 114, 97, 109, 49, 95, 115, 116, 97, 114, 116, 44, 46, 46, 44, > 112, 97, 114, 97, 109, 78, 95, 115, 116, 97, 114, 116, 34, 44, 34, 112, > 97, 114, 97, 109, 49, 95, 101, 110, 100, 44, 46, 46, 44, 112, 97, 114, > 97, 109, 78, 95, 101, 110, 100, 34, 44, 110, 98, 95, 102, 114, 97, 109, > 101, 115, 62, 61, 48, 44, 95, 111, 117, 116, 112, 117, 116, 95, 102, 114, > 97, 109, 101, 115, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, > 111, 117, 116, 112, 117, 116, 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, > 58, 32, 100, 101, 108, 97, 121, 62, 48, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 65, 110, 105, 109, 97, 116, 101, 32, 102, 105, 108, 116, 101, > 114, 32, 102, 114, 111, 109, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, > 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, 116, 111, 32, 101, 110, > 100, 105, 110, 103, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, > 111, 114, 32, 97, 110, 105, 109, 97, 116, 101, 32, 115, 101, 108, 101, 99, > 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 105, 110, 32, 97, 32, 100, 105, 115, 112, 108, 97, 121, > 32, 119, 105, 110, 100, 111, 119, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, > 32, 39, 100, 101, 108, 97, 121, 61, 51, 48, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 97, 110, 105, 109, 97, 116, 101, 32, 102, 108, 111, 119, 101, > 114, 44, 34, 48, 44, 51, 34, 44, 34, 50, 48, 44, 56, 34, 44, 57, > 10, 97, 110, 105, 109, 97, 116, 101, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 51, 48, 125, 44, 36, 123, 50, 61, 48, 125, 44, > 36, 123, 51, 61, 34, 34, 125, 44, 36, 123, 52, 61, 49, 48, 125, 44, > 36, 123, 53, 61, 49, 125, 44, 34, 36, 123, 54, 61, 125, 34, 10, 45, > 105, 102, 32, 123, 105, 115, 118, 97, 108, 40, 36, 49, 41, 125, 10, 45, > 105, 102, 32, 36, 50, 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, > 65, 110, 105, 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, > 32, 119, 105, 116, 104, 32, 97, 32, 100, 101, 108, 97, 121, 32, 111, 102, > 32, 36, 49, 32, 109, 115, 44, 32, 97, 110, 100, 32, 112, 105, 110, 103, > 45, 112, 111, 110, 103, 32, 109, 111, 100, 101, 46, 34, 10, 45, 101, 108, > 115, 101, 32, 45, 101, 91, 48, 45, 45, 52, 93, 32, 34, 65, 110, 105, > 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 97, 32, 100, 101, 108, 97, 121, 32, 111, 102, 32, 36, 49, > 32, 109, 115, 46, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 33, 64, 35, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 118, 32, 45, 10, 115, 112, 101, 101, 100, > 61, 36, 49, 10, 112, 97, 117, 115, 101, 61, 45, 49, 10, 100, 105, 114, > 101, 99, 116, 105, 111, 110, 61, 49, 10, 102, 114, 97, 109, 101, 61, 48, > 10, 45, 100, 111, 10, 45, 119, 91, 36, 102, 114, 97, 109, 101, 93, 32, > 45, 49, 44, 45, 49, 44, 49, 44, 48, 44, 45, 49, 44, 45, 49, 44, > 64, 123, 36, 102, 114, 97, 109, 101, 44, 98, 125, 46, 64, 123, 36, 102, > 114, 97, 109, 101, 44, 120, 125, 10, 102, 114, 97, 109, 101, 61, 123, 36, > 102, 114, 97, 109, 101, 43, 36, 100, 105, 114, 101, 99, 116, 105, 111, 110, > 125, 10, 45, 105, 102, 32, 36, 50, 10, 45, 105, 102, 32, 123, 36, 102, > 114, 97, 109, 101, 61, 61, 45, 49, 125, 32, 102, 114, 97, 109, 101, 61, > 48, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, 49, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 102, 114, 97, 109, 101, 61, 61, 64, 35, 125, > 32, 102, 114, 97, 109, 101, 61, 123, 64, 35, 45, 49, 125, 32, 100, 105, > 114, 101, 99, 116, 105, 111, 110, 61, 45, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 108, 115, 101, 32, 102, 114, 97, 109, 101, 61, 123, 36, > 102, 114, 97, 109, 101, 37, 64, 35, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 119, 97, 105, 116, 32, 36, 115, 112, 101, 101, 100, 10, 45, 105, > 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, > 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, > 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, > 42, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 42, 49, 46, > 53, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, > 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, > 34, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, > 123, 33, 44, 119, 125, 47, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, > 104, 125, 47, 49, 46, 53, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, > 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, > 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 82, 125, 125, 32, 45, 119, > 91, 93, 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, > 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 64, 123, 33, 44, 111, 125, 32, 115, 112, 101, 101, > 100, 61, 123, 109, 105, 110, 40, 53, 48, 48, 44, 109, 97, 120, 40, 49, > 48, 44, 36, 115, 112, 101, 101, 100, 45, 49, 48, 42, 64, 123, 33, 44, > 111, 125, 41, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 83, 80, > 65, 67, 69, 125, 10, 45, 105, 102, 32, 123, 36, 112, 97, 117, 115, 101, > 62, 61, 48, 125, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, 36, > 112, 97, 117, 115, 101, 32, 112, 97, 117, 115, 101, 61, 45, 49, 10, 45, > 101, 108, 115, 101, 32, 112, 97, 117, 115, 101, 61, 36, 100, 105, 114, 101, > 99, 116, 105, 111, 110, 32, 100, 105, 114, 101, 99, 116, 105, 111, 110, 61, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 45, > 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 125, > 32, 45, 118, 32, 43, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, > 45, 45, 51, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 97, 110, > 105, 109, 97, 116, 101, 100, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, > 102, 32, 102, 105, 108, 116, 101, 114, 32, 39, 36, 49, 39, 44, 32, 102, > 114, 111, 109, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 32, 36, > 50, 32, 116, 111, 32, 36, 51, 32, 119, 105, 116, 104, 32, 36, 52, 32, > 102, 114, 97, 109, 101, 115, 46, 34, 10, 45, 105, 102, 32, 123, 33, 40, > 36, 53, 124, 124, 110, 97, 114, 103, 40, 34, 36, 54, 34, 41, 41, 125, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 118, 32, 45, 32, 40, 36, 50, 41, 32, 40, 36, 51, 41, 32, 45, > 121, 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 121, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, > 48, 37, 44, 36, 52, 44, 49, 44, 49, 44, 51, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 32, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, > 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 62, 32, > 65, 110, 105, 109, 97, 116, 101, 32, 105, 109, 97, 103, 101, 32, 91, 34, > 36, 62, 34, 93, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 36, 52, 32, 45, 45, 108, 91, 48, 44, 49, 93, 10, 45, > 36, 49, 91, 45, 49, 93, 32, 64, 123, 48, 44, 123, 36, 62, 42, 64, > 123, 48, 44, 119, 125, 125, 45, 123, 40, 36, 62, 43, 49, 41, 42, 64, > 123, 48, 44, 119, 125, 45, 49, 125, 125, 32, 45, 114, 109, 91, 48, 93, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 34, 36, 54, 34, 41, > 125, 32, 45, 111, 32, 64, 123, 45, 102, 105, 108, 101, 110, 97, 109, 101, > 92, 32, 34, 36, 54, 34, 44, 64, 123, 62, 44, 45, 50, 125, 44, 36, > 62, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, > 36, 53, 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 49, 48, 48, 42, 40, > 36, 62, 43, 49, 41, 47, 36, 52, 125, 10, 45, 118, 32, 43, 32, 45, > 101, 91, 93, 32, 34, 92, 114, 32, 62, 32, 65, 110, 105, 109, 97, 116, > 101, 32, 105, 109, 97, 103, 101, 32, 91, 34, 64, 123, 62, 44, 45, 50, > 125, 34, 93, 32, 58, 32, 70, 114, 97, 109, 101, 32, 34, 123, 36, 62, > 43, 49, 125, 34, 47, 36, 52, 32, 32, 32, 32, 34, 32, 45, 118, 32, > 45, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 93, 32, 45, 118, 32, 43, 10, 45, 101, 110, 100, 105, 102, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 111, 114, 112, 104, 32, 58, 32, 110, 98, 95, > 102, 114, 97, 109, 101, 115, 62, 48, 44, 95, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 62, 61, 48, 44, 95, 112, 114, 101, 99, 105, 115, 105, > 111, 110, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, > 101, 97, 116, 101, 32, 109, 111, 114, 112, 104, 105, 110, 103, 32, 115, 101, > 113, 117, 101, 110, 99, 101, 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, > 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 61, 48, 46, 49, 39, 32, 97, 110, 100, 32, 39, 112, > 114, 101, 99, 105, 115, 105, 111, 110, 61, 53, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 114, 111, 116, 97, 116, 101, 32, 50, 48, 44, 49, 44, > 49, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 109, 111, 114, 112, 104, > 32, 57, 10, 109, 111, 114, 112, 104, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 48, 46, 49, 125, 44, 36, 123, 51, 61, 53, 125, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, 101, > 32, 109, 111, 114, 112, 104, 105, 110, 103, 32, 115, 101, 113, 117, 101, 110, > 99, 101, 32, 98, 101, 116, 119, 101, 101, 110, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 119, 105, 116, 104, 32, 36, 49, 32, 105, 110, 116, 114, > 97, 45, 102, 114, 97, 109, 101, 115, 44, 32, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 32, 36, 50, 32, 97, 110, 100, 32, 112, 114, 101, 99, > 105, 115, 105, 111, 110, 32, 36, 51, 46, 92, 110, 34, 10, 45, 118, 32, > 45, 32, 45, 114, 91, 94, 48, 93, 32, 91, 48, 93, 44, 51, 32, 45, > 105, 91, 48, 93, 32, 40, 64, 35, 41, 32, 45, 45, 91, 48, 93, 32, > 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 48, 10, 45, 118, 32, > 43, 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 62, 32, 77, 111, 114, > 112, 104, 32, 105, 109, 97, 103, 101, 32, 34, 36, 62, 34, 32, 116, 111, > 32, 105, 109, 97, 103, 101, 32, 34, 123, 36, 62, 43, 49, 125, 34, 46, > 32, 32, 32, 32, 34, 32, 45, 118, 32, 45, 10, 45, 45, 101, 113, 117, > 97, 108, 105, 122, 101, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, > 45, 50, 44, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 100, > 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 36, 50, 44, 36, 51, 32, 45, 45, 119, 97, 114, > 112, 91, 45, 53, 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, > 44, 36, 49, 32, 45, 97, 91, 45, 36, 49, 45, 45, 49, 93, 32, 122, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 45, 100, 105, 115, 112, 108, > 97, 99, 101, 109, 101, 110, 116, 91, 45, 51, 93, 32, 91, 45, 50, 93, > 44, 36, 50, 44, 36, 51, 32, 45, 45, 119, 97, 114, 112, 91, 45, 53, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 44, 36, 49, 32, > 45, 97, 91, 45, 36, 49, 45, 45, 49, 93, 32, 122, 32, 45, 114, 109, > 91, 45, 55, 45, 45, 52, 44, 45, 50, 93, 10, 40, 49, 47, 48, 41, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 51, 32, 45, > 42, 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, > 32, 122, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 91, > 45, 49, 93, 32, 122, 10, 45, 109, 118, 91, 45, 36, 49, 45, 45, 49, > 93, 32, 49, 32, 45, 109, 118, 91, 49, 93, 32, 64, 35, 10, 45, 100, > 111, 110, 101, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 114, > 109, 91, 48, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, 110, 114, 105, 103, > 105, 100, 32, 58, 32, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, > 62, 61, 48, 44, 95, 112, 114, 101, 99, 105, 115, 105, 111, 110, 62, 48, > 44, 95, 110, 98, 95, 115, 99, 97, 108, 101, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 103, 105, 115, 116, 101, 114, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 110, 111, 110, 45, 114, 105, 103, 105, 100, 32, 119, > 97, 114, 112, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, > 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 115, > 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 50, 39, 44, 32, > 39, 112, 114, 101, 99, 105, 115, 105, 111, 110, 61, 54, 39, 32, 97, 110, > 100, 32, 39, 110, 98, 95, 115, 99, 97, 108, 101, 61, 48, 40, 97, 117, > 116, 111, 41, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, > 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 114, 111, 116, > 97, 116, 101, 32, 50, 48, 44, 49, 44, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 45, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, > 110, 114, 105, 103, 105, 100, 32, 44, 32, 45, 114, 101, 109, 111, 118, 101, > 91, 45, 50, 93, 10, 114, 101, 103, 105, 115, 116, 101, 114, 95, 110, 111, > 110, 114, 105, 103, 105, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 48, 46, 50, 125, 44, 36, 123, 50, 61, 53, 125, 44, 36, > 123, 51, 61, 48, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, > 101, 103, 105, 115, 116, 101, 114, 32, 105, 109, 97, 103, 101, 36, 63, 32, > 119, 105, 116, 104, 32, 110, 111, 110, 45, 114, 105, 103, 105, 100, 32, 119, > 97, 114, 112, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, > 36, 49, 44, 32, 112, 114, 101, 99, 105, 115, 105, 111, 110, 32, 36, 50, > 32, 97, 110, 100, 32, 36, 51, 32, 115, 99, 97, 108, 101, 40, 115, 41, > 46, 34, 10, 45, 118, 32, 45, 32, 45, 45, 101, 113, 117, 97, 108, 105, > 122, 101, 91, 48, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 36, 62, 62, > 49, 125, 10, 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, > 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 45, 100, 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 91, 49, 93, > 32, 91, 45, 49, 93, 44, 36, 49, 44, 36, 50, 44, 36, 51, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 44, 49, 44, 49, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 50, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 49, > 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, > 103, 105, 115, 116, 101, 114, 95, 114, 105, 103, 105, 100, 32, 58, 32, 95, > 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 62, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 103, 105, 115, 116, 101, 114, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, > 119, 105, 116, 104, 32, 114, 105, 103, 105, 100, 32, 119, 97, 114, 112, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, > 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 115, 109, 111, 111, 116, 104, > 110, 101, 115, 115, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 115, 104, 105, 102, 116, 32, 51, 48, 44, 50, 48, 32, 45, 45, 114, 101, > 103, 105, 115, 116, 101, 114, 95, 114, 105, 103, 105, 100, 32, 44, 32, 45, > 114, 101, 109, 111, 118, 101, 91, 45, 50, 93, 10, 114, 101, 103, 105, 115, > 116, 101, 114, 95, 114, 105, 103, 105, 100, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 49, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 82, 101, 103, 105, 115, 116, 101, 114, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 119, 105, 116, 104, 32, 114, 105, 103, 105, 100, 32, 119, 97, > 114, 112, 32, 97, 110, 100, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, > 115, 32, 36, 49, 46, 34, 10, 45, 118, 32, 45, 32, 45, 45, 101, 113, > 117, 97, 108, 105, 122, 101, 91, 48, 93, 32, 45, 98, 91, 45, 49, 93, > 32, 36, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 36, 62, 62, 49, 125, > 10, 45, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 49, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 45, 112, 104, 97, 115, 101, 95, 99, > 111, 114, 114, 101, 108, 97, 116, 105, 111, 110, 91, 49, 44, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 49, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 10, > 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, 64, 45, 49, 44, 48, > 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 50, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, > 101, 32, 45, 114, 109, 91, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, > 103, 109, 105, 99, 32, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, > 112, 108, 97, 115, 109, 97, 32, 58, 32, 95, 110, 98, 95, 102, 114, 97, > 109, 101, 115, 62, 61, 50, 44, 95, 115, 99, 97, 108, 101, 62, 61, 48, > 44, 95, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 91, 37, 93, 62, > 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 114, 101, 97, > 116, 101, 32, 112, 108, 97, 115, 109, 97, 32, 116, 114, 97, 110, 115, 105, > 116, 105, 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 98, 101, > 116, 119, 101, 101, 110, 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, > 101, 32, 105, 109, 97, 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 110, 98, 95, 102, 114, 97, 109, 101, 115, 61, 49, 48, > 39, 44, 32, 39, 115, 99, 97, 108, 101, 61, 53, 39, 32, 97, 110, 100, > 32, 39, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 46, 53, > 37, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 101, 115, 116, 105, 109, > 97, 103, 101, 50, 100, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 116, > 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, > 32, 57, 10, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, 112, 108, > 97, 115, 109, 97, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, > 115, 105, 110, 116, 40, 36, 123, 49, 61, 49, 48, 125, 41, 32, 38, 38, > 32, 36, 49, 62, 61, 50, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, > 36, 123, 50, 61, 53, 125, 41, 32, 38, 38, 32, 36, 50, 62, 61, 48, > 32, 38, 38, 32, 36, 123, 51, 61, 48, 46, 53, 37, 125, 62, 61, 48, > 34, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, 101, 97, 116, > 101, 32, 112, 108, 97, 115, 109, 97, 32, 116, 114, 97, 110, 115, 105, 116, > 105, 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 98, 101, 116, > 119, 101, 101, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, > 116, 104, 32, 36, 49, 32, 102, 114, 97, 109, 101, 115, 44, 32, 115, 99, > 97, 108, 101, 32, 36, 50, 44, 32, 115, 109, 111, 111, 116, 104, 110, 101, > 115, 115, 32, 36, 51, 46, 92, 110, 34, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 108, 105, 99, 101, 115, > 32, 48, 32, 45, 114, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, 100, > 115, 125, 44, 51, 10, 111, 102, 102, 61, 48, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 123, 36, 62, > 43, 36, 111, 102, 102, 125, 44, 123, 36, 62, 43, 36, 111, 102, 102, 43, > 49, 125, 93, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, > 114, 32, 62, 32, 71, 101, 110, 101, 114, 97, 116, 101, 32, 116, 114, 97, > 110, 115, 105, 116, 105, 111, 110, 32, 102, 114, 111, 109, 32, 105, 109, 97, > 103, 101, 32, 34, 36, 62, 34, 32, 116, 111, 32, 105, 109, 97, 103, 101, > 32, 34, 123, 36, 62, 43, 49, 125, 34, 46, 32, 32, 32, 32, 34, 32, > 45, 118, 32, 45, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, > 112, 108, 97, 115, 109, 97, 91, 45, 49, 93, 32, 49, 44, 48, 44, 36, > 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 36, 49, 45, 50, 125, 32, 45, 45, 108, 101, > 91, 50, 93, 32, 123, 40, 36, 62, 43, 49, 41, 47, 36, 49, 125, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 51, 32, 91, 48, 93, 32, 45, 106, > 91, 45, 49, 93, 32, 91, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, > 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 36, 62, 42, 49, > 48, 48, 47, 40, 36, 49, 45, 50, 41, 125, 32, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 50, 93, 32, 45, 109, 118, 91, 50, 45, 45, 49, > 93, 32, 49, 32, 111, 102, 102, 61, 123, 36, 111, 102, 102, 43, 36, 49, > 45, 50, 125, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, 114, 97, 110, > 115, 105, 116, 105, 111, 110, 51, 100, 32, 58, 32, 95, 110, 98, 95, 102, > 114, 97, 109, 101, 115, 62, 61, 50, 44, 95, 110, 98, 95, 120, 116, 105, > 108, 101, 115, 62, 48, 44, 95, 110, 98, 95, 121, 116, 105, 108, 101, 115, > 62, 48, 44, 95, 97, 120, 105, 115, 95, 120, 44, 95, 97, 120, 105, 115, > 95, 121, 44, 95, 97, 120, 105, 115, 95, 122, 44, 95, 105, 115, 95, 97, > 110, 116, 105, 97, 108, 105, 97, 115, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 67, 114, 101, 97, 116, 101, 32, 51, 100, 32, 116, 114, 97, 110, > 115, 105, 116, 105, 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 99, 111, 110, 115, 101, 99, 117, 116, 105, 118, 101, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 39, 97, > 120, 105, 115, 95, 120, 39, 44, 32, 39, 97, 120, 105, 115, 95, 121, 39, > 32, 97, 110, 100, 32, 39, 97, 120, 105, 115, 95, 122, 39, 32, 99, 97, > 110, 32, 98, 101, 32, 115, 101, 116, 32, 97, 115, 32, 109, 97, 116, 104, > 101, 109, 97, 116, 105, 99, 97, 108, 32, 101, 120, 112, 114, 101, 115, 115, > 105, 111, 110, 115, 44, 32, 100, 101, 112, 101, 110, 100, 105, 110, 103, 32, > 111, 110, 32, 39, 120, 39, 32, 97, 110, 100, 32, 39, 121, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 110, 98, 95, 102, 114, 97, > 109, 101, 115, 61, 49, 48, 39, 44, 32, 39, 110, 98, 95, 120, 116, 105, > 108, 101, 115, 61, 110, 98, 95, 121, 116, 105, 108, 101, 115, 61, 51, 39, > 44, 32, 39, 97, 120, 105, 115, 95, 120, 61, 49, 39, 44, 32, 39, 97, > 120, 105, 115, 95, 121, 61, 49, 39, 44, 32, 39, 97, 120, 105, 115, 95, > 122, 61, 48, 39, 32, 97, 110, 100, 32, 39, 105, 115, 95, 97, 110, 116, > 105, 97, 108, 105, 97, 115, 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, > 45, 45, 98, 108, 117, 114, 32, 53, 32, 45, 116, 114, 97, 110, 115, 105, > 116, 105, 111, 110, 51, 100, 32, 57, 32, 45, 100, 114, 103, 98, 97, 10, > 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 51, 100, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, 36, 123, 49, > 61, 49, 48, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 50, 32, 38, > 38, 32, 105, 115, 105, 110, 116, 40, 36, 123, 50, 61, 51, 125, 41, 32, > 38, 38, 32, 36, 50, 62, 48, 32, 38, 38, 32, 105, 115, 105, 110, 116, > 40, 36, 123, 51, 61, 36, 50, 125, 41, 32, 38, 38, 32, 36, 51, 62, > 48, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 49, 125, 44, > 36, 123, 53, 61, 49, 125, 44, 36, 123, 54, 61, 48, 125, 44, 36, 123, > 55, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 114, > 101, 97, 116, 101, 32, 51, 100, 32, 116, 114, 97, 110, 115, 105, 116, 105, > 111, 110, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 98, 101, 116, 119, > 101, 101, 110, 32, 105, 109, 97, 103, 101, 36, 63, 44, 32, 119, 105, 116, > 104, 32, 36, 49, 32, 102, 114, 97, 109, 101, 115, 44, 32, 36, 50, 120, > 36, 51, 32, 116, 105, 108, 101, 115, 32, 97, 110, 100, 32, 114, 111, 116, > 97, 116, 105, 111, 110, 32, 97, 120, 105, 115, 32, 40, 36, 52, 44, 36, > 53, 44, 36, 54, 41, 46, 92, 110, 34, 10, 45, 118, 32, 45, 10, 45, > 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 108, 105, 99, 101, 115, > 32, 48, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 32, 64, 123, > 45, 109, 97, 120, 95, 119, 104, 100, 115, 125, 44, 51, 10, 111, 102, 102, > 61, 48, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 45, 108, 91, 123, 36, 62, 43, 36, 111, 102, 102, 125, 44, 123, > 36, 62, 43, 36, 111, 102, 102, 43, 49, 125, 93, 10, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 62, 32, 71, 101, 110, 101, > 114, 97, 116, 101, 32, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 32, > 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, 32, 34, 36, 62, 34, 32, > 116, 111, 32, 105, 109, 97, 103, 101, 32, 34, 123, 36, 62, 43, 49, 125, > 34, 46, 32, 32, 32, 32, 34, 32, 45, 118, 32, 45, 10, 36, 50, 44, > 36, 51, 44, 49, 44, 49, 44, 39, 36, 52, 39, 10, 36, 50, 44, 36, > 51, 44, 49, 44, 49, 44, 39, 36, 53, 39, 10, 36, 50, 44, 36, 51, > 44, 49, 44, 49, 44, 39, 36, 54, 39, 10, 45, 97, 91, 45, 51, 45, > 45, 49, 93, 32, 122, 10, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 122, 120, 121, 99, 32, 45, 114, 91, 45, 49, 93, 32, 51, > 44, 123, 36, 50, 42, 36, 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 114, 111, 116, 36, > 62, 61, 64, 123, 45, 49, 44, 48, 45, 50, 125, 32, 45, 115, 104, 105, > 102, 116, 91, 45, 49, 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 32, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, > 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 91, 45, 50, 44, 45, > 49, 93, 32, 36, 50, 44, 36, 51, 32, 45, 109, 118, 91, 48, 44, 49, > 93, 32, 64, 35, 10, 78, 61, 123, 36, 50, 42, 36, 51, 125, 32, 105, > 61, 48, 32, 121, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 51, 10, 120, 61, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, > 10, 108, 119, 61, 64, 123, 36, 105, 44, 119, 125, 32, 108, 104, 61, 64, > 123, 36, 105, 44, 104, 125, 10, 45, 105, 109, 97, 103, 101, 112, 108, 97, > 110, 101, 51, 100, 91, 36, 105, 93, 32, 45, 105, 109, 97, 103, 101, 112, > 108, 97, 110, 101, 51, 100, 91, 36, 78, 93, 32, 45, 114, 51, 100, 91, > 36, 78, 93, 32, 36, 123, 114, 111, 116, 36, 105, 125, 44, 45, 49, 56, > 48, 32, 45, 99, 51, 100, 91, 36, 105, 44, 36, 78, 93, 32, 45, 43, > 51, 100, 91, 36, 105, 44, 36, 78, 93, 10, 120, 36, 105, 61, 36, 120, > 32, 121, 36, 105, 61, 36, 121, 32, 120, 61, 123, 36, 120, 43, 36, 108, > 119, 125, 32, 105, 61, 123, 36, 105, 43, 49, 125, 10, 45, 100, 111, 110, > 101, 10, 121, 61, 123, 36, 121, 43, 36, 108, 104, 125, 10, 45, 100, 111, > 110, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 50, > 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 32, 45, 114, 51, > 100, 91, 36, 62, 93, 32, 36, 123, 114, 111, 116, 36, 62, 125, 44, 123, > 49, 56, 48, 47, 40, 36, 49, 45, 49, 41, 125, 32, 45, 45, 43, 51, > 100, 91, 36, 62, 93, 32, 36, 123, 120, 36, 62, 125, 44, 36, 123, 121, > 36, 62, 125, 44, 48, 32, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, > 91, 45, 36, 78, 45, 45, 49, 93, 32, 45, 99, 51, 100, 91, 45, 49, > 93, 10, 45, 105, 102, 32, 36, 55, 10, 45, 105, 91, 45, 51, 93, 32, > 123, 50, 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, 123, 50, 42, 64, > 123, 45, 50, 44, 104, 125, 125, 44, 49, 44, 51, 44, 45, 49, 10, 45, > 42, 51, 100, 91, 45, 49, 93, 32, 50, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, > 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 44, 48, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, > 45, 50, 93, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 91, 45, 50, 93, 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, > 44, 45, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, 48, 10, > 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, > 44, 49, 44, 49, 48, 48, 37, 44, 50, 10, 45, 101, 108, 115, 101, 10, > 45, 105, 91, 45, 51, 93, 32, 64, 123, 45, 50, 44, 119, 125, 44, 64, > 123, 45, 50, 44, 104, 125, 44, 49, 44, 51, 44, 45, 49, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 51, 93, 32, 91, 45, 49, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 116, 111, 95, 114, > 103, 98, 97, 91, 45, 50, 93, 32, 45, 114, 101, 112, 108, 97, 99, 101, > 95, 99, 111, 108, 111, 114, 91, 45, 50, 93, 32, 48, 44, 48, 44, 45, > 49, 44, 45, 49, 44, 45, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, > 48, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 48, 45, 123, 36, 78, 45, 49, 125, 93, 10, 45, > 110, 109, 91, 49, 45, 45, 50, 93, 32, 64, 123, 48, 44, 110, 125, 10, > 111, 102, 102, 61, 123, 36, 111, 102, 102, 43, 36, 49, 45, 50, 125, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 58, 32, 73, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 100, 101, 109, 111, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 109, 111, 32, 58, 32, 95, 114, 117, 110, 95, > 105, 110, 95, 112, 97, 114, 97, 108, 108, 101, 108, 61, 123, 32, 48, 61, > 110, 111, 32, 124, 32, 49, 61, 121, 101, 115, 32, 124, 32, 50, 61, 97, > 117, 116, 111, 32, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 83, > 104, 111, 119, 32, 97, 32, 109, 101, 110, 117, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 32, 97, 110, 100, 32, 118, 105, 101, 119, 32, 97, 108, > 108, 32, 71, 39, 77, 73, 67, 32, 105, 110, 116, 101, 114, 97, 99, 116, > 105, 118, 101, 32, 100, 101, 109, 111, 115, 46, 10, 100, 101, 109, 111, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, 116, 40, > 36, 123, 49, 61, 50, 125, 41, 32, 38, 38, 32, 36, 49, 62, 61, 48, > 32, 38, 38, 32, 36, 49, 60, 61, 50, 34, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 71, 92, 52, 55, 77, > 73, 67, 32, 100, 101, 109, 111, 115, 32, 109, 101, 110, 117, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, > 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 115, 101, > 108, 101, 99, 116, 32, 97, 32, 100, 101, 109, 111, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, > 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, > 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, > 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, > 108, 91, 93, 10, 112, 97, 114, 97, 108, 108, 101, 108, 95, 109, 111, 100, > 101, 61, 123, 51, 45, 105, 102, 40, 36, 49, 33, 61, 50, 44, 36, 49, > 44, 64, 42, 62, 50, 41, 125, 10, 51, 56, 48, 44, 53, 56, 48, 44, > 49, 44, 51, 32, 45, 45, 112, 108, 97, 115, 109, 97, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 53, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 50, 51, 48, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 47, 91, 45, 49, 93, 32, 50, 46, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 119, 97, 116, 101, 114, 91, 45, 49, 93, 32, 49, 48, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 48, 46, 49, 53, 10, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 49, 45, 32, 50, 48, 52, 56, 32, 103, 97, > 109, 101, 92, 110, 34, 92, 10, 34, 50, 45, 32, 66, 108, 111, 98, 115, > 32, 101, 100, 105, 116, 111, 114, 92, 110, 34, 92, 10, 34, 51, 45, 32, > 66, 111, 117, 110, 99, 105, 110, 103, 32, 98, 97, 108, 108, 115, 92, 110, > 34, 92, 10, 34, 52, 45, 32, 70, 105, 114, 101, 32, 101, 102, 102, 101, > 99, 116, 92, 110, 34, 92, 10, 34, 53, 45, 32, 70, 105, 114, 101, 119, > 111, 114, 107, 115, 92, 110, 34, 92, 10, 34, 54, 45, 32, 70, 105, 115, > 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, 116, 92, 110, 34, 92, > 10, 34, 55, 45, 32, 70, 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, > 116, 101, 114, 105, 110, 103, 92, 110, 34, 92, 10, 34, 56, 45, 32, 72, > 105, 115, 116, 111, 103, 114, 97, 109, 32, 100, 101, 109, 111, 92, 110, 34, > 92, 10, 34, 57, 45, 32, 72, 111, 117, 103, 104, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 92, 110, 34, 92, 10, 34, 49, 48, 45, 32, 74, > 97, 119, 98, 114, 101, 97, 107, 101, 114, 92, 110, 34, 92, 10, 34, 49, > 49, 45, 32, 84, 104, 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, > 105, 102, 101, 92, 110, 34, 92, 10, 34, 49, 50, 45, 32, 76, 105, 103, > 104, 116, 32, 101, 102, 102, 101, 99, 116, 92, 110, 34, 92, 10, 34, 49, > 51, 45, 32, 77, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 101, 120, > 112, 108, 111, 114, 101, 114, 92, 110, 34, 92, 10, 34, 49, 52, 45, 32, > 51, 100, 32, 109, 101, 116, 97, 98, 97, 108, 108, 115, 92, 110, 34, 92, > 10, 34, 49, 53, 45, 32, 77, 105, 110, 101, 115, 119, 101, 101, 112, 101, > 114, 92, 110, 34, 92, 10, 34, 49, 54, 45, 32, 77, 105, 110, 105, 109, > 97, 108, 32, 112, 97, 116, 104, 92, 110, 34, 92, 10, 34, 49, 55, 45, > 32, 80, 97, 99, 109, 97, 110, 92, 110, 34, 92, 10, 34, 49, 56, 45, > 32, 80, 97, 105, 110, 116, 92, 110, 34, 92, 10, 34, 49, 57, 45, 32, > 80, 108, 97, 115, 109, 97, 32, 101, 102, 102, 101, 99, 116, 92, 110, 34, > 92, 10, 34, 50, 48, 45, 32, 82, 71, 66, 32, 113, 117, 97, 110, 116, > 105, 122, 97, 116, 105, 111, 110, 92, 110, 34, 92, 10, 34, 50, 49, 45, > 32, 51, 100, 32, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 92, 110, > 34, 92, 10, 34, 50, 50, 45, 32, 51, 100, 32, 114, 117, 98, 98, 101, > 114, 32, 111, 98, 106, 101, 99, 116, 92, 110, 34, 92, 10, 34, 50, 51, > 45, 32, 83, 104, 97, 100, 101, 32, 98, 111, 98, 115, 92, 110, 34, 92, > 10, 34, 50, 52, 45, 32, 83, 112, 108, 105, 110, 101, 32, 101, 100, 105, > 116, 111, 114, 92, 110, 34, 92, 10, 34, 50, 53, 45, 32, 84, 101, 116, > 114, 105, 115, 92, 110, 34, 92, 10, 34, 50, 54, 45, 32, 84, 105, 99, > 45, 116, 97, 99, 45, 116, 111, 101, 92, 110, 34, 92, 10, 34, 50, 55, > 45, 32, 73, 109, 97, 103, 101, 32, 119, 97, 118, 101, 115, 92, 110, 34, > 92, 10, 34, 50, 56, 45, 32, 70, 114, 97, 99, 116, 97, 108, 32, 119, > 104, 105, 114, 108, 115, 34, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, > 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, 99, 111, 109, 109, > 97, 110, 100, 115, 61, 45, 120, 95, 50, 48, 52, 56, 44, 45, 120, 95, > 98, 108, 111, 98, 115, 44, 45, 120, 95, 98, 111, 117, 110, 99, 105, 110, > 103, 44, 45, 120, 95, 102, 105, 114, 101, 44, 45, 120, 95, 102, 105, 114, > 101, 119, 111, 114, 107, 115, 44, 45, 120, 95, 102, 105, 115, 104, 101, 121, > 101, 44, 45, 120, 95, 102, 111, 117, 114, 105, 101, 114, 44, 45, 120, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 44, 45, 120, 95, 104, 111, 117, > 103, 104, 44, 92, 10, 45, 120, 95, 106, 97, 119, 98, 114, 101, 97, 107, > 101, 114, 44, 45, 120, 95, 108, 105, 102, 101, 44, 45, 120, 95, 108, 105, > 103, 104, 116, 44, 45, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, > 116, 44, 45, 120, 95, 109, 101, 116, 97, 98, 97, 108, 108, 115, 51, 100, > 44, 45, 120, 95, 109, 105, 110, 101, 115, 119, 101, 101, 112, 101, 114, 44, > 45, 120, 95, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, 44, > 92, 10, 45, 120, 95, 112, 97, 99, 109, 97, 110, 44, 45, 120, 95, 112, > 97, 105, 110, 116, 44, 45, 120, 95, 112, 108, 97, 115, 109, 97, 44, 45, > 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 44, 45, > 120, 95, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 51, 100, 44, 45, > 120, 95, 114, 117, 98, 98, 101, 114, 51, 100, 44, 45, 120, 95, 115, 104, > 97, 100, 101, 98, 111, 98, 115, 44, 92, 10, 45, 120, 95, 115, 112, 108, > 105, 110, 101, 44, 45, 120, 95, 116, 101, 116, 114, 105, 115, 44, 45, 120, > 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 44, 45, 120, 95, 119, 97, > 118, 101, 115, 44, 45, 120, 95, 119, 104, 105, 114, 108, 10, 121, 48, 61, > 53, 57, 10, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 50, > 48, 44, 36, 121, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 48, 44, 49, 54, 44, 49, 48, 48, 37, 44, 52, 52, 44, 49, 44, > 49, 50, 48, 44, 49, 50, 48, 44, 51, 50, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 34, 71, 92, 52, 55, 77, 73, 67, 32, 34, 64, 123, > 45, 115, 116, 114, 118, 101, 114, 125, 34, 32, 100, 101, 109, 111, 115, 34, > 44, 50, 44, 50, 44, 50, 56, 44, 49, 44, 49, 44, 49, 44, 49, 32, > 45, 98, 91, 45, 49, 93, 32, 48, 46, 53, 32, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 49, 10, 40, 51, 50, 59, 50, 53, 53, 94, 50, 53, > 53, 59, 50, 53, 53, 94, 48, 59, 48, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 44, > 51, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 49, 44, 45, 49, 32, 45, 45, 110, 101, > 113, 91, 45, 49, 93, 32, 48, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 49, 93, 32, 49, 10, 45, 106, 91, 45, 51, 93, 32, 91, > 45, 50, 93, 44, 50, 48, 44, 49, 54, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 49, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 53, 10, 40, > 56, 48, 59, 50, 53, 53, 59, 56, 48, 94, 48, 59, 50, 53, 53, 59, > 48, 94, 48, 59, 48, 59, 48, 41, 32, 40, 49, 48, 59, 50, 53, 53, > 59, 49, 48, 94, 48, 59, 49, 48, 48, 59, 48, 94, 48, 59, 48, 59, > 48, 41, 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 51, > 93, 44, 49, 56, 44, 49, 44, 51, 44, 51, 32, 45, 112, 111, 108, 121, > 103, 111, 110, 91, 45, 50, 44, 45, 49, 93, 32, 51, 44, 49, 44, 49, > 44, 49, 44, 49, 54, 44, 49, 48, 44, 56, 44, 49, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 45, 109, 105, 114, 114, 111, > 114, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 109, 97, 120, 91, > 45, 52, 44, 45, 50, 93, 32, 45, 109, 97, 120, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 98, 97, 108, 108, 91, 93, 32, 54, 52, 44, 50, 48, > 48, 44, 49, 48, 48, 44, 54, 52, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 51, 48, 32, 45, 115, 91, 45, 49, 93, 32, 99, 44, 45, > 51, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 49, 93, 32, 48, 46, 53, 32, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 54, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 102, 91, 45, > 49, 93, 32, 123, 36, 62, 42, 51, 54, 48, 47, 54, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 45, 115, 91, 45, 49, 93, 32, 99, 44, > 45, 51, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, 50, 93, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 40, 123, 39, 67, > 73, 109, 103, 51, 100, 39, 125, 41, 32, 40, 53, 44, 53, 41, 32, 51, > 44, 53, 32, 40, 49, 44, 48, 59, 49, 44, 52, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 50, 44, 53, 44, 49, 44, 49, 44, 51, 32, 45, 114, > 111, 117, 110, 100, 91, 45, 49, 93, 32, 52, 44, 53, 32, 45, 121, 91, > 45, 53, 45, 45, 49, 93, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, > 32, 121, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, > 112, 114, 105, 116, 101, 115, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 54, > 45, 45, 49, 93, 10, 99, 102, 120, 61, 123, 48, 125, 32, 99, 102, 121, > 61, 123, 48, 125, 32, 99, 102, 122, 61, 123, 48, 125, 32, 110, 102, 120, > 61, 123, 103, 125, 32, 110, 102, 121, 61, 123, 103, 125, 32, 110, 102, 122, > 61, 123, 103, 125, 32, 97, 108, 112, 104, 97, 61, 48, 32, 116, 105, 109, > 101, 48, 61, 123, 64, 124, 45, 52, 125, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 61, 45, 49, 32, 45, 102, 51, 100, 32, 52, 48, 48, 10, 45, > 119, 91, 48, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 48, 44, 53, > 48, 37, 44, 53, 48, 37, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 68, 101, 109, 111, 115, 32, 109, 101, 110, 117, 34, 10, 45, 100, > 111, 10, 116, 61, 123, 49, 46, 53, 42, 64, 124, 125, 10, 49, 44, 51, > 48, 44, 49, 44, 49, 44, 39, 40, 49, 45, 36, 97, 108, 112, 104, 97, > 41, 42, 99, 111, 115, 40, 36, 99, 102, 120, 42, 121, 43, 36, 116, 41, > 43, 36, 97, 108, 112, 104, 97, 42, 99, 111, 115, 40, 36, 110, 102, 120, > 42, 121, 43, 36, 116, 41, 39, 10, 49, 44, 51, 48, 44, 49, 44, 49, > 44, 39, 40, 49, 45, 36, 97, 108, 112, 104, 97, 41, 42, 115, 105, 110, > 40, 36, 99, 102, 121, 42, 121, 43, 36, 116, 41, 43, 36, 97, 108, 112, > 104, 97, 42, 115, 105, 110, 40, 36, 110, 102, 121, 42, 121, 43, 36, 116, > 41, 39, 10, 49, 44, 51, 48, 44, 49, 44, 49, 44, 39, 40, 49, 45, > 36, 97, 108, 112, 104, 97, 41, 42, 115, 105, 110, 40, 36, 99, 102, 122, > 42, 121, 43, 36, 116, 41, 43, 36, 97, 108, 112, 104, 97, 42, 115, 105, > 110, 40, 36, 110, 102, 122, 42, 121, 43, 36, 116, 41, 39, 10, 45, 97, > 91, 45, 51, 45, 45, 49, 93, 32, 120, 32, 45, 115, 91, 45, 49, 93, > 32, 121, 44, 53, 32, 45, 97, 91, 45, 53, 45, 45, 49, 93, 32, 120, > 32, 45, 121, 91, 45, 49, 93, 10, 45, 106, 91, 54, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 56, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 42, 51, 100, 91, 54, 93, 32, 64, 123, 48, 44, 119, 47, 50, 45, 51, > 48, 125, 44, 64, 123, 48, 44, 104, 47, 50, 45, 51, 48, 125, 44, 51, > 48, 48, 32, 45, 43, 51, 100, 91, 54, 93, 32, 48, 44, 48, 44, 50, > 48, 48, 10, 45, 42, 91, 48, 93, 32, 48, 46, 56, 53, 32, 45, 43, > 91, 48, 93, 32, 91, 49, 93, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 48, 93, 32, 91, 54, 93, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 32, 45, 106, 91, 48, 93, > 32, 91, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 51, 93, 44, 50, 53, 53, 10, 121, 61, 123, 64, 123, 33, 44, 121, 125, > 42, 64, 123, 48, 44, 104, 125, 47, 64, 123, 33, 44, 104, 125, 125, 10, > 45, 105, 102, 32, 123, 36, 121, 62, 61, 48, 125, 32, 121, 61, 123, 109, > 97, 120, 40, 48, 44, 109, 105, 110, 40, 50, 55, 44, 105, 110, 116, 40, > 40, 36, 121, 45, 36, 121, 48, 41, 47, 49, 56, 41, 41, 41, 125, 32, > 45, 106, 91, 48, 93, 32, 91, 123, 105, 102, 40, 36, 115, 101, 108, 101, > 99, 116, 101, 100, 62, 61, 48, 44, 53, 44, 52, 41, 125, 93, 44, 48, > 44, 123, 36, 121, 48, 43, 49, 56, 42, 36, 121, 125, 44, 48, 44, 48, > 44, 48, 46, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 91, 48, > 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, > 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, > 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 48, 93, 32, 50, 48, 48, > 37, 44, 50, 48, 48, 37, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 67, 125, 125, 32, 45, 119, 91, 48, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 40, 64, 123, 33, 44, 98, 125, 38, 49, 41, 38, 38, 36, 115, 101, > 108, 101, 99, 116, 101, 100, 60, 48, 125, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 61, 36, 121, 10, 45, 101, 108, 105, 102, 32, 123, 33, 64, 123, > 33, 44, 98, 125, 125, 10, 45, 105, 102, 32, 123, 36, 115, 101, 108, 101, > 99, 116, 101, 100, 62, 61, 48, 38, 38, 36, 121, 61, 61, 36, 115, 101, > 108, 101, 99, 116, 101, 100, 125, 10, 45, 109, 32, 34, 99, 111, 109, 32, > 58, 32, 45, 118, 32, 48, 32, 34, 64, 123, 45, 97, 114, 103, 92, 32, > 123, 49, 43, 36, 121, 125, 44, 36, 99, 111, 109, 109, 97, 110, 100, 115, > 125, 32, 45, 112, 97, 114, 97, 108, 108, 101, 108, 32, 36, 112, 97, 114, > 97, 108, 108, 101, 108, 95, 109, 111, 100, 101, 44, 34, 45, 108, 91, 93, > 32, 45, 99, 111, 109, 32, 45, 118, 32, 45, 49, 32, 45, 114, 109, 32, > 45, 101, 110, 100, 108, 34, 32, 45, 117, 110, 99, 111, 109, 109, 97, 110, > 100, 32, 99, 111, 109, 10, 45, 101, 110, 100, 105, 102, 10, 115, 101, 108, > 101, 99, 116, 101, 100, 61, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 64, 124, 45, 36, 116, 105, 109, 101, 48, 62, 53, > 125, 32, 97, 108, 112, 104, 97, 61, 123, 36, 97, 108, 112, 104, 97, 43, > 48, 46, 48, 51, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 36, 97, 108, 112, 104, 97, 62, 49, 125, 32, 97, 108, 112, 104, > 97, 61, 123, 36, 97, 108, 112, 104, 97, 45, 49, 125, 32, 99, 102, 120, > 61, 36, 110, 102, 120, 32, 99, 102, 121, 61, 36, 110, 102, 121, 32, 99, > 102, 122, 61, 36, 110, 102, 122, 32, 110, 102, 120, 61, 123, 103, 125, 32, > 110, 102, 121, 61, 123, 103, 125, 32, 110, 102, 122, 61, 123, 103, 125, 32, > 116, 105, 109, 101, 48, 61, 123, 64, 124, 45, 63, 42, 51, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, > 109, 32, 45, 119, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, > 48, 32, 45, 101, 91, 93, 32, 34, 34, 10, 35, 64, 103, 109, 105, 99, > 32, 120, 95, 50, 48, 52, 56, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 50, 48, 52, 56, > 32, 103, 97, 109, 101, 46, 10, 120, 95, 50, 48, 52, 56, 32, 58, 10, > 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, > 50, 48, 52, 56, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 74, 111, 105, 110, 32, 116, 104, 101, 32, 110, 117, 109, 98, > 101, 114, 115, 32, 97, 110, 100, 32, 103, 101, 116, 32, 116, 111, 32, 116, > 104, 101, 32, 50, 48, 52, 56, 32, 116, 105, 116, 108, 101, 33, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 85, 115, 101, > 32, 121, 111, 117, 114, 32, 97, 114, 114, 111, 119, 32, 107, 101, 121, 115, > 32, 116, 111, 32, 109, 111, 118, 101, 32, 116, 104, 101, 32, 116, 105, 108, > 101, 115, 46, 32, 87, 104, 101, 110, 32, 116, 119, 111, 32, 116, 105, 108, > 101, 115, 92, 110, 10, 45, 45, 45, 45, 32, 119, 105, 116, 104, 32, 116, > 104, 101, 32, 115, 97, 109, 101, 32, 110, 117, 109, 98, 101, 114, 32, 116, > 111, 117, 99, 104, 44, 32, 116, 104, 101, 121, 32, 109, 101, 114, 103, 101, > 32, 105, 110, 116, 111, 32, 111, 110, 101, 33, 92, 110, 10, 45, 45, 45, > 45, 32, 84, 104, 105, 115, 32, 99, 111, 109, 109, 97, 110, 100, 32, 105, > 115, 32, 97, 32, 112, 111, 114, 116, 32, 111, 102, 32, 116, 104, 101, 32, > 39, 50, 48, 52, 56, 39, 32, 103, 97, 109, 101, 32, 111, 114, 105, 103, > 105, 110, 97, 108, 108, 121, 92, 110, 10, 45, 45, 45, 45, 32, 100, 101, > 115, 105, 103, 110, 101, 100, 32, 98, 121, 32, 71, 97, 98, 114, 105, 101, > 108, 101, 32, 67, 105, 114, 117, 108, 108, 105, 44, 32, 97, 110, 100, 32, > 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 97, 116, 58, 92, 110, 10, > 45, 45, 45, 45, 32, 104, 116, 116, 112, 58, 47, 47, 103, 97, 98, 114, > 105, 101, 108, 101, 99, 105, 114, 117, 108, 108, 105, 46, 103, 105, 116, 104, > 117, 98, 46, 105, 111, 47, 50, 48, 52, 56, 47, 92, 110, 10, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, > 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, > 32, 45, 32, 45, 108, 91, 93, 10, 115, 99, 111, 114, 101, 61, 48, 32, > 45, 102, 51, 100, 32, 53, 48, 32, 45, 109, 51, 100, 32, 48, 10, 45, > 109, 32, 34, 95, 120, 95, 50, 48, 52, 56, 95, 115, 101, 116, 114, 97, > 110, 100, 111, 109, 32, 58, 32, 45, 45, 61, 61, 91, 48, 93, 32, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 44, 52, 42, > 121, 43, 120, 44, 45, 49, 41, 39, 32, 45, 100, 105, 115, 99, 97, 114, > 100, 91, 45, 49, 93, 32, 45, 49, 10, 111, 102, 102, 61, 123, 105, 91, > 114, 111, 117, 110, 100, 40, 63, 40, 104, 45, 49, 41, 41, 93, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 120, 61, 123, 36, 111, 102, 102, 38, > 51, 125, 32, 121, 61, 123, 36, 111, 102, 102, 62, 62, 50, 125, 32, 110, > 61, 123, 105, 102, 40, 63, 60, 48, 46, 55, 53, 44, 49, 44, 50, 41, > 125, 10, 45, 61, 91, 48, 93, 32, 36, 110, 44, 36, 120, 44, 36, 121, > 32, 91, 123, 50, 43, 36, 110, 125, 93, 32, 45, 99, 51, 100, 91, 45, > 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 54, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 45, 49, 93, 44, 123, > 55, 56, 43, 36, 120, 42, 49, 50, 49, 125, 44, 123, 49, 57, 48, 43, > 36, 121, 42, 49, 50, 49, 125, 44, 123, 49, 48, 42, 36, 60, 125, 44, > 123, 40, 49, 43, 36, 62, 41, 47, 54, 125, 32, 45, 119, 91, 49, 93, > 32, 45, 119, 97, 105, 116, 32, 50, 48, 32, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 49, 93, 34, 10, 45, 109, 32, 34, 95, 120, 95, > 50, 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, 100, 32, 58, 32, > 45, 45, 102, 91, 48, 93, 32, 39, 105, 102, 40, 105, 44, 105, 42, 49, > 54, 43, 52, 42, 121, 43, 120, 44, 45, 49, 41, 39, 32, 45, 100, 105, > 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, 49, 10, 78, 61, 123, > 104, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 118, > 61, 64, 123, 45, 123, 49, 43, 36, 62, 125, 44, 36, 62, 125, 32, 45, > 45, 43, 51, 100, 91, 123, 50, 43, 40, 36, 118, 62, 62, 52, 41, 125, > 93, 32, 123, 36, 118, 38, 51, 125, 44, 123, 40, 36, 118, 62, 62, 50, > 41, 38, 51, 125, 32, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, 91, > 45, 36, 78, 45, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 34, > 10, 45, 105, 91, 48, 93, 32, 52, 44, 52, 10, 98, 48, 61, 50, 48, > 52, 44, 49, 57, 50, 44, 49, 55, 57, 32, 98, 49, 61, 50, 51, 56, > 44, 50, 50, 56, 44, 50, 49, 56, 32, 98, 50, 61, 50, 51, 55, 44, > 50, 50, 52, 44, 50, 48, 48, 32, 98, 51, 61, 50, 52, 50, 44, 49, > 55, 55, 44, 49, 50, 49, 10, 98, 52, 61, 50, 52, 53, 44, 49, 52, > 57, 44, 57, 57, 32, 98, 53, 61, 50, 52, 54, 44, 49, 50, 52, 44, > 57, 53, 32, 98, 54, 61, 50, 52, 54, 44, 57, 52, 44, 53, 57, 32, > 98, 55, 61, 50, 51, 55, 44, 50, 48, 55, 44, 49, 49, 52, 10, 99, > 48, 61, 49, 49, 57, 44, 49, 49, 48, 44, 49, 48, 49, 32, 99, 49, > 61, 50, 52, 57, 44, 50, 52, 54, 44, 50, 52, 50, 32, 115, 48, 61, > 34, 32, 34, 10, 53, 50, 48, 44, 54, 51, 48, 44, 49, 44, 51, 32, > 45, 102, 99, 91, 45, 49, 93, 32, 50, 53, 48, 44, 50, 52, 56, 44, > 50, 51, 57, 10, 45, 116, 91, 45, 49, 93, 32, 34, 50, 48, 52, 56, > 34, 44, 50, 48, 44, 49, 48, 44, 56, 54, 44, 49, 44, 36, 99, 48, > 10, 45, 116, 91, 45, 49, 93, 32, 34, 74, 111, 105, 110, 32, 116, 104, > 101, 32, 110, 117, 109, 98, 101, 114, 115, 32, 97, 110, 100, 32, 103, 101, > 116, 32, 116, 111, 32, 116, 104, 101, 32, 50, 48, 52, 56, 32, 116, 105, > 116, 108, 101, 33, 34, 44, 50, 48, 44, 57, 48, 44, 50, 48, 44, 49, > 44, 36, 99, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, > 45, 49, 93, 32, 52, 50, 50, 44, 50, 48, 44, 53, 48, 49, 44, 55, > 53, 44, 49, 44, 49, 56, 55, 44, 49, 55, 51, 44, 49, 54, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 34, 83, 67, 79, 82, 69, 34, 44, 52, > 51, 57, 44, 50, 53, 44, 49, 53, 44, 49, 44, 50, 51, 56, 44, 50, > 50, 56, 44, 50, 49, 56, 10, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 50, 10, 49, 48, 55, 44, 49, 48, 55, 44, 49, 44, 51, 32, 45, 102, > 99, 91, 45, 49, 93, 32, 36, 123, 98, 123, 109, 105, 110, 40, 36, 62, > 44, 55, 41, 125, 125, 32, 45, 45, 102, 99, 91, 45, 49, 93, 32, 36, > 123, 99, 123, 36, 62, 62, 50, 125, 125, 10, 115, 49, 61, 123, 50, 94, > 36, 62, 125, 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 123, 115, > 123, 36, 62, 62, 48, 125, 125, 44, 48, 44, 48, 44, 53, 50, 44, 49, > 44, 49, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 32, 45, 100, 105, 108, 97, 116, 101, 95, 99, 105, 114, 99, > 91, 45, 49, 93, 32, 51, 32, 45, 98, 91, 45, 49, 93, 32, 48, 46, > 53, 10, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 49, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, > 45, 102, 114, 97, 109, 101, 95, 114, 111, 117, 110, 100, 91, 50, 45, 45, > 49, 93, 32, 49, 48, 44, 53, 44, 49, 44, 48, 46, 53, 44, 49, 56, > 55, 44, 49, 55, 51, 44, 49, 54, 48, 32, 45, 102, 114, 97, 109, 101, > 91, 50, 45, 45, 49, 93, 32, 55, 44, 55, 44, 49, 56, 55, 44, 49, > 55, 51, 44, 49, 54, 48, 32, 45, 116, 111, 95, 114, 103, 98, 91, 50, > 45, 45, 49, 93, 10, 45, 114, 91, 50, 93, 32, 52, 48, 48, 37, 44, > 52, 48, 48, 37, 44, 49, 44, 51, 44, 48, 44, 50, 32, 45, 106, 91, > 49, 93, 32, 91, 50, 93, 44, 49, 56, 44, 49, 51, 48, 10, 45, 115, > 112, 114, 105, 116, 101, 51, 100, 91, 51, 45, 45, 49, 93, 10, 45, 119, > 91, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 50, 48, 52, 56, 34, > 32, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, 61, 49, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 50, 32, 45, 95, 120, 95, 50, 48, 52, 56, > 95, 115, 101, 116, 114, 97, 110, 100, 111, 109, 32, 45, 100, 111, 110, 101, > 10, 45, 100, 111, 10, 45, 105, 102, 32, 36, 105, 110, 115, 101, 114, 116, > 95, 110, 101, 119, 10, 45, 95, 120, 95, 50, 48, 52, 56, 95, 111, 98, > 106, 101, 99, 116, 51, 100, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 49, 50, 49, 32, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 49, 56, > 44, 49, 51, 48, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, > 93, 32, 91, 45, 49, 93, 44, 55, 56, 44, 49, 57, 48, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 56, 48, 44, 50, 53, 44, 49, 44, 51, 32, > 45, 102, 99, 91, 45, 49, 93, 32, 36, 99, 49, 32, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 36, 115, 99, 111, 114, 101, 44, 48, 44, 48, 44, > 50, 53, 44, 49, 44, 49, 44, 49, 44, 49, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, > 46, 56, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 49, 93, > 32, 52, 50, 50, 44, 52, 53, 44, 53, 48, 49, 44, 54, 57, 44, 49, > 44, 49, 56, 55, 44, 49, 55, 51, 44, 49, 54, 48, 32, 45, 106, 91, > 49, 93, 32, 91, 45, 50, 93, 44, 52, 50, 50, 44, 52, 53, 44, 48, > 44, 48, 44, 49, 44, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 119, 91, 49, 93, 32, 105, 110, 115, 101, 114, > 116, 95, 110, 101, 119, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 43, 91, 48, 93, 32, 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, > 106, 40, 45, 49, 41, 61, 61, 105, 124, 124, 106, 40, 49, 41, 61, 61, > 105, 124, 124, 106, 40, 48, 44, 45, 49, 41, 61, 61, 105, 124, 124, 106, > 40, 49, 44, 48, 41, 61, 61, 105, 124, 124, 105, 61, 61, 49, 39, 10, > 45, 105, 102, 32, 64, 123, 48, 44, 105, 77, 61, 61, 49, 49, 125, 10, > 45, 97, 108, 101, 114, 116, 32, 34, 71, 97, 109, 101, 32, 79, 118, 101, > 114, 34, 44, 34, 92, 110, 67, 111, 110, 103, 114, 97, 116, 117, 108, 97, > 116, 105, 111, 110, 115, 33, 32, 89, 111, 117, 32, 103, 111, 116, 32, 116, > 104, 101, 32, 50, 48, 52, 56, 32, 116, 105, 116, 108, 101, 33, 92, 110, > 92, 110, 32, 32, 32, 89, 111, 117, 114, 32, 115, 99, 111, 114, 101, 58, > 32, 34, 36, 115, 99, 111, 114, 101, 44, 34, 79, 75, 34, 10, 45, 98, > 114, 101, 97, 107, 10, 45, 101, 108, 105, 102, 32, 123, 33, 105, 77, 125, > 10, 45, 97, 108, 101, 114, 116, 32, 34, 71, 97, 109, 101, 32, 79, 118, > 101, 114, 34, 44, 34, 92, 110, 66, 97, 100, 32, 108, 117, 99, 107, 33, > 32, 89, 111, 117, 32, 108, 111, 115, 116, 32, 116, 104, 101, 32, 103, 97, > 109, 101, 33, 92, 110, 92, 110, 32, 32, 32, 89, 111, 117, 114, 32, 115, > 99, 111, 114, 101, 58, 32, 34, 36, 115, 99, 111, 114, 101, 44, 34, 79, > 75, 34, 10, 45, 98, 114, 101, 97, 107, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 105, 116, 10, 105, > 115, 95, 115, 104, 105, 102, 116, 61, 48, 32, 45, 117, 110, 99, 111, 109, > 109, 97, 110, 100, 32, 115, 104, 105, 102, 116, 50, 48, 52, 56, 44, 105, > 115, 104, 105, 102, 116, 50, 48, 52, 56, 44, 118, 115, 104, 105, 102, 116, > 50, 48, 52, 56, 10, 45, 105, 102, 32, 64, 123, 33, 44, 65, 82, 82, > 79, 87, 76, 69, 70, 84, 125, 10, 45, 109, 32, 34, 115, 104, 105, 102, > 116, 50, 48, 52, 56, 58, 34, 32, 45, 109, 32, 34, 105, 115, 104, 105, > 102, 116, 50, 48, 52, 56, 58, 34, 32, 45, 109, 32, 34, 118, 115, 104, > 105, 102, 116, 50, 48, 52, 56, 58, 34, 10, 105, 115, 95, 115, 104, 105, > 102, 116, 61, 49, 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 65, > 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 10, 45, 109, 32, 34, 115, > 104, 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, > 101, 32, 49, 56, 48, 34, 32, 45, 109, 32, 34, 105, 115, 104, 105, 102, > 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, 101, 32, 49, > 56, 48, 34, 10, 45, 109, 32, 34, 118, 115, 104, 105, 102, 116, 50, 48, > 52, 56, 58, 32, 45, 115, 51, 100, 32, 45, 108, 91, 50, 93, 32, 45, > 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, > 32, 45, 115, 32, 120, 32, 45, 45, 91, 48, 44, 49, 93, 32, 51, 32, > 45, 42, 91, 48, 44, 49, 93, 32, 45, 49, 32, 45, 97, 32, 120, 32, > 45, 121, 32, 45, 101, 110, 100, 108, 32, 45, 97, 32, 121, 34, 10, 105, > 115, 95, 115, 104, 105, 102, 116, 61, 49, 10, 45, 101, 108, 105, 102, 32, > 64, 123, 33, 44, 65, 82, 82, 79, 87, 85, 80, 125, 10, 45, 109, 32, > 34, 115, 104, 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, > 97, 116, 101, 32, 45, 57, 48, 34, 32, 45, 109, 32, 34, 105, 115, 104, > 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, 101, > 32, 57, 48, 34, 10, 45, 109, 32, 34, 118, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 58, 32, 45, 115, 51, 100, 32, 45, 108, 91, 50, 93, 32, > 45, 114, 32, 51, 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, > 49, 32, 45, 115, 32, 120, 32, 45, 114, 118, 91, 48, 44, 49, 93, 32, > 45, 45, 91, 48, 93, 32, 51, 32, 45, 42, 91, 48, 93, 32, 45, 49, > 32, 32, 45, 97, 32, 120, 32, 45, 121, 32, 45, 101, 110, 100, 108, 32, > 45, 97, 32, 121, 34, 10, 105, 115, 95, 115, 104, 105, 102, 116, 61, 49, > 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 65, 82, 82, 79, 87, > 68, 79, 87, 78, 125, 10, 45, 109, 32, 34, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 58, 32, 45, 114, 111, 116, 97, 116, 101, 32, 57, 48, 34, > 32, 45, 109, 32, 34, 105, 115, 104, 105, 102, 116, 50, 48, 52, 56, 58, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 45, 57, 48, 34, 10, 45, 109, > 32, 34, 118, 115, 104, 105, 102, 116, 50, 48, 52, 56, 58, 32, 45, 115, > 51, 100, 32, 45, 108, 91, 50, 93, 32, 45, 114, 32, 51, 44, 123, 104, > 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 115, 32, 120, 32, > 45, 114, 118, 91, 48, 44, 49, 93, 32, 45, 45, 91, 49, 93, 32, 51, > 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 32, 45, 97, 32, 120, 32, > 45, 121, 32, 45, 101, 110, 100, 108, 32, 45, 97, 32, 121, 34, 10, 105, > 115, 95, 115, 104, 105, 102, 116, 61, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 105, 115, 95, 115, 104, 105, 102, 116, 10, 45, > 119, 97, 105, 116, 32, 45, 49, 10, 45, 115, 104, 105, 102, 116, 50, 48, > 52, 56, 91, 48, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 50, 10, > 45, 95, 120, 95, 50, 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, > 100, 10, 45, 45, 115, 91, 48, 93, 32, 121, 32, 45, 100, 105, 115, 99, > 97, 114, 100, 91, 45, 52, 45, 45, 49, 93, 32, 48, 32, 45, 121, 91, > 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 114, 91, 45, 52, 45, 45, > 49, 93, 32, 52, 44, 49, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, > 97, 91, 45, 52, 45, 45, 49, 93, 32, 121, 10, 45, 45, 61, 61, 91, > 48, 44, 45, 49, 93, 32, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, > 61, 123, 36, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, 124, 124, 33, > 105, 109, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 102, 91, > 48, 44, 45, 49, 93, 32, 39, 105, 102, 40, 105, 44, 120, 44, 45, 49, > 41, 39, 32, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 49, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 118, 91, 48, > 44, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 105, 102, > 32, 123, 40, 105, 109, 124, 124, 105, 77, 41, 38, 38, 33, 64, 123, 33, > 44, 107, 125, 125, 10, 45, 47, 91, 45, 49, 93, 32, 53, 32, 45, 122, > 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 121, 91, 45, 49, 93, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 53, 10, 45, 106, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 56, 44, 48, 44, 48, 44, 45, 49, > 10, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 49, 56, 44, 49, 51, > 48, 32, 45, 45, 118, 115, 104, 105, 102, 116, 50, 48, 52, 56, 91, 45, > 50, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 49, 50, 49, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 45, 49, > 93, 44, 55, 56, 44, 49, 57, 48, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 119, 91, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, 10, > 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 123, 33, 36, 62, > 125, 32, 100, 115, 99, 111, 114, 101, 61, 48, 10, 91, 48, 93, 32, 45, > 45, 102, 91, 48, 93, 32, 39, 105, 102, 40, 105, 44, 105, 42, 49, 54, > 43, 52, 42, 121, 43, 120, 44, 45, 49, 41, 39, 32, 45, 100, 105, 115, > 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, 49, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 104, 125, 10, 120, 61, 123, 105, 91, 36, 62, 93, > 38, 51, 125, 32, 121, 61, 123, 40, 105, 91, 36, 62, 93, 62, 62, 50, > 41, 38, 51, 125, 32, 110, 61, 123, 105, 91, 36, 62, 93, 62, 62, 52, > 125, 10, 45, 105, 102, 32, 123, 36, 120, 62, 48, 38, 38, 64, 123, 48, > 44, 105, 40, 36, 120, 45, 49, 44, 36, 121, 41, 125, 61, 61, 36, 110, > 125, 10, 45, 61, 91, 48, 93, 32, 48, 44, 36, 120, 44, 36, 121, 32, > 45, 61, 91, 48, 93, 32, 123, 36, 110, 43, 49, 125, 44, 123, 36, 120, > 45, 49, 125, 44, 36, 121, 32, 45, 61, 91, 45, 50, 93, 32, 48, 44, > 36, 120, 44, 36, 121, 32, 105, 110, 115, 101, 114, 116, 95, 110, 101, 119, > 61, 49, 32, 100, 115, 99, 111, 114, 101, 61, 123, 36, 100, 115, 99, 111, > 114, 101, 43, 50, 94, 40, 36, 110, 43, 49, 41, 125, 10, 45, 101, 108, > 115, 101, 32, 45, 61, 91, 45, 49, 93, 32, 45, 49, 44, 48, 44, 36, > 62, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 115, > 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, 114, 101, 43, 36, 100, 115, > 99, 111, 114, 101, 125, 10, 45, 105, 102, 32, 123, 105, 77, 60, 48, 125, > 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, 115, > 101, 10, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, 93, 32, 45, > 49, 10, 45, 114, 118, 91, 48, 44, 45, 50, 93, 32, 45, 95, 120, 95, > 50, 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, 100, 32, 45, 114, > 118, 91, 48, 44, 45, 51, 93, 32, 45, 118, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 91, 45, 49, 93, 32, 45, 42, 51, 100, 91, 45, 49, 93, > 32, 49, 50, 49, 10, 45, 106, 91, 49, 93, 32, 91, 50, 93, 44, 49, > 56, 44, 49, 51, 48, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 49, 93, 32, 91, 45, 49, 93, 44, 55, 56, 44, 49, 57, 48, 32, 45, > 114, 109, 91, 45, 51, 44, 45, 49, 93, 10, 78, 61, 123, 104, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, 118, 61, 64, 123, > 45, 123, 49, 43, 36, 62, 125, 44, 36, 62, 125, 32, 45, 45, 43, 51, > 100, 91, 123, 50, 43, 40, 36, 118, 62, 62, 52, 41, 125, 93, 32, 123, > 36, 118, 38, 51, 125, 44, 123, 40, 36, 118, 62, 62, 50, 41, 38, 51, > 125, 32, 45, 100, 111, 110, 101, 10, 45, 43, 51, 100, 91, 45, 36, 78, > 45, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 43, 36, 100, 115, 99, 111, 114, 101, 44, 48, > 44, 48, 44, 51, 51, 44, 49, 44, 49, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, 99, 91, 45, 49, 93, 32, > 36, 99, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 54, 10, 45, 45, > 118, 115, 104, 105, 102, 116, 50, 48, 52, 56, 91, 45, 51, 93, 32, 45, > 42, 51, 100, 91, 45, 49, 93, 32, 49, 50, 49, 32, 45, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, 91, 45, 49, 93, 44, 55, > 56, 44, 49, 57, 48, 10, 45, 106, 91, 45, 49, 93, 32, 91, 45, 51, > 93, 44, 52, 51, 48, 44, 123, 56, 48, 45, 36, 62, 125, 44, 48, 44, > 48, 44, 123, 109, 105, 110, 40, 49, 44, 36, 60, 47, 54, 41, 125, 44, > 91, 45, 52, 93, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 45, 51, 100, 91, 45, 51, 93, 32, > 123, 49, 47, 54, 125, 44, 48, 44, 48, 32, 45, 119, 97, 105, 116, 32, > 50, 48, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 105, 115, 104, 105, 102, 116, 50, > 48, 52, 56, 91, 48, 93, 10, 45, 105, 102, 32, 36, 105, 110, 115, 101, > 114, 116, 95, 110, 101, 119, 32, 45, 95, 120, 95, 50, 48, 52, 56, 95, > 115, 101, 116, 114, 97, 110, 100, 111, 109, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, > 45, 114, 109, 32, 45, 119, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, > 117, 110, 99, 111, 109, 109, 97, 110, 100, 32, 95, 120, 95, 50, 48, 52, > 56, 95, 115, 101, 116, 114, 97, 110, 100, 111, 109, 44, 95, 120, 95, 50, > 48, 52, 56, 95, 111, 98, 106, 101, 99, 116, 51, 100, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 98, 108, 111, 98, 115, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, > 32, 116, 104, 101, 32, 98, 108, 111, 98, 115, 32, 101, 100, 105, 116, 111, > 114, 46, 10, 120, 95, 98, 108, 111, 98, 115, 32, 58, 10, 45, 101, 91, > 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 66, 108, 111, > 98, 115, 32, 101, 100, 105, 116, 111, 114, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 77, 111, 117, 115, 101, 32, 116, 111, 32, 105, 110, 115, 101, > 114, 116, 47, 109, 111, 118, 101, 47, 100, 101, 108, 101, 116, 101, 32, 98, > 108, 111, 98, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, > 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, > 118, 32, 45, 10, 45, 114, 109, 32, 40, 48, 59, 48, 94, 48, 59, 49, > 50, 56, 94, 48, 59, 50, 53, 53, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 51, 53, 48, 44, 51, 53, 48, 44, 49, 44, 51, 44, 51, 32, 45, > 102, 108, 111, 119, 101, 114, 91, 45, 49, 93, 32, 51, 48, 44, 56, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, 49, 32, 45, 119, > 97, 116, 101, 114, 91, 45, 49, 93, 32, 50, 48, 10, 45, 119, 32, 123, > 119, 125, 44, 123, 104, 125, 44, 48, 44, 48, 44, 34, 91, 71, 92, 52, > 55, 77, 73, 67, 93, 32, 66, 108, 111, 98, 115, 32, 101, 100, 105, 116, > 111, 114, 34, 10, 109, 111, 118, 105, 110, 103, 61, 45, 49, 10, 45, 100, > 111, 10, 120, 61, 123, 64, 123, 33, 44, 120, 125, 42, 64, 123, 48, 44, > 119, 125, 47, 64, 123, 33, 44, 119, 125, 125, 10, 121, 61, 123, 64, 123, > 33, 44, 121, 125, 42, 64, 123, 48, 44, 104, 125, 47, 64, 123, 33, 44, > 104, 125, 125, 10, 98, 61, 64, 123, 33, 44, 98, 125, 32, 110, 101, 97, > 114, 101, 115, 116, 61, 45, 49, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 125, 10, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, > 44, 49, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 49, > 44, 104, 125, 10, 114, 61, 123, 64, 123, 49, 44, 50, 125, 42, 40, 49, > 43, 64, 123, 49, 44, 51, 125, 42, 99, 111, 115, 40, 64, 123, 49, 44, > 52, 125, 43, 64, 123, 49, 44, 53, 125, 42, 64, 124, 42, 49, 48, 48, > 48, 41, 41, 125, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 64, 123, 49, 44, 48, 44, 49, 125, 44, 36, 114, 44, 36, 114, > 44, 48, 44, 49, 44, 64, 123, 49, 44, 54, 45, 55, 125, 10, 100, 61, > 123, 115, 113, 114, 116, 40, 40, 36, 120, 45, 64, 123, 49, 44, 48, 125, > 41, 94, 50, 43, 40, 36, 121, 45, 64, 123, 49, 44, 49, 125, 41, 94, > 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 100, 60, 36, 114, 125, 32, > 110, 101, 97, 114, 101, 115, 116, 61, 36, 62, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 115, 104, 105, 102, 116, 91, 49, 93, 32, 48, 44, 45, 49, > 44, 48, 44, 48, 44, 50, 32, 45, 100, 111, 110, 101, 10, 45, 98, 91, > 45, 49, 93, 32, 49, 53, 10, 45, 45, 110, 111, 114, 109, 91, 45, 49, > 93, 32, 45, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 32, 45, 108, > 101, 91, 45, 50, 93, 32, 52, 48, 32, 45, 42, 91, 45, 51, 44, 45, > 49, 93, 10, 45, 45, 42, 91, 48, 44, 45, 49, 93, 32, 45, 114, 109, > 91, 45, 50, 93, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 42, 91, 45, 49, 93, 32, 49, 46, 54, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, > 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 116, 101, 120, 116, 95, 111, 117, 116, > 108, 105, 110, 101, 91, 48, 93, 32, 34, 71, 92, 52, 55, 77, 73, 67, > 32, 66, 108, 111, 98, 115, 32, 69, 100, 105, 116, 111, 114, 34, 44, 54, > 53, 44, 52, 48, 44, 50, 51, 44, 51, 44, 49, 44, 50, 48, 48, 44, > 49, 50, 56, 44, 50, 53, 53, 10, 45, 116, 91, 45, 49, 93, 32, 34, > 42, 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, > 116, 111, 110, 32, 58, 32, 67, 114, 101, 97, 116, 101, 32, 97, 110, 100, > 32, 109, 111, 118, 101, 32, 98, 108, 111, 98, 115, 46, 92, 110, 92, 110, > 92, 10, 42, 32, 82, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, 32, > 98, 117, 116, 116, 111, 110, 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, > 98, 108, 111, 98, 46, 92, 110, 92, 110, 92, 10, 42, 32, 77, 105, 100, > 100, 108, 101, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, > 32, 58, 32, 82, 101, 109, 111, 118, 101, 32, 97, 108, 108, 32, 98, 108, > 111, 98, 115, 46, 92, 110, 92, 110, 92, 10, 42, 32, 75, 101, 121, 32, > 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 58, 32, 81, > 117, 105, 116, 46, 92, 110, 92, 110, 92, 10, 42, 32, 67, 111, 108, 111, > 114, 115, 32, 97, 110, 100, 32, 115, 105, 122, 101, 115, 32, 111, 102, 32, > 97, 112, 112, 101, 97, 114, 105, 110, 103, 32, 98, 108, 111, 98, 115, 32, > 97, 114, 101, 92, 110, 32, 32, 32, 99, 104, 111, 115, 101, 110, 32, 114, > 97, 110, 100, 111, 109, 108, 121, 34, 44, 92, 10, 54, 48, 44, 49, 50, > 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 119, 91, 45, 49, > 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, > 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, > 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, > 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, > 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, > 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, 36, 120, > 60, 48, 124, 124, 36, 121, 60, 48, 125, 32, 45, 99, 111, 110, 116, 105, > 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 36, 98, 38, 49, 125, 10, 45, 105, 102, 32, 123, 36, 110, 101, 97, 114, > 101, 115, 116, 62, 61, 48, 34, 32, 124, 124, 32, 34, 36, 109, 111, 118, > 105, 110, 103, 62, 61, 48, 125, 10, 45, 105, 102, 32, 123, 36, 109, 111, > 118, 105, 110, 103, 60, 48, 125, 32, 109, 111, 118, 105, 110, 103, 61, 36, > 110, 101, 97, 114, 101, 115, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 61, 91, 49, 93, 32, 36, 120, 44, 48, 44, 36, 109, 111, 118, 105, 110, > 103, 32, 45, 61, 91, 49, 93, 32, 36, 121, 44, 49, 44, 36, 109, 111, > 118, 105, 110, 103, 10, 45, 101, 108, 115, 101, 10, 40, 36, 120, 44, 36, > 121, 44, 123, 63, 40, 50, 48, 44, 53, 48, 41, 125, 44, 123, 63, 40, > 45, 48, 46, 51, 44, 48, 46, 51, 41, 125, 44, 123, 63, 40, 48, 44, > 112, 105, 47, 50, 41, 125, 44, 123, 63, 40, 48, 44, 48, 46, 48, 48, > 57, 41, 125, 44, 123, 63, 40, 54, 52, 44, 50, 53, 53, 41, 125, 44, > 123, 63, 40, 54, 52, 44, 50, 53, 53, 41, 125, 41, 32, 45, 97, 91, > 94, 48, 93, 32, 121, 10, 109, 111, 118, 105, 110, 103, 61, 123, 104, 45, > 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 98, 38, 50, 125, 10, 45, 105, 102, 32, 123, 36, 110, 101, 97, > 114, 101, 115, 116, 62, 61, 48, 125, 32, 45, 108, 91, 49, 93, 32, 45, > 115, 32, 121, 32, 45, 114, 109, 91, 36, 110, 101, 97, 114, 101, 115, 116, > 93, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 32, 110, 101, 97, > 114, 101, 115, 116, 61, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 98, 38, 52, 125, 10, 45, 107, 91, 48, > 93, 10, 45, 101, 108, 115, 101, 10, 109, 111, 118, 105, 110, 103, 61, 45, > 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 114, 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 120, 95, 98, 111, 117, 110, 99, 105, 110, 103, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, > 32, 116, 104, 101, 32, 98, 111, 117, 110, 99, 105, 110, 103, 32, 98, 97, > 108, 108, 115, 32, 100, 101, 109, 111, 46, 10, 120, 95, 98, 111, 117, 110, > 99, 105, 110, 103, 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, > 45, 45, 45, 45, 45, 45, 32, 66, 111, 117, 110, 99, 105, 110, 103, 32, > 98, 97, 108, 108, 115, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, > 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, > 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, > 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, > 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, 53, > 48, 48, 44, 51, 50, 48, 44, 49, 44, 51, 32, 45, 112, 108, 97, 115, > 109, 97, 32, 49, 44, 49, 44, 57, 32, 45, 110, 32, 48, 44, 50, 50, > 48, 10, 78, 61, 49, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, > 78, 10, 45, 98, 97, 108, 108, 91, 93, 32, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 51, 50, 44, 56, 48, 41, 41, 125, 44, 64, 123, 45, 82, > 71, 66, 125, 10, 116, 36, 62, 61, 123, 63, 40, 50, 48, 48, 41, 125, > 32, 120, 36, 62, 61, 64, 123, 48, 44, 63, 40, 49, 48, 44, 119, 45, > 49, 48, 41, 125, 32, 104, 36, 62, 61, 123, 63, 40, 49, 53, 48, 44, > 51, 48, 48, 41, 125, 32, 118, 120, 36, 62, 61, 123, 105, 102, 40, 63, > 60, 48, 46, 53, 44, 49, 44, 45, 49, 41, 42, 63, 40, 49, 44, 56, > 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 109, 118, 91, 48, 93, 32, > 64, 35, 32, 45, 119, 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, > 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 66, 111, 117, > 110, 99, 105, 110, 103, 32, 98, 97, 108, 108, 115, 34, 10, 40, 48, 59, > 48, 46, 55, 59, 49, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 119, 125, 44, 55, 48, 44, 49, 44, 49, 44, 51, 10, 45, > 100, 111, 10, 91, 36, 78, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 78, 10, 98, 119, 61, 64, 123, 36, 62, 44, 119, 125, 32, 98, 104, > 61, 64, 123, 36, 62, 44, 104, 125, 10, 121, 61, 123, 36, 123, 104, 36, > 62, 125, 42, 97, 98, 115, 40, 99, 111, 115, 40, 36, 123, 116, 36, 62, > 125, 42, 112, 105, 47, 54, 48, 41, 41, 45, 36, 98, 104, 47, 50, 125, > 10, 100, 116, 61, 49, 10, 45, 105, 102, 32, 123, 36, 121, 60, 48, 125, > 32, 100, 61, 123, 45, 36, 121, 125, 32, 121, 61, 48, 32, 98, 104, 61, > 123, 36, 98, 104, 45, 36, 100, 125, 32, 98, 119, 61, 123, 36, 98, 119, > 43, 36, 100, 125, 32, 100, 116, 61, 123, 109, 97, 120, 40, 48, 46, 50, > 44, 49, 45, 40, 36, 100, 47, 36, 98, 104, 41, 94, 50, 41, 125, 32, > 45, 101, 108, 115, 101, 32, 100, 116, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 36, 123, 120, 36, 62, 125, 43, 36, 98, > 119, 47, 50, 62, 119, 125, 10, 100, 61, 123, 36, 123, 120, 36, 62, 125, > 43, 36, 98, 119, 47, 50, 45, 119, 125, 32, 98, 119, 61, 123, 36, 98, > 119, 45, 36, 100, 125, 32, 98, 104, 61, 123, 36, 98, 104, 43, 48, 46, > 53, 42, 36, 100, 125, 10, 45, 105, 102, 32, 123, 36, 123, 120, 36, 62, > 125, 43, 36, 98, 119, 47, 52, 62, 119, 125, 32, 118, 120, 36, 62, 61, > 123, 45, 36, 123, 118, 120, 36, 62, 125, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 123, > 120, 36, 62, 125, 45, 36, 98, 119, 47, 50, 60, 48, 125, 10, 100, 61, > 123, 36, 98, 119, 47, 50, 45, 36, 123, 120, 36, 62, 125, 125, 32, 98, > 119, 61, 123, 36, 98, 119, 45, 36, 100, 125, 32, 98, 104, 61, 123, 36, > 98, 104, 43, 48, 46, 53, 42, 36, 100, 125, 10, 45, 105, 102, 32, 123, > 36, 123, 120, 36, 62, 125, 45, 36, 98, 119, 47, 52, 60, 48, 125, 32, > 118, 120, 36, 62, 61, 123, 45, 36, 123, 118, 120, 36, 62, 125, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 114, 91, 36, 62, 93, 32, 36, 98, 119, 44, 36, 98, 104, 44, 49, 44, > 52, 44, 51, 32, 45, 115, 91, 45, 49, 93, 32, 99, 44, 45, 51, 10, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 123, 109, 97, 120, > 40, 48, 44, 109, 105, 110, 40, 64, 123, 36, 78, 44, 119, 45, 36, 98, > 119, 125, 44, 36, 123, 120, 36, 62, 125, 45, 36, 98, 119, 47, 50, 41, > 41, 125, 44, 123, 64, 123, 36, 78, 44, 104, 125, 45, 64, 123, 45, 49, > 44, 104, 125, 45, 36, 121, 45, 55, 48, 125, 44, 48, 44, 48, 44, 49, > 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, > 44, 45, 49, 93, 10, 116, 36, 62, 61, 123, 36, 123, 116, 36, 62, 125, > 43, 36, 100, 116, 125, 10, 120, 36, 62, 61, 123, 36, 123, 120, 36, 62, > 125, 43, 36, 100, 116, 42, 36, 123, 118, 120, 36, 62, 125, 125, 10, 45, > 100, 111, 110, 101, 10, 45, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 123, 104, 45, 50, 42, 55, 48, 125, 44, 123, 104, 45, 49, 45, 55, 48, > 125, 32, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 32, > 45, 42, 91, 45, 49, 93, 32, 91, 123, 36, 78, 43, 49, 125, 93, 10, > 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 64, 123, > 45, 50, 44, 104, 45, 55, 49, 125, 44, 48, 44, 48, 44, 48, 46, 53, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, > 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, 101, 108, > 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, 10, > 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, > 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, > 64, 123, 33, 44, 81, 125, 125, 10, 45, 119, 32, 48, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 102, 105, 114, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 102, 105, > 114, 101, 32, 101, 102, 102, 101, 99, 116, 32, 100, 101, 109, 111, 46, 10, > 120, 95, 102, 105, 114, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, > 36, 123, 49, 61, 71, 92, 52, 55, 77, 73, 67, 125, 34, 10, 45, 101, > 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 70, 105, > 114, 101, 32, 101, 102, 102, 101, 99, 116, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, > 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, > 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, 91, 48, 93, 32, > 49, 48, 48, 44, 51, 50, 32, 45, 119, 91, 48, 93, 32, 52, 53, 48, > 44, 50, 48, 48, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 70, 105, 114, 101, 32, 101, 102, 102, 101, 99, 116, 34, 10, 45, > 105, 91, 49, 93, 32, 40, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, > 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 50, 53, 53, 44, > 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, 49, 50, > 56, 44, 50, 53, 53, 41, 32, 45, 114, 91, 49, 93, 32, 50, 53, 54, > 44, 49, 44, 49, 44, 51, 44, 51, 10, 45, 105, 91, 50, 93, 32, 40, > 48, 44, 48, 44, 48, 59, 48, 44, 48, 44, 48, 59, 49, 44, 49, 44, > 49, 59, 48, 44, 49, 44, 48, 41, 32, 45, 42, 91, 50, 93, 32, 48, > 46, 50, 49, 10, 45, 116, 101, 120, 116, 51, 100, 32, 34, 36, 49, 34, > 44, 51, 51, 44, 51, 44, 49, 10, 45, 109, 118, 91, 45, 49, 93, 32, > 51, 32, 45, 99, 51, 100, 91, 51, 93, 32, 45, 110, 51, 100, 91, 51, > 93, 32, 45, 42, 51, 100, 91, 51, 93, 32, 51, 50, 48, 32, 45, 99, > 111, 108, 51, 100, 91, 51, 93, 32, 50, 53, 53, 44, 50, 48, 53, 44, > 49, 51, 48, 32, 45, 100, 98, 51, 100, 32, 48, 32, 45, 102, 51, 100, > 32, 51, 48, 48, 10, 49, 48, 48, 44, 49, 48, 48, 32, 45, 114, 97, > 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, > 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, > 37, 44, 53, 44, 53, 44, 48, 44, 49, 44, 51, 48, 48, 32, 45, 98, > 91, 45, 49, 93, 32, 49, 48, 10, 45, 115, 104, 97, 114, 112, 101, 110, > 91, 45, 49, 93, 32, 49, 48, 48, 48, 32, 45, 115, 104, 114, 105, 110, > 107, 95, 120, 121, 91, 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 91, > 45, 49, 93, 32, 45, 108, 105, 103, 104, 116, 51, 100, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 97, 110, 103, 108, 101, 61, > 48, 10, 45, 100, 111, 10, 45, 99, 111, 114, 114, 101, 108, 97, 116, 101, > 91, 48, 93, 32, 91, 50, 93, 10, 64, 123, 48, 44, 119, 125, 44, 49, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 49, 50, 56, 44, 50, > 53, 54, 32, 45, 106, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 123, 64, 123, 48, 44, 104, 125, 45, 49, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 45, 114, 91, 48, 93, 32, 52, 48, 48, 44, 50, 48, > 48, 44, 49, 44, 49, 44, 51, 32, 45, 109, 97, 112, 91, 45, 49, 93, > 32, 91, 49, 93, 10, 45, 45, 114, 51, 100, 91, 51, 93, 32, 48, 44, > 49, 44, 48, 44, 36, 97, 110, 103, 108, 101, 32, 45, 111, 98, 106, 101, > 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 53, 48, > 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 53, 44, 48, 44, 48, 10, > 45, 42, 51, 100, 91, 45, 49, 93, 32, 48, 46, 50, 53, 44, 48, 46, > 49, 54, 44, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, > 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, > 44, 49, 44, 51, 44, 48, 44, 48, 10, 45, 114, 109, 91, 45, 49, 93, > 10, 97, 110, 103, 108, 101, 61, 123, 36, 97, 110, 103, 108, 101, 43, 51, > 125, 10, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, > 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 119, 97, 105, 116, 32, 52, 48, 10, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 114, 109, 91, 48, 45, 51, 93, 32, 45, 119, 32, 48, 10, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 102, 105, 114, > 101, 119, 111, 114, 107, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 102, 105, 114, 101, 119, > 111, 114, 107, 115, 32, 100, 101, 109, 111, 46, 10, 120, 95, 102, 105, 114, > 101, 119, 111, 114, 107, 115, 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, > 110, 10, 45, 45, 45, 45, 45, 45, 32, 70, 105, 114, 101, 119, 111, 114, > 107, 115, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, > 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, > 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, > 118, 32, 45, 32, 45, 108, 91, 93, 10, 116, 105, 109, 101, 61, 48, 10, > 40, 48, 59, 54, 52, 94, 48, 59, 51, 50, 94, 49, 50, 56, 59, 48, > 41, 32, 45, 114, 32, 50, 53, 54, 44, 49, 50, 56, 44, 49, 44, 51, > 44, 51, 10, 91, 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 32, 123, > 49, 46, 53, 42, 119, 125, 44, 123, 49, 46, 53, 42, 104, 125, 44, 48, > 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 70, 105, 114, 101, > 119, 111, 114, 107, 115, 34, 10, 45, 100, 111, 10, 116, 105, 109, 101, 61, > 123, 36, 116, 105, 109, 101, 45, 49, 125, 10, 45, 105, 102, 32, 123, 64, > 35, 61, 61, 50, 92, 32, 124, 124, 92, 32, 36, 116, 105, 109, 101, 60, > 48, 125, 10, 45, 105, 91, 48, 93, 32, 40, 123, 63, 40, 119, 41, 125, > 44, 92, 10, 123, 104, 125, 44, 92, 10, 123, 63, 40, 45, 51, 44, 51, > 41, 125, 44, 92, 10, 123, 63, 40, 50, 41, 45, 53, 125, 44, 92, 10, > 123, 51, 48, 43, 63, 40, 50, 48, 41, 125, 44, 92, 10, 49, 46, 53, > 44, 92, 10, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 41, 10, > 116, 105, 109, 101, 61, 123, 63, 40, 52, 48, 41, 125, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 42, 91, 45, 49, 93, 32, 48, 46, 57, 57, 10, > 45, 106, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 46, 50, 10, 105, 61, 48, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 50, 125, 10, 116, 111, 95, 98, 101, > 95, 114, 101, 109, 111, 118, 101, 100, 61, 48, 10, 114, 97, 100, 105, 117, > 115, 61, 123, 105, 102, 40, 64, 123, 36, 105, 44, 52, 125, 62, 48, 44, > 64, 123, 36, 105, 44, 53, 125, 47, 51, 44, 64, 123, 36, 105, 44, 53, > 125, 42, 40, 49, 43, 50, 42, 40, 64, 123, 36, 105, 44, 52, 125, 43, > 50, 41, 47, 49, 50, 48, 41, 41, 125, 10, 45, 101, 108, 108, 105, 112, > 115, 101, 91, 45, 49, 93, 32, 64, 123, 36, 105, 44, 48, 125, 44, 64, > 123, 36, 105, 44, 49, 125, 44, 64, 123, 36, 105, 44, 53, 125, 44, 123, > 109, 97, 120, 40, 48, 46, 53, 44, 36, 114, 97, 100, 105, 117, 115, 41, > 125, 44, 123, 97, 116, 97, 110, 50, 40, 64, 123, 36, 105, 44, 51, 125, > 44, 64, 123, 36, 105, 44, 50, 125, 41, 42, 49, 56, 48, 47, 112, 105, > 125, 44, 48, 46, 54, 44, 64, 123, 36, 105, 44, 54, 45, 56, 125, 10, > 40, 64, 123, 36, 105, 44, 50, 125, 44, 64, 123, 36, 105, 44, 51, 125, > 44, 48, 44, 48, 46, 48, 57, 44, 45, 49, 44, 48, 44, 48, 44, 48, > 44, 48, 41, 32, 45, 43, 91, 36, 105, 44, 45, 49, 93, 10, 45, 105, > 102, 32, 123, 64, 123, 36, 105, 44, 48, 125, 60, 48, 92, 32, 124, 124, > 92, 32, 64, 123, 36, 105, 44, 48, 125, 62, 61, 119, 92, 32, 124, 124, > 92, 32, 64, 123, 36, 105, 44, 49, 125, 62, 61, 104, 92, 32, 124, 124, > 92, 32, 36, 114, 97, 100, 105, 117, 115, 60, 48, 125, 32, 116, 111, 95, > 98, 101, 95, 114, 101, 109, 111, 118, 101, 100, 61, 49, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 36, 105, 44, 52, 125, > 60, 48, 92, 32, 38, 38, 92, 32, 64, 123, 36, 105, 44, 52, 125, 62, > 61, 45, 49, 125, 10, 99, 111, 108, 111, 114, 61, 123, 109, 105, 110, 40, > 50, 53, 53, 44, 56, 48, 43, 63, 40, 50, 48, 48, 41, 41, 125, 44, > 123, 109, 105, 110, 40, 50, 53, 53, 44, 56, 48, 43, 63, 40, 50, 48, > 48, 41, 41, 125, 44, 123, 109, 105, 110, 40, 50, 53, 53, 44, 56, 48, > 43, 63, 40, 50, 48, 48, 41, 41, 125, 10, 114, 97, 100, 105, 117, 115, > 61, 123, 63, 40, 49, 48, 41, 125, 10, 78, 61, 123, 53, 43, 63, 40, > 49, 48, 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 10, > 97, 110, 103, 108, 101, 61, 123, 36, 62, 42, 50, 42, 112, 105, 47, 36, > 78, 125, 10, 45, 105, 91, 45, 51, 93, 32, 40, 64, 123, 36, 105, 44, > 48, 44, 49, 125, 44, 123, 50, 42, 99, 111, 115, 40, 36, 97, 110, 103, > 108, 101, 41, 43, 64, 123, 36, 105, 44, 50, 125, 47, 49, 46, 53, 125, > 44, 123, 50, 42, 115, 105, 110, 40, 36, 97, 110, 103, 108, 101, 41, 43, > 64, 123, 36, 105, 44, 51, 125, 47, 49, 46, 53, 125, 44, 45, 50, 44, > 36, 114, 97, 100, 105, 117, 115, 44, 36, 99, 111, 108, 111, 114, 41, 10, > 45, 100, 111, 110, 101, 10, 116, 111, 95, 98, 101, 95, 114, 101, 109, 111, > 118, 101, 100, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 116, 111, 95, 98, 101, 95, 114, 101, 109, 111, 118, 101, 100, 32, > 45, 114, 109, 91, 36, 105, 93, 32, 45, 101, 108, 115, 101, 32, 105, 61, > 123, 36, 105, 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, > 111, 110, 101, 10, 45, 119, 91, 45, 49, 93, 32, 45, 119, 97, 105, 116, > 32, 50, 48, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, 123, 51, 42, 104, 125, > 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, > 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, 44, 123, 49, 46, 53, > 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, > 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, > 125, 125, 10, 45, 101, 110, 100, 108, 32, 45, 107, 91, 45, 49, 93, 32, > 45, 119, 91, 93, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 102, 105, 115, 104, 101, 121, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, > 32, 102, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, 116, > 32, 100, 101, 109, 111, 46, 10, 120, 95, 102, 105, 115, 104, 101, 121, 101, > 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 32, 70, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, > 99, 116, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 112, 111, 105, 110, 116, 101, > 114, 32, 109, 111, 118, 101, 115, 32, 102, 105, 115, 104, 45, 101, 121, 101, > 32, 99, 101, 110, 116, 101, 114, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, 115, 101, > 116, 32, 102, 105, 115, 104, 45, 101, 121, 101, 32, 115, 105, 122, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, > 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, > 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, > 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, > 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, > 32, 45, 10, 45, 105, 102, 32, 123, 64, 35, 62, 48, 125, 32, 45, 97, > 32, 120, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 114, 50, 100, > 121, 32, 50, 50, 48, 32, 45, 101, 108, 115, 101, 10, 49, 50, 48, 44, > 57, 48, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, > 49, 93, 32, 48, 46, 51, 44, 51, 32, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 45, 116, 32, 34, 32, 32, 71, 92, 52, 55, 77, 73, 67, 92, > 110, 70, 73, 83, 72, 45, 69, 89, 69, 92, 110, 32, 69, 70, 70, 69, > 67, 84, 34, 44, 49, 53, 44, 49, 51, 44, 50, 51, 44, 49, 44, 50, > 53, 53, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 98, 32, 53, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, 48, 48, 48, 10, 45, > 102, 32, 105, 43, 49, 53, 48, 45, 52, 42, 97, 98, 115, 40, 121, 45, > 104, 47, 50, 41, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 102, 114, 97, 109, 101, 95, 102, 117, 122, 122, 121, 91, 45, > 49, 93, 32, 49, 53, 44, 49, 48, 44, 49, 53, 44, 49, 46, 53, 44, > 48, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 116, 111, 114, 117, 115, 51, 100, 32, 50, 48, > 44, 54, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 123, 63, > 40, 51, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, 48, 44, > 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, 48, 44, 50, 53, 53, 41, > 125, 32, 45, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, > 48, 44, 57, 48, 10, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 123, 63, 40, 51, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, > 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 51, 48, 44, 50, 53, > 53, 41, 125, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 53, 32, > 45, 43, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, 100, 98, 51, > 100, 32, 48, 32, 45, 99, 51, 100, 91, 45, 49, 93, 10, 82, 61, 51, > 48, 10, 45, 119, 91, 45, 50, 93, 32, 123, 49, 46, 53, 42, 64, 123, > 45, 50, 44, 119, 125, 125, 44, 123, 49, 46, 53, 42, 64, 123, 45, 50, > 44, 104, 125, 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 70, 105, 115, 104, 45, 101, 121, 101, 32, 101, 102, 102, 101, 99, > 116, 34, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, 32, 52, 48, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 61, 61, 49, 125, 32, > 82, 61, 123, 109, 105, 110, 40, 56, 48, 44, 36, 82, 43, 56, 41, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 44, 98, 125, 61, 61, 50, 125, 32, 82, 61, 123, 109, 97, 120, 40, 51, > 44, 36, 82, 45, 56, 41, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 123, 53, 48, 43, 51, 48, 42, 99, 111, 115, 40, 64, 124, > 42, 50, 46, 53, 41, 125, 37, 44, 123, 53, 48, 43, 51, 48, 42, 115, > 105, 110, 40, 64, 124, 42, 49, 46, 54, 41, 125, 37, 44, 123, 53, 48, > 43, 51, 51, 48, 42, 115, 105, 110, 40, 64, 124, 42, 50, 46, 54, 41, > 125, 44, 48, 46, 55, 44, 51, 44, 48, 44, 48, 32, 45, 114, 51, 100, > 91, 45, 50, 93, 32, 49, 44, 48, 46, 50, 44, 48, 46, 54, 44, 51, > 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 61, 48, 125, > 10, 45, 102, 105, 115, 104, 101, 121, 101, 91, 45, 49, 93, 32, 123, 64, > 123, 33, 44, 120, 125, 42, 49, 48, 48, 47, 64, 123, 33, 44, 119, 125, > 125, 44, 123, 64, 123, 33, 44, 121, 125, 42, 49, 48, 48, 47, 64, 123, > 33, 44, 104, 125, 125, 44, 36, 82, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, > 125, 125, 32, 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, 123, 51, > 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, > 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, > 125, 32, 45, 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, 44, 123, > 49, 46, 53, 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 33, 61, 61, 48, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 81, 125, 125, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 104, 105, 108, 101, 32, 49, 10, 35, 64, 103, 109, 105, 99, 32, > 120, 95, 102, 111, 117, 114, 105, 101, 114, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 102, 111, > 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, 114, 105, 110, 103, 32, > 100, 101, 109, 111, 46, 10, 120, 95, 102, 111, 117, 114, 105, 101, 114, 32, > 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, > 45, 32, 70, 111, 117, 114, 105, 101, 114, 45, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 115, 32, 111, 110, 32, 116, 104, 101, 32, > 114, 105, 103, 104, 116, 32, 105, 109, 97, 103, 101, 32, 116, 111, 32, 115, > 101, 116, 32, 109, 105, 110, 47, 109, 97, 120, 32, 102, 114, 101, 113, 117, > 101, 110, 99, 105, 101, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, > 105, 110, 99, 114, 101, 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, > 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 100, 101, > 99, 114, 101, 97, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 67, 84, 82, 76, 43, 82, 39, 32, 116, 111, 32, 114, 101, 115, 101, > 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, > 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 50, 53, 54, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, > 101, 61, 49, 10, 102, 114, 101, 113, 109, 105, 110, 61, 48, 10, 102, 114, > 101, 113, 109, 97, 120, 61, 49, 48, 48, 10, 45, 105, 102, 32, 123, 119, > 62, 51, 42, 64, 123, 33, 44, 117, 125, 47, 53, 125, 32, 45, 114, 50, > 100, 120, 91, 45, 49, 93, 32, 123, 51, 42, 64, 123, 33, 44, 117, 125, > 47, 49, 48, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 104, 62, 51, 42, 64, 123, 33, 44, 118, 125, 47, 53, 125, 32, 45, > 114, 50, 100, 121, 91, 45, 49, 93, 32, 123, 51, 42, 64, 123, 33, 44, > 118, 125, 47, 53, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 102, > 102, 116, 91, 45, 49, 93, 32, 45, 110, 109, 91, 45, 50, 93, 32, 114, > 101, 97, 108, 32, 45, 110, 109, 91, 45, 49, 93, 32, 105, 109, 97, 103, > 10, 45, 45, 115, 113, 114, 91, 114, 101, 97, 108, 44, 105, 109, 97, 103, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 113, 114, > 116, 91, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, > 108, 111, 103, 91, 45, 49, 93, 10, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, > 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 48, 44, 50, 32, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, > 64, 123, 45, 50, 44, 115, 125, 10, 45, 110, 109, 91, 45, 49, 93, 32, > 108, 111, 103, 109, 97, 103, 10, 45, 119, 91, 48, 44, 45, 49, 93, 32, > 45, 49, 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, > 67, 93, 32, 70, 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 34, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, > 40, 36, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 41, 125, 32, 45, > 45, 108, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 32, 49, 50, 56, > 32, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 10, 45, 97, > 108, 101, 114, 116, 32, 34, 91, 71, 92, 52, 55, 77, 73, 67, 32, 70, > 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, 114, 105, 110, 103, > 93, 34, 44, 92, 10, 34, 84, 104, 101, 32, 71, 92, 52, 55, 77, 73, > 67, 32, 70, 111, 117, 114, 105, 101, 114, 32, 102, 105, 108, 116, 101, 114, > 105, 110, 103, 32, 100, 101, 109, 111, 32, 105, 108, 108, 117, 115, 116, 114, > 97, 116, 101, 115, 32, 116, 104, 101, 32, 101, 102, 102, 101, 99, 116, 92, > 110, 34, 92, 10, 34, 111, 102, 32, 98, 97, 110, 100, 112, 97, 115, 115, > 32, 102, 114, 101, 113, 117, 101, 110, 99, 121, 32, 102, 105, 108, 116, 101, > 114, 105, 110, 103, 32, 111, 110, 32, 97, 110, 32, 105, 109, 97, 103, 101, > 46, 32, 85, 115, 101, 32, 121, 111, 117, 114, 32, 109, 111, 117, 115, 101, > 92, 110, 34, 92, 10, 34, 98, 117, 116, 116, 111, 110, 115, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 32, 108, 111, 119, 32, 97, 110, 100, 32, > 104, 105, 103, 104, 32, 98, 111, 117, 110, 100, 115, 32, 102, 111, 114, 32, > 116, 104, 101, 32, 102, 114, 101, 113, 117, 101, 110, 99, 105, 101, 115, 92, > 110, 34, 92, 10, 34, 100, 105, 115, 112, 108, 97, 121, 101, 100, 32, 111, > 110, 32, 116, 104, 101, 32, 70, 111, 117, 114, 105, 101, 114, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 116, 104, 101, 32, 105, 109, 97, 103, 101, 92, 110, 34, 92, 10, 34, 40, > 114, 105, 103, 104, 116, 32, 105, 109, 97, 103, 101, 41, 46, 34, 44, 92, > 10, 34, 83, 116, 97, 114, 116, 32, 100, 101, 109, 111, 34, 10, 45, 114, > 109, 32, 45, 101, 110, 100, 108, 32, 102, 105, 114, 115, 116, 95, 116, 105, > 109, 101, 61, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 10, > 45, 105, 102, 32, 36, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, 101, > 10, 45, 105, 91, 109, 97, 115, 107, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 10, 114, 61, 123, 115, 113, 114, 116, 40, 119, 94, 50, 43, > 104, 94, 50, 41, 42, 36, 102, 114, 101, 113, 109, 97, 120, 47, 50, 48, > 48, 125, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 109, 97, 115, 107, > 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 36, 114, 44, 36, 114, 44, > 48, 44, 49, 44, 49, 10, 114, 61, 123, 109, 97, 120, 40, 48, 44, 115, > 113, 114, 116, 40, 119, 94, 50, 43, 104, 94, 50, 41, 42, 36, 102, 114, > 101, 113, 109, 105, 110, 47, 50, 48, 48, 45, 49, 41, 125, 32, 45, 105, > 102, 32, 36, 114, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 109, 97, > 115, 107, 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 36, 114, 44, 36, > 114, 44, 48, 44, 49, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 42, 91, 108, 111, 103, 109, 97, 103, 93, 32, 91, 109, 97, 115, 107, > 93, 32, 45, 43, 91, 45, 49, 93, 32, 91, 109, 97, 115, 107, 93, 32, > 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 45, 115, 104, 105, 102, 116, 91, 109, 97, 115, > 107, 93, 32, 45, 53, 48, 37, 44, 45, 53, 48, 37, 44, 48, 44, 48, > 44, 50, 10, 45, 45, 42, 91, 114, 101, 97, 108, 44, 105, 109, 97, 103, > 93, 32, 91, 109, 97, 115, 107, 93, 10, 45, 114, 109, 91, 45, 52, 93, > 10, 45, 105, 102, 102, 116, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, > 102, 32, 64, 33, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 123, > 64, 123, 33, 44, 119, 125, 47, 50, 125, 44, 64, 123, 33, 44, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 91, 45, 49, 93, 32, 34, > 70, 114, 101, 113, 46, 32, 77, 105, 110, 47, 77, 97, 120, 32, 61, 32, > 34, 123, 105, 110, 116, 40, 36, 102, 114, 101, 113, 109, 105, 110, 41, 125, > 34, 37, 32, 47, 32, 34, 123, 105, 110, 116, 40, 36, 102, 114, 101, 113, > 109, 97, 120, 41, 125, 34, 37, 34, 44, 53, 44, 53, 44, 49, 51, 44, > 49, 44, 50, 53, 53, 10, 45, 119, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 110, 101, 101, 100, 95, > 117, 112, 100, 97, 116, 101, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 97, 105, 116, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, > 125, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 120, 125, 62, 61, 64, > 123, 33, 44, 119, 125, 47, 50, 125, 10, 114, 61, 123, 50, 48, 48, 42, > 115, 113, 114, 116, 40, 40, 64, 123, 33, 44, 120, 125, 45, 51, 42, 64, > 123, 33, 44, 119, 125, 47, 52, 41, 94, 50, 43, 40, 64, 123, 33, 44, > 121, 125, 45, 64, 123, 33, 44, 104, 125, 47, 50, 41, 94, 50, 41, 47, > 92, 10, 115, 113, 114, 116, 40, 40, 64, 123, 33, 44, 119, 125, 47, 50, > 41, 94, 50, 43, 64, 123, 33, 44, 104, 125, 94, 50, 41, 125, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 49, 125, 32, 102, 114, > 101, 113, 109, 97, 120, 61, 36, 114, 10, 45, 101, 108, 115, 101, 32, 102, > 114, 101, 113, 109, 105, 110, 61, 123, 109, 97, 120, 40, 48, 44, 36, 114, > 45, 51, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 102, 114, 101, 113, 109, 105, 110, 62, 61, 36, 102, 114, 101, 113, > 109, 97, 120, 125, 32, 102, 114, 101, 113, 109, 105, 110, 61, 36, 102, 114, > 101, 113, 109, 97, 120, 32, 45, 101, 110, 100, 105, 102, 10, 110, 101, 101, > 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 114, 125, 32, 110, 101, 101, > 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, > 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, > 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, > 33, 44, 119, 125, 42, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, > 125, 42, 49, 46, 53, 125, 32, 110, 101, 101, 100, 95, 117, 112, 100, 97, > 116, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, > 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 67, 125, > 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, 47, 49, > 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 47, 49, 46, 53, 125, > 32, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, > 38, 38, 32, 34, 64, 123, 33, 44, 82, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 50, 42, 64, 123, 48, 44, 119, 125, 125, 44, 64, 123, 48, 44, > 104, 125, 32, 110, 101, 101, 100, 95, 117, 112, 100, 97, 116, 101, 61, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, > 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 119, 32, 48, 32, 45, 114, 109, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 32, 100, 101, 109, 111, 46, 10, 120, 95, 104, 105, > 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 72, 105, 115, 116, 111, 103, > 114, 97, 109, 32, 100, 101, 109, 111, 32, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 116, 111, 32, > 115, 101, 116, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 98, 117, 116, > 116, 111, 110, 32, 111, 114, 32, 107, 101, 121, 32, 39, 83, 80, 65, 67, > 69, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, > 101, 115, 116, 105, 109, 97, 103, 101, 50, 100, 32, 51, 48, 48, 44, 51, > 48, 48, 32, 45, 101, 108, 115, 101, 32, 45, 107, 91, 48, 93, 32, 45, > 116, 111, 95, 114, 103, 98, 32, 45, 114, 50, 100, 121, 32, 51, 48, 48, > 44, 50, 32, 45, 105, 102, 32, 123, 119, 62, 56, 48, 48, 125, 32, 45, > 114, 32, 56, 48, 48, 44, 49, 48, 48, 37, 44, 49, 44, 51, 44, 50, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 102, 114, 97, 109, 101, 91, > 45, 49, 93, 32, 49, 44, 49, 44, 48, 10, 51, 48, 48, 44, 123, 104, > 125, 44, 49, 44, 51, 44, 50, 50, 48, 10, 45, 116, 91, 45, 49, 93, > 32, 34, 71, 97, 109, 109, 97, 32, 58, 34, 44, 53, 44, 48, 44, 49, > 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, 49, 93, 32, 34, 67, 111, > 110, 116, 114, 97, 115, 116, 32, 58, 34, 44, 53, 44, 53, 48, 44, 49, > 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, 49, 93, 32, 34, 66, 114, > 105, 103, 104, 116, 110, 101, 115, 115, 32, 58, 34, 44, 53, 44, 49, 48, > 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, 49, 93, 32, > 34, 83, 109, 111, 111, 116, 104, 110, 101, 115, 115, 32, 58, 34, 44, 53, > 44, 49, 53, 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, 116, 91, 45, > 49, 93, 32, 34, 83, 104, 97, 114, 112, 110, 101, 115, 115, 32, 58, 34, > 44, 53, 44, 50, 48, 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, 116, > 91, 45, 49, 93, 32, 34, 67, 108, 117, 115, 116, 101, 114, 115, 32, 58, > 34, 44, 53, 44, 50, 53, 48, 44, 49, 54, 44, 49, 44, 48, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 123, 119, 125, 44, 50, > 48, 48, 44, 49, 44, 51, 44, 50, 53, 53, 10, 45, 103, 114, 105, 100, > 91, 45, 49, 93, 32, 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, > 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, > 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, 49, 44, > 48, 44, 49, 51, 44, 49, 44, 48, 10, 45, 102, 114, 97, 109, 101, 91, > 45, 50, 44, 45, 49, 93, 32, 53, 44, 53, 44, 50, 50, 48, 10, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 99, 108, 117, 115, 116, > 101, 114, 115, 61, 54, 52, 32, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 32, > 99, 111, 110, 116, 114, 97, 115, 116, 61, 49, 32, 98, 114, 105, 103, 104, > 116, 110, 101, 115, 115, 61, 48, 32, 103, 97, 109, 109, 97, 61, 49, 10, > 45, 100, 111, 10, 91, 48, 93, 10, 105, 97, 61, 123, 105, 97, 125, 10, > 45, 105, 102, 32, 36, 103, 97, 109, 109, 97, 32, 45, 47, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 94, 91, 45, 49, 93, 32, 123, 49, 47, > 36, 103, 97, 109, 109, 97, 125, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 91, 45, 49, 93, > 32, 36, 105, 97, 32, 45, 42, 91, 45, 49, 93, 32, 36, 99, 111, 110, > 116, 114, 97, 115, 116, 32, 45, 43, 91, 45, 49, 93, 32, 36, 98, 114, > 105, 103, 104, 116, 110, 101, 115, 115, 32, 45, 43, 91, 45, 49, 93, 32, > 36, 105, 97, 10, 45, 98, 91, 45, 49, 93, 32, 36, 115, 109, 111, 111, > 116, 104, 110, 101, 115, 115, 10, 45, 115, 104, 97, 114, 112, 101, 110, 91, > 45, 49, 93, 32, 36, 115, 104, 97, 114, 112, 110, 101, 115, 115, 10, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 54, 44, 54, 10, 115, 120, 61, > 123, 64, 123, 48, 44, 119, 125, 43, 49, 50, 125, 10, 45, 95, 120, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 36, > 103, 97, 109, 109, 97, 42, 49, 48, 48, 47, 52, 125, 32, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 50, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 36, 99, 111, 110, 116, > 114, 97, 115, 116, 42, 49, 48, 48, 47, 52, 125, 32, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 55, 53, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 40, 36, 98, 114, 105, 103, > 104, 116, 110, 101, 115, 115, 43, 49, 50, 56, 41, 42, 49, 48, 48, 47, > 50, 53, 54, 125, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 36, 115, 120, 44, 49, 50, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 95, 120, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, > 49, 93, 32, 123, 36, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 42, > 49, 48, 48, 47, 49, 48, 125, 32, 45, 106, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 36, 115, 120, 44, 49, 55, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, 111, 103, 114, 97, > 109, 91, 45, 49, 93, 32, 123, 36, 115, 104, 97, 114, 112, 110, 101, 115, > 115, 42, 49, 48, 48, 47, 50, 48, 48, 48, 125, 32, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 50, 50, 53, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 95, 120, 95, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 36, 99, 108, 117, 115, > 116, 101, 114, 115, 42, 49, 48, 48, 47, 50, 53, 54, 125, 32, 45, 106, > 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 115, 120, 44, 50, 55, > 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 115, 91, 45, 50, > 93, 32, 99, 32, 45, 104, 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, > 51, 45, 45, 49, 93, 32, 36, 99, 108, 117, 115, 116, 101, 114, 115, 44, > 48, 44, 50, 53, 53, 32, 45, 47, 91, 45, 51, 45, 45, 49, 93, 32, > 123, 51, 42, 64, 123, 48, 44, 119, 104, 125, 47, 36, 99, 108, 117, 115, > 116, 101, 114, 115, 125, 32, 45, 114, 109, 91, 45, 53, 93, 10, 45, 45, > 122, 91, 45, 52, 93, 32, 53, 44, 51, 49, 55, 44, 123, 64, 123, 45, > 52, 44, 119, 125, 45, 53, 125, 44, 123, 64, 123, 45, 52, 44, 104, 125, > 45, 54, 125, 10, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, > 45, 52, 93, 44, 51, 44, 48, 44, 49, 44, 48, 44, 48, 46, 50, 44, > 50, 53, 53, 44, 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, > 49, 93, 32, 91, 45, 51, 93, 44, 51, 44, 48, 44, 49, 44, 48, 44, > 48, 46, 50, 44, 48, 44, 50, 53, 53, 44, 48, 10, 45, 103, 114, 97, > 112, 104, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 51, 44, 48, 44, > 49, 44, 48, 44, 48, 46, 50, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 45, 114, 109, 91, 45, 52, 45, 45, 50, 93, 10, 45, 106, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 53, 44, 51, 49, 55, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 32, 123, 119, 125, 44, > 123, 104, 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, > 32, 72, 105, 115, 116, 111, 103, 114, 97, 109, 32, 100, 101, 109, 111, 34, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 105, 116, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 49, 92, 32, 38, 38, > 92, 32, 64, 123, 33, 44, 120, 125, 62, 61, 64, 123, 48, 44, 119, 125, > 45, 49, 48, 125, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, > 62, 61, 50, 53, 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, > 60, 61, 52, 50, 125, 10, 103, 97, 109, 109, 97, 61, 123, 109, 97, 120, > 40, 48, 44, 109, 105, 110, 40, 52, 44, 40, 64, 123, 33, 44, 120, 125, > 45, 36, 115, 120, 41, 42, 52, 47, 50, 56, 48, 41, 41, 125, 10, 45, > 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, 55, 53, > 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, 61, 57, 50, > 125, 10, 99, 111, 110, 116, 114, 97, 115, 116, 61, 123, 109, 97, 120, 40, > 48, 44, 109, 105, 110, 40, 52, 44, 40, 64, 123, 33, 44, 120, 125, 45, > 36, 115, 120, 41, 42, 52, 47, 50, 56, 48, 41, 41, 125, 10, 45, 101, > 108, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, 49, 50, 53, > 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, 61, 49, 52, > 50, 125, 10, 98, 114, 105, 103, 104, 116, 110, 101, 115, 115, 61, 123, 109, > 97, 120, 40, 45, 49, 50, 56, 44, 109, 105, 110, 40, 49, 50, 56, 44, > 40, 64, 123, 33, 44, 120, 125, 45, 36, 115, 120, 41, 42, 50, 53, 54, > 47, 50, 56, 48, 45, 49, 50, 56, 41, 41, 125, 10, 45, 101, 108, 105, > 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, 49, 55, 53, 92, 32, > 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, 61, 49, 57, 50, 125, > 10, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 123, 109, 97, 120, > 40, 48, 44, 109, 105, 110, 40, 49, 48, 44, 40, 64, 123, 33, 44, 120, > 125, 45, 36, 115, 120, 41, 42, 49, 48, 47, 50, 56, 48, 41, 41, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 121, 125, 62, 61, > 50, 50, 53, 92, 32, 38, 38, 92, 32, 64, 123, 33, 44, 121, 125, 60, > 61, 50, 52, 50, 125, 10, 115, 104, 97, 114, 112, 110, 101, 115, 115, 61, > 123, 109, 97, 120, 40, 48, 44, 109, 105, 110, 40, 50, 48, 48, 48, 44, > 40, 64, 123, 33, 44, 120, 125, 45, 36, 115, 120, 41, 42, 50, 48, 48, > 48, 47, 50, 56, 48, 41, 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, > 64, 123, 33, 44, 121, 125, 62, 61, 50, 55, 53, 92, 32, 38, 38, 92, > 32, 64, 123, 33, 44, 121, 125, 60, 61, 50, 57, 50, 125, 10, 99, 108, > 117, 115, 116, 101, 114, 115, 61, 123, 109, 97, 120, 40, 50, 44, 109, 105, > 110, 40, 50, 53, 54, 44, 40, 64, 123, 33, 44, 120, 125, 45, 36, 115, > 120, 41, 42, 50, 53, 54, 47, 50, 56, 48, 41, 41, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 123, 33, 44, 98, 125, 38, 50, 92, 32, 124, 124, 92, 32, 64, > 123, 33, 44, 83, 80, 65, 67, 69, 125, 125, 32, 99, 108, 117, 115, 116, > 101, 114, 115, 61, 54, 52, 32, 115, 104, 97, 114, 112, 110, 101, 115, 115, > 61, 48, 32, 115, 109, 111, 111, 116, 104, 110, 101, 115, 115, 61, 48, 32, > 99, 111, 110, 116, 114, 97, 115, 116, 61, 49, 32, 98, 114, 105, 103, 104, > 116, 110, 101, 115, 115, 61, 48, 32, 103, 97, 109, 109, 97, 61, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, > 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, > 119, 32, 48, 32, 45, 114, 109, 32, 45, 118, 32, 43, 10, 95, 120, 95, > 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, 118, 97, 108, 61, > 123, 109, 97, 120, 40, 48, 44, 109, 105, 110, 40, 49, 48, 48, 44, 36, > 49, 41, 41, 125, 10, 50, 56, 48, 44, 50, 44, 49, 44, 51, 44, 50, > 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 36, 118, 97, 108, 37, 44, 48, 44, 49, 44, 48, 44, 50, 53, 53, > 44, 48, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, > 44, 36, 118, 97, 108, 37, 44, 49, 44, 49, 44, 50, 52, 48, 44, 50, > 53, 53, 44, 54, 50, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 54, 44, 49, 44, 51, 44, 51, 10, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 123, 114, 111, 117, 110, 100, 40, 36, 118, 97, 108, 41, > 125, 37, 44, 48, 44, 48, 44, 49, 52, 44, 49, 44, 49, 32, 45, 45, > 42, 91, 45, 49, 93, 32, 45, 50, 53, 53, 32, 45, 43, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 106, 91, 45, 51, > 93, 32, 91, 45, 49, 93, 44, 123, 40, 50, 56, 48, 45, 119, 41, 47, > 50, 125, 44, 123, 40, 49, 54, 45, 104, 41, 47, 50, 125, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 50, 125, > 44, 123, 104, 43, 50, 125, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, > 104, 111, 117, 103, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, > 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 104, 111, 117, 103, 104, 32, > 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 100, 101, 109, 111, 46, 10, > 120, 95, 104, 111, 117, 103, 104, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 72, 111, 117, 103, 104, 45, > 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 32, 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, > 111, 110, 32, 116, 104, 101, 32, 118, 111, 116, 101, 32, 105, 109, 97, 103, > 101, 32, 116, 111, 32, 100, 114, 97, 119, 32, 99, 111, 114, 114, 101, 115, > 112, 111, 110, 100, 105, 110, 103, 32, 108, 105, 110, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, > 110, 115, 32, 111, 110, 32, 116, 104, 101, 32, 105, 109, 97, 103, 101, 32, > 116, 111, 32, 118, 111, 116, 101, 32, 102, 111, 114, 32, 97, 108, 108, 32, > 108, 105, 110, 101, 115, 32, 99, 114, 111, 115, 115, 105, 110, 103, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 116, 104, 101, 32, 99, 108, 105, 99, 107, > 101, 100, 32, 112, 111, 105, 110, 116, 46, 92, 110, 10, 45, 45, 45, 45, > 32, 75, 101, 121, 32, 39, 83, 80, 65, 67, 69, 39, 32, 116, 111, 32, > 114, 101, 115, 101, 116, 32, 116, 104, 101, 32, 104, 111, 117, 103, 104, 32, > 119, 105, 110, 100, 111, 119, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, > 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, > 33, 64, 35, 125, 32, 45, 116, 101, 115, 116, 105, 109, 97, 103, 101, 50, > 100, 32, 52, 48, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 32, > 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 91, 45, 49, 93, 32, 64, > 123, 45, 102, 105, 116, 115, 99, 114, 101, 101, 110, 92, 32, 123, 119, 125, > 44, 123, 104, 125, 125, 44, 49, 44, 49, 48, 48, 37, 44, 51, 10, 114, > 104, 111, 109, 97, 120, 61, 123, 115, 113, 114, 116, 40, 119, 94, 50, 43, > 104, 94, 50, 41, 47, 50, 125, 10, 45, 45, 98, 91, 45, 49, 93, 32, > 49, 46, 53, 32, 45, 104, 111, 117, 103, 104, 91, 45, 49, 93, 32, 53, > 49, 50, 44, 52, 48, 48, 32, 45, 98, 91, 45, 49, 93, 32, 48, 46, > 53, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 108, 111, 103, 91, > 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 119, 91, 45, 50, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 73, 109, 97, 103, 101, > 34, 32, 45, 119, 49, 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, > 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 72, 111, 117, > 103, 104, 32, 116, 114, 97, 110, 115, 102, 111, 114, 109, 34, 10, 45, 105, > 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 102, 105, 114, 115, 116, 95, > 116, 105, 109, 101, 41, 125, 32, 45, 45, 108, 91, 48, 93, 32, 45, 114, > 50, 100, 121, 32, 49, 50, 56, 32, 45, 102, 114, 97, 109, 101, 32, 49, > 44, 49, 44, 48, 10, 45, 97, 108, 101, 114, 116, 32, 34, 91, 71, 92, > 52, 55, 77, 73, 67, 32, 72, 111, 117, 103, 104, 32, 84, 114, 97, 110, > 115, 102, 111, 114, 109, 93, 34, 44, 92, 10, 34, 84, 104, 101, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 72, 111, 117, 103, 104, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 100, 101, 109, 111, 32, 105, 108, 108, 117, > 115, 116, 114, 97, 116, 101, 115, 32, 116, 104, 101, 32, 97, 112, 112, 108, > 105, 99, 97, 116, 105, 111, 110, 92, 110, 34, 92, 10, 34, 111, 102, 32, > 116, 104, 101, 32, 72, 111, 117, 103, 104, 32, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 32, 116, 111, 32, 100, 101, 116, 101, 99, 116, 32, 108, 105, > 110, 101, 115, 32, 105, 110, 32, 97, 110, 32, 105, 109, 97, 103, 101, 46, > 32, 85, 115, 101, 32, 121, 111, 117, 114, 92, 110, 34, 92, 10, 34, 109, > 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 115, 32, 116, 111, 32, > 101, 120, 112, 108, 111, 114, 101, 32, 116, 104, 101, 32, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 32, 105, 109, 97, 103, 101, 32, 97, 110, 100, 32, > 115, 101, 101, 32, 104, 111, 119, 92, 110, 34, 92, 10, 34, 108, 105, 110, > 101, 115, 32, 105, 110, 32, 105, 109, 97, 103, 101, 115, 32, 97, 114, 101, > 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 101, 100, 32, 98, 121, 32, > 112, 111, 105, 110, 116, 115, 32, 105, 110, 32, 116, 104, 101, 32, 116, 114, > 97, 110, 115, 102, 111, 114, 109, 46, 34, 44, 92, 10, 34, 83, 116, 97, > 114, 116, 32, 100, 101, 109, 111, 34, 10, 45, 114, 109, 32, 45, 101, 110, > 100, 108, 32, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 61, 48, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, > 10, 45, 105, 102, 32, 64, 123, 33, 44, 98, 125, 10, 120, 48, 61, 123, > 64, 123, 33, 44, 120, 125, 45, 64, 123, 33, 44, 119, 125, 47, 50, 125, > 10, 121, 48, 61, 123, 64, 123, 33, 44, 121, 125, 45, 64, 123, 33, 44, > 104, 125, 47, 50, 125, 10, 114, 104, 111, 48, 61, 123, 115, 113, 114, 116, > 40, 40, 36, 120, 48, 41, 94, 50, 43, 40, 36, 121, 48, 41, 94, 50, > 41, 125, 10, 116, 104, 101, 116, 97, 48, 61, 123, 97, 116, 97, 110, 50, > 40, 36, 121, 48, 44, 36, 120, 48, 41, 125, 10, 40, 48, 44, 123, 50, > 42, 112, 105, 125, 41, 32, 40, 36, 116, 104, 101, 116, 97, 48, 44, 123, > 36, 116, 104, 101, 116, 97, 48, 45, 50, 42, 112, 105, 125, 41, 10, 45, > 114, 91, 45, 50, 44, 45, 49, 93, 32, 64, 123, 45, 51, 44, 119, 125, > 44, 49, 44, 49, 44, 49, 44, 51, 10, 45, 99, 111, 115, 91, 45, 49, > 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, 114, 104, 111, 48, 32, 45, > 45, 108, 116, 91, 45, 49, 93, 32, 48, 32, 45, 97, 98, 115, 91, 45, > 50, 93, 10, 45, 42, 91, 45, 49, 93, 32, 123, 112, 105, 125, 32, 45, > 43, 91, 45, 51, 44, 45, 49, 93, 32, 45, 37, 91, 45, 50, 93, 32, > 123, 50, 42, 112, 105, 125, 10, 45, 42, 91, 45, 50, 93, 32, 123, 48, > 46, 53, 42, 64, 123, 45, 51, 44, 119, 125, 47, 112, 105, 125, 32, 45, > 42, 91, 45, 49, 93, 32, 123, 64, 123, 45, 51, 44, 104, 125, 47, 36, > 114, 104, 111, 109, 97, 120, 125, 10, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 121, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 32, > 45, 112, 111, 105, 110, 116, 91, 45, 50, 93, 32, 64, 123, 45, 49, 44, > 40, 36, 62, 44, 48, 41, 125, 44, 64, 123, 45, 49, 44, 40, 36, 62, > 44, 49, 41, 125, 44, 48, 44, 48, 46, 51, 44, 50, 53, 53, 32, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 119, 49, > 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 49, > 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 49, > 44, 98, 125, 125, 10, 116, 104, 101, 116, 97, 61, 123, 64, 123, 33, 49, > 44, 120, 125, 42, 50, 42, 112, 105, 47, 64, 123, 33, 49, 44, 119, 125, > 125, 10, 114, 104, 111, 61, 123, 64, 123, 33, 49, 44, 121, 125, 42, 36, > 114, 104, 111, 109, 97, 120, 47, 64, 123, 33, 49, 44, 104, 125, 125, 10, > 120, 61, 123, 64, 123, 45, 50, 44, 119, 125, 47, 50, 43, 36, 114, 104, > 111, 42, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 121, > 61, 123, 64, 123, 45, 50, 44, 104, 125, 47, 50, 43, 36, 114, 104, 111, > 42, 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, 120, 48, > 61, 123, 36, 120, 43, 49, 48, 48, 48, 42, 115, 105, 110, 40, 36, 116, > 104, 101, 116, 97, 41, 125, 10, 121, 48, 61, 123, 36, 121, 45, 49, 48, > 48, 48, 42, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, 125, 10, > 120, 49, 61, 123, 36, 120, 45, 49, 48, 48, 48, 42, 115, 105, 110, 40, > 36, 116, 104, 101, 116, 97, 41, 125, 10, 121, 49, 61, 123, 36, 121, 43, > 49, 48, 48, 48, 42, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, 41, > 125, 10, 91, 45, 50, 93, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, > 32, 36, 120, 48, 44, 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 49, 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, 70, 44, 50, 53, > 53, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 123, 36, 120, 48, > 43, 49, 125, 44, 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, > 49, 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, 70, 44, 50, 53, 53, > 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 36, 120, 48, 44, 123, > 36, 121, 48, 43, 49, 125, 44, 36, 120, 49, 44, 36, 121, 49, 44, 49, > 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, 70, 44, 50, 53, 53, 10, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 36, 120, 48, 44, 36, 121, > 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 49, 44, 48, 120, 70, 48, > 70, 48, 70, 48, 70, 48, 44, 48, 10, 45, 108, 105, 110, 101, 91, 45, > 49, 93, 32, 123, 36, 120, 48, 43, 49, 125, 44, 36, 121, 48, 44, 36, > 120, 49, 44, 36, 121, 49, 44, 49, 44, 48, 120, 70, 48, 70, 48, 70, > 48, 70, 48, 44, 48, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 36, 120, 48, 44, 123, 36, 121, 48, 43, 49, 125, 44, 36, 120, 49, 44, > 36, 121, 49, 44, 49, 44, 48, 120, 70, 48, 70, 48, 70, 48, 70, 48, > 44, 48, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 83, 80, 65, > 67, 69, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 49, 44, 83, 80, > 65, 67, 69, 125, 125, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, > 98, 91, 45, 49, 93, 32, 49, 46, 53, 32, 45, 104, 111, 117, 103, 104, > 91, 45, 49, 93, 32, 53, 49, 50, 44, 52, 48, 48, 32, 45, 98, 91, > 45, 49, 93, 32, 48, 46, 53, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 108, 111, 103, 91, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 10, 45, 119, 49, 91, 45, 49, 93, 32, 45, > 49, 44, 45, 49, 44, 48, 44, 34, 72, 111, 117, 103, 104, 32, 84, 114, > 97, 110, 115, 102, 111, 114, 109, 34, 10, 45, 101, 108, 105, 102, 32, 64, > 123, 33, 44, 114, 125, 32, 45, 119, 91, 45, 50, 93, 10, 45, 101, 108, > 105, 102, 32, 64, 123, 33, 49, 44, 114, 125, 32, 45, 119, 49, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 64, 123, 33, 49, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 49, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 49, 44, 81, 125, 125, 10, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 101, 110, 100, 108, 10, 45, 105, 102, 32, 123, 33, 64, > 33, 34, 32, 124, 124, 32, 34, 33, 64, 123, 33, 49, 125, 125, 32, 45, > 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 48, > 32, 48, 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 106, 97, 119, 98, 114, > 101, 97, 107, 101, 114, 32, 58, 32, 48, 60, 95, 119, 105, 100, 116, 104, > 60, 50, 48, 44, 48, 60, 95, 104, 101, 105, 103, 104, 116, 60, 50, 48, > 44, 48, 60, 95, 98, 97, 108, 108, 115, 60, 61, 56, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, > 32, 74, 97, 119, 98, 114, 101, 97, 107, 101, 114, 32, 103, 97, 109, 101, > 46, 10, 120, 95, 106, 97, 119, 98, 114, 101, 97, 107, 101, 114, 32, 58, > 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 49, 50, 125, > 62, 48, 32, 38, 38, 32, 36, 49, 60, 50, 48, 32, 38, 38, 32, 36, > 123, 50, 61, 49, 51, 125, 62, 48, 32, 38, 38, 32, 36, 50, 60, 50, > 48, 32, 38, 38, 32, 36, 123, 51, 61, 53, 125, 62, 48, 32, 38, 38, > 32, 36, 51, 60, 61, 56, 34, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 10, 45, 45, 45, 45, 45, 45, 32, 74, 97, 119, 98, 114, 101, 97, 107, > 101, 114, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, 104, > 101, 32, 103, 111, 97, 108, 32, 111, 102, 32, 116, 104, 101, 32, 103, 97, > 109, 101, 32, 105, 115, 32, 116, 111, 32, 114, 101, 109, 111, 118, 101, 32, > 116, 104, 101, 32, 109, 97, 120, 105, 109, 117, 109, 32, 110, 117, 109, 98, > 101, 114, 32, 111, 102, 92, 110, 10, 45, 45, 45, 45, 32, 98, 97, 108, > 108, 115, 32, 111, 110, 32, 116, 104, 101, 32, 98, 111, 97, 114, 100, 44, > 32, 115, 105, 109, 112, 108, 121, 32, 98, 121, 32, 99, 108, 105, 99, 107, > 105, 110, 103, 32, 111, 110, 32, 116, 104, 101, 109, 46, 32, 66, 117, 116, > 32, 97, 92, 110, 10, 45, 45, 45, 45, 32, 99, 111, 108, 111, 114, 101, > 100, 32, 98, 97, 108, 108, 32, 99, 97, 110, 32, 100, 105, 115, 97, 112, > 112, 101, 97, 114, 32, 111, 110, 108, 121, 32, 105, 102, 32, 105, 116, 32, > 105, 115, 32, 103, 114, 111, 117, 112, 101, 100, 32, 119, 105, 116, 104, 32, > 97, 116, 92, 110, 10, 45, 45, 45, 45, 32, 108, 101, 97, 115, 116, 32, > 111, 110, 101, 32, 98, 97, 108, 108, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 97, 109, 101, 32, 99, 111, 108, 111, 114, 46, 32, 84, 104, 101, 32, > 115, 99, 111, 114, 101, 32, 105, 115, 32, 104, 105, 103, 104, 101, 114, 32, > 105, 102, 92, 110, 10, 45, 45, 45, 45, 32, 121, 111, 117, 32, 100, 101, > 115, 116, 114, 111, 121, 32, 108, 97, 114, 103, 101, 114, 32, 115, 101, 116, > 115, 32, 111, 102, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, 32, 99, > 111, 108, 111, 114, 101, 100, 32, 98, 97, 108, 108, 115, 46, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, > 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 47, 100, 101, 115, 116, 114, 111, 121, 32, > 98, 97, 108, 108, 115, 32, 111, 110, 32, 98, 111, 97, 114, 100, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 66, 65, 67, 75, > 83, 80, 65, 67, 69, 39, 32, 111, 114, 32, 39, 83, 80, 65, 67, 69, > 39, 32, 116, 111, 32, 117, 110, 100, 111, 32, 116, 104, 101, 32, 108, 97, > 115, 116, 32, 109, 111, 118, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 32, 39, 83, 39, 32, 116, 111, 32, 115, 97, 118, 101, 32, > 115, 110, 97, 112, 115, 104, 111, 116, 32, 111, 102, 32, 116, 104, 101, 32, > 99, 117, 114, 114, 101, 110, 116, 32, 118, 105, 101, 119, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, > 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, > 91, 98, 111, 97, 114, 100, 93, 32, 36, 49, 44, 36, 50, 32, 45, 114, > 97, 110, 100, 91, 98, 111, 97, 114, 100, 93, 32, 49, 44, 36, 51, 32, > 45, 114, 111, 117, 110, 100, 91, 98, 111, 97, 114, 100, 93, 32, 49, 10, > 45, 105, 91, 117, 110, 100, 111, 93, 32, 91, 45, 49, 93, 10, 45, 105, > 91, 98, 97, 108, 108, 115, 93, 32, 51, 50, 44, 51, 50, 44, 49, 44, > 52, 32, 45, 95, 120, 95, 106, 97, 119, 98, 114, 101, 97, 107, 101, 114, > 95, 98, 97, 108, 108, 91, 45, 49, 93, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 32, 48, 32, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 49, 46, 53, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 123, 64, 123, 98, > 111, 97, 114, 100, 44, 119, 125, 42, 119, 125, 44, 123, 64, 123, 98, 111, > 97, 114, 100, 44, 104, 125, 42, 104, 125, 44, 49, 44, 49, 44, 48, 44, > 50, 32, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 105, 91, > 98, 97, 99, 107, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, > 51, 32, 45, 108, 91, 45, 49, 93, 10, 45, 114, 97, 110, 100, 32, 48, > 44, 50, 53, 53, 32, 45, 98, 108, 117, 114, 95, 120, 121, 32, 54, 44, > 50, 48, 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, 49, 48, 48, > 44, 48, 44, 50, 53, 53, 32, 45, 98, 108, 117, 114, 95, 120, 121, 32, > 50, 44, 52, 10, 45, 115, 104, 32, 48, 44, 48, 32, 45, 115, 104, 91, > 45, 50, 93, 32, 49, 44, 49, 32, 45, 115, 104, 91, 45, 51, 93, 32, > 50, 44, 50, 32, 45, 47, 91, 45, 51, 93, 32, 52, 32, 45, 47, 91, > 45, 50, 93, 32, 56, 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, > 114, 109, 91, 45, 51, 45, 45, 49, 93, 10, 45, 101, 110, 100, 108, 10, > 45, 105, 91, 118, 105, 115, 117, 93, 32, 91, 98, 97, 99, 107, 93, 10, > 115, 99, 111, 114, 101, 61, 48, 10, 117, 110, 100, 111, 115, 99, 111, 114, > 101, 61, 48, 10, 114, 101, 110, 100, 101, 114, 95, 98, 111, 97, 114, 100, > 61, 49, 10, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 121, 61, 48, > 10, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 61, 48, 10, 45, 100, > 111, 10, 45, 105, 102, 32, 36, 114, 101, 110, 100, 101, 114, 95, 98, 111, > 97, 114, 100, 10, 45, 45, 97, 98, 115, 91, 98, 111, 97, 114, 100, 93, > 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 51, 54, 48, 47, 36, 51, 125, 32, 45, 45, 103, 101, 91, 98, > 111, 97, 114, 100, 93, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 48, > 46, 57, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 98, 97, > 108, 108, 115, 93, 32, 91, 98, 97, 108, 108, 115, 93, 32, 45, 97, 91, > 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, > 98, 91, 45, 49, 93, 10, 45, 45, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 43, 32, 45, > 103, 116, 91, 45, 49, 93, 32, 48, 32, 45, 100, 105, 108, 97, 116, 101, > 91, 45, 49, 93, 32, 51, 10, 45, 106, 91, 118, 105, 115, 117, 93, 32, > 91, 98, 97, 99, 107, 93, 32, 45, 106, 91, 118, 105, 115, 117, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 33, 36, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, > 121, 125, 32, 45, 119, 91, 118, 105, 115, 117, 93, 32, 64, 123, 98, 97, > 99, 107, 44, 119, 125, 44, 64, 123, 98, 97, 99, 107, 44, 104, 125, 44, > 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 74, 97, 119, > 98, 114, 101, 97, 107, 101, 114, 32, 40, 115, 99, 111, 114, 101, 32, 58, > 32, 34, 36, 115, 99, 111, 114, 101, 34, 41, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 114, 101, 110, 100, 101, 114, 95, 98, 111, 97, 114, 100, 61, > 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 115, 104, > 97, 112, 101, 115, 99, 111, 114, 101, 121, 10, 45, 45, 116, 91, 118, 105, > 115, 117, 93, 32, 34, 43, 34, 36, 115, 104, 97, 112, 101, 115, 99, 111, > 114, 101, 44, 64, 123, 33, 44, 120, 125, 44, 123, 64, 123, 33, 44, 121, > 125, 45, 54, 52, 43, 36, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, > 121, 125, 44, 51, 50, 44, 123, 40, 36, 115, 104, 97, 112, 101, 115, 99, > 111, 114, 101, 121, 45, 49, 41, 47, 51, 49, 125, 44, 50, 53, 53, 10, > 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 121, 61, 123, 109, 97, 120, > 40, 48, 44, 36, 115, 104, 97, 112, 101, 115, 99, 111, 114, 101, 121, 45, > 49, 41, 125, 10, 45, 119, 91, 45, 49, 93, 32, 64, 123, 98, 97, 99, > 107, 44, 119, 125, 44, 64, 123, 98, 97, 99, 107, 44, 104, 125, 44, 48, > 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 74, 97, 119, 98, > 114, 101, 97, 107, 101, 114, 32, 40, 115, 99, 111, 114, 101, 32, 58, 32, > 34, 36, 115, 99, 111, 114, 101, 34, 41, 34, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 53, 10, 45, 101, 108, 115, > 101, 32, 45, 119, 97, 105, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 102, 91, 98, 111, 97, 114, 100, 93, 32, 34, 105, 102, 40, 105, 44, > 106, 40, 45, 49, 41, 61, 61, 105, 32, 124, 124, 32, 106, 40, 49, 41, > 61, 61, 105, 32, 124, 124, 32, 106, 40, 48, 44, 49, 41, 61, 61, 105, > 32, 124, 124, 32, 106, 40, 48, 44, 45, 49, 41, 61, 61, 105, 44, 48, > 41, 34, 10, 45, 105, 102, 32, 123, 33, 64, 123, 45, 49, 44, 43, 125, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 98, 114, 101, 97, 107, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 105, 102, 32, 64, 123, 33, 44, 114, 125, 32, 114, 101, 110, 100, 101, > 114, 95, 98, 111, 97, 114, 100, 61, 49, 10, 45, 101, 108, 105, 102, 32, > 64, 123, 33, 44, 83, 125, 32, 45, 111, 91, 118, 105, 115, 117, 93, 32, > 103, 109, 105, 99, 95, 106, 97, 119, 98, 114, 101, 97, 107, 101, 114, 46, > 112, 110, 103, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 66, > 65, 67, 75, 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 83, 80, 65, 67, 69, 125, 125, 10, 45, 97, 98, 115, 91, > 117, 110, 100, 111, 93, 32, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, > 91, 117, 110, 100, 111, 93, 10, 115, 99, 111, 114, 101, 61, 36, 117, 110, > 100, 111, 115, 99, 111, 114, 101, 10, 114, 101, 110, 100, 101, 114, 95, 98, > 111, 97, 114, 100, 61, 49, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 120, 125, 34, 62, 61, 48, 32, 38, 38, 32, 34, 64, 123, 33, > 44, 98, 125, 125, 10, 45, 119, 97, 105, 116, 32, 45, 49, 10, 120, 61, > 123, 34, 105, 110, 116, 40, 34, 64, 123, 33, 44, 120, 125, 34, 42, 34, > 64, 123, 98, 111, 97, 114, 100, 44, 119, 125, 34, 47, 34, 64, 123, 33, > 44, 119, 125, 34, 41, 34, 125, 10, 121, 61, 123, 34, 105, 110, 116, 40, > 34, 64, 123, 33, 44, 121, 125, 34, 42, 34, 64, 123, 98, 111, 97, 114, > 100, 44, 104, 125, 34, 47, 34, 64, 123, 33, 44, 104, 125, 34, 41, 34, > 125, 10, 45, 105, 102, 32, 123, 64, 123, 98, 111, 97, 114, 100, 44, 40, > 36, 120, 44, 36, 121, 41, 125, 62, 48, 125, 10, 45, 97, 98, 115, 91, > 98, 111, 97, 114, 100, 93, 32, 45, 102, 108, 111, 111, 100, 91, 98, 111, > 97, 114, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 45, 64, 123, 98, 111, 97, 114, 100, 44, 40, 36, 120, 44, > 36, 121, 41, 125, 10, 45, 45, 103, 101, 91, 98, 111, 97, 114, 100, 93, > 32, 48, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, 115, 104, 97, 112, > 101, 115, 99, 111, 114, 101, 61, 123, 40, 64, 123, 45, 49, 44, 43, 125, > 43, 49, 41, 94, 50, 125, 32, 115, 104, 97, 112, 101, 115, 99, 111, 114, > 101, 121, 61, 123, 105, 102, 40, 36, 115, 104, 97, 112, 101, 115, 99, 111, > 114, 101, 44, 51, 50, 44, 48, 41, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 108, 105, 102, 32, 64, 123, 98, 111, 97, 114, 100, 44, > 40, 36, 120, 44, 36, 121, 41, 125, 10, 45, 45, 102, 108, 111, 111, 100, > 91, 98, 111, 97, 114, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, > 48, 44, 48, 44, 49, 44, 45, 49, 32, 45, 61, 61, 91, 45, 49, 93, > 32, 45, 49, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 43, 125, > 62, 49, 125, 10, 45, 106, 91, 117, 110, 100, 111, 93, 32, 91, 98, 111, > 97, 114, 100, 93, 10, 117, 110, 100, 111, 115, 99, 111, 114, 101, 61, 36, > 115, 99, 111, 114, 101, 10, 45, 102, 108, 111, 111, 100, 91, 98, 111, 97, > 114, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 98, 111, > 97, 114, 100, 44, 119, 125, 10, 45, 45, 99, 111, 108, 117, 109, 110, 115, > 91, 98, 111, 97, 114, 100, 93, 32, 36, 62, 32, 45, 109, 105, 114, 114, > 111, 114, 91, 45, 49, 93, 32, 121, 10, 104, 61, 64, 123, 98, 111, 97, > 114, 100, 44, 104, 125, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 32, > 45, 44, 48, 32, 45, 97, 32, 121, 32, 45, 105, 102, 32, 64, 35, 32, > 45, 114, 32, 49, 44, 36, 104, 44, 49, 44, 49, 44, 48, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 108, 115, 101, 32, 45, 105, > 32, 49, 44, 36, 104, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 108, 10, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, 45, 49, > 93, 44, 36, 62, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, > 110, 101, 10, 45, 114, 111, 119, 115, 91, 98, 111, 97, 114, 100, 93, 32, > 45, 49, 44, 49, 48, 48, 37, 32, 45, 102, 91, 98, 111, 97, 114, 100, > 93, 32, 34, 105, 102, 40, 121, 61, 61, 48, 44, 105, 102, 40, 105, 40, > 120, 44, 104, 45, 49, 41, 44, 120, 44, 119, 41, 44, 105, 41, 34, 32, > 45, 115, 111, 114, 116, 91, 98, 111, 97, 114, 100, 93, 32, 43, 44, 120, > 32, 45, 114, 111, 119, 115, 91, 98, 111, 97, 114, 100, 93, 32, 49, 44, > 49, 48, 48, 37, 10, 115, 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, > 114, 101, 43, 105, 110, 116, 40, 40, 64, 123, 45, 49, 44, 43, 125, 45, > 49, 41, 94, 50, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 97, 98, 115, > 91, 98, 111, 97, 114, 100, 93, 10, 45, 101, 110, 100, 105, 102, 10, 114, > 101, 110, 100, 101, 114, 95, 98, 111, 97, 114, 100, 61, 49, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 34, 32, 38, 38, > 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 125, 10, 45, 105, 102, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 125, 10, 45, 119, 91, 93, 32, 64, 123, 118, 105, 115, 117, > 44, 119, 125, 44, 64, 123, 118, 105, 115, 117, 44, 104, 125, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 74, 97, 119, 98, 114, > 101, 97, 107, 101, 114, 32, 40, 102, 105, 110, 97, 108, 32, 115, 99, 111, > 114, 101, 32, 58, 32, 34, 36, 115, 99, 111, 114, 101, 34, 41, 34, 10, > 45, 105, 91, 103, 97, 109, 101, 111, 118, 101, 114, 93, 32, 50, 54, 48, > 44, 56, 53, 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, 97, 109, 101, > 32, 79, 118, 101, 114, 33, 34, 44, 51, 44, 48, 44, 53, 51, 44, 49, > 44, 49, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, 99, 111, 114, 101, > 32, 58, 32, 34, 36, 115, 99, 111, 114, 101, 44, 50, 51, 44, 53, 51, > 44, 51, 50, 44, 49, 44, 49, 10, 45, 45, 100, 105, 108, 97, 116, 101, > 91, 45, 49, 93, 32, 53, 32, 45, 110, 109, 91, 45, 49, 93, 32, 34, > 109, 103, 97, 109, 101, 111, 118, 101, 114, 34, 32, 45, 42, 91, 45, 50, > 93, 32, 50, 53, 53, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 50, 53, 10, 45, 45, 114, 91, 103, 97, 109, 101, 111, 118, > 101, 114, 44, 109, 103, 97, 109, 101, 111, 118, 101, 114, 93, 32, 123, 52, > 48, 48, 45, 49, 50, 42, 40, 36, 62, 43, 49, 41, 125, 37, 44, 123, > 52, 48, 48, 45, 49, 50, 42, 40, 36, 62, 43, 49, 41, 125, 37, 10, > 45, 45, 106, 91, 118, 105, 115, 117, 93, 32, 91, 45, 50, 93, 44, 123, > 40, 64, 123, 118, 105, 115, 117, 44, 119, 125, 45, 119, 41, 47, 50, 125, > 44, 123, 40, 64, 123, 118, 105, 115, 117, 44, 104, 125, 45, 104, 41, 47, > 50, 125, 44, 48, 44, 48, 44, 123, 36, 62, 47, 50, 53, 125, 44, 91, > 45, 49, 93, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 51, 45, 45, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 53, 10, 45, > 100, 111, 110, 101, 10, 45, 100, 111, 10, 45, 119, 97, 105, 116, 32, 45, > 105, 102, 32, 64, 123, 33, 44, 114, 125, 32, 45, 119, 91, 93, 32, 64, > 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, 45, 119, 97, > 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, > 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, > 33, 44, 81, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 98, 125, > 125, 10, 45, 114, 109, 91, 103, 97, 109, 101, 111, 118, 101, 114, 44, 109, > 103, 97, 109, 101, 111, 118, 101, 114, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 98, 111, 97, 114, 100, 44, 117, 110, 100, 111, 44, > 98, 97, 108, 108, 115, 44, 98, 97, 99, 107, 44, 118, 105, 115, 117, 93, > 10, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 95, 120, 95, 106, 97, > 119, 98, 114, 101, 97, 107, 101, 114, 95, 98, 97, 108, 108, 32, 58, 10, > 109, 119, 104, 61, 123, 109, 105, 110, 40, 119, 44, 104, 41, 125, 10, 45, > 115, 104, 32, 51, 44, 51, 32, 45, 102, 91, 45, 49, 93, 32, 48, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 108, 105, 112, 115, 101, > 32, 123, 48, 46, 53, 42, 36, 109, 119, 104, 125, 44, 123, 48, 46, 53, > 42, 36, 109, 119, 104, 125, 44, 123, 48, 46, 53, 42, 36, 109, 119, 104, > 45, 52, 125, 44, 123, 48, 46, 53, 42, 36, 109, 119, 104, 45, 52, 125, > 44, 48, 44, 49, 44, 50, 52, 48, 44, 50, 52, 48, 44, 50, 52, 48, > 44, 49, 10, 45, 115, 104, 32, 48, 44, 50, 32, 45, 42, 91, 45, 49, > 93, 32, 39, 40, 36, 109, 119, 104, 43, 121, 45, 120, 41, 47, 40, 50, > 42, 119, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, > 108, 105, 112, 115, 101, 32, 123, 36, 109, 119, 104, 42, 48, 46, 55, 125, > 44, 123, 36, 109, 119, 104, 42, 48, 46, 51, 125, 44, 123, 109, 105, 110, > 40, 51, 48, 44, 36, 109, 119, 104, 42, 36, 109, 119, 104, 47, 53, 49, > 50, 41, 125, 44, 123, 109, 105, 110, 40, 51, 48, 44, 36, 109, 119, 104, > 42, 36, 109, 119, 104, 47, 53, 49, 50, 41, 125, 44, 48, 44, 123, 109, > 105, 110, 40, 36, 109, 119, 104, 47, 54, 52, 44, 49, 41, 125, 44, 50, > 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 49, 10, 45, 115, 104, > 32, 48, 44, 50, 32, 45, 98, 91, 45, 49, 93, 32, 123, 48, 46, 48, > 50, 42, 36, 109, 119, 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 32, 51, 44, 51, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, > 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 32, 48, 44, > 50, 32, 45, 43, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 38, 38, > 40, 33, 106, 40, 45, 49, 41, 124, 124, 33, 106, 40, 49, 41, 124, 124, > 33, 106, 40, 48, 44, 45, 49, 41, 124, 124, 33, 106, 40, 48, 44, 49, > 41, 41, 44, 50, 52, 48, 47, 54, 44, 48, 41, 39, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 108, 105, > 102, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, > 99, 104, 32, 116, 104, 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, > 105, 102, 101, 46, 10, 120, 95, 108, 105, 102, 101, 32, 58, 10, 45, 101, > 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 84, 104, > 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, 105, 102, 101, 32, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 84, 104, 101, 32, 103, 111, 97, 108, 32, 105, 115, 32, > 116, 111, 32, 99, 114, 101, 97, 116, 101, 32, 116, 104, 101, 32, 98, 105, > 103, 103, 101, 115, 116, 32, 112, 111, 115, 115, 105, 98, 108, 101, 32, 98, > 105, 111, 108, 111, 103, 105, 99, 97, 108, 92, 110, 10, 45, 45, 45, 45, > 32, 115, 121, 115, 116, 101, 109, 46, 32, 89, 111, 117, 32, 115, 116, 97, > 114, 116, 32, 119, 105, 116, 104, 32, 97, 32, 115, 116, 111, 99, 107, 32, > 111, 102, 32, 99, 101, 108, 108, 115, 32, 119, 104, 105, 99, 104, 32, 121, > 111, 117, 32, 99, 97, 110, 92, 110, 10, 45, 45, 45, 45, 32, 115, 112, > 114, 101, 97, 100, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 98, 111, > 97, 114, 100, 46, 32, 70, 111, 114, 32, 101, 97, 99, 104, 32, 110, 101, > 119, 32, 99, 101, 108, 108, 115, 32, 99, 114, 101, 97, 116, 101, 100, 92, > 110, 10, 45, 45, 45, 45, 32, 115, 105, 109, 117, 108, 116, 97, 110, 101, > 111, 117, 115, 108, 121, 32, 97, 110, 100, 32, 115, 112, 111, 110, 116, 97, > 110, 101, 111, 117, 115, 108, 121, 32, 98, 121, 32, 121, 111, 117, 114, 32, > 115, 121, 115, 116, 101, 109, 44, 32, 121, 111, 117, 92, 110, 10, 45, 45, > 45, 45, 32, 103, 97, 105, 110, 32, 109, 111, 114, 101, 32, 110, 101, 119, > 32, 99, 101, 108, 108, 115, 32, 116, 111, 32, 115, 99, 97, 116, 116, 101, > 114, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, > 111, 110, 32, 116, 111, 32, 115, 99, 97, 116, 116, 101, 114, 32, 99, 101, > 108, 108, 115, 32, 105, 110, 32, 115, 116, 111, 99, 107, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 114, 101, 115, 101, 116, > 32, 103, 97, 109, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 32, 39, 83, 39, 32, 116, 111, 32, 115, 97, 118, 101, 32, 115, 110, > 97, 112, 115, 104, 111, 116, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, > 114, 114, 101, 110, 116, 32, 118, 105, 101, 119, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, > 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 45, 105, 91, 48, > 93, 32, 57, 48, 44, 57, 48, 44, 49, 44, 49, 44, 48, 10, 45, 105, > 91, 49, 93, 32, 91, 48, 93, 32, 45, 102, 91, 49, 93, 32, 48, 10, > 45, 105, 91, 50, 93, 32, 52, 48, 48, 44, 52, 48, 48, 44, 49, 44, > 51, 10, 45, 105, 91, 51, 93, 32, 49, 10, 105, 116, 101, 114, 97, 116, > 105, 111, 110, 61, 48, 10, 115, 99, 111, 114, 101, 61, 48, 10, 98, 101, > 115, 116, 115, 99, 111, 114, 101, 61, 48, 10, 115, 116, 111, 99, 107, 61, > 53, 48, 48, 10, 45, 119, 91, 48, 93, 32, 52, 48, 48, 44, 52, 48, > 48, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 84, > 104, 101, 32, 103, 97, 109, 101, 32, 111, 102, 32, 108, 105, 102, 101, 34, > 10, 45, 99, 117, 114, 115, 111, 114, 91, 48, 93, 32, 48, 10, 45, 100, > 111, 10, 40, 49, 44, 49, 44, 49, 59, 49, 44, 48, 44, 49, 59, 49, > 44, 49, 44, 49, 41, 32, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, > 101, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, 32, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 45, 116, 50, 91, 45, 49, 93, 32, 50, 44, 50, > 32, 45, 97, 110, 100, 91, 45, 49, 93, 32, 91, 48, 93, 32, 45, 116, > 50, 91, 45, 50, 93, 32, 51, 44, 51, 32, 45, 111, 114, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 114, 118, 91, 48, 44, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 48, 34, 32, 38, 38, > 32, 34, 64, 123, 33, 44, 98, 125, 61, 61, 49, 34, 32, 38, 38, 32, > 34, 36, 115, 116, 111, 99, 107, 62, 48, 125, 10, 110, 98, 61, 123, 63, > 42, 55, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 110, 98, 10, > 120, 61, 123, 64, 123, 33, 44, 120, 125, 47, 64, 123, 33, 44, 119, 125, > 42, 64, 123, 48, 44, 119, 125, 43, 63, 40, 45, 52, 44, 52, 41, 125, > 10, 121, 61, 123, 64, 123, 33, 44, 121, 125, 47, 64, 123, 33, 44, 104, > 125, 42, 64, 123, 48, 44, 104, 125, 43, 63, 40, 45, 51, 44, 51, 41, > 125, 10, 45, 61, 91, 48, 93, 32, 49, 44, 36, 120, 44, 36, 121, 10, > 45, 61, 91, 49, 93, 32, 36, 105, 116, 101, 114, 97, 116, 105, 111, 110, > 44, 36, 120, 44, 36, 121, 10, 45, 112, 111, 105, 110, 116, 91, 50, 93, > 32, 123, 36, 120, 42, 64, 123, 50, 44, 119, 125, 47, 64, 123, 48, 44, > 119, 125, 125, 44, 123, 36, 121, 42, 64, 123, 50, 44, 104, 125, 47, 64, > 123, 48, 44, 104, 125, 125, 44, 48, 44, 48, 46, 56, 44, 50, 53, 53, > 10, 45, 100, 111, 110, 101, 10, 115, 116, 111, 99, 107, 61, 123, 114, 111, > 117, 110, 100, 40, 109, 97, 120, 40, 48, 44, 36, 115, 116, 111, 99, 107, > 45, 36, 110, 98, 41, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 45, 91, 45, 49, 93, 32, 91, 48, 93, 32, 45, 42, 91, 45, 49, 93, > 32, 45, 49, 10, 115, 116, 111, 99, 107, 61, 123, 36, 115, 116, 111, 99, > 107, 45, 50, 42, 40, 109, 105, 110, 40, 48, 44, 105, 110, 116, 40, 64, > 123, 45, 49, 44, 43, 125, 47, 49, 54, 42, 36, 115, 99, 111, 114, 101, > 47, 49, 53, 48, 41, 41, 41, 125, 10, 45, 43, 91, 49, 93, 32, 91, > 48, 93, 10, 45, 109, 105, 110, 91, 45, 49, 93, 32, 48, 32, 45, 43, > 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 49, 44, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 61, 61, 50, 125, 10, > 45, 102, 91, 48, 45, 50, 93, 32, 48, 32, 105, 116, 101, 114, 97, 116, > 105, 111, 110, 61, 48, 32, 115, 99, 111, 114, 101, 61, 48, 32, 98, 101, > 115, 116, 115, 99, 111, 114, 101, 61, 48, 32, 115, 116, 111, 99, 107, 61, > 53, 48, 48, 32, 45, 114, 109, 91, 51, 93, 32, 45, 105, 91, 51, 93, > 32, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, > 123, 51, 44, 119, 125, 61, 61, 49, 125, 10, 45, 114, 109, 91, 51, 93, > 32, 45, 105, 91, 51, 93, 32, 123, 63, 40, 51, 44, 49, 50, 41, 125, > 44, 49, 44, 49, 44, 51, 44, 63, 40, 49, 48, 48, 44, 50, 53, 53, > 41, 10, 45, 114, 91, 51, 93, 32, 123, 63, 40, 49, 48, 48, 44, 51, > 48, 48, 41, 125, 37, 44, 49, 44, 49, 44, 51, 44, 52, 10, 45, 112, > 111, 105, 110, 116, 91, 51, 93, 32, 48, 44, 48, 44, 48, 44, 49, 44, > 48, 10, 45, 114, 91, 51, 93, 32, 123, 63, 40, 49, 48, 48, 44, 54, > 48, 48, 41, 125, 37, 44, 49, 44, 49, 44, 51, 44, 53, 32, 45, 99, > 91, 51, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 114, 91, 49, 93, 32, 64, 123, 50, 44, 119, 125, 44, 64, > 123, 50, 44, 104, 125, 32, 45, 97, 110, 100, 91, 45, 49, 93, 32, 55, > 32, 45, 98, 91, 45, 49, 93, 32, 123, 49, 43, 36, 115, 99, 111, 114, > 101, 42, 48, 46, 48, 53, 125, 10, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 64, 123, 51, 44, 119, 125, 32, 45, 109, 97, 112, 91, 45, 49, 93, > 32, 91, 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 48, 46, 49, 32, > 45, 43, 91, 50, 44, 45, 49, 93, 32, 45, 47, 91, 50, 93, 32, 49, > 46, 49, 10, 91, 50, 93, 32, 45, 105, 102, 32, 123, 64, 123, 33, 44, > 120, 125, 62, 48, 125, 10, 111, 112, 97, 99, 61, 123, 48, 46, 55, 42, > 109, 105, 110, 40, 49, 44, 36, 115, 116, 111, 99, 107, 47, 53, 48, 48, > 41, 125, 32, 114, 61, 123, 109, 105, 110, 40, 53, 48, 48, 44, 36, 115, > 116, 111, 99, 107, 41, 42, 99, 111, 115, 40, 36, 105, 116, 101, 114, 97, > 116, 105, 111, 110, 41, 47, 49, 48, 48, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 64, 123, 33, 44, 120, 125, 44, 64, > 123, 33, 44, 121, 125, 44, 123, 49, 53, 43, 36, 114, 125, 44, 123, 49, > 53, 43, 36, 114, 125, 44, 48, 44, 36, 111, 112, 97, 99, 44, 48, 44, > 49, 57, 54, 44, 48, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, > 49, 93, 32, 64, 123, 33, 44, 120, 125, 44, 64, 123, 33, 44, 121, 125, > 44, 123, 49, 48, 43, 36, 114, 125, 44, 123, 49, 48, 43, 36, 114, 125, > 44, 48, 44, 36, 111, 112, 97, 99, 44, 51, 50, 44, 54, 52, 44, 49, > 54, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 64, > 123, 33, 44, 120, 125, 44, 64, 123, 33, 44, 121, 125, 44, 123, 53, 43, > 36, 114, 125, 44, 123, 53, 43, 36, 114, 125, 44, 48, 44, 36, 111, 112, > 97, 99, 44, 50, 53, 53, 44, 50, 51, 48, 44, 48, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 116, 91, 45, 49, 93, 32, 34, 76, 105, 118, 105, > 110, 103, 32, 99, 101, 108, 108, 115, 32, 58, 32, 34, 36, 115, 99, 111, > 114, 101, 34, 92, 110, 34, 92, 10, 34, 83, 116, 111, 99, 107, 32, 58, > 32, 34, 36, 115, 116, 111, 99, 107, 34, 92, 110, 34, 92, 10, 34, 83, > 99, 111, 114, 101, 32, 58, 32, 34, 36, 98, 101, 115, 116, 115, 99, 111, > 114, 101, 44, 53, 44, 51, 44, 50, 50, 44, 48, 46, 55, 44, 50, 53, > 53, 10, 45, 119, 91, 45, 49, 93, 32, 64, 123, 33, 44, 119, 125, 44, > 64, 123, 33, 44, 104, 125, 10, 45, 105, 102, 32, 64, 123, 33, 44, 83, > 125, 32, 45, 111, 91, 45, 49, 93, 32, 103, 109, 105, 99, 95, 108, 105, > 102, 101, 46, 112, 110, 103, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 33, 40, 36, 105, 116, > 101, 114, 97, 116, 105, 111, 110, 37, 49, 48, 41, 125, 32, 115, 99, 111, > 114, 101, 61, 64, 123, 48, 44, 43, 125, 32, 98, 101, 115, 116, 115, 99, > 111, 114, 101, 61, 123, 109, 97, 120, 40, 36, 115, 99, 111, 114, 101, 44, > 36, 98, 101, 115, 116, 115, 99, 111, 114, 101, 41, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 54, 48, 10, 105, 116, 101, > 114, 97, 116, 105, 111, 110, 61, 123, 36, 105, 116, 101, 114, 97, 116, 105, > 111, 110, 43, 49, 125, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, > 109, 91, 48, 45, 51, 93, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 108, 105, 103, 104, 116, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, > 116, 104, 101, 32, 108, 105, 103, 104, 116, 32, 101, 102, 102, 101, 99, 116, > 32, 100, 101, 109, 111, 46, 10, 120, 95, 108, 105, 103, 104, 116, 32, 58, > 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 32, 76, 105, 103, 104, 116, 32, 101, 102, 102, 101, 99, 116, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 32, 77, 111, 118, 101, 32, 108, 105, 103, 104, 116, 32, 112, 111, > 115, 105, 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 109, 111, 117, 115, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, > 98, 117, 116, 116, 111, 110, 115, 32, 102, 97, 100, 101, 32, 108, 105, 103, > 104, 116, 32, 105, 110, 47, 111, 117, 116, 46, 92, 110, 10, 45, 45, 45, > 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, > 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, > 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, > 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, > 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, > 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 32, 32, 32, 32, 71, 92, 52, 55, 77, > 73, 67, 92, 110, 76, 105, 103, 104, 116, 32, 101, 102, 102, 101, 99, 116, > 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 50, 53, 53, 32, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 53, > 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 51, 10, 91, 45, 49, 93, > 32, 45, 110, 91, 45, 50, 93, 32, 48, 44, 49, 32, 45, 114, 91, 45, > 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, > 10, 45, 115, 104, 91, 45, 50, 93, 32, 48, 44, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 49, 50, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, > 49, 93, 32, 55, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, > 104, 91, 45, 50, 93, 32, 48, 44, 53, 48, 37, 44, 48, 44, 50, 32, > 45, 42, 91, 45, 49, 93, 32, 49, 50, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 50, 53, 37, 44, 50, 53, 37, 44, 49, 44, 49, 32, 45, > 114, 97, 110, 100, 91, 45, 49, 93, 32, 45, 50, 48, 44, 50, 48, 32, > 45, 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 49, 48, 44, 48, > 44, 49, 44, 49, 44, 52, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 51, 32, 45, 98, 91, 45, 49, 93, 32, 51, 32, 45, 110, > 91, 45, 49, 93, 32, 45, 54, 48, 44, 54, 48, 10, 45, 43, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, 32, > 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 91, 45, > 49, 93, 32, 45, 49, 53, 48, 44, 49, 53, 48, 10, 45, 119, 91, 93, > 32, 123, 49, 46, 53, 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, 123, > 49, 46, 53, 42, 64, 123, 45, 50, 44, 104, 125, 125, 44, 48, 44, 34, > 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 76, 105, 103, 104, 116, 32, > 101, 102, 102, 101, 99, 116, 34, 10, 45, 99, 117, 114, 115, 111, 114, 91, > 48, 93, 32, 48, 10, 108, 105, 103, 104, 116, 61, 55, 48, 10, 53, 49, > 50, 44, 53, 49, 50, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, > 45, 49, 93, 32, 36, 108, 105, 103, 104, 116, 32, 45, 110, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 116, 61, 48, 10, 45, 100, 111, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 61, 48, 125, 10, > 88, 61, 123, 114, 111, 117, 110, 100, 40, 40, 119, 45, 64, 123, 33, 44, > 120, 125, 41, 47, 50, 41, 125, 10, 89, 61, 123, 114, 111, 117, 110, 100, > 40, 40, 104, 45, 64, 123, 33, 44, 121, 125, 41, 47, 50, 41, 125, 10, > 45, 101, 108, 115, 101, 10, 88, 61, 123, 114, 111, 117, 110, 100, 40, 40, > 119, 45, 64, 123, 45, 50, 44, 119, 125, 42, 40, 49, 43, 99, 111, 115, > 40, 50, 42, 36, 116, 41, 41, 41, 47, 50, 41, 125, 10, 89, 61, 123, > 114, 111, 117, 110, 100, 40, 40, 104, 45, 64, 123, 45, 50, 44, 104, 125, > 42, 40, 49, 43, 115, 105, 110, 40, 50, 46, 53, 42, 36, 116, 41, 41, > 41, 47, 50, 41, 125, 10, 116, 61, 123, 36, 116, 43, 48, 46, 48, 50, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 98, 125, 38, 49, 125, 32, 108, 105, 103, 104, 116, 61, 123, 109, > 105, 110, 40, 50, 48, 48, 44, 36, 108, 105, 103, 104, 116, 43, 49, 48, > 41, 125, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, 45, 49, 93, > 32, 36, 108, 105, 103, 104, 116, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 123, 33, 44, 98, 125, 38, 50, 125, 32, 108, 105, 103, 104, 116, > 61, 123, 109, 97, 120, 40, 49, 48, 44, 36, 108, 105, 103, 104, 116, 45, > 49, 48, 41, 125, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, 45, > 49, 93, 32, 36, 108, 105, 103, 104, 116, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, > 122, 91, 45, 49, 93, 32, 36, 88, 44, 36, 89, 44, 123, 36, 88, 43, > 64, 123, 45, 50, 44, 119, 125, 45, 49, 125, 44, 123, 36, 89, 43, 64, > 123, 45, 50, 44, 104, 125, 45, 49, 125, 10, 45, 119, 97, 114, 112, 91, > 45, 49, 93, 32, 91, 45, 51, 93, 44, 49, 44, 48, 44, 49, 10, 45, > 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 51, 32, 45, 43, 91, 45, 49, 93, 32, 91, 45, 52, 93, 32, > 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 119, 91, > 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, 123, 51, 42, 104, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, > 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, 44, 123, 49, 46, 53, > 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 105, 102, 32, 123, 64, 123, 33, 44, 120, 125, 62, 61, > 48, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 98, 125, 125, 32, > 45, 119, 97, 105, 116, 32, 45, 101, 108, 115, 101, 32, 45, 119, 97, 105, > 116, 32, 50, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, > 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 81, 125, 125, 10, 45, 119, 91, 93, 32, 48, 32, 45, 114, 109, 91, 45, > 51, 45, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 58, > 32, 95, 106, 117, 108, 105, 97, 61, 123, 32, 48, 32, 124, 32, 49, 32, > 125, 44, 95, 99, 48, 114, 44, 95, 99, 48, 105, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 77, 97, 110, 100, > 101, 108, 98, 114, 111, 116, 47, 74, 117, 108, 105, 97, 32, 101, 120, 112, > 108, 111, 114, 101, 114, 46, 10, 120, 95, 109, 97, 110, 100, 101, 108, 98, > 114, 111, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 48, 125, 44, 36, 123, 50, 61, 48, 46, 51, 49, 55, 125, 44, 36, 123, > 51, 61, 48, 46, 48, 51, 125, 10, 45, 101, 91, 93, 32, 34, 92, 110, > 10, 45, 45, 45, 45, 45, 45, 32, 77, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 47, 74, 117, 108, 105, 97, 32, 101, 120, 112, 108, 111, 114, 101, > 114, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 32, 83, 101, 108, 101, 99, 116, 32, 122, 111, 111, 109, 105, 110, 103, > 32, 114, 101, 103, 105, 111, 110, 32, 119, 105, 116, 104, 32, 109, 111, 117, > 115, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 67, 108, 105, 99, 107, > 32, 111, 110, 99, 101, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 122, > 111, 111, 109, 32, 102, 97, 99, 116, 111, 114, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, > 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 67, 39, 32, 116, 111, 32, > 112, 114, 105, 110, 116, 32, 99, 117, 114, 114, 101, 110, 116, 32, 102, 114, > 97, 99, 116, 97, 108, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, > 115, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, > 45, 118, 32, 45, 10, 45, 114, 109, 32, 45, 119, 32, 53, 49, 50, 44, > 53, 49, 50, 44, 48, 32, 45, 95, 120, 95, 109, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 95, 99, 111, 111, 114, 100, 115, 32, 36, 49, 32, 45, > 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 95, 112, 97, > 108, 101, 116, 116, 101, 10, 45, 100, 111, 10, 115, 105, 122, 61, 123, 109, > 105, 110, 40, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, > 41, 125, 10, 36, 115, 105, 122, 44, 36, 115, 105, 122, 32, 45, 109, 97, > 110, 100, 101, 108, 98, 114, 111, 116, 91, 45, 49, 93, 32, 64, 48, 44, > 50, 53, 54, 44, 36, 49, 44, 123, 105, 102, 40, 36, 49, 44, 36, 50, > 44, 48, 41, 125, 44, 123, 105, 102, 40, 36, 49, 44, 36, 51, 44, 48, > 41, 125, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 49, 93, 10, > 45, 105, 102, 32, 36, 49, 32, 45, 119, 91, 45, 49, 93, 32, 36, 115, > 105, 122, 44, 36, 115, 105, 122, 44, 48, 44, 34, 91, 71, 92, 52, 55, > 77, 73, 67, 93, 32, 74, 117, 108, 105, 97, 32, 115, 101, 116, 32, 99, > 61, 40, 34, 64, 123, 48, 44, 48, 125, 34, 44, 34, 64, 123, 48, 44, > 49, 125, 34, 41, 45, 40, 34, 64, 123, 48, 44, 50, 125, 34, 44, 34, > 64, 123, 48, 44, 51, 125, 34, 41, 44, 32, 99, 48, 61, 40, 36, 50, > 44, 36, 51, 41, 34, 10, 45, 101, 108, 115, 101, 32, 45, 119, 91, 45, > 49, 93, 32, 36, 115, 105, 122, 44, 36, 115, 105, 122, 44, 48, 44, 34, > 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 77, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 32, 115, 101, 116, 32, 99, 61, 40, 34, 64, 123, 48, > 44, 48, 125, 34, 44, 34, 64, 123, 48, 44, 49, 125, 34, 41, 45, 40, > 34, 64, 123, 48, 44, 50, 125, 34, 44, 34, 64, 123, 48, 44, 51, 125, > 34, 41, 34, 32, 45, 101, 110, 100, 105, 102, 10, 119, 61, 123, 119, 125, > 32, 104, 61, 123, 104, 125, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, > 93, 32, 45, 115, 101, 108, 101, 99, 116, 91, 45, 49, 93, 32, 50, 10, > 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 125, 62, 48, 125, 10, > 77, 61, 123, 109, 97, 120, 40, 64, 123, 45, 49, 44, 51, 125, 45, 64, > 123, 45, 49, 44, 48, 125, 44, 64, 123, 45, 49, 44, 52, 125, 45, 64, > 123, 45, 49, 44, 49, 125, 41, 125, 10, 45, 105, 102, 32, 123, 36, 77, > 60, 53, 125, 32, 45, 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 95, 99, 111, 111, 114, 100, 115, 32, 36, 49, 32, 45, 114, 109, > 91, 49, 93, 32, 45, 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 95, 112, 97, 108, 101, 116, 116, 101, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 49, 10, 45, 101, 108, 115, 101, 32, 40, 123, 64, 123, 48, > 44, 48, 125, 43, 64, 123, 45, 49, 44, 48, 125, 42, 40, 64, 123, 48, > 44, 50, 125, 45, 64, 123, 48, 44, 48, 125, 41, 47, 36, 119, 125, 59, > 92, 10, 123, 64, 123, 48, 44, 49, 125, 43, 64, 123, 45, 49, 44, 49, > 125, 42, 40, 64, 123, 48, 44, 51, 125, 45, 64, 123, 48, 44, 49, 125, > 41, 47, 36, 104, 125, 59, 92, 10, 123, 64, 123, 48, 44, 48, 125, 43, > 40, 64, 123, 45, 49, 44, 48, 125, 43, 36, 77, 41, 42, 40, 64, 123, > 48, 44, 50, 125, 45, 64, 123, 48, 44, 48, 125, 41, 47, 36, 119, 125, > 59, 92, 10, 123, 64, 123, 48, 44, 49, 125, 43, 40, 64, 123, 45, 49, > 44, 49, 125, 43, 36, 77, 41, 42, 40, 64, 123, 48, 44, 51, 125, 45, > 64, 123, 48, 44, 49, 125, 41, 47, 36, 104, 125, 41, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 125, 125, > 10, 45, 105, 102, 32, 36, 49, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 48, 45, 45, 52, 93, 32, 34, 74, 117, 108, 105, 97, 32, 115, 101, 116, > 44, 32, 97, 116, 32, 99, 32, 61, 32, 40, 34, 64, 123, 48, 44, 48, > 45, 49, 125, 34, 41, 45, 40, 34, 64, 123, 48, 44, 50, 45, 51, 125, > 34, 41, 44, 32, 119, 105, 116, 104, 32, 99, 48, 32, 61, 32, 40, 36, > 50, 44, 36, 51, 41, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 108, > 115, 101, 32, 45, 118, 32, 43, 32, 45, 101, 91, 48, 45, 45, 52, 93, > 32, 34, 77, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 115, 101, 116, > 44, 32, 97, 116, 32, 99, 32, 61, 32, 40, 34, 64, 123, 48, 44, 48, > 45, 49, 125, 34, 41, 45, 40, 34, 64, 123, 48, 44, 50, 45, 51, 125, > 34, 41, 46, 34, 32, 45, 118, 32, 45, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 64, 33, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 81, 125, 125, 32, 45, 114, 109, 32, > 45, 119, 32, 48, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 45, > 49, 10, 45, 119, 104, 105, 108, 101, 32, 49, 10, 95, 120, 95, 109, 97, > 110, 100, 101, 108, 98, 114, 111, 116, 95, 99, 111, 111, 114, 100, 115, 32, > 58, 10, 45, 105, 102, 32, 36, 49, 32, 40, 45, 50, 59, 45, 50, 59, > 50, 59, 50, 41, 32, 45, 101, 108, 115, 101, 32, 40, 45, 50, 46, 49, > 59, 45, 49, 46, 53, 59, 49, 46, 50, 59, 49, 46, 53, 41, 32, 45, > 101, 110, 100, 105, 102, 10, 95, 120, 95, 109, 97, 110, 100, 101, 108, 98, > 114, 111, 116, 95, 112, 97, 108, 101, 116, 116, 101, 32, 58, 10, 54, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 50, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 51, 50, > 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 48, 50, 52, 44, 49, 44, 49, 44, 51, 44, 48, 44, 50, 32, 45, > 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 32, > 45, 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 49, > 32, 45, 61, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 109, 101, 116, 97, 98, > 97, 108, 108, 115, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 51, 100, 32, 109, 101, > 116, 97, 98, 97, 108, 108, 115, 32, 100, 101, 109, 111, 46, 10, 120, 95, > 109, 101, 116, 97, 98, 97, 108, 108, 115, 51, 100, 32, 58, 10, 45, 101, > 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 51, 100, > 32, 109, 101, 116, 97, 98, 97, 108, 108, 115, 32, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 32, 77, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, 114, > 32, 39, 83, 80, 65, 67, 69, 39, 32, 107, 101, 121, 32, 116, 111, 32, > 115, 119, 105, 116, 99, 104, 32, 114, 101, 110, 100, 101, 114, 105, 110, 103, > 32, 109, 111, 100, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, > 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, > 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, > 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, > 49, 48, 48, 44, 49, 48, 48, 32, 45, 110, 111, 105, 115, 101, 91, 45, > 49, 93, 32, 49, 48, 48, 44, 49, 32, 45, 112, 108, 97, 115, 109, 97, > 91, 45, 49, 93, 32, 49, 44, 48, 44, 49, 48, 32, 45, 114, 91, 45, > 49, 93, 32, 53, 49, 50, 44, 51, 50, 48, 44, 49, 44, 51, 32, 45, > 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 98, 91, 45, 49, 93, > 32, 52, 44, 48, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, > 53, 10, 45, 109, 105, 120, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 40, 48, 46, 55, 44, 48, 44, 48, 59, 48, 44, 48, > 46, 57, 44, 48, 59, 48, 44, 48, 44, 49, 46, 50, 41, 32, 45, 99, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 108, 51, 100, 10, > 48, 10, 50, 52, 44, 50, 52, 44, 50, 52, 44, 49, 44, 39, 88, 61, > 120, 45, 119, 47, 50, 59, 89, 61, 121, 45, 104, 47, 50, 59, 90, 61, > 122, 45, 100, 47, 50, 59, 101, 120, 112, 40, 45, 40, 88, 42, 88, 43, > 89, 42, 89, 43, 90, 42, 90, 41, 47, 49, 48, 48, 41, 39, 10, 55, > 50, 44, 55, 50, 44, 55, 50, 32, 77, 61, 56, 32, 109, 111, 100, 101, > 61, 53, 10, 115, 48, 61, 68, 111, 116, 115, 32, 115, 49, 61, 87, 105, > 114, 101, 102, 114, 97, 109, 101, 32, 115, 50, 61, 70, 108, 97, 116, 32, > 115, 51, 61, 70, 108, 97, 116, 45, 115, 104, 97, 100, 101, 100, 32, 115, > 52, 61, 71, 111, 117, 114, 97, 117, 100, 45, 115, 104, 97, 100, 101, 100, > 32, 115, 53, 61, 80, 104, 111, 110, 103, 45, 115, 104, 97, 100, 101, 100, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 77, 32, 102, 120, 36, 62, > 61, 123, 103, 42, 49, 46, 53, 125, 32, 102, 121, 36, 62, 61, 123, 103, > 42, 49, 46, 53, 125, 32, 102, 122, 36, 62, 61, 123, 103, 42, 49, 46, > 53, 125, 32, 45, 100, 111, 110, 101, 10, 45, 119, 91, 48, 93, 32, 45, > 49, 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 51, 100, 32, 109, 101, 116, 97, 98, 97, 108, 108, 115, 34, 10, > 45, 100, 111, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 77, 10, 120, > 36, 62, 61, 123, 119, 47, 50, 43, 48, 46, 53, 42, 40, 119, 45, 64, > 123, 50, 44, 119, 125, 45, 52, 41, 42, 99, 111, 115, 40, 36, 123, 102, > 120, 36, 62, 125, 42, 64, 124, 41, 125, 10, 121, 36, 62, 61, 123, 104, > 47, 50, 43, 48, 46, 53, 42, 40, 104, 45, 64, 123, 50, 44, 104, 125, > 45, 52, 41, 42, 115, 105, 110, 40, 36, 123, 102, 121, 36, 62, 125, 42, > 64, 124, 41, 125, 10, 122, 36, 62, 61, 123, 100, 47, 50, 43, 48, 46, > 53, 42, 40, 100, 45, 64, 123, 50, 44, 100, 125, 45, 52, 41, 42, 115, > 105, 110, 40, 36, 123, 102, 122, 36, 62, 125, 42, 64, 124, 41, 125, 10, > 45, 100, 111, 110, 101, 10, 45, 102, 91, 51, 93, 32, 48, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 77, 32, 45, 106, 91, 51, 93, 32, 91, > 50, 93, 44, 123, 36, 123, 120, 36, 62, 125, 45, 64, 123, 50, 44, 119, > 47, 50, 125, 125, 44, 123, 36, 123, 121, 36, 62, 125, 45, 64, 123, 50, > 44, 104, 47, 50, 125, 125, 44, 123, 36, 123, 122, 36, 62, 125, 45, 64, > 123, 50, 44, 100, 47, 50, 125, 125, 44, 48, 44, 45, 49, 32, 45, 100, > 111, 110, 101, 10, 45, 45, 114, 91, 51, 93, 32, 50, 52, 44, 50, 52, > 44, 50, 52, 44, 49, 44, 50, 32, 45, 105, 115, 111, 115, 117, 114, 102, > 97, 99, 101, 51, 100, 91, 45, 49, 93, 32, 48, 46, 52, 32, 45, 45, > 51, 100, 91, 45, 49, 93, 32, 49, 50, 44, 49, 50, 44, 49, 50, 32, > 45, 42, 51, 100, 91, 45, 49, 93, 32, 49, 51, 32, 45, 114, 118, 51, > 100, 91, 45, 49, 93, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, > 44, 50, 44, 49, 44, 123, 49, 48, 48, 42, 64, 124, 125, 10, 78, 61, > 123, 105, 91, 55, 93, 125, 32, 40, 50, 53, 53, 44, 50, 53, 53, 44, > 49, 53, 48, 59, 50, 48, 48, 44, 57, 54, 44, 49, 54, 52, 59, 53, > 48, 44, 49, 53, 48, 44, 50, 51, 48, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 51, 44, 36, 78, 44, 49, 44, 49, 44, 51, 32, 45, 121, 91, > 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 52, 42, 36, 78, 125, > 10, 45, 105, 102, 32, 123, 33, 36, 109, 111, 100, 101, 125, 32, 45, 99, > 105, 114, 99, 108, 101, 115, 51, 100, 91, 45, 50, 93, 32, 52, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 64, 123, 49, 44, > 119, 125, 125, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 123, 115, > 36, 109, 111, 100, 101, 125, 44, 53, 44, 53, 44, 50, 51, 44, 48, 46, > 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 98, > 91, 45, 49, 93, 32, 48, 46, 55, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, > 49, 93, 32, 51, 32, 45, 45, 106, 91, 48, 93, 32, 91, 45, 50, 93, > 44, 53, 44, 51, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, > 50, 53, 53, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 114, > 109, 91, 50, 44, 45, 50, 44, 45, 49, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 49, 93, 32, > 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, > 44, 123, 105, 102, 40, 33, 36, 109, 111, 100, 101, 44, 51, 44, 36, 109, > 111, 100, 101, 41, 125, 44, 48, 44, 48, 44, 51, 48, 48, 44, 48, 44, > 48, 44, 45, 53, 48, 48, 44, 48, 46, 49, 44, 49, 46, 53, 10, 45, > 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, > 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, > 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, > 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, > 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, > 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 51, 45, 45, 49, 93, 32, > 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 98, 125, 124, 124, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, > 125, 32, 109, 111, 100, 101, 61, 123, 40, 36, 109, 111, 100, 101, 43, 105, > 102, 40, 64, 123, 33, 44, 98, 125, 38, 50, 44, 45, 49, 44, 49, 41, > 41, 37, 54, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 114, > 109, 91, 49, 93, 32, 45, 105, 91, 49, 93, 32, 48, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, > 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, 109, 32, > 45, 119, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 120, 95, 109, 105, 110, 101, 115, 119, 101, > 101, 112, 101, 114, 32, 58, 32, 56, 60, 61, 95, 119, 105, 100, 116, 104, > 61, 60, 50, 48, 44, 56, 60, 61, 95, 104, 101, 105, 103, 104, 116, 60, > 61, 50, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, > 110, 99, 104, 32, 116, 104, 101, 32, 77, 105, 110, 101, 115, 119, 101, 101, > 112, 101, 114, 32, 103, 97, 109, 101, 46, 10, 120, 95, 109, 105, 110, 101, > 115, 119, 101, 101, 112, 101, 114, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 34, 36, 123, 49, 61, 50, 48, 125, 62, 61, 56, 32, 38, 38, 32, > 36, 49, 60, 61, 51, 48, 32, 38, 38, 32, 36, 123, 50, 61, 36, 49, > 125, 62, 61, 56, 32, 38, 38, 32, 36, 50, 60, 61, 51, 48, 34, 10, > 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, > 77, 105, 110, 101, 115, 119, 101, 101, 112, 101, 114, 32, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, > 10, 45, 45, 45, 45, 32, 84, 104, 101, 32, 103, 111, 97, 108, 32, 105, > 115, 32, 116, 111, 32, 99, 108, 101, 97, 114, 32, 116, 104, 101, 32, 109, > 105, 110, 101, 102, 105, 101, 108, 100, 32, 119, 105, 116, 104, 111, 117, 116, > 32, 100, 101, 116, 111, 110, 97, 116, 105, 110, 103, 32, 97, 92, 110, 10, > 45, 45, 45, 45, 32, 109, 105, 110, 101, 46, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, 32, 109, 111, > 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 116, 114, > 121, 32, 99, 108, 101, 97, 114, 105, 110, 103, 32, 111, 110, 101, 32, 115, > 113, 117, 97, 114, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, > 103, 104, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, > 32, 116, 111, 32, 102, 108, 97, 103, 32, 111, 114, 32, 117, 110, 102, 108, > 97, 103, 32, 97, 32, 115, 113, 117, 97, 114, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 77, 105, 100, 100, 108, 101, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 114, 101, 115, 101, 116, > 32, 109, 105, 110, 101, 32, 102, 105, 101, 108, 100, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 92, 110, 34, 10, 45, 118, 32, 45, 10, 36, > 49, 44, 36, 50, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, 32, > 51, 48, 44, 50, 32, 110, 98, 95, 109, 105, 110, 101, 115, 61, 64, 123, > 45, 49, 44, 43, 125, 32, 40, 49, 44, 49, 44, 49, 59, 49, 44, 48, > 44, 49, 59, 49, 44, 49, 44, 49, 41, 32, 45, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 32, 45, 61, 61, 91, 45, 50, 93, 32, 48, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 102, 105, 101, > 108, 100, 10, 45, 100, 111, 32, 120, 61, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 119, 45, 49, 41, 41, 125, 32, 121, 61, 123, 114, 111, 117, 110, > 100, 40, 63, 40, 104, 45, 49, 41, 41, 125, 32, 45, 119, 104, 105, 108, > 101, 32, 123, 105, 40, 36, 120, 44, 36, 121, 41, 33, 61, 49, 125, 10, > 45, 45, 102, 91, 102, 105, 101, 108, 100, 93, 32, 49, 49, 32, 45, 61, > 91, 45, 49, 93, 32, 49, 50, 44, 36, 120, 44, 36, 121, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 98, 111, 97, 114, 100, 10, 50, 52, 44, 50, > 52, 44, 49, 44, 51, 44, 50, 48, 48, 32, 45, 102, 99, 91, 45, 49, > 93, 32, 50, 53, 53, 44, 49, 56, 48, 44, 49, 51, 48, 10, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 49, 50, 44, 49, 50, > 44, 52, 44, 52, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 54, > 44, 49, 50, 44, 49, 56, 44, 49, 50, 32, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 49, 50, 44, 54, 44, 49, 50, 44, 49, 56, 32, 45, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 49, 51, 44, 49, 48, 44, 49, > 52, 44, 49, 48, 44, 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 49, 51, 44, 49, 49, 44, 49, 52, 44, 49, 49, > 44, 49, 44, 50, 53, 53, 10, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 44, 123, 119, 45, 50, 125, 44, 123, 104, 45, 50, 125, 32, 45, 102, > 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 10, 45, > 45, 102, 99, 91, 45, 49, 93, 32, 50, 51, 48, 44, 50, 53, 48, 44, > 50, 53, 53, 10, 45, 45, 116, 91, 45, 49, 93, 32, 34, 49, 34, 44, > 49, 48, 44, 53, 44, 49, 51, 44, 49, 44, 48, 44, 49, 57, 54, 44, > 48, 32, 45, 45, 116, 91, 45, 50, 93, 32, 34, 50, 34, 44, 57, 44, > 53, 44, 49, 51, 44, 49, 44, 48, 44, 49, 50, 56, 44, 48, 32, 45, > 45, 116, 91, 45, 51, 93, 32, 34, 51, 34, 44, 57, 44, 53, 44, 49, > 51, 44, 49, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 45, 116, 91, > 45, 52, 93, 32, 34, 52, 34, 44, 57, 44, 53, 44, 49, 51, 44, 49, > 44, 50, 53, 53, 44, 48, 44, 48, 32, 45, 45, 116, 91, 45, 53, 93, > 32, 34, 53, 34, 44, 57, 44, 53, 44, 49, 51, 44, 49, 44, 50, 48, > 48, 44, 48, 44, 48, 32, 45, 45, 116, 91, 45, 54, 93, 32, 34, 54, > 34, 44, 57, 44, 53, 44, 49, 51, 44, 49, 44, 49, 53, 48, 44, 48, > 44, 48, 10, 45, 45, 116, 91, 45, 55, 93, 32, 34, 55, 34, 44, 57, > 44, 53, 44, 49, 51, 44, 49, 44, 49, 50, 56, 44, 48, 44, 48, 32, > 45, 45, 116, 91, 45, 56, 93, 32, 34, 56, 34, 44, 57, 44, 53, 44, > 49, 51, 44, 49, 44, 54, 52, 44, 48, 44, 48, 10, 45, 45, 102, 91, > 45, 49, 93, 32, 39, 105, 102, 40, 120, 60, 61, 49, 124, 124, 121, 60, > 61, 49, 124, 124, 120, 62, 61, 119, 45, 50, 124, 124, 121, 62, 61, 104, > 45, 50, 44, 105, 102, 40, 120, 60, 121, 44, 49, 50, 56, 44, 50, 53, > 53, 41, 44, 49, 54, 48, 43, 50, 42, 40, 121, 43, 120, 41, 41, 39, > 10, 45, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, > 44, 49, 51, 44, 49, 53, 44, 49, 49, 44, 49, 53, 44, 54, 44, 49, > 56, 44, 49, 55, 44, 49, 56, 44, 49, 44, 48, 32, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 49, 50, 44, 49, 53, 44, 49, 50, 44, 54, > 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 32, 45, 112, 111, 108, 121, > 103, 111, 110, 91, 45, 49, 93, 32, 51, 44, 49, 50, 44, 54, 44, 54, > 44, 57, 44, 49, 50, 44, 49, 50, 44, 49, 44, 50, 50, 48, 44, 48, > 44, 48, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, > 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 54, 44, 49, 52, 44, > 49, 48, 44, 49, 56, 44, 49, 44, 48, 44, 50, 48, 48, 44, 48, 32, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 49, 48, 44, 49, 56, 44, > 49, 54, 44, 54, 44, 49, 44, 48, 44, 50, 48, 48, 44, 48, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 50, 10, 45, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 49, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 48, 46, 55, 32, 45, 100, 105, 108, 97, > 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 106, 91, 45, 51, 93, 32, > 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 97, 91, 45, 49, 51, 45, 45, 49, 93, 32, 120, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 115, 112, 114, 105, 116, 101, 115, 10, 40, 48, 44, 50, > 51, 59, 48, 44, 50, 51, 94, 48, 44, 48, 59, 50, 51, 44, 50, 51, > 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, 52, 44, 50, 52, 44, 49, > 44, 50, 44, 51, 32, 45, 114, 91, 45, 49, 93, 32, 123, 64, 123, 98, > 111, 97, 114, 100, 44, 119, 125, 42, 50, 52, 125, 44, 123, 64, 123, 98, > 111, 97, 114, 100, 44, 104, 125, 42, 50, 52, 125, 44, 49, 44, 50, 44, > 48, 44, 50, 32, 45, 110, 109, 91, 45, 49, 93, 32, 111, 102, 102, 115, > 101, 116, 115, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, > 51, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, > 93, 32, 50, 51, 44, 50, 51, 44, 50, 53, 53, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 78, 117, 109, 98, 101, 114, 32, 111, 102, 32, > 109, 105, 110, 101, 115, 32, 58, 32, 34, 36, 110, 98, 95, 109, 105, 110, > 101, 115, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 49, 48, 48, 44, > 50, 48, 48, 44, 50, 53, 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 91, 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 123, 40, 64, 123, 45, 50, 44, 119, 125, 45, 119, 41, 47, 50, > 125, 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 104, 45, 50, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 110, 109, 91, 45, 49, 93, 32, > 99, 97, 110, 118, 97, 115, 10, 102, 97, 105, 108, 101, 100, 61, 48, 32, > 115, 117, 99, 99, 101, 101, 100, 101, 100, 61, 48, 32, 110, 98, 95, 102, > 108, 97, 103, 115, 61, 48, 32, 115, 116, 97, 114, 116, 101, 100, 61, 48, > 10, 45, 100, 111, 10, 45, 45, 42, 91, 98, 111, 97, 114, 100, 93, 32, > 50, 52, 32, 45, 114, 91, 45, 49, 93, 32, 91, 111, 102, 102, 115, 101, > 116, 115, 93, 44, 91, 111, 102, 102, 115, 101, 116, 115, 93, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 43, 91, 45, 49, 93, 32, 91, 111, 102, 102, 115, 101, 116, 115, 93, > 32, 45, 45, 119, 97, 114, 112, 91, 115, 112, 114, 105, 116, 101, 115, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 106, 91, 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, > 93, 44, 50, 52, 44, 50, 52, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 105, 102, 32, 36, 102, 97, > 105, 108, 101, 100, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, > 97, 109, 101, 92, 110, 79, 118, 101, 114, 33, 34, 44, 51, 44, 51, 44, > 51, 56, 44, 49, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 53, 32, 45, 47, 91, 45, 49, 93, 32, 50, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 114, 111, 112, 95, 115, > 104, 97, 100, 111, 119, 91, 45, 49, 93, 32, 53, 44, 53, 44, 49, 32, > 45, 98, 108, 101, 110, 100, 91, 99, 97, 110, 118, 97, 115, 44, 45, 49, > 93, 32, 97, 108, 112, 104, 97, 10, 48, 32, 45, 116, 91, 45, 49, 93, > 32, 34, 66, 111, 111, 109, 33, 32, 89, 111, 117, 32, 102, 97, 105, 108, > 101, 100, 33, 34, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 49, 48, > 48, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, > 32, 64, 123, 99, 97, 110, 118, 97, 115, 44, 119, 125, 44, 49, 48, 48, > 37, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, > 45, 106, 91, 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 32, > 45, 119, 91, 99, 97, 110, 118, 97, 115, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 32, 45, 119, 97, 105, 116, 32, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 101, 108, 105, 102, 32, 36, 115, 117, 99, 99, 101, 101, 100, 101, > 100, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, 117, 99, 99, > 101, 115, 115, 33, 34, 44, 51, 44, 51, 44, 51, 56, 44, 49, 44, 50, > 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 52, 32, 45, 115, 104, 91, 45, 49, 93, 32, > 51, 44, 51, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, > 53, 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 91, > 45, 49, 93, 32, 53, 44, 53, 44, 49, 32, 45, 98, 108, 101, 110, 100, > 91, 99, 97, 110, 118, 97, 115, 44, 45, 49, 93, 32, 97, 108, 112, 104, > 97, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 67, 111, 110, 103, > 114, 97, 116, 117, 108, 97, 116, 105, 111, 110, 115, 33, 32, 40, 34, 123, > 114, 111, 117, 110, 100, 40, 64, 124, 45, 36, 116, 105, 99, 41, 125, 34, > 32, 115, 41, 34, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 50, 53, > 53, 44, 49, 48, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, > 32, 64, 123, 99, 97, 110, 118, 97, 115, 44, 119, 125, 44, 49, 48, 48, > 37, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 10, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, > 45, 106, 91, 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 51, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 32, > 45, 119, 91, 99, 97, 110, 118, 97, 115, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 32, 45, 119, 97, 105, 116, 32, 45, 119, 104, 105, 108, 101, 32, > 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, > 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, > 10, 45, 101, 108, 115, 101, 10, 45, 45, 61, 61, 91, 98, 111, 97, 114, > 100, 93, 32, 49, 48, 32, 110, 98, 95, 102, 108, 97, 103, 115, 61, 64, > 123, 45, 49, 44, 43, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 100, 111, 10, 45, 105, 102, 32, 123, 33, 36, 115, 116, 97, 114, 116, 101, > 100, 125, 32, 116, 105, 99, 61, 64, 124, 32, 45, 101, 110, 100, 105, 102, > 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 69, 108, 97, 112, 115, > 101, 100, 32, 116, 105, 109, 101, 32, 58, 32, 34, 123, 114, 111, 117, 110, > 100, 40, 64, 124, 45, 36, 116, 105, 99, 41, 125, 34, 32, 115, 32, 47, > 32, 70, 108, 97, 103, 115, 32, 58, 32, 34, 36, 110, 98, 95, 102, 108, > 97, 103, 115, 44, 48, 44, 48, 44, 49, 56, 44, 49, 44, 50, 53, 53, > 44, 50, 48, 48, 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 64, 123, > 99, 97, 110, 118, 97, 115, 44, 119, 125, 44, 49, 48, 48, 37, 44, 49, > 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, > 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, 106, 91, > 99, 97, 110, 118, 97, 115, 93, 32, 91, 45, 49, 93, 44, 48, 44, 51, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 119, 97, 105, 116, 32, 53, > 48, 10, 120, 61, 123, 105, 110, 116, 40, 40, 64, 123, 33, 44, 120, 125, > 45, 50, 52, 41, 47, 50, 52, 41, 125, 32, 121, 61, 123, 105, 110, 116, > 40, 40, 64, 123, 33, 44, 121, 125, 45, 50, 52, 41, 47, 50, 52, 41, > 125, 32, 98, 61, 64, 123, 33, 44, 98, 125, 10, 45, 119, 91, 99, 97, > 110, 118, 97, 115, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 77, 105, 110, 101, 115, > 119, 101, 101, 112, 101, 114, 34, 10, 45, 119, 104, 105, 108, 101, 32, 123, > 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 34, 32, > 38, 38, 32, 34, 33, 36, 98, 125, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 120, 62, 61, 48, 92, 32, 38, 38, 92, 32, > 36, 121, 62, 61, 48, 92, 32, 38, 38, 92, 32, 36, 120, 60, 64, 123, > 98, 111, 97, 114, 100, 44, 119, 125, 92, 32, 38, 38, 92, 32, 36, 121, > 60, 64, 123, 98, 111, 97, 114, 100, 44, 104, 125, 125, 10, 45, 105, 102, > 32, 123, 36, 98, 38, 49, 125, 10, 115, 116, 97, 114, 116, 101, 100, 61, > 49, 32, 118, 97, 108, 61, 64, 123, 102, 105, 101, 108, 100, 44, 40, 36, > 120, 44, 36, 121, 41, 125, 10, 45, 105, 102, 32, 123, 36, 118, 97, 108, > 61, 61, 48, 125, 32, 45, 45, 61, 61, 91, 102, 105, 101, 108, 100, 93, > 32, 48, 32, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, 102, 105, > 101, 108, 100, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 102, 97, 105, 108, > 101, 100, 61, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 118, 97, 108, > 61, 61, 49, 125, 32, 45, 45, 102, 108, 111, 111, 100, 91, 102, 105, 101, > 108, 100, 93, 32, 36, 120, 44, 36, 121, 44, 48, 44, 48, 44, 49, 44, > 49, 44, 45, 49, 32, 45, 61, 61, 91, 45, 49, 93, 32, 45, 49, 32, > 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 106, > 91, 98, 111, 97, 114, 100, 93, 32, 91, 102, 105, 101, 108, 100, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 61, 91, > 98, 111, 97, 114, 100, 93, 32, 36, 118, 97, 108, 44, 36, 120, 44, 36, > 121, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, > 110, 61, 64, 123, 98, 111, 97, 114, 100, 44, 40, 36, 120, 44, 36, 121, > 41, 125, 59, 36, 98, 38, 50, 34, 32, 38, 38, 32, 34, 110, 62, 61, > 49, 48, 34, 32, 38, 38, 32, 34, 110, 60, 61, 49, 49, 125, 10, 45, > 61, 91, 98, 111, 97, 114, 100, 93, 32, 123, 105, 102, 40, 64, 123, 98, > 111, 97, 114, 100, 44, 40, 36, 120, 44, 36, 121, 41, 125, 61, 61, 49, > 49, 44, 49, 48, 44, 49, 49, 41, 125, 44, 36, 120, 44, 36, 121, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 98, 38, 52, 125, 32, 45, 102, 91, > 98, 111, 97, 114, 100, 93, 32, 49, 48, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 110, 98, > 95, 109, 105, 110, 101, 115, 61, 61, 36, 110, 98, 95, 102, 108, 97, 103, > 115, 92, 32, 38, 38, 92, 32, 64, 123, 98, 111, 97, 114, 100, 44, 77, > 125, 33, 61, 49, 49, 125, 32, 115, 117, 99, 99, 101, 101, 100, 101, 100, > 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 125, 10, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, > 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, > 116, 104, 32, 100, 101, 109, 111, 46, 10, 120, 95, 109, 105, 110, 105, 109, > 97, 108, 95, 112, 97, 116, 104, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 77, 105, 110, 105, 109, 97, > 108, 32, 112, 97, 116, 104, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, > 67, 108, 105, 99, 107, 32, 111, 110, 32, 116, 119, 111, 32, 112, 111, 105, > 110, 116, 115, 32, 116, 111, 32, 99, 111, 109, 112, 117, 116, 101, 32, 97, > 110, 100, 32, 100, 105, 115, 112, 108, 97, 121, 32, 116, 104, 101, 32, 109, > 105, 110, 105, 109, 97, 108, 92, 110, 10, 45, 45, 45, 45, 32, 112, 97, > 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 104, 111, 115, 101, > 32, 112, 111, 105, 110, 116, 115, 46, 32, 84, 104, 101, 32, 101, 110, 100, > 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 105, 115, 32, 116, 104, 101, > 110, 92, 110, 10, 45, 45, 45, 45, 32, 99, 104, 111, 115, 101, 110, 32, > 97, 115, 32, 116, 104, 101, 32, 110, 101, 120, 116, 32, 115, 116, 97, 114, > 116, 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 102, 111, 114, 32, 97, > 110, 111, 116, 104, 101, 114, 32, 112, 97, 116, 104, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 39, 32, 116, 111, 32, 115, > 97, 118, 101, 32, 115, 110, 97, 112, 115, 104, 111, 116, 32, 111, 102, 32, > 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 118, 105, 101, 119, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, > 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, > 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, 101, 115, > 116, 105, 109, 97, 103, 101, 50, 100, 32, 52, 48, 48, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 48, 48, 32, 45, 114, 111, > 117, 110, 100, 32, 49, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 45, 119, 91, 48, 93, 32, 45, 49, > 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, > 32, 83, 101, 108, 101, 99, 116, 32, 115, 116, 97, 114, 116, 105, 110, 103, > 32, 112, 111, 105, 110, 116, 32, 80, 48, 34, 10, 45, 105, 102, 32, 123, > 33, 110, 97, 114, 103, 40, 36, 102, 105, 114, 115, 116, 95, 116, 105, 109, > 101, 41, 125, 32, 45, 45, 108, 91, 48, 93, 32, 45, 114, 50, 100, 121, > 32, 49, 50, 56, 32, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, > 48, 10, 45, 97, 108, 101, 114, 116, 32, 34, 91, 71, 92, 52, 55, 77, > 73, 67, 32, 77, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 93, > 34, 44, 92, 10, 34, 84, 104, 101, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 32, 100, 101, > 109, 111, 32, 105, 108, 108, 117, 115, 116, 114, 97, 116, 101, 115, 32, 104, > 111, 119, 32, 109, 105, 110, 105, 109, 97, 108, 32, 112, 97, 116, 104, 115, > 92, 110, 34, 92, 10, 34, 99, 97, 110, 32, 98, 101, 32, 99, 111, 109, > 112, 117, 116, 101, 100, 32, 105, 110, 32, 105, 109, 97, 103, 101, 115, 32, > 116, 111, 32, 100, 101, 116, 101, 99, 116, 32, 97, 110, 100, 32, 116, 114, > 97, 99, 107, 32, 101, 100, 103, 101, 32, 112, 111, 105, 110, 116, 115, 46, > 92, 110, 34, 92, 10, 34, 85, 115, 101, 32, 121, 111, 117, 114, 32, 109, > 111, 117, 115, 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 32, 100, > 101, 115, 105, 114, 101, 100, 32, 115, 116, 97, 114, 116, 105, 110, 103, 32, > 97, 110, 100, 32, 101, 110, 100, 105, 110, 103, 32, 112, 111, 105, 110, 116, > 115, 44, 92, 110, 34, 92, 10, 34, 97, 110, 100, 32, 115, 101, 101, 32, > 119, 104, 97, 116, 32, 105, 115, 32, 116, 104, 101, 32, 109, 105, 110, 105, > 109, 97, 108, 32, 112, 97, 116, 104, 32, 99, 111, 109, 112, 117, 116, 101, > 100, 32, 98, 101, 116, 119, 101, 101, 110, 32, 116, 104, 101, 115, 101, 32, > 112, 111, 105, 110, 116, 115, 46, 34, 44, 92, 10, 34, 83, 116, 97, 114, > 116, 32, 100, 101, 109, 111, 34, 10, 45, 114, 109, 32, 45, 101, 110, 100, > 108, 32, 102, 105, 114, 115, 116, 95, 116, 105, 109, 101, 61, 48, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 98, 91, 45, 49, 93, 32, 49, 32, 45, > 102, 91, 45, 49, 93, 32, 101, 120, 112, 40, 45, 105, 47, 49, 48, 41, > 10, 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 32, 45, 45, 115, 101, > 108, 101, 99, 116, 91, 48, 93, 32, 48, 32, 80, 48, 61, 64, 45, 49, > 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 48, 93, 32, 64, 123, 45, > 49, 44, 48, 44, 49, 125, 44, 51, 44, 51, 44, 48, 44, 49, 44, 50, > 53, 53, 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, 105, 112, 115, > 101, 91, 48, 93, 32, 64, 123, 45, 49, 44, 48, 44, 49, 125, 44, 51, > 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 109, 105, 110, 40, 36, > 80, 48, 41, 62, 61, 48, 125, 10, 112, 61, 49, 10, 45, 100, 111, 10, > 45, 119, 91, 48, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 91, > 71, 92, 52, 55, 77, 73, 67, 93, 32, 83, 101, 108, 101, 99, 116, 32, > 101, 110, 100, 105, 110, 103, 32, 112, 111, 105, 110, 116, 32, 80, 34, 36, > 112, 10, 45, 45, 115, 101, 108, 101, 99, 116, 91, 48, 93, 32, 48, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 83, 125, 125, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, > 105, 110, 101, 91, 48, 93, 32, 34, 83, 97, 118, 105, 110, 103, 32, 115, > 110, 97, 112, 115, 104, 111, 116, 46, 46, 46, 34, 44, 53, 44, 53, 44, > 49, 51, 44, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 53, 32, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 111, 91, 48, 93, 32, 103, 109, 105, 99, 95, 109, 105, 110, > 105, 109, 97, 108, 95, 112, 97, 116, 104, 46, 112, 110, 103, 10, 45, 119, > 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 115, 101, 10, 80, 49, 61, > 64, 45, 49, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 48, 93, 32, > 64, 123, 45, 49, 44, 48, 44, 49, 125, 44, 51, 44, 51, 44, 48, 44, > 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 48, 93, 32, 64, 123, 45, 49, 44, 48, 44, 49, > 125, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, > 70, 70, 70, 70, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, > 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 109, 105, > 110, 40, 36, 80, 49, 41, 62, 61, 48, 125, 10, 45, 45, 116, 101, 120, > 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, 32, 34, 80, 114, > 111, 99, 101, 115, 115, 105, 110, 103, 46, 46, 46, 34, 44, 53, 44, 53, > 44, 49, 51, 44, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, > 50, 53, 53, 32, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 45, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, > 104, 91, 49, 93, 32, 36, 80, 48, 44, 36, 80, 49, 44, 49, 10, 45, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 91, > 48, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 46, 53, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 48, 93, 44, 48, 32, 45, 111, > 114, 91, 48, 44, 45, 49, 93, 10, 80, 48, 61, 36, 80, 49, 32, 112, > 61, 123, 36, 112, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 119, 32, 48, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 112, 97, 99, 109, 97, > 110, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 112, 97, 99, 109, 97, 110, 32, 103, 97, 109, 101, 46, 10, 120, > 95, 112, 97, 99, 109, 97, 110, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 80, 97, 99, 109, 97, 110, > 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, > 104, 105, 115, 32, 105, 115, 32, 97, 32, 71, 92, 52, 55, 77, 73, 67, > 32, 105, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, > 111, 102, 32, 116, 104, 101, 32, 112, 97, 99, 109, 97, 110, 32, 103, 97, > 109, 101, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 32, 77, 111, 118, 101, 32, 116, 104, 101, 32, 112, 97, 99, 109, 97, > 110, 32, 116, 111, 32, 101, 97, 116, 32, 97, 108, 108, 32, 112, 97, 99, > 100, 111, 116, 115, 32, 111, 110, 32, 116, 104, 101, 32, 100, 105, 102, 102, > 101, 114, 101, 110, 116, 32, 108, 101, 118, 101, 108, 115, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, 32, 112, 97, > 99, 103, 117, 109, 32, 109, 97, 107, 101, 115, 32, 112, 97, 99, 109, 97, > 110, 32, 105, 110, 118, 105, 110, 99, 105, 98, 108, 101, 32, 102, 111, 114, > 32, 49, 48, 32, 115, 101, 99, 111, 110, 100, 115, 44, 92, 110, 10, 45, > 45, 45, 45, 32, 119, 104, 105, 99, 104, 32, 109, 101, 97, 110, 32, 112, > 97, 99, 109, 97, 110, 32, 99, 97, 110, 32, 101, 97, 116, 32, 103, 104, > 111, 115, 116, 115, 32, 100, 117, 114, 105, 110, 103, 32, 116, 104, 105, 115, > 32, 116, 105, 109, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 69, 97, > 116, 105, 110, 103, 32, 97, 32, 103, 104, 111, 115, 116, 32, 101, 97, 114, > 110, 115, 32, 49, 48, 48, 32, 112, 116, 115, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, 32, 99, 104, 101, 114, > 114, 121, 32, 101, 97, 114, 110, 115, 32, 49, 48, 32, 112, 116, 115, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, > 32, 115, 116, 114, 97, 119, 98, 101, 114, 114, 121, 32, 101, 97, 114, 110, > 115, 32, 49, 48, 48, 32, 112, 116, 115, 46, 92, 110, 10, 45, 45, 45, > 45, 32, 69, 97, 116, 105, 110, 103, 32, 97, 110, 32, 111, 114, 97, 110, > 103, 101, 32, 101, 97, 114, 110, 115, 32, 49, 48, 48, 48, 32, 112, 116, > 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 69, 97, 116, 105, 110, 103, > 32, 97, 32, 98, 97, 110, 97, 110, 97, 32, 101, 97, 114, 110, 115, 32, > 53, 48, 48, 48, 32, 112, 116, 115, 46, 92, 110, 10, 45, 45, 45, 45, > 92, 110, 10, 45, 45, 45, 45, 32, 65, 114, 114, 111, 119, 32, 107, 101, > 121, 115, 32, 116, 111, 32, 99, 111, 110, 116, 114, 111, 108, 32, 112, 97, > 99, 109, 97, 110, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, > 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 114, 109, > 10, 45, 109, 32, 34, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, > 115, 116, 95, 98, 97, 115, 101, 95, 103, 102, 120, 32, 58, 32, 51, 49, > 44, 49, 57, 32, 45, 99, 105, 114, 99, 108, 101, 91, 45, 49, 93, 32, > 49, 53, 44, 49, 53, 44, 49, 53, 44, 49, 44, 49, 32, 51, 49, 44, > 49, 50, 44, 49, 44, 49, 44, 39, 121, 60, 52, 43, 56, 42, 97, 98, > 115, 40, 99, 111, 115, 40, 120, 42, 48, 46, 51, 43, 48, 46, 50, 53, > 42, 112, 105, 42, 36, 34, 34, 49, 41, 41, 39, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 121, 34, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 52, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, > 116, 95, 115, 116, 97, 110, 100, 97, 114, 100, 95, 103, 102, 120, 32, 50, > 53, 53, 44, 48, 44, 48, 44, 36, 62, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 103, 104, 111, 115, 116, 48, 95, 36, 62, 10, 45, 95, 112, 97, > 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 115, 116, 97, 110, 100, > 97, 114, 100, 95, 103, 102, 120, 32, 48, 44, 50, 53, 53, 44, 50, 50, > 50, 44, 36, 62, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 104, 111, > 115, 116, 49, 95, 36, 62, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, > 103, 104, 111, 115, 116, 95, 115, 116, 97, 110, 100, 97, 114, 100, 95, 103, > 102, 120, 32, 50, 53, 53, 44, 49, 56, 52, 44, 50, 50, 50, 44, 36, > 62, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 50, > 95, 36, 62, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, > 115, 116, 95, 115, 116, 97, 110, 100, 97, 114, 100, 95, 103, 102, 120, 32, > 50, 53, 53, 44, 49, 56, 52, 44, 55, 49, 44, 36, 62, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 51, 95, 36, 62, 10, > 45, 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 97, > 102, 114, 97, 105, 100, 95, 103, 102, 120, 32, 36, 62, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 97, 95, 36, 62, 10, 45, > 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 98, 97, > 115, 101, 95, 103, 102, 120, 32, 36, 62, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 44, 49, 54, 44, 49, 44, 49, 44, 50, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 103, 104, 111, 115, 116, 109, 95, 36, 62, 10, 45, > 95, 112, 97, 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 115, 116, > 97, 110, 100, 97, 114, 100, 95, 103, 102, 120, 32, 48, 44, 48, 44, 48, > 44, 36, 62, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 104, 111, 115, > 116, 100, 95, 36, 62, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 112, > 97, 99, 109, 97, 110, 95, 103, 102, 120, 32, 36, 62, 32, 45, 110, 109, > 91, 45, 50, 93, 32, 112, 97, 99, 109, 97, 110, 95, 36, 62, 32, 45, > 110, 109, 91, 45, 49, 93, 32, 112, 97, 99, 109, 97, 110, 109, 95, 36, > 62, 10, 45, 100, 111, 110, 101, 10, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 103, 104, 111, 115, 116, 100, 95, 48, 93, 32, 48, 32, 45, > 33, 61, 91, 45, 49, 93, 32, 48, 32, 45, 110, 109, 91, 45, 49, 93, > 32, 103, 104, 111, 115, 116, 100, 109, 10, 45, 95, 112, 97, 99, 109, 97, > 110, 95, 99, 104, 101, 114, 114, 121, 95, 103, 102, 120, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 102, 114, 117, 105, 116, 48, 32, 45, 95, 112, 97, > 99, 109, 97, 110, 95, 115, 116, 114, 97, 119, 98, 101, 114, 114, 121, 95, > 103, 102, 120, 32, 45, 110, 109, 91, 45, 49, 93, 32, 102, 114, 117, 105, > 116, 49, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, 111, 114, 97, 110, > 103, 101, 95, 103, 102, 120, 32, 45, 110, 109, 91, 45, 49, 93, 32, 102, > 114, 117, 105, 116, 50, 32, 45, 95, 112, 97, 99, 109, 97, 110, 95, 98, > 97, 110, 97, 110, 97, 95, 103, 102, 120, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 102, 114, 117, 105, 116, 51, 10, 50, 48, 44, 50, 44, 49, 44, > 51, 44, 50, 48, 48, 32, 45, 110, 109, 91, 45, 49, 93, 32, 103, 97, > 116, 101, 10, 115, 99, 111, 114, 101, 48, 61, 34, 49, 48, 34, 32, 115, > 99, 111, 114, 101, 49, 61, 34, 49, 48, 48, 34, 32, 115, 99, 111, 114, > 101, 50, 61, 34, 49, 48, 48, 48, 34, 32, 115, 99, 111, 114, 101, 51, > 61, 34, 53, 48, 48, 48, 34, 32, 115, 99, 111, 114, 101, 52, 61, 34, > 65, 114, 103, 104, 33, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 53, > 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 123, 115, 99, 111, 114, > 101, 36, 62, 125, 44, 48, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 91, 45, 49, 93, 32, 48, 32, 45, 101, 120, 112, 97, 110, > 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 44, 48, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 45, 110, 109, 91, > 45, 49, 93, 32, 115, 99, 111, 114, 101, 109, 36, 62, 32, 45, 110, 109, > 91, 45, 50, 93, 32, 115, 99, 111, 114, 101, 36, 62, 10, 45, 100, 111, > 110, 101, 10, 116, 105, 109, 101, 52, 61, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 32, 116, 105, 109, 101, 51, 61, 50, 53, 53, 44, 50, > 53, 53, 44, 51, 50, 32, 116, 105, 109, 101, 50, 61, 50, 53, 53, 44, > 49, 50, 56, 44, 51, 50, 32, 116, 105, 109, 101, 49, 61, 50, 53, 53, > 44, 51, 50, 44, 51, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 49, > 49, 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 60, 34, 32, 115, > 34, 44, 48, 44, 48, 44, 50, 51, 44, 49, 44, 36, 123, 116, 105, 109, > 101, 123, 109, 105, 110, 40, 52, 44, 114, 111, 117, 110, 100, 40, 40, 36, > 60, 43, 49, 41, 47, 50, 41, 41, 125, 125, 32, 45, 110, 109, 91, 45, > 49, 93, 32, 116, 105, 109, 101, 36, 60, 32, 45, 100, 111, 110, 101, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, 101, 116, 32, 82, 101, > 97, 100, 121, 33, 34, 44, 48, 44, 48, 44, 51, 50, 44, 49, 44, 50, > 53, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, > 93, 32, 52, 44, 48, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, > 49, 93, 32, 56, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 110, 109, 91, 45, 50, > 93, 32, 103, 101, 116, 95, 114, 101, 97, 100, 121, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 103, 101, 116, 95, 114, 101, 97, 100, 121, 109, 10, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 34, 71, 97, 109, 101, 92, 110, 79, > 118, 101, 114, 33, 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 50, > 53, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, > 93, 32, 52, 44, 48, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, > 49, 93, 32, 56, 32, 45, 114, 91, 45, 50, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, 110, 109, 91, 45, 50, > 93, 32, 103, 97, 109, 101, 95, 111, 118, 101, 114, 32, 45, 110, 109, 91, > 45, 49, 93, 32, 103, 97, 109, 101, 95, 111, 118, 101, 114, 109, 10, 115, > 99, 111, 114, 101, 61, 48, 32, 108, 101, 118, 101, 108, 61, 45, 49, 32, > 108, 105, 118, 101, 115, 61, 51, 32, 105, 115, 95, 113, 117, 105, 116, 61, > 48, 10, 45, 100, 111, 10, 45, 105, 102, 32, 123, 36, 108, 101, 118, 101, > 108, 60, 48, 125, 10, 95, 114, 108, 101, 118, 101, 108, 61, 51, 51, 32, > 95, 103, 108, 101, 118, 101, 108, 61, 51, 51, 32, 95, 98, 108, 101, 118, > 101, 108, 61, 50, 53, 53, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, > 109, 97, 112, 95, 108, 101, 118, 101, 108, 123, 40, 40, 45, 36, 108, 101, > 118, 101, 108, 45, 49, 41, 37, 54, 41, 43, 49, 125, 32, 109, 119, 61, > 123, 119, 125, 32, 109, 104, 61, 123, 104, 125, 32, 109, 119, 50, 61, 123, > 105, 110, 116, 40, 119, 47, 50, 41, 125, 32, 109, 104, 50, 61, 123, 105, > 110, 116, 40, 104, 47, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, 108, > 101, 118, 101, 108, 60, 45, 54, 125, 32, 45, 114, 101, 112, 108, 97, 99, > 101, 91, 45, 49, 93, 32, 51, 44, 50, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 110, 109, 91, 45, 49, 93, 32, 109, 97, 112, 48, 32, 45, 105, > 91, 109, 97, 112, 93, 32, 91, 45, 49, 93, 10, 45, 45, 115, 104, 105, > 102, 116, 91, 109, 97, 112, 93, 32, 45, 49, 44, 48, 32, 45, 45, 115, > 104, 105, 102, 116, 91, 109, 97, 112, 93, 32, 48, 44, 45, 49, 32, 45, > 45, 115, 104, 105, 102, 116, 91, 109, 97, 112, 93, 32, 49, 44, 48, 32, > 45, 45, 115, 104, 105, 102, 116, 91, 109, 97, 112, 93, 32, 48, 44, 49, > 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 122, 32, 45, 33, 61, > 91, 45, 49, 93, 32, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, > 97, 110, 95, 103, 111, 10, 45, 45, 61, 61, 91, 109, 97, 112, 93, 32, > 49, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 61, 91, 45, > 49, 93, 32, 49, 44, 36, 109, 119, 50, 44, 36, 109, 104, 50, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 44, 91, > 45, 50, 93, 44, 51, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 102, > 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 50, 44, 48, 44, > 105, 102, 40, 105, 61, 61, 56, 44, 49, 44, 105, 102, 40, 105, 61, 61, > 49, 44, 50, 44, 105, 102, 40, 105, 61, 61, 52, 44, 51, 44, 105, 41, > 41, 41, 41, 39, 32, 45, 110, 109, 91, 45, 49, 93, 32, 112, 97, 116, > 104, 10, 45, 45, 61, 61, 91, 109, 97, 112, 93, 32, 50, 32, 112, 97, > 99, 100, 111, 116, 115, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 108, 101, 118, 101, 108, 61, 123, 45, 36, 108, > 101, 118, 101, 108, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, > 109, 97, 112, 93, 32, 39, 105, 102, 40, 105, 62, 61, 52, 44, 48, 44, > 105, 41, 39, 32, 45, 45, 61, 61, 91, 109, 97, 112, 93, 32, 49, 32, > 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, > 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, 48, 48, 37, 44, > 49, 54, 48, 48, 37, 32, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 57, 32, 45, 98, 91, 45, 49, 93, 32, 50, 10, 45, 103, 91, 45, > 49, 93, 32, 120, 121, 32, 45, 97, 98, 115, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 103, 101, 91, > 45, 49, 93, 32, 56, 48, 37, 32, 45, 98, 91, 45, 49, 93, 32, 50, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 115, 104, 114, > 105, 110, 107, 95, 120, 121, 91, 45, 49, 93, 32, 49, 54, 10, 45, 45, > 42, 91, 45, 49, 93, 32, 36, 95, 103, 108, 101, 118, 101, 108, 32, 45, > 45, 42, 91, 45, 50, 93, 32, 36, 95, 98, 108, 101, 118, 101, 108, 32, > 45, 42, 91, 45, 51, 93, 32, 36, 95, 114, 108, 101, 118, 101, 108, 32, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 49, 54, 44, 49, > 54, 44, 49, 44, 49, 44, 39, 120, 39, 32, 45, 45, 45, 91, 109, 97, > 112, 93, 32, 49, 32, 45, 109, 97, 120, 91, 45, 49, 93, 32, 48, 32, > 45, 42, 91, 45, 49, 93, 32, 49, 54, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 48, 48, 37, 44, 49, 54, 48, 48, 37, 10, 49, 54, 44, > 49, 54, 44, 49, 44, 49, 44, 39, 121, 39, 32, 45, 114, 91, 45, 51, > 44, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 50, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 49, 54, 44, 49, 54, 44, 49, 44, 51, 32, 45, 95, > 112, 97, 99, 109, 97, 110, 95, 112, 97, 99, 100, 111, 116, 115, 95, 103, > 102, 120, 32, 45, 95, 112, 97, 99, 109, 97, 110, 95, 112, 97, 99, 103, > 117, 109, 95, 103, 102, 120, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, > 32, 121, 10, 45, 119, 97, 114, 112, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 111, > 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 48, 48, 37, 44, 123, 104, 43, 50, 52, 125, 44, 49, 44, 51, 44, > 48, 44, 48, 44, 48, 44, 49, 10, 45, 116, 91, 45, 49, 93, 32, 34, > 76, 105, 118, 101, 115, 32, 58, 34, 44, 49, 48, 44, 48, 44, 50, 51, > 44, 49, 44, 50, 53, 53, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, > 99, 111, 114, 101, 32, 58, 34, 44, 123, 119, 45, 49, 52, 48, 125, 44, > 48, 44, 50, 51, 44, 49, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, > 108, 105, 118, 101, 115, 32, 45, 45, 114, 91, 112, 97, 99, 109, 97, 110, > 95, 50, 93, 32, 49, 50, 44, 49, 50, 44, 49, 44, 52, 44, 50, 32, > 45, 114, 91, 45, 49, 93, 32, 123, 49, 48, 48, 42, 36, 108, 105, 118, > 101, 115, 125, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 44, 48, 44, > 50, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 57, 48, > 44, 55, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 109, 91, 45, 49, 93, 32, 118, 105, 115, 117, 10, 45, > 119, 91, 118, 105, 115, 117, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, > 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 80, 97, 99, 109, 97, > 110, 34, 32, 45, 99, 117, 114, 115, 111, 114, 91, 48, 93, 32, 48, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 76, 101, 118, 101, 108, 32, > 34, 36, 108, 101, 118, 101, 108, 44, 48, 44, 48, 44, 53, 51, 44, 49, > 44, 49, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, > 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, > 93, 32, 52, 44, 48, 32, 40, 48, 44, 50, 53, 53, 94, 48, 44, 50, > 53, 53, 94, 48, 44, 48, 41, 32, 45, 45, 109, 97, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 50, 93, 32, 56, 10, 45, 110, 109, > 91, 45, 49, 93, 32, 108, 101, 118, 101, 108, 95, 78, 32, 45, 110, 109, > 91, 45, 50, 93, 32, 108, 101, 118, 101, 108, 109, 95, 78, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 52, 32, 120, 103, 36, 62, 61, 123, 49, 54, > 42, 36, 109, 119, 50, 125, 32, 121, 103, 36, 62, 61, 123, 49, 54, 42, > 36, 109, 104, 50, 43, 52, 42, 36, 62, 125, 32, 100, 103, 36, 62, 61, > 51, 32, 109, 103, 36, 62, 61, 48, 32, 45, 100, 111, 110, 101, 10, 120, > 112, 61, 123, 49, 54, 42, 49, 48, 125, 32, 121, 112, 61, 123, 49, 54, > 42, 50, 49, 125, 32, 100, 112, 61, 45, 49, 32, 112, 97, 99, 103, 117, > 109, 95, 116, 105, 109, 101, 114, 61, 45, 49, 32, 102, 114, 117, 105, 116, > 95, 116, 105, 109, 101, 114, 61, 64, 124, 32, 100, 121, 105, 110, 103, 95, > 112, 97, 99, 109, 97, 110, 61, 48, 32, 105, 115, 95, 103, 101, 116, 95, > 114, 101, 97, 100, 121, 61, 49, 10, 120, 115, 99, 111, 114, 101, 61, 48, > 32, 121, 115, 99, 111, 114, 101, 61, 48, 32, 110, 115, 99, 111, 114, 101, > 61, 48, 32, 111, 115, 99, 111, 114, 101, 61, 48, 10, 45, 100, 111, 10, > 116, 61, 123, 105, 110, 116, 40, 54, 42, 64, 124, 41, 37, 52, 125, 32, > 108, 101, 102, 116, 61, 123, 105, 102, 40, 36, 112, 97, 99, 103, 117, 109, > 95, 116, 105, 109, 101, 114, 62, 61, 48, 44, 49, 48, 45, 64, 124, 43, > 36, 112, 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, 44, 45, 49, > 41, 125, 10, 91, 118, 105, 115, 117, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 52, 10, 109, 103, 61, 36, 123, 109, 103, 36, 62, 125, 32, 120, > 103, 61, 36, 123, 120, 103, 36, 62, 125, 32, 121, 103, 61, 123, 36, 123, > 121, 103, 36, 62, 125, 43, 50, 52, 125, 10, 45, 105, 102, 32, 123, 36, > 109, 103, 61, 61, 48, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 103, > 104, 111, 115, 116, 36, 62, 95, 36, 116, 93, 44, 36, 120, 103, 44, 36, > 121, 103, 44, 48, 44, 48, 44, 49, 44, 91, 103, 104, 111, 115, 116, 109, > 95, 36, 116, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 109, 103, 61, > 61, 49, 125, 32, 116, 50, 61, 123, 105, 102, 40, 36, 108, 101, 102, 116, > 62, 55, 44, 36, 116, 44, 105, 102, 40, 36, 108, 101, 102, 116, 62, 51, > 44, 105, 110, 116, 40, 49, 50, 42, 64, 124, 41, 37, 52, 44, 105, 110, > 116, 40, 50, 52, 42, 64, 124, 41, 37, 52, 41, 41, 125, 32, 45, 106, > 91, 45, 49, 93, 32, 91, 103, 104, 111, 115, 116, 97, 95, 36, 116, 50, > 93, 44, 36, 120, 103, 44, 36, 121, 103, 44, 48, 44, 48, 44, 49, 44, > 91, 103, 104, 111, 115, 116, 109, 95, 36, 116, 93, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 109, 103, 61, 61, 50, 125, 32, 45, 106, 91, 45, 49, > 93, 32, 91, 103, 104, 111, 115, 116, 100, 95, 36, 116, 93, 44, 36, 120, > 103, 44, 36, 121, 103, 44, 48, 44, 48, 44, 48, 46, 56, 44, 91, 103, > 104, 111, 115, 116, 100, 109, 93, 10, 45, 101, 108, 115, 101, 32, 45, 106, > 91, 45, 49, 93, 32, 91, 103, 104, 111, 115, 116, 36, 62, 95, 36, 116, > 93, 44, 36, 120, 103, 44, 36, 121, 103, 44, 48, 44, 48, 44, 123, 36, > 109, 103, 45, 50, 125, 44, 91, 103, 104, 111, 115, 116, 109, 95, 36, 116, > 93, 32, 45, 106, 91, 45, 49, 93, 32, 91, 103, 104, 111, 115, 116, 100, > 95, 36, 116, 93, 44, 36, 120, 103, 44, 36, 121, 103, 44, 48, 44, 48, > 44, 49, 44, 91, 103, 104, 111, 115, 116, 100, 109, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 36, 100, > 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, 110, 10, 45, 95, 112, 97, > 99, 109, 97, 110, 95, 112, 97, 99, 109, 97, 110, 95, 103, 102, 120, 32, > 123, 36, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, 110, 47, 50, > 125, 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 50, 44, 45, 49, 93, > 32, 123, 57, 48, 42, 40, 97, 98, 115, 40, 36, 100, 112, 41, 45, 49, > 41, 125, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 36, > 120, 112, 44, 123, 50, 52, 43, 36, 121, 112, 125, 44, 48, 44, 48, 44, > 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 10, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, > 97, 110, 61, 123, 36, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, > 110, 43, 49, 125, 10, 45, 105, 102, 32, 123, 36, 100, 121, 105, 110, 103, > 95, 112, 97, 99, 109, 97, 110, 62, 54, 52, 125, 10, 45, 105, 102, 32, > 123, 36, 108, 105, 118, 101, 115, 33, 61, 49, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 106, 91, 45, 49, 93, 32, 91, 103, 97, 109, 101, 95, 111, > 118, 101, 114, 93, 44, 123, 40, 119, 45, 64, 123, 103, 97, 109, 101, 95, > 111, 118, 101, 114, 44, 119, 125, 41, 47, 50, 125, 44, 123, 49, 50, 43, > 40, 104, 45, 64, 123, 103, 97, 109, 101, 95, 111, 118, 101, 114, 44, 104, > 125, 41, 47, 50, 125, 44, 48, 44, 48, 44, 123, 109, 105, 110, 40, 49, > 44, 40, 36, 100, 121, 105, 110, 103, 95, 112, 97, 99, 109, 97, 110, 45, > 54, 52, 41, 47, 53, 48, 41, 125, 44, 91, 103, 97, 109, 101, 95, 111, > 118, 101, 114, 109, 93, 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, 97, > 110, 103, 108, 101, 91, 45, 49, 93, 32, 57, 48, 44, 55, 44, 49, 48, > 49, 44, 49, 56, 44, 49, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 112, > 97, 99, 109, 97, 110, 95, 36, 116, 44, 112, 97, 99, 109, 97, 110, 109, > 95, 36, 116, 93, 32, 123, 57, 48, 42, 40, 97, 98, 115, 40, 36, 100, > 112, 41, 45, 49, 41, 125, 32, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 50, 93, 44, 36, 120, 112, 44, 123, 50, 52, 43, 36, 121, 112, 125, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, > 108, 101, 102, 116, 62, 61, 48, 34, 32, 38, 38, 32, 34, 40, 36, 108, > 101, 102, 116, 62, 61, 53, 34, 32, 124, 124, 32, 34, 36, 116, 60, 61, > 50, 41, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 116, 105, 109, 101, > 123, 114, 111, 117, 110, 100, 40, 36, 108, 101, 102, 116, 41, 125, 93, 44, > 123, 40, 119, 45, 64, 123, 116, 105, 109, 101, 48, 44, 119, 125, 41, 47, > 50, 45, 49, 48, 125, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 116, 91, 45, 49, 93, 32, 36, 115, 99, > 111, 114, 101, 44, 123, 119, 45, 54, 53, 125, 44, 49, 44, 50, 50, 44, > 49, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 105, 115, 95, 103, > 101, 116, 95, 114, 101, 97, 100, 121, 125, 10, 45, 106, 91, 45, 49, 93, > 32, 91, 108, 101, 118, 101, 108, 95, 78, 93, 44, 123, 40, 119, 45, 64, > 123, 108, 101, 118, 101, 108, 95, 78, 44, 119, 125, 41, 47, 50, 125, 44, > 123, 49, 50, 43, 40, 104, 45, 49, 46, 53, 42, 64, 123, 108, 101, 118, > 101, 108, 95, 78, 44, 104, 125, 41, 47, 50, 125, 44, 48, 44, 48, 44, > 49, 44, 91, 108, 101, 118, 101, 108, 109, 95, 78, 93, 10, 45, 105, 102, > 32, 123, 105, 110, 116, 40, 64, 124, 42, 52, 41, 37, 50, 125, 32, 45, > 106, 91, 45, 49, 93, 32, 91, 103, 101, 116, 95, 114, 101, 97, 100, 121, > 93, 44, 123, 40, 119, 45, 64, 123, 103, 101, 116, 95, 114, 101, 97, 100, > 121, 44, 119, 125, 41, 47, 50, 125, 44, 123, 50, 52, 43, 40, 104, 43, > 64, 123, 103, 101, 116, 95, 114, 101, 97, 100, 121, 44, 104, 125, 41, 47, > 50, 125, 44, 48, 44, 48, 44, 49, 44, 91, 103, 101, 116, 95, 114, 101, > 97, 100, 121, 109, 93, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 111, 115, > 99, 111, 114, 101, 62, 48, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, > 115, 99, 111, 114, 101, 36, 110, 115, 99, 111, 114, 101, 93, 44, 36, 120, > 115, 99, 111, 114, 101, 44, 36, 121, 115, 99, 111, 114, 101, 44, 48, 44, > 48, 44, 36, 111, 115, 99, 111, 114, 101, 44, 91, 115, 99, 111, 114, 101, > 109, 36, 110, 115, 99, 111, 114, 101, 93, 44, 50, 53, 53, 32, 111, 115, > 99, 111, 114, 101, 61, 123, 36, 111, 115, 99, 111, 114, 101, 45, 48, 46, > 48, 52, 125, 32, 121, 115, 99, 111, 114, 101, 61, 123, 36, 121, 115, 99, > 111, 114, 101, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 106, > 91, 45, 49, 93, 32, 91, 103, 97, 116, 101, 93, 44, 49, 53, 56, 44, > 50, 50, 51, 44, 48, 44, 48, 44, 48, 46, 54, 10, 45, 119, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, > 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, > 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, > 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, > 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, > 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 52, 10, 120, 103, 61, 36, 123, 120, 103, 36, 62, 125, 32, 121, > 103, 61, 36, 123, 121, 103, 36, 62, 125, 32, 100, 103, 61, 36, 123, 100, > 103, 36, 62, 125, 32, 109, 103, 61, 36, 123, 109, 103, 36, 62, 125, 10, > 45, 105, 102, 32, 123, 109, 97, 120, 40, 97, 98, 115, 40, 36, 120, 103, > 45, 36, 120, 112, 41, 44, 97, 98, 115, 40, 36, 121, 103, 45, 36, 121, > 112, 41, 41, 60, 61, 56, 125, 10, 45, 105, 102, 32, 123, 36, 109, 103, > 61, 61, 48, 34, 32, 38, 38, 32, 34, 33, 36, 100, 121, 105, 110, 103, > 95, 112, 97, 99, 109, 97, 110, 125, 32, 100, 121, 105, 110, 103, 95, 112, > 97, 99, 109, 97, 110, 61, 49, 10, 120, 115, 99, 111, 114, 101, 61, 36, > 120, 112, 32, 121, 115, 99, 111, 114, 101, 61, 123, 36, 121, 112, 43, 49, > 50, 125, 32, 111, 115, 99, 111, 114, 101, 61, 49, 32, 110, 115, 99, 111, > 114, 101, 61, 52, 10, 45, 101, 108, 105, 102, 32, 123, 36, 109, 103, 61, > 61, 49, 125, 32, 109, 103, 61, 50, 32, 109, 103, 36, 62, 61, 36, 109, > 103, 32, 115, 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, 114, 101, 43, > 49, 48, 48, 125, 10, 120, 115, 99, 111, 114, 101, 61, 36, 120, 112, 32, > 121, 115, 99, 111, 114, 101, 61, 123, 36, 121, 112, 43, 49, 50, 125, 32, > 111, 115, 99, 111, 114, 101, 61, 49, 32, 110, 115, 99, 111, 114, 101, 61, > 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 109, 103, 62, 61, 50, 34, 32, 38, 38, 32, > 34, 40, 36, 120, 103, 62, 62, 52, 41, 61, 61, 36, 109, 119, 50, 34, > 32, 38, 38, 32, 34, 40, 36, 121, 103, 62, 62, 52, 41, 61, 61, 36, > 109, 104, 50, 125, 10, 109, 103, 61, 123, 36, 109, 103, 43, 48, 46, 48, > 49, 125, 10, 45, 105, 102, 32, 123, 36, 109, 103, 62, 61, 51, 125, 32, > 109, 103, 61, 48, 32, 120, 103, 61, 123, 36, 120, 103, 38, 45, 50, 125, > 32, 121, 103, 61, 123, 36, 121, 103, 38, 45, 50, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 109, 103, 36, 62, 61, 36, 109, 103, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 40, 36, 120, 103, 38, 49, > 53, 41, 34, 32, 38, 38, 32, 34, 33, 40, 36, 121, 103, 38, 49, 53, > 41, 125, 10, 40, 123, 63, 125, 44, 123, 63, 125, 44, 123, 63, 125, 44, > 123, 63, 125, 59, 48, 44, 49, 44, 50, 44, 51, 41, 10, 45, 105, 102, > 32, 123, 36, 109, 103, 60, 50, 125, 10, 45, 61, 91, 45, 49, 93, 32, > 123, 63, 40, 48, 46, 54, 44, 49, 41, 125, 44, 123, 105, 102, 40, 36, > 109, 103, 61, 61, 48, 44, 100, 88, 48, 61, 36, 120, 112, 45, 36, 120, > 103, 59, 100, 89, 48, 61, 36, 121, 112, 45, 36, 121, 103, 59, 105, 102, > 40, 97, 98, 115, 40, 100, 88, 48, 41, 62, 97, 98, 115, 40, 100, 89, > 48, 41, 44, 105, 102, 40, 100, 88, 48, 62, 48, 44, 48, 44, 50, 41, > 44, 105, 102, 40, 100, 89, 48, 62, 48, 44, 49, 44, 51, 41, 41, 44, > 92, 10, 100, 88, 49, 61, 36, 120, 112, 45, 36, 120, 103, 59, 100, 89, > 49, 61, 36, 121, 112, 45, 36, 121, 103, 59, 105, 102, 40, 97, 98, 115, > 40, 100, 88, 49, 41, 60, 97, 98, 115, 40, 100, 89, 49, 41, 44, 105, > 102, 40, 100, 88, 49, 62, 48, 44, 50, 44, 48, 41, 44, 105, 102, 40, > 100, 89, 49, 62, 48, 44, 51, 44, 49, 41, 41, 41, 125, 10, 45, 61, > 91, 45, 49, 93, 32, 48, 44, 123, 40, 36, 100, 103, 43, 50, 41, 37, > 52, 125, 10, 45, 105, 102, 32, 36, 105, 115, 95, 103, 101, 116, 95, 114, > 101, 97, 100, 121, 32, 45, 61, 91, 45, 49, 93, 32, 48, 46, 56, 44, > 64, 123, 112, 97, 116, 104, 44, 40, 123, 36, 120, 103, 62, 62, 52, 125, > 44, 123, 36, 121, 103, 62, 62, 52, 125, 41, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 61, 91, 45, 49, 93, 32, > 49, 44, 64, 123, 112, 97, 116, 104, 44, 40, 123, 36, 120, 103, 62, 62, > 52, 125, 44, 123, 36, 121, 103, 62, 62, 52, 125, 41, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 45, > 44, 120, 32, 45, 114, 101, 112, 101, 97, 116, 32, 52, 32, 100, 61, 123, > 105, 40, 36, 62, 44, 49, 41, 125, 32, 45, 105, 102, 32, 64, 123, 99, > 97, 110, 95, 103, 111, 44, 40, 123, 36, 120, 103, 62, 62, 52, 125, 44, > 123, 36, 121, 103, 62, 62, 52, 125, 44, 36, 100, 41, 125, 32, 100, 103, > 61, 36, 100, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, > 102, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 100, 103, 36, 62, 61, 36, 100, 10, 45, 101, 110, 100, 105, 102, 10, 117, > 61, 123, 68, 61, 36, 123, 100, 103, 36, 62, 125, 59, 40, 68, 61, 61, > 48, 41, 45, 40, 68, 61, 61, 50, 41, 125, 10, 118, 61, 123, 68, 61, > 36, 123, 100, 103, 36, 62, 125, 59, 40, 68, 61, 61, 49, 41, 45, 40, > 68, 61, 61, 51, 41, 125, 10, 120, 103, 36, 62, 61, 123, 40, 36, 120, > 103, 43, 36, 117, 42, 40, 49, 43, 40, 36, 109, 103, 61, 61, 48, 41, > 41, 41, 37, 40, 49, 54, 42, 36, 109, 119, 41, 125, 10, 121, 103, 36, > 62, 61, 123, 40, 36, 121, 103, 43, 36, 118, 42, 40, 49, 43, 40, 36, > 109, 103, 61, 61, 48, 41, 41, 41, 37, 40, 49, 54, 42, 36, 109, 104, > 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 119, 97, 105, 116, 32, 50, > 50, 10, 45, 105, 102, 32, 123, 33, 36, 100, 121, 105, 110, 103, 95, 112, > 97, 99, 109, 97, 110, 125, 10, 100, 61, 123, 105, 102, 40, 64, 123, 33, > 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 44, 49, 44, 105, > 102, 40, 64, 123, 33, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, > 44, 50, 44, 105, 102, 40, 64, 123, 33, 44, 65, 82, 82, 79, 87, 76, > 69, 70, 84, 125, 44, 51, 44, 105, 102, 40, 64, 123, 33, 44, 65, 82, > 82, 79, 87, 85, 80, 125, 44, 52, 44, 36, 100, 112, 41, 41, 41, 41, > 125, 10, 45, 105, 102, 32, 123, 33, 40, 36, 120, 112, 38, 49, 53, 41, > 34, 32, 38, 38, 32, 34, 33, 40, 36, 121, 112, 38, 49, 53, 41, 125, > 10, 105, 61, 64, 123, 109, 97, 112, 44, 40, 123, 36, 120, 112, 62, 62, > 52, 125, 44, 123, 36, 121, 112, 62, 62, 52, 125, 41, 125, 10, 45, 105, > 102, 32, 123, 36, 105, 61, 61, 50, 125, 32, 115, 99, 111, 114, 101, 61, > 123, 36, 115, 99, 111, 114, 101, 43, 49, 48, 125, 32, 112, 97, 99, 100, > 111, 116, 115, 61, 123, 36, 112, 97, 99, 100, 111, 116, 115, 45, 49, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 105, 61, 61, 51, 125, 32, 112, > 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, 61, 64, 124, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 52, 32, 45, 105, 102, 32, 123, 33, 36, > 123, 109, 103, 36, 62, 125, 125, 32, 109, 103, 36, 62, 61, 49, 32, 100, > 103, 36, 62, 61, 123, 40, 36, 123, 100, 103, 36, 62, 125, 43, 50, 41, > 37, 52, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 105, 62, 61, 52, 125, 32, 115, > 99, 111, 114, 101, 61, 123, 36, 115, 99, 111, 114, 101, 43, 36, 123, 115, > 99, 111, 114, 101, 123, 36, 105, 45, 52, 125, 125, 125, 32, 120, 115, 99, > 111, 114, 101, 61, 36, 120, 112, 32, 121, 115, 99, 111, 114, 101, 61, 123, > 36, 121, 112, 43, 49, 50, 125, 32, 111, 115, 99, 111, 114, 101, 61, 49, > 32, 110, 115, 99, 111, 114, 101, 61, 123, 36, 105, 45, 52, 125, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 61, 91, 109, 97, 112, 93, 32, 48, 44, > 123, 36, 120, 112, 62, 62, 52, 125, 44, 123, 36, 121, 112, 62, 62, 52, > 125, 10, 49, 54, 44, 49, 54, 44, 49, 44, 51, 32, 45, 106, 91, 118, > 105, 115, 117, 93, 32, 91, 45, 49, 93, 44, 36, 120, 112, 44, 123, 50, > 52, 43, 36, 121, 112, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 100, > 61, 123, 105, 102, 40, 64, 123, 99, 97, 110, 95, 103, 111, 44, 40, 123, > 36, 120, 112, 62, 62, 52, 125, 44, 123, 36, 121, 112, 62, 62, 52, 125, > 44, 123, 97, 98, 115, 40, 36, 100, 41, 45, 49, 125, 41, 125, 44, 36, > 100, 44, 36, 100, 112, 41, 125, 10, 100, 61, 123, 105, 102, 40, 64, 123, > 99, 97, 110, 95, 103, 111, 44, 40, 123, 36, 120, 112, 62, 62, 52, 125, > 44, 123, 36, 121, 112, 62, 62, 52, 125, 44, 123, 97, 98, 115, 40, 36, > 100, 41, 45, 49, 125, 41, 125, 44, 36, 100, 44, 45, 97, 98, 115, 40, > 36, 100, 112, 41, 41, 125, 10, 100, 112, 61, 36, 100, 10, 45, 101, 108, > 115, 101, 32, 100, 112, 61, 123, 105, 102, 40, 97, 98, 115, 40, 36, 100, > 45, 36, 100, 112, 41, 61, 61, 50, 44, 36, 100, 44, 36, 100, 112, 41, > 125, 10, 45, 101, 110, 100, 105, 102, 10, 105, 115, 95, 103, 101, 116, 95, > 114, 101, 97, 100, 121, 61, 123, 105, 102, 40, 36, 100, 112, 62, 48, 44, > 48, 44, 36, 105, 115, 95, 103, 101, 116, 95, 114, 101, 97, 100, 121, 41, > 125, 10, 117, 61, 123, 40, 36, 100, 112, 61, 61, 49, 41, 45, 40, 36, > 100, 112, 61, 61, 51, 41, 125, 10, 118, 61, 123, 40, 36, 100, 112, 61, > 61, 50, 41, 45, 40, 36, 100, 112, 61, 61, 52, 41, 125, 10, 120, 112, > 61, 123, 40, 36, 120, 112, 43, 50, 42, 36, 117, 41, 37, 40, 49, 54, > 42, 36, 109, 119, 41, 125, 10, 121, 112, 61, 123, 40, 36, 121, 112, 43, > 50, 42, 36, 118, 41, 37, 40, 49, 54, 42, 36, 109, 104, 41, 125, 10, > 45, 105, 102, 32, 123, 36, 112, 97, 99, 103, 117, 109, 95, 116, 105, 109, > 101, 114, 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 124, 62, 36, 112, > 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, 43, 49, 48, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 52, 32, 120, 103, 36, 62, 61, 123, > 36, 123, 120, 103, 36, 62, 125, 38, 45, 50, 125, 32, 121, 103, 36, 62, > 61, 123, 36, 123, 121, 103, 36, 62, 125, 38, 45, 50, 125, 32, 109, 103, > 36, 62, 61, 123, 105, 102, 40, 36, 123, 109, 103, 36, 62, 125, 61, 61, > 49, 44, 48, 44, 36, 123, 109, 103, 36, 62, 125, 41, 125, 32, 45, 100, > 111, 110, 101, 10, 112, 97, 99, 103, 117, 109, 95, 116, 105, 109, 101, 114, > 61, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 33, 36, 105, 115, 95, 103, 101, 116, 95, 114, 101, 97, 100, 121, 34, 32, > 38, 38, 32, 34, 40, 64, 124, 45, 36, 102, 114, 117, 105, 116, 95, 116, > 105, 109, 101, 114, 41, 62, 61, 49, 48, 125, 10, 120, 61, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 44, 64, 123, 109, 97, 112, 48, 44, 119, > 125, 41, 41, 125, 10, 121, 61, 123, 114, 111, 117, 110, 100, 40, 63, 40, > 48, 44, 64, 123, 109, 97, 112, 48, 44, 104, 125, 41, 41, 125, 10, 45, > 105, 102, 32, 123, 33, 64, 123, 109, 97, 112, 44, 40, 36, 120, 44, 36, > 121, 41, 125, 34, 32, 38, 38, 32, 34, 64, 123, 109, 97, 112, 48, 44, > 40, 36, 120, 44, 36, 121, 41, 125, 61, 61, 50, 125, 10, 110, 61, 123, > 109, 105, 110, 40, 51, 44, 105, 110, 116, 40, 97, 98, 115, 40, 103, 42, > 49, 46, 55, 41, 41, 41, 125, 32, 45, 61, 91, 109, 97, 112, 93, 32, > 123, 52, 43, 36, 110, 125, 44, 36, 120, 44, 36, 121, 32, 45, 106, 91, > 118, 105, 115, 117, 93, 32, 91, 102, 114, 117, 105, 116, 36, 110, 93, 44, > 123, 49, 54, 42, 36, 120, 125, 44, 123, 49, 54, 42, 36, 121, 43, 50, > 52, 125, 32, 102, 114, 117, 105, 116, 95, 116, 105, 109, 101, 114, 61, 64, > 124, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, 64, 33, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 44, 81, 125, 34, 32, 124, 124, 32, > 34, 64, 123, 33, 44, 69, 83, 67, 125, 125, 32, 105, 115, 95, 113, 117, > 105, 116, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, > 108, 101, 32, 123, 33, 36, 105, 115, 95, 113, 117, 105, 116, 34, 32, 38, > 38, 32, 34, 36, 112, 97, 99, 100, 111, 116, 115, 125, 10, 45, 105, 102, > 32, 36, 105, 115, 95, 113, 117, 105, 116, 32, 45, 98, 114, 101, 97, 107, > 10, 45, 101, 108, 105, 102, 32, 36, 112, 97, 99, 100, 111, 116, 115, 10, > 108, 105, 118, 101, 115, 61, 123, 36, 108, 105, 118, 101, 115, 45, 49, 125, > 10, 45, 101, 108, 115, 101, 10, 108, 101, 118, 101, 108, 61, 123, 45, 36, > 108, 101, 118, 101, 108, 45, 49, 125, 32, 45, 119, 97, 105, 116, 91, 48, > 93, 32, 45, 49, 10, 45, 114, 109, 91, 109, 97, 112, 48, 44, 109, 97, > 112, 44, 99, 97, 110, 95, 103, 111, 44, 112, 97, 116, 104, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 118, 105, 115, 117, 44, 108, > 101, 118, 101, 108, 95, 78, 44, 108, 101, 118, 101, 108, 109, 95, 78, 93, > 10, 45, 119, 104, 105, 108, 101, 32, 36, 108, 105, 118, 101, 115, 10, 45, > 114, 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 95, 112, 97, > 99, 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 115, 116, 97, 110, 100, > 97, 114, 100, 95, 103, 102, 120, 32, 58, 10, 45, 95, 112, 97, 99, 109, > 97, 110, 95, 103, 104, 111, 115, 116, 95, 98, 97, 115, 101, 95, 103, 102, > 120, 32, 36, 52, 32, 40, 48, 44, 36, 49, 94, 48, 44, 36, 50, 94, > 48, 44, 36, 51, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 49, 48, 44, 49, 49, 44, 51, > 44, 52, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 50, 48, 44, 49, 49, 44, 51, 44, > 52, 44, 48, 44, 49, 44, 50, 53, 53, 10, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 44, 49, 54, 44, 49, 44, 51, 44, 50, 32, 45, 112, 111, > 105, 110, 116, 91, 45, 49, 93, 32, 53, 44, 123, 55, 45, 40, 36, 52, > 62, 61, 50, 41, 125, 44, 48, 44, 49, 44, 49, 32, 45, 112, 111, 105, > 110, 116, 91, 45, 49, 93, 32, 49, 48, 44, 123, 55, 45, 40, 36, 52, > 62, 61, 50, 41, 125, 44, 48, 44, 49, 44, 49, 10, 95, 112, 97, 99, > 109, 97, 110, 95, 103, 104, 111, 115, 116, 95, 97, 102, 114, 97, 105, 100, > 95, 103, 102, 120, 32, 58, 10, 45, 95, 112, 97, 99, 109, 97, 110, 95, > 103, 104, 111, 115, 116, 95, 98, 97, 115, 101, 95, 103, 102, 120, 32, 36, > 49, 10, 45, 105, 102, 32, 123, 36, 49, 60, 50, 125, 32, 99, 111, 108, > 61, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 40, 48, 44, > 48, 94, 48, 44, 48, 94, 48, 44, 50, 48, 56, 41, 32, 45, 101, 108, > 115, 101, 32, 99, 111, 108, 61, 50, 53, 53, 44, 48, 44, 48, 32, 40, > 48, 44, 50, 52, 56, 94, 48, 44, 50, 52, 56, 94, 48, 44, 50, 52, > 56, 41, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 97, 112, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 114, 91, 45, 49, 93, 32, 49, 54, 44, 49, 54, 44, 49, 44, 51, > 44, 50, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 52, 44, 52, > 44, 54, 44, 54, 44, 49, 44, 36, 99, 111, 108, 44, 50, 53, 53, 32, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 52, 44, 54, 44, 54, 44, > 52, 44, 49, 44, 36, 99, 111, 108, 44, 50, 53, 53, 10, 45, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 57, 44, 52, 44, 49, 49, 44, 54, 44, > 49, 44, 36, 99, 111, 108, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 57, 44, 54, 44, 49, 49, 44, 52, 44, 49, 44, > 36, 99, 111, 108, 44, 50, 53, 53, 10, 45, 102, 91, 45, 49, 93, 32, > 39, 105, 102, 40, 121, 62, 61, 57, 38, 38, 121, 60, 61, 49, 48, 38, > 38, 120, 62, 61, 50, 38, 38, 120, 60, 61, 49, 51, 38, 38, 40, 40, > 105, 110, 116, 40, 40, 120, 43, 49, 41, 47, 50, 41, 43, 121, 41, 37, > 50, 41, 44, 97, 114, 103, 40, 99, 43, 49, 44, 36, 99, 111, 108, 41, > 44, 105, 41, 39, 10, 95, 112, 97, 99, 109, 97, 110, 95, 112, 97, 99, > 109, 97, 110, 95, 103, 102, 120, 32, 58, 10, 51, 50, 44, 51, 50, 44, > 49, 44, 49, 44, 39, 88, 61, 120, 45, 49, 53, 59, 89, 61, 121, 45, > 49, 53, 59, 65, 61, 97, 116, 97, 110, 50, 40, 89, 44, 88, 41, 59, > 82, 61, 115, 113, 114, 116, 40, 88, 94, 50, 43, 89, 94, 50, 41, 59, > 82, 60, 49, 53, 46, 53, 38, 38, 97, 98, 115, 40, 65, 41, 62, 48, > 46, 56, 42, 48, 46, 51, 51, 42, 36, 49, 39, 10, 40, 48, 44, 50, > 53, 53, 94, 48, 44, 50, 53, 53, 94, 48, 44, 48, 94, 48, 44, 50, > 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 54, 44, 49, 54, 44, 49, 44, 52, 44, 50, 32, 45, 115, 91, > 45, 49, 93, 32, 99, 44, 45, 51, 10, 95, 112, 97, 99, 109, 97, 110, > 95, 112, 97, 99, 100, 111, 116, 115, 95, 103, 102, 120, 32, 58, 10, 40, > 50, 53, 53, 94, 49, 56, 52, 94, 49, 53, 49, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 52, 44, 52, 44, 49, 44, 51, 32, 45, 114, 91, 45, > 49, 93, 32, 49, 54, 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, > 44, 48, 46, 53, 44, 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, > 95, 112, 97, 99, 103, 117, 109, 95, 103, 102, 120, 32, 58, 10, 49, 54, > 44, 49, 54, 44, 49, 44, 51, 32, 45, 99, 105, 114, 99, 108, 101, 91, > 45, 49, 93, 32, 55, 44, 55, 44, 55, 44, 49, 44, 50, 53, 53, 44, > 49, 50, 56, 44, 54, 52, 10, 95, 112, 97, 99, 109, 97, 110, 95, 99, > 104, 101, 114, 114, 121, 95, 103, 102, 120, 32, 58, 10, 40, 49, 50, 44, > 49, 50, 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 48, 44, 45, > 50, 44, 49, 44, 45, 56, 44, 45, 52, 44, 49, 44, 45, 54, 44, 45, > 50, 44, 49, 44, 48, 44, 49, 44, 45, 55, 44, 48, 44, 49, 44, 45, > 51, 44, 48, 44, 49, 44, 45, 51, 44, 45, 52, 44, 50, 44, 45, 51, > 44, 48, 44, 49, 44, 45, 51, 44, 45, 54, 44, 50, 44, 48, 44, 49, > 44, 45, 52, 44, 45, 53, 44, 50, 44, 48, 44, 45, 52, 44, 50, 44, > 45, 50, 44, 92, 10, 48, 44, 50, 44, 51, 44, 45, 50, 44, 50, 44, > 48, 44, 45, 54, 44, 50, 44, 48, 44, 45, 50, 44, 50, 44, 51, 44, > 50, 44, 48, 44, 45, 54, 44, 50, 44, 45, 50, 44, 45, 51, 44, 50, > 44, 48, 44, 50, 44, 51, 44, 45, 52, 44, 50, 44, 45, 54, 44, 45, > 50, 44, 50, 44, 51, 44, 45, 51, 44, 50, 44, 45, 55, 44, 45, 52, > 44, 50, 44, 45, 50, 44, 48, 41, 10, 45, 117, 110, 99, 111, 109, 112, > 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 40, 48, 44, > 48, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 49, 55, 51, 44, > 48, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, 50, 53, 53, 41, > 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 91, 45, 49, 93, > 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, 44, 49, 54, > 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 10, 95, 112, 97, 99, 109, 97, 110, 95, 115, 116, 114, 97, 119, 98, 101, > 114, 114, 121, 95, 103, 102, 120, 32, 58, 10, 40, 49, 49, 44, 49, 50, > 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, 53, 44, 48, 44, 51, 44, > 45, 55, 44, 45, 51, 44, 49, 44, 51, 44, 45, 51, 44, 49, 44, 45, > 51, 44, 45, 50, 44, 50, 44, 45, 53, 44, 49, 44, 45, 50, 44, 50, > 44, 48, 44, 45, 52, 44, 50, 44, 45, 51, 44, 49, 44, 45, 50, 44, > 50, 44, 51, 44, 45, 50, 44, 50, 44, 51, 44, 45, 53, 44, 50, 44, > 51, 44, 45, 54, 44, 50, 44, 51, 44, 92, 10, 50, 44, 51, 44, 45, > 49, 51, 44, 50, 44, 51, 44, 45, 50, 44, 50, 44, 48, 44, 50, 44, > 51, 44, 45, 50, 44, 50, 44, 51, 44, 45, 52, 44, 50, 44, 45, 50, > 44, 45, 57, 44, 50, 44, 45, 51, 44, 45, 50, 44, 50, 44, 51, 44, > 45, 50, 44, 50, 44, 51, 44, 45, 54, 44, 45, 53, 44, 50, 44, 45, > 56, 44, 48, 44, 50, 44, 45, 53, 44, 48, 41, 10, 45, 117, 110, 99, > 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, > 40, 48, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 49, > 55, 51, 44, 48, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, 50, > 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 91, > 45, 49, 93, 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, > 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 111, 114, 97, 110, > 103, 101, 95, 103, 102, 120, 32, 58, 10, 40, 49, 50, 44, 49, 51, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 53, 44, 48, 44, 49, 44, 48, > 44, 45, 50, 44, 49, 44, 45, 56, 44, 45, 54, 44, 49, 44, 45, 54, > 44, 48, 44, 49, 44, 51, 44, 45, 51, 44, 49, 44, 45, 52, 44, 45, > 51, 44, 50, 44, 49, 44, 45, 52, 44, 50, 44, 45, 51, 44, 45, 49, > 48, 44, 50, 44, 48, 44, 45, 54, 48, 44, 50, 44, 48, 44, 45, 49, > 48, 44, 50, 44, 45, 50, 44, 45, 49, 48, 44, 50, 44, 45, 52, 44, > 45, 54, 44, 50, 44, 45, 51, 44, 48, 41, 10, 45, 117, 110, 99, 111, > 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 40, > 48, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 94, 48, 44, 49, 55, > 51, 44, 49, 55, 51, 44, 50, 53, 53, 94, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, > 91, 45, 49, 93, 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 54, 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, > 44, 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 98, 97, 110, > 97, 110, 97, 95, 103, 102, 120, 32, 58, 10, 40, 57, 44, 49, 50, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 55, 44, 48, 44, 49, 44, 45, > 55, 44, 45, 50, 44, 49, 44, 45, 55, 44, 45, 51, 44, 49, 44, 45, > 53, 44, 48, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 53, 44, > 48, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 52, 44, 48, 44, > 49, 44, 48, 44, 45, 51, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, > 48, 44, 45, 51, 44, 92, 10, 49, 44, 45, 51, 44, 48, 44, 49, 44, > 48, 44, 49, 44, 50, 44, 49, 44, 45, 51, 44, 48, 44, 49, 44, 48, > 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 50, 44, 45, > 54, 44, 49, 44, 45, 51, 44, 45, 52, 44, 49, 44, 45, 53, 44, 48, > 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, > 101, 91, 45, 49, 93, 32, 40, 48, 44, 50, 53, 53, 44, 50, 53, 53, > 94, 48, 44, 49, 55, 51, 44, 50, 53, 53, 94, 48, 44, 48, 44, 50, > 53, 53, 41, 32, 45, 109, 97, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 114, 50, 100, 121, 91, > 45, 49, 93, 32, 49, 52, 32, 45, 114, 91, 45, 49, 93, 32, 49, 54, > 44, 49, 54, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 109, 97, 112, 95, > 108, 101, 118, 101, 108, 49, 32, 58, 10, 40, 49, 49, 44, 50, 56, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, 49, 44, 45, 53, > 44, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, 44, 51, 44, 45, 51, > 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, > 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, > 45, 49, 48, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 92, 10, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 49, 44, 45, 51, 44, 48, 44, 50, 44, 49, 44, 45, 53, 44, > 50, 44, 45, 52, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, > 45, 51, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, > 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 57, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, > 44, 48, 44, 45, 50, 44, 49, 44, 45, 51, 44, 48, 44, 49, 44, 50, > 44, 49, 44, 45, 51, 44, 48, 44, 49, 44, 45, 52, 44, 92, 10, 48, > 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 48, 44, 49, 44, 45, > 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 48, > 44, 45, 51, 44, 49, 44, 45, 51, 44, 48, 44, 50, 44, 45, 50, 44, > 48, 44, 49, 44, 45, 52, 44, 45, 51, 44, 49, 44, 50, 44, 45, 53, > 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, 53, > 44, 50, 44, 45, 50, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 54, 44, 49, 44, 50, > 44, 45, 51, 44, 49, 44, 50, 44, 92, 10, 45, 52, 44, 49, 44, 45, > 57, 44, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, > 44, 45, 51, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, > 51, 44, 49, 44, 50, 44, 49, 44, 45, 51, 44, 50, 44, 45, 50, 44, > 49, 44, 51, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, > 52, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 45, 52, 44, 49, 44, 45, 49, 48, 44, 50, 44, 45, 49, 49, 44, > 49, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, > 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, 114, 114, 111, 114, 91, > 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, 49, > 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, > 95, 114, 108, 101, 118, 101, 108, 61, 51, 51, 32, 95, 103, 108, 101, 118, > 101, 108, 61, 51, 51, 32, 95, 98, 108, 101, 118, 101, 108, 61, 50, 53, > 53, 10, 95, 112, 97, 99, 109, 97, 110, 95, 109, 97, 112, 95, 108, 101, > 118, 101, 108, 50, 32, 58, 10, 40, 49, 49, 44, 50, 56, 44, 49, 44, > 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, 49, 44, 45, 49, 48, 44, > 50, 44, 49, 44, 51, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, > 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, > 44, 50, 44, 49, 44, 45, 50, 44, 50, 44, 49, 44, 50, 44, 49, 44, > 45, 53, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, > 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 49, 44, 92, 10, 50, 44, 45, 50, 44, 49, 44, 45, 53, 44, 50, > 44, 49, 44, 45, 51, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 45, > 53, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, > 44, 45, 53, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 53, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, > 44, 49, 44, 45, 51, 44, 50, 44, 49, 44, 45, 52, 44, 45, 51, 44, > 49, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, > 44, 45, 53, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, > 92, 10, 45, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 50, 44, 48, > 44, 49, 44, 45, 50, 44, 45, 53, 44, 49, 44, 50, 44, 49, 44, 48, > 44, 45, 51, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, 50, 44, 49, > 44, 45, 52, 44, 45, 51, 44, 49, 44, 45, 51, 44, 50, 44, 45, 51, > 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, > 49, 44, 45, 51, 44, 50, 44, 45, 50, 44, 48, 44, 49, 44, 45, 50, > 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 52, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 92, 10, > 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 55, 44, 50, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 45, > 51, 44, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, 44, 51, 44, 49, > 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 49, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 45, 57, 44, 50, 44, 45, 49, 50, 44, 49, 41, 10, 45, 117, 110, > 99, 111, 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, > 32, 45, 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, > 45, 122, 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, > 108, 61, 50, 48, 48, 32, 95, 103, 108, 101, 118, 101, 108, 61, 51, 51, > 32, 95, 98, 108, 101, 118, 101, 108, 61, 51, 51, 10, 95, 112, 97, 99, > 109, 97, 110, 95, 109, 97, 112, 95, 108, 101, 118, 101, 108, 51, 32, 58, > 10, 40, 49, 49, 44, 50, 56, 44, 49, 44, 49, 44, 48, 44, 48, 44, > 45, 49, 49, 44, 49, 44, 45, 54, 44, 48, 44, 49, 44, 45, 52, 44, > 50, 44, 45, 53, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 56, 44, > 49, 44, 48, 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 51, 44, 45, > 56, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 53, 44, 49, 44, > 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 53, 44, > 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 49, > 44, 45, 53, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 92, 10, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, 49, 44, > 50, 44, 45, 50, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 48, 44, > 49, 44, 45, 50, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 52, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 45, 52, > 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, > 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 45, 51, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 48, 44, 49, > 44, 92, 10, 45, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, > 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 49, 44, 50, 44, 49, 44, 45, 54, 44, 48, 44, 49, 44, > 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 48, 44, 45, 50, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 45, 50, 44, 48, 44, > 49, 44, 45, 54, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 51, 44, 45, 51, 44, > 50, 44, 92, 10, 49, 44, 45, 51, 44, 50, 44, 48, 44, 45, 51, 44, > 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, 44, 49, > 44, 51, 44, 45, 50, 44, 50, 44, 49, 44, 45, 53, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 51, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 49, > 48, 44, 50, 44, 45, 49, 49, 44, 49, 41, 10, 45, 117, 110, 99, 111, > 109, 112, 114, 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 45, > 45, 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 122, > 91, 45, 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, 108, 61, > 51, 51, 32, 95, 103, 108, 101, 118, 101, 108, 61, 50, 48, 48, 32, 95, > 98, 108, 101, 118, 101, 108, 61, 50, 53, 53, 10, 95, 112, 97, 99, 109, > 97, 110, 95, 109, 97, 112, 95, 108, 101, 118, 101, 108, 52, 32, 58, 10, > 40, 49, 49, 44, 50, 56, 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, > 57, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, 55, 44, 50, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 50, 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, 51, 44, 50, 44, > 51, 44, 45, 51, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 45, 50, > 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, > 44, 50, 44, 92, 10, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 45, 55, 44, 50, > 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 45, 52, 44, 50, 44, 49, 44, 50, > 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 49, 44, 45, 55, 44, 50, 44, 45, 50, 44, > 49, 44, 50, 44, 45, 51, 44, 49, 44, 45, 49, 48, 44, 48, 44, 49, > 44, 45, 53, 44, 45, 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, > 45, 53, 44, 48, 44, 49, 44, 92, 10, 45, 49, 48, 44, 48, 44, 49, > 44, 45, 50, 44, 45, 51, 44, 49, 44, 45, 53, 44, 45, 54, 44, 49, > 44, 45, 56, 44, 48, 44, 49, 44, 50, 44, 45, 57, 44, 48, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 45, 50, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, > 44, 49, 44, 45, 49, 48, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 51, 44, 48, 44, > 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 92, 10, 45, 50, 44, > 49, 44, 50, 44, 48, 44, 45, 51, 44, 49, 44, 45, 51, 44, 50, 44, > 51, 44, 45, 52, 44, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, 50, 44, > 49, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, 45, > 50, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, 45, > 55, 44, 50, 44, 49, 44, 45, 50, 44, 45, 57, 44, 49, 44, 45, 50, > 44, 48, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 114, 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, 114, 114, 111, 114, > 91, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, > 10, 95, 114, 108, 101, 118, 101, 108, 61, 50, 48, 48, 32, 95, 103, 108, > 101, 118, 101, 108, 61, 50, 48, 48, 32, 95, 98, 108, 101, 118, 101, 108, > 61, 51, 51, 10, 95, 112, 97, 99, 109, 97, 110, 95, 109, 97, 112, 95, > 108, 101, 118, 101, 108, 53, 32, 58, 10, 40, 49, 49, 44, 50, 56, 44, > 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, 49, 44, 45, 55, > 44, 50, 44, 49, 44, 45, 50, 44, 50, 44, 49, 44, 51, 44, 45, 53, > 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, 50, 44, > 45, 53, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 50, 44, 49, 44, 45, 55, 44, 50, 44, 45, 50, 44, 49, 44, 45, 51, > 44, 50, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 50, > 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 50, 44, 92, 10, 45, 51, > 44, 49, 44, 50, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, 45, 54, > 44, 50, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, > 48, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 51, 44, > 49, 44, 48, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 45, 56, 44, > 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, 49, 44, 48, > 44, 45, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, > 44, 48, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, > 50, 44, 45, 52, 44, 48, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, > 92, 10, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, > 44, 48, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 45, 56, 44, 48, > 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 48, 44, 45, 51, 44, 49, > 44, 48, 44, 45, 50, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 45, > 51, 44, 50, 44, 45, 52, 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, > 44, 50, 44, 45, 54, 44, 49, 44, 50, 44, 49, 44, 50, 44, 49, 44, > 50, 44, 45, 52, 44, 49, 44, 51, 44, 45, 50, 44, 50, 44, 49, 44, > 45, 53, 44, 50, 44, 48, 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, > 50, 44, 45, 51, 44, 92, 10, 49, 44, 50, 44, 45, 50, 44, 49, 44, > 45, 53, 44, 50, 44, 49, 44, 45, 51, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, 45, 52, > 44, 49, 44, 50, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 50, 44, > 45, 52, 44, 49, 44, 45, 53, 44, 50, 44, 49, 44, 45, 52, 44, 50, > 44, 45, 49, 49, 44, 49, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, > 101, 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, > 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, 108, 61, 50, 48, 48, > 32, 95, 103, 108, 101, 118, 101, 108, 61, 50, 53, 53, 32, 95, 98, 108, > 101, 118, 101, 108, 61, 51, 51, 10, 95, 112, 97, 99, 109, 97, 110, 95, > 109, 97, 112, 95, 108, 101, 118, 101, 108, 54, 32, 58, 10, 40, 49, 49, > 44, 50, 56, 44, 49, 44, 49, 44, 48, 44, 48, 44, 45, 49, 50, 44, > 49, 44, 45, 49, 48, 44, 50, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 50, 44, 45, 55, 44, 49, 44, 51, 44, 45, 57, 44, 50, 44, 45, > 53, 44, 49, 44, 50, 44, 45, 54, 44, 49, 44, 45, 49, 48, 44, 50, > 44, 49, 44, 50, 44, 45, 52, 44, 49, 44, 48, 44, 45, 53, 44, 49, > 44, 50, 44, 49, 44, 45, 56, 44, 48, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 45, 51, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 48, 44, > 50, 44, 49, 44, 48, 44, 49, 44, 45, 54, 44, 50, 44, 49, 44, 50, > 44, 92, 10, 45, 50, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 49, > 44, 48, 44, 45, 51, 44, 49, 44, 50, 44, 49, 44, 45, 50, 44, 48, > 44, 50, 44, 49, 44, 45, 52, 44, 48, 44, 49, 44, 50, 44, 49, 44, > 48, 44, 49, 44, 50, 44, 45, 50, 44, 45, 50, 44, 49, 44, 48, 44, > 49, 44, 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, > 49, 44, 45, 50, 44, 48, 44, 49, 44, 50, 44, 49, 44, 48, 44, 49, > 44, 50, 44, 49, 44, 48, 44, 49, 44, 45, 50, 44, 48, 44, 49, 44, > 50, 44, 49, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 45, 52, 44, > 49, 44, 50, 44, 92, 10, 49, 44, 45, 50, 44, 48, 44, 50, 44, 49, > 44, 45, 52, 44, 48, 44, 49, 44, 50, 44, 45, 50, 44, 48, 44, 49, > 44, 50, 44, 45, 50, 44, 49, 44, 48, 44, 45, 50, 44, 49, 44, 48, > 44, 50, 44, 49, 44, 48, 44, 49, 44, 45, 54, 44, 50, 44, 49, 44, > 50, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 48, 44, 45, 52, 44, > 49, 44, 50, 44, 49, 44, 45, 56, 44, 48, 44, 49, 44, 50, 44, 45, > 52, 44, 49, 44, 48, 44, 45, 51, 44, 49, 44, 48, 44, 49, 44, 45, > 49, 48, 44, 50, 44, 45, 53, 44, 49, 44, 50, 44, 45, 54, 44, 49, > 44, 51, 44, 45, 57, 44, 92, 10, 50, 44, 49, 44, 50, 44, 45, 50, > 44, 49, 44, 50, 44, 45, 55, 44, 49, 44, 45, 49, 48, 44, 50, 44, > 45, 49, 49, 44, 49, 41, 10, 45, 117, 110, 99, 111, 109, 112, 114, 101, > 115, 115, 95, 114, 108, 101, 91, 45, 49, 93, 32, 45, 45, 109, 105, 114, > 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, > 32, 49, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 95, 114, 108, 101, 118, 101, 108, 61, 50, 53, 53, 32, > 95, 103, 108, 101, 118, 101, 108, 61, 49, 51, 48, 32, 95, 98, 108, 101, > 118, 101, 108, 61, 50, 51, 51, 10, 35, 64, 103, 109, 105, 99, 32, 120, > 95, 112, 97, 105, 110, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, > 97, 99, 116, 105, 118, 101, 32, 112, 97, 105, 110, 116, 101, 114, 46, 10, > 120, 95, 112, 97, 105, 110, 116, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 73, 110, 116, 101, 114, 97, > 99, 116, 105, 118, 101, 32, 112, 97, 105, 110, 116, 101, 114, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 85, 115, 101, 32, 109, 111, 117, 115, 101, 32, 116, 111, > 32, 115, 101, 108, 101, 99, 116, 32, 99, 111, 108, 111, 114, 32, 97, 110, > 100, 32, 98, 114, 117, 115, 104, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 76, 101, 102, 116, 32, 98, 117, 116, 116, 111, 110, 32, 100, 114, 97, 119, > 115, 32, 97, 32, 99, 111, 108, 111, 114, 101, 100, 32, 115, 116, 114, 111, > 107, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, > 32, 98, 117, 116, 116, 111, 110, 32, 102, 105, 108, 108, 115, 32, 97, 32, > 99, 111, 108, 111, 114, 101, 100, 32, 114, 101, 103, 105, 111, 110, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 65, 114, 114, 111, 119, 32, 107, 101, 121, > 115, 32, 111, 114, 32, 83, 80, 65, 67, 69, 32, 97, 110, 100, 32, 66, > 65, 67, 75, 83, 80, 65, 67, 69, 32, 116, 111, 32, 115, 119, 97, 112, > 92, 110, 10, 45, 45, 45, 45, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 97, 118, 97, 105, 108, 97, 98, 108, 101, 32, 105, 109, 97, 103, 101, 115, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 39, > 32, 116, 111, 32, 115, 97, 118, 101, 32, 115, 110, 97, 112, 115, 104, 111, > 116, 32, 111, 102, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 118, 105, 101, 119, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, > 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, > 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, 116, 111, 95, 114, > 103, 98, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 105, 91, > 48, 93, 32, 53, 49, 50, 44, 53, 49, 50, 44, 49, 44, 51, 44, 50, > 53, 53, 32, 45, 110, 109, 91, 48, 93, 32, 34, 91, 78, 101, 119, 32, > 105, 109, 97, 103, 101, 93, 34, 32, 45, 101, 110, 100, 105, 102, 10, 99, > 111, 108, 111, 114, 61, 48, 44, 48, 44, 48, 10, 115, 97, 116, 117, 114, > 97, 116, 105, 111, 110, 61, 49, 10, 98, 114, 117, 115, 104, 115, 105, 122, > 101, 61, 51, 10, 98, 114, 117, 115, 104, 111, 112, 97, 99, 105, 116, 121, > 61, 48, 10, 98, 114, 117, 115, 104, 97, 110, 103, 108, 101, 61, 57, 48, > 10, 98, 114, 117, 115, 104, 116, 104, 105, 99, 107, 110, 101, 115, 115, 61, > 49, 10, 105, 109, 97, 103, 101, 61, 48, 10, 114, 101, 102, 114, 101, 115, > 104, 95, 112, 97, 108, 101, 116, 116, 101, 61, 49, 10, 114, 101, 102, 114, > 101, 115, 104, 95, 105, 109, 97, 103, 101, 61, 49, 10, 114, 101, 102, 114, > 101, 115, 104, 95, 98, 114, 117, 115, 104, 61, 49, 10, 111, 120, 49, 61, > 45, 49, 10, 111, 121, 49, 61, 45, 49, 10, 49, 32, 49, 10, 45, 100, > 111, 10, 45, 105, 102, 32, 36, 114, 101, 102, 114, 101, 115, 104, 95, 112, > 97, 108, 101, 116, 116, 101, 10, 45, 114, 109, 91, 45, 50, 93, 32, 40, > 48, 44, 51, 53, 57, 59, 48, 44, 51, 53, 57, 94, 36, 115, 97, 116, > 117, 114, 97, 116, 105, 111, 110, 44, 36, 115, 97, 116, 117, 114, 97, 116, > 105, 111, 110, 59, 36, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 44, > 36, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 94, 49, 44, 49, 59, > 48, 44, 48, 41, 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, > 54, 52, 44, 49, 44, 51, 44, 51, 32, 45, 104, 115, 118, 50, 114, 103, > 98, 91, 45, 49, 93, 10, 40, 50, 53, 53, 59, 48, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 49, 54, 44, 64, 123, 45, 50, 44, 104, 125, 44, > 49, 44, 51, 44, 51, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 44, 48, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 123, 119, 125, 44, 49, > 54, 44, 49, 44, 51, 32, 45, 116, 91, 45, 49, 93, 32, 34, 83, 101, > 108, 101, 99, 116, 101, 100, 32, 99, 111, 108, 111, 114, 34, 44, 52, 44, > 50, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, > 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 56, 48, 44, 51, 44, 49, > 48, 48, 44, 49, 51, 44, 49, 44, 36, 99, 111, 108, 111, 114, 10, 45, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 56, 48, > 44, 51, 44, 49, 48, 48, 44, 49, 51, 44, 49, 44, 48, 120, 70, 70, > 70, 70, 70, 70, 70, 70, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 53, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 32, 45, > 119, 50, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, > 44, 34, 80, 97, 108, 101, 116, 116, 101, 34, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 45, 50, 10, 114, 101, 102, 114, 101, 115, 104, 95, 112, 97, > 108, 101, 116, 116, 101, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 36, 114, 101, 102, 114, 101, 115, 104, 95, 98, 114, 117, 115, > 104, 10, 45, 114, 109, 91, 45, 49, 93, 32, 40, 51, 50, 44, 54, 52, > 59, 54, 52, 44, 51, 50, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 54, 44, 49, 54, 44, 49, 44, 51, 44, 49, 32, 45, 114, 91, 45, 49, > 93, 32, 123, 56, 42, 52, 56, 125, 44, 123, 52, 42, 52, 56, 125, 44, > 49, 44, 51, 44, 48, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, 56, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 123, 52, 56, 42, 36, 62, 43, > 50, 52, 125, 44, 123, 52, 56, 42, 64, 123, 62, 44, 45, 50, 125, 43, > 50, 52, 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, 44, 123, 40, 50, > 42, 36, 62, 43, 49, 41, 42, 36, 98, 114, 117, 115, 104, 116, 104, 105, > 99, 107, 110, 101, 115, 115, 125, 44, 36, 98, 114, 117, 115, 104, 97, 110, > 103, 108, 101, 44, 123, 49, 45, 64, 123, 62, 44, 45, 50, 125, 47, 52, > 125, 44, 50, 53, 53, 10, 45, 100, 111, 110, 101, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 123, 36, 98, 114, 117, 115, 104, 115, 105, 122, 101, 42, 52, 56, 125, > 44, 123, 36, 98, 114, 117, 115, 104, 111, 112, 97, 99, 105, 116, 121, 42, > 52, 56, 125, 44, 92, 10, 123, 36, 98, 114, 117, 115, 104, 115, 105, 122, > 101, 42, 52, 56, 43, 52, 55, 125, 44, 123, 36, 98, 114, 117, 115, 104, > 111, 112, 97, 99, 105, 116, 121, 42, 52, 56, 43, 52, 55, 125, 44, 92, > 10, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 50, 53, > 53, 44, 49, 50, 56, 44, 49, 50, 56, 10, 123, 119, 125, 44, 49, 54, > 44, 49, 44, 51, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, > 44, 53, 48, 37, 44, 49, 48, 48, 37, 44, 53, 48, 37, 44, 49, 44, > 48, 120, 53, 53, 53, 53, 53, 53, 53, 53, 44, 49, 50, 56, 44, 54, > 52, 44, 49, 50, 56, 10, 98, 120, 61, 123, 36, 98, 114, 117, 115, 104, > 97, 110, 103, 108, 101, 42, 119, 47, 49, 56, 48, 125, 10, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 123, 36, 98, 120, > 45, 49, 54, 125, 44, 50, 48, 37, 44, 123, 36, 98, 120, 43, 49, 54, > 125, 44, 56, 48, 37, 44, 49, 44, 49, 50, 56, 10, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 123, 36, 98, 120, 45, 49, 54, 125, 44, 50, > 48, 37, 44, 123, 36, 98, 120, 43, 49, 54, 125, 44, 50, 48, 37, 44, > 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 123, 36, 98, 120, 43, 49, 54, 125, 44, 50, 48, 37, 44, 123, 36, 98, > 120, 43, 49, 54, 125, 44, 56, 48, 37, 44, 49, 44, 50, 53, 53, 10, > 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 123, 36, 98, 120, 45, 49, > 54, 125, 44, 56, 48, 37, 44, 123, 36, 98, 120, 43, 49, 54, 125, 44, > 56, 48, 37, 44, 49, 44, 54, 52, 32, 45, 108, 105, 110, 101, 91, 45, > 49, 93, 32, 123, 36, 98, 120, 45, 49, 54, 125, 44, 50, 48, 37, 44, > 123, 36, 98, 120, 45, 49, 54, 125, 44, 56, 48, 37, 44, 49, 44, 54, > 52, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 49, 54, > 44, 123, 104, 45, 49, 54, 125, 44, 49, 44, 51, 32, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 48, 44, 53, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 48, 120, 53, 53, 53, 53, 53, 53, 53, > 53, 44, 49, 50, 56, 44, 54, 52, 44, 49, 50, 56, 10, 98, 121, 61, > 123, 36, 98, 114, 117, 115, 104, 116, 104, 105, 99, 107, 110, 101, 115, 115, > 42, 40, 104, 45, 49, 54, 41, 125, 10, 45, 114, 101, 99, 116, 97, 110, > 103, 108, 101, 91, 45, 49, 93, 32, 50, 48, 37, 44, 123, 36, 98, 121, > 45, 49, 54, 125, 44, 56, 48, 37, 44, 123, 36, 98, 121, 43, 49, 54, > 125, 44, 49, 44, 49, 50, 56, 10, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 50, 48, 37, 44, 123, 36, 98, 121, 45, 49, 54, 125, 44, 56, > 48, 37, 44, 123, 36, 98, 121, 45, 49, 54, 125, 44, 49, 44, 50, 53, > 53, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 56, 48, 37, 44, > 123, 36, 98, 121, 45, 49, 54, 125, 44, 56, 48, 37, 44, 123, 36, 98, > 121, 43, 49, 54, 125, 44, 49, 44, 50, 53, 53, 10, 45, 108, 105, 110, > 101, 91, 45, 49, 93, 32, 50, 48, 37, 44, 123, 36, 98, 121, 45, 49, > 54, 125, 44, 50, 48, 37, 44, 123, 36, 98, 121, 43, 49, 54, 125, 44, > 49, 44, 54, 52, 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 50, > 48, 37, 44, 123, 36, 98, 121, 43, 49, 54, 125, 44, 56, 48, 37, 44, > 123, 36, 98, 121, 43, 49, 54, 125, 44, 49, 44, 54, 52, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 119, 51, 91, 45, 49, > 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, 34, 66, 114, 117, > 115, 104, 34, 10, 114, 101, 102, 114, 101, 115, 104, 95, 98, 114, 117, 115, > 104, 61, 48, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, > 114, 101, 102, 114, 101, 115, 104, 95, 105, 109, 97, 103, 101, 10, 45, 119, > 49, 91, 36, 105, 109, 97, 103, 101, 93, 32, 64, 123, 36, 105, 109, 97, > 103, 101, 44, 119, 125, 44, 64, 123, 36, 105, 109, 97, 103, 101, 44, 104, > 125, 44, 48, 44, 34, 73, 109, 97, 103, 101, 32, 34, 35, 36, 105, 109, > 97, 103, 101, 34, 32, 58, 32, 34, 64, 123, 36, 105, 109, 97, 103, 101, > 44, 98, 125, 46, 64, 123, 36, 105, 109, 97, 103, 101, 44, 120, 125, 10, > 114, 101, 102, 114, 101, 115, 104, 95, 105, 109, 97, 103, 101, 61, 48, 10, > 45, 101, 110, 100, 105, 102, 10, 120, 49, 61, 64, 123, 33, 49, 44, 120, > 125, 32, 121, 49, 61, 64, 123, 33, 49, 44, 121, 125, 10, 120, 50, 61, > 64, 123, 33, 50, 44, 120, 125, 32, 121, 50, 61, 64, 123, 33, 50, 44, > 121, 125, 10, 120, 51, 61, 64, 123, 33, 51, 44, 120, 125, 32, 121, 51, > 61, 64, 123, 33, 51, 44, 121, 125, 10, 45, 105, 102, 32, 123, 36, 120, > 49, 62, 61, 48, 125, 10, 45, 105, 102, 32, 123, 64, 123, 33, 49, 44, > 98, 125, 38, 49, 125, 10, 111, 120, 49, 61, 123, 105, 102, 40, 36, 111, > 120, 49, 60, 48, 44, 36, 120, 49, 44, 36, 111, 120, 49, 41, 125, 10, > 111, 121, 49, 61, 123, 105, 102, 40, 36, 111, 121, 49, 60, 48, 44, 36, > 121, 49, 44, 36, 111, 121, 49, 41, 125, 10, 100, 101, 108, 116, 97, 61, > 123, 109, 97, 120, 40, 97, 98, 115, 40, 36, 120, 49, 45, 36, 111, 120, > 49, 41, 44, 97, 98, 115, 40, 36, 121, 49, 45, 36, 111, 121, 49, 41, > 41, 125, 10, 114, 49, 61, 123, 50, 42, 36, 98, 114, 117, 115, 104, 115, > 105, 122, 101, 43, 49, 125, 10, 114, 50, 61, 123, 36, 114, 49, 42, 36, > 98, 114, 117, 115, 104, 116, 104, 105, 99, 107, 110, 101, 115, 115, 125, 10, > 100, 120, 61, 123, 50, 42, 40, 36, 120, 49, 45, 36, 111, 120, 49, 41, > 47, 109, 97, 120, 40, 49, 44, 36, 100, 101, 108, 116, 97, 41, 125, 10, > 100, 121, 61, 123, 50, 42, 40, 36, 121, 49, 45, 36, 111, 121, 49, 41, > 47, 109, 97, 120, 40, 49, 44, 36, 100, 101, 108, 116, 97, 41, 125, 10, > 111, 61, 123, 49, 45, 40, 36, 98, 114, 117, 115, 104, 111, 112, 97, 99, > 105, 116, 121, 47, 52, 41, 94, 48, 46, 48, 52, 125, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 109, 97, 120, 40, 49, 44, 40, 36, 100, 101, > 108, 116, 97, 43, 49, 41, 47, 50, 41, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 36, 105, 109, 97, 103, 101, 93, 32, 123, 36, 111, 120, > 49, 43, 36, 62, 42, 36, 100, 120, 125, 44, 123, 36, 111, 121, 49, 43, > 36, 62, 42, 36, 100, 121, 125, 44, 36, 114, 49, 44, 36, 114, 50, 44, > 36, 98, 114, 117, 115, 104, 97, 110, 103, 108, 101, 44, 36, 111, 44, 36, > 99, 111, 108, 111, 114, 10, 45, 100, 111, 110, 101, 10, 111, 120, 49, 61, > 36, 120, 49, 32, 111, 121, 49, 61, 36, 121, 49, 10, 114, 101, 102, 114, > 101, 115, 104, 95, 105, 109, 97, 103, 101, 61, 49, 10, 45, 101, 108, 115, > 101, 10, 111, 120, 49, 61, 45, 49, 32, 111, 121, 49, 61, 45, 49, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 49, 44, 98, 125, 38, 50, 125, 10, > 45, 102, 108, 111, 111, 100, 91, 36, 105, 109, 97, 103, 101, 93, 32, 36, > 120, 49, 44, 36, 121, 49, 44, 48, 44, 49, 48, 44, 48, 44, 49, 44, > 36, 99, 111, 108, 111, 114, 10, 114, 101, 102, 114, 101, 115, 104, 95, 105, > 109, 97, 103, 101, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, 79, > 87, 82, 73, 71, 72, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, > 51, 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 34, 32, 124, > 124, 32, 34, 92, 10, 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 85, > 80, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, > 79, 87, 85, 80, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, 44, > 65, 82, 82, 79, 87, 85, 80, 125, 34, 32, 124, 124, 32, 34, 92, 10, > 64, 123, 33, 49, 44, 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, 32, > 34, 64, 123, 33, 50, 44, 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, > 32, 34, 64, 123, 33, 51, 44, 83, 80, 65, 67, 69, 125, 125, 10, 105, > 109, 97, 103, 101, 61, 123, 40, 36, 105, 109, 97, 103, 101, 43, 49, 41, > 37, 40, 64, 35, 45, 50, 41, 125, 32, 114, 101, 102, 114, 101, 115, 104, > 95, 105, 109, 97, 103, 101, 61, 49, 10, 45, 101, 108, 105, 102, 32, 123, > 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 76, 69, 70, 84, 125, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, 79, 87, 76, > 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, 44, 65, > 82, 82, 79, 87, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 92, > 10, 64, 123, 33, 49, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, > 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 65, 82, 82, 79, 87, > 68, 79, 87, 78, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, 44, > 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, 34, 32, 124, 124, 32, 34, > 92, 10, 64, 123, 33, 49, 44, 66, 65, 67, 75, 83, 80, 65, 67, 69, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 50, 44, 66, 65, 67, 75, > 83, 80, 65, 67, 69, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 51, > 44, 66, 65, 67, 75, 83, 80, 65, 67, 69, 125, 125, 10, 105, 109, 97, > 103, 101, 61, 123, 40, 36, 105, 109, 97, 103, 101, 45, 49, 41, 37, 40, > 64, 35, 45, 50, 41, 125, 32, 114, 101, 102, 114, 101, 115, 104, 95, 105, > 109, 97, 103, 101, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 64, 123, 33, 49, 44, 83, 125, 32, 45, 111, 91, 36, 105, 109, > 97, 103, 101, 93, 32, 103, 109, 105, 99, 95, 112, 97, 105, 110, 116, 46, > 112, 110, 103, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 64, 123, 33, 50, 44, 98, 125, 34, 32, 38, 38, 32, 34, 36, 120, 50, > 62, 61, 48, 34, 32, 38, 38, 32, 34, 36, 121, 50, 60, 54, 52, 125, > 10, 45, 105, 102, 32, 123, 36, 120, 50, 62, 61, 50, 53, 54, 125, 32, > 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 61, 123, 49, 45, 36, 121, > 50, 47, 54, 51, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 120, 50, > 62, 61, 48, 125, 32, 99, 111, 108, 111, 114, 61, 64, 123, 45, 50, 44, > 40, 36, 120, 50, 44, 36, 121, 50, 44, 48, 44, 48, 41, 125, 44, 64, > 123, 45, 50, 44, 40, 36, 120, 50, 44, 36, 121, 50, 44, 48, 44, 49, > 41, 125, 44, 64, 123, 45, 50, 44, 40, 36, 120, 50, 44, 36, 121, 50, > 44, 48, 44, 50, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 114, 101, > 102, 114, 101, 115, 104, 95, 112, 97, 108, 101, 116, 116, 101, 61, 49, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, 51, > 44, 98, 125, 34, 32, 38, 38, 32, 34, 36, 120, 51, 62, 61, 48, 125, > 10, 45, 105, 102, 32, 123, 36, 120, 51, 60, 51, 56, 52, 34, 32, 38, > 38, 32, 34, 36, 121, 51, 62, 61, 49, 57, 50, 125, 32, 98, 114, 117, > 115, 104, 97, 110, 103, 108, 101, 61, 123, 36, 120, 51, 42, 49, 56, 48, > 47, 40, 119, 45, 49, 54, 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 120, 51, 62, 61, 51, 56, 52, 34, 32, 38, 38, 32, 34, 36, 121, > 51, 60, 49, 57, 50, 125, 32, 98, 114, 117, 115, 104, 116, 104, 105, 99, > 107, 110, 101, 115, 115, 61, 123, 36, 121, 51, 47, 40, 104, 45, 49, 54, > 41, 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 120, 51, 60, 51, 56, > 52, 34, 32, 38, 38, 32, 34, 36, 121, 51, 60, 49, 57, 50, 125, 32, > 98, 114, 117, 115, 104, 115, 105, 122, 101, 61, 123, 105, 110, 116, 40, 36, > 120, 51, 42, 56, 47, 40, 119, 45, 49, 54, 41, 41, 125, 32, 98, 114, > 117, 115, 104, 111, 112, 97, 99, 105, 116, 121, 61, 123, 105, 110, 116, 40, > 36, 121, 51, 42, 52, 47, 40, 104, 45, 49, 54, 41, 41, 125, 10, 45, > 101, 110, 100, 105, 102, 10, 114, 101, 102, 114, 101, 115, 104, 95, 98, 114, > 117, 115, 104, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 97, > 105, 116, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 123, 33, 49, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 49, 44, 81, 125, 34, 32, > 38, 38, 32, 34, 33, 64, 123, 33, 49, 44, 69, 83, 67, 125, 125, 10, > 45, 119, 49, 91, 93, 32, 48, 32, 45, 119, 50, 91, 93, 32, 48, 32, > 45, 119, 51, 91, 93, 32, 48, 32, 45, 114, 109, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, > 95, 112, 108, 97, 115, 109, 97, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 112, 108, 97, 115, > 109, 97, 32, 101, 102, 102, 101, 99, 116, 32, 100, 101, 109, 111, 46, 10, > 120, 95, 112, 108, 97, 115, 109, 97, 32, 58, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 80, 108, 97, 115, 109, > 97, 32, 101, 102, 102, 101, 99, 116, 32, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, > 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, > 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, > 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, > 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, > 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 34, 10, 45, 118, 32, 45, 32, 45, 108, 91, 93, 10, 78, 61, 56, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 10, 50, 53, 54, 44, 49, > 53, 48, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, > 49, 93, 32, 49, 44, 48, 44, 55, 32, 45, 110, 91, 45, 49, 93, 32, > 48, 44, 50, 53, 53, 10, 97, 109, 112, 61, 123, 63, 40, 45, 52, 48, > 44, 52, 48, 41, 125, 32, 102, 114, 101, 113, 61, 123, 114, 111, 117, 110, > 100, 40, 63, 40, 50, 44, 54, 41, 41, 125, 32, 100, 105, 114, 36, 62, > 61, 123, 105, 102, 40, 63, 60, 48, 46, 53, 44, 45, 49, 44, 49, 41, > 42, 114, 111, 117, 110, 100, 40, 63, 40, 49, 44, 50, 41, 41, 125, 10, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 36, > 97, 109, 112, 42, 99, 111, 115, 40, 121, 42, 50, 42, 112, 105, 42, 36, > 102, 114, 101, 113, 47, 104, 41, 39, 10, 45, 100, 111, 110, 101, 10, 123, > 119, 43, 50, 125, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 120, > 39, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, > 39, 89, 61, 40, 121, 45, 54, 48, 43, 53, 42, 99, 111, 115, 40, 120, > 47, 51, 48, 41, 43, 49, 48, 42, 115, 105, 110, 40, 120, 47, 49, 53, > 41, 41, 59, 105, 102, 40, 89, 60, 48, 124, 124, 89, 62, 61, 51, 50, > 44, 45, 49, 44, 89, 41, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 42, 42, > 32, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 71, 92, 52, 55, > 77, 73, 67, 44, 32, 97, 32, 112, 111, 119, 101, 114, 102, 117, 108, 32, > 105, 109, 97, 103, 101, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, > 32, 102, 114, 97, 109, 101, 119, 111, 114, 107, 32, 42, 42, 34, 44, 48, > 44, 48, 44, 51, 51, 44, 49, 44, 50, 53, 53, 10, 45, 98, 91, 45, > 49, 93, 32, 48, 46, 54, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 77, 61, 123, 119, 125, 10, 45, 119, 91, 93, 32, 123, > 49, 46, 53, 42, 64, 123, 48, 44, 119, 125, 125, 44, 123, 49, 46, 53, > 42, 64, 123, 48, 44, 104, 125, 125, 44, 48, 44, 34, 91, 71, 92, 52, > 55, 77, 73, 67, 93, 32, 80, 108, 97, 115, 109, 97, 32, 101, 102, 102, > 101, 99, 116, 34, 10, 116, 61, 48, 32, 116, 116, 61, 123, 45, 49, 46, > 53, 42, 64, 123, 48, 44, 119, 125, 125, 10, 45, 100, 111, 10, 116, 105, > 99, 61, 64, 124, 10, 97, 61, 123, 105, 110, 116, 40, 36, 116, 41, 125, > 32, 32, 32, 97, 50, 61, 123, 50, 42, 36, 97, 125, 32, 97, 50, 49, > 61, 123, 36, 97, 50, 43, 49, 125, 10, 98, 61, 123, 40, 36, 97, 43, > 49, 41, 37, 36, 78, 125, 32, 98, 50, 61, 123, 50, 42, 36, 98, 125, > 32, 98, 50, 49, 61, 123, 36, 98, 50, 43, 49, 125, 10, 45, 45, 119, > 97, 114, 112, 91, 36, 97, 50, 93, 32, 91, 36, 97, 50, 49, 93, 44, > 49, 44, 48, 44, 50, 10, 45, 45, 119, 97, 114, 112, 91, 36, 98, 50, > 93, 32, 91, 36, 98, 50, 49, 93, 44, 49, 44, 48, 44, 50, 10, 45, > 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 123, 36, 116, 45, 36, 97, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 105, 102, 116, 91, 36, 97, 50, 49, 93, 32, > 48, 44, 36, 123, 100, 105, 114, 36, 97, 125, 44, 48, 44, 48, 44, 50, > 10, 45, 115, 104, 105, 102, 116, 91, 36, 98, 50, 49, 93, 32, 48, 44, > 36, 123, 100, 105, 114, 36, 98, 125, 44, 48, 44, 48, 44, 50, 10, 45, > 105, 102, 32, 123, 105, 110, 116, 40, 36, 116, 43, 48, 46, 48, 48, 53, > 41, 62, 105, 110, 116, 40, 36, 116, 41, 125, 32, 100, 105, 114, 36, 97, > 61, 123, 105, 102, 40, 63, 60, 48, 46, 53, 44, 45, 49, 44, 49, 41, > 42, 114, 111, 117, 110, 100, 40, 63, 40, 49, 44, 51, 41, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 116, 61, 123, 40, 36, 116, 43, 40, 64, > 124, 45, 36, 116, 105, 99, 41, 41, 37, 36, 78, 125, 10, 45, 45, 122, > 91, 45, 50, 93, 32, 36, 116, 116, 44, 123, 36, 116, 116, 43, 119, 45, > 49, 43, 50, 125, 10, 45, 119, 97, 114, 112, 91, 45, 49, 93, 32, 91, > 45, 52, 93, 44, 48, 44, 48, 44, 48, 10, 45, 114, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 10, 45, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, > 32, 50, 53, 53, 10, 45, 106, 91, 45, 51, 93, 32, 91, 45, 49, 93, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 44, > 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 106, 91, 45, > 50, 93, 32, 91, 45, 49, 93, 44, 45, 50, 44, 45, 50, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 116, 116, 61, 123, 36, 116, 116, 43, 40, 64, 124, > 45, 36, 116, 105, 99, 41, 42, 50, 53, 48, 125, 10, 45, 105, 102, 32, > 123, 36, 116, 116, 62, 61, 36, 77, 125, 32, 116, 116, 61, 123, 45, 49, > 46, 53, 42, 64, 123, 48, 44, 119, 125, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 51, 42, 119, 125, 44, > 123, 51, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 49, 46, 53, 42, 119, 125, > 44, 123, 49, 46, 53, 42, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 119, 97, 105, 116, 32, 50, 48, > 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, > 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, 109, 91, 123, 45, 50, > 42, 36, 78, 45, 50, 125, 45, 45, 49, 93, 32, 45, 119, 91, 93, 32, > 48, 32, 45, 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, > 103, 98, 32, 58, 32, 95, 110, 98, 99, 111, 108, 111, 114, 115, 62, 61, > 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 116, 104, 101, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, 32, > 113, 117, 97, 110, 116, 105, 122, 97, 116, 105, 111, 110, 32, 100, 101, 109, > 111, 46, 10, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, > 98, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 123, 49, 61, 49, 54, 125, 41, 32, 38, 38, 32, 36, 49, > 62, 49, 34, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, > 45, 45, 45, 32, 82, 71, 66, 32, 81, 117, 97, 110, 116, 105, 122, 97, > 116, 105, 111, 110, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, 104, 105, 115, 32, 100, > 101, 109, 111, 32, 115, 104, 111, 119, 115, 32, 104, 111, 119, 32, 82, 71, > 66, 32, 99, 111, 108, 111, 114, 115, 32, 99, 97, 110, 32, 98, 101, 32, > 113, 117, 97, 110, 116, 105, 102, 105, 101, 100, 32, 117, 115, 105, 110, 103, > 92, 110, 10, 45, 45, 45, 45, 32, 116, 104, 101, 32, 107, 45, 109, 101, > 97, 110, 115, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, > 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, > 110, 32, 51, 100, 32, 118, 105, 101, 119, 32, 114, 111, 116, 97, 116, 101, > 115, 32, 116, 104, 101, 32, 99, 111, 108, 111, 114, 32, 99, 117, 98, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 109, > 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, 110, 32, 51, > 100, 32, 118, 105, 101, 119, 32, 116, 111, 103, 103, 108, 101, 115, 32, 99, > 111, 108, 111, 114, 115, 47, 99, 108, 117, 115, 116, 101, 114, 115, 32, 109, > 111, 100, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, > 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 111, 110, > 32, 105, 109, 97, 103, 101, 32, 116, 111, 103, 103, 108, 101, 115, 32, 100, > 105, 116, 104, 101, 114, 105, 110, 103, 32, 109, 111, 100, 101, 44, 92, 110, > 10, 45, 45, 45, 45, 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, > 32, 98, 117, 116, 116, 111, 110, 32, 111, 110, 32, 99, 111, 108, 111, 114, > 109, 97, 112, 32, 97, 100, 100, 115, 32, 97, 32, 114, 97, 110, 100, 111, > 109, 32, 99, 111, 108, 111, 114, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 82, 105, 103, 104, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, > 111, 110, 32, 111, 110, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 114, > 101, 109, 111, 118, 101, 115, 32, 97, 32, 99, 111, 108, 111, 114, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 82, 39, 32, 105, > 110, 105, 116, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, 116, > 104, 32, 114, 97, 110, 100, 111, 109, 32, 118, 97, 108, 117, 101, 115, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 85, 39, 32, > 105, 110, 105, 116, 32, 99, 111, 108, 111, 114, 109, 97, 112, 32, 119, 105, > 116, 104, 32, 117, 110, 105, 102, 111, 114, 109, 32, 115, 97, 109, 112, 108, > 105, 110, 103, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, > 39, 77, 39, 32, 105, 110, 105, 116, 32, 99, 111, 108, 111, 114, 109, 97, > 112, 32, 119, 105, 116, 104, 32, 109, 101, 100, 105, 97, 110, 45, 99, 117, > 116, 32, 97, 108, 103, 111, 114, 105, 116, 104, 109, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 80, 65, 67, 69, 39, 32, > 100, 111, 101, 115, 32, 97, 32, 115, 105, 110, 103, 108, 101, 32, 105, 116, > 101, 114, 97, 116, 105, 111, 110, 32, 111, 102, 32, 107, 45, 109, 101, 97, > 110, 115, 32, 97, 110, 100, 32, 112, 97, 117, 115, 101, 115, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 69, 78, 84, 69, 82, > 39, 32, 114, 117, 110, 115, 32, 107, 45, 109, 101, 97, 110, 115, 32, 97, > 108, 103, 111, 114, 105, 116, 104, 109, 46, 92, 110, 10, 45, 45, 45, 45, > 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, > 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, > 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, > 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, > 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, > 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, > 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 116, 101, 115, 116, > 105, 109, 97, 103, 101, 50, 100, 32, 51, 48, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, > 32, 45, 105, 102, 32, 123, 104, 62, 51, 48, 48, 125, 32, 45, 114, 50, > 100, 121, 32, 51, 48, 48, 32, 45, 114, 111, 117, 110, 100, 32, 49, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 110, 109, 91, 45, 49, 93, 32, 105, > 109, 103, 10, 45, 45, 114, 32, 123, 119, 42, 104, 125, 44, 49, 44, 49, > 44, 51, 44, 45, 49, 32, 45, 114, 91, 45, 49, 93, 32, 123, 109, 105, > 110, 40, 119, 44, 56, 49, 57, 50, 41, 125, 44, 49, 44, 49, 44, 51, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 111, 108, 111, 114, 115, 10, > 36, 49, 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 111, 117, 110, 100, 91, > 45, 49, 93, 32, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 101, > 110, 116, 114, 111, 105, 100, 115, 10, 45, 95, 120, 95, 113, 117, 97, 110, > 116, 105, 122, 101, 95, 114, 103, 98, 95, 51, 100, 32, 40, 49, 44, 48, > 44, 48, 44, 48, 59, 48, 44, 49, 44, 48, 44, 48, 59, 48, 44, 48, > 44, 49, 44, 48, 41, 32, 45, 110, 109, 91, 45, 49, 93, 32, 112, 111, > 115, 101, 51, 100, 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, > 101, 95, 114, 103, 98, 95, 116, 101, 120, 116, 32, 34, 67, 111, 108, 111, > 114, 115, 34, 44, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 48, 10, > 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, > 95, 116, 101, 120, 116, 32, 34, 67, 108, 117, 115, 116, 101, 114, 115, 34, > 44, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 49, 10, 45, 95, 120, > 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 95, 116, 101, > 120, 116, 32, 34, 68, 105, 116, 104, 101, 114, 105, 110, 103, 58, 32, 111, > 102, 102, 34, 44, 100, 105, 116, 104, 101, 114, 105, 110, 103, 48, 10, 45, > 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 95, > 116, 101, 120, 116, 32, 34, 68, 105, 116, 104, 101, 114, 105, 110, 103, 58, > 32, 111, 110, 34, 44, 100, 105, 116, 104, 101, 114, 105, 110, 103, 49, 10, > 45, 105, 102, 32, 123, 64, 123, 105, 109, 103, 44, 104, 125, 60, 51, 48, > 48, 125, 32, 45, 45, 114, 50, 100, 121, 91, 105, 109, 103, 93, 32, 51, > 48, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 91, 105, 109, 103, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 123, 119, 43, 51, 49, 53, 125, 44, > 51, 54, 53, 44, 49, 44, 51, 44, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 50, 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, > 49, 93, 32, 52, 44, 52, 44, 51, 48, 53, 44, 51, 48, 53, 44, 49, > 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 114, > 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 51, 48, 57, > 44, 52, 44, 123, 119, 45, 53, 125, 44, 51, 48, 53, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 114, 101, 99, > 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, 32, 52, 44, 51, 48, 57, > 44, 123, 119, 45, 53, 125, 44, 51, 54, 48, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 91, 45, 49, 93, 44, 91, > 45, 49, 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, > 49, 93, 32, 51, 49, 48, 44, 53, 44, 123, 119, 45, 54, 125, 44, 51, > 48, 53, 44, 49, 44, 49, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, > 101, 91, 45, 49, 93, 32, 53, 44, 51, 49, 48, 44, 123, 119, 45, 54, > 125, 44, 51, 54, 48, 44, 49, 44, 50, 10, 51, 48, 48, 44, 51, 48, > 48, 44, 49, 44, 49, 44, 39, 40, 121, 60, 60, 49, 49, 41, 43, 40, > 120, 60, 60, 50, 41, 43, 51, 39, 32, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 53, 44, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 118, 105, 115, 117, 10, 100, 105, 116, 104, 101, > 114, 105, 110, 103, 61, 48, 32, 99, 108, 117, 115, 116, 101, 114, 105, 110, > 103, 61, 48, 32, 112, 97, 117, 115, 101, 61, 49, 32, 115, 48, 61, 111, > 102, 102, 32, 115, 49, 61, 111, 110, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 49, 101, 49, 48, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, > 40, 36, 118, 105, 115, 117, 95, 51, 100, 41, 125, 10, 45, 45, 45, 91, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 50, 32, 45, 45, 43, > 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 50, 32, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 120, 32, 45, 112, 101, 114, 109, 117, > 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, 122, 32, 45, 121, 91, 45, > 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 10, 45, 106, > 91, 111, 98, 106, 51, 100, 93, 32, 91, 45, 49, 93, 44, 48, 44, 56, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 91, 111, 98, 106, 51, 100, 93, > 10, 45, 105, 102, 32, 36, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, > 10, 45, 105, 102, 32, 123, 64, 123, 99, 111, 108, 111, 114, 115, 44, 77, > 125, 60, 50, 53, 54, 125, 32, 45, 45, 105, 110, 100, 101, 120, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, > 115, 93, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, > 91, 99, 111, 108, 111, 114, 115, 44, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 99, 111, > 108, 111, 114, 115, 93, 32, 48, 32, 45, 62, 62, 91, 45, 49, 93, 32, > 56, 32, 45, 109, 97, 112, 91, 45, 49, 93, 32, 50, 32, 45, 112, 101, > 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 99, 120, 121, 122, 32, 45, > 121, 91, 45, 49, 93, 32, 45, 106, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 48, 44, 123, 64, 123, 45, 50, 44, 104, 125, 45, 36, 95, 78, > 45, 104, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 112, 112, 108, 121, 95, 112, 111, 115, 101, 51, 100, > 91, 45, 49, 93, 32, 64, 112, 111, 115, 101, 51, 100, 32, 51, 48, 48, > 44, 51, 48, 48, 44, 49, 44, 51, 32, 45, 111, 98, 106, 101, 99, 116, > 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, > 53, 48, 37, 44, 49, 48, 48, 44, 49, 44, 50, 44, 48, 44, 48, 44, > 51, 48, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 106, 91, 45, > 49, 93, 32, 91, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 36, 99, > 108, 117, 115, 116, 101, 114, 105, 110, 103, 93, 44, 50, 44, 48, 44, 48, > 44, 48, 44, 49, 44, 91, 109, 99, 108, 117, 115, 116, 101, 114, 105, 110, > 103, 36, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 93, 44, 50, 53, > 53, 10, 45, 110, 109, 91, 45, 49, 93, 32, 118, 105, 115, 117, 95, 51, > 100, 32, 45, 106, 91, 118, 105, 115, 117, 93, 32, 91, 118, 105, 115, 117, > 95, 51, 100, 93, 44, 53, 44, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 118, 105, 115, 117, > 95, 105, 109, 103, 41, 125, 10, 45, 45, 105, 110, 100, 101, 120, 91, 105, > 109, 103, 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 44, > 123, 48, 46, 55, 42, 36, 100, 105, 116, 104, 101, 114, 105, 110, 103, 125, > 44, 49, 32, 45, 105, 102, 32, 123, 104, 60, 51, 48, 48, 125, 32, 45, > 114, 50, 100, 121, 91, 45, 49, 93, 32, 51, 48, 48, 44, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 106, 91, 45, 49, 93, 32, 91, 100, 105, > 116, 104, 101, 114, 105, 110, 103, 36, 100, 105, 116, 104, 101, 114, 105, 110, > 103, 93, 44, 50, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 109, 100, > 105, 116, 104, 101, 114, 105, 110, 103, 36, 100, 105, 116, 104, 101, 114, 105, > 110, 103, 93, 44, 50, 53, 53, 10, 45, 110, 109, 91, 45, 49, 93, 32, > 118, 105, 115, 117, 95, 105, 109, 103, 32, 45, 106, 91, 118, 105, 115, 117, > 93, 32, 91, 118, 105, 115, 117, 95, 105, 109, 103, 93, 44, 51, 49, 48, > 44, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, > 110, 97, 114, 103, 40, 36, 118, 105, 115, 117, 95, 99, 101, 110, 116, 114, > 111, 105, 100, 115, 41, 125, 10, 45, 45, 108, 117, 109, 105, 110, 97, 110, > 99, 101, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, > 91, 45, 49, 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, > 44, 121, 32, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 43, 44, 120, > 32, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, 49, 32, 45, 114, 91, > 45, 49, 93, 32, 123, 64, 123, 118, 105, 115, 117, 44, 119, 125, 45, 49, > 48, 125, 44, 53, 48, 44, 49, 44, 51, 10, 48, 32, 45, 116, 91, 45, > 49, 93, 32, 34, 67, 111, 108, 111, 114, 115, 58, 32, 34, 64, 123, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 44, 50, 44, 48, 44, > 49, 54, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, > 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 50, 44, 50, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 10, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 118, 105, 115, 117, 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, > 32, 45, 106, 91, 118, 105, 115, 117, 93, 32, 91, 118, 105, 115, 117, 95, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 44, 53, 44, 51, 49, 48, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 108, 91, 118, 105, 115, 117, 93, > 10, 45, 119, 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 91, 71, 92, > 52, 55, 77, 73, 67, 93, 32, 82, 71, 66, 32, 113, 117, 97, 110, 116, > 105, 122, 97, 116, 105, 111, 110, 34, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, > 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, > 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, > 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 120, 61, > 123, 105, 110, 116, 40, 64, 123, 33, 44, 120, 125, 42, 64, 123, 118, 105, > 115, 117, 44, 119, 125, 47, 64, 123, 33, 44, 119, 125, 41, 125, 10, 121, > 61, 123, 105, 110, 116, 40, 64, 123, 33, 44, 121, 125, 42, 64, 123, 118, > 105, 115, 117, 44, 104, 125, 47, 64, 123, 33, 44, 104, 125, 41, 125, 10, > 98, 61, 64, 123, 33, 44, 98, 125, 10, 105, 61, 64, 123, 118, 105, 115, > 117, 44, 40, 36, 120, 44, 36, 121, 44, 48, 44, 51, 41, 125, 10, 45, > 105, 102, 32, 123, 36, 98, 38, 49, 34, 32, 38, 38, 32, 34, 36, 105, > 61, 61, 49, 125, 10, 100, 105, 116, 104, 101, 114, 105, 110, 103, 61, 123, > 33, 36, 100, 105, 116, 104, 101, 114, 105, 110, 103, 125, 32, 45, 114, 109, > 91, 118, 105, 115, 117, 95, 105, 109, 103, 93, 32, 45, 119, 97, 105, 116, > 32, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 98, 38, 49, 34, > 32, 38, 38, 32, 34, 36, 105, 61, 61, 50, 125, 10, 40, 64, 123, 45, > 82, 71, 66, 125, 41, 32, 45, 121, 91, 45, 49, 93, 32, 99, 32, 45, > 97, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 45, 49, 93, 32, > 120, 32, 32, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, > 114, 103, 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, > 51, 100, 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, > 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, > 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, > 115, 101, 61, 49, 32, 45, 119, 97, 105, 116, 32, 49, 48, 48, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 98, 38, 50, 34, 32, 38, 38, 32, 34, > 36, 105, 61, 61, 50, 34, 32, 38, 38, 32, 34, 64, 123, 99, 101, 110, > 116, 114, 111, 105, 100, 115, 44, 119, 125, 62, 50, 125, 10, 45, 114, 91, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 123, 64, 123, 99, 101, > 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 45, 49, 125, 32, 45, 95, > 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, 98, 95, 51, > 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 51, 100, 44, 118, 105, > 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, 95, 99, 101, 110, 116, > 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, 91, 99, 111, 108, 111, > 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, 115, 101, 61, 49, 32, > 45, 119, 97, 105, 116, 32, 49, 48, 48, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 98, 38, 50, 34, 32, 38, 38, 32, 34, 36, 105, 62, 61, 51, > 125, 10, 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 61, 123, 33, 36, > 99, 108, 117, 115, 116, 101, 114, 105, 110, 103, 125, 32, 45, 114, 109, 91, > 118, 105, 115, 117, 95, 51, 100, 93, 32, 45, 119, 97, 105, 116, 32, 45, > 49, 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 77, 125, 10, 45, > 45, 97, 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, > 32, 45, 99, 111, 108, 111, 114, 109, 97, 112, 91, 45, 49, 93, 32, 64, > 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 101, 110, 116, 114, 111, 105, > 100, 115, 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, > 114, 103, 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, > 51, 100, 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, > 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, > 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, > 115, 101, 61, 49, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, > 108, 105, 102, 32, 64, 123, 33, 44, 82, 125, 10, 45, 114, 97, 110, 100, > 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 114, 111, 117, 110, 100, 91, 99, 101, 110, 116, 114, 111, 105, > 100, 115, 93, 32, 49, 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, > 122, 101, 95, 114, 103, 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, > 115, 117, 95, 51, 100, 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, > 105, 115, 117, 95, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, > 97, 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, > 112, 97, 117, 115, 101, 61, 49, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 10, 45, 101, 108, 105, 102, 32, 64, 123, 33, 44, 85, 125, 10, 45, 117, > 110, 105, 102, 111, 114, 109, 95, 100, 105, 115, 116, 114, 105, 98, 117, 116, > 105, 111, 110, 32, 64, 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, > 119, 125, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, > 45, 114, 109, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, > 110, 109, 91, 45, 49, 93, 32, 99, 101, 110, 116, 114, 111, 105, 100, 115, > 10, 45, 95, 120, 95, 113, 117, 97, 110, 116, 105, 122, 101, 95, 114, 103, > 98, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 51, 100, > 44, 118, 105, 115, 117, 95, 105, 109, 103, 44, 118, 105, 115, 117, 95, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 97, 110, 100, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 112, 97, 117, 115, 101, > 61, 49, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 105, > 102, 32, 64, 123, 33, 44, 69, 78, 84, 69, 82, 125, 10, 112, 97, 117, > 115, 101, 61, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 98, 38, 49, > 34, 32, 38, 38, 32, 34, 36, 105, 62, 61, 51, 125, 10, 99, 111, 111, > 114, 100, 115, 61, 123, 64, 123, 118, 105, 115, 117, 44, 40, 36, 120, 44, > 36, 121, 44, 48, 44, 51, 41, 125, 45, 51, 125, 32, 117, 49, 61, 123, > 40, 40, 36, 99, 111, 111, 114, 100, 115, 62, 62, 50, 41, 38, 53, 49, > 49, 41, 45, 49, 53, 48, 125, 32, 118, 49, 61, 123, 40, 36, 99, 111, > 111, 114, 100, 115, 62, 62, 49, 49, 41, 45, 49, 53, 48, 125, 10, 45, > 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 36, 117, 48, 41, 125, 32, > 117, 48, 61, 36, 117, 49, 32, 118, 48, 61, 36, 118, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 117, 48, 33, 61, 36, > 117, 49, 34, 32, 38, 38, 32, 34, 36, 118, 48, 33, 61, 36, 118, 49, > 125, 10, 110, 48, 61, 123, 115, 113, 114, 116, 40, 40, 36, 117, 48, 41, > 94, 50, 43, 40, 36, 118, 48, 41, 94, 50, 41, 125, 10, 110, 117, 48, > 61, 123, 105, 102, 40, 36, 110, 48, 62, 49, 51, 53, 44, 36, 117, 48, > 42, 49, 51, 53, 47, 36, 110, 48, 44, 36, 117, 48, 41, 125, 32, 110, > 118, 48, 61, 123, 105, 102, 40, 36, 110, 48, 62, 49, 51, 53, 44, 36, > 118, 48, 42, 49, 51, 53, 47, 36, 110, 48, 44, 36, 118, 48, 41, 125, > 32, 110, 119, 48, 61, 123, 115, 113, 114, 116, 40, 109, 97, 120, 40, 48, > 44, 49, 56, 50, 50, 53, 45, 40, 36, 110, 117, 48, 41, 94, 50, 45, > 40, 36, 110, 118, 48, 41, 94, 50, 41, 41, 125, 10, 110, 49, 61, 123, > 115, 113, 114, 116, 40, 40, 36, 117, 49, 41, 94, 50, 43, 40, 36, 118, > 49, 41, 94, 50, 41, 125, 10, 110, 117, 49, 61, 123, 105, 102, 40, 36, > 110, 49, 62, 49, 51, 53, 44, 36, 117, 49, 42, 49, 51, 53, 47, 36, > 110, 49, 44, 36, 117, 49, 41, 125, 32, 110, 118, 49, 61, 123, 105, 102, > 40, 36, 110, 49, 62, 49, 51, 53, 44, 36, 118, 49, 42, 49, 51, 53, > 47, 36, 110, 49, 44, 36, 118, 49, 41, 125, 32, 110, 119, 49, 61, 123, > 115, 113, 114, 116, 40, 109, 97, 120, 40, 48, 44, 49, 56, 50, 50, 53, > 45, 40, 36, 110, 117, 49, 41, 94, 50, 45, 40, 36, 110, 118, 49, 41, > 94, 50, 41, 41, 125, 10, 117, 61, 123, 36, 110, 118, 48, 42, 36, 110, > 119, 49, 45, 36, 110, 119, 48, 42, 36, 110, 118, 49, 125, 32, 118, 61, > 123, 36, 110, 119, 48, 42, 36, 110, 117, 49, 45, 36, 110, 117, 48, 42, > 36, 110, 119, 49, 125, 32, 119, 61, 123, 36, 110, 118, 48, 42, 36, 110, > 117, 49, 45, 36, 110, 117, 48, 42, 36, 110, 118, 49, 125, 32, 110, 61, > 123, 115, 113, 114, 116, 40, 40, 36, 117, 41, 94, 50, 43, 40, 36, 118, > 41, 94, 50, 43, 40, 36, 119, 41, 94, 50, 41, 125, 10, 45, 114, 111, > 116, 97, 116, 105, 111, 110, 51, 100, 91, 93, 32, 36, 117, 44, 36, 118, > 44, 36, 119, 44, 123, 97, 115, 105, 110, 40, 36, 110, 47, 49, 56, 50, > 50, 53, 41, 42, 49, 56, 48, 47, 112, 105, 125, 32, 45, 109, 118, 91, > 112, 111, 115, 101, 51, 100, 93, 32, 64, 35, 32, 45, 42, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 112, 111, > 115, 101, 51, 100, 10, 117, 48, 61, 36, 117, 49, 32, 118, 48, 61, 36, > 118, 49, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 51, 100, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 105, 102, 32, 123, 33, 40, > 36, 98, 38, 49, 41, 125, 32, 117, 48, 61, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 33, 36, 112, 97, 117, 115, 101, 34, 32, > 124, 124, 32, 34, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, 125, 10, > 112, 97, 117, 115, 101, 61, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, > 10, 45, 97, 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, > 53, 32, 45, 45, 105, 110, 100, 101, 120, 91, 99, 111, 108, 111, 114, 115, > 93, 32, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 54, 32, 45, 43, 91, 99, 111, 108, 111, > 114, 115, 44, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 123, 99, 111, 108, 111, 114, 115, 44, 115, 125, 10, 45, 115, 104, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 36, 62, 44, 36, 62, 32, 45, 45, 104, > 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 123, 64, 123, > 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 42, 50, 53, 54, > 125, 44, 48, 44, 123, 64, 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, > 44, 119, 125, 42, 50, 53, 54, 45, 49, 125, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 45, 105, 91, 45, 50, 93, 32, 50, 53, 54, 44, 49, 44, > 49, 44, 49, 44, 39, 120, 39, 32, 45, 114, 91, 45, 50, 93, 32, 123, > 119, 125, 44, 49, 44, 49, 44, 49, 44, 48, 44, 50, 32, 45, 42, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 64, 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, > 125, 44, 49, 44, 49, 44, 49, 44, 50, 32, 45, 109, 97, 120, 91, 45, > 49, 93, 32, 48, 46, 48, 49, 32, 45, 47, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 100, 111, 110, 101, 32, 45, 97, 91, 45, 64, 123, 99, 111, > 108, 111, 114, 115, 44, 115, 125, 45, 45, 49, 93, 32, 99, 10, 45, 114, > 109, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 110, 109, > 91, 45, 49, 93, 32, 99, 101, 110, 116, 114, 111, 105, 100, 115, 10, 45, > 45, 62, 62, 91, 99, 111, 108, 111, 114, 115, 93, 32, 56, 32, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 104, > 105, 115, 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 64, 123, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 44, 48, 44, 123, 64, > 123, 99, 101, 110, 116, 114, 111, 105, 100, 115, 44, 119, 125, 45, 49, 125, > 10, 99, 109, 97, 120, 61, 64, 123, 45, 49, 44, 120, 77, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 32, 45, 105, 102, 32, 123, > 33, 105, 40, 36, 62, 41, 125, 32, 45, 112, 111, 105, 110, 116, 91, 99, > 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 36, 62, 44, 48, 44, 48, > 44, 49, 44, 64, 123, 45, 97, 116, 91, 99, 101, 110, 116, 114, 111, 105, > 100, 115, 93, 92, 32, 36, 99, 109, 97, 120, 125, 32, 45, 112, 111, 105, > 110, 116, 91, 99, 101, 110, 116, 114, 111, 105, 100, 115, 93, 32, 36, 62, > 44, 48, 44, 48, 44, 45, 48, 46, 48, 48, 49, 44, 64, 123, 45, 82, > 71, 66, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, > 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 91, 99, 101, 110, 116, > 114, 111, 105, 100, 115, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 36, 118, 105, 115, 117, 95, 51, 100, 32, 45, 114, 109, 91, 118, 105, > 115, 117, 95, 51, 100, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 36, 118, 105, 115, 117, 95, 105, 109, 103, 32, 45, 114, 109, 91, > 118, 105, 115, 117, 95, 105, 109, 103, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 118, 105, 115, 117, 95, 99, 101, 110, 116, 114, > 111, 105, 100, 115, 32, 45, 114, 109, 91, 118, 105, 115, 117, 95, 99, 101, > 110, 116, 114, 111, 105, 100, 115, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 101, 108, 115, 101, 32, 45, > 105, 102, 32, 36, 118, 105, 115, 117, 95, 105, 109, 103, 32, 45, 119, 97, > 105, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 33, 64, 33, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 81, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 69, > 83, 67, 125, 125, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 32, 45, 119, 32, > 48, 32, 45, 118, 32, 43, 10, 95, 120, 95, 113, 117, 97, 110, 116, 105, > 122, 101, 95, 114, 103, 98, 95, 51, 100, 32, 58, 10, 45, 105, 102, 32, > 36, 111, 98, 106, 51, 100, 32, 45, 114, 109, 91, 111, 98, 106, 51, 100, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 45, 100, 105, 115, 116, 114, > 105, 98, 117, 116, 105, 111, 110, 51, 100, 91, 99, 101, 110, 116, 114, 111, > 105, 100, 115, 93, 32, 45, 99, 105, 114, 99, 108, 101, 115, 51, 100, 91, > 45, 49, 93, 32, 53, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, > 32, 50, 53, 53, 10, 45, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, > 100, 32, 45, 112, 51, 100, 91, 45, 49, 93, 32, 49, 10, 45, 45, 97, > 110, 100, 91, 99, 111, 108, 111, 114, 115, 93, 32, 50, 53, 53, 32, 45, > 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, 91, 45, > 49, 93, 32, 45, 111, 51, 100, 91, 45, 49, 93, 32, 48, 46, 56, 32, > 45, 43, 51, 100, 91, 45, 51, 45, 45, 49, 93, 10, 45, 45, 51, 100, > 91, 45, 49, 93, 32, 49, 50, 56, 44, 49, 50, 56, 44, 49, 50, 56, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 111, 98, 106, 51, 100, 32, 95, > 78, 61, 123, 105, 91, 55, 93, 125, 10, 95, 120, 95, 113, 117, 97, 110, > 116, 105, 122, 101, 95, 114, 103, 98, 95, 116, 101, 120, 116, 32, 58, 10, > 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 48, 44, > 48, 44, 49, 54, 44, 49, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 123, 119, 43, 50, 125, 44, 49, 53, 44, 49, 44, 49, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 45, 100, 105, 108, > 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 45, 50, 93, 10, 45, 110, 109, 91, 45, 50, 93, 32, 36, 50, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 109, 36, 50, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, > 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, > 99, 104, 32, 116, 104, 101, 32, 51, 100, 32, 114, 101, 102, 108, 101, 99, > 116, 105, 111, 110, 32, 100, 101, 109, 111, 46, 10, 120, 95, 114, 101, 102, > 108, 101, 99, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 51, 100, 32, 114, > 101, 102, 108, 101, 99, 116, 105, 111, 110, 32, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, > 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, > 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, > 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, > 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, > 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 34, 10, 45, 118, 32, 45, 10, 49, 50, 56, 44, 50, 53, 54, 44, > 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 32, 45, 98, 108, 117, 114, 95, 120, 121, 91, 45, > 49, 93, 32, 51, 48, 44, 50, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 48, 44, 48, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 57, 48, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, > 49, 44, 49, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 54, 48, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, > 50, 44, 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 56, 48, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 109, 105, 114, 114, 111, > 114, 91, 45, 49, 93, 32, 120, 32, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 120, 10, 45, 45, 108, 117, > 109, 105, 110, 97, 110, 99, 101, 91, 45, 49, 93, 32, 45, 109, 105, 114, > 114, 111, 114, 91, 45, 49, 93, 32, 120, 32, 45, 98, 91, 45, 49, 93, > 32, 50, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 116, 111, 114, 117, 115, 51, 100, 32, 51, 48, 44, 49, 48, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 50, 48, > 48, 44, 48, 10, 45, 115, 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, > 32, 52, 55, 44, 51, 52, 44, 34, 56, 48, 43, 50, 48, 42, 97, 98, > 115, 40, 99, 111, 115, 40, 50, 42, 116, 104, 101, 116, 97, 41, 41, 34, > 32, 45, 115, 51, 100, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, > 93, 32, 45, 105, 91, 45, 50, 93, 32, 51, 44, 123, 104, 125, 44, 49, > 44, 49, 44, 49, 53, 48, 44, 50, 50, 48, 44, 50, 53, 53, 44, 50, > 48, 48, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 121, 91, 45, 50, > 93, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 121, 10, 45, 115, > 112, 104, 101, 114, 105, 99, 97, 108, 51, 100, 32, 52, 55, 44, 51, 52, > 44, 34, 49, 48, 48, 42, 97, 98, 115, 40, 49, 43, 48, 46, 54, 42, > 99, 111, 115, 40, 51, 42, 112, 104, 105, 41, 42, 115, 105, 110, 40, 52, > 42, 116, 104, 101, 116, 97, 41, 41, 34, 10, 45, 114, 51, 100, 91, 45, > 50, 44, 45, 49, 93, 32, 48, 44, 49, 44, 48, 44, 57, 48, 32, 45, > 100, 98, 51, 100, 32, 48, 10, 120, 98, 61, 48, 32, 120, 108, 61, 48, > 32, 97, 110, 105, 109, 61, 48, 10, 45, 119, 91, 93, 32, 50, 53, 54, > 44, 50, 53, 54, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 51, 100, 32, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 34, > 10, 45, 100, 111, 10, 116, 105, 99, 61, 64, 124, 10, 45, 45, 114, 111, > 119, 115, 91, 45, 49, 93, 32, 56, 44, 123, 56, 43, 51, 42, 105, 91, > 54, 93, 45, 49, 125, 32, 45, 45, 106, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 56, 44, 48, 44, 48, 44, 123, 105, 102, 40, 36, > 97, 110, 105, 109, 60, 50, 53, 48, 44, 48, 44, 48, 46, 53, 45, 48, > 46, 53, 42, 99, 111, 115, 40, 40, 36, 97, 110, 105, 109, 45, 50, 53, > 48, 41, 47, 49, 48, 48, 41, 41, 125, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 45, 122, 91, 45, 54, 93, 32, 36, 120, 98, 44, 48, 44, > 123, 36, 120, 98, 43, 50, 53, 53, 125, 44, 50, 53, 53, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 44, 55, 53, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 51, 44, 48, > 44, 48, 10, 45, 45, 122, 91, 45, 54, 93, 32, 36, 120, 108, 44, 48, > 44, 123, 36, 120, 108, 43, 50, 53, 53, 125, 44, 50, 53, 53, 10, 120, > 102, 61, 123, 109, 105, 110, 40, 51, 48, 44, 36, 97, 110, 105, 109, 45, > 55, 48, 41, 43, 50, 48, 42, 99, 111, 115, 40, 49, 46, 56, 42, 64, > 124, 41, 125, 10, 121, 102, 61, 123, 53, 48, 43, 50, 48, 42, 115, 105, > 110, 40, 50, 46, 55, 42, 64, 124, 41, 125, 10, 45, 111, 98, 106, 101, > 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 54, 93, 44, 123, 50, > 48, 43, 36, 120, 102, 125, 37, 44, 36, 121, 102, 37, 44, 48, 44, 49, > 44, 52, 44, 48, 44, 48, 10, 45, 108, 51, 100, 32, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 55, 53, 37, > 44, 53, 48, 37, 44, 48, 44, 49, 44, 53, 44, 48, 44, 48, 32, 45, > 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, > 44, 48, 44, 48, 46, 54, 32, 45, 114, 109, 91, 45, 51, 44, 45, 49, > 93, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, > 91, 45, 52, 93, 44, 36, 120, 102, 37, 44, 36, 121, 102, 37, 44, 48, > 44, 49, 44, 52, 44, 48, 44, 48, 10, 45, 119, 91, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, > 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, > 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, 101, 108, > 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, > 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 120, 98, 61, 123, 40, 36, 120, 98, 43, > 54, 41, 38, 50, 53, 53, 125, 10, 120, 108, 61, 123, 40, 36, 120, 108, > 45, 54, 41, 38, 50, 53, 53, 125, 10, 97, 110, 105, 109, 61, 123, 36, > 97, 110, 105, 109, 43, 49, 125, 10, 45, 114, 51, 100, 91, 45, 50, 44, > 45, 49, 93, 32, 123, 115, 105, 110, 40, 48, 46, 53, 42, 64, 124, 41, > 125, 44, 123, 99, 111, 115, 40, 64, 124, 41, 125, 44, 49, 44, 123, 40, > 64, 124, 45, 36, 116, 105, 99, 41, 42, 51, 51, 125, 10, 45, 114, 51, > 100, 91, 45, 51, 93, 32, 45, 49, 44, 48, 46, 51, 44, 48, 46, 56, > 44, 123, 40, 64, 124, 45, 36, 116, 105, 99, 41, 42, 49, 48, 48, 125, > 10, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, > 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, > 125, 10, 45, 114, 109, 91, 45, 53, 45, 45, 49, 93, 32, 45, 119, 91, > 93, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 120, 95, 114, 117, 98, 98, 101, 114, 51, 100, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, 51, > 100, 32, 114, 117, 98, 98, 101, 114, 32, 111, 98, 106, 101, 99, 116, 32, > 100, 101, 109, 111, 46, 10, 120, 95, 114, 117, 98, 98, 101, 114, 51, 100, > 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 32, 51, 100, 32, 114, 117, 98, 98, 101, 114, 32, 111, 98, 106, > 101, 99, 116, 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, > 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, > 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, > 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, > 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, > 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 32, 45, > 114, 109, 10, 45, 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 53, 48, > 44, 48, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 55, 48, 44, 49, > 53, 32, 45, 99, 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 50, 48, > 44, 52, 48, 10, 45, 99, 111, 108, 51, 100, 91, 45, 51, 93, 32, 50, > 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 44, 48, 46, 51, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 50, 93, 32, 49, 50, 56, 44, 50, 48, > 48, 44, 55, 54, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 50, 48, 48, 44, 49, 50, 56, 44, 55, 54, 10, 45, 99, 51, 100, 91, > 45, 51, 45, 45, 49, 93, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 48, 44, 48, 44, 55, 48, 32, 45, 43, 51, 100, 91, 45, 51, > 45, 45, 49, 93, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, 49, 48, > 44, 45, 56, 44, 50, 48, 10, 50, 53, 54, 44, 50, 53, 54, 44, 54, > 52, 44, 51, 10, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, 51, 44, > 39, 105, 102, 40, 99, 61, 61, 48, 44, 120, 44, 105, 102, 40, 99, 61, > 61, 49, 44, 121, 44, 121, 42, 64, 123, 49, 44, 100, 125, 47, 104, 41, > 41, 39, 10, 123, 119, 125, 44, 123, 104, 125, 44, 49, 44, 51, 10, 45, > 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 48, 44, 34, 91, > 71, 92, 52, 55, 77, 73, 67, 93, 32, 51, 100, 32, 114, 117, 98, 98, > 101, 114, 32, 111, 98, 106, 101, 99, 116, 34, 10, 102, 114, 97, 109, 101, > 61, 48, 10, 45, 100, 111, 10, 123, 119, 125, 44, 123, 104, 125, 44, 49, > 44, 51, 32, 45, 102, 99, 91, 45, 49, 93, 32, 49, 54, 44, 51, 50, > 44, 51, 50, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, > 93, 32, 91, 48, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 49, 44, 51, 44, 48, 44, 48, 32, 45, 106, 91, 49, 93, 32, 91, 45, > 49, 93, 44, 48, 44, 48, 44, 36, 102, 114, 97, 109, 101, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 114, 51, 100, 91, 48, 93, 32, 48, 46, > 49, 44, 49, 44, 48, 46, 54, 44, 123, 51, 42, 99, 111, 115, 40, 64, > 124, 42, 49, 46, 50, 53, 41, 125, 32, 45, 114, 51, 100, 91, 48, 93, > 32, 49, 44, 48, 46, 50, 44, 48, 46, 54, 44, 45, 49, 10, 45, 45, > 119, 97, 114, 112, 91, 49, 93, 32, 91, 50, 93, 44, 48, 44, 48, 32, > 45, 42, 91, 51, 93, 32, 48, 46, 56, 32, 45, 42, 91, 45, 49, 93, > 32, 48, 46, 50, 32, 45, 43, 91, 51, 44, 45, 49, 93, 10, 45, 119, > 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, > 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, > 32, 45, 119, 91, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, > 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, > 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 115, 104, > 91, 50, 93, 32, 50, 44, 50, 32, 45, 45, 91, 45, 49, 93, 32, 49, > 32, 45, 97, 110, 100, 91, 45, 49, 93, 32, 123, 64, 123, 49, 44, 100, > 125, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 102, 114, 97, > 109, 101, 61, 123, 40, 36, 102, 114, 97, 109, 101, 45, 49, 41, 37, 64, > 123, 49, 44, 100, 125, 125, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, > 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, > 114, 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 115, 104, 97, 100, 101, 98, 111, 98, 115, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, > 116, 104, 101, 32, 115, 104, 97, 100, 101, 32, 98, 111, 98, 115, 32, 100, > 101, 109, 111, 46, 10, 120, 95, 115, 104, 97, 100, 101, 98, 111, 98, 115, > 32, 58, 10, 45, 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 32, 83, 104, 97, 100, 101, 32, 98, 111, 98, 115, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, > 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, > 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 34, 10, 45, 118, 32, 45, 32, 45, 114, 109, 32, 116, 61, 49, 48, > 48, 32, 45, 119, 32, 53, 49, 50, 44, 53, 49, 50, 44, 48, 44, 34, > 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 83, 104, 97, 100, 101, 32, > 98, 111, 98, 115, 34, 10, 45, 100, 111, 10, 116, 61, 123, 36, 116, 43, > 48, 46, 48, 49, 53, 125, 10, 45, 105, 102, 32, 123, 36, 116, 62, 52, > 42, 112, 105, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 98, 125, 125, > 10, 114, 120, 61, 123, 63, 40, 45, 49, 44, 49, 41, 125, 32, 114, 121, > 61, 123, 63, 40, 45, 49, 44, 49, 41, 125, 32, 114, 122, 61, 123, 63, > 40, 45, 49, 44, 49, 41, 125, 32, 114, 116, 61, 123, 63, 40, 45, 49, > 44, 49, 41, 125, 32, 114, 99, 120, 61, 123, 63, 40, 45, 48, 46, 54, > 42, 48, 46, 54, 41, 125, 32, 116, 61, 48, 10, 78, 61, 123, 50, 48, > 43, 114, 111, 117, 110, 100, 40, 63, 40, 56, 48, 41, 41, 125, 32, 82, > 61, 123, 40, 50, 43, 114, 111, 117, 110, 100, 40, 63, 40, 52, 48, 41, > 41, 41, 42, 109, 105, 110, 40, 64, 123, 33, 44, 119, 125, 44, 64, 123, > 33, 44, 104, 125, 41, 47, 51, 48, 48, 125, 10, 45, 105, 102, 32, 36, > 111, 98, 106, 51, 100, 32, 45, 114, 109, 91, 99, 111, 108, 111, 114, 109, > 97, 112, 44, 105, 109, 103, 44, 111, 98, 106, 51, 100, 93, 32, 45, 101, > 110, 100, 105, 102, 10, 123, 52, 43, 114, 111, 117, 110, 100, 40, 63, 40, > 49, 50, 41, 41, 125, 44, 49, 44, 49, 44, 51, 32, 45, 110, 111, 105, > 115, 101, 91, 48, 93, 32, 50, 53, 53, 44, 50, 32, 45, 114, 91, 48, > 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 42, > 91, 48, 93, 32, 50, 53, 53, 32, 45, 115, 104, 105, 102, 116, 91, 48, > 93, 32, 49, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 111, 108, 111, > 114, 109, 97, 112, 10, 40, 54, 55, 46, 53, 59, 55, 51, 46, 53, 59, > 49, 48, 57, 46, 53, 59, 49, 48, 51, 46, 53, 59, 53, 49, 46, 53, > 59, 49, 48, 48, 46, 53, 59, 123, 50, 42, 36, 78, 125, 59, 36, 78, > 41, 32, 51, 44, 123, 50, 42, 36, 78, 125, 44, 49, 44, 49, 44, 48, > 10, 49, 44, 36, 78, 44, 49, 44, 49, 44, 53, 32, 50, 44, 36, 78, > 44, 49, 44, 49, 44, 39, 121, 43, 120, 42, 36, 78, 39, 32, 45, 97, > 91, 45, 50, 45, 45, 49, 93, 32, 120, 32, 45, 122, 91, 45, 49, 93, > 32, 48, 44, 53, 10, 52, 44, 36, 78, 44, 49, 44, 49, 44, 49, 32, > 45, 121, 91, 45, 51, 45, 45, 49, 93, 32, 45, 97, 91, 45, 52, 45, > 45, 49, 93, 32, 121, 32, 45, 110, 109, 91, 45, 49, 93, 32, 111, 98, > 106, 51, 100, 10, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, > 125, 32, 45, 110, 109, 91, 45, 49, 93, 32, 105, 109, 103, 10, 45, 119, > 97, 105, 116, 32, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 114, 61, > 123, 36, 114, 121, 43, 36, 114, 120, 42, 99, 111, 115, 40, 54, 42, 36, > 114, 122, 42, 36, 116, 41, 43, 40, 49, 45, 36, 114, 120, 41, 42, 115, > 105, 110, 40, 54, 42, 36, 114, 116, 42, 36, 116, 41, 125, 10, 40, 48, > 59, 123, 51, 48, 42, 36, 114, 121, 42, 40, 36, 78, 45, 49, 41, 125, > 41, 32, 40, 36, 116, 59, 123, 50, 42, 112, 105, 42, 40, 36, 78, 45, > 49, 41, 47, 36, 78, 43, 36, 116, 125, 41, 32, 45, 114, 91, 45, 50, > 44, 45, 49, 93, 32, 49, 44, 36, 78, 44, 49, 44, 49, 44, 51, 10, > 45, 43, 91, 45, 50, 93, 32, 123, 51, 54, 48, 42, 115, 105, 110, 40, > 36, 114, 122, 42, 36, 116, 41, 125, 32, 45, 42, 91, 45, 50, 93, 32, > 123, 112, 105, 47, 49, 56, 48, 125, 10, 45, 45, 115, 105, 110, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 99, 111, 115, 91, 45, 52, 44, 45, 51, > 93, 32, 45, 42, 91, 45, 52, 44, 45, 50, 93, 32, 36, 114, 32, 45, > 42, 91, 45, 51, 44, 45, 49, 93, 32, 36, 114, 99, 120, 32, 45, 43, > 91, 45, 52, 44, 45, 51, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 42, 91, 45, 50, 93, 32, 123, 64, 123, 33, 44, 119, 125, > 47, 50, 125, 32, 45, 42, 91, 45, 49, 93, 32, 123, 64, 123, 33, 44, > 104, 125, 47, 50, 125, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 120, 10, 45, 45, 43, 91, 45, 49, 93, 32, 36, 82, 32, 45, 45, 91, > 45, 50, 93, 32, 36, 82, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, > 32, 121, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 121, > 91, 45, 49, 93, 32, 45, 106, 91, 111, 98, 106, 51, 100, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 56, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 105, 109, 103, 93, 32, 91, > 111, 98, 106, 51, 100, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, > 44, 45, 49, 44, 50, 44, 48, 44, 48, 10, 45, 97, 110, 100, 91, 105, > 109, 103, 93, 32, 50, 53, 53, 32, 45, 45, 109, 97, 112, 91, 105, 109, > 103, 93, 32, 91, 99, 111, 108, 111, 114, 109, 97, 112, 93, 32, 45, 119, > 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 119, 97, > 105, 116, 32, 50, 48, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, > 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, > 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, > 109, 32, 45, 119, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 120, 95, 115, 112, 108, 105, 110, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 115, 112, 108, 105, > 110, 101, 32, 99, 117, 114, 118, 101, 32, 101, 100, 105, 116, 111, 114, 46, > 10, 120, 95, 115, 112, 108, 105, 110, 101, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 83, 112, 108, 105, > 110, 101, 32, 99, 117, 114, 118, 101, 32, 101, 100, 105, 116, 111, 114, 32, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 77, 111, 117, 115, 101, 32, 116, > 111, 32, 105, 110, 115, 101, 114, 116, 47, 109, 111, 118, 101, 47, 100, 101, > 108, 101, 116, 101, 32, 112, 111, 105, 110, 116, 115, 46, 92, 110, 10, 45, > 45, 45, 45, 32, 75, 101, 121, 32, 39, 82, 39, 32, 116, 111, 32, 114, > 101, 115, 101, 116, 32, 116, 104, 101, 32, 99, 117, 114, 118, 101, 46, 92, > 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 83, 80, 65, 67, > 69, 39, 32, 116, 111, 32, 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, > 32, 115, 112, 108, 105, 110, 101, 32, 99, 117, 114, 118, 101, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 80, 39, 32, 116, 111, > 32, 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, 32, 99, 111, 110, 116, > 114, 111, 108, 32, 112, 111, 105, 110, 116, 115, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 32, 39, 69, 78, 84, 69, 82, 39, 32, 116, > 111, 32, 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, 32, 99, 111, 110, > 116, 114, 111, 108, 32, 112, 111, 108, 121, 103, 111, 110, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 32, 39, 84, 39, 32, 116, 111, 32, > 115, 104, 111, 119, 115, 47, 104, 105, 100, 101, 32, 112, 111, 105, 110, 116, > 32, 116, 97, 110, 103, 101, 110, 116, 115, 46, 92, 110, 10, 45, 45, 45, > 45, 32, 75, 101, 121, 32, 39, 73, 39, 32, 116, 111, 32, 115, 104, 111, > 119, 115, 47, 104, 105, 100, 101, 32, 112, 111, 105, 110, 116, 32, 105, 110, > 100, 105, 99, 101, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 32, 39, 67, 39, 32, 116, 111, 32, 115, 104, 111, 119, 115, 47, 104, > 105, 100, 101, 32, 112, 111, 105, 110, 116, 32, 99, 111, 111, 114, 100, 105, > 110, 97, 116, 101, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, > 121, 115, 32, 39, 43, 39, 32, 97, 110, 100, 32, 39, 45, 39, 32, 116, > 111, 32, 105, 110, 99, 114, 101, 97, 115, 101, 47, 100, 101, 99, 114, 101, > 97, 115, 101, 32, 114, 111, 117, 110, 100, 110, 101, 115, 115, 46, 92, 110, > 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, > 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, > 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 64, 35, 32, 45, 97, 32, > 120, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 101, 108, 115, 101, 32, 40, 48, 59, 48, 94, 48, 59, > 49, 50, 56, 94, 48, 59, 48, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 53, 49, 50, 44, 53, 49, 50, 44, 49, 44, 51, 44, 51, 32, 45, 110, > 97, 109, 101, 91, 45, 49, 93, 32, 34, 91, 71, 92, 52, 55, 77, 73, > 67, 93, 32, 83, 112, 108, 105, 110, 101, 32, 69, 100, 105, 116, 111, 114, > 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 119, 91, 48, 93, 32, 64, > 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, 44, 48, 44, 48, > 44, 45, 49, 44, 45, 49, 44, 64, 123, 45, 49, 44, 110, 125, 32, 45, > 114, 91, 48, 93, 32, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, > 104, 125, 44, 49, 44, 51, 44, 49, 10, 45, 105, 91, 49, 93, 32, 49, > 10, 114, 111, 117, 110, 100, 110, 101, 115, 115, 61, 48, 46, 53, 10, 118, > 105, 115, 117, 102, 108, 97, 103, 115, 61, 50, 51, 10, 110, 101, 97, 114, > 101, 115, 116, 61, 45, 49, 10, 97, 99, 116, 105, 118, 101, 61, 45, 49, > 10, 45, 100, 111, 10, 45, 105, 102, 32, 123, 64, 123, 49, 44, 35, 125, > 61, 61, 49, 125, 10, 45, 114, 109, 91, 49, 93, 32, 114, 111, 117, 110, > 100, 110, 101, 115, 115, 61, 48, 46, 53, 32, 110, 101, 97, 114, 101, 115, > 116, 61, 45, 49, 32, 97, 99, 116, 105, 118, 101, 61, 45, 49, 10, 45, > 105, 91, 49, 93, 32, 40, 123, 48, 46, 50, 42, 119, 125, 44, 123, 48, > 46, 50, 42, 104, 125, 59, 92, 10, 123, 48, 46, 50, 42, 119, 125, 44, > 123, 48, 46, 56, 42, 104, 125, 59, 92, 10, 123, 48, 46, 56, 42, 119, > 125, 44, 123, 48, 46, 56, 42, 104, 125, 59, 92, 10, 123, 48, 46, 56, > 42, 119, 125, 44, 123, 48, 46, 50, 42, 104, 125, 41, 10, 45, 101, 110, > 100, 105, 102, 10, 91, 49, 93, 32, 40, 123, 64, 123, 33, 44, 119, 125, > 47, 64, 123, 48, 44, 119, 125, 125, 44, 123, 64, 123, 33, 44, 104, 125, > 47, 64, 123, 48, 44, 104, 125, 125, 41, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 45, 115, 104, 105, 102, 116, 91, 50, 93, 32, 48, > 44, 45, 49, 44, 48, 44, 48, 44, 50, 32, 45, 45, 115, 104, 105, 102, > 116, 91, 50, 93, 32, 48, 44, 49, 44, 48, 44, 48, 44, 50, 32, 45, > 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 114, 111, 117, 110, 100, 110, 101, 115, 115, 10, 45, 45, 115, 91, 45, > 49, 93, 32, 120, 32, 45, 115, 113, 114, 91, 45, 50, 44, 45, 49, 93, > 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 115, 113, 114, 116, > 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 50, 32, 45, 45, > 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 50, 93, > 10, 45, 45, 114, 91, 48, 93, 32, 64, 123, 33, 44, 119, 125, 44, 64, > 123, 33, 44, 104, 125, 44, 49, 44, 51, 10, 45, 105, 102, 32, 123, 36, > 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 52, 125, 32, 45, 112, 111, > 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 64, 123, 50, 44, 104, 125, > 44, 64, 50, 44, 48, 46, 51, 44, 49, 50, 56, 44, 50, 48, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 123, 49, 44, 104, 125, 10, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, 51, 125, 44, 48, 46, 51, > 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 105, 102, 32, 123, > 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 49, 125, 32, 45, 115, > 112, 108, 105, 110, 101, 91, 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, > 49, 125, 44, 64, 123, 51, 44, 48, 45, 49, 125, 44, 64, 123, 50, 44, > 50, 45, 51, 125, 44, 64, 123, 51, 44, 50, 45, 51, 125, 44, 51, 50, > 44, 49, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 56, 125, > 32, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 123, 64, 123, 50, 44, > 48, 125, 45, 64, 123, 52, 44, 48, 125, 42, 50, 48, 125, 44, 123, 64, > 123, 50, 44, 49, 125, 45, 64, 123, 52, 44, 49, 125, 42, 50, 48, 125, > 44, 123, 64, 123, 50, 44, 48, 125, 43, 64, 123, 52, 44, 48, 125, 42, > 50, 48, 125, 44, 123, 64, 123, 50, 44, 49, 125, 43, 64, 123, 52, 44, > 49, 125, 42, 50, 48, 125, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 38, 49, 54, 125, 32, 45, 116, 91, 45, > 49, 93, 32, 36, 62, 44, 123, 64, 123, 50, 44, 48, 125, 45, 51, 125, > 44, 123, 64, 123, 50, 44, 49, 125, 45, 49, 56, 125, 44, 49, 51, 44, > 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 118, 105, 115, 117, 102, 108, 97, > 103, 115, 38, 51, 50, 125, 32, 45, 116, 91, 45, 49, 93, 32, 34, 40, > 34, 123, 114, 111, 117, 110, 100, 40, 64, 123, 49, 44, 48, 125, 41, 125, > 34, 44, 34, 123, 114, 111, 117, 110, 100, 40, 64, 123, 49, 44, 49, 125, > 41, 125, 34, 41, 34, 44, 123, 64, 123, 50, 44, 48, 125, 45, 49, 54, > 125, 44, 123, 64, 123, 50, 44, 49, 125, 43, 49, 48, 125, 44, 49, 51, > 44, 49, 44, 49, 48, 48, 44, 50, 48, 48, 44, 50, 53, 53, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 115, 104, 105, 102, 116, 91, 49, 45, 52, > 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, 10, 45, 100, 111, > 110, 101, 10, 45, 105, 102, 32, 123, 36, 118, 105, 115, 117, 102, 108, 97, > 103, 115, 34, 38, 50, 34, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 123, 49, 44, 104, 125, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, > 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, 49, 125, 44, 52, 44, 52, > 44, 48, 44, 49, 44, 48, 44, 48, 44, 48, 32, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 64, 123, 50, 44, 48, 45, 49, 125, > 44, 50, 44, 50, 44, 48, 44, 49, 44, 50, 53, 53, 44, 49, 48, 48, > 44, 49, 53, 53, 32, 45, 115, 104, 105, 102, 116, 91, 50, 93, 32, 48, > 44, 49, 44, 48, 44, 48, 44, 50, 10, 45, 100, 111, 110, 101, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 91, 45, 49, 93, 32, 45, 114, 109, > 91, 51, 44, 52, 44, 45, 49, 93, 32, 45, 119, 97, 105, 116, 10, 45, > 105, 102, 32, 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, 32, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 61, 123, 36, 118, 105, 115, 117, 102, 108, > 97, 103, 115, 43, 105, 102, 40, 36, 118, 105, 115, 117, 102, 108, 97, 103, > 115, 38, 49, 44, 45, 49, 44, 49, 41, 125, 32, 45, 119, 97, 105, 116, > 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, > 123, 33, 44, 80, 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, 115, 61, > 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, 40, 36, > 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 50, 44, 45, 50, 44, 50, > 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 69, 78, 84, 69, 82, > 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, 115, 61, 123, 36, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, 40, 36, 118, 105, 115, 117, > 102, 108, 97, 103, 115, 38, 52, 44, 45, 52, 44, 52, 41, 125, 32, 45, > 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 64, 123, 33, 44, 84, 125, 32, 118, 105, 115, 117, 102, 108, > 97, 103, 115, 61, 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 43, > 105, 102, 40, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 56, 44, > 45, 56, 44, 56, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 73, > 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, 115, 61, 123, 36, 118, 105, > 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, 40, 36, 118, 105, 115, 117, > 102, 108, 97, 103, 115, 38, 49, 54, 44, 45, 49, 54, 44, 49, 54, 41, > 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 67, 125, 34, 32, 38, > 38, 32, 34, 33, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 67, 84, 82, 76, > 82, 73, 71, 72, 84, 125, 125, 32, 118, 105, 115, 117, 102, 108, 97, 103, > 115, 61, 123, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 43, 105, 102, > 40, 36, 118, 105, 115, 117, 102, 108, 97, 103, 115, 38, 51, 50, 44, 45, > 51, 50, 44, 51, 50, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 44, 80, 65, 68, 65, 68, 68, 125, 34, 32, 38, 38, 32, 34, 36, 114, > 111, 117, 110, 100, 110, 101, 115, 115, 60, 49, 125, 32, 114, 111, 117, 110, > 100, 110, 101, 115, 115, 61, 123, 36, 114, 111, 117, 110, 100, 110, 101, 115, > 115, 42, 49, 46, 49, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, > 80, 65, 68, 83, 85, 66, 125, 34, 32, 38, 38, 32, 34, 36, 114, 111, > 117, 110, 100, 110, 101, 115, 115, 62, 48, 46, 49, 125, 32, 114, 111, 117, > 110, 100, 110, 101, 115, 115, 61, 123, 36, 114, 111, 117, 110, 100, 110, 101, > 115, 115, 42, 48, 46, 57, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, 33, > 44, 82, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 67, 84, > 82, 76, 76, 69, 70, 84, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, > 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 105, 91, 49, 93, 32, 49, 32, 45, 119, > 97, 105, 116, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 40, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, > 73, 71, 72, 84, 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, > 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, > 42, 49, 46, 53, 125, 44, 123, 64, 123, 33, 44, 104, 125, 42, 49, 46, > 53, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, > 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, > 124, 32, 34, 64, 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, > 125, 41, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 67, 125, 125, 32, > 45, 119, 91, 93, 32, 123, 64, 123, 33, 44, 119, 125, 47, 49, 46, 53, > 125, 44, 123, 64, 123, 33, 44, 104, 125, 47, 49, 46, 53, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 40, 64, 123, 33, 44, > 67, 84, 82, 76, 76, 69, 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, > 123, 33, 44, 67, 84, 82, 76, 82, 73, 71, 72, 84, 125, 41, 34, 32, > 38, 38, 32, 34, 64, 123, 33, 44, 82, 125, 125, 32, 45, 119, 91, 93, > 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, 44, 114, 125, > 32, 45, 119, 91, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 64, 123, 33, 44, 98, 125, 61, 61, 48, 125, 32, 97, 99, 116, > 105, 118, 101, 61, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, > 44, 98, 125, 34, 32, 38, 38, 32, 34, 36, 97, 99, 116, 105, 118, 101, > 61, 61, 45, 49, 125, 10, 91, 50, 93, 32, 40, 64, 123, 33, 44, 120, > 125, 44, 64, 123, 33, 44, 121, 125, 41, 32, 45, 45, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 115, 91, > 45, 49, 93, 32, 120, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 40, 64, 123, 45, 49, 44, 99, 125, 41, 32, 110, 101, 97, 114, 101, 115, > 116, 61, 64, 123, 45, 49, 44, 49, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 109, 125, 60, 54, > 52, 125, 32, 97, 99, 116, 105, 118, 101, 61, 36, 110, 101, 97, 114, 101, > 115, 116, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 50, 93, 10, > 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 49, 34, 32, 38, > 38, 32, 34, 64, 123, 33, 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, > 32, 34, 36, 97, 99, 116, 105, 118, 101, 33, 61, 45, 49, 125, 10, 45, > 61, 91, 49, 93, 32, 123, 64, 123, 33, 44, 120, 125, 42, 64, 123, 48, > 44, 119, 125, 47, 64, 123, 33, 44, 119, 125, 125, 44, 48, 44, 36, 97, > 99, 116, 105, 118, 101, 10, 45, 61, 91, 49, 93, 32, 123, 64, 123, 33, > 44, 121, 125, 42, 64, 123, 48, 44, 104, 125, 47, 64, 123, 33, 44, 104, > 125, 125, 44, 49, 44, 36, 97, 99, 116, 105, 118, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, 38, 50, 34, 32, 38, 38, > 32, 34, 64, 123, 33, 44, 120, 125, 62, 61, 48, 34, 32, 38, 38, 32, > 34, 64, 123, 49, 44, 104, 125, 62, 51, 125, 10, 45, 108, 91, 49, 93, > 32, 45, 115, 32, 121, 32, 45, 114, 109, 91, 36, 110, 101, 97, 114, 101, > 115, 116, 93, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 32, 45, > 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 64, > 123, 33, 44, 98, 125, 38, 49, 34, 32, 38, 38, 32, 34, 64, 123, 33, > 44, 120, 125, 62, 61, 48, 125, 10, 120, 121, 61, 40, 123, 64, 123, 33, > 44, 120, 125, 42, 64, 123, 48, 44, 119, 125, 47, 64, 123, 33, 44, 119, > 125, 125, 44, 123, 64, 123, 33, 44, 121, 125, 42, 64, 123, 48, 44, 104, > 125, 47, 64, 123, 33, 44, 104, 125, 125, 41, 10, 45, 45, 115, 104, 105, > 102, 116, 91, 49, 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, > 32, 45, 43, 91, 45, 49, 93, 32, 91, 49, 93, 32, 45, 47, 91, 45, > 49, 93, 32, 50, 10, 36, 120, 121, 32, 45, 45, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 115, 91, 45, > 49, 93, 32, 120, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 40, > 64, 123, 45, 49, 44, 99, 125, 41, 32, 110, 115, 61, 64, 123, 45, 49, > 44, 49, 125, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 108, 91, 49, 93, 32, 45, 115, 32, 121, 32, 45, 105, 91, 123, 36, 110, > 115, 43, 49, 125, 93, 32, 36, 120, 121, 32, 45, 97, 32, 121, 32, 45, > 101, 110, 100, 108, 10, 97, 99, 116, 105, 118, 101, 61, 123, 36, 110, 115, > 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, > 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, > 125, 125, 10, 45, 45, 115, 104, 105, 102, 116, 91, 49, 93, 32, 48, 44, > 45, 49, 44, 48, 44, 48, 44, 50, 32, 45, 45, 115, 104, 105, 102, 116, > 91, 49, 93, 32, 48, 44, 49, 44, 48, 44, 48, 44, 50, 32, 45, 45, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, 32, 36, > 114, 111, 117, 110, 100, 110, 101, 115, 115, 10, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 49, 44, 50, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 123, 49, 44, 104, 125, 32, 45, 115, > 112, 108, 105, 110, 101, 91, 45, 49, 93, 32, 64, 123, 48, 44, 48, 45, > 49, 125, 44, 64, 123, 49, 44, 48, 45, 49, 125, 44, 64, 123, 48, 44, > 50, 45, 51, 125, 44, 64, 123, 49, 44, 50, 45, 51, 125, 44, 49, 50, > 56, 44, 49, 44, 49, 32, 45, 115, 104, 105, 102, 116, 91, 48, 93, 32, > 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, 32, 45, 115, 104, 105, 102, > 116, 91, 49, 93, 32, 48, 44, 45, 49, 44, 48, 44, 48, 44, 50, 32, > 45, 100, 111, 110, 101, 10, 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, > 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, 45, > 114, 109, 91, 48, 44, 49, 93, 32, 45, 119, 32, 48, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 116, 101, 116, 114, 105, > 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, > 104, 32, 116, 101, 116, 114, 105, 115, 32, 103, 97, 109, 101, 46, 10, 120, > 95, 116, 101, 116, 114, 105, 115, 32, 58, 10, 45, 101, 91, 93, 32, 34, > 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 84, 101, 116, 114, 105, 115, > 32, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 84, 104, 105, 115, > 32, 105, 115, 32, 97, 32, 71, 92, 52, 55, 77, 73, 67, 32, 105, 109, > 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 111, 102, 32, > 116, 104, 101, 32, 84, 101, 116, 114, 105, 115, 32, 103, 97, 109, 101, 46, > 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 65, > 114, 114, 111, 119, 32, 107, 101, 121, 115, 32, 116, 111, 32, 109, 111, 118, > 101, 47, 114, 111, 116, 97, 116, 101, 32, 116, 104, 101, 32, 116, 114, 105, > 111, 109, 105, 110, 111, 115, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 32, 39, 83, 80, 65, 67, 69, 39, 32, 116, 111, 32, 109, 97, > 107, 101, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 116, > 114, 105, 111, 109, 105, 110, 111, 32, 102, 97, 108, 108, 105, 110, 103, 46, > 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 69, 83, > 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, 120, 105, > 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 109, 10, 45, 105, 91, 109, 48, 93, 32, 52, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, 109, > 52, 93, 32, 51, 44, 50, 44, 49, 44, 49, 44, 49, 44, 48, 44, 48, > 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, 109, 56, 93, 32, 51, 44, > 50, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, > 49, 10, 45, 105, 91, 109, 49, 50, 93, 32, 50, 44, 50, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, 109, 49, 54, > 93, 32, 51, 44, 50, 44, 49, 44, 49, 44, 48, 44, 49, 44, 49, 44, > 49, 44, 49, 44, 48, 10, 45, 105, 91, 109, 50, 48, 93, 32, 51, 44, > 50, 44, 49, 44, 49, 44, 48, 44, 49, 44, 48, 44, 49, 44, 49, 44, > 49, 10, 45, 105, 91, 109, 50, 52, 93, 32, 51, 44, 50, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 44, 49, 10, 45, 105, > 102, 32, 123, 63, 60, 48, 46, 50, 53, 125, 10, 45, 105, 91, 109, 50, > 56, 93, 32, 50, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, > 105, 91, 109, 51, 50, 93, 32, 50, 44, 50, 44, 49, 44, 49, 44, 49, > 44, 49, 44, 48, 44, 49, 10, 45, 105, 91, 109, 51, 54, 93, 32, 51, > 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 105, 91, > 109, 52, 48, 93, 32, 49, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, > 105, 91, 109, 52, 52, 93, 32, 51, 44, 50, 44, 49, 44, 49, 44, 49, > 44, 49, 44, 49, 44, 49, 44, 48, 44, 49, 10, 45, 105, 91, 109, 52, > 56, 93, 32, 51, 44, 51, 44, 49, 44, 49, 44, 49, 44, 49, 44, 49, > 44, 49, 44, 48, 44, 49, 44, 49, 44, 49, 44, 49, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 105, > 61, 123, 52, 42, 36, 62, 125, 32, 45, 108, 91, 109, 36, 105, 93, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 51, 32, 45, 45, 114, 111, 116, 97, > 116, 101, 91, 48, 93, 32, 123, 57, 48, 42, 40, 36, 62, 43, 49, 41, > 125, 32, 45, 110, 109, 91, 45, 49, 93, 32, 109, 123, 36, 105, 43, 36, > 62, 43, 49, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 78, 61, 64, 35, 10, 45, 105, 91, 99, > 111, 108, 111, 114, 115, 93, 32, 51, 44, 36, 78, 44, 49, 44, 49, 44, > 39, 63, 40, 49, 54, 44, 50, 50, 52, 41, 39, 32, 45, 114, 91, 45, > 49, 93, 32, 51, 44, 52, 48, 48, 37, 32, 45, 105, 91, 109, 97, 115, > 107, 93, 32, 40, 48, 44, 45, 49, 44, 48, 59, 49, 44, 48, 44, 45, > 49, 59, 48, 44, 49, 44, 48, 41, 32, 45, 42, 91, 45, 49, 93, 32, > 49, 50, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 78, 10, 45, > 45, 114, 91, 109, 36, 62, 93, 32, 53, 48, 48, 37, 44, 53, 48, 48, > 37, 44, 49, 44, 51, 32, 45, 45, 99, 111, 114, 114, 101, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 91, 109, 97, 115, 107, 93, 44, 48, 32, 45, > 114, 91, 45, 49, 93, 32, 50, 48, 48, 37, 44, 50, 48, 48, 37, 44, > 49, 44, 49, 44, 51, 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, > 49, 93, 32, 51, 48, 37, 44, 49, 48, 48, 37, 10, 45, 45, 114, 91, > 109, 36, 62, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, > 44, 51, 32, 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, > 44, 64, 123, 99, 111, 108, 111, 114, 115, 44, 123, 51, 42, 36, 62, 125, > 45, 123, 51, 42, 36, 62, 43, 50, 125, 125, 32, 45, 114, 118, 91, 45, > 51, 44, 45, 49, 93, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, 32, > 45, 99, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 10, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 32, 45, 110, 109, 91, 45, 49, 93, 32, 115, 36, 62, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 99, 111, 108, 111, 114, 115, > 44, 109, 97, 115, 107, 93, 10, 102, 97, 99, 116, 61, 123, 64, 123, 115, > 48, 44, 119, 125, 47, 64, 123, 109, 48, 44, 119, 125, 125, 10, 87, 61, > 49, 50, 32, 72, 61, 50, 48, 10, 45, 105, 91, 98, 111, 97, 114, 100, > 93, 32, 36, 87, 44, 36, 72, 32, 45, 105, 91, 99, 117, 114, 114, 95, > 98, 111, 97, 114, 100, 93, 32, 91, 98, 111, 97, 114, 100, 93, 10, 45, > 105, 91, 114, 101, 110, 100, 101, 114, 93, 32, 123, 36, 102, 97, 99, 116, > 42, 36, 87, 125, 44, 123, 36, 102, 97, 99, 116, 42, 36, 72, 125, 44, > 49, 44, 51, 32, 45, 105, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 93, 32, 91, 114, 101, 110, 100, 101, 114, 93, 32, 45, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, > 114, 95, 109, 97, 115, 107, 10, 45, 45, 114, 111, 119, 115, 91, 114, 101, > 110, 100, 101, 114, 93, 32, 48, 44, 53, 48, 37, 32, 45, 112, 108, 97, > 115, 109, 97, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 110, 111, 105, > 115, 101, 91, 45, 49, 93, 32, 50, 48, 32, 45, 98, 108, 117, 114, 95, > 121, 91, 45, 49, 93, 32, 52, 48, 37, 44, 49, 32, 45, 45, 109, 105, > 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 121, 32, 45, 114, 91, 45, 49, 93, 32, 91, 114, > 101, 110, 100, 101, 114, 93, 10, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 54, 52, 32, 45, 98, 108, 117, 114, 95, 120, 91, 45, 49, 93, 32, 49, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 48, 46, 53, 44, 50, 32, 45, 98, 91, 45, > 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, 51, 48, 48, 32, > 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 110, 109, 91, 45, 49, 93, 32, 98, > 97, 99, 107, 103, 114, 111, 117, 110, 100, 10, 116, 105, 109, 101, 61, 64, > 124, 32, 115, 99, 111, 114, 101, 61, 48, 32, 102, 97, 108, 108, 95, 109, > 111, 100, 101, 61, 48, 32, 103, 97, 109, 101, 111, 118, 101, 114, 61, 48, > 32, 110, 61, 45, 49, 32, 110, 110, 61, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 48, 44, 36, 78, 45, 49, 41, 41, 125, 10, 45, 100, 111, 10, > 45, 119, 97, 105, 116, 32, 123, 105, 102, 40, 36, 102, 97, 108, 108, 95, > 109, 111, 100, 101, 44, 45, 49, 44, 45, 50, 48, 41, 125, 10, 45, 105, > 102, 32, 36, 103, 97, 109, 101, 111, 118, 101, 114, 10, 45, 45, 106, 91, > 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 93, 32, 91, 99, 117, 114, > 114, 95, 114, 101, 110, 100, 101, 114, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 46, 55, 44, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 95, 109, 97, 115, 107, 93, 44, 50, 53, 53, 10, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 34, > 71, 97, 109, 101, 92, 110, 79, 118, 101, 114, 33, 34, 44, 51, 48, 44, > 51, 48, 37, 44, 51, 50, 44, 50, 44, 49, 44, 50, 53, 53, 32, 45, > 119, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 99, > 111, 110, 116, 105, 110, 117, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 123, 36, 110, 60, 48, 125, 10, 45, 108, 91, 98, 111, 97, > 114, 100, 93, 32, 45, 115, 32, 121, 32, 105, 61, 45, 49, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 64, 123, 36, > 60, 44, 109, 125, 32, 105, 61, 36, 60, 44, 36, 105, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 48, 32, 45, 114, 109, 91, > 36, 105, 93, 32, 45, 97, 32, 121, 32, 115, 99, 111, 114, 101, 61, 123, > 36, 115, 99, 111, 114, 101, 43, 50, 94, 40, 110, 97, 114, 103, 40, 36, > 105, 41, 45, 49, 41, 45, 49, 125, 32, 45, 114, 32, 36, 87, 44, 36, > 72, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 110, > 109, 32, 98, 111, 97, 114, 100, 32, 45, 101, 110, 100, 108, 10, 45, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 36, 105, 41, 62, 49, 125, 32, 45, > 108, 91, 114, 101, 110, 100, 101, 114, 93, 32, 45, 115, 32, 121, 44, 36, > 72, 32, 48, 32, 45, 114, 109, 91, 36, 105, 93, 32, 45, 97, 32, 121, > 32, 45, 114, 32, 123, 36, 102, 97, 99, 116, 42, 36, 87, 125, 44, 123, > 36, 102, 97, 99, 116, 42, 36, 72, 125, 44, 49, 44, 51, 44, 48, 44, > 48, 44, 48, 44, 49, 32, 45, 110, 109, 32, 114, 101, 110, 100, 101, 114, > 32, 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 110, 61, > 36, 110, 110, 32, 110, 110, 61, 123, 114, 111, 117, 110, 100, 40, 63, 40, > 48, 44, 36, 78, 45, 49, 41, 41, 125, 32, 120, 61, 123, 36, 87, 47, > 50, 125, 32, 121, 61, 48, 32, 100, 111, 95, 114, 101, 110, 100, 101, 114, > 61, 49, 32, 102, 97, 108, 108, 95, 109, 111, 100, 101, 61, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 100, 111, 95, 114, 101, > 110, 100, 101, 114, 10, 45, 114, 109, 91, 99, 117, 114, 114, 95, 98, 111, > 97, 114, 100, 44, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 44, > 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 115, 107, > 93, 10, 45, 105, 91, 99, 117, 114, 114, 95, 98, 111, 97, 114, 100, 93, > 32, 91, 98, 111, 97, 114, 100, 93, 32, 45, 106, 91, 99, 117, 114, 114, > 95, 98, 111, 97, 114, 100, 93, 32, 91, 109, 36, 110, 93, 44, 123, 36, > 120, 45, 105, 110, 116, 40, 64, 123, 109, 36, 110, 44, 119, 125, 47, 50, > 41, 125, 44, 36, 121, 44, 48, 44, 48, 44, 49, 44, 91, 109, 36, 110, > 93, 10, 45, 105, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, > 93, 32, 91, 114, 101, 110, 100, 101, 114, 93, 32, 45, 115, 104, 91, 115, > 36, 110, 93, 32, 51, 44, 51, 32, 45, 106, 91, 99, 117, 114, 114, 95, > 114, 101, 110, 100, 101, 114, 93, 32, 91, 115, 36, 110, 93, 44, 123, 36, > 102, 97, 99, 116, 42, 40, 36, 120, 45, 105, 110, 116, 40, 64, 123, 109, > 36, 110, 44, 119, 125, 47, 50, 41, 41, 125, 44, 123, 36, 102, 97, 99, > 116, 42, 36, 121, 125, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, > 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 42, > 91, 99, 117, 114, 114, 95, 98, 111, 97, 114, 100, 93, 32, 50, 53, 53, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 99, 117, 114, 114, 95, 114, 101, > 110, 100, 101, 114, 93, 44, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 93, 32, 45, 110, 109, 91, 45, 49, 93, 32, 99, 117, 114, 114, > 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 115, 107, 10, 48, 32, 45, > 116, 91, 45, 49, 93, 32, 34, 83, 99, 111, 114, 101, 32, 58, 32, 34, > 36, 115, 99, 111, 114, 101, 34, 32, 32, 32, 32, 78, 101, 120, 116, 32, > 58, 34, 44, 52, 44, 48, 44, 51, 50, 44, 49, 44, 49, 54, 52, 32, > 45, 114, 91, 45, 49, 93, 32, 52, 48, 37, 44, 52, 48, 37, 44, 49, > 44, 51, 44, 50, 32, 45, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 106, 91, 99, > 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 93, 32, 91, 45, 50, 93, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, > 50, 53, 53, 32, 45, 106, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, > 101, 114, 95, 109, 97, 115, 107, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, > 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 45, 42, 91, > 109, 36, 110, 110, 93, 32, 49, 57, 54, 32, 45, 114, 91, 45, 49, 93, > 32, 51, 48, 48, 37, 44, 51, 48, 48, 37, 44, 49, 44, 51, 32, 45, > 106, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 44, 99, 117, > 114, 114, 95, 114, 101, 110, 100, 101, 114, 95, 109, 97, 115, 107, 93, 32, > 91, 45, 49, 93, 44, 123, 64, 123, 99, 117, 114, 114, 95, 114, 101, 110, > 100, 101, 114, 44, 119, 125, 45, 119, 45, 52, 125, 44, 51, 44, 48, 44, > 48, 44, 49, 44, 91, 45, 49, 93, 44, 49, 57, 54, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 100, 111, 95, 114, 101, 110, 100, 101, 114, 61, 48, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 115, 104, 105, 102, 116, 91, > 98, 97, 99, 107, 103, 114, 111, 117, 110, 100, 93, 32, 48, 44, 123, 45, > 49, 51, 42, 64, 124, 42, 49, 46, 48, 52, 94, 36, 115, 99, 111, 114, > 101, 125, 44, 48, 44, 48, 44, 50, 10, 45, 106, 91, 45, 49, 93, 32, > 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, 114, 93, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 91, 99, 117, 114, 114, 95, 114, 101, > 110, 100, 101, 114, 95, 109, 97, 115, 107, 93, 44, 50, 53, 53, 10, 45, > 119, 91, 45, 49, 93, 32, 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, > 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 84, > 101, 116, 114, 105, 115, 34, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 99, 117, 114, 115, 111, 114, 91, 48, 93, 32, 48, 10, 45, 105, 102, 32, > 64, 123, 33, 44, 83, 80, 65, 67, 69, 125, 32, 102, 97, 108, 108, 95, > 109, 111, 100, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 64, 123, 33, 44, 65, 82, 82, 79, 87, 85, 80, 125, 34, > 32, 124, 124, 32, 34, 64, 123, 33, 44, 65, 82, 82, 79, 87, 76, 69, > 70, 84, 125, 34, 32, 124, 124, 32, 34, 64, 123, 33, 44, 65, 82, 82, > 79, 87, 82, 73, 71, 72, 84, 125, 125, 10, 97, 110, 61, 123, 105, 102, > 40, 64, 123, 33, 44, 65, 82, 82, 79, 87, 85, 80, 125, 44, 110, 61, > 36, 110, 43, 49, 59, 105, 102, 40, 110, 37, 52, 44, 110, 44, 110, 45, > 52, 41, 44, 36, 110, 41, 125, 10, 110, 120, 61, 123, 119, 50, 61, 105, > 110, 116, 40, 64, 123, 109, 36, 97, 110, 44, 119, 125, 47, 50, 41, 59, > 109, 97, 120, 40, 119, 50, 44, 109, 105, 110, 40, 36, 120, 45, 64, 123, > 33, 44, 65, 82, 82, 79, 87, 76, 69, 70, 84, 125, 43, 64, 123, 33, > 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, 125, 44, 36, 87, 45, > 40, 64, 123, 109, 36, 97, 110, 44, 119, 125, 37, 50, 41, 45, 119, 50, > 41, 41, 125, 10, 45, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, > 109, 36, 97, 110, 93, 44, 123, 36, 110, 120, 45, 105, 110, 116, 40, 64, > 123, 109, 36, 97, 110, 44, 119, 125, 47, 50, 41, 125, 44, 36, 121, 44, > 48, 44, 48, 44, 45, 49, 44, 91, 109, 36, 97, 110, 93, 10, 45, 105, > 102, 32, 123, 64, 123, 45, 49, 44, 77, 125, 61, 61, 49, 125, 32, 120, > 61, 36, 110, 120, 32, 110, 61, 36, 97, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 100, 111, 95, 114, 101, 110, > 100, 101, 114, 61, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 64, 123, 33, 44, 65, 82, 82, 79, 87, 68, 79, 87, 78, 125, > 34, 32, 124, 124, 32, 34, 64, 124, 45, 36, 116, 105, 109, 101, 62, 48, > 46, 57, 94, 105, 110, 116, 40, 36, 115, 99, 111, 114, 101, 47, 50, 41, > 34, 32, 124, 124, 32, 34, 36, 102, 97, 108, 108, 95, 109, 111, 100, 101, > 125, 10, 121, 61, 123, 36, 121, 43, 49, 125, 10, 45, 45, 106, 91, 98, > 111, 97, 114, 100, 93, 32, 91, 109, 36, 110, 93, 44, 123, 36, 120, 45, > 105, 110, 116, 40, 64, 123, 109, 36, 110, 44, 119, 125, 47, 50, 41, 125, > 44, 36, 121, 44, 48, 44, 48, 44, 45, 49, 44, 91, 109, 36, 110, 93, > 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 77, 125, 62, 49, 34, > 32, 124, 124, 32, 34, 36, 121, 43, 64, 123, 109, 36, 110, 44, 104, 125, > 62, 36, 72, 125, 10, 45, 105, 102, 32, 123, 36, 121, 60, 61, 49, 125, > 32, 103, 97, 109, 101, 111, 118, 101, 114, 61, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 106, 91, 98, 111, 97, 114, 100, 93, 32, 91, 99, 117, > 114, 114, 95, 98, 111, 97, 114, 100, 93, 32, 45, 106, 91, 114, 101, 110, > 100, 101, 114, 93, 32, 91, 99, 117, 114, 114, 95, 114, 101, 110, 100, 101, > 114, 93, 32, 110, 61, 45, 49, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 116, 105, 109, 101, 61, 64, 124, 32, 100, > 111, 95, 114, 101, 110, 100, 101, 114, 61, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, > 32, 34, 33, 64, 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 44, 81, 125, 125, 10, 45, 114, 109, 32, 45, 119, > 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, > 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 105, 99, 45, 116, > 97, 99, 45, 116, 111, 101, 32, 103, 97, 109, 101, 46, 10, 120, 95, 116, > 105, 99, 116, 97, 99, 116, 111, 101, 32, 58, 10, 45, 101, 91, 93, 32, > 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 84, 105, 99, 45, 84, > 97, 99, 45, 84, 111, 101, 32, 103, 97, 109, 101, 32, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, > 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, 32, 85, 115, 101, 32, > 109, 111, 117, 115, 101, 32, 116, 111, 32, 115, 101, 108, 101, 99, 116, 32, > 112, 111, 115, 105, 116, 105, 111, 110, 115, 32, 111, 102, 32, 116, 104, 101, > 92, 110, 10, 45, 45, 45, 45, 32, 115, 121, 109, 98, 111, 108, 115, 46, > 32, 67, 108, 111, 115, 101, 32, 119, 105, 110, 100, 111, 119, 32, 116, 111, > 32, 101, 120, 105, 116, 32, 103, 97, 109, 101, 46, 92, 110, 10, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, > 45, 118, 32, 45, 10, 109, 101, 115, 115, 97, 103, 101, 61, 48, 10, 99, > 111, 117, 110, 116, 101, 114, 61, 48, 10, 112, 108, 97, 121, 101, 114, 61, > 48, 10, 115, 116, 97, 116, 101, 61, 48, 10, 116, 109, 112, 51, 61, 48, > 10, 116, 109, 112, 50, 61, 48, 10, 116, 109, 112, 49, 61, 48, 10, 45, > 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 50, 10, 45, 119, > 91, 45, 49, 93, 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 32, 34, > 10, 45, 100, 111, 10, 45, 105, 102, 32, 36, 112, 108, 97, 121, 101, 114, > 32, 109, 101, 115, 115, 97, 103, 101, 61, 34, 84, 105, 99, 45, 84, 97, > 99, 45, 84, 111, 101, 32, 40, 79, 32, 116, 111, 32, 112, 108, 97, 121, > 41, 34, 10, 45, 101, 108, 115, 101, 32, 109, 101, 115, 115, 97, 103, 101, > 61, 34, 84, 105, 99, 45, 84, 97, 99, 45, 84, 111, 101, 32, 40, 88, > 32, 116, 111, 32, 112, 108, 97, 121, 41, 34, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 10, 45, 119, 91, 93, 32, 123, 119, 125, 44, 123, > 104, 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, > 34, 36, 109, 101, 115, 115, 97, 103, 101, 32, 45, 119, 97, 105, 116, 10, > 45, 105, 102, 32, 123, 33, 64, 33, 125, 32, 45, 119, 91, 93, 32, 48, > 32, 45, 114, 109, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 64, 123, > 33, 44, 98, 125, 38, 49, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, > 120, 125, 62, 50, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 121, > 125, 62, 50, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 120, 125, > 60, 52, 48, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 44, 121, 125, > 60, 52, 48, 48, 125, 10, 116, 109, 112, 51, 61, 123, 105, 110, 116, 40, > 40, 64, 123, 33, 44, 120, 125, 45, 49, 53, 41, 47, 49, 51, 48, 41, > 125, 10, 116, 109, 112, 50, 61, 123, 105, 110, 116, 40, 40, 64, 123, 33, > 44, 121, 125, 45, 49, 53, 41, 47, 49, 51, 48, 41, 125, 10, 116, 109, > 112, 49, 61, 123, 52, 94, 40, 36, 116, 109, 112, 50, 42, 51, 43, 36, > 116, 109, 112, 51, 41, 125, 10, 45, 105, 102, 32, 123, 105, 110, 116, 40, > 36, 115, 116, 97, 116, 101, 47, 36, 116, 109, 112, 49, 41, 37, 52, 125, > 32, 116, 109, 112, 49, 61, 45, 49, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 108, 115, 101, 32, 116, 109, 112, 49, 61, 45, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 116, 109, > 112, 49, 60, 48, 125, 10, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 123, 36, 112, 108, 97, 121, 101, 114, 37, 50, 125, 10, 45, > 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 123, 34, 49, 51, 48, > 42, 34, 36, 116, 109, 112, 51, 34, 32, 43, 32, 49, 53, 43, 63, 40, > 45, 53, 44, 53, 41, 34, 125, 44, 92, 10, 123, 34, 49, 51, 48, 42, > 34, 36, 116, 109, 112, 50, 34, 32, 43, 32, 49, 53, 43, 63, 40, 45, > 53, 44, 53, 41, 34, 125, 44, 48, 44, 48, 44, 49, 44, 91, 45, 49, > 93, 10, 45, 114, 109, 91, 45, 50, 45, 45, 49, 93, 10, 45, 119, 91, > 45, 49, 93, 10, 115, 116, 97, 116, 101, 61, 123, 36, 115, 116, 97, 116, > 101, 43, 40, 49, 43, 36, 112, 108, 97, 121, 101, 114, 41, 42, 36, 116, > 109, 112, 49, 125, 10, 40, 50, 49, 44, 49, 51, 52, 52, 44, 56, 54, > 48, 49, 54, 44, 52, 49, 54, 49, 44, 49, 54, 54, 52, 52, 44, 54, > 54, 53, 55, 54, 44, 54, 53, 55, 57, 51, 44, 52, 51, 54, 56, 59, > 92, 10, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 50, 44, 48, 44, > 48, 59, 92, 10, 48, 44, 49, 44, 50, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 59, 92, 10, 51, 44, 51, 44, 51, 44, 52, 44, 52, 44, > 52, 44, 53, 44, 54, 41, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 119, 125, 10, 116, 109, 112, 49, 61, 64, 123, 45, 49, 44, 36, 62, 125, > 10, 45, 105, 102, 32, 123, 40, 36, 115, 116, 97, 116, 101, 38, 36, 116, > 109, 112, 49, 41, 61, 61, 36, 116, 109, 112, 49, 124, 124, 40, 36, 115, > 116, 97, 116, 101, 38, 40, 50, 42, 36, 116, 109, 112, 49, 41, 41, 61, > 61, 50, 42, 36, 116, 109, 112, 49, 125, 10, 45, 95, 120, 95, 116, 105, > 99, 116, 97, 99, 116, 111, 101, 64, 123, 45, 49, 44, 40, 36, 62, 44, > 51, 41, 125, 10, 45, 106, 91, 45, 52, 93, 32, 91, 45, 50, 93, 44, > 123, 49, 51, 48, 42, 64, 123, 45, 51, 44, 40, 36, 62, 44, 49, 41, > 125, 43, 63, 40, 45, 53, 44, 53, 41, 125, 44, 92, 10, 123, 49, 51, > 48, 42, 64, 123, 45, 51, 44, 40, 36, 62, 44, 50, 41, 125, 43, 63, > 40, 45, 53, 44, 53, 41, 125, 44, 48, 44, 48, 44, 49, 44, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 50, 45, 45, 49, 93, 10, 45, 105, > 102, 32, 123, 40, 36, 115, 116, 97, 116, 101, 38, 36, 116, 109, 112, 49, > 41, 61, 61, 36, 116, 109, 112, 49, 125, 32, 45, 119, 91, 45, 50, 93, > 32, 45, 49, 44, 45, 49, 44, 48, 44, 34, 84, 105, 99, 45, 84, 97, > 99, 45, 84, 111, 101, 32, 40, 88, 32, 119, 111, 110, 33, 41, 34, 10, > 45, 101, 108, 115, 101, 32, 45, 119, 91, 45, 50, 93, 32, 45, 49, 44, > 45, 49, 44, 48, 44, 34, 84, 105, 99, 45, 84, 97, 99, 45, 84, 111, > 101, 32, 40, 79, 32, 119, 111, 110, 33, 41, 34, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 100, 111, 32, 45, 119, 97, 105, 116, 32, 45, 119, 91, > 93, 32, 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, > 45, 119, 104, 105, 108, 101, 32, 64, 33, 10, 45, 114, 109, 32, 45, 119, > 91, 93, 32, 48, 32, 45, 118, 32, 43, 32, 45, 114, 101, 116, 117, 114, > 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 112, 108, 97, 121, 101, 114, 61, 123, 40, > 36, 112, 108, 97, 121, 101, 114, 43, 49, 41, 37, 50, 125, 10, 99, 111, > 117, 110, 116, 101, 114, 61, 123, 36, 99, 111, 117, 110, 116, 101, 114, 43, > 49, 125, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 99, 111, 117, 110, > 116, 101, 114, 60, 57, 125, 10, 45, 119, 91, 93, 32, 45, 49, 44, 45, > 49, 44, 48, 44, 48, 44, 34, 84, 105, 99, 45, 84, 97, 99, 45, 84, > 111, 101, 32, 40, 84, 105, 101, 100, 32, 103, 97, 109, 101, 33, 41, 34, > 10, 45, 100, 111, 32, 45, 119, 97, 105, 116, 32, 45, 119, 91, 93, 32, > 64, 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, 45, 119, > 104, 105, 108, 101, 32, 64, 33, 10, 45, 119, 91, 93, 32, 48, 32, 45, > 114, 109, 32, 45, 118, 32, 43, 10, 95, 120, 95, 116, 105, 99, 116, 97, > 99, 116, 111, 101, 32, 58, 10, 45, 115, 112, 114, 101, 97, 100, 91, 45, > 49, 93, 32, 52, 32, 45, 98, 91, 45, 49, 93, 32, 54, 32, 45, 115, > 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 48, 46, 56, 32, 45, > 110, 91, 45, 49, 93, 32, 48, 44, 49, 10, 95, 95, 120, 95, 116, 105, > 99, 116, 97, 99, 116, 111, 101, 32, 58, 10, 45, 45, 102, 91, 45, 49, > 93, 32, 49, 45, 105, 32, 45, 45, 110, 91, 45, 50, 93, 32, 36, 50, > 44, 50, 53, 53, 32, 45, 45, 110, 91, 45, 51, 93, 32, 36, 51, 44, > 50, 53, 53, 32, 45, 110, 91, 45, 52, 93, 32, 36, 49, 44, 50, 53, > 53, 32, 45, 97, 91, 45, 52, 44, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 48, 32, 58, > 10, 49, 50, 56, 44, 49, 50, 56, 44, 49, 44, 49, 44, 49, 32, 45, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 49, 53, 37, 44, 49, 53, 37, > 44, 56, 53, 37, 44, 56, 53, 37, 44, 49, 44, 48, 32, 45, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 49, 53, 37, 44, 56, 53, 37, 44, 56, > 53, 37, 44, 49, 53, 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, > 101, 91, 45, 49, 93, 32, 49, 50, 32, 45, 95, 120, 95, 116, 105, 99, > 116, 97, 99, 116, 111, 101, 32, 45, 100, 101, 102, 111, 114, 109, 91, 45, > 49, 93, 32, 52, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 32, 52, 48, 44, 52, 48, 44, 49, 54, 48, 10, 95, 120, > 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 49, 32, 58, 10, 49, 50, > 56, 44, 49, 50, 56, 44, 49, 44, 49, 44, 49, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, 53, 48, 37, > 44, 50, 50, 37, 44, 50, 50, 37, 44, 48, 44, 49, 44, 48, 32, 45, > 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, > 53, 48, 37, 44, 49, 53, 37, 44, 49, 53, 37, 44, 48, 44, 49, 44, > 49, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 32, > 45, 100, 101, 102, 111, 114, 109, 91, 45, 49, 93, 32, 52, 32, 45, 95, > 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, 32, 49, 54, 48, > 44, 52, 48, 44, 49, 54, 48, 10, 95, 120, 95, 116, 105, 99, 116, 97, > 99, 116, 111, 101, 50, 32, 58, 10, 51, 57, 49, 44, 51, 57, 49, 44, > 49, 44, 49, 44, 34, 33, 40, 120, 37, 49, 51, 48, 41, 32, 124, 124, > 32, 33, 40, 121, 37, 49, 51, 48, 41, 34, 32, 45, 114, 91, 45, 49, > 93, 32, 52, 50, 49, 44, 52, 50, 49, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 51, 32, 45, 95, 120, 95, 116, 105, 99, 116, > 97, 99, 116, 111, 101, 32, 45, 102, 91, 45, 49, 93, 32, 49, 45, 105, > 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 49, 48, 32, 45, 98, 91, 45, 49, 93, 32, > 56, 44, 48, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, > 32, 49, 46, 53, 32, 45, 110, 91, 45, 49, 93, 32, 50, 50, 48, 44, > 50, 53, 53, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 32, 45, 116, > 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 95, 120, 95, 116, 105, 99, > 116, 97, 99, 116, 111, 101, 51, 32, 58, 10, 52, 50, 49, 44, 49, 51, > 48, 44, 49, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 49, 48, 37, 44, 54, 48, 37, 44, 57, 48, 37, 44, 54, 48, > 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 54, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, 101, > 32, 45, 114, 111, 116, 97, 116, 101, 91, 45, 49, 93, 32, 123, 63, 40, > 45, 54, 44, 54, 41, 125, 44, 49, 44, 49, 44, 53, 48, 37, 44, 53, > 48, 37, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, 111, > 101, 32, 49, 56, 48, 44, 49, 48, 44, 49, 48, 10, 95, 120, 95, 116, > 105, 99, 116, 97, 99, 116, 111, 101, 52, 32, 58, 10, 45, 95, 120, 95, > 116, 105, 99, 116, 97, 99, 116, 111, 101, 51, 32, 45, 116, 114, 97, 110, > 115, 112, 111, 115, 101, 91, 45, 50, 45, 45, 49, 93, 10, 95, 120, 95, > 116, 105, 99, 116, 97, 99, 116, 111, 101, 53, 32, 58, 10, 52, 50, 49, > 44, 52, 50, 49, 44, 49, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 49, 48, 37, 44, 49, 48, 37, 44, 57, 48, 37, > 44, 57, 48, 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, 101, 91, > 45, 49, 93, 32, 54, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, > 111, 101, 32, 49, 56, 48, 44, 49, 48, 44, 49, 48, 10, 95, 120, 95, > 116, 105, 99, 116, 97, 99, 116, 111, 101, 54, 32, 58, 10, 52, 50, 49, > 44, 52, 50, 49, 44, 49, 44, 49, 44, 49, 32, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 49, 48, 37, 44, 57, 48, 37, 44, 57, 48, 37, > 44, 49, 48, 37, 44, 49, 44, 48, 32, 45, 101, 114, 111, 100, 101, 91, > 45, 49, 93, 32, 54, 32, 45, 95, 120, 95, 116, 105, 99, 116, 97, 99, > 116, 111, 101, 32, 45, 95, 95, 120, 95, 116, 105, 99, 116, 97, 99, 116, > 111, 101, 32, 49, 56, 48, 44, 49, 48, 44, 49, 48, 10, 35, 64, 103, > 109, 105, 99, 32, 120, 95, 119, 97, 118, 101, 115, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, 32, 116, 104, 101, 32, > 105, 109, 97, 103, 101, 32, 119, 97, 118, 101, 115, 32, 100, 101, 109, 111, > 46, 10, 120, 95, 119, 97, 118, 101, 115, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 73, 109, 97, 103, > 101, 32, 119, 97, 118, 101, 115, 32, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, 45, > 32, 76, 101, 102, 116, 32, 109, 111, 117, 115, 101, 32, 98, 117, 116, 116, > 111, 110, 32, 116, 111, 32, 100, 114, 111, 112, 32, 98, 97, 108, 108, 115, > 46, 92, 110, 10, 45, 45, 45, 45, 32, 82, 105, 103, 104, 116, 32, 109, > 111, 117, 115, 101, 32, 98, 117, 116, 116, 111, 110, 32, 116, 111, 32, 114, > 111, 116, 97, 116, 101, 32, 118, 105, 101, 119, 46, 92, 110, 10, 45, 45, > 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 68, 39, > 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, 32, 119, 105, 110, 100, 111, > 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, > 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, 67, 39, 32, 116, 111, 32, > 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 67, 84, 82, 76, 43, 70, 39, 32, 116, 111, 32, 115, 119, 105, 116, 99, > 104, 32, 102, 117, 108, 108, 115, 99, 114, 101, 101, 110, 32, 109, 111, 100, > 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, > 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, 39, 32, 116, 111, 32, 101, > 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, 45, 92, 110, 10, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, > 45, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 45, 108, 91, 93, > 10, 50, 48, 48, 44, 50, 48, 48, 32, 120, 61, 123, 45, 49, 46, 48, > 54, 45, 63, 42, 48, 46, 49, 125, 32, 121, 61, 123, 45, 48, 46, 50, > 54, 45, 63, 42, 48, 46, 49, 125, 10, 45, 109, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 32, 36, 120, 44, 36, 121, 44, 123, 36, 120, 43, 48, > 46, 49, 125, 44, 123, 36, 121, 43, 48, 46, 49, 125, 44, 50, 53, 54, > 10, 49, 54, 44, 49, 44, 49, 44, 51, 44, 63, 32, 45, 114, 91, 45, > 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, > 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 49, 10, 45, 109, 97, 112, > 91, 48, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 114, 50, 100, 120, 32, 49, 48, 48, 10, 45, 45, 109, 105, 114, > 114, 111, 114, 32, 121, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, > 32, 45, 43, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, > 100, 108, 32, 45, 101, 108, 115, 101, 32, 45, 107, 91, 48, 93, 32, 45, > 114, 91, 48, 93, 32, 49, 48, 48, 44, 49, 48, 48, 44, 49, 44, 51, > 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 48, 93, 32, > 40, 50, 48, 59, 56, 48, 59, 48, 94, 50, 48, 59, 56, 48, 59, 48, > 94, 50, 48, 59, 56, 48, 59, 48, 41, 32, 45, 114, 91, 48, 93, 32, > 52, 48, 48, 44, 51, 48, 48, 44, 49, 44, 51, 44, 51, 32, 45, 119, > 97, 116, 101, 114, 91, 48, 93, 32, 49, 48, 48, 44, 50, 10, 45, 119, > 91, 48, 93, 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, 104, > 125, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, 93, 32, 73, > 109, 97, 103, 101, 32, 119, 97, 118, 101, 115, 34, 10, 119, 61, 123, 119, > 125, 32, 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 118, 51, 100, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 45, 49, 93, 32, 56, 44, 123, 55, 43, 51, 42, 105, 91, > 54, 93, 125, 44, 48, 44, 48, 32, 45, 114, 91, 45, 49, 93, 32, 51, > 44, 123, 104, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, 40, 48, > 44, 49, 44, 48, 59, 49, 44, 48, 44, 49, 59, 48, 44, 49, 44, 48, > 41, 32, 45, 47, 91, 45, 49, 93, 32, 50, 10, 45, 98, 97, 108, 108, > 91, 93, 32, 50, 48, 44, 50, 48, 48, 44, 50, 53, 53, 44, 49, 50, > 56, 44, 49, 44, 48, 46, 55, 44, 51, 46, 53, 10, 48, 32, 36, 119, > 44, 36, 119, 32, 91, 45, 49, 93, 10, 45, 108, 51, 100, 32, 123, 36, > 119, 47, 50, 125, 44, 45, 50, 48, 48, 44, 45, 49, 48, 48, 48, 32, > 45, 115, 108, 51, 100, 32, 48, 46, 52, 32, 45, 115, 115, 51, 100, 32, > 48, 46, 56, 32, 45, 102, 51, 100, 32, 53, 48, 48, 32, 116, 105, 109, > 101, 48, 61, 64, 124, 10, 45, 100, 111, 10, 45, 45, 99, 111, 110, 118, > 111, 108, 118, 101, 91, 45, 49, 93, 32, 91, 51, 93, 44, 49, 32, 45, > 45, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 114, 109, 91, 45, > 51, 93, 32, 45, 98, 91, 45, 49, 93, 32, 48, 46, 56, 32, 45, 45, > 91, 45, 49, 93, 32, 123, 105, 97, 125, 10, 45, 114, 91, 45, 49, 93, > 32, 49, 44, 123, 36, 119, 42, 36, 119, 125, 44, 49, 44, 49, 44, 45, > 49, 32, 45, 106, 91, 50, 93, 32, 91, 45, 49, 93, 44, 50, 44, 48, > 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, 36, 119, 44, 49, 44, > 49, 44, 45, 49, 10, 91, 49, 93, 10, 45, 105, 102, 32, 64, 123, 53, > 44, 104, 125, 32, 45, 45, 108, 91, 53, 93, 32, 45, 114, 111, 119, 115, > 32, 48, 44, 50, 10, 110, 98, 61, 123, 119, 125, 10, 45, 105, 91, 48, > 93, 32, 40, 123, 39, 67, 73, 109, 103, 51, 100, 39, 125, 41, 32, 45, > 105, 91, 49, 93, 32, 40, 36, 110, 98, 44, 36, 110, 98, 41, 32, 45, > 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 50, 93, 10, 40, 49, 44, > 48, 59, 49, 44, 123, 36, 110, 98, 45, 49, 125, 41, 32, 45, 114, 91, > 45, 49, 93, 32, 50, 44, 36, 110, 98, 44, 49, 44, 49, 44, 51, 32, > 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, 10, 49, 44, 123, 52, 42, > 36, 110, 98, 125, 44, 49, 44, 49, 44, 49, 32, 45, 121, 32, 45, 97, > 32, 121, 10, 45, 101, 110, 100, 108, 32, 91, 52, 93, 32, 45, 115, 112, > 114, 105, 116, 101, 115, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 43, 51, 100, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 45, 51, 100, 91, 45, 49, 93, 32, 123, 36, 119, 47, 50, > 125, 44, 123, 36, 119, 47, 50, 125, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 64, 123, 48, 44, 48, 46, 57, 42, 109, 97, 120, 40, 119, 44, > 104, 41, 47, 36, 119, 125, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 48, 44, 48, 44, 49, 44, 123, 105, 102, 40, 64, 123, 33, 44, 98, 125, > 38, 50, 44, 45, 64, 123, 33, 44, 120, 125, 42, 51, 54, 48, 47, 64, > 123, 33, 44, 119, 125, 44, 64, 124, 42, 51, 48, 41, 125, 32, 45, 114, > 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 45, 49, 50, > 48, 10, 45, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, 32, > 91, 45, 49, 93, 44, 53, 48, 37, 44, 54, 53, 37, 44, 51, 48, 44, > 49, 44, 51, 44, 48, 44, 48, 32, 45, 119, 91, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, > 125, 38, 38, 64, 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, > 123, 50, 42, 119, 125, 44, 123, 50, 42, 104, 125, 32, 45, 101, 108, 105, > 102, 32, 123, 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, > 38, 38, 64, 123, 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, > 119, 125, 44, 123, 104, 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, 123, > 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, 33, > 44, 70, 125, 125, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, > 36, 105, 115, 95, 102, 115, 41, 125, 32, 105, 115, 95, 102, 115, 61, 64, > 123, 33, 44, 119, 125, 44, 64, 123, 33, 44, 104, 125, 32, 102, 119, 61, > 123, 109, 105, 110, 40, 64, 123, 33, 44, 117, 125, 42, 104, 47, 119, 44, > 64, 123, 33, 44, 118, 125, 42, 119, 47, 104, 41, 125, 32, 45, 119, 91, > 93, 32, 36, 102, 119, 44, 123, 36, 102, 119, 42, 104, 47, 119, 125, 44, > 48, 44, 49, 10, 45, 101, 108, 115, 101, 32, 45, 119, 91, 93, 32, 36, > 105, 115, 95, 102, 115, 44, 48, 44, 48, 32, 105, 115, 95, 102, 115, 61, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 119, 97, 105, > 116, 32, 50, 48, 10, 45, 105, 102, 32, 123, 64, 123, 33, 44, 98, 125, > 38, 49, 124, 124, 40, 64, 124, 45, 36, 116, 105, 109, 101, 48, 41, 62, > 49, 125, 32, 40, 123, 63, 42, 36, 119, 125, 59, 123, 63, 42, 36, 119, > 125, 59, 55, 48, 59, 48, 41, 32, 45, 97, 91, 53, 44, 45, 49, 93, > 32, 120, 32, 116, 105, 109, 101, 48, 61, 123, 64, 124, 45, 63, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 53, 44, 104, > 125, 32, 45, 108, 91, 53, 44, 45, 49, 93, 10, 45, 115, 104, 91, 48, > 93, 32, 50, 44, 50, 44, 48, 44, 48, 32, 45, 115, 104, 91, 48, 93, > 32, 51, 44, 51, 44, 48, 44, 48, 32, 45, 45, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 50, 32, > 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 115, 91, 48, 93, > 32, 120, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 99, 111, 111, 114, 100, 115, 61, 64, 123, 36, 60, 44, 48, 45, > 49, 125, 32, 45, 105, 102, 32, 123, 64, 123, 36, 60, 44, 50, 125, 60, > 105, 40, 36, 99, 111, 111, 114, 100, 115, 41, 125, 32, 45, 61, 91, 45, > 49, 93, 32, 123, 56, 48, 43, 64, 123, 45, 49, 44, 40, 36, 99, 111, > 111, 114, 100, 115, 41, 125, 125, 44, 36, 99, 111, 111, 114, 100, 115, 32, > 45, 114, 109, 91, 36, 60, 93, 32, 45, 101, 110, 100, 105, 102, 32, 45, > 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, > 32, 45, 105, 91, 48, 93, 32, 48, 32, 45, 101, 108, 115, 101, 32, 45, > 97, 91, 48, 45, 45, 50, 93, 32, 120, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, > 104, 105, 108, 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, > 123, 33, 44, 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, > 33, 44, 81, 125, 125, 10, 45, 114, 109, 32, 45, 119, 32, 48, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 120, 95, 119, 104, 105, > 114, 108, 32, 58, 32, 95, 111, 112, 97, 99, 105, 116, 121, 62, 61, 48, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 76, 97, 117, 110, 99, 104, > 32, 116, 104, 101, 32, 102, 114, 97, 99, 116, 97, 108, 32, 119, 104, 105, > 114, 108, 115, 32, 100, 101, 109, 111, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 111, 112, 97, 99, 105, 116, 121, 61, 48, 46, 50, 39, > 46, 10, 120, 95, 119, 104, 105, 114, 108, 32, 58, 32, 45, 99, 104, 101, > 99, 107, 32, 36, 123, 49, 61, 48, 46, 50, 125, 62, 61, 48, 10, 45, > 101, 91, 93, 32, 34, 92, 110, 10, 45, 45, 45, 45, 45, 45, 32, 70, > 114, 97, 99, 116, 97, 108, 32, 119, 104, 105, 114, 108, 115, 32, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, > 84, 82, 76, 43, 68, 39, 32, 116, 111, 32, 100, 111, 117, 98, 108, 101, > 32, 119, 105, 110, 100, 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, > 45, 45, 45, 45, 32, 75, 101, 121, 115, 32, 39, 67, 84, 82, 76, 43, > 67, 39, 32, 116, 111, 32, 114, 101, 115, 101, 116, 32, 119, 105, 110, 100, > 111, 119, 32, 115, 105, 122, 101, 46, 92, 110, 10, 45, 45, 45, 45, 32, > 75, 101, 121, 115, 32, 39, 69, 83, 67, 39, 32, 111, 114, 32, 39, 81, > 39, 32, 116, 111, 32, 101, 120, 105, 116, 46, 92, 110, 10, 45, 45, 45, > 45, 92, 110, 10, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 34, 10, 45, 118, 32, 45, 10, 53, 44, 53, > 44, 49, 44, 51, 32, 50, 53, 54, 44, 50, 53, 54, 44, 49, 44, 51, > 32, 91, 45, 49, 93, 32, 45, 119, 91, 45, 49, 93, 32, 51, 56, 52, > 44, 51, 56, 52, 44, 48, 44, 34, 91, 71, 92, 52, 55, 77, 73, 67, > 93, 32, 70, 114, 97, 99, 116, 97, 108, 32, 119, 104, 105, 114, 108, 115, > 34, 10, 116, 97, 110, 103, 108, 101, 61, 48, 32, 116, 122, 111, 111, 109, > 61, 48, 32, 120, 99, 61, 123, 40, 119, 45, 64, 123, 45, 51, 44, 119, > 125, 41, 47, 50, 125, 32, 121, 99, 61, 123, 40, 104, 45, 64, 123, 45, > 51, 44, 104, 125, 41, 47, 50, 125, 10, 45, 100, 111, 10, 45, 114, 97, > 110, 100, 91, 45, 51, 93, 32, 48, 44, 50, 53, 53, 32, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 51, 93, 44, 36, 120, 99, 44, 36, 121, 99, > 44, 48, 44, 48, 10, 45, 114, 111, 116, 97, 116, 101, 91, 45, 50, 93, > 32, 123, 56, 42, 115, 105, 110, 40, 36, 116, 97, 110, 103, 108, 101, 41, > 125, 44, 48, 44, 48, 44, 123, 119, 47, 50, 43, 63, 40, 45, 50, 44, > 50, 41, 125, 44, 123, 104, 47, 50, 125, 44, 123, 49, 46, 48, 51, 43, > 48, 46, 48, 50, 42, 115, 105, 110, 40, 36, 116, 122, 111, 111, 109, 41, > 125, 10, 116, 97, 110, 103, 108, 101, 61, 123, 36, 116, 97, 110, 103, 108, > 101, 43, 48, 46, 48, 48, 49, 125, 32, 116, 122, 111, 111, 109, 61, 123, > 36, 116, 122, 111, 111, 109, 43, 48, 46, 48, 50, 125, 10, 45, 106, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 36, 49, 32, 45, 119, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, > 64, 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, > 123, 33, 44, 68, 125, 125, 32, 45, 119, 91, 93, 32, 123, 51, 42, 119, > 125, 44, 123, 51, 42, 104, 125, 32, 45, 101, 108, 105, 102, 32, 123, 64, > 123, 33, 44, 67, 84, 82, 76, 76, 69, 70, 84, 125, 38, 38, 64, 123, > 33, 44, 67, 125, 125, 32, 45, 119, 91, 93, 32, 123, 49, 46, 53, 42, > 119, 125, 44, 123, 49, 46, 53, 42, 104, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 119, 97, 105, 116, 32, 50, 48, 10, 45, 119, 104, 105, 108, > 101, 32, 123, 64, 33, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, > 69, 83, 67, 125, 34, 32, 38, 38, 32, 34, 33, 64, 123, 33, 44, 81, > 125, 125, 10, 45, 114, 109, 91, 45, 51, 44, 45, 50, 93, 32, 45, 119, > 91, 93, 32, 48, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 58, 32, 80, 73, 78, 75, 45, 108, 105, 98, 114, 97, 114, 121, > 32, 111, 112, 101, 114, 97, 116, 111, 114, 115, 10, 95, 119, 114, 98, 121, > 116, 101, 112, 110, 107, 32, 58, 10, 45, 111, 117, 116, 112, 117, 116, 95, > 112, 105, 110, 107, 51, 100, 32, 36, 123, 49, 125, 46, 112, 110, 107, 10, > 95, 120, 112, 105, 110, 107, 32, 58, 10, 102, 105, 108, 101, 110, 97, 109, > 101, 61, 64, 123, 45, 102, 105, 108, 101, 95, 114, 97, 110, 100, 125, 10, > 112, 114, 101, 102, 105, 120, 61, 112, 105, 110, 107, 46, 10, 45, 105, 102, > 32, 123, 33, 64, 123, 45, 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, > 125, 125, 10, 45, 120, 32, 34, 119, 104, 105, 99, 104, 32, 34, 36, 123, > 112, 114, 101, 102, 105, 120, 125, 36, 123, 49, 125, 34, 32, 62, 47, 100, > 101, 118, 47, 110, 117, 108, 108, 32, 50, 62, 38, 49, 34, 10, 45, 105, > 102, 32, 123, 64, 123, 125, 33, 61, 48, 125, 32, 112, 114, 101, 102, 105, > 120, 61, 34, 34, 32, 45, 120, 32, 34, 119, 104, 105, 99, 104, 32, 34, > 36, 49, 34, 32, 62, 47, 100, 101, 118, 47, 110, 117, 108, 108, 32, 50, > 62, 38, 49, 34, 10, 9, 32, 32, 45, 105, 102, 32, 123, 64, 123, 125, > 33, 61, 48, 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 69, 120, 101, > 99, 117, 116, 97, 98, 108, 101, 32, 40, 112, 105, 110, 107, 46, 41, 34, > 36, 49, 34, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 32, 105, 110, > 32, 80, 65, 84, 72, 44, 32, 115, 116, 97, 116, 117, 115, 32, 61, 32, > 34, 64, 123, 125, 34, 33, 33, 32, 82, 101, 116, 117, 114, 110, 105, 110, > 103, 33, 33, 92, 110, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 9, 45, 101, 110, 100, 105, 102, 10, 45, 111, > 117, 116, 112, 117, 116, 95, 112, 105, 110, 107, 51, 100, 32, 36, 123, 102, > 105, 108, 101, 110, 97, 109, 101, 125, 46, 112, 110, 107, 32, 45, 120, 32, > 36, 123, 112, 114, 101, 102, 105, 120, 125, 36, 123, 49, 125, 34, 32, 34, > 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, 34, 46, 112, 110, 107, > 32, 36, 50, 32, 34, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, > 34, 95, 111, 46, 112, 110, 107, 32, 62, 47, 100, 101, 118, 47, 110, 117, > 108, 108, 32, 50, 62, 38, 49, 34, 10, 45, 101, 108, 115, 101, 10, 45, > 111, 117, 116, 112, 117, 116, 95, 112, 105, 110, 107, 51, 100, 32, 36, 123, > 102, 105, 108, 101, 110, 97, 109, 101, 125, 46, 112, 110, 107, 32, 45, 120, > 32, 36, 49, 34, 32, 34, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, > 125, 34, 46, 112, 110, 107, 32, 36, 50, 32, 34, 36, 123, 102, 105, 108, > 101, 110, 97, 109, 101, 125, 34, 95, 111, 46, 112, 110, 107, 34, 10, 45, > 101, 110, 100, 105, 102, 10, 115, 116, 97, 116, 117, 115, 61, 64, 123, 125, > 10, 45, 102, 105, 108, 101, 95, 114, 109, 32, 36, 123, 102, 105, 108, 101, > 110, 97, 109, 101, 125, 46, 112, 110, 107, 10, 45, 105, 102, 32, 123, 36, > 115, 116, 97, 116, 117, 115, 33, 61, 48, 92, 32, 38, 38, 92, 32, 123, > 36, 49, 39, 33, 61, 39, 115, 101, 117, 105, 108, 97, 117, 116, 111, 125, > 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 69, 120, 101, 99, 32, 115, > 116, 97, 116, 117, 115, 32, 105, 115, 32, 34, 36, 123, 115, 116, 97, 116, > 117, 115, 125, 34, 46, 34, 32, 45, 114, 101, 116, 117, 114, 110, 10, 45, > 101, 108, 105, 102, 32, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, > 95, 111, 46, 112, 110, 107, 32, 45, 105, 32, 36, 123, 102, 105, 108, 101, > 110, 97, 109, 101, 125, 95, 111, 46, 112, 110, 107, 32, 45, 102, 105, 108, > 101, 95, 114, 109, 32, 36, 123, 102, 105, 108, 101, 110, 97, 109, 101, 125, > 95, 111, 46, 112, 110, 107, 32, 45, 107, 91, 45, 49, 93, 10, 45, 101, > 108, 115, 101, 32, 45, 101, 114, 114, 111, 114, 32, 34, 69, 120, 101, 99, > 32, 101, 114, 114, 111, 114, 33, 33, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 95, 120, 112, 105, 110, 107, 115, 32, 58, 10, 115, 61, 64, 123, 45, > 49, 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, > 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, > 62, 44, 45, 49, 125, 93, 32, 32, 45, 95, 120, 112, 105, 110, 107, 32, > 36, 49, 44, 34, 36, 50, 34, 32, 45, 107, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, > 36, 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, > 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 95, 120, 102, 114, 97, 109, > 101, 32, 58, 10, 45, 108, 105, 110, 101, 32, 48, 37, 44, 48, 37, 44, > 49, 48, 48, 37, 44, 48, 37, 32, 45, 108, 105, 110, 101, 32, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 108, 105, 110, 101, 32, 48, 37, 44, 48, 37, 44, 48, 37, 44, 49, > 48, 48, 37, 32, 45, 108, 105, 110, 101, 32, 49, 48, 48, 37, 44, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 10, 35, 64, 103, 109, > 105, 99, 32, 111, 117, 116, 112, 117, 116, 95, 112, 105, 110, 107, 51, 100, > 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 83, 97, 118, 101, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 32, 105, 109, 97, 103, 101, 115, 32, 97, 115, 32, 80, 53, 45, > 99, 111, 100, 101, 100, 32, 80, 80, 77, 32, 102, 105, 108, 101, 115, 32, > 40, 80, 73, 78, 75, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 32, > 102, 111, 114, 32, 51, 100, 32, 118, 111, 108, 117, 109, 101, 116, 114, 105, > 99, 32, 105, 109, 97, 103, 101, 115, 41, 46, 10, 111, 117, 116, 112, 117, > 116, 95, 112, 105, 110, 107, 51, 100, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 79, 117, 116, 112, 117, 116, 32, 105, 109, 97, 103, 101, > 36, 63, 32, 97, 115, 32, 102, 105, 108, 101, 32, 39, 36, 49, 39, 32, > 40, 105, 110, 32, 51, 100, 32, 112, 105, 110, 107, 32, 101, 120, 116, 101, > 110, 115, 105, 111, 110, 32, 111, 102, 32, 80, 53, 45, 99, 111, 100, 101, > 100, 32, 80, 80, 77, 32, 102, 111, 114, 109, 97, 116, 41, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 48, 61, 34, 36, 49, 34, 10, > 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 36, 62, 61, 64, 123, 45, 102, > 105, 108, 101, 110, 97, 109, 101, 92, 32, 34, 92, 34, 36, 49, 92, 34, > 34, 44, 36, 62, 125, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 100, 61, 61, 49, 125, 32, > 45, 111, 91, 45, 49, 93, 32, 112, 112, 109, 58, 36, 123, 102, 105, 108, > 101, 110, 97, 109, 101, 36, 62, 125, 10, 45, 101, 108, 115, 101, 10, 40, > 123, 39, 80, 53, 92, 110, 123, 119, 125, 92, 32, 123, 104, 125, 92, 32, > 123, 100, 125, 92, 110, 50, 53, 53, 92, 110, 39, 125, 41, 10, 45, 45, > 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 50, 93, 32, 48, 32, 45, > 121, 91, 45, 49, 93, 32, 120, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 45, 111, 91, 45, 49, 93, 32, 114, 97, 119, 58, 36, > 123, 102, 105, 108, 101, 110, 97, 109, 101, 36, 62, 125, 44, 99, 104, 97, > 114, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 80, 105, 110, 107, 32, 119, 114, 97, 112, > 112, 101, 114, 32, 110, 97, 109, 101, 44, 112, 49, 44, 32, 46, 46, 32, > 44, 112, 110, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, > 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, > 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, > 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 41, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 112, 114, 101, 112, 97, 114, 101, 115, > 32, 105, 110, 112, 117, 116, 44, 32, 99, 97, 108, 108, 115, 32, 101, 120, > 116, 101, 114, 110, 97, 108, 32, 34, 110, 97, 109, 101, 32, 105, 110, 112, > 117, 116, 32, 112, 49, 32, 46, 46, 46, 32, 112, 110, 32, 111, 117, 116, > 112, 117, 116, 34, 32, 97, 110, 100, 32, 114, 101, 97, 100, 115, 32, 111, > 117, 116, 112, 117, 116, 32, 40, 47, 116, 109, 112, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, > 103, 32, 45, 45, 112, 105, 110, 107, 32, 97, 115, 102, 114, 44, 53, 32, > 45, 112, 105, 110, 107, 91, 48, 93, 32, 97, 115, 102, 44, 53, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, 112, 105, > 110, 107, 32, 109, 97, 120, 105, 109, 97, 44, 52, 10, 112, 105, 110, 107, > 32, 58, 32, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 35, 62, > 49, 125, 32, 40, 123, 34, 39, 36, 123, 50, 45, 45, 49, 125, 39, 34, > 125, 41, 32, 45, 114, 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, > 123, 39, 44, 39, 125, 44, 123, 34, 39, 32, 39, 34, 125, 32, 112, 61, > 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 101, 108, 115, 101, 32, 112, 61, 34, 32, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 43, 32, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 67, 97, 108, 108, 32, 112, 105, 110, 107, 32, 112, 97, 99, 107, 97, > 103, 101, 32, 119, 105, 116, 104, 32, 99, 109, 100, 58, 32, 92, 34, 36, > 49, 36, 63, 32, 34, 36, 112, 34, 36, 63, 92, 34, 46, 34, 32, 45, > 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, > 110, 107, 115, 32, 36, 49, 44, 36, 112, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 112, 105, 110, 107, 95, 103, 114, 97, 121, 115, 107, 101, 108, 32, > 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, > 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, > 32, 125, 44, 32, 95, 108, 97, 109, 98, 100, 97, 61, 48, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, > 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, > 110, 47, 103, 114, 97, 121, 115, 107, 101, 108, 95, 56, 99, 46, 104, 116, > 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 71, 114, 97, > 121, 115, 99, 97, 108, 101, 32, 104, 111, 109, 111, 116, 111, 112, 105, 99, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 40, 114, 101, 113, 117, 105, > 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, > 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, > 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, > 32, 97, 110, 100, 32, 39, 108, 97, 109, 98, 100, 97, 61, 48, 39, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 45, 112, 105, 110, 107, 95, 103, 114, 97, > 121, 115, 107, 101, 108, 32, 44, 32, 45, 45, 112, 105, 110, 107, 95, 103, > 114, 97, 121, 115, 107, 101, 108, 91, 48, 93, 32, 44, 49, 48, 32, 45, > 45, 112, 105, 110, 107, 95, 103, 114, 97, 121, 115, 107, 101, 108, 91, 48, > 93, 32, 44, 49, 48, 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 50, 10, 112, 105, 110, 107, 95, 103, 114, 97, 121, > 115, 107, 101, 108, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 52, 125, 44, 36, 123, 50, 61, 48, 125, 10, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, > 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, 32, 124, > 124, 32, 36, 49, 61, 61, 50, 54, 34, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, > 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 34, 103, 114, 97, 121, 115, > 107, 101, 108, 34, 44, 34, 110, 117, 108, 108, 32, 36, 49, 32, 36, 50, > 34, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, > 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, > 109, 97, 120, 105, 109, 97, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, > 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, 95, 104, 101, 105, 103, 104, > 116, 61, 49, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, > 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, > 100, 111, 120, 121, 103, 101, 110, 47, 104, 101, 105, 103, 104, 116, 109, 97, > 120, 105, 109, 97, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 72, 101, 105, 103, 104, 116, 109, 97, 120, > 105, 109, 97, 32, 102, 105, 108, 116, 101, 114, 105, 110, 103, 32, 40, 114, > 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, > 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, > 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, > 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 61, 52, 39, 32, 97, 110, 100, 32, 39, 104, 101, 105, 103, 104, 116, > 61, 49, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, > 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, > 32, 50, 32, 45, 45, 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, > 109, 105, 110, 105, 109, 97, 32, 44, 49, 53, 32, 45, 45, 112, 105, 110, > 107, 95, 104, 101, 105, 103, 104, 116, 109, 97, 120, 105, 109, 97, 91, 48, > 44, 49, 93, 32, 44, 49, 53, 32, 45, 45, 91, 45, 51, 44, 45, 49, > 93, 32, 45, 45, 91, 45, 51, 44, 45, 49, 93, 32, 45, 107, 101, 101, > 112, 91, 45, 49, 44, 45, 50, 93, 10, 112, 105, 110, 107, 95, 104, 101, > 105, 103, 104, 116, 109, 97, 120, 105, 109, 97, 32, 58, 32, 45, 99, 104, > 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, > 124, 32, 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, > 32, 124, 124, 32, 36, 49, 61, 61, 50, 54, 34, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 50, 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, > 32, 34, 70, 105, 108, 116, 101, 114, 32, 98, 121, 32, 104, 101, 105, 103, > 104, 116, 109, 97, 120, 105, 109, 97, 32, 101, 120, 101, 99, 32, 119, 105, > 116, 104, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 32, > 36, 49, 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, 45, > 49, 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, > 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, > 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, 110, 107, 32, 34, > 104, 101, 105, 103, 104, 116, 109, 97, 120, 105, 109, 97, 34, 44, 34, 36, > 49, 32, 36, 50, 34, 32, 45, 107, 91, 45, 49, 93, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 115, > 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, 32, 99, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, > 97, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, > 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, > 50, 54, 32, 125, 44, 95, 104, 101, 105, 103, 104, 116, 61, 49, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, > 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, > 101, 110, 47, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 95, > 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 72, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 32, 102, > 105, 108, 116, 101, 114, 105, 110, 103, 32, 40, 114, 101, 113, 117, 105, 114, > 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, > 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, > 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, > 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, 32, > 97, 110, 100, 32, 39, 104, 101, 105, 103, 104, 116, 61, 49, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, 45, > 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, > 97, 32, 44, 49, 53, 32, 45, 45, 112, 105, 110, 107, 95, 104, 101, 105, > 103, 104, 116, 109, 97, 120, 105, 109, 97, 91, 48, 44, 49, 93, 32, 44, > 49, 53, 32, 45, 45, 91, 45, 51, 44, 45, 49, 93, 32, 45, 45, 91, > 45, 51, 44, 45, 49, 93, 32, 45, 107, 101, 101, 112, 91, 45, 49, 44, > 45, 50, 93, 10, 112, 105, 110, 107, 95, 104, 101, 105, 103, 104, 116, 109, > 105, 110, 105, 109, 97, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, 36, 49, 61, > 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, 32, 124, 124, 32, 36, > 49, 61, 61, 50, 54, 34, 32, 45, 115, 107, 105, 112, 32, 36, 123, 50, > 61, 49, 125, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 65, 112, 112, > 108, 121, 32, 102, 105, 108, 116, 101, 114, 32, 98, 121, 32, 104, 101, 105, > 103, 104, 116, 109, 105, 110, 105, 109, 97, 32, 101, 120, 101, 99, 32, 119, > 105, 116, 104, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 32, 36, 49, 32, 104, 101, 105, 103, 104, 116, 32, 36, 50, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, > 45, 49, 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, > 123, 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, 110, 107, 32, > 34, 104, 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 34, 44, 34, > 36, 49, 32, 36, 50, 34, 32, 45, 107, 91, 45, 49, 93, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, > 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, 93, 32, > 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 105, 110, 107, 95, 104, 116, 107, 101, 114, 110, 32, 58, 32, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, > 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, > 32, 95, 116, 121, 112, 101, 61, 123, 34, 34, 124, 117, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, > 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, > 110, 47, 104, 116, 107, 101, 114, 110, 95, 56, 99, 46, 104, 116, 109, 108, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, > 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, > 120, 121, 103, 101, 110, 47, 104, 116, 107, 101, 114, 110, 117, 95, 56, 99, > 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 71, 114, 97, 121, 115, 99, 97, 108, 101, 32, 117, 108, 116, 105, 109, 97, > 116, 101, 32, 104, 111, 109, 111, 116, 111, 112, 105, 99, 32, 116, 104, 105, > 110, 110, 105, 110, 103, 47, 116, 104, 105, 99, 107, 101, 110, 105, 110, 103, > 32, 119, 105, 116, 104, 111, 117, 116, 32, 99, 111, 110, 100, 105, 116, 105, > 111, 110, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, > 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, > 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 52, 39, 32, 97, 110, 100, 32, 39, 116, > 121, 112, 101, 61, 34, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 112, 105, 110, 107, 95, 104, 116, 107, 101, 114, 110, 32, 44, 117, 32, 45, > 45, 112, 105, 110, 107, 95, 104, 116, 107, 101, 114, 110, 91, 48, 93, 32, > 44, 32, 45, 45, 45, 91, 45, 49, 44, 45, 50, 93, 32, 45, 114, 101, > 109, 111, 118, 101, 91, 48, 93, 10, 112, 105, 110, 107, 95, 104, 116, 107, > 101, 114, 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, > 52, 125, 44, 36, 123, 50, 61, 34, 34, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, > 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 104, 116, 107, 101, 114, > 110, 36, 50, 44, 34, 110, 117, 108, 108, 32, 36, 49, 34, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 112, 105, 110, 107, 95, 108, 118, 107, 101, 114, 110, 32, 58, 32, 95, > 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, > 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, > 32, 95, 116, 121, 112, 101, 61, 123, 34, 34, 124, 117, 125, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, > 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, > 110, 47, 108, 118, 107, 101, 114, 110, 95, 56, 99, 46, 104, 116, 109, 108, > 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, > 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, > 120, 121, 103, 101, 110, 47, 108, 118, 107, 101, 114, 110, 117, 95, 56, 99, > 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 71, 114, 97, 121, 115, 99, 97, 108, 101, 32, 117, 108, 116, 105, 109, 97, > 116, 101, 32, 108, 101, 118, 101, 108, 105, 110, 103, 32, 116, 104, 105, 110, > 110, 105, 110, 103, 47, 116, 104, 105, 99, 107, 101, 110, 105, 110, 103, 32, > 119, 105, 116, 104, 111, 117, 116, 32, 99, 111, 110, 100, 105, 116, 105, 111, > 110, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, > 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, > 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 61, 52, 39, 32, 97, 110, 100, 32, 39, 116, 121, > 112, 101, 61, 34, 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 112, 105, > 110, 107, 95, 108, 118, 107, 101, 114, 110, 32, 44, 117, 10, 112, 105, 110, > 107, 95, 108, 118, 107, 101, 114, 110, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 49, 61, 52, 125, 44, 36, 123, 50, 61, 34, 34, 125, 10, > 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, > 52, 32, 124, 124, 32, 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, > 61, 61, 54, 32, 124, 124, 32, 36, 49, 61, 61, 50, 54, 34, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, > 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 108, > 118, 107, 101, 114, 110, 36, 123, 50, 125, 44, 34, 110, 117, 108, 108, 32, > 36, 49, 34, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, 114, 101, 103, 95, > 109, 105, 110, 105, 109, 97, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, > 32, 54, 32, 124, 32, 50, 54, 32, 125, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, > 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 109, 105, > 110, 105, 109, 97, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 103, 105, 111, 110, 97, 108, 32, > 109, 105, 110, 105, 109, 97, 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, > 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, > 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, > 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, > 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 99, 111, > 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, > 106, 112, 103, 32, 45, 45, 98, 108, 117, 114, 32, 50, 32, 45, 112, 105, > 110, 107, 95, 114, 101, 103, 95, 109, 105, 110, 105, 109, 97, 32, 44, 10, > 112, 105, 110, 107, 95, 114, 101, 103, 95, 109, 105, 110, 105, 109, 97, 32, > 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 36, 123, 49, 61, 52, 125, > 61, 61, 52, 32, 124, 124, 32, 36, 49, 61, 61, 56, 32, 124, 124, 32, > 36, 49, 61, 61, 54, 32, 124, 124, 32, 36, 49, 61, 61, 50, 54, 34, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, > 101, 32, 114, 101, 103, 105, 111, 110, 97, 108, 32, 109, 105, 110, 105, 109, > 97, 32, 101, 120, 101, 99, 32, 119, 105, 116, 104, 32, 99, 111, 110, 110, > 101, 99, 116, 105, 118, 105, 116, 121, 32, 36, 49, 46, 34, 10, 45, 118, > 32, 45, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, 45, 49, > 44, 115, 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, 45, > 115, 91, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, > 44, 45, 49, 125, 93, 32, 32, 45, 95, 120, 112, 105, 110, 107, 32, 34, > 109, 105, 110, 105, 109, 97, 34, 44, 34, 36, 49, 34, 32, 45, 107, 91, > 45, 49, 93, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, > 115, 45, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, 115, 107, 101, 108, > 99, 117, 114, 118, 32, 58, 32, 95, 112, 114, 105, 111, 61, 123, 48, 124, > 49, 124, 50, 124, 51, 124, 52, 124, 56, 124, 54, 124, 50, 54, 125, 44, > 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 123, 32, > 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, 54, 32, 125, > 44, 95, 105, 110, 104, 105, 98, 105, 116, 61, 123, 34, 34, 125, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, > 112, 105, 110, 107, 104, 113, 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, > 101, 110, 47, 115, 107, 101, 108, 99, 117, 114, 118, 95, 56, 99, 46, 104, > 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 117, > 114, 118, 105, 108, 105, 110, 101, 97, 114, 32, 98, 105, 110, 97, 114, 121, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 103, 117, 105, 100, 101, 100, > 32, 98, 121, 32, 97, 32, 112, 114, 105, 111, 114, 105, 116, 121, 32, 102, > 117, 110, 99, 116, 105, 111, 110, 32, 111, 114, 32, 105, 109, 97, 103, 101, > 32, 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, > 73, 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, > 101, 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 115, 58, 32, 39, 112, 114, 105, 111, 61, 48, 39, 44, > 32, 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, > 39, 32, 97, 110, 100, 32, 39, 105, 110, 104, 105, 98, 105, 116, 61, 34, > 34, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, > 111, 108, 100, 32, 53, 48, 37, 32, 123, 119, 125, 44, 123, 104, 125, 32, > 45, 102, 105, 108, 108, 91, 45, 49, 93, 32, 39, 105, 102, 40, 120, 62, > 119, 47, 50, 44, 50, 53, 53, 44, 48, 41, 39, 32, 116, 112, 61, 64, > 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 32, 45, 111, 117, 116, > 112, 117, 116, 91, 45, 49, 93, 32, 36, 123, 116, 112, 125, 47, 105, 110, > 104, 105, 98, 105, 116, 46, 112, 103, 109, 32, 45, 114, 101, 109, 111, 118, > 101, 91, 45, 49, 93, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, > 108, 99, 117, 114, 118, 91, 48, 93, 32, 44, 32, 45, 45, 112, 105, 110, > 107, 95, 115, 107, 101, 108, 99, 117, 114, 118, 91, 48, 93, 32, 44, 44, > 36, 123, 116, 112, 125, 47, 105, 110, 104, 105, 98, 105, 116, 46, 112, 103, > 109, 32, 45, 101, 120, 101, 99, 32, 34, 114, 109, 32, 34, 36, 123, 116, > 112, 125, 34, 47, 105, 110, 104, 105, 98, 105, 116, 46, 112, 103, 109, 34, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, > 101, 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, > 32, 53, 48, 37, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, > 99, 117, 114, 118, 32, 44, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, > 101, 108, 99, 117, 114, 118, 91, 45, 50, 93, 32, 44, 56, 10, 112, 105, > 110, 107, 95, 115, 107, 101, 108, 99, 117, 114, 118, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 48, 125, 44, 36, 123, 50, 61, 52, > 125, 44, 36, 123, 51, 61, 34, 34, 125, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 117, 114, 118, 105, 108, 105, 110, 101, 97, 114, 32, 98, > 105, 110, 97, 114, 121, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 103, > 117, 105, 100, 101, 100, 32, 98, 121, 32, 97, 32, 112, 114, 105, 111, 114, > 105, 116, 121, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 111, 114, 32, > 105, 109, 97, 103, 101, 32, 102, 114, 111, 109, 32, 105, 109, 97, 103, 101, > 36, 63, 44, 32, 112, 114, 105, 111, 61, 36, 49, 44, 32, 99, 111, 110, > 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 36, 50, 44, 32, 105, 110, > 104, 105, 98, 105, 116, 61, 36, 51, 46, 34, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, > 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 34, 115, 107, 101, 108, > 99, 117, 114, 118, 34, 44, 34, 36, 49, 32, 36, 50, 32, 36, 51, 34, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, > 109, 105, 99, 32, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 110, 100, > 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, > 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, 54, 32, 124, 32, 50, > 54, 32, 125, 44, 95, 110, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, > 46, 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 115, 107, 101, > 108, 101, 110, 100, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 72, 111, 109, 111, 116, 111, 112, 105, 99, > 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 111, 102, 32, 97, 32, 50, > 100, 32, 111, 114, 32, 51, 100, 32, 98, 105, 110, 97, 114, 121, 32, 105, > 109, 97, 103, 101, 32, 119, 105, 116, 104, 32, 100, 121, 110, 97, 109, 105, > 99, 32, 100, 101, 116, 101, 99, 116, 105, 111, 110, 32, 111, 102, 32, 101, > 110, 100, 32, 112, 111, 105, 110, 116, 115, 32, 40, 114, 101, 113, 117, 105, > 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, 98, > 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, 97, > 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, 32, > 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, > 32, 97, 110, 100, 32, 39, 110, 61, 48, 39, 46, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, > 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, 37, 32, > 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 110, 100, 32, 44, > 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 110, 100, 91, > 45, 50, 93, 32, 44, 45, 49, 10, 112, 105, 110, 107, 95, 115, 107, 101, > 108, 101, 110, 100, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, > 61, 52, 125, 44, 36, 123, 50, 61, 48, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, > 93, 32, 45, 95, 120, 112, 105, 110, 107, 115, 32, 34, 115, 107, 101, 108, > 101, 110, 100, 34, 44, 34, 36, 49, 32, 36, 50, 34, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, > 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 116, 111, 110, 32, 58, 32, > 95, 112, 114, 105, 111, 61, 123, 48, 124, 49, 124, 50, 124, 51, 124, 52, > 124, 56, 124, 54, 124, 50, 54, 125, 44, 95, 99, 111, 110, 110, 101, 99, > 116, 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, > 32, 54, 32, 124, 32, 50, 54, 32, 125, 44, 95, 105, 110, 104, 105, 98, > 105, 116, 61, 123, 34, 34, 125, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 40, 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, > 99, 111, 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 115, 107, 101, 108, > 101, 116, 111, 110, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 85, 108, 116, 105, 109, 97, 116, 101, 32, > 98, 105, 110, 97, 114, 121, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, > 103, 117, 105, 100, 101, 100, 32, 98, 121, 32, 97, 32, 112, 114, 105, 111, > 114, 105, 116, 121, 32, 105, 109, 97, 103, 101, 32, 40, 114, 101, 113, 117, > 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, 108, 105, > 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, 115, 116, > 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, 115, 58, > 32, 39, 112, 114, 105, 111, 61, 48, 39, 44, 32, 39, 99, 111, 110, 110, > 101, 99, 116, 105, 118, 105, 116, 121, 61, 52, 39, 32, 97, 110, 100, 32, > 39, 105, 110, 104, 105, 98, 105, 116, 61, 34, 34, 39, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, > 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, 53, 48, > 37, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 101, 116, 111, > 110, 91, 45, 49, 93, 32, 44, 10, 112, 105, 110, 107, 95, 115, 107, 101, > 108, 101, 116, 111, 110, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 49, 61, 48, 125, 44, 36, 123, 50, 61, 52, 125, 44, 36, 123, 51, 61, > 34, 34, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 32, 45, 95, 120, 112, 105, > 110, 107, 115, 32, 34, 115, 107, 101, 108, 101, 116, 111, 110, 34, 44, 34, > 36, 49, 32, 36, 50, 32, 36, 51, 34, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, > 107, 95, 115, 107, 101, 108, 112, 97, 114, 32, 58, 32, 95, 97, 108, 103, > 111, 114, 105, 116, 104, 109, 61, 123, 48, 46, 46, 50, 57, 125, 44, 95, > 110, 115, 116, 101, 112, 115, 61, 95, 49, 44, 95, 105, 110, 104, 105, 98, > 105, 116, 61, 34, 34, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, > 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 115, 107, 101, 108, 112, 97, > 114, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 80, 97, 114, 97, 108, 108, 101, 108, 32, 98, 105, 110, > 97, 114, 121, 32, 115, 107, 101, 108, 101, 116, 111, 110, 32, 40, 114, 101, > 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, 78, 75, 32, > 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, 32, 105, 110, > 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, 108, 117, 101, > 115, 58, 32, 39, 97, 108, 103, 111, 114, 105, 116, 104, 109, 61, 52, 39, > 44, 32, 39, 110, 115, 116, 101, 112, 115, 61, 45, 49, 39, 32, 97, 110, > 100, 32, 39, 105, 110, 104, 105, 98, 105, 116, 61, 34, 34, 39, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, 109, 97, 103, 101, > 46, 106, 112, 103, 32, 45, 116, 104, 114, 101, 115, 104, 111, 108, 100, 32, > 53, 48, 37, 32, 45, 45, 112, 105, 110, 107, 95, 115, 107, 101, 108, 112, > 97, 114, 91, 45, 49, 93, 32, 48, 32, 45, 45, 112, 105, 110, 107, 95, > 115, 107, 101, 108, 112, 97, 114, 91, 45, 49, 93, 32, 50, 10, 112, 105, > 110, 107, 95, 115, 107, 101, 108, 112, 97, 114, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 123, 49, 61, 52, 125, 44, 36, 123, 50, 61, 45, 49, > 125, 44, 36, 123, 51, 61, 34, 34, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, > 32, 45, 95, 120, 102, 114, 97, 109, 101, 32, 45, 95, 120, 112, 105, 110, > 107, 115, 32, 34, 115, 107, 101, 108, 112, 97, 114, 34, 44, 34, 36, 49, > 32, 36, 50, 32, 36, 51, 34, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 35, 64, 103, 109, 105, 99, 32, 112, 105, 110, 107, 95, > 119, 115, 104, 101, 100, 32, 58, 32, 95, 99, 111, 110, 110, 101, 99, 116, > 105, 118, 105, 116, 121, 61, 123, 32, 52, 32, 124, 32, 56, 32, 124, 32, > 54, 32, 124, 32, 50, 54, 32, 125, 44, 95, 105, 110, 118, 101, 114, 115, > 101, 61, 123, 32, 48, 32, 124, 32, 49, 32, 125, 44, 95, 104, 101, 105, > 103, 104, 116, 61, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, > 104, 116, 116, 112, 58, 47, 47, 112, 105, 110, 107, 104, 113, 46, 99, 111, > 109, 47, 100, 111, 120, 121, 103, 101, 110, 47, 119, 115, 104, 101, 100, 116, > 111, 112, 111, 95, 56, 99, 46, 104, 116, 109, 108, 41, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 87, 97, 116, 101, 114, 115, 104, 101, 100, 32, > 40, 114, 101, 113, 117, 105, 114, 101, 115, 32, 116, 104, 101, 32, 80, 73, > 78, 75, 32, 108, 105, 98, 114, 97, 114, 121, 32, 116, 111, 32, 98, 101, > 32, 105, 110, 115, 116, 97, 108, 108, 101, 100, 41, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, 97, > 108, 117, 101, 115, 58, 32, 39, 99, 111, 110, 110, 101, 99, 116, 105, 118, > 105, 116, 121, 61, 52, 39, 44, 32, 39, 105, 110, 118, 101, 114, 115, 101, > 61, 48, 39, 32, 97, 110, 100, 32, 39, 104, 101, 105, 103, 104, 116, 61, > 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 36, 32, 105, > 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, 112, 105, 110, 107, 95, > 119, 115, 104, 101, 100, 32, 44, 49, 44, 53, 32, 45, 112, 105, 110, 107, > 95, 119, 115, 104, 101, 100, 91, 48, 93, 32, 44, 44, 53, 10, 112, 105, > 110, 107, 95, 119, 115, 104, 101, 100, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, > 36, 49, 61, 61, 56, 32, 124, 124, 32, 36, 49, 61, 61, 54, 32, 124, > 124, 32, 36, 49, 61, 61, 50, 54, 34, 32, 45, 115, 107, 105, 112, 32, > 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, 61, 48, 125, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 109, 112, 117, 116, 101, 32, 119, > 115, 104, 101, 100, 116, 111, 112, 111, 32, 101, 120, 101, 99, 32, 119, 105, > 116, 104, 32, 99, 111, 110, 110, 101, 99, 116, 105, 118, 105, 116, 121, 32, > 36, 49, 32, 105, 110, 118, 101, 114, 115, 105, 111, 110, 32, 36, 50, 32, > 104, 101, 105, 103, 104, 116, 32, 36, 51, 46, 34, 10, 45, 118, 32, 45, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, > 123, 62, 44, 45, 49, 125, 93, 10, 115, 61, 64, 123, 45, 49, 44, 115, > 125, 32, 45, 105, 102, 32, 123, 36, 115, 62, 49, 125, 32, 45, 115, 91, > 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 100, 61, 61, 49, 125, 10, 45, 99, 104, 101, 99, 107, 32, 34, > 36, 123, 49, 61, 52, 125, 61, 61, 52, 32, 124, 124, 32, 36, 49, 61, > 61, 56, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 45, 105, 102, 32, 123, > 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 32, 109, 97, 120, 40, 109, > 105, 110, 40, 105, 44, 50, 53, 53, 41, 44, 48, 41, 10, 45, 105, 102, > 32, 123, 36, 51, 62, 61, 48, 125, 32, 45, 112, 105, 110, 107, 32, 104, > 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 44, 36, 49, 44, 36, > 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 105, 110, 107, 32, 119, > 115, 104, 101, 100, 116, 111, 112, 111, 44, 36, 49, 10, 45, 105, 102, 32, > 123, 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 49, 61, 61, 54, 32, 124, 124, 32, 36, 49, 61, 61, > 50, 54, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 64, 123, 62, 44, 45, 49, 125, 93, 10, 45, 105, 102, 32, 123, > 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 32, 109, 97, 120, 40, 109, > 105, 110, 40, 105, 44, 50, 53, 53, 41, 44, 48, 41, 10, 45, 105, 102, > 32, 123, 36, 51, 62, 61, 48, 125, 10, 45, 112, 105, 110, 107, 32, 104, > 101, 105, 103, 104, 116, 109, 105, 110, 105, 109, 97, 44, 36, 49, 44, 36, > 51, 10, 45, 101, 110, 100, 105, 102, 10, 45, 112, 105, 110, 107, 32, 119, > 115, 104, 101, 100, 116, 111, 112, 111, 44, 36, 49, 10, 45, 105, 102, 32, > 123, 36, 50, 33, 61, 48, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 115, 62, 49, 125, 32, 45, 97, 91, 45, 36, 115, 45, 45, 49, > 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 58, 32, 67, 111, 110, 118, 101, 110, 105, 101, 110, 99, > 101, 32, 102, 117, 110, 99, 116, 105, 111, 110, 115, 10, 35, 64, 103, 109, > 105, 99, 32, 97, 108, 101, 114, 116, 32, 58, 32, 95, 116, 105, 116, 108, > 101, 44, 95, 109, 101, 115, 115, 97, 103, 101, 44, 95, 108, 97, 98, 101, > 108, 95, 98, 117, 116, 116, 111, 110, 49, 44, 95, 108, 97, 98, 101, 108, > 95, 98, 117, 116, 116, 111, 110, 50, 44, 46, 46, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, 97, 110, > 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, 32, 97, 110, 100, 32, 119, > 97, 105, 116, 32, 102, 111, 114, 32, 117, 115, 101, 114, 39, 115, 32, 99, > 104, 111, 105, 99, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 73, 102, 32, 97, 32, 115, 105, 110, 103, 108, 101, 32, 105, 109, 97, 103, > 101, 32, 105, 115, 32, 105, 110, 32, 116, 104, 101, 32, 115, 101, 108, 101, > 99, 116, 105, 111, 110, 44, 32, 105, 116, 32, 105, 115, 32, 117, 115, 101, > 100, 32, 97, 115, 32, 97, 110, 32, 105, 99, 111, 110, 32, 102, 111, 114, > 32, 116, 104, 101, 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, > 32, 118, 97, 108, 117, 101, 115, 58, 32, 39, 116, 105, 116, 108, 101, 61, > 91, 71, 39, 77, 73, 67, 32, 65, 108, 101, 114, 116, 93, 39, 32, 97, > 110, 100, 32, 39, 109, 101, 115, 115, 97, 103, 101, 61, 84, 104, 105, 115, > 32, 105, 115, 32, 97, 110, 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, > 46, 39, 46, 10, 97, 108, 101, 114, 116, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 34, 36, 123, 49, 61, 91, 71, 92, 52, 55, 77, 73, 67, 32, > 65, 108, 101, 114, 116, 93, 125, 44, 36, 123, 50, 61, 84, 104, 105, 115, > 32, 105, 115, 32, 97, 110, 32, 97, 108, 101, 114, 116, 32, 98, 111, 120, > 46, 125, 44, 36, 123, 51, 61, 79, 75, 125, 34, 10, 45, 105, 102, 32, > 123, 64, 35, 61, 61, 49, 125, 10, 45, 101, 91, 48, 45, 45, 51, 93, > 32, 34, 68, 105, 115, 112, 108, 97, 121, 32, 97, 108, 101, 114, 116, 32, > 98, 111, 120, 44, 32, 119, 105, 116, 104, 32, 105, 109, 97, 103, 101, 36, > 63, 44, 32, 116, 105, 116, 108, 101, 32, 39, 36, 49, 39, 44, 32, 109, > 101, 115, 115, 97, 103, 101, 32, 39, 36, 50, 39, 32, 97, 110, 100, 32, > 98, 117, 116, 116, 111, 110, 115, 32, 39, 36, 123, 51, 45, 45, 49, 125, > 39, 46, 34, 10, 45, 101, 108, 115, 101, 10, 45, 101, 91, 48, 45, 45, > 51, 93, 32, 34, 68, 105, 115, 112, 108, 97, 121, 32, 97, 108, 101, 114, > 116, 32, 98, 111, 120, 44, 32, 119, 105, 116, 104, 32, 116, 105, 116, 108, > 101, 32, 39, 36, 49, 39, 44, 32, 109, 101, 115, 115, 97, 103, 101, 32, > 39, 36, 50, 39, 32, 97, 110, 100, 32, 98, 117, 116, 116, 111, 110, 115, > 32, 39, 36, 123, 51, 45, 45, 49, 125, 39, 46, 34, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 118, 32, 45, 10, 45, 105, 102, 32, 123, 64, 35, > 61, 61, 49, 125, 32, 108, 111, 103, 111, 61, 32, 45, 101, 108, 115, 101, > 32, 108, 111, 103, 111, 61, 91, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 45, 108, 36, 108, 111, 103, 111, 10, 45, 105, 102, 32, 123, 64, 35, > 61, 61, 49, 125, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 101, 108, > 115, 101, 10, 54, 52, 44, 54, 52, 32, 45, 112, 111, 108, 121, 103, 111, > 110, 32, 51, 44, 53, 48, 37, 44, 49, 48, 37, 44, 49, 48, 37, 44, > 57, 48, 37, 44, 57, 48, 37, 44, 57, 48, 37, 44, 49, 44, 49, 32, > 45, 98, 32, 51, 32, 45, 103, 101, 32, 53, 48, 37, 10, 45, 45, 101, > 114, 111, 100, 101, 91, 45, 49, 93, 32, 53, 32, 45, 45, 91, 45, 49, > 93, 32, 91, 45, 50, 93, 32, 45, 61, 61, 91, 45, 49, 93, 32, 48, > 10, 45, 112, 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, > 52, 55, 37, 44, 52, 51, 37, 44, 53, 51, 37, 44, 52, 51, 37, 44, > 53, 51, 37, 44, 54, 54, 37, 44, 52, 55, 37, 44, 54, 54, 37, 44, > 49, 44, 48, 32, 45, 99, 105, 114, 99, 108, 101, 91, 45, 49, 93, 32, > 53, 48, 37, 44, 55, 54, 37, 44, 50, 44, 49, 44, 48, 10, 45, 45, > 42, 91, 48, 93, 32, 50, 53, 53, 32, 91, 45, 49, 93, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 91, 45, 51, 45, 45, 49, > 93, 32, 99, 32, 45, 45, 91, 45, 49, 93, 32, 39, 51, 42, 40, 121, > 45, 104, 47, 50, 41, 39, 10, 45, 42, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 42, 91, 48, 93, > 32, 50, 53, 53, 32, 45, 114, 118, 32, 45, 97, 32, 99, 10, 45, 100, > 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, 51, 44, 51, 44, 49, > 32, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 51, 44, 50, 48, 48, 32, 45, 98, 108, 101, 110, 100, 32, > 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 105, 102, 10, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 45, 49, 44, 50, 10, 36, 61, 97, 114, > 103, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 50, 125, > 32, 108, 97, 98, 101, 108, 61, 36, 123, 97, 114, 103, 123, 36, 62, 43, > 51, 125, 125, 32, 48, 32, 45, 116, 91, 45, 49, 93, 32, 36, 108, 97, > 98, 101, 108, 44, 48, 44, 48, 44, 49, 54, 44, 49, 44, 45, 50, 48, > 48, 32, 45, 100, 111, 110, 101, 10, 45, 114, 91, 94, 48, 93, 32, 123, > 109, 105, 110, 40, 49, 50, 56, 44, 109, 97, 120, 40, 54, 52, 44, 64, > 123, 45, 109, 97, 120, 95, 119, 91, 94, 48, 93, 125, 43, 49, 50, 41, > 41, 125, 44, 123, 109, 105, 110, 40, 52, 56, 44, 109, 97, 120, 40, 50, > 52, 44, 64, 123, 45, 109, 97, 120, 95, 104, 91, 94, 48, 93, 125, 43, > 49, 50, 41, 41, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 45, 43, 91, 94, 48, 93, 32, 50, 48, 48, > 32, 45, 116, 111, 95, 114, 103, 98, 91, 94, 48, 93, 10, 45, 109, 118, > 91, 48, 93, 32, 64, 35, 10, 91, 48, 93, 44, 91, 48, 93, 44, 49, > 44, 49, 44, 39, 40, 121, 45, 104, 47, 50, 41, 39, 32, 45, 42, 91, > 45, 49, 93, 32, 45, 50, 32, 45, 99, 91, 45, 49, 93, 32, 45, 51, > 48, 44, 51, 48, 32, 45, 43, 91, 48, 45, 45, 51, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 91, 94, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 60, 93, 10, 45, > 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 48, 44, 48, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 70, 70, 70, > 70, 70, 70, 70, 70, 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, > 108, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 123, 119, 45, 50, 125, > 44, 123, 104, 45, 50, 125, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, > 70, 70, 70, 44, 48, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 50, 44, 123, 104, 45, 51, 125, 44, 123, 119, 45, 51, 125, 44, 123, 104, > 45, 51, 125, 44, 49, 44, 49, 53, 48, 32, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 123, 119, 45, 51, 125, 44, 123, 104, 45, 51, 125, 44, > 123, 119, 45, 51, 125, 44, 50, 44, 49, 44, 49, 53, 48, 10, 45, 108, > 105, 110, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 123, 119, 45, 51, > 125, 44, 49, 44, 49, 44, 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 49, 44, 49, 44, 49, 44, 123, 104, 45, 51, 125, 44, > 49, 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 52, 44, 52, 44, 123, 119, 45, 53, 125, 44, 123, > 104, 45, 53, 125, 44, 49, 44, 48, 120, 65, 65, 65, 65, 65, 65, 65, > 65, 44, 48, 10, 45, 45, 115, 104, 105, 102, 116, 91, 45, 50, 93, 32, > 49, 44, 49, 44, 48, 44, 48, 44, 50, 10, 45, 114, 101, 99, 116, 97, > 110, 103, 108, 101, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, > 70, 70, 70, 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 49, 44, 49, 44, 123, 119, 45, 50, 125, 44, 123, > 104, 45, 50, 125, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 49, 53, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 91, 45, 49, 93, 32, 52, 44, 52, 44, 123, 119, 45, 53, 125, 44, 123, > 104, 45, 53, 125, 44, 49, 44, 48, 120, 65, 65, 65, 65, 65, 65, 65, > 65, 44, 48, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, > 51, 93, 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, > 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 49, 44, 123, 104, 45, 50, > 125, 44, 123, 119, 45, 50, 125, 44, 123, 104, 45, 50, 125, 44, 49, 44, > 49, 53, 48, 32, 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 123, 119, > 45, 50, 125, 44, 123, 104, 45, 50, 125, 44, 123, 119, 45, 50, 125, 44, > 49, 44, 49, 44, 49, 53, 48, 10, 45, 108, 105, 110, 101, 91, 45, 51, > 93, 32, 48, 44, 48, 44, 123, 119, 45, 50, 125, 44, 48, 44, 49, 44, > 50, 53, 53, 32, 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 48, 44, > 48, 44, 48, 44, 123, 104, 45, 50, 125, 44, 49, 44, 50, 53, 53, 10, > 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 61, 91, 48, 93, 32, 49, 44, 48, 44, 48, 10, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 45, 108, > 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 51, 32, 45, > 115, 104, 32, 49, 44, 49, 48, 48, 37, 32, 45, 45, 91, 53, 48, 37, > 45, 45, 49, 93, 32, 50, 48, 48, 32, 45, 114, 109, 91, 53, 48, 37, > 45, 45, 49, 93, 32, 45, 102, 114, 97, 109, 101, 32, 56, 44, 56, 44, > 48, 10, 45, 105, 102, 32, 123, 64, 35, 60, 54, 125, 32, 45, 97, 91, > 94, 45, 49, 93, 32, 120, 32, 45, 101, 108, 115, 101, 32, 45, 97, 112, > 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 91, 94, 45, 49, 93, 32, > 44, 32, 45, 101, 110, 100, 105, 102, 10, 48, 32, 45, 116, 91, 45, 49, > 93, 32, 34, 36, 50, 34, 44, 48, 44, 48, 44, 49, 54, 44, 49, 44, > 48, 44, 45, 50, 48, 48, 44, 45, 50, 48, 48, 44, 45, 50, 48, 48, > 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 49, 54, 125, 44, 123, > 104, 43, 56, 125, 44, 49, 44, 52, 44, 48, 10, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 120, 44, 48, 46, 53, 32, 45, 114, 118, 32, 45, > 97, 32, 121, 44, 48, 46, 53, 10, 45, 115, 104, 32, 49, 44, 49, 48, > 48, 37, 32, 45, 43, 91, 45, 49, 93, 32, 50, 48, 48, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, > 32, 48, 44, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 108, > 105, 110, 101, 32, 48, 44, 48, 44, 123, 119, 45, 50, 125, 44, 48, 44, > 49, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, > 45, 108, 105, 110, 101, 32, 48, 44, 48, 44, 48, 44, 123, 104, 45, 50, > 125, 44, 49, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 10, 45, 114, 109, 91, 45, 50, 93, 10, > 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 10, 40, 48, 44, 123, 119, 45, 49, 125, 41, 32, 40, 48, 59, 64, 123, > 45, 50, 44, 104, 45, 49, 125, 41, 32, 45, 114, 91, 45, 50, 44, 45, > 49, 93, 32, 91, 45, 51, 93, 44, 51, 32, 45, 97, 91, 45, 50, 44, > 45, 49, 93, 32, 99, 32, 45, 114, 111, 117, 110, 100, 91, 45, 49, 93, > 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 91, 45, 49, 93, 32, 123, 104, 47, 50, > 125, 44, 50, 44, 49, 44, 49, 44, 45, 49, 10, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 50, 93, 32, 49, 44, 51, 32, 45, 114, 118, > 91, 45, 50, 44, 45, 49, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 123, 45, 51, 44, 119, > 125, 32, 120, 48, 61, 64, 123, 45, 51, 44, 40, 36, 62, 44, 48, 41, > 125, 32, 121, 48, 61, 64, 123, 45, 51, 44, 40, 36, 62, 44, 49, 41, > 125, 32, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, 45, 49, 93, > 32, 36, 120, 48, 44, 36, 121, 48, 44, 123, 36, 120, 48, 43, 64, 123, > 48, 44, 119, 125, 45, 49, 125, 44, 123, 36, 121, 48, 43, 64, 123, 48, > 44, 104, 125, 45, 49, 125, 44, 49, 44, 123, 49, 43, 36, 62, 125, 32, > 45, 100, 111, 110, 101, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 10, 45, 114, 101, 112, 101, 97, 116, 32, 57, 32, 45, 105, 102, 32, > 123, 33, 64, 123, 33, 36, 62, 125, 125, 32, 100, 105, 115, 112, 61, 36, > 62, 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, > 40, 36, 100, 105, 115, 112, 41, 125, 32, 45, 101, 114, 114, 111, 114, 91, > 48, 45, 45, 52, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, > 45, 97, 108, 101, 114, 116, 39, 58, 32, 67, 97, 110, 110, 111, 116, 32, > 111, 112, 101, 110, 32, 100, 105, 115, 112, 108, 97, 121, 32, 119, 105, 110, > 100, 111, 119, 32, 102, 111, 114, 32, 97, 108, 101, 114, 116, 32, 98, 111, > 120, 46, 34, 32, 45, 101, 110, 100, 105, 102, 10, 115, 101, 108, 101, 99, > 116, 101, 100, 61, 123, 105, 102, 40, 36, 35, 61, 61, 51, 44, 48, 44, > 45, 49, 41, 125, 32, 99, 108, 105, 99, 107, 101, 100, 61, 45, 49, 10, > 45, 100, 111, 10, 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, > 49, 93, 32, 48, 44, 50, 10, 45, 105, 102, 32, 123, 36, 99, 108, 105, > 99, 107, 101, 100, 62, 61, 48, 125, 10, 120, 48, 61, 64, 123, 45, 51, > 44, 40, 36, 99, 108, 105, 99, 107, 101, 100, 44, 48, 41, 125, 32, 121, > 48, 61, 64, 123, 45, 51, 44, 40, 36, 99, 108, 105, 99, 107, 101, 100, > 44, 49, 41, 125, 10, 45, 115, 104, 91, 36, 99, 108, 105, 99, 107, 101, > 100, 93, 32, 55, 44, 57, 10, 45, 106, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 36, 120, 48, 44, 36, 121, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 115, 101, 108, 101, 99, > 116, 101, 100, 62, 61, 48, 125, 10, 120, 48, 61, 64, 123, 45, 51, 44, > 40, 36, 115, 101, 108, 101, 99, 116, 101, 100, 44, 48, 41, 125, 32, 121, > 48, 61, 64, 123, 45, 51, 44, 40, 36, 115, 101, 108, 101, 99, 116, 101, > 100, 44, 49, 41, 125, 10, 45, 115, 104, 91, 36, 115, 101, 108, 101, 99, > 116, 101, 100, 93, 32, 52, 44, 54, 10, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 36, 120, 48, 44, 36, 121, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 36, 100, > 105, 115, 112, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 48, 44, 34, 36, 49, 34, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 119, 97, 105, 116, 10, 120, 109, 61, 64, 123, 33, 36, 100, 105, > 115, 112, 44, 120, 125, 32, 121, 109, 61, 64, 123, 33, 36, 100, 105, 115, > 112, 44, 121, 125, 32, 98, 109, 61, 123, 64, 123, 33, 36, 100, 105, 115, > 112, 44, 98, 125, 38, 49, 125, 32, 118, 97, 108, 61, 123, 105, 40, 36, > 120, 109, 44, 36, 121, 109, 44, 48, 44, 51, 41, 125, 10, 45, 105, 102, > 32, 123, 36, 98, 109, 34, 32, 38, 38, 32, 34, 36, 118, 97, 108, 125, > 32, 99, 108, 105, 99, 107, 101, 100, 61, 123, 36, 118, 97, 108, 45, 49, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 36, 98, 109, 34, 32, 38, 38, > 32, 34, 33, 36, 118, 97, 108, 34, 32, 38, 38, 32, 34, 36, 99, 108, > 105, 99, 107, 101, 100, 62, 61, 48, 125, 32, 115, 101, 108, 101, 99, 116, > 101, 100, 61, 36, 99, 108, 105, 99, 107, 101, 100, 32, 99, 108, 105, 99, > 107, 101, 100, 61, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 33, 36, > 98, 109, 34, 32, 38, 38, 32, 34, 36, 99, 108, 105, 99, 107, 101, 100, > 62, 61, 48, 34, 32, 38, 38, 32, 34, 36, 99, 108, 105, 99, 107, 101, > 100, 61, 61, 36, 118, 97, 108, 45, 49, 125, 32, 45, 98, 114, 101, 97, > 107, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, 33, > 36, 100, 105, 115, 112, 44, 65, 82, 82, 79, 87, 82, 73, 71, 72, 84, > 125, 32, 115, 101, 108, 101, 99, 116, 101, 100, 61, 123, 40, 36, 115, 101, > 108, 101, 99, 116, 101, 100, 43, 49, 41, 37, 64, 123, 45, 50, 44, 119, > 125, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, 45, 101, 108, 105, > 102, 32, 64, 123, 33, 36, 100, 105, 115, 112, 44, 65, 82, 82, 79, 87, > 76, 69, 70, 84, 125, 32, 115, 101, 108, 101, 99, 116, 101, 100, 61, 123, > 40, 36, 115, 101, 108, 101, 99, 116, 101, 100, 45, 49, 41, 37, 64, 123, > 45, 50, 44, 119, 125, 43, 40, 36, 115, 101, 108, 101, 99, 116, 101, 100, > 61, 61, 45, 49, 41, 125, 32, 45, 119, 97, 105, 116, 32, 45, 49, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 115, 101, 108, 101, 99, 116, 101, 100, > 62, 61, 48, 34, 32, 38, 38, 32, 34, 64, 123, 33, 36, 100, 105, 115, > 112, 44, 69, 78, 84, 69, 82, 125, 125, 32, 99, 108, 105, 99, 107, 101, > 100, 61, 36, 115, 101, 108, 101, 99, 116, 101, 100, 32, 45, 98, 114, 101, > 97, 107, 10, 45, 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, > 32, 123, 64, 123, 33, 36, 100, 105, 115, 112, 125, 34, 32, 38, 38, 32, > 34, 33, 64, 123, 33, 36, 100, 105, 115, 112, 44, 69, 83, 67, 125, 125, > 10, 45, 119, 36, 100, 105, 115, 112, 32, 48, 32, 45, 114, 109, 32, 45, > 117, 32, 36, 99, 108, 105, 99, 107, 101, 100, 10, 45, 101, 110, 100, 108, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 114, 103, > 32, 58, 32, 110, 44, 95, 97, 114, 103, 49, 44, 46, 46, 46, 44, 95, > 97, 114, 103, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 116, 104, 101, 32, 110, 45, 116, 104, 32, 97, 114, > 103, 117, 109, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, > 32, 108, 105, 115, 116, 46, 10, 97, 114, 103, 32, 58, 10, 45, 118, 32, > 45, 32, 36, 61, 97, 114, 103, 32, 45, 117, 32, 36, 123, 97, 114, 103, > 123, 49, 43, 40, 36, 49, 41, 125, 125, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 97, 116, 32, 58, 32, 95, 120, 44, 95, 121, > 44, 95, 122, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 97, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 118, 101, 99, 116, 111, 114, 45, 118, 97, 108, 117, 101, 100, 32, 112, 111, > 105, 110, 116, 32, 40, 120, 44, 121, 44, 122, 41, 32, 102, 114, 111, 109, > 32, 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 111, 102, 32, 116, > 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 97, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, > 123, 49, 61, 48, 125, 44, 36, 123, 50, 61, 48, 125, 44, 36, 123, 51, > 61, 48, 125, 10, 45, 118, 32, 45, 32, 45, 45, 122, 91, 45, 49, 93, > 32, 36, 123, 49, 45, 51, 125, 44, 36, 123, 49, 45, 51, 125, 32, 45, > 117, 32, 64, 45, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 97, 117, 116, 111, 99, 114, > 111, 112, 95, 99, 111, 111, 114, 100, 115, 32, 58, 32, 118, 97, 108, 117, > 101, 49, 44, 118, 97, 108, 117, 101, 50, 44, 46, 46, 46, 32, 124, 32, > 97, 117, 116, 111, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, 101, 115, > 32, 40, 120, 48, 44, 121, 48, 44, 122, 48, 44, 120, 49, 44, 121, 49, > 44, 122, 49, 41, 32, 111, 102, 32, 116, 104, 101, 32, 97, 117, 116, 111, > 99, 114, 111, 112, 32, 116, 104, 97, 116, 32, 99, 111, 117, 108, 100, 32, > 98, 101, 32, 112, 101, 114, 102, 111, 114, 109, 101, 100, 32, 111, 110, 32, > 116, 104, 101, 32, 108, 97, 116, 101, 115, 116, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, > 117, 108, 116, 32, 118, 97, 108, 117, 101, 58, 32, 39, 97, 117, 116, 111, > 39, 10, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, 114, 100, > 115, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 97, 117, > 116, 111, 125, 10, 45, 118, 32, 45, 10, 105, 115, 95, 97, 117, 116, 111, > 61, 123, 36, 49, 39, 61, 61, 39, 97, 117, 116, 111, 125, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 10, > 118, 97, 108, 117, 101, 61, 123, 105, 40, 119, 45, 49, 44, 104, 45, 49, > 44, 100, 45, 49, 41, 125, 32, 45, 45, 61, 91, 45, 49, 93, 32, 123, > 49, 43, 36, 118, 97, 108, 117, 101, 125, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 95, 97, 117, 116, 111, 99, > 114, 111, 112, 36, 105, 115, 95, 97, 117, 116, 111, 91, 45, 49, 93, 32, > 36, 123, 49, 45, 45, 49, 125, 32, 45, 61, 91, 45, 49, 93, 32, 36, > 118, 97, 108, 117, 101, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 10, 120, 48, 61, 123, 36, 119, 45, 119, 125, 32, 121, > 48, 61, 123, 36, 104, 45, 104, 125, 32, 122, 48, 61, 123, 36, 100, 45, > 100, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 95, 97, 117, > 116, 111, 99, 114, 111, 112, 36, 105, 115, 95, 97, 117, 116, 111, 91, 45, > 49, 93, 32, 36, 123, 49, 45, 45, 49, 125, 10, 120, 49, 61, 123, 36, > 120, 48, 43, 119, 45, 49, 125, 32, 121, 49, 61, 123, 36, 121, 48, 43, > 104, 45, 49, 125, 32, 122, 49, 61, 123, 36, 122, 48, 43, 100, 45, 49, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 117, 32, 36, 120, 48, > 44, 36, 121, 48, 44, 36, 122, 48, 44, 36, 120, 49, 44, 36, 121, 49, > 44, 36, 122, 49, 10, 45, 118, 32, 43, 10, 95, 97, 117, 116, 111, 99, > 114, 111, 112, 48, 32, 58, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 36, 42, 10, 95, 97, 117, 116, 111, 99, 114, 111, 112, 49, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 42, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 10, 35, 64, 103, 109, 105, 99, 32, 97, 118, 101, 114, 97, > 103, 101, 95, 99, 111, 108, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 97, 118, 101, > 114, 97, 103, 101, 32, 99, 111, 108, 111, 114, 32, 111, 102, 32, 116, 104, > 101, 32, 108, 97, 116, 101, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 97, 118, 101, 114, 97, 103, 101, 95, 99, 111, 108, 111, 114, 32, 58, > 10, 45, 118, 32, 45, 10, 114, 101, 115, 61, 34, 34, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 115, 45, 49, 125, 32, 45, 115, 104, 91, 45, > 49, 93, 32, 123, 49, 43, 36, 62, 125, 44, 123, 49, 43, 36, 62, 125, > 32, 114, 101, 115, 61, 36, 114, 101, 115, 44, 123, 105, 97, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 117, 32, 123, 105, 97, 125, > 36, 114, 101, 115, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 97, 115, 101, 110, 97, 109, > 101, 32, 58, 32, 102, 105, 108, 101, 95, 112, 97, 116, 104, 44, 95, 118, > 97, 114, 105, 97, 98, 108, 101, 95, 110, 97, 109, 101, 95, 102, 111, 114, > 95, 102, 111, 108, 100, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 98, 97, 115, 101, > 110, 97, 109, 101, 32, 111, 102, 32, 97, 32, 102, 105, 108, 101, 32, 112, > 97, 116, 104, 44, 32, 97, 110, 100, 32, 111, 112, 116, 46, 32, 105, 116, > 115, 32, 102, 111, 108, 100, 101, 114, 32, 108, 111, 99, 97, 116, 105, 111, > 110, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 87, 104, 101, 110, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 39, 118, 97, 114, 105, > 97, 98, 108, 101, 95, 110, 97, 109, 101, 95, 102, 111, 114, 95, 102, 111, > 108, 100, 101, 114, 39, 32, 109, 117, 115, 116, 32, 115, 116, 97, 114, 116, > 115, 32, 98, 121, 32, 97, 110, 32, 117, 110, 100, 101, 114, 115, 99, 111, > 114, 101, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 40, 103, 108, 111, > 98, 97, 108, 32, 118, 97, 114, 105, 97, 98, 108, 101, 32, 97, 99, 99, > 101, 115, 115, 105, 98, 108, 101, 32, 102, 114, 111, 109, 32, 99, 97, 108, > 108, 105, 110, 103, 32, 102, 117, 110, 99, 116, 105, 111, 110, 41, 46, 10, > 98, 97, 115, 101, 110, 97, 109, 101, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 36, 123, 50, 61, 117, 110, 117, 115, 101, 100, 125, 10, 45, 118, 32, > 45, 10, 45, 108, 91, 93, 32, 40, 123, 34, 39, 36, 49, 39, 34, 125, > 41, 32, 45, 114, 101, 112, 108, 97, 99, 101, 32, 57, 50, 44, 52, 55, > 32, 45, 115, 32, 43, 44, 52, 55, 10, 45, 105, 102, 32, 123, 105, 61, > 61, 52, 55, 125, 32, 45, 97, 32, 121, 32, 36, 50, 61, 64, 123, 45, > 49, 44, 116, 125, 32, 45, 117, 32, 34, 34, 10, 45, 101, 108, 105, 102, > 32, 123, 64, 35, 61, 61, 49, 125, 32, 45, 117, 32, 64, 123, 45, 49, > 44, 116, 125, 32, 36, 50, 61, 34, 34, 10, 45, 101, 108, 115, 101, 32, > 45, 97, 91, 94, 45, 49, 93, 32, 121, 32, 45, 117, 32, 64, 123, 45, > 49, 44, 116, 125, 32, 36, 50, 61, 64, 123, 45, 50, 44, 116, 125, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 32, 45, 101, 110, 100, 108, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 98, 105, 110, > 32, 58, 32, 98, 105, 110, 97, 114, 121, 95, 105, 110, 116, 49, 44, 46, > 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, > 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 105, 110, 97, > 114, 121, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, > 32, 116, 104, 101, 105, 114, 32, 111, 99, 116, 97, 108, 44, 32, 100, 101, > 99, 105, 109, 97, 108, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 98, > 105, 110, 32, 58, 10, 45, 118, 32, 45, 32, 100, 101, 99, 61, 64, 123, > 45, 98, 105, 110, 50, 100, 101, 99, 92, 32, 36, 123, 94, 48, 125, 125, > 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, > 111, 110, 118, 101, 114, 116, 32, 98, 105, 110, 97, 114, 121, 32, 105, 110, > 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 35, 62, 49, 41, 44, 34, 34, 44, 115, 125, 34, 32, 39, 36, > 123, 94, 48, 125, 39, 32, 116, 111, 32, 111, 99, 116, 97, 108, 32, 39, > 34, 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, 36, 100, 101, > 99, 125, 34, 39, 44, 10, 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, > 36, 100, 101, 99, 34, 39, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, > 109, 97, 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 104, 101, 120, > 92, 32, 36, 100, 101, 99, 125, 34, 39, 32, 97, 110, 100, 32, 115, 116, > 114, 105, 110, 103, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 115, 116, > 114, 92, 32, 36, 100, 101, 99, 125, 34, 39, 46, 34, 10, 35, 64, 103, > 109, 105, 99, 32, 98, 105, 110, 50, 100, 101, 99, 32, 58, 32, 98, 105, > 110, 97, 114, 121, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 98, 105, 110, 97, 114, 121, 32, > 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, 116, 104, > 101, 105, 114, 32, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, > 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 98, 105, 110, > 50, 100, 101, 99, 32, 58, 10, 45, 118, 32, 45, 32, 114, 101, 115, 61, > 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, 114, 101, 115, 61, 36, > 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, 32, 64, 123, 45, 97, > 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, 94, 48, 125, 125, 125, > 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, 45, > 118, 32, 43, 10, 95, 98, 105, 110, 50, 100, 101, 99, 32, 58, 10, 40, > 123, 39, 64, 123, 45, 115, 116, 114, 117, 110, 99, 97, 115, 101, 92, 32, > 36, 49, 125, 39, 125, 41, 10, 105, 115, 95, 110, 101, 103, 97, 116, 105, > 118, 101, 61, 48, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, > 125, 61, 61, 52, 53, 125, 32, 45, 122, 91, 45, 49, 93, 32, 49, 44, > 49, 48, 48, 37, 32, 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, 45, 49, 93, > 32, 34, 105, 102, 40, 105, 62, 61, 52, 56, 32, 38, 38, 32, 105, 60, > 61, 52, 57, 44, 40, 105, 45, 52, 56, 41, 42, 50, 94, 40, 119, 45, > 49, 45, 120, 41, 44, 110, 97, 110, 41, 34, 10, 45, 117, 32, 123, 105, > 102, 40, 36, 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, 45, > 49, 44, 49, 41, 42, 64, 123, 45, 49, 44, 43, 125, 125, 10, 45, 114, > 109, 91, 45, 49, 93, 10, 99, 111, 109, 112, 114, 101, 115, 115, 95, 103, > 109, 105, 99, 32, 58, 10, 45, 101, 91, 93, 32, 34, 34, 32, 45, 118, > 32, 45, 10, 104, 101, 97, 100, 95, 115, 116, 100, 61, 123, 39, 34, 35, > 64, 103, 109, 105, 99, 34, 39, 125, 10, 45, 115, 32, 45, 44, 49, 48, > 32, 78, 61, 64, 35, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, 102, 32, 123, 33, 40, 36, > 62, 37, 49, 48, 48, 41, 125, 32, 45, 118, 32, 43, 32, 45, 101, 91, > 93, 32, 34, 92, 114, 32, 32, 80, 114, 111, 99, 101, 115, 115, 32, 58, > 32, 34, 123, 114, 111, 117, 110, 100, 40, 36, 62, 47, 36, 78, 42, 49, > 48, 48, 41, 125, 37, 32, 45, 118, 32, 45, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 105, 61, 61, 123, 39, 35, 39, 125, 125, > 10, 104, 101, 97, 100, 61, 64, 123, 45, 49, 44, 48, 45, 123, 109, 105, > 110, 40, 53, 44, 104, 45, 49, 41, 125, 125, 10, 45, 105, 102, 32, 123, > 123, 36, 104, 101, 97, 100, 39, 33, 61, 39, 36, 104, 101, 97, 100, 95, > 115, 116, 100, 125, 34, 32, 124, 124, 32, 34, 40, 105, 91, 54, 93, 33, > 61, 123, 39, 34, 32, 34, 39, 125, 34, 32, 38, 38, 32, 34, 105, 91, > 54, 93, 33, 61, 123, 39, 58, 39, 125, 41, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 108, 91, 45, 49, > 93, 32, 45, 115, 32, 43, 44, 51, 50, 44, 51, 53, 32, 45, 105, 102, > 32, 123, 64, 35, 62, 50, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 10, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 50, > 32, 45, 105, 102, 32, 123, 33, 119, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 91, 49, 45, 45, 50, 93, 32, 40, > 49, 48, 41, 32, 45, 97, 32, 121, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 92, 114, 32, 80, 114, 111, 99, 101, 115, 115, 32, 58, > 32, 49, 48, 48, 37, 34, 10, 99, 111, 109, 112, 114, 101, 115, 115, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 32, 58, 10, 45, 101, 91, 93, > 32, 34, 34, 32, 45, 118, 32, 45, 10, 104, 101, 97, 100, 95, 115, 116, > 100, 61, 123, 39, 34, 35, 64, 103, 105, 109, 112, 34, 39, 125, 10, 45, > 115, 32, 45, 44, 49, 48, 32, 78, 61, 64, 35, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, > 102, 32, 123, 33, 40, 36, 62, 37, 49, 48, 48, 41, 125, 32, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 114, 32, 32, 80, 114, 111, > 99, 101, 115, 115, 32, 58, 32, 34, 123, 114, 111, 117, 110, 100, 40, 36, > 62, 47, 36, 78, 42, 49, 48, 48, 41, 125, 37, 32, 45, 118, 32, 45, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 105, 61, 61, > 123, 39, 35, 39, 125, 125, 10, 104, 101, 97, 100, 61, 64, 123, 45, 49, > 44, 48, 45, 123, 109, 105, 110, 40, 53, 44, 104, 45, 49, 41, 125, 125, > 10, 45, 105, 102, 32, 123, 36, 104, 101, 97, 100, 39, 33, 61, 39, 36, > 104, 101, 97, 100, 95, 115, 116, 100, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 99, 111, 110, 116, 105, 110, 117, 101, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 108, 91, 45, 49, 93, 32, > 45, 115, 32, 43, 44, 51, 50, 44, 51, 53, 32, 45, 105, 102, 32, 123, > 64, 35, 62, 50, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 97, 32, 121, 32, 45, 101, 110, 100, 108, 10, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, 93, 32, 51, 50, 32, 45, > 105, 102, 32, 123, 33, 119, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 99, 111, 110, 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 105, 91, 49, 45, 45, 50, 93, 32, 40, 49, 48, > 41, 32, 45, 97, 32, 121, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, > 32, 34, 92, 114, 32, 80, 114, 111, 99, 101, 115, 115, 32, 58, 32, 49, > 48, 48, 37, 34, 10, 35, 64, 103, 109, 105, 99, 32, 100, 101, 99, 32, > 58, 32, 100, 101, 99, 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, > 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, > 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 101, 99, 105, > 109, 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, > 111, 32, 116, 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, 44, 32, > 111, 99, 116, 97, 108, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 100, > 101, 99, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 110, 118, 101, 114, 116, 32, 100, 101, 99, 105, 109, 97, 108, 32, 105, 110, > 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 35, 62, 49, 41, 44, 34, 34, 44, 115, 125, 34, 32, 39, 36, > 123, 94, 48, 125, 39, 32, 116, 111, 32, 98, 105, 110, 97, 114, 121, 32, > 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, 32, 36, 123, > 94, 48, 125, 125, 34, 39, 44, 10, 111, 99, 116, 97, 108, 32, 39, 34, > 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, 36, 123, 94, 48, > 125, 125, 34, 39, 44, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, > 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 104, 101, 120, 92, 32, > 36, 123, 94, 48, 125, 125, 34, 39, 32, 97, 110, 100, 32, 115, 116, 114, > 105, 110, 103, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 115, 116, 114, > 92, 32, 36, 123, 94, 48, 125, 125, 34, 39, 46, 34, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 99, 50, 115, 116, 114, 32, 58, 32, 100, 101, > 99, 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 112, 101, 99, 105, 102, 105, 97, 108, 32, 100, 101, 99, 105, 109, 97, > 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, > 105, 116, 115, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, 112, 114, 101, > 115, 101, 110, 116, 97, 116, 105, 111, 110, 46, 10, 100, 101, 99, 50, 115, > 116, 114, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 96, 36, > 123, 94, 48, 125, 96, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 100, 101, 99, 50, 98, 105, 110, 32, 58, 32, 100, 101, 99, > 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 101, 99, 105, 109, 97, 108, > 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, 116, > 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, 32, 114, 101, 112, 114, > 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 100, 101, 99, > 50, 98, 105, 110, 32, 58, 10, 45, 118, 32, 45, 32, 114, 101, 115, 61, > 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, 114, 101, 115, 61, 36, > 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, 32, 64, 123, 45, 97, > 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, 94, 48, 125, 125, 125, > 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, 45, > 118, 32, 43, 10, 95, 100, 101, 99, 50, 98, 105, 110, 32, 58, 32, 45, > 99, 104, 101, 99, 107, 32, 105, 115, 105, 110, 116, 40, 36, 49, 41, 10, > 114, 101, 115, 61, 34, 34, 32, 114, 61, 123, 97, 98, 115, 40, 36, 49, > 41, 125, 10, 45, 100, 111, 32, 114, 101, 115, 61, 123, 36, 114, 37, 50, > 125, 36, 114, 101, 115, 32, 114, 61, 123, 105, 110, 116, 40, 36, 114, 47, > 50, 41, 125, 32, 45, 119, 104, 105, 108, 101, 32, 36, 114, 10, 45, 117, > 32, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, 40, 36, 49, 62, 61, > 48, 41, 44, 45, 44, 34, 34, 125, 36, 114, 101, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 100, 101, 99, 50, 104, 101, 120, 32, 58, 32, 100, 101, > 99, 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 100, 101, 99, 105, 109, 97, > 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, > 116, 104, 101, 105, 114, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, > 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, > 115, 46, 10, 100, 101, 99, 50, 104, 101, 120, 32, 58, 10, 45, 118, 32, > 45, 32, 114, 101, 115, 61, 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, > 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, > 32, 114, 101, 115, 61, 36, 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, > 92, 32, 64, 123, 45, 97, 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, > 123, 94, 48, 125, 125, 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, > 36, 114, 101, 115, 32, 45, 118, 32, 43, 10, 95, 100, 101, 99, 50, 104, > 101, 120, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 105, 115, 105, 110, > 116, 40, 36, 49, 41, 10, 114, 101, 115, 61, 34, 34, 32, 114, 61, 123, > 97, 98, 115, 40, 36, 49, 41, 125, 10, 45, 100, 111, 32, 114, 101, 115, > 61, 64, 123, 45, 95, 100, 101, 99, 50, 104, 101, 120, 95, 123, 36, 114, > 37, 49, 54, 125, 125, 36, 114, 101, 115, 32, 114, 61, 123, 105, 110, 116, > 40, 36, 114, 47, 49, 54, 41, 125, 32, 45, 119, 104, 105, 108, 101, 32, > 36, 114, 10, 45, 117, 32, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 49, 62, 61, 48, 41, 44, 45, 44, 34, 34, 125, 36, 114, 101, > 115, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 48, 32, 58, 32, 45, > 117, 32, 48, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, 32, 58, > 32, 45, 117, 32, 49, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 50, > 32, 58, 32, 45, 117, 32, 50, 10, 95, 100, 101, 99, 50, 104, 101, 120, > 95, 51, 32, 58, 32, 45, 117, 32, 51, 10, 95, 100, 101, 99, 50, 104, > 101, 120, 95, 52, 32, 58, 32, 45, 117, 32, 52, 10, 95, 100, 101, 99, > 50, 104, 101, 120, 95, 53, 32, 58, 32, 45, 117, 32, 53, 10, 95, 100, > 101, 99, 50, 104, 101, 120, 95, 54, 32, 58, 32, 45, 117, 32, 54, 10, > 95, 100, 101, 99, 50, 104, 101, 120, 95, 55, 32, 58, 32, 45, 117, 32, > 55, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 56, 32, 58, 32, 45, > 117, 32, 56, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 57, 32, 58, > 32, 45, 117, 32, 57, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, > 48, 32, 58, 32, 45, 117, 32, 97, 10, 95, 100, 101, 99, 50, 104, 101, > 120, 95, 49, 49, 32, 58, 32, 45, 117, 32, 98, 10, 95, 100, 101, 99, > 50, 104, 101, 120, 95, 49, 50, 32, 58, 32, 45, 117, 32, 99, 10, 95, > 100, 101, 99, 50, 104, 101, 120, 95, 49, 51, 32, 58, 32, 45, 117, 32, > 100, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, 52, 32, 58, 32, > 45, 117, 32, 101, 10, 95, 100, 101, 99, 50, 104, 101, 120, 95, 49, 53, > 32, 58, 32, 45, 117, 32, 102, 10, 35, 64, 103, 109, 105, 99, 32, 100, > 101, 99, 50, 111, 99, 116, 32, 58, 32, 100, 101, 99, 105, 109, 97, 108, > 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 100, 101, 99, 105, 109, 97, 108, 32, 105, 110, 116, > 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 105, 114, > 32, 111, 99, 116, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, > 97, 116, 105, 111, 110, 115, 46, 10, 100, 101, 99, 50, 111, 99, 116, 32, > 58, 10, 45, 118, 32, 45, 32, 114, 101, 115, 61, 64, 123, 45, 95, 36, > 48, 92, 32, 36, 49, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 36, 35, 45, 49, 125, 32, 114, 101, 115, 61, 36, 114, 101, 115, 44, 64, > 123, 45, 95, 36, 48, 92, 32, 64, 123, 45, 97, 114, 103, 92, 32, 36, > 62, 43, 50, 44, 36, 123, 94, 48, 125, 125, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, 45, 118, 32, 43, 10, 95, > 100, 101, 99, 50, 111, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, > 32, 105, 115, 105, 110, 116, 40, 36, 49, 41, 10, 114, 101, 115, 61, 34, > 34, 32, 114, 61, 123, 97, 98, 115, 40, 36, 49, 41, 125, 10, 45, 100, > 111, 32, 114, 101, 115, 61, 123, 36, 114, 37, 56, 125, 36, 114, 101, 115, > 32, 114, 61, 123, 105, 110, 116, 40, 36, 114, 47, 56, 41, 125, 32, 45, > 119, 104, 105, 108, 101, 32, 36, 114, 10, 45, 117, 32, 64, 123, 45, 97, > 114, 103, 92, 32, 49, 43, 40, 36, 49, 62, 61, 48, 41, 44, 45, 44, > 34, 34, 125, 36, 114, 101, 115, 10, 35, 64, 103, 109, 105, 99, 32, 102, > 97, 99, 116, 32, 58, 32, 118, 97, 108, 117, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 102, 97, 99, 116, 111, 114, 105, 97, 108, 32, 111, 102, 32, 116, 104, 101, > 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 118, 97, 108, 117, 101, > 46, 10, 102, 97, 99, 116, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, > 105, 115, 105, 110, 116, 40, 36, 49, 41, 10, 45, 118, 32, 45, 32, 114, > 101, 115, 61, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, > 114, 101, 115, 61, 123, 36, 114, 101, 115, 42, 40, 36, 62, 43, 49, 41, > 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 101, > 95, 109, 118, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, 95, 115, > 114, 99, 44, 102, 105, 108, 101, 110, 97, 109, 101, 95, 100, 101, 115, 116, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 110, 97, 109, 101, > 32, 111, 114, 32, 109, 111, 118, 101, 32, 97, 32, 102, 105, 108, 101, 32, > 102, 114, 111, 109, 32, 97, 32, 108, 111, 99, 97, 116, 105, 111, 110, 32, > 36, 49, 32, 116, 111, 32, 97, 110, 111, 116, 104, 101, 114, 32, 108, 111, > 99, 97, 116, 105, 111, 110, 32, 36, 50, 46, 10, 102, 105, 108, 101, 95, > 109, 118, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 77, 111, > 118, 101, 32, 102, 105, 108, 101, 32, 39, 36, 49, 39, 32, 116, 111, 32, > 108, 111, 99, 97, 116, 105, 111, 110, 32, 39, 36, 50, 39, 46, 34, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 119, > 105, 110, 100, 111, 119, 115, 125, 32, 45, 120, 32, 34, 109, 111, 118, 101, > 32, 34, 36, 49, 34, 32, 34, 36, 50, 32, 45, 101, 108, 115, 101, 32, > 45, 120, 32, 34, 109, 118, 32, 34, 36, 49, 34, 32, 34, 36, 50, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 105, 108, 101, 95, 114, 97, 110, 100, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 114, > 97, 110, 100, 111, 109, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 102, > 111, 114, 32, 115, 116, 111, 114, 105, 110, 103, 32, 116, 101, 109, 112, 111, > 114, 97, 114, 121, 32, 100, 97, 116, 97, 46, 10, 102, 105, 108, 101, 95, > 114, 97, 110, 100, 32, 58, 10, 45, 118, 32, 45, 10, 45, 100, 111, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 116, 109, 112, 125, 64, 123, 45, 102, 105, 108, 101, 95, 115, 108, 97, > 115, 104, 125, 103, 109, 105, 99, 64, 37, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 48, 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, > 40, 48, 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, > 48, 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, > 44, 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, > 57, 41, 41, 125, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 44, 57, > 41, 41, 125, 10, 45, 119, 104, 105, 108, 101, 32, 36, 102, 105, 108, 101, > 110, 97, 109, 101, 10, 45, 117, 32, 36, 102, 105, 108, 101, 110, 97, 109, > 101, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, > 108, 101, 95, 114, 109, 32, 58, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 108, 101, 116, 101, > 32, 97, 32, 102, 105, 108, 101, 46, 10, 102, 105, 108, 101, 95, 114, 109, > 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 109, 111, > 118, 101, 32, 102, 105, 108, 101, 32, 39, 36, 49, 39, 46, 34, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 119, 105, > 110, 100, 111, 119, 115, 125, 10, 49, 32, 45, 110, 109, 91, 45, 49, 93, > 32, 34, 36, 49, 34, 32, 100, 105, 114, 61, 64, 123, 45, 49, 44, 102, > 125, 32, 98, 97, 115, 101, 61, 64, 123, 45, 49, 44, 98, 125, 32, 101, > 120, 116, 61, 64, 123, 45, 49, 44, 120, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 99, 111, 109, 61, 34, 34, 10, 45, 105, 102, 32, 123, 110, > 97, 114, 103, 40, 36, 100, 105, 114, 41, 125, 32, 99, 111, 109, 61, 34, > 99, 100, 32, 92, 34, 34, 36, 100, 105, 114, 34, 92, 92, 92, 34, 32, > 38, 38, 32, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 110, 97, 114, 103, 40, 36, 101, 120, 116, 41, 125, 32, 99, 111, 109, > 61, 36, 123, 99, 111, 109, 125, 34, 100, 101, 108, 32, 92, 34, 34, 36, > 98, 97, 115, 101, 46, 36, 101, 120, 116, 34, 92, 34, 34, 32, 45, 101, > 108, 115, 101, 32, 99, 111, 109, 61, 36, 123, 99, 111, 109, 125, 34, 100, > 101, 108, 32, 92, 34, 34, 36, 98, 97, 115, 101, 34, 92, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 120, 32, 36, 99, 111, 109, 10, 45, > 101, 108, 115, 101, 10, 45, 120, 32, 34, 114, 109, 32, 45, 102, 32, 92, > 34, 36, 49, 92, 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 102, 105, 108, 101, 95, 115, > 108, 97, 115, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 39, 47, 39, 32, 111, 114, 32, 39, 92, 39, 32, > 97, 115, 32, 97, 32, 112, 97, 116, 104, 32, 115, 101, 112, 97, 114, 97, > 116, 111, 114, 32, 102, 111, 114, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 115, 46, 10, 102, 105, 108, 101, 95, 115, 108, 97, 115, 104, 32, 58, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 64, 123, 45, 105, 115, 95, 119, > 105, 110, 100, 111, 119, 115, 125, 32, 45, 117, 32, 34, 92, 92, 34, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 34, 47, 34, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 102, 105, 108, 101, 110, > 97, 109, 101, 44, 95, 110, 117, 109, 98, 101, 114, 49, 44, 95, 110, 117, > 109, 98, 101, 114, 50, 44, 46, 46, 46, 44, 95, 110, 117, 109, 98, 101, > 114, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, > 114, 110, 32, 97, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 110, 117, > 109, 98, 101, 114, 101, 100, 32, 119, 105, 116, 104, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 105, 110, 100, 105, 99, 101, 115, 46, 10, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 58, 32, 45, 115, 107, 105, 112, 32, > 34, 36, 123, 49, 61, 100, 101, 102, 97, 117, 108, 116, 125, 34, 10, 45, > 118, 32, 45, 10, 45, 105, 102, 32, 123, 36, 35, 61, 61, 49, 125, 32, > 45, 117, 32, 34, 36, 49, 34, 10, 45, 101, 108, 115, 101, 10, 40, 36, > 123, 50, 45, 45, 49, 125, 41, 32, 45, 110, 97, 109, 101, 91, 45, 49, > 93, 32, 34, 36, 49, 34, 32, 45, 117, 32, 64, 123, 45, 49, 44, 102, > 125, 64, 123, 45, 49, 44, 98, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 119, 125, 10, 45, 117, 32, 64, 123, 125, 95, 123, 105, 110, 116, > 40, 105, 47, 49, 48, 48, 48, 48, 48, 41, 37, 49, 48, 125, 123, 105, > 110, 116, 40, 105, 47, 49, 48, 48, 48, 48, 41, 37, 49, 48, 125, 123, > 105, 110, 116, 40, 105, 47, 49, 48, 48, 48, 41, 37, 49, 48, 125, 123, > 105, 110, 116, 40, 105, 47, 49, 48, 48, 41, 37, 49, 48, 125, 123, 105, > 110, 116, 40, 105, 47, 49, 48, 41, 37, 49, 48, 125, 123, 105, 37, 49, > 48, 125, 10, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 45, 49, > 10, 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, > 40, 123, 39, 64, 123, 45, 49, 44, 120, 125, 39, 125, 41, 125, 32, 45, > 117, 32, 64, 123, 125, 46, 64, 123, 45, 49, 44, 120, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 102, 105, 116, 114, 97, 116, 105, 111, 95, 119, 104, 32, 58, 32, 109, 105, > 110, 95, 119, 105, 100, 116, 104, 44, 109, 105, 110, 95, 104, 101, 105, 103, > 104, 116, 44, 114, 97, 116, 105, 111, 95, 119, 104, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 50, 100, > 32, 115, 105, 122, 101, 32, 39, 119, 105, 100, 116, 104, 44, 104, 101, 105, > 103, 104, 116, 39, 32, 119, 104, 105, 99, 104, 32, 105, 115, 32, 98, 105, > 103, 103, 101, 114, 32, 116, 104, 97, 110, 32, 39, 109, 105, 110, 95, 119, > 105, 100, 116, 104, 44, 109, 105, 110, 95, 104, 101, 105, 103, 104, 116, 39, > 32, 97, 110, 100, 32, 104, 97, 115, 32, 116, 104, 101, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 119, 47, 104, 32, 114, 97, 116, 105, 111, > 46, 10, 102, 105, 116, 114, 97, 116, 105, 111, 95, 119, 104, 32, 58, 10, > 45, 118, 32, 45, 32, 45, 105, 102, 32, 123, 36, 51, 42, 36, 50, 62, > 36, 49, 125, 32, 45, 117, 32, 123, 105, 110, 116, 40, 36, 51, 42, 36, > 50, 41, 125, 44, 36, 50, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 36, 49, 44, 123, 105, 110, 116, 40, 36, 49, 47, 36, 51, 41, 125, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 102, 105, 116, 115, 99, 114, 101, 101, 110, 32, 58, 32, 119, > 105, 100, 116, 104, 44, 104, 101, 105, 103, 104, 116, 44, 95, 100, 101, 112, > 116, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, > 114, 110, 32, 116, 104, 101, 32, 39, 105, 100, 101, 97, 108, 39, 32, 115, > 105, 122, 101, 32, 87, 120, 72, 32, 102, 111, 114, 32, 97, 32, 119, 105, > 110, 100, 111, 119, 32, 105, 110, 116, 101, 110, 100, 101, 100, 32, 116, 111, > 32, 100, 105, 115, 112, 108, 97, 121, 32, 97, 110, 32, 105, 109, 97, 103, > 101, 32, 111, 102, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, > 105, 122, 101, 32, 111, 110, 32, 115, 99, 114, 101, 101, 110, 46, 10, 102, > 105, 116, 115, 99, 114, 101, 101, 110, 32, 58, 32, 45, 99, 104, 101, 99, > 107, 32, 34, 36, 49, 62, 48, 32, 38, 38, 32, 36, 50, 62, 48, 32, > 38, 38, 32, 36, 123, 51, 61, 49, 125, 62, 48, 34, 10, 45, 118, 32, > 45, 10, 119, 61, 123, 105, 102, 40, 36, 51, 62, 49, 44, 36, 49, 43, > 36, 51, 44, 36, 49, 41, 125, 10, 104, 61, 123, 105, 102, 40, 36, 51, > 62, 49, 44, 36, 50, 43, 36, 51, 44, 36, 50, 41, 125, 10, 77, 119, > 61, 123, 105, 110, 116, 40, 48, 46, 56, 53, 42, 64, 123, 33, 44, 117, > 125, 41, 125, 10, 77, 104, 61, 123, 105, 110, 116, 40, 48, 46, 56, 53, > 42, 64, 123, 33, 44, 118, 125, 41, 125, 10, 45, 105, 102, 32, 123, 36, > 119, 60, 49, 50, 56, 125, 32, 104, 61, 123, 105, 110, 116, 40, 36, 104, > 42, 49, 50, 56, 47, 36, 119, 41, 125, 32, 119, 61, 49, 50, 56, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 104, 60, 49, > 50, 56, 125, 32, 119, 61, 123, 105, 110, 116, 40, 36, 119, 42, 49, 50, > 56, 47, 36, 104, 41, 125, 32, 104, 61, 49, 50, 56, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 119, 62, 36, 77, 119, 125, > 32, 104, 61, 123, 109, 97, 120, 40, 49, 44, 105, 110, 116, 40, 36, 104, > 42, 36, 77, 119, 47, 36, 119, 41, 41, 125, 32, 119, 61, 36, 77, 119, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 104, 62, > 36, 77, 104, 125, 32, 119, 61, 123, 109, 97, 120, 40, 49, 44, 105, 110, > 116, 40, 36, 119, 42, 36, 77, 104, 47, 36, 104, 41, 41, 125, 32, 104, > 61, 36, 77, 119, 32, 45, 101, 110, 100, 105, 102, 10, 119, 61, 123, 109, > 97, 120, 40, 36, 119, 44, 49, 50, 56, 41, 125, 10, 104, 61, 123, 109, > 97, 120, 40, 36, 104, 44, 49, 50, 56, 41, 125, 10, 45, 117, 32, 36, > 119, 44, 36, 104, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 103, 99, 100, 32, 58, 32, 97, 44, 98, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 71, > 67, 68, 32, 40, 103, 114, 101, 97, 116, 101, 115, 116, 32, 99, 111, 109, > 109, 111, 110, 32, 100, 105, 118, 105, 115, 111, 114, 41, 32, 98, 101, 116, > 119, 101, 101, 110, 32, 97, 32, 97, 110, 100, 32, 98, 46, 10, 103, 99, > 100, 32, 58, 32, 45, 99, 104, 101, 99, 107, 32, 34, 105, 115, 105, 110, > 116, 40, 36, 49, 41, 32, 38, 38, 32, 105, 115, 105, 110, 116, 40, 36, > 50, 41, 32, 38, 38, 32, 36, 49, 42, 36, 50, 33, 61, 48, 34, 10, > 45, 118, 32, 45, 32, 45, 95, 103, 99, 100, 32, 123, 109, 97, 120, 40, > 97, 98, 115, 40, 36, 49, 41, 44, 97, 98, 115, 40, 36, 50, 41, 41, > 125, 44, 123, 109, 105, 110, 40, 97, 98, 115, 40, 36, 49, 41, 44, 97, > 98, 115, 40, 36, 50, 41, 41, 125, 32, 45, 118, 32, 43, 10, 95, 103, > 99, 100, 32, 58, 10, 114, 61, 123, 36, 49, 37, 36, 50, 125, 32, 45, > 105, 102, 32, 36, 114, 32, 45, 117, 32, 64, 123, 45, 95, 103, 99, 100, > 92, 32, 36, 50, 44, 36, 114, 125, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 36, 50, 32, 45, 101, 110, 100, 105, 102, 10, 35, 64, 103, 109, > 105, 99, 32, 104, 101, 120, 32, 58, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, > 99, 105, 102, 105, 101, 100, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, > 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, > 32, 116, 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, 44, 32, 111, > 99, 116, 97, 108, 44, 32, 100, 101, 99, 105, 109, 97, 108, 32, 97, 110, > 100, 32, 115, 116, 114, 105, 110, 103, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 104, 101, 120, 32, 58, 10, > 45, 118, 32, 45, 32, 100, 101, 99, 61, 64, 123, 45, 104, 101, 120, 50, > 100, 101, 99, 92, 32, 36, 123, 94, 48, 125, 125, 32, 45, 118, 32, 43, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, > 116, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 105, 110, > 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, 32, 49, 43, > 40, 36, 35, 62, 49, 41, 44, 115, 44, 34, 34, 125, 34, 32, 39, 36, > 123, 94, 48, 125, 39, 32, 116, 111, 32, 98, 105, 110, 97, 114, 121, 32, > 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, 32, 36, 100, > 101, 99, 125, 34, 39, 44, 10, 111, 99, 116, 97, 108, 32, 39, 34, 64, > 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, 36, 100, 101, 99, 125, > 34, 39, 44, 32, 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, 36, 100, > 101, 99, 34, 39, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, 103, 32, > 39, 34, 64, 123, 45, 100, 101, 99, 50, 115, 116, 114, 92, 32, 36, 100, > 101, 99, 125, 34, 39, 46, 34, 10, 35, 64, 103, 109, 105, 99, 32, 104, > 101, 120, 50, 100, 101, 99, 32, 58, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 112, 101, 99, 105, 102, 105, 101, 100, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, > 116, 111, 32, 116, 104, 101, 105, 114, 32, 100, 101, 99, 105, 109, 97, 108, > 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, > 46, 10, 104, 101, 120, 50, 100, 101, 99, 32, 58, 10, 45, 118, 32, 45, > 32, 114, 101, 115, 61, 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, > 114, 101, 115, 61, 36, 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, > 32, 64, 123, 45, 97, 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, > 94, 48, 125, 125, 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, > 114, 101, 115, 32, 45, 118, 32, 43, 10, 95, 104, 101, 120, 50, 100, 101, > 99, 32, 58, 10, 40, 123, 39, 64, 123, 45, 115, 116, 114, 117, 110, 99, > 97, 115, 101, 92, 32, 36, 49, 125, 39, 125, 41, 10, 105, 115, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 61, 48, 10, 45, 105, 102, 32, 123, 64, > 123, 45, 49, 44, 48, 125, 61, 61, 52, 53, 125, 32, 45, 122, 91, 45, > 49, 93, 32, 49, 44, 49, 48, 48, 37, 32, 105, 115, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 102, 91, 45, 49, 93, 32, 34, 105, 102, 40, 105, 62, 61, 52, 56, 32, > 38, 38, 32, 105, 60, 61, 53, 55, 44, 105, 45, 52, 56, 44, 105, 102, > 40, 105, 62, 61, 57, 55, 32, 38, 38, 32, 105, 60, 61, 49, 48, 50, > 44, 105, 45, 56, 55, 44, 110, 97, 110, 41, 41, 42, 49, 54, 94, 40, > 119, 45, 49, 45, 120, 41, 34, 10, 45, 117, 32, 123, 105, 102, 40, 36, > 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, 45, 49, 44, 49, > 41, 42, 64, 123, 45, 49, 44, 43, 125, 125, 10, 45, 114, 109, 91, 45, > 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 104, 101, 120, 50, 115, 116, > 114, 32, 58, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 95, > 115, 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 115, 116, > 114, 105, 110, 103, 32, 105, 110, 116, 111, 32, 97, 32, 115, 116, 114, 105, > 110, 103, 46, 10, 104, 101, 120, 50, 115, 116, 114, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 123, 49, 61, 34, 34, 125, 10, 45, 118, 32, 45, > 10, 45, 105, 102, 32, 123, 33, 110, 97, 114, 103, 40, 34, 36, 49, 34, > 41, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 40, 123, 39, 36, 42, 39, 125, 41, 10, 45, 105, 102, 32, 123, > 119, 60, 50, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 117, 32, > 34, 34, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 91, 45, 49, 93, 32, 50, 44, 123, 119, 47, 50, 125, > 44, 49, 44, 49, 44, 45, 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, > 105, 102, 40, 105, 62, 61, 57, 55, 44, 105, 45, 56, 55, 44, 105, 45, > 52, 56, 41, 39, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, > 120, 61, 61, 48, 44, 105, 42, 49, 54, 43, 105, 40, 120, 43, 49, 41, > 44, 48, 41, 39, 32, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, > 93, 32, 48, 10, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 105, 109, 103, 50, 115, 116, 114, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 99, > 111, 110, 116, 101, 110, 116, 32, 111, 102, 32, 116, 104, 101, 32, 108, 97, > 116, 101, 115, 116, 32, 111, 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 32, 97, 115, 32, 97, 32, > 115, 112, 101, 99, 105, 97, 108, 32, 71, 39, 77, 73, 67, 32, 105, 110, > 112, 117, 116, 32, 115, 116, 114, 105, 110, 103, 46, 10, 105, 109, 103, 50, > 115, 116, 114, 32, 58, 10, 45, 118, 32, 45, 10, 45, 117, 32, 34, 40, > 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 115, 125, 32, 99, 61, > 36, 62, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 100, 125, 32, 122, > 61, 36, 62, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 104, 125, 32, > 121, 61, 36, 62, 10, 45, 45, 122, 91, 45, 49, 93, 32, 48, 44, 36, > 121, 44, 36, 122, 44, 36, 99, 44, 49, 48, 48, 37, 44, 36, 121, 44, > 36, 122, 44, 36, 99, 10, 45, 117, 32, 64, 123, 125, 64, 45, 49, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 121, 33, > 61, 104, 45, 49, 125, 32, 45, 117, 32, 64, 123, 125, 59, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 101, 32, 64, 123, 125, 10, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 36, 122, 33, 61, 100, 45, 49, 125, 32, > 45, 117, 32, 64, 123, 125, 47, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 99, 33, 61, 115, 45, > 49, 125, 32, 45, 117, 32, 64, 123, 125, 94, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 117, 32, 64, 123, 125, 34, 41, > 34, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, > 103, 50, 116, 101, 120, 116, 32, 58, 32, 95, 108, 105, 110, 101, 95, 115, > 101, 112, 97, 114, 97, 116, 111, 114, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 101, 120, 116, 32, 99, 111, > 110, 116, 97, 105, 110, 101, 100, 32, 105, 110, 32, 97, 32, 109, 117, 108, > 116, 105, 45, 108, 105, 110, 101, 32, 105, 109, 97, 103, 101, 46, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, > 118, 97, 108, 117, 101, 58, 32, 39, 108, 105, 110, 101, 95, 115, 101, 112, > 97, 114, 97, 116, 111, 114, 61, 32, 39, 46, 10, 105, 109, 103, 50, 116, > 101, 120, 116, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, > 61, 32, 125, 34, 10, 45, 118, 32, 45, 32, 45, 45, 108, 32, 45, 115, > 32, 121, 32, 45, 115, 32, 45, 44, 48, 32, 45, 121, 32, 120, 32, 45, > 105, 102, 32, 123, 64, 35, 62, 49, 125, 32, 45, 105, 91, 49, 45, 45, > 50, 93, 32, 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 97, 32, 120, 32, 45, 117, 32, 64, 123, 48, > 44, 116, 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 32, 45, 118, > 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 105, 109, 103, 56, 50, 104, > 101, 120, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, > 101, 114, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 56, 98, 105, > 116, 115, 45, 118, 97, 108, 117, 101, 100, 32, 118, 101, 99, 116, 111, 114, > 115, 32, 105, 110, 116, 111, 32, 116, 104, 101, 105, 114, 32, 104, 101, 120, > 97, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 32, 40, 97, 115, 99, 105, 105, 45, > 101, 110, 99, 111, 100, 101, 100, 41, 46, 10, 105, 109, 103, 56, 50, 104, > 101, 120, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 67, 111, > 110, 118, 101, 114, 116, 32, 56, 98, 105, 116, 115, 45, 118, 97, 108, 117, > 101, 100, 32, 118, 101, 99, 116, 111, 114, 36, 63, 32, 105, 110, 116, 111, > 32, 104, 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, > 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 32, 40, 97, 115, > 99, 105, 105, 45, 101, 110, 99, 111, 100, 101, 100, 41, 46, 34, 10, 45, > 118, 32, 45, 32, 45, 109, 111, 100, 32, 50, 53, 54, 32, 45, 121, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 102, 91, 36, > 62, 93, 32, 39, 118, 61, 105, 110, 116, 40, 105, 41, 38, 49, 53, 59, > 118, 43, 105, 102, 40, 118, 60, 49, 48, 44, 52, 56, 44, 56, 55, 41, > 39, 10, 45, 102, 91, 36, 62, 93, 32, 39, 118, 61, 105, 110, 116, 40, > 105, 41, 62, 62, 52, 59, 118, 43, 105, 102, 40, 118, 60, 49, 48, 44, > 52, 56, 44, 56, 55, 41, 39, 10, 45, 97, 91, 36, 62, 44, 45, 49, > 93, 32, 120, 10, 45, 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 104, 101, 120, 50, 105, 109, 103, 56, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 104, 101, 120, 97, 100, 101, 99, > 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, > 105, 111, 110, 115, 32, 40, 97, 115, 99, 105, 105, 45, 101, 110, 99, 111, > 100, 101, 100, 41, 32, 105, 110, 116, 111, 32, 56, 98, 105, 116, 115, 45, > 118, 97, 108, 117, 101, 100, 32, 118, 101, 99, 116, 111, 114, 115, 46, 10, > 104, 101, 120, 50, 105, 109, 103, 56, 32, 58, 10, 45, 101, 91, 94, 45, > 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 104, 101, 120, 97, > 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, 110, > 116, 97, 116, 105, 111, 110, 36, 63, 32, 40, 97, 115, 99, 105, 105, 45, > 101, 110, 99, 111, 100, 101, 100, 41, 32, 105, 110, 116, 111, 32, 56, 98, > 105, 116, 115, 45, 118, 97, 108, 117, 101, 100, 32, 118, 101, 99, 116, 111, > 114, 115, 46, 34, 10, 45, 118, 32, 45, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 45, 115, 91, 45, 49, 93, 32, 120, 44, 50, 32, > 45, 102, 91, 45, 50, 44, 45, 49, 93, 32, 39, 105, 102, 40, 105, 62, > 61, 57, 55, 44, 105, 45, 56, 55, 44, 105, 45, 52, 56, 41, 39, 32, > 45, 42, 91, 45, 50, 93, 32, 49, 54, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, > 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 105, 115, 95, 51, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 49, 32, 105, 102, 32, 97, 108, 108, 32, 111, > 102, 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, > 109, 97, 103, 101, 32, 97, 114, 101, 32, 51, 100, 32, 111, 98, 106, 101, > 99, 116, 115, 44, 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, > 46, 10, 105, 115, 95, 51, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 117, 32, 49, 32, 45, 108, 32, 45, 99, 104, 101, 99, 107, 51, 100, 32, > 49, 32, 45, 111, 110, 102, 97, 105, 108, 32, 45, 117, 32, 48, 32, 45, > 101, 110, 100, 108, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 115, 95, 112, 101, 114, 99, 101, 110, 116, 32, 58, 32, 115, 116, > 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 49, 32, 105, 102, 32, 115, 112, 101, 99, 105, 102, > 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 101, 110, 100, 115, 32, > 119, 105, 116, 104, 32, 97, 32, 39, 37, 39, 44, 32, 48, 32, 111, 116, > 104, 101, 114, 119, 105, 115, 101, 46, 10, 105, 115, 95, 112, 101, 114, 99, > 101, 110, 116, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, > 114, 103, 40, 45, 49, 44, 123, 39, 34, 36, 49, 34, 39, 125, 41, 61, > 61, 51, 55, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 49, 32, 105, 102, > 32, 99, 117, 114, 114, 101, 110, 116, 32, 99, 111, 109, 112, 117, 116, 101, > 114, 32, 79, 83, 32, 105, 115, 32, 87, 105, 110, 100, 111, 119, 115, 44, > 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, 101, 46, 10, 105, 115, > 95, 119, 105, 110, 100, 111, 119, 115, 32, 58, 10, 45, 118, 32, 45, 32, > 45, 117, 32, 123, 110, 97, 114, 103, 40, 36, 79, 83, 41, 61, 61, 49, > 34, 32, 38, 38, 32, 34, 110, 97, 114, 103, 40, 36, 87, 73, 78, 68, > 73, 82, 41, 61, 61, 49, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, > 109, 105, 99, 32, 109, 97, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 77, 65, 68, 32, > 40, 77, 97, 120, 105, 109, 117, 109, 32, 65, 98, 115, 111, 108, 117, 116, > 101, 32, 68, 101, 118, 105, 97, 116, 105, 111, 110, 41, 32, 111, 102, 32, > 116, 104, 101, 32, 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 84, 104, 101, 32, 77, 65, 68, 32, 105, 115, 32, 100, 101, 102, > 105, 110, 101, 100, 32, 97, 115, 32, 77, 65, 68, 32, 61, 32, 109, 101, > 100, 95, 105, 124, 120, 95, 105, 45, 109, 101, 100, 95, 106, 40, 120, 95, > 106, 41, 124, 10, 109, 97, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 45, 45, 91, 45, 49, 93, 32, 64, 123, 45, 109, 101, 100, 91, 45, 49, > 93, 125, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 109, 101, 100, > 91, 45, 49, 93, 32, 45, 117, 32, 123, 49, 46, 52, 56, 50, 54, 42, > 64, 123, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 119, 10, 35, > 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, > 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, 119, 105, 100, 116, 104, > 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 97, 120, 95, 119, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, 114, 103, 40, 49, > 44, 64, 123, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 92, 32, 52, > 125, 41, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 97, 120, 95, 104, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, > 108, 32, 104, 101, 105, 103, 104, 116, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 109, 97, 120, 95, 104, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 117, 32, 123, 97, 114, 103, 40, 50, 44, 64, 123, 45, 95, 109, 97, 120, > 95, 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 100, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, > 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, 100, 101, 112, 116, 104, 32, > 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 97, 120, 95, 100, 32, 58, > 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, 114, 103, 40, 51, 44, > 64, 123, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 92, 32, 52, 125, > 41, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, > 97, 120, 95, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, > 32, 115, 112, 101, 99, 116, 114, 117, 109, 32, 98, 101, 116, 119, 101, 101, > 110, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 109, 97, 120, 95, 115, 32, 58, 10, 45, 118, 32, 45, 32, > 45, 117, 32, 123, 97, 114, 103, 40, 52, 44, 64, 123, 45, 95, 109, 97, > 120, 95, 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, > 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 119, 104, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, 119, 120, 104, 32, > 115, 105, 122, 101, 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, > 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 97, 120, 95, 119, 104, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 95, 109, 97, 120, 95, 119, 104, 100, > 115, 32, 50, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 97, 120, 95, 119, 104, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, > 109, 97, 108, 32, 119, 120, 104, 120, 100, 32, 115, 105, 122, 101, 32, 111, > 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, > 115, 46, 10, 109, 97, 120, 95, 119, 104, 100, 32, 58, 10, 45, 118, 32, > 45, 32, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 32, 51, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 97, 120, 95, 119, > 104, 100, 115, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 116, 104, 101, 32, 109, 97, 120, 105, 109, 97, 108, 32, > 119, 120, 104, 120, 100, 120, 115, 32, 115, 105, 122, 101, 32, 111, 102, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 109, 97, 120, 95, 119, 104, 100, 115, 32, 58, 10, 45, 118, 32, 45, > 32, 45, 95, 109, 97, 120, 95, 119, 104, 100, 115, 32, 52, 32, 45, 118, > 32, 43, 10, 95, 109, 97, 120, 95, 119, 104, 100, 115, 32, 58, 10, 119, > 61, 48, 32, 104, 61, 48, 32, 100, 61, 48, 32, 115, 61, 48, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 119, 61, 123, 109, 97, 120, > 40, 36, 119, 44, 119, 41, 125, 10, 104, 61, 123, 109, 97, 120, 40, 36, > 104, 44, 104, 41, 125, 10, 100, 61, 123, 109, 97, 120, 40, 36, 100, 44, > 100, 41, 125, 10, 115, 61, 123, 109, 97, 120, 40, 36, 115, 44, 115, 41, > 125, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 36, 49, 62, 61, 52, 125, 32, 45, 117, > 32, 36, 119, 44, 36, 104, 44, 36, 100, 44, 36, 115, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 117, 32, 36, 119, > 44, 36, 104, 44, 36, 100, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 50, 125, 32, 45, 117, 32, 36, 119, 44, 36, 104, 10, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 36, 119, 10, 45, 101, 110, 100, 105, 102, > 10, 35, 64, 103, 109, 105, 99, 32, 109, 101, 100, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 109, 101, 100, 105, 97, 110, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, > 116, 104, 101, 32, 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 46, 10, 109, 101, 100, 32, 58, 10, 45, > 118, 32, 45, 32, 45, 45, 115, 111, 114, 116, 91, 45, 49, 93, 32, 45, > 117, 32, 64, 123, 45, 49, 44, 123, 119, 42, 104, 42, 100, 42, 115, 47, > 50, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 99, 111, 108, 111, 114, 95, 109, 101, > 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, > 110, 32, 116, 104, 101, 32, 109, 101, 100, 105, 97, 110, 32, 99, 111, 108, > 111, 114, 32, 118, 97, 108, 117, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 46, 10, 99, 111, 108, 111, 114, 95, 109, 101, 100, 32, 58, > 10, 45, 118, 32, 45, 32, 45, 117, 32, 34, 34, 32, 115, 61, 34, 34, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 115, 125, 32, 45, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 36, 62, 32, 45, > 117, 32, 64, 123, 125, 36, 115, 64, 123, 45, 109, 101, 100, 91, 45, 49, > 93, 125, 32, 115, 61, 44, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 100, 111, 110, 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, > 32, 109, 105, 110, 95, 119, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, > 97, 108, 32, 119, 105, 100, 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, > 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, > 46, 10, 109, 105, 110, 95, 119, 32, 58, 10, 45, 118, 32, 45, 32, 45, > 117, 32, 123, 97, 114, 103, 40, 49, 44, 64, 123, 45, 95, 109, 105, 110, > 95, 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, 43, > 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, 104, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, > 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 104, 101, 105, 103, 104, 116, > 32, 98, 101, 116, 119, 101, 101, 110, 32, 115, 101, 108, 101, 99, 116, 101, > 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 105, 110, 95, 104, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 123, 97, 114, 103, 40, 50, > 44, 64, 123, 45, 95, 109, 105, 110, 95, 119, 104, 100, 115, 92, 32, 52, > 125, 41, 125, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, > 109, 105, 110, 95, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, > 108, 32, 100, 101, 112, 116, 104, 32, 98, 101, 116, 119, 101, 101, 110, 32, > 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, > 10, 109, 105, 110, 95, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, > 32, 123, 97, 114, 103, 40, 51, 44, 64, 123, 45, 95, 109, 105, 110, 95, > 119, 104, 100, 115, 92, 32, 52, 125, 41, 125, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, 115, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, > 32, 109, 105, 110, 105, 109, 97, 108, 32, 115, 32, 115, 105, 122, 101, 32, > 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, > 101, 115, 46, 10, 109, 105, 110, 95, 115, 32, 58, 10, 45, 118, 32, 45, > 32, 45, 95, 109, 105, 110, 95, 115, 32, 64, 123, 45, 95, 109, 105, 110, > 95, 119, 104, 100, 115, 92, 32, 52, 125, 32, 45, 118, 32, 43, 10, 95, > 109, 105, 110, 95, 115, 32, 58, 10, 45, 117, 32, 36, 52, 10, 35, 64, > 103, 109, 105, 99, 32, 109, 105, 110, 95, 119, 104, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 109, 105, 110, 105, 109, 97, 108, 32, 119, 120, 104, 32, 115, 105, 122, 101, > 32, 111, 102, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, > 103, 101, 115, 46, 10, 109, 105, 110, 95, 119, 104, 32, 58, 10, 45, 118, > 32, 45, 32, 45, 95, 109, 105, 110, 95, 119, 104, 100, 115, 32, 50, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, > 119, 104, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, > 119, 120, 104, 120, 100, 32, 115, 105, 122, 101, 32, 111, 102, 32, 115, 101, > 108, 101, 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, > 105, 110, 95, 119, 104, 100, 32, 58, 10, 45, 118, 32, 45, 32, 45, 95, > 109, 105, 110, 95, 119, 104, 100, 115, 32, 51, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 109, 105, 110, 95, 119, 104, 100, 115, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 119, 120, 104, 120, > 100, 120, 115, 32, 115, 105, 122, 101, 32, 111, 102, 32, 115, 101, 108, 101, > 99, 116, 101, 100, 32, 105, 109, 97, 103, 101, 115, 46, 10, 109, 105, 110, > 95, 119, 104, 100, 115, 32, 58, 10, 45, 118, 32, 45, 32, 45, 95, 109, > 105, 110, 95, 119, 104, 100, 115, 32, 52, 32, 45, 118, 32, 43, 10, 95, > 109, 105, 110, 95, 119, 104, 100, 115, 32, 58, 10, 119, 61, 123, 119, 125, > 32, 104, 61, 123, 104, 125, 32, 100, 61, 123, 100, 125, 32, 115, 61, 123, > 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 119, 61, > 123, 109, 105, 110, 40, 36, 119, 44, 119, 41, 125, 10, 104, 61, 123, 109, > 105, 110, 40, 36, 104, 44, 104, 41, 125, 10, 100, 61, 123, 109, 105, 110, > 40, 36, 100, 44, 100, 41, 125, 10, 115, 61, 123, 109, 105, 110, 40, 36, > 115, 44, 115, 41, 125, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 49, 62, 61, 52, > 125, 32, 45, 117, 32, 36, 119, 44, 36, 104, 44, 36, 100, 44, 36, 115, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, > 117, 32, 36, 119, 44, 36, 104, 44, 36, 100, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 117, 32, 36, 119, 44, 36, > 104, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, 36, 119, 10, 45, 101, > 110, 100, 105, 102, 10, 35, 64, 103, 109, 105, 99, 32, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, 58, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 34, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 100, 34, 32, 118, 101, 114, 115, 105, 111, 110, > 32, 111, 102, 32, 116, 104, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 102, 105, 108, 101, 110, 97, 109, 101, 44, 32, 119, 105, 116, 104, > 111, 117, 116, 32, 115, 112, 97, 99, 101, 115, 32, 97, 110, 100, 32, 99, > 97, 112, 105, 116, 97, 108, 32, 108, 101, 116, 116, 101, 114, 115, 46, 10, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 102, 105, 108, 101, 110, 97, > 109, 101, 32, 58, 10, 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 49, > 34, 39, 125, 41, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, > 105, 62, 61, 54, 53, 38, 38, 105, 60, 61, 57, 48, 44, 105, 43, 51, > 50, 44, 105, 102, 40, 105, 61, 61, 51, 50, 44, 57, 53, 44, 105, 41, > 41, 39, 32, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 111, 99, 116, 32, 58, 32, 111, 99, 116, 97, 108, 95, 105, 110, > 116, 49, 44, 46, 46, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, > 111, 99, 116, 97, 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, > 110, 116, 111, 32, 116, 104, 101, 105, 114, 32, 98, 105, 110, 97, 114, 121, > 44, 32, 100, 101, 99, 105, 109, 97, 108, 44, 32, 104, 101, 120, 97, 100, > 101, 99, 105, 109, 97, 108, 32, 97, 110, 100, 32, 115, 116, 114, 105, 110, > 103, 32, 114, 101, 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, > 115, 46, 10, 111, 99, 116, 32, 58, 10, 45, 118, 32, 45, 32, 100, 101, > 99, 61, 64, 123, 45, 111, 99, 116, 50, 100, 101, 99, 92, 32, 36, 123, > 94, 48, 125, 125, 32, 45, 118, 32, 43, 10, 45, 101, 91, 94, 45, 49, > 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 111, 99, 116, 97, 108, > 32, 105, 110, 116, 101, 103, 101, 114, 34, 64, 123, 45, 97, 114, 103, 92, > 32, 49, 43, 40, 36, 35, 62, 49, 41, 44, 34, 34, 44, 115, 125, 34, > 32, 39, 36, 123, 94, 48, 125, 39, 32, 116, 111, 32, 98, 105, 110, 97, > 114, 121, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, 110, 92, > 32, 36, 100, 101, 99, 125, 34, 39, 44, 32, 100, 101, 99, 105, 109, 97, > 108, 32, 39, 34, 36, 100, 101, 99, 34, 39, 44, 10, 104, 101, 120, 97, > 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, > 50, 104, 101, 120, 92, 32, 36, 100, 101, 99, 125, 34, 39, 32, 97, 110, > 100, 32, 115, 116, 114, 105, 110, 103, 32, 39, 34, 64, 123, 45, 100, 101, > 99, 50, 115, 116, 114, 92, 32, 36, 100, 101, 99, 125, 34, 39, 46, 34, > 10, 35, 64, 103, 109, 105, 99, 32, 111, 99, 116, 50, 100, 101, 99, 32, > 58, 32, 111, 99, 116, 97, 108, 95, 105, 110, 116, 49, 44, 46, 46, 46, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 67, 111, 110, 118, 101, 114, > 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 111, 99, 116, 97, > 108, 32, 105, 110, 116, 101, 103, 101, 114, 115, 32, 105, 110, 116, 111, 32, > 116, 104, 101, 105, 114, 32, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, > 112, 114, 101, 115, 101, 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 111, > 99, 116, 50, 100, 101, 99, 32, 58, 10, 45, 118, 32, 45, 32, 114, 101, > 115, 61, 64, 123, 45, 95, 36, 48, 92, 32, 36, 49, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, 114, 101, 115, > 61, 36, 114, 101, 115, 44, 64, 123, 45, 95, 36, 48, 92, 32, 64, 123, > 45, 97, 114, 103, 92, 32, 36, 62, 43, 50, 44, 36, 123, 94, 48, 125, > 125, 125, 32, 45, 100, 111, 110, 101, 32, 45, 117, 32, 36, 114, 101, 115, > 32, 45, 118, 32, 43, 10, 95, 111, 99, 116, 50, 100, 101, 99, 32, 58, > 10, 40, 123, 39, 64, 123, 45, 115, 116, 114, 117, 110, 99, 97, 115, 101, > 92, 32, 36, 49, 125, 39, 125, 41, 10, 105, 115, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 61, 48, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, > 44, 48, 125, 61, 61, 52, 53, 125, 32, 45, 122, 91, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 37, 32, 105, 115, 95, 110, 101, 103, 97, 116, 105, > 118, 101, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 91, 45, > 49, 93, 32, 34, 105, 102, 40, 105, 62, 61, 52, 56, 32, 38, 38, 32, > 105, 60, 61, 53, 53, 44, 40, 105, 45, 52, 56, 41, 42, 56, 94, 40, > 119, 45, 49, 45, 120, 41, 44, 110, 97, 110, 41, 34, 10, 45, 117, 32, > 123, 105, 102, 40, 36, 105, 115, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 44, 45, 49, 44, 49, 41, 42, 64, 123, 45, 49, 44, 43, 125, 125, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 35, 64, 103, 109, 105, 99, 32, 112, > 97, 100, 105, 110, 116, 32, 58, 32, 110, 117, 109, 98, 101, 114, 44, 95, > 115, 105, 122, 101, 62, 48, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 97, 32, 105, 110, 116, 101, 103, 101, 114, > 32, 119, 105, 116, 104, 32, 39, 115, 105, 122, 101, 39, 32, 100, 105, 103, > 105, 116, 115, 32, 40, 101, 118, 101, 110, 116, 117, 97, 108, 108, 121, 32, > 108, 101, 102, 116, 45, 112, 97, 100, 100, 101, 100, 32, 119, 105, 116, 104, > 32, 39, 48, 39, 41, 46, 10, 112, 97, 100, 105, 110, 116, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 50, 61, 52, 125, 10, 45, 118, 32, > 45, 32, 45, 117, 32, 34, 34, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 50, 32, 45, 117, 32, 64, 123, 125, 123, 105, 110, 116, 40, 36, 49, > 47, 49, 48, 94, 36, 60, 41, 37, 49, 48, 125, 32, 45, 100, 111, 110, > 101, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, > 116, 104, 95, 103, 105, 109, 112, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 116, 117, 114, 110, 32, 97, 32, 112, 97, 116, 104, 32, 116, > 111, 32, 115, 116, 111, 114, 101, 32, 71, 73, 77, 80, 32, 99, 111, 110, > 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, 102, 105, 108, 101, 115, > 32, 102, 111, 114, 32, 111, 110, 101, 32, 117, 115, 101, 114, 32, 40, 119, > 104, 111, 115, 101, 32, 118, 97, 108, 117, 101, 32, 105, 115, 32, 79, 83, > 45, 100, 101, 112, 101, 110, 100, 101, 110, 116, 41, 46, 10, 112, 97, 116, > 104, 95, 103, 105, 109, 112, 32, 58, 10, 45, 105, 102, 32, 123, 110, 97, > 114, 103, 40, 123, 39, 36, 123, 71, 73, 77, 80, 50, 95, 68, 73, 82, > 69, 67, 84, 79, 82, 89, 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, > 123, 71, 73, 77, 80, 50, 95, 68, 73, 82, 69, 67, 84, 79, 82, 89, > 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, 36, 123, 85, > 83, 69, 82, 80, 82, 79, 70, 73, 76, 69, 125, 39, 125, 41, 125, 32, > 45, 117, 32, 36, 123, 85, 83, 69, 82, 80, 82, 79, 70, 73, 76, 69, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, > 36, 123, 72, 79, 77, 69, 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, > 123, 72, 79, 77, 69, 125, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 64, 123, > 125, 47, 46, 103, 105, 109, 112, 45, 50, 46, 56, 47, 112, 108, 117, 103, > 105, 110, 114, 99, 32, 45, 117, 32, 64, 123, 125, 47, 46, 103, 105, 109, > 112, 45, 50, 46, 56, 10, 45, 101, 108, 105, 102, 32, 64, 123, 125, 47, > 46, 103, 105, 109, 112, 45, 50, 46, 54, 47, 112, 108, 117, 103, 105, 110, > 114, 99, 32, 45, 117, 32, 64, 123, 125, 47, 46, 103, 105, 109, 112, 45, > 50, 46, 54, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, 64, 123, 45, > 112, 97, 116, 104, 95, 116, 109, 112, 125, 10, 45, 101, 110, 100, 105, 102, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, 116, > 104, 95, 116, 109, 112, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 97, 32, 112, 97, 116, 104, 32, 116, 111, 32, > 115, 116, 111, 114, 101, 32, 116, 101, 109, 112, 111, 114, 97, 114, 121, 32, > 102, 105, 108, 101, 115, 32, 40, 119, 104, 111, 115, 101, 32, 118, 97, 108, > 117, 101, 32, 105, 115, 32, 79, 83, 45, 100, 101, 112, 101, 110, 100, 101, > 110, 116, 41, 46, 10, 112, 97, 116, 104, 95, 116, 109, 112, 32, 58, 10, > 45, 118, 32, 45, 32, 45, 117, 32, 34, 34, 10, 45, 105, 102, 32, 123, > 110, 97, 114, 103, 40, 123, 39, 36, 123, 84, 77, 80, 125, 39, 125, 41, > 125, 32, 45, 117, 32, 36, 123, 84, 77, 80, 125, 10, 45, 101, 108, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, 36, 123, 84, 69, 77, 80, > 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, 123, 84, 69, 77, 80, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, 36, > 123, 84, 77, 80, 68, 73, 82, 125, 39, 125, 41, 125, 32, 45, 117, 32, > 36, 123, 84, 77, 80, 68, 73, 82, 125, 10, 45, 101, 108, 105, 102, 32, > 123, 110, 97, 114, 103, 40, 123, 39, 36, 123, 72, 79, 77, 69, 125, 39, > 125, 41, 125, 32, 45, 117, 32, 34, 47, 116, 109, 112, 34, 10, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 34, 34, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 112, 97, 116, > 104, 95, 117, 115, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, > 82, 101, 116, 117, 114, 110, 32, 97, 32, 112, 97, 116, 104, 32, 116, 111, > 32, 115, 116, 111, 114, 101, 32, 112, 101, 114, 115, 105, 115, 116, 101, 110, > 116, 32, 99, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, > 102, 105, 108, 101, 115, 32, 102, 111, 114, 32, 111, 110, 101, 32, 117, 115, > 101, 114, 32, 40, 119, 104, 111, 115, 101, 32, 118, 97, 108, 117, 101, 32, > 105, 115, 32, 79, 83, 45, 100, 101, 112, 101, 110, 100, 101, 110, 116, 41, > 46, 10, 112, 97, 116, 104, 95, 117, 115, 101, 114, 32, 58, 10, 45, 118, > 32, 45, 32, 45, 117, 32, 34, 34, 10, 45, 105, 102, 32, 123, 110, 97, > 114, 103, 40, 123, 39, 36, 123, 65, 80, 80, 68, 65, 84, 65, 125, 39, > 125, 41, 125, 32, 45, 117, 32, 36, 123, 65, 80, 80, 68, 65, 84, 65, > 125, 10, 45, 101, 108, 105, 102, 32, 123, 110, 97, 114, 103, 40, 123, 39, > 36, 123, 72, 79, 77, 69, 125, 39, 125, 41, 125, 32, 45, 117, 32, 36, > 123, 72, 79, 77, 69, 125, 10, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 34, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 118, 32, 43, 10, 35, > 64, 103, 109, 105, 99, 32, 113, 117, 111, 116, 101, 32, 58, 32, 115, 116, > 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 97, 32, 34, 113, 117, 111, 116, 105, 102, 105, 101, > 100, 34, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 116, 114, 105, 110, 103, 46, 10, 113, 117, 111, 116, 101, 32, > 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, 34, 36, 42, 34, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 114, 101, 103, 105, 111, > 110, 95, 102, 101, 97, 116, 117, 114, 101, 32, 58, 32, 114, 101, 103, 105, > 111, 110, 95, 108, 97, 98, 101, 108, 44, 102, 101, 97, 116, 117, 114, 101, > 44, 95, 100, 101, 102, 97, 117, 108, 116, 95, 118, 97, 108, 117, 101, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 102, 101, 97, 116, 117, 114, 101, 32, 102, 111, 114, 32, 97, 32, 115, 112, > 101, 99, 105, 102, 105, 101, 100, 32, 114, 101, 103, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 84, 104, 105, 115, 32, 102, 117, > 110, 99, 116, 105, 111, 110, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, > 116, 119, 111, 32, 105, 109, 97, 103, 101, 115, 32, 91, 105, 109, 103, 44, > 114, 101, 103, 105, 111, 110, 95, 108, 97, 98, 101, 108, 93, 32, 105, 110, > 32, 116, 104, 101, 32, 115, 101, 108, 101, 99, 116, 105, 111, 110, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 65, 114, 103, 117, 109, 101, 110, > 116, 32, 39, 102, 101, 97, 116, 117, 114, 101, 39, 32, 105, 115, 32, 97, > 32, 115, 116, 114, 105, 110, 103, 32, 116, 104, 97, 116, 32, 99, 111, 114, > 114, 101, 115, 112, 111, 110, 100, 115, 32, 116, 111, 32, 116, 104, 101, 32, > 119, 97, 121, 32, 116, 104, 101, 32, 102, 101, 97, 116, 117, 114, 101, 32, > 119, 111, 117, 108, 100, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 98, > 101, 32, 97, 115, 107, 101, 100, 32, 102, 111, 114, 32, 116, 104, 101, 32, > 101, 110, 116, 105, 114, 101, 32, 105, 109, 97, 103, 101, 46, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 68, 101, 102, 97, 117, 108, 116, 32, 118, > 97, 108, 117, 101, 58, 32, 39, 100, 101, 102, 97, 117, 108, 116, 95, 118, > 97, 108, 117, 101, 61, 48, 39, 46, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 36, 32, 105, 109, 97, 103, 101, 46, 106, 112, 103, 32, 45, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 113, 117, 97, 110, 116, > 105, 122, 101, 91, 45, 49, 93, 32, 50, 32, 45, 108, 97, 98, 101, 108, > 91, 45, 49, 93, 32, 48, 44, 49, 32, 109, 101, 97, 110, 61, 64, 123, > 34, 45, 114, 101, 103, 105, 111, 110, 95, 102, 101, 97, 116, 117, 114, 101, > 91, 48, 44, 49, 93, 32, 49, 48, 44, 92, 34, 123, 105, 97, 125, 92, > 34, 34, 125, 32, 115, 117, 109, 61, 64, 123, 34, 45, 114, 101, 103, 105, > 111, 110, 95, 102, 101, 97, 116, 117, 114, 101, 91, 48, 44, 49, 93, 32, > 49, 48, 44, 92, 34, 64, 123, 45, 49, 44, 43, 125, 92, 34, 34, 125, > 10, 114, 101, 103, 105, 111, 110, 95, 102, 101, 97, 116, 117, 114, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 51, 61, 48, 125, 34, > 10, 45, 118, 32, 45, 10, 115, 61, 64, 123, 45, 50, 44, 115, 125, 32, > 45, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 32, 45, 61, 61, 91, 45, 49, 93, 32, 36, 49, 32, 45, 94, 91, 45, > 49, 93, 32, 45, 49, 32, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, > 114, 91, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 10, 45, 108, 91, 45, 49, 93, 10, 45, 115, > 91, 45, 49, 93, 32, 45, 44, 105, 110, 102, 32, 45, 97, 32, 121, 10, > 45, 105, 102, 32, 64, 35, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, > 123, 104, 47, 36, 115, 125, 44, 49, 44, 36, 115, 44, 45, 49, 32, 45, > 117, 32, 36, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 36, 51, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, > 99, 32, 114, 101, 115, 101, 116, 10, 35, 64, 103, 109, 105, 99, 32, 58, > 32, 82, 101, 115, 101, 116, 32, 103, 108, 111, 98, 97, 108, 32, 112, 97, > 114, 97, 109, 101, 116, 101, 114, 115, 32, 111, 102, 32, 116, 104, 101, 32, > 105, 110, 116, 101, 114, 112, 114, 101, 116, 101, 114, 32, 101, 110, 118, 105, > 114, 111, 110, 109, 101, 110, 116, 46, 10, 114, 101, 115, 101, 116, 32, 58, > 10, 45, 101, 91, 94, 45, 49, 93, 32, 34, 82, 101, 115, 101, 116, 32, > 103, 108, 111, 98, 97, 108, 32, 112, 97, 114, 97, 109, 101, 116, 101, 114, > 115, 32, 111, 102, 32, 116, 104, 101, 32, 105, 110, 116, 101, 114, 112, 114, > 101, 116, 101, 114, 32, 101, 110, 118, 105, 114, 111, 110, 109, 101, 110, 116, > 46, 34, 10, 45, 118, 32, 45, 49, 32, 45, 100, 98, 51, 100, 32, 45, > 98, 51, 100, 32, 45, 109, 51, 100, 32, 45, 109, 100, 51, 100, 32, 45, > 102, 51, 100, 32, 45, 108, 51, 100, 32, 45, 115, 108, 51, 100, 32, 45, > 115, 115, 51, 100, 32, 45, 118, 10, 35, 64, 103, 109, 105, 99, 32, 82, > 71, 66, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, > 114, 110, 32, 97, 32, 114, 97, 110, 100, 111, 109, 32, 105, 110, 116, 45, > 118, 97, 108, 117, 101, 100, 32, 82, 71, 66, 32, 99, 111, 108, 111, 114, > 46, 10, 82, 71, 66, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 82, 71, 66, 65, > 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, > 32, 97, 32, 114, 97, 110, 100, 111, 109, 32, 105, 110, 116, 45, 118, 97, > 108, 117, 101, 100, 32, 82, 71, 66, 65, 32, 99, 111, 108, 111, 114, 46, > 10, 82, 71, 66, 65, 32, 58, 10, 45, 118, 32, 45, 32, 45, 117, 32, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 44, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 50, 53, 53, 41, 41, 125, 32, > 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 32, > 58, 32, 115, 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, > 58, 32, 80, 114, 105, 110, 116, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 115, 116, 114, 105, 110, 103, 32, 105, 110, 116, 111, 32, 105, 116, > 115, 32, 98, 105, 110, 97, 114, 121, 44, 32, 111, 99, 116, 97, 108, 44, > 32, 100, 101, 99, 105, 109, 97, 108, 32, 97, 110, 100, 32, 104, 101, 120, > 97, 100, 101, 99, 105, 109, 97, 108, 32, 114, 101, 112, 114, 101, 115, 101, > 110, 116, 97, 116, 105, 111, 110, 115, 46, 10, 115, 116, 114, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 118, 32, 45, 32, 100, 101, > 99, 61, 123, 39, 36, 42, 39, 125, 32, 45, 118, 32, 43, 10, 45, 101, > 91, 94, 45, 49, 93, 32, 34, 67, 111, 110, 118, 101, 114, 116, 32, 115, > 116, 114, 105, 110, 103, 32, 39, 36, 42, 39, 32, 116, 111, 32, 98, 105, > 110, 97, 114, 121, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 98, 105, > 110, 92, 32, 36, 100, 101, 99, 125, 34, 39, 44, 32, 111, 99, 116, 97, > 108, 32, 39, 34, 64, 123, 45, 100, 101, 99, 50, 111, 99, 116, 92, 32, > 36, 100, 101, 99, 125, 34, 39, 44, 32, 100, 101, 99, 105, 109, 97, 108, > 32, 39, 34, 36, 100, 101, 99, 34, 39, 32, 97, 110, 100, 10, 104, 101, > 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 39, 34, 64, 123, 45, 100, > 101, 99, 50, 104, 101, 120, 92, 32, 36, 100, 101, 99, 125, 34, 39, 46, > 34, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 50, 104, 101, 120, > 32, 58, 32, 115, 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, > 32, 58, 32, 67, 111, 110, 118, 101, 114, 116, 32, 115, 112, 101, 99, 105, > 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 105, 110, 116, 111, > 32, 97, 32, 115, 101, 113, 117, 101, 110, 99, 101, 32, 111, 102, 32, 104, > 101, 120, 97, 100, 101, 99, 105, 109, 97, 108, 32, 118, 97, 108, 117, 101, > 115, 46, 10, 115, 116, 114, 50, 104, 101, 120, 32, 58, 10, 45, 118, 32, > 45, 32, 40, 123, 39, 34, 36, 42, 34, 39, 125, 41, 32, 45, 114, 111, > 119, 115, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 102, 91, 45, 49, > 93, 32, 39, 105, 102, 40, 121, 61, 61, 48, 44, 105, 110, 116, 40, 105, > 47, 49, 54, 41, 44, 105, 40, 120, 44, 121, 45, 49, 41, 37, 49, 54, > 41, 39, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 60, > 61, 57, 44, 52, 56, 43, 105, 44, 56, 55, 43, 105, 41, 39, 32, 45, > 116, 114, 97, 110, 115, 112, 111, 115, 101, 91, 45, 49, 93, 32, 45, 117, > 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, > 101, 115, 99, 32, 58, 32, 118, 97, 108, 49, 44, 46, 46, 46, 44, 118, > 97, 108, 78, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, > 117, 114, 110, 32, 101, 115, 99, 97, 112, 101, 100, 32, 115, 116, 114, 105, > 110, 103, 32, 102, 114, 111, 109, 32, 115, 112, 101, 99, 105, 102, 105, 101, > 100, 32, 97, 115, 99, 105, 105, 32, 99, 111, 100, 101, 115, 46, 10, 115, > 116, 114, 101, 115, 99, 32, 58, 10, 45, 118, 32, 45, 32, 40, 36, 42, > 41, 32, 45, 99, 91, 45, 49, 93, 32, 51, 50, 44, 50, 53, 53, 32, > 45, 121, 91, 45, 49, 93, 32, 91, 45, 49, 93, 10, 45, 102, 91, 45, > 50, 93, 32, 39, 105, 102, 40, 105, 61, 61, 51, 50, 124, 124, 105, 61, > 61, 51, 52, 124, 124, 105, 61, 61, 51, 54, 124, 124, 105, 61, 61, 52, > 52, 124, 124, 105, 61, 61, 54, 52, 124, 124, 105, 61, 61, 57, 50, 124, > 124, 105, 61, 61, 49, 50, 51, 124, 124, 105, 61, 61, 49, 50, 53, 44, > 57, 50, 44, 45, 49, 41, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 120, 10, 45, 100, 105, 115, 99, 97, 114, 100, 91, 45, 49, 93, > 32, 45, 49, 32, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 116, 114, 99, 97, 116, 32, 58, 32, 115, 116, 114, 105, > 110, 103, 49, 44, 115, 116, 114, 105, 110, 103, 50, 44, 46, 46, 46, 10, > 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, > 116, 104, 101, 32, 99, 111, 110, 99, 97, 116, 101, 110, 97, 116, 105, 111, > 110, 32, 111, 102, 32, 97, 108, 108, 32, 115, 116, 114, 105, 110, 103, 115, > 32, 112, 97, 115, 115, 101, 100, 32, 97, 115, 32, 97, 114, 103, 117, 109, > 101, 110, 116, 115, 46, 10, 115, 116, 114, 99, 97, 116, 32, 58, 10, 45, > 118, 32, 45, 32, 36, 61, 115, 32, 114, 101, 115, 61, 34, 36, 49, 34, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 36, 35, 45, 49, 125, 32, > 114, 101, 115, 61, 36, 114, 101, 115, 36, 123, 115, 123, 36, 62, 43, 50, > 125, 125, 32, 45, 100, 111, 110, 101, 10, 45, 117, 32, 36, 114, 101, 115, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, > 99, 109, 112, 32, 58, 32, 115, 116, 114, 105, 110, 103, 49, 44, 115, 116, > 114, 105, 110, 103, 50, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 49, 32, 105, 102, 32, 116, 104, 101, 32, 116, > 119, 111, 32, 115, 116, 114, 105, 110, 103, 115, 32, 97, 114, 101, 32, 101, > 113, 117, 97, 108, 44, 32, 48, 32, 111, 116, 104, 101, 114, 119, 105, 115, > 101, 46, 10, 115, 116, 114, 99, 109, 112, 32, 58, 10, 45, 118, 32, 45, > 32, 40, 48, 44, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, 40, 123, > 119, 125, 44, 123, 39, 34, 36, 50, 34, 39, 125, 41, 32, 45, 61, 91, > 45, 50, 93, 32, 123, 119, 125, 32, 45, 45, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 97, 98, 115, 91, 45, 49, 93, 32, 45, 117, 32, 123, 33, > 64, 123, 45, 49, 44, 43, 125, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, > 108, 101, 110, 32, 58, 32, 115, 116, 114, 105, 110, 103, 49, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, > 101, 32, 108, 101, 110, 103, 116, 104, 32, 111, 102, 32, 115, 112, 101, 99, > 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, 110, 103, 32, 97, 114, 103, > 117, 109, 101, 110, 116, 46, 10, 115, 116, 114, 108, 101, 110, 32, 58, 10, > 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 49, 34, 39, 125, 41, 32, > 45, 117, 32, 123, 119, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, 114, 114, 101, > 112, 108, 97, 99, 101, 32, 58, 32, 115, 116, 114, 105, 110, 103, 44, 115, > 101, 97, 114, 99, 104, 44, 114, 101, 112, 108, 97, 99, 101, 10, 35, 64, > 103, 109, 105, 99, 32, 58, 32, 83, 101, 97, 114, 99, 104, 32, 97, 110, > 100, 32, 114, 101, 112, 108, 97, 99, 101, 32, 115, 117, 98, 115, 116, 114, > 105, 110, 103, 115, 32, 105, 110, 32, 97, 110, 32, 105, 110, 112, 117, 116, > 32, 115, 116, 114, 105, 110, 103, 46, 10, 115, 116, 114, 114, 101, 112, 108, > 97, 99, 101, 32, 58, 10, 45, 118, 32, 45, 10, 108, 115, 61, 64, 123, > 45, 115, 116, 114, 108, 101, 110, 92, 32, 34, 36, 50, 34, 125, 10, 108, > 114, 61, 123, 64, 123, 45, 115, 116, 114, 108, 101, 110, 92, 32, 34, 36, > 51, 34, 125, 45, 49, 125, 10, 45, 108, 91, 93, 32, 40, 123, 39, 34, > 36, 49, 34, 39, 125, 41, 32, 45, 115, 32, 43, 44, 123, 39, 34, 36, > 50, 34, 39, 125, 32, 45, 115, 32, 121, 44, 45, 36, 108, 115, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 105, 102, 32, 123, 64, > 123, 36, 62, 44, 116, 125, 39, 61, 61, 39, 34, 36, 50, 34, 125, 32, > 45, 114, 111, 119, 115, 91, 36, 62, 93, 32, 48, 44, 36, 108, 114, 32, > 45, 102, 91, 36, 62, 93, 32, 123, 39, 34, 36, 51, 34, 39, 125, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 97, 32, > 121, 32, 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 32, 45, 101, 110, 100, 108, 10, 45, 118, 32, 43, 10, 35, 64, 103, 109, > 105, 99, 32, 115, 116, 114, 117, 110, 99, 97, 115, 101, 32, 58, 32, 115, > 116, 114, 105, 110, 103, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, > 101, 116, 117, 114, 110, 32, 97, 32, 108, 111, 119, 101, 114, 45, 99, 97, > 115, 101, 32, 118, 101, 114, 115, 105, 111, 110, 32, 111, 102, 32, 116, 104, > 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 115, 116, 114, 105, > 110, 103, 46, 10, 115, 116, 114, 117, 110, 99, 97, 115, 101, 32, 58, 10, > 45, 118, 32, 45, 32, 40, 123, 39, 34, 36, 42, 34, 39, 125, 41, 32, > 45, 43, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 62, 61, 54, 53, > 38, 38, 105, 60, 61, 57, 48, 44, 51, 50, 44, 48, 41, 39, 32, 45, > 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 115, 116, > 114, 118, 101, 114, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 82, 101, > 116, 117, 114, 110, 32, 116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, > 32, 118, 101, 114, 115, 105, 111, 110, 32, 110, 117, 109, 98, 101, 114, 32, > 111, 102, 32, 116, 104, 101, 32, 71, 39, 77, 73, 67, 32, 105, 110, 116, > 101, 114, 112, 114, 101, 116, 101, 114, 44, 32, 97, 115, 32, 97, 32, 115, > 116, 114, 105, 110, 103, 46, 10, 115, 116, 114, 118, 101, 114, 32, 58, 10, > 45, 118, 32, 45, 32, 40, 123, 39, 64, 46, 39, 125, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 55, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, > 102, 40, 120, 37, 50, 44, 123, 39, 46, 39, 125, 44, 105, 41, 39, 32, > 45, 117, 32, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 118, 32, 43, 10, 35, 64, 103, 109, 105, 99, 32, 116, > 105, 99, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 73, 110, 105, 116, > 105, 97, 108, 105, 122, 101, 32, 116, 105, 99, 45, 116, 111, 99, 32, 116, > 105, 109, 101, 114, 46, 10, 35, 64, 103, 109, 105, 99, 32, 58, 32, 85, > 115, 101, 32, 105, 116, 32, 105, 110, 32, 99, 111, 110, 106, 117, 110, 99, > 116, 105, 111, 110, 32, 119, 105, 116, 104, 32, 39, 45, 116, 111, 99, 39, > 46, 10, 116, 105, 99, 32, 58, 10, 45, 101, 91, 94, 45, 49, 93, 32, > 34, 73, 110, 105, 116, 105, 97, 108, 105, 122, 101, 32, 116, 105, 109, 101, > 114, 46, 34, 10, 45, 118, 32, 45, 32, 45, 105, 102, 32, 123, 33, 110, > 97, 114, 103, 40, 36, 95, 95, 116, 105, 99, 112, 111, 115, 41, 125, 32, > 95, 95, 116, 105, 99, 112, 111, 115, 61, 48, 32, 45, 101, 110, 100, 105, > 102, 32, 95, 95, 116, 105, 99, 36, 95, 95, 116, 105, 99, 112, 111, 115, > 61, 64, 124, 32, 95, 95, 116, 105, 99, 112, 111, 115, 61, 123, 36, 95, > 95, 116, 105, 99, 112, 111, 115, 43, 49, 125, 32, 45, 118, 32, 43, 10, > 35, 64, 103, 109, 105, 99, 32, 116, 111, 99, 10, 35, 64, 103, 109, 105, > 99, 32, 58, 32, 68, 105, 115, 112, 108, 97, 121, 32, 101, 108, 97, 112, > 115, 101, 100, 32, 116, 105, 109, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 116, 105, 99, 45, 116, 111, 99, 32, 116, 105, 109, 101, 114, 32, 115, 105, > 110, 99, 101, 32, 116, 104, 101, 32, 108, 97, 115, 116, 32, 99, 97, 108, > 108, 32, 116, 111, 32, 39, 45, 116, 105, 99, 39, 46, 10, 35, 64, 103, > 109, 105, 99, 32, 58, 32, 85, 115, 101, 32, 105, 116, 32, 105, 110, 32, > 99, 111, 110, 106, 117, 110, 99, 116, 105, 111, 110, 32, 119, 105, 116, 104, > 32, 39, 45, 116, 105, 99, 39, 46, 10, 116, 111, 99, 32, 58, 10, 45, > 118, 32, 45, 32, 95, 95, 116, 105, 99, 112, 111, 115, 61, 123, 36, 95, > 95, 116, 105, 99, 112, 111, 115, 45, 49, 125, 32, 45, 118, 32, 43, 10, > 45, 101, 91, 94, 45, 49, 93, 32, 34, 69, 108, 97, 112, 115, 101, 100, > 32, 116, 105, 109, 101, 32, 58, 32, 34, 123, 95, 64, 124, 45, 36, 123, > 95, 95, 116, 105, 99, 36, 95, 95, 116, 105, 99, 112, 111, 115, 125, 125, > 34, 32, 115, 34, 46, 10, 35, 64, 103, 109, 105, 99, 32, 118, 97, 114, > 105, 97, 110, 99, 101, 95, 110, 111, 105, 115, 101, 10, 35, 64, 103, 109, > 105, 99, 32, 58, 32, 82, 101, 116, 117, 114, 110, 32, 116, 104, 101, 32, > 101, 115, 116, 105, 109, 97, 116, 101, 100, 32, 110, 111, 105, 115, 101, 32, > 118, 97, 114, 105, 97, 110, 99, 101, 32, 111, 102, 32, 116, 104, 101, 32, > 108, 97, 115, 116, 32, 115, 101, 108, 101, 99, 116, 101, 100, 32, 105, 109, > 97, 103, 101, 46, 10, 118, 97, 114, 105, 97, 110, 99, 101, 95, 110, 111, > 105, 115, 101, 32, 58, 10, 45, 118, 32, 45, 32, 45, 45, 108, 97, 112, > 108, 97, 99, 105, 97, 110, 91, 45, 49, 93, 32, 45, 117, 32, 123, 64, > 123, 45, 109, 97, 100, 91, 45, 49, 93, 125, 47, 115, 113, 114, 116, 40, > 105, 102, 40, 100, 61, 61, 49, 44, 50, 48, 44, 52, 50, 41, 41, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 118, 32, 43, 10, 103, 105, > 109, 112, 95, 102, 105, 108, 116, 101, 114, 95, 115, 111, 117, 114, 99, 101, > 115, 32, 58, 10, 40, 123, 39, 103, 109, 105, 99, 39, 125, 41, 10, 40, > 123, 39, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, > 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 117, 112, > 100, 97, 116, 101, 64, 46, 46, 103, 109, 105, 99, 39, 125, 44, 49, 41, > 10, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, > 118, 101, 114, 108, 97, 112, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, > 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, > 32, 34, 36, 49, 34, 44, 36, 51, 44, 123, 105, 102, 40, 36, 50, 44, > 50, 94, 40, 36, 50, 45, 49, 41, 44, 48, 41, 125, 10, 117, 112, 100, > 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 36, 123, 49, 61, 64, 46, 125, 44, 36, 123, > 50, 61, 49, 125, 10, 45, 118, 32, 45, 10, 45, 95, 117, 112, 100, 97, > 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, > 101, 32, 34, 47, 65, 114, 116, 105, 115, 116, 105, 99, 47, 80, 97, 115, > 116, 101, 108, 108, 126, 97, 114, 116, 34, 44, 34, 47, 84, 101, 115, 116, > 105, 110, 103, 47, 78, 97, 103, 103, 111, 98, 111, 116, 34, 10, 45, 95, > 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, > 95, 109, 111, 118, 101, 32, 34, 47, 65, 114, 116, 105, 115, 116, 105, 99, > 47, 83, 105, 109, 112, 108, 101, 126, 110, 111, 105, 115, 101, 126, 99, 97, > 110, 118, 97, 115, 34, 44, 34, 47, 80, 97, 116, 116, 101, 114, 110, 115, > 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, > 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, 101, 115, 116, > 105, 110, 103, 47, 74, 38, 35, 50, 51, 51, 59, 74, 38, 35, 50, 51, > 51, 59, 47, 82, 97, 121, 115, 34, 44, 34, 47, 80, 97, 116, 116, 101, > 114, 110, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, > 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, > 101, 115, 116, 105, 110, 103, 47, 73, 97, 105, 110, 126, 102, 101, 114, 103, > 117, 115, 115, 111, 110, 47, 72, 97, 108, 102, 116, 111, 110, 101, 126, 115, > 104, 97, 112, 101, 115, 34, 44, 34, 47, 80, 97, 116, 116, 101, 114, 110, > 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, > 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, 101, 115, > 116, 105, 110, 103, 47, 73, 97, 105, 110, 126, 102, 101, 114, 103, 117, 115, > 115, 111, 110, 47, 83, 105, 109, 112, 108, 101, 126, 108, 111, 99, 97, 108, > 126, 99, 111, 110, 116, 114, 97, 115, 116, 34, 44, 34, 47, 68, 101, 116, > 97, 105, 108, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, > 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, 111, > 100, 101, 114, 47, 65, 117, 114, 111, 114, 97, 34, 44, 34, 47, 65, 114, > 116, 105, 115, 116, 105, 99, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, > 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, > 34, 47, 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, > 99, 111, 100, 101, 114, 47, 68, 101, 115, 112, 101, 99, 107, 108, 101, 34, > 44, 34, 47, 82, 101, 112, 97, 105, 114, 34, 10, 45, 95, 117, 112, 100, > 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, > 118, 101, 32, 34, 47, 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, > 97, 103, 101, 99, 111, 100, 101, 114, 47, 72, 83, 76, 126, 97, 100, 106, > 117, 115, 116, 109, 101, 110, 116, 34, 44, 34, 47, 67, 111, 108, 111, 114, > 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, > 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, 84, 101, 115, > 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, 111, 100, 101, 114, > 47, 72, 83, 86, 126, 115, 101, 108, 101, 99, 116, 34, 44, 34, 47, 67, > 111, 108, 111, 114, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, > 47, 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, > 111, 100, 101, 114, 47, 83, 116, 101, 114, 101, 111, 126, 105, 109, 97, 103, > 101, 34, 44, 34, 47, 83, 116, 101, 114, 101, 111, 115, 99, 111, 112, 105, > 99, 126, 51, 100, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, > 84, 101, 115, 116, 105, 110, 103, 47, 71, 97, 114, 97, 103, 101, 99, 111, > 100, 101, 114, 47, 85, 110, 100, 111, 126, 97, 110, 97, 103, 108, 121, 112, > 104, 34, 44, 34, 47, 83, 116, 101, 114, 101, 111, 115, 99, 111, 112, 105, > 99, 126, 51, 100, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, 47, > 84, 101, 115, 116, 105, 110, 103, 47, 78, 97, 103, 103, 111, 98, 111, 116, > 47, 66, 108, 111, 99, 107, 105, 115, 109, 34, 44, 34, 47, 65, 114, 116, > 105, 115, 116, 105, 99, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, > 47, 84, 101, 115, 116, 105, 110, 103, 47, 83, 97, 109, 106, 47, 67, 104, > 97, 108, 107, 126, 105, 116, 126, 117, 112, 34, 44, 34, 47, 65, 114, 116, > 105, 115, 116, 105, 99, 34, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, > 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, 32, 34, > 47, 84, 101, 115, 116, 105, 110, 103, 47, 83, 97, 109, 106, 47, 68, 101, > 110, 105, 109, 126, 116, 101, 120, 116, 117, 114, 101, 34, 44, 34, 47, 80, > 97, 116, 116, 101, 114, 110, 115, 34, 10, 45, 95, 117, 112, 100, 97, 116, > 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, 95, 109, 111, 118, 101, > 32, 34, 47, 84, 101, 115, 116, 105, 110, 103, 47, 90, 111, 110, 100, 101, > 114, 114, 47, 83, 112, 105, 114, 97, 108, 34, 44, 34, 47, 82, 101, 110, > 100, 101, 114, 105, 110, 103, 34, 10, 45, 109, 32, 34, 112, 97, 114, 101, > 110, 116, 32, 58, 32, 45, 108, 91, 93, 32, 40, 123, 39, 36, 34, 34, > 49, 39, 125, 41, 32, 45, 115, 32, 45, 44, 123, 39, 47, 39, 125, 32, > 45, 105, 102, 32, 64, 35, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 105, 91, 48, 45, 45, 49, 93, 32, 40, > 52, 55, 41, 32, 45, 97, 32, 121, 32, 45, 117, 32, 64, 123, 48, 44, > 116, 125, 32, 45, 114, 109, 32, 45, 101, 110, 100, 108, 34, 10, 45, 109, > 32, 34, 95, 109, 97, 120, 32, 58, 32, 40, 123, 39, 92, 34, 36, 34, > 34, 49, 92, 34, 39, 125, 41, 32, 40, 123, 39, 92, 34, 36, 34, 34, > 50, 92, 34, 39, 125, 41, 32, 45, 102, 91, 45, 50, 44, 45, 49, 93, > 32, 39, 105, 102, 40, 105, 62, 61, 57, 55, 38, 38, 105, 60, 61, 49, > 50, 50, 44, 105, 45, 51, 50, 44, 105, 41, 39, 32, 45, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 123, 109, 97, 120, 40, 119, 44, 64, 123, 45, > 50, 44, 119, 125, 41, 125, 44, 49, 44, 49, 44, 49, 44, 48, 32, 45, > 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 91, 45, 49, 93, 32, 48, 32, 34, 92, 10, 34, 45, 117, 32, > 123, 105, 62, 48, 125, 32, 45, 114, 109, 91, 45, 49, 93, 34, 10, 45, > 109, 32, 34, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 58, 32, 34, > 92, 10, 34, 95, 110, 98, 95, 115, 111, 117, 114, 99, 101, 115, 61, 123, > 36, 95, 110, 98, 95, 115, 111, 117, 114, 99, 101, 115, 43, 49, 125, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 92, 34, 45, 98, 97, > 115, 101, 110, 97, 109, 101, 32, 36, 34, 34, 49, 92, 34, 125, 32, 34, > 92, 10, 34, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 92, 34, 32, > 32, 92, 34, 36, 95, 110, 98, 95, 115, 111, 117, 114, 99, 101, 115, 92, > 34, 46, 32, 92, 34, 36, 102, 105, 108, 101, 110, 97, 109, 101, 92, 34, > 32, 32, 92, 34, 32, 45, 118, 32, 45, 32, 34, 92, 10, 34, 45, 108, > 91, 93, 32, 34, 92, 10, 34, 32, 32, 45, 105, 32, 114, 97, 119, 58, > 36, 34, 34, 49, 44, 99, 104, 97, 114, 32, 45, 118, 32, 43, 32, 45, > 101, 91, 93, 32, 92, 34, 32, 32, 32, 32, 32, 32, 91, 114, 101, 116, > 114, 105, 101, 118, 101, 100, 32, 102, 114, 111, 109, 32, 115, 111, 117, 114, > 99, 101, 32, 39, 36, 34, 34, 49, 39, 93, 92, 110, 92, 34, 32, 45, > 118, 32, 45, 32, 34, 92, 10, 34, 32, 32, 45, 108, 32, 34, 92, 10, > 34, 32, 32, 32, 32, 45, 111, 32, 114, 97, 119, 58, 47, 116, 109, 112, > 47, 36, 102, 105, 108, 101, 110, 97, 109, 101, 44, 99, 104, 97, 114, 32, > 34, 92, 10, 34, 32, 32, 32, 32, 45, 120, 32, 92, 34, 115, 99, 112, > 32, 47, 116, 109, 112, 47, 92, 34, 36, 102, 105, 108, 101, 110, 97, 109, > 101, 92, 34, 32, 114, 111, 110, 111, 117, 110, 111, 117, 114, 115, 44, 103, > 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, 100, 111, 99, 115, 47, 105, > 110, 99, 108, 117, 100, 101, 47, 92, 34, 32, 34, 92, 10, 34, 32, 32, > 32, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 92, 34, 32, 32, > 32, 32, 32, 32, 91, 97, 114, 99, 104, 105, 118, 101, 100, 93, 92, 110, > 92, 34, 32, 45, 118, 32, 45, 32, 34, 92, 10, 34, 32, 32, 45, 111, > 110, 102, 97, 105, 108, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 92, 34, 32, 32, 32, 32, 32, 32, 91, 99, 111, 117, 108, 100, 32, 110, > 111, 116, 32, 98, 101, 32, 97, 114, 99, 104, 105, 118, 101, 100, 33, 93, > 92, 110, 92, 34, 32, 45, 118, 32, 45, 32, 45, 101, 110, 100, 108, 32, > 34, 92, 10, 34, 45, 111, 110, 102, 97, 105, 108, 32, 45, 108, 91, 93, > 32, 34, 92, 10, 34, 32, 32, 115, 111, 117, 114, 99, 101, 61, 104, 116, > 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, > 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 105, 110, 99, 108, 117, 100, > 101, 47, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 34, 92, 10, 34, > 32, 32, 45, 105, 32, 114, 97, 119, 58, 36, 115, 111, 117, 114, 99, 101, > 44, 99, 104, 97, 114, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 92, 34, 32, 32, 32, 32, 32, 32, 91, 114, 101, 116, 114, 105, 101, 118, > 101, 100, 32, 102, 114, 111, 109, 32, 97, 114, 99, 104, 105, 118, 101, 32, > 39, 92, 34, 36, 115, 111, 117, 114, 99, 101, 92, 34, 39, 93, 92, 110, > 92, 34, 32, 45, 118, 32, 45, 32, 34, 92, 10, 34, 32, 32, 45, 111, > 110, 102, 97, 105, 108, 32, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 92, 34, 32, 32, 32, 32, 32, 32, 91, 101, 114, 114, 111, 114, 44, 32, > 110, 111, 116, 32, 114, 101, 97, 99, 104, 97, 98, 108, 101, 33, 93, 92, > 110, 92, 34, 32, 45, 118, 32, 45, 34, 92, 10, 34, 32, 32, 45, 101, > 110, 100, 108, 32, 45, 101, 110, 100, 108, 34, 10, 45, 109, 32, 34, 99, > 97, 108, 105, 98, 114, 97, 116, 101, 95, 110, 97, 109, 101, 32, 58, 32, > 34, 92, 10, 34, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 51, 50, > 32, 34, 92, 10, 34, 45, 102, 32, 39, 105, 102, 40, 105, 62, 61, 54, > 53, 38, 38, 105, 60, 61, 57, 48, 44, 105, 43, 51, 50, 44, 105, 41, > 39, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 32, 123, > 39, 95, 39, 125, 44, 51, 50, 32, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 32, 51, 50, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, > 101, 95, 115, 116, 114, 32, 70, 102, 116, 44, 70, 70, 84, 32, 34, 92, > 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 114, > 103, 98, 44, 82, 71, 66, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, > 97, 99, 101, 95, 115, 116, 114, 32, 108, 97, 98, 44, 76, 97, 98, 32, > 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 32, 104, 115, 118, 44, 72, 83, 86, 32, 34, 92, 10, 34, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 104, 115, 108, 44, 72, 83, > 76, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, > 116, 114, 32, 121, 99, 98, 99, 114, 44, 89, 67, 98, 67, 114, 32, 34, > 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 99, 109, 121, 107, 44, 67, 77, 89, 75, 32, 34, 92, 10, 34, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 98, 38, 97, 109, 112, > 59, 119, 44, 66, 38, 97, 109, 112, 59, 87, 32, 34, 92, 10, 34, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 103, 105, 109, 112, > 44, 71, 73, 77, 80, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 116, 114, 32, 114, 111, 100, 100, 121, 44, 82, 111, 100, > 100, 121, 32, 34, 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 115, 116, 114, 32, 99, 114, 116, 44, 67, 82, 84, 32, 34, 92, 10, 34, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 99, 111, 108, > 111, 114, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 112, 97, 105, > 110, 116, 44, 92, 34, 67, 111, 108, 111, 114, 32, 97, 98, 115, 116, 114, > 97, 99, 116, 105, 111, 110, 32, 112, 97, 105, 110, 116, 92, 34, 32, 34, > 92, 10, 34, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, > 103, 92, 52, 55, 109, 105, 99, 44, 71, 92, 52, 55, 77, 73, 67, 32, > 34, 92, 10, 34, 45, 102, 32, 39, 105, 102, 40, 121, 61, 61, 48, 38, > 38, 105, 62, 61, 57, 55, 38, 38, 105, 60, 61, 49, 50, 50, 44, 105, > 45, 51, 50, 44, 105, 41, 39, 32, 34, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 64, 46, 125, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, > 32, 34, 62, 32, 85, 112, 108, 111, 97, 100, 32, 108, 97, 116, 101, 115, > 116, 32, 118, 101, 114, 115, 105, 111, 110, 32, 40, 34, 64, 123, 45, 115, > 116, 114, 118, 101, 114, 125, 34, 41, 32, 111, 102, 32, 99, 111, 109, 109, > 97, 110, 100, 115, 32, 111, 110, 32, 83, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 32, 115, 101, 114, 118, 101, 114, 46, 92, 110, 34, 32, 45, > 118, 32, 45, 10, 45, 120, 32, 34, 115, 99, 112, 32, 34, 36, 72, 79, > 77, 69, 47, 119, 111, 114, 107, 47, 115, 114, 99, 47, 103, 109, 105, 99, > 47, 115, 114, 99, 47, 103, 109, 105, 99, 95, 100, 101, 102, 46, 103, 109, > 105, 99, 34, 32, 114, 111, 110, 111, 117, 110, 111, 117, 114, 115, 44, 103, > 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, 100, 111, 99, 115, 47, 103, > 109, 105, 99, 95, 100, 101, 102, 46, 34, 36, 49, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 62, 32, > 76, 111, 97, 100, 32, 97, 110, 100, 32, 97, 114, 99, 104, 105, 118, 101, > 32, 46, 103, 109, 105, 99, 32, 115, 111, 117, 114, 99, 101, 32, 102, 105, > 108, 101, 115, 46, 92, 110, 34, 32, 45, 118, 32, 45, 10, 95, 110, 98, > 95, 115, 111, 117, 114, 99, 101, 115, 61, 48, 10, 45, 108, 111, 97, 100, > 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, > 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, > 116, 47, 103, 109, 105, 99, 95, 100, 101, 102, 46, 36, 49, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, > 46, 110, 101, 116, 47, 99, 111, 109, 112, 97, 116, 105, 98, 105, 108, 105, > 116, 121, 46, 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, > 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 115, 52, 48, 54, 56, 51, > 51, 50, 52, 55, 46, 119, 101, 98, 115, 105, 116, 101, 104, 111, 109, 101, > 46, 99, 111, 46, 117, 107, 47, 103, 109, 105, 99, 47, 103, 97, 114, 97, > 103, 101, 99, 111, 100, 101, 114, 46, 103, 109, 105, 99, 10, 45, 108, 111, > 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 103, > 101, 110, 116, 108, 101, 109, 97, 110, 98, 101, 103, 103, 97, 114, 46, 98, > 112, 108, 97, 99, 101, 100, 46, 110, 101, 116, 47, 103, 101, 110, 116, 108, > 101, 109, 97, 110, 98, 101, 103, 103, 97, 114, 95, 103, 109, 105, 99, 46, > 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, > 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 105, 97, 105, 110, 46, > 98, 112, 108, 97, 99, 101, 100, 46, 110, 101, 116, 47, 105, 97, 105, 110, > 95, 102, 101, 114, 103, 117, 115, 115, 111, 110, 46, 103, 109, 105, 99, 10, > 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, > 47, 47, 119, 119, 119, 46, 104, 45, 112, 115, 46, 100, 101, 109, 111, 110, > 46, 99, 111, 46, 117, 107, 47, 71, 77, 73, 67, 47, 106, 97, 121, 112, > 114, 105, 99, 104, 46, 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, > 103, 109, 105, 99, 32, 104, 116, 116, 112, 115, 58, 47, 47, 114, 97, 119, > 46, 103, 105, 116, 104, 117, 98, 46, 99, 111, 109, 47, 106, 98, 111, 117, > 108, 97, 110, 103, 101, 114, 47, 106, 98, 111, 117, 108, 97, 110, 103, 101, > 114, 45, 103, 109, 105, 99, 47, 109, 97, 115, 116, 101, 114, 47, 106, 98, > 111, 117, 108, 97, 110, 103, 101, 114, 46, 103, 109, 105, 99, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 107, 97, 114, 111, 48, 51, 46, 98, 112, 108, 97, 99, 101, 100, 46, 110, > 101, 116, 47, 103, 109, 105, 99, 47, 107, 97, 114, 111, 115, 46, 103, 109, > 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, > 116, 112, 58, 47, 47, 119, 119, 119, 46, 115, 97, 117, 110, 97, 108, 97, > 104, 116, 105, 46, 102, 105, 47, 110, 97, 103, 103, 111, 98, 111, 116, 47, > 110, 97, 103, 103, 111, 98, 111, 116, 46, 103, 109, 105, 99, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, > 46, 110, 101, 116, 47, 112, 104, 111, 116, 111, 99, 111, 109, 105, 120, 46, > 103, 109, 105, 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, > 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, > 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 114, 111, 110, 111, > 117, 110, 111, 117, 114, 115, 46, 103, 109, 105, 99, 10, 45, 108, 111, 97, > 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, 119, 119, > 119, 46, 97, 108, 106, 97, 99, 111, 109, 46, 99, 111, 109, 47, 126, 103, > 109, 105, 99, 47, 115, 97, 109, 106, 46, 103, 109, 105, 99, 10, 45, 108, > 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, 112, 58, 47, 47, > 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, > 46, 110, 101, 116, 47, 116, 111, 109, 107, 101, 105, 108, 46, 103, 109, 105, > 99, 10, 45, 108, 111, 97, 100, 95, 103, 109, 105, 99, 32, 104, 116, 116, > 112, 58, 47, 47, 100, 111, 99, 103, 109, 105, 99, 46, 116, 117, 120, 102, > 97, 109, 105, 108, 121, 46, 111, 114, 103, 47, 122, 111, 110, 100, 101, 114, > 114, 46, 103, 109, 105, 99, 10, 45, 105, 91, 48, 93, 32, 40, 49, 48, > 41, 32, 45, 105, 91, 50, 45, 45, 49, 93, 32, 40, 123, 34, 39, 92, > 110, 35, 64, 103, 105, 109, 112, 32, 95, 95, 95, 95, 95, 95, 95, 95, > 95, 95, 95, 95, 95, 95, 95, 95, 92, 110, 39, 34, 125, 41, 32, 45, > 121, 32, 45, 97, 32, 121, 32, 45, 100, 105, 115, 99, 97, 114, 100, 32, > 49, 51, 32, 45, 114, 101, 112, 108, 97, 99, 101, 32, 57, 44, 51, 50, > 10, 45, 115, 32, 43, 44, 123, 39, 34, 35, 64, 103, 105, 109, 112, 34, > 39, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, > 40, 64, 35, 45, 49, 41, 47, 50, 41, 125, 32, 45, 97, 91, 123, 36, > 62, 43, 49, 125, 44, 123, 36, 62, 43, 50, 125, 93, 32, 121, 32, 45, > 100, 111, 110, 101, 10, 45, 110, 109, 91, 48, 93, 32, 33, 104, 101, 97, > 100, 101, 114, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 62, > 32, 83, 116, 97, 114, 116, 32, 115, 111, 117, 114, 99, 101, 32, 112, 97, > 114, 115, 105, 110, 103, 46, 92, 110, 34, 32, 45, 118, 32, 45, 10, 112, > 114, 111, 103, 114, 101, 115, 115, 95, 102, 97, 99, 116, 111, 114, 61, 123, > 49, 48, 48, 47, 40, 64, 35, 45, 49, 41, 125, 10, 109, 101, 114, 103, > 101, 95, 114, 101, 113, 117, 101, 115, 116, 61, 48, 10, 109, 101, 114, 103, > 101, 95, 115, 116, 97, 114, 116, 61, 48, 10, 110, 98, 95, 102, 105, 108, > 116, 101, 114, 115, 61, 48, 10, 111, 102, 102, 115, 101, 116, 61, 48, 10, > 112, 97, 116, 104, 61, 47, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 105, 110, 100, 61, 123, 36, 62, 45, 36, 111, 102, 102, 115, 101, > 116, 125, 10, 45, 105, 102, 32, 123, 64, 123, 123, 36, 105, 110, 100, 45, > 49, 125, 44, 45, 49, 125, 61, 61, 49, 48, 34, 32, 38, 38, 32, 34, > 123, 123, 96, 64, 123, 36, 105, 110, 100, 44, 48, 45, 53, 125, 96, 125, > 39, 61, 61, 39, 34, 35, 64, 103, 105, 109, 112, 34, 125, 34, 32, 38, > 38, 32, 34, 40, 64, 123, 36, 105, 110, 100, 44, 54, 125, 61, 61, 51, > 50, 34, 32, 124, 124, 32, 34, 64, 123, 36, 105, 110, 100, 44, 54, 125, > 61, 61, 123, 39, 95, 39, 125, 41, 125, 32, 45, 108, 91, 36, 105, 110, > 100, 93, 10, 105, 115, 95, 102, 111, 108, 100, 101, 114, 61, 48, 10, 45, > 115, 32, 43, 44, 49, 48, 10, 45, 105, 102, 32, 123, 64, 123, 48, 44, > 54, 125, 61, 61, 123, 39, 95, 39, 125, 125, 32, 45, 45, 114, 111, 119, > 115, 91, 48, 93, 32, 57, 44, 49, 48, 48, 37, 32, 45, 114, 111, 119, > 115, 91, 48, 93, 32, 48, 44, 56, 10, 45, 101, 108, 115, 101, 32, 45, > 45, 114, 111, 119, 115, 91, 48, 93, 32, 54, 44, 49, 48, 48, 37, 32, > 45, 114, 111, 119, 115, 91, 48, 93, 32, 48, 44, 53, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 45, 49, > 93, 32, 51, 50, 32, 45, 109, 118, 91, 45, 49, 93, 32, 49, 10, 45, > 105, 102, 32, 123, 64, 123, 49, 44, 48, 125, 33, 61, 123, 39, 58, 39, > 125, 125, 10, 45, 108, 91, 49, 93, 10, 45, 115, 32, 43, 44, 123, 39, > 58, 39, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, > 91, 48, 93, 32, 34, 60, 98, 62, 34, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 115, 116, 114, 91, 48, 93, 32, 34, 60, 47, 98, 62, 34, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 48, 93, > 32, 34, 60, 105, 62, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 115, 116, 114, 91, 48, 93, 32, 34, 60, 47, 105, 62, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 91, 48, 93, 32, 123, 39, 47, 39, 125, 44, > 123, 39, 45, 39, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 91, 48, > 93, 32, 123, 39, 44, 39, 125, 44, 123, 39, 59, 39, 125, 10, 45, 97, > 117, 116, 111, 99, 114, 111, 112, 91, 48, 93, 32, 51, 50, 10, 45, 105, > 102, 32, 123, 64, 35, 62, 49, 125, 10, 45, 99, 97, 108, 105, 98, 114, > 97, 116, 101, 95, 110, 97, 109, 101, 91, 48, 93, 32, 45, 45, 114, 101, > 112, 108, 97, 99, 101, 91, 48, 93, 32, 51, 50, 44, 123, 39, 126, 39, > 125, 10, 110, 97, 109, 101, 61, 36, 112, 97, 116, 104, 64, 123, 45, 49, > 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 109, 101, 114, 103, > 101, 95, 114, 101, 113, 117, 101, 115, 116, 61, 49, 10, 110, 98, 95, 102, > 105, 108, 116, 101, 114, 115, 61, 123, 36, 110, 98, 95, 102, 105, 108, 116, > 101, 114, 115, 43, 49, 125, 10, 45, 105, 91, 48, 44, 49, 93, 32, 40, > 51, 50, 41, 32, 45, 97, 32, 121, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 32, 32, 34, 36, 110, 98, 95, 102, 105, 108, 116, 101, > 114, 115, 34, 46, 32, 34, 36, 110, 97, 109, 101, 34, 32, 40, 34, 123, > 114, 111, 117, 110, 100, 40, 36, 62, 42, 36, 112, 114, 111, 103, 114, 101, > 115, 115, 95, 102, 97, 99, 116, 111, 114, 41, 125, 34, 37, 41, 46, 34, > 32, 45, 118, 32, 45, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, > 123, 105, 61, 61, 123, 39, 95, 39, 125, 125, 10, 45, 100, 111, 32, 112, > 97, 116, 104, 61, 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, > 32, 34, 36, 112, 97, 116, 104, 125, 32, 45, 115, 104, 105, 102, 116, 32, > 48, 44, 45, 49, 44, 48, 44, 48, 32, 45, 119, 104, 105, 108, 101, 32, > 123, 105, 61, 61, 123, 39, 95, 39, 125, 125, 10, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 32, 48, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 51, 50, 10, 45, 105, 102, 32, 123, 119, 125, 32, 45, 99, 97, 108, > 105, 98, 114, 97, 116, 101, 95, 110, 97, 109, 101, 32, 45, 114, 101, 112, > 108, 97, 99, 101, 32, 51, 50, 44, 123, 39, 126, 39, 125, 32, 112, 97, > 116, 104, 61, 36, 112, 97, 116, 104, 64, 123, 48, 44, 116, 125, 47, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 10, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 32, 51, 50, 32, 45, 99, 97, 108, 105, 98, > 114, 97, 116, 101, 95, 110, 97, 109, 101, 32, 45, 114, 101, 112, 108, 97, > 99, 101, 32, 51, 50, 44, 123, 39, 126, 39, 125, 32, 112, 97, 116, 104, > 61, 36, 112, 97, 116, 104, 64, 123, 48, 44, 116, 125, 47, 10, 45, 101, > 110, 100, 105, 102, 10, 105, 115, 95, 102, 111, 108, 100, 101, 114, 61, 49, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 45, 105, > 102, 32, 36, 105, 115, 95, 102, 111, 108, 100, 101, 114, 32, 45, 114, 109, > 91, 48, 44, 49, 93, 32, 45, 105, 91, 48, 93, 32, 40, 49, 48, 41, > 10, 45, 101, 108, 115, 101, 32, 45, 110, 109, 91, 48, 93, 32, 36, 110, > 97, 109, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, > 10, 45, 105, 102, 32, 123, 64, 35, 62, 61, 51, 125, 32, 45, 108, 91, > 49, 93, 10, 45, 115, 32, 43, 44, 123, 39, 61, 39, 125, 10, 45, 105, > 102, 32, 123, 64, 35, 62, 61, 51, 125, 32, 45, 105, 102, 32, 123, 64, > 123, 49, 44, 48, 125, 61, 61, 123, 39, 61, 39, 125, 125, 10, 45, 114, > 111, 119, 115, 91, 48, 93, 32, 49, 44, 49, 48, 48, 37, 32, 45, 99, > 97, 108, 105, 98, 114, 97, 116, 101, 95, 110, 97, 109, 101, 91, 48, 93, > 10, 45, 105, 91, 48, 93, 32, 40, 123, 39, 58, 39, 125, 59, 51, 50, > 41, 32, 45, 105, 91, 50, 93, 32, 40, 51, 50, 41, 10, 45, 101, 110, > 100, 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 91, 49, 93, 32, 40, 51, > 50, 41, 10, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 121, 10, 45, > 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 109, 101, 114, 103, 101, 95, 114, 101, 113, 117, 101, 115, 116, 34, > 32, 38, 38, 32, 34, 36, 105, 110, 100, 62, 48, 125, 10, 45, 97, 91, > 36, 109, 101, 114, 103, 101, 95, 115, 116, 97, 114, 116, 45, 123, 36, 105, > 110, 100, 45, 49, 125, 93, 32, 121, 10, 111, 102, 102, 115, 101, 116, 61, > 123, 36, 111, 102, 102, 115, 101, 116, 43, 36, 105, 110, 100, 45, 36, 109, > 101, 114, 103, 101, 95, 115, 116, 97, 114, 116, 45, 49, 125, 10, 109, 101, > 114, 103, 101, 95, 115, 116, 97, 114, 116, 61, 123, 36, 109, 101, 114, 103, > 101, 95, 115, 116, 97, 114, 116, 43, 49, 125, 10, 109, 101, 114, 103, 101, > 95, 114, 101, 113, 117, 101, 115, 116, 61, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 100, 111, 110, 101, 10, 45, 97, 91, 36, 109, 101, 114, 103, > 101, 95, 115, 116, 97, 114, 116, 45, 45, 49, 93, 32, 121, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 62, 32, 70, 111, 114, > 99, 101, 32, 102, 105, 108, 116, 101, 114, 115, 32, 116, 111, 32, 109, 111, > 118, 101, 44, 32, 105, 102, 32, 110, 101, 99, 101, 115, 115, 97, 114, 121, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 105, 110, 100, 61, 36, 62, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 95, 110, 98, 109, 32, 45, 105, 102, 32, 123, 64, 123, 36, > 105, 110, 100, 44, 110, 125, 39, 61, 61, 39, 36, 123, 95, 116, 111, 95, > 109, 111, 118, 101, 36, 62, 125, 125, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 32, 32, 34, 36, 105, 110, 100, 34, 46, 32, 77, 111, > 118, 101, 32, 39, 34, 64, 123, 36, 105, 110, 100, 44, 110, 125, 34, 39, > 32, 116, 111, 32, 39, 34, 36, 123, 95, 109, 111, 118, 101, 95, 116, 111, > 36, 62, 125, 34, 39, 46, 34, 32, 45, 118, 32, 45, 10, 45, 110, 97, > 109, 101, 91, 36, 105, 110, 100, 93, 32, 36, 123, 95, 109, 111, 118, 101, > 95, 116, 111, 36, 62, 125, 47, 64, 123, 36, 105, 110, 100, 44, 98, 125, > 10, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, 110, 101, 32, 45, 100, > 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, > 110, 62, 32, 83, 111, 114, 116, 32, 102, 105, 108, 116, 101, 114, 115, 32, > 98, 121, 32, 108, 101, 120, 105, 99, 111, 103, 114, 97, 112, 104, 105, 99, > 32, 111, 114, 100, 101, 114, 46, 34, 32, 45, 118, 32, 45, 10, 45, 95, > 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, > 95, 115, 111, 114, 116, 32, 48, 44, 123, 64, 35, 45, 49, 125, 10, 45, > 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 62, 32, 82, 101, > 109, 111, 118, 101, 32, 100, 117, 112, 108, 105, 99, 97, 116, 101, 32, 102, > 105, 108, 116, 101, 114, 115, 46, 34, 32, 45, 118, 32, 45, 10, 112, 110, > 97, 109, 101, 61, 64, 123, 45, 49, 44, 110, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 99, 110, 97, 109, 101, > 61, 64, 123, 36, 60, 44, 110, 125, 10, 45, 105, 102, 32, 123, 36, 99, > 110, 97, 109, 101, 39, 61, 61, 39, 36, 112, 110, 97, 109, 101, 125, 10, > 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, 34, 32, 32, 34, 36, 60, > 34, 46, 32, 82, 101, 109, 111, 118, 101, 32, 100, 117, 112, 108, 105, 99, > 97, 116, 101, 32, 39, 34, 36, 99, 110, 97, 109, 101, 34, 39, 46, 34, > 32, 45, 118, 32, 45, 10, 45, 114, 109, 91, 36, 60, 93, 10, 45, 101, > 108, 115, 101, 32, 112, 110, 97, 109, 101, 61, 36, 99, 110, 97, 109, 101, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 92, 110, 62, 32, 82, 101, 98, > 117, 105, 108, 100, 32, 102, 111, 108, 100, 101, 114, 32, 115, 116, 114, 117, > 99, 116, 117, 114, 101, 46, 34, 32, 45, 118, 32, 45, 10, 45, 109, 32, > 34, 110, 98, 95, 108, 101, 118, 101, 108, 115, 32, 58, 32, 45, 108, 91, > 93, 32, 40, 123, 39, 36, 34, 34, 49, 39, 125, 41, 32, 45, 115, 32, > 45, 44, 123, 39, 47, 39, 125, 32, 45, 117, 32, 64, 35, 32, 45, 114, > 109, 32, 45, 101, 110, 100, 108, 34, 10, 112, 97, 116, 104, 61, 47, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 110, 112, 97, 116, 104, 61, 64, 123, 34, 45, 112, 97, 114, 101, > 110, 116, 32, 34, 64, 123, 48, 44, 110, 125, 125, 10, 45, 105, 102, 32, > 123, 36, 112, 97, 116, 104, 39, 33, 61, 39, 36, 110, 112, 97, 116, 104, > 125, 10, 110, 99, 61, 64, 123, 34, 45, 110, 98, 95, 108, 101, 118, 101, > 108, 115, 91, 93, 32, 34, 36, 112, 97, 116, 104, 125, 10, 110, 110, 61, > 64, 123, 34, 45, 110, 98, 95, 108, 101, 118, 101, 108, 115, 91, 93, 32, > 34, 36, 110, 112, 97, 116, 104, 125, 10, 110, 98, 95, 117, 112, 61, 48, > 10, 110, 98, 95, 100, 111, 119, 110, 61, 48, 10, 98, 97, 115, 105, 115, > 61, 36, 112, 97, 116, 104, 32, 110, 98, 97, 115, 105, 115, 61, 36, 110, > 112, 97, 116, 104, 10, 45, 100, 111, 10, 110, 99, 61, 64, 123, 34, 45, > 110, 98, 95, 108, 101, 118, 101, 108, 115, 91, 93, 32, 34, 36, 98, 97, > 115, 105, 115, 125, 10, 110, 110, 61, 64, 123, 34, 45, 110, 98, 95, 108, > 101, 118, 101, 108, 115, 91, 93, 32, 34, 36, 110, 98, 97, 115, 105, 115, > 125, 10, 45, 105, 102, 32, 123, 36, 110, 99, 62, 36, 110, 110, 125, 32, > 98, 97, 115, 105, 115, 61, 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, > 91, 93, 32, 34, 36, 98, 97, 115, 105, 115, 125, 32, 110, 98, 95, 117, > 112, 61, 123, 36, 110, 98, 95, 117, 112, 43, 49, 125, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 110, 110, 62, 36, 110, 99, 125, 32, 110, 98, 97, > 115, 105, 115, 61, 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, > 32, 34, 36, 110, 98, 97, 115, 105, 115, 125, 32, 110, 98, 95, 100, 111, > 119, 110, 61, 123, 36, 110, 98, 95, 100, 111, 119, 110, 43, 49, 125, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 110, 98, 97, 115, 105, 115, 39, 33, > 61, 39, 36, 98, 97, 115, 105, 115, 125, 32, 98, 97, 115, 105, 115, 61, > 64, 123, 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, 32, 34, 36, 98, > 97, 115, 105, 115, 125, 32, 110, 98, 95, 117, 112, 61, 123, 36, 110, 98, > 95, 117, 112, 43, 49, 125, 32, 110, 98, 97, 115, 105, 115, 61, 64, 123, > 34, 45, 112, 97, 114, 101, 110, 116, 91, 93, 32, 34, 36, 110, 98, 97, > 115, 105, 115, 125, 32, 110, 98, 95, 100, 111, 119, 110, 61, 123, 36, 110, > 98, 95, 100, 111, 119, 110, 43, 49, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 110, 98, 97, 115, 105, 115, > 39, 33, 61, 39, 36, 98, 97, 115, 105, 115, 125, 10, 99, 111, 109, 109, > 97, 110, 100, 61, 10, 45, 105, 102, 32, 36, 110, 98, 95, 117, 112, 32, > 49, 44, 36, 110, 98, 95, 117, 112, 44, 49, 44, 49, 44, 123, 39, 95, > 39, 125, 32, 99, 111, 109, 109, 97, 110, 100, 61, 34, 35, 64, 103, 105, > 109, 112, 32, 34, 64, 123, 45, 49, 44, 116, 125, 34, 92, 110, 34, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 36, 110, 98, 95, 100, 111, 119, 110, 32, 45, 108, 91, 93, > 10, 40, 123, 39, 36, 110, 112, 97, 116, 104, 39, 125, 41, 32, 45, 115, > 32, 45, 44, 123, 39, 47, 39, 125, 32, 45, 107, 91, 45, 36, 110, 98, > 95, 100, 111, 119, 110, 45, 45, 49, 93, 32, 45, 114, 101, 112, 108, 97, > 99, 101, 32, 123, 39, 126, 39, 125, 44, 51, 50, 10, 108, 101, 118, 101, > 108, 61, 123, 64, 123, 34, 45, 110, 98, 95, 108, 101, 118, 101, 108, 115, > 32, 34, 36, 112, 97, 116, 104, 125, 45, 36, 110, 98, 95, 117, 112, 125, > 10, 98, 97, 108, 105, 115, 101, 61, 64, 123, 34, 45, 105, 102, 32, 34, > 123, 36, 108, 101, 118, 101, 108, 60, 61, 48, 34, 32, 38, 38, 32, 34, > 123, 36, 110, 112, 97, 116, 104, 39, 33, 61, 39, 47, 65, 98, 111, 117, > 116, 47, 125, 125, 34, 32, 45, 117, 32, 98, 32, 45, 101, 108, 115, 101, > 32, 45, 117, 32, 105, 32, 45, 101, 110, 100, 105, 102, 34, 125, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 99, 111, 109, 109, 97, 110, > 100, 61, 36, 99, 111, 109, 109, 97, 110, 100, 34, 35, 64, 103, 105, 109, > 112, 32, 60, 34, 36, 98, 97, 108, 105, 115, 101, 34, 62, 34, 64, 123, > 36, 62, 44, 116, 125, 34, 60, 47, 34, 36, 98, 97, 108, 105, 115, 101, > 34, 62, 92, 110, 34, 10, 98, 97, 108, 105, 115, 101, 61, 34, 105, 34, > 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 10, 45, 101, 110, 100, 108, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, > 103, 40, 36, 99, 111, 109, 109, 97, 110, 100, 41, 125, 32, 110, 97, 109, > 101, 61, 64, 123, 48, 44, 110, 125, 32, 45, 105, 91, 48, 93, 32, 40, > 123, 39, 36, 99, 111, 109, 109, 97, 110, 100, 39, 125, 41, 32, 45, 121, > 91, 48, 93, 32, 45, 97, 32, 121, 32, 45, 110, 109, 32, 36, 110, 97, > 109, 101, 10, 45, 101, 110, 100, 105, 102, 10, 112, 97, 116, 104, 61, 36, > 110, 112, 97, 116, 104, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, > 91, 93, 32, 34, 62, 32, 83, 101, 97, 114, 99, 104, 32, 97, 110, 100, > 32, 114, 101, 112, 108, 97, 99, 101, 32, 115, 116, 114, 105, 110, 103, 115, > 46, 34, 32, 45, 118, 32, 45, 10, 45, 114, 101, 112, 108, 97, 99, 101, > 95, 115, 116, 114, 32, 34, 83, 97, 116, 117, 114, 97, 116, 105, 111, 110, > 32, 101, 113, 32, 112, 34, 44, 34, 83, 97, 116, 117, 114, 97, 116, 105, > 111, 110, 32, 101, 113, 117, 97, 108, 105, 122, 101, 114, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 32, 34, 67, 77, 89, 75, > 32, 116, 111, 110, 101, 32, 112, 34, 44, 34, 67, 77, 89, 75, 32, 116, > 111, 110, 101, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, > 114, 32, 34, 84, 101, 120, 116, 117, 114, 101, 32, 101, 110, 104, 97, 110, > 99, 101, 32, 112, 34, 44, 34, 84, 101, 120, 116, 117, 114, 101, 32, 101, > 110, 104, 97, 110, 99, 101, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 45, 108, 91, 36, 62, 93, 32, 99, 111, 109, 109, 97, > 110, 100, 95, 110, 97, 109, 101, 36, 62, 61, 34, 34, 10, 45, 45, 114, > 111, 119, 115, 32, 48, 44, 54, 32, 104, 101, 97, 100, 61, 64, 123, 45, > 49, 44, 116, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, > 32, 123, 36, 104, 101, 97, 100, 39, 61, 61, 39, 34, 35, 64, 103, 105, > 109, 112, 32, 34, 125, 32, 45, 115, 32, 45, 44, 123, 39, 58, 39, 125, > 10, 45, 105, 102, 32, 123, 64, 35, 62, 61, 49, 125, 32, 45, 108, 91, > 49, 93, 32, 45, 115, 32, 45, 44, 123, 39, 44, 39, 125, 10, 45, 105, > 102, 32, 64, 35, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 91, 48, > 93, 32, 51, 50, 32, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, 109, > 101, 36, 62, 61, 64, 123, 48, 44, 116, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 118, 32, 43, 32, 45, 101, 91, 93, 32, > 34, 62, 32, 83, 97, 118, 101, 32, 111, 117, 116, 112, 117, 116, 32, 46, > 103, 109, 105, 99, 32, 102, 105, 108, 101, 46, 92, 110, 34, 32, 45, 118, > 32, 45, 10, 45, 45, 97, 32, 121, 32, 45, 105, 102, 32, 123, 104, 62, > 49, 125, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 123, 104, 45, 49, > 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 44, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 111, 91, 45, 49, 93, 32, 114, 97, 119, 58, > 36, 72, 79, 77, 69, 47, 46, 117, 112, 100, 97, 116, 101, 36, 49, 46, > 103, 109, 105, 99, 44, 99, 104, 97, 114, 10, 45, 111, 91, 45, 49, 93, > 32, 47, 116, 109, 112, 47, 46, 117, 112, 100, 97, 116, 101, 36, 49, 46, > 99, 105, 109, 103, 122, 44, 99, 104, 97, 114, 10, 45, 120, 32, 34, 115, > 99, 112, 32, 34, 36, 72, 79, 77, 69, 47, 46, 117, 112, 100, 97, 116, > 101, 36, 49, 46, 103, 109, 105, 99, 34, 32, 114, 111, 110, 111, 117, 110, > 111, 117, 114, 115, 44, 103, 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, > 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, > 100, 111, 99, 115, 47, 34, 117, 112, 100, 97, 116, 101, 49, 53, 56, 53, > 46, 103, 109, 105, 99, 10, 45, 120, 32, 34, 115, 99, 112, 32, 34, 47, > 116, 109, 112, 47, 46, 117, 112, 100, 97, 116, 101, 36, 49, 46, 99, 105, > 109, 103, 122, 34, 32, 114, 111, 110, 111, 117, 110, 111, 117, 114, 115, 44, > 103, 109, 105, 99, 64, 119, 101, 98, 46, 115, 111, 117, 114, 99, 101, 102, > 111, 114, 103, 101, 46, 110, 101, 116, 58, 104, 116, 100, 111, 99, 115, 47, > 34, 117, 112, 100, 97, 116, 101, 36, 49, 46, 103, 109, 105, 99, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 50, 10, 45, 118, > 32, 43, 32, 45, 101, 91, 93, 32, 34, 62, 32, 79, 117, 116, 112, 117, > 116, 32, 108, 105, 115, 116, 32, 111, 102, 32, 102, 105, 108, 116, 101, 114, > 115, 32, 105, 110, 32, 115, 116, 100, 111, 117, 116, 46, 92, 110, 34, 32, > 45, 118, 32, 45, 10, 45, 120, 32, 34, 100, 97, 116, 101, 32, 43, 37, > 89, 44, 37, 109, 44, 37, 100, 32, 62, 34, 64, 123, 45, 112, 97, 116, > 104, 95, 116, 109, 112, 125, 47, 100, 97, 116, 101, 46, 100, 108, 109, 10, > 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 100, 97, 116, > 101, 46, 100, 108, 109, 10, 45, 101, 99, 104, 111, 95, 115, 116, 100, 111, > 117, 116, 32, 34, 42, 42, 42, 32, 76, 105, 115, 116, 32, 111, 102, 32, > 102, 105, 108, 116, 101, 114, 115, 32, 105, 110, 32, 116, 104, 101, 32, 71, > 92, 52, 55, 77, 73, 67, 32, 112, 108, 117, 103, 45, 105, 110, 32, 102, > 111, 114, 32, 71, 73, 77, 80, 32, 40, 34, 36, 110, 98, 95, 102, 105, > 108, 116, 101, 114, 115, 34, 32, 102, 105, 108, 116, 101, 114, 115, 44, 32, > 111, 110, 32, 34, 123, 105, 125, 47, 123, 105, 40, 49, 41, 125, 47, 123, > 105, 40, 50, 41, 125, 34, 41, 32, 42, 42, 42, 92, 110, 34, 10, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 99, 104, 111, 95, 115, 116, 100, > 111, 117, 116, 32, 34, 42, 32, 76, 105, 115, 116, 32, 111, 102, 32, 102, > 105, 108, 116, 101, 114, 115, 44, 32, 115, 111, 114, 116, 101, 100, 32, 98, > 121, 32, 112, 97, 116, 104, 58, 92, 110, 34, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 40, 123, 39, > 64, 123, 48, 44, 110, 125, 39, 125, 41, 32, 45, 105, 102, 32, 123, 105, > 33, 61, 123, 39, 33, 39, 125, 125, 10, 45, 114, 91, 45, 49, 93, 32, > 123, 119, 45, 49, 125, 44, 49, 44, 49, 44, 49, 44, 48, 44, 48, 44, > 49, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, > 49, 93, 32, 34, 38, 97, 109, 112, 59, 34, 44, 34, 38, 34, 10, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, 49, 93, 32, > 34, 38, 35, 50, 51, 51, 59, 34, 44, 34, 101, 34, 10, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, 49, 93, 32, 34, 47, > 34, 44, 34, 126, 47, 126, 34, 10, 45, 114, 101, 112, 108, 97, 99, 101, > 91, 45, 49, 93, 32, 123, 39, 126, 39, 125, 44, 51, 50, 10, 45, 105, > 102, 32, 123, 110, 97, 114, 103, 40, 36, 123, 99, 111, 109, 109, 97, 110, > 100, 95, 110, 97, 109, 101, 36, 62, 125, 41, 125, 32, 45, 101, 99, 104, > 111, 95, 115, 116, 100, 111, 117, 116, 91, 93, 32, 34, 32, 32, 34, 64, > 123, 45, 49, 44, 116, 125, 34, 32, 40, 99, 111, 109, 109, 97, 110, 100, > 32, 39, 45, 34, 36, 123, 99, 111, 109, 109, 97, 110, 100, 95, 110, 97, > 109, 101, 36, 62, 125, 34, 39, 41, 34, 10, 45, 101, 108, 115, 101, 32, > 45, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, 116, 91, 93, 32, 34, > 32, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 99, > 104, 111, 95, 115, 116, 100, 111, 117, 116, 32, 34, 92, 110, 42, 32, 76, > 105, 115, 116, 32, 111, 102, 32, 102, 105, 108, 116, 101, 114, 115, 44, 32, > 115, 111, 114, 116, 101, 100, 32, 97, 108, 112, 104, 97, 98, 101, 116, 105, > 99, 97, 108, 108, 121, 58, 92, 110, 34, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 110, 97, 109, 101, 61, 64, 123, 36, 62, 44, 98, > 125, 10, 112, 97, 116, 104, 61, 64, 123, 36, 62, 44, 102, 125, 10, 45, > 110, 109, 91, 36, 62, 93, 32, 36, 110, 97, 109, 101, 34, 126, 40, 105, > 110, 126, 39, 34, 36, 112, 97, 116, 104, 34, 39, 41, 34, 10, 45, 100, > 111, 110, 101, 10, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, > 99, 95, 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 48, 44, 123, 64, > 35, 45, 49, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 40, 123, 39, 64, 123, 48, 44, 110, 125, > 39, 125, 41, 32, 45, 105, 102, 32, 123, 105, 33, 61, 123, 39, 33, 39, > 125, 125, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, > 45, 49, 93, 32, 34, 38, 97, 109, 112, 59, 34, 44, 34, 38, 34, 10, > 45, 114, 101, 112, 108, 97, 99, 101, 95, 115, 116, 114, 91, 45, 49, 93, > 32, 34, 38, 35, 50, 51, 51, 59, 34, 44, 34, 101, 34, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, 123, 39, 126, 39, 125, > 44, 51, 50, 10, 45, 101, 99, 104, 111, 95, 115, 116, 100, 111, 117, 116, > 91, 93, 32, 34, 32, 32, 34, 64, 123, 45, 49, 44, 116, 125, 10, 45, > 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 99, 104, 111, 95, > 115, 116, 100, 111, 117, 116, 32, 34, 92, 110, 42, 42, 42, 32, 69, 110, > 100, 32, 111, 102, 32, 108, 105, 115, 116, 32, 42, 42, 42, 92, 110, 34, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 32, 45, 118, 32, 43, > 32, 45, 101, 91, 93, 32, 34, 62, 32, 65, 108, 108, 32, 100, 111, 110, > 101, 32, 33, 92, 110, 34, 10, 95, 117, 112, 100, 97, 116, 101, 95, 103, > 109, 105, 99, 95, 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 58, 10, > 109, 105, 100, 61, 123, 105, 110, 116, 40, 40, 36, 49, 43, 36, 50, 41, > 47, 50, 41, 125, 10, 45, 105, 102, 32, 64, 123, 34, 45, 95, 109, 97, > 120, 91, 93, 32, 34, 64, 123, 36, 49, 44, 110, 125, 44, 64, 123, 36, > 109, 105, 100, 44, 110, 125, 125, 32, 45, 114, 118, 91, 36, 49, 44, 36, > 109, 105, 100, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 64, 123, 34, 45, 95, 109, 97, 120, 91, 93, 32, 34, 64, 123, 36, 109, > 105, 100, 44, 110, 125, 44, 64, 123, 36, 50, 44, 110, 125, 125, 32, 45, > 114, 118, 91, 36, 50, 44, 36, 109, 105, 100, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 64, 123, 34, 45, 95, 109, 97, 120, 91, > 93, 32, 34, 64, 123, 36, 49, 44, 110, 125, 44, 64, 123, 36, 109, 105, > 100, 44, 110, 125, 125, 32, 45, 114, 118, 91, 36, 49, 44, 36, 109, 105, > 100, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 50, 45, 36, 49, 62, 61, 51, 125, 10, 112, 105, 118, 111, 116, 61, 64, > 123, 36, 109, 105, 100, 44, 110, 125, 10, 105, 61, 36, 49, 32, 106, 61, > 36, 50, 10, 45, 100, 111, 10, 45, 105, 102, 32, 64, 123, 34, 45, 95, > 109, 97, 120, 91, 93, 32, 34, 36, 112, 105, 118, 111, 116, 44, 64, 123, > 36, 105, 44, 110, 125, 125, 32, 45, 100, 111, 32, 105, 61, 123, 36, 105, > 43, 49, 125, 32, 45, 119, 104, 105, 108, 101, 32, 64, 123, 34, 45, 95, > 109, 97, 120, 91, 93, 32, 34, 36, 112, 105, 118, 111, 116, 44, 64, 123, > 36, 105, 44, 110, 125, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 64, 123, 34, 45, 95, 109, 97, 120, 91, 93, 32, 34, 64, 123, > 36, 106, 44, 110, 125, 44, 36, 112, 105, 118, 111, 116, 125, 32, 45, 100, > 111, 32, 106, 61, 123, 36, 106, 45, 49, 125, 32, 45, 119, 104, 105, 108, > 101, 32, 64, 123, 34, 45, 95, 109, 97, 120, 91, 93, 32, 34, 64, 123, > 36, 106, 44, 110, 125, 44, 36, 112, 105, 118, 111, 116, 125, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 105, 60, 61, 36, 106, > 125, 32, 45, 114, 118, 91, 36, 105, 44, 36, 106, 93, 32, 105, 61, 123, > 36, 105, 43, 49, 125, 32, 106, 61, 123, 36, 106, 45, 49, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 105, > 60, 61, 36, 106, 125, 10, 45, 105, 102, 32, 123, 36, 49, 60, 36, 106, > 125, 32, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, > 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 36, 49, 44, 36, 106, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 105, 60, 36, > 50, 125, 32, 45, 95, 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, > 95, 103, 105, 109, 112, 95, 115, 111, 114, 116, 32, 36, 105, 44, 36, 50, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 117, 112, 100, 97, 116, 101, 95, 103, 109, 105, 99, 95, 103, 105, 109, 112, > 95, 109, 111, 118, 101, 32, 58, 10, 45, 105, 102, 32, 123, 33, 110, 97, > 114, 103, 40, 36, 95, 110, 98, 109, 41, 125, 32, 95, 110, 98, 109, 61, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 95, 116, 111, 95, 109, 111, 118, > 101, 36, 123, 95, 110, 98, 109, 125, 61, 34, 36, 49, 34, 32, 95, 109, > 111, 118, 101, 95, 116, 111, 36, 123, 95, 110, 98, 109, 125, 61, 34, 36, > 50, 34, 32, 95, 110, 98, 109, 61, 123, 36, 95, 110, 98, 109, 43, 49, > 125, 10, 95, 98, 101, 102, 111, 114, 101, 32, 58, 10, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 34, 66, 101, 102, 111, 114, 101, 34, 44, 49, 44, > 45, 49, 44, 49, 51, 44, 49, 44, 49, 32, 45, 114, 91, 45, 49, 93, > 32, 123, 119, 43, 52, 125, 44, 123, 104, 43, 52, 125, 44, 49, 44, 49, > 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 95, 97, 102, > 116, 101, 114, 32, 58, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, 34, > 65, 102, 116, 101, 114, 34, 44, 49, 44, 45, 49, 44, 49, 51, 44, 49, > 44, 49, 32, 45, 114, 91, 45, 49, 93, 32, 123, 119, 43, 52, 125, 44, > 123, 104, 43, 52, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, > 125, 32, 45, 108, 91, 45, 49, 93, 32, 36, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 99, 111, 110, > 116, 105, 110, 117, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 123, 33, 40, 36, 50, 37, 50, 41, 125, 10, 45, 115, 91, 45, 49, > 93, 32, 120, 44, 50, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 50, > 125, 32, 45, 108, 91, 45, 49, 93, 32, 36, 49, 32, 45, 101, 110, 100, > 108, 32, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, > 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, 95, 98, 101, 102, 111, 114, > 101, 32, 45, 95, 97, 102, 116, 101, 114, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 50, 61, 61, 52, 125, 32, 45, 108, 91, 45, 50, 93, 32, 36, > 49, 32, 45, 101, 110, 100, 108, 32, 45, 116, 111, 95, 99, 111, 108, 111, > 114, 109, 111, 100, 101, 91, 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, > 95, 97, 102, 116, 101, 114, 32, 45, 95, 98, 101, 102, 111, 114, 101, 10, > 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, > 108, 91, 45, 49, 93, 32, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, > 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 50, 44, > 45, 49, 93, 32, 48, 32, 45, 95, 98, 101, 102, 111, 114, 101, 32, 45, > 95, 97, 102, 116, 101, 114, 10, 45, 101, 110, 100, 105, 102, 10, 45, 108, > 105, 110, 101, 91, 45, 51, 93, 32, 48, 44, 48, 44, 48, 44, 64, 123, > 45, 51, 44, 104, 125, 44, 49, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 32, 45, 97, 91, 45, 52, 44, 45, 51, 93, 32, 120, 10, 45, 101, > 108, 115, 101, 10, 45, 115, 91, 45, 49, 93, 32, 121, 44, 50, 10, 45, > 105, 102, 32, 123, 36, 50, 61, 61, 49, 125, 32, 45, 108, 91, 45, 49, > 93, 32, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, 116, 111, 95, 99, > 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 50, 44, 45, 49, 93, 32, > 123, 109, 97, 120, 40, 64, 123, 45, 50, 44, 115, 125, 44, 115, 41, 125, > 32, 45, 95, 98, 101, 102, 111, 114, 101, 32, 45, 95, 97, 102, 116, 101, > 114, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 51, 125, 32, > 45, 108, 91, 45, 50, 93, 32, 36, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 50, > 44, 45, 49, 93, 32, 123, 109, 97, 120, 40, 64, 123, 45, 50, 44, 115, > 125, 44, 115, 41, 125, 32, 45, 95, 97, 102, 116, 101, 114, 32, 45, 95, > 98, 101, 102, 111, 114, 101, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 45, 108, 91, 45, 49, 93, 32, 36, 49, 32, > 45, 101, 110, 100, 108, 32, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, > 111, 100, 101, 91, 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, 95, 98, > 101, 102, 111, 114, 101, 32, 45, 95, 97, 102, 116, 101, 114, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, 45, 51, 93, 32, 48, > 44, 48, 44, 64, 123, 45, 51, 44, 119, 125, 44, 48, 44, 49, 44, 48, > 44, 48, 44, 48, 44, 50, 53, 53, 32, 45, 97, 91, 45, 52, 44, 45, > 51, 93, 32, 121, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 100, 105, > 108, 97, 116, 101, 91, 45, 50, 44, 45, 49, 93, 32, 53, 32, 45, 42, > 91, 45, 52, 44, 45, 51, 93, 32, 50, 53, 53, 32, 45, 116, 111, 95, > 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 45, 52, 44, 45, 51, 93, > 32, 64, 123, 45, 53, 44, 115, 125, 10, 45, 106, 91, 45, 53, 93, 32, > 91, 45, 52, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 56, > 44, 91, 45, 50, 93, 32, 45, 106, 91, 45, 53, 93, 32, 91, 45, 51, > 93, 44, 123, 64, 123, 45, 53, 44, 119, 125, 45, 119, 45, 49, 125, 44, > 123, 64, 123, 45, 53, 44, 104, 125, 45, 104, 45, 49, 125, 44, 48, 44, > 48, 44, 48, 46, 56, 44, 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, > 52, 45, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 110, > 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 78, 111, 32, 112, 114, > 101, 118, 105, 101, 119, 92, 110, 32, 97, 118, 97, 105, 108, 97, 98, 108, > 101, 34, 44, 34, 36, 42, 34, 10, 95, 103, 105, 109, 112, 95, 110, 111, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 48, 125, 32, 45, 107, 91, 48, 93, 32, 45, 101, 108, 115, > 101, 32, 50, 53, 54, 44, 50, 53, 54, 44, 49, 44, 49, 44, 49, 50, > 56, 32, 45, 101, 110, 100, 105, 102, 10, 49, 49, 56, 44, 53, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 50, 44, 49, 44, > 50, 53, 44, 49, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 116, 111, 95, 99, 111, > 108, 111, 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, > 44, 115, 125, 10, 40, 49, 46, 53, 44, 48, 44, 49, 46, 53, 59, 48, > 44, 48, 44, 48, 59, 49, 46, 53, 44, 48, 44, 49, 46, 53, 41, 32, > 45, 114, 91, 45, 49, 93, 32, 91, 45, 51, 93, 44, 51, 32, 45, 42, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 99, 91, 45, 50, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 111, 114, 10, 45, 115, 107, 105, 112, 32, 34, > 36, 42, 34, 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 118, 101, > 114, 115, 105, 111, 110, 51, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, > 36, 123, 49, 61, 80, 108, 117, 103, 45, 105, 110, 32, 102, 111, 114, 32, > 71, 73, 77, 80, 125, 34, 10, 45, 114, 109, 32, 115, 61, 34, 71, 92, > 52, 55, 77, 73, 67, 34, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 110, 97, 114, 103, 40, 123, 39, 36, 115, 39, 125, 41, 125, 10, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 123, 96, 123, 97, 114, 103, 40, 49, 43, > 36, 62, 44, 123, 39, 36, 115, 39, 125, 41, 125, 96, 125, 44, 48, 44, > 48, 44, 53, 51, 44, 49, 44, 49, 32, 45, 102, 114, 97, 109, 101, 91, > 45, 49, 93, 32, 51, 44, 48, 44, 48, 10, 45, 114, 91, 45, 49, 93, > 32, 53, 48, 48, 37, 44, 53, 48, 48, 37, 44, 49, 44, 49, 44, 51, > 32, 45, 98, 91, 45, 49, 93, 32, 51, 37, 32, 45, 103, 101, 91, 45, > 49, 93, 32, 53, 48, 37, 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, > 91, 45, 49, 93, 32, 49, 32, 45, 108, 101, 91, 45, 49, 93, 32, 49, > 48, 10, 91, 45, 49, 93, 120, 51, 32, 45, 119, 104, 105, 114, 108, 115, > 91, 45, 52, 45, 45, 50, 93, 32, 44, 10, 114, 36, 62, 61, 123, 63, > 40, 48, 46, 52, 44, 49, 41, 125, 32, 103, 36, 62, 61, 123, 63, 40, > 48, 46, 50, 44, 49, 41, 125, 32, 98, 36, 62, 61, 123, 63, 40, 48, > 46, 54, 44, 49, 41, 125, 10, 45, 42, 91, 45, 52, 93, 32, 36, 123, > 114, 36, 62, 125, 32, 45, 42, 91, 45, 51, 93, 32, 36, 123, 103, 36, > 62, 125, 32, 45, 42, 91, 45, 50, 93, 32, 36, 123, 98, 36, 62, 125, > 10, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 32, 45, 110, 91, > 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 45, 100, 111, 110, 101, 10, 45, 97, 91, 45, 53, 45, 45, 49, 93, > 32, 120, 10, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 50, 48, 37, 44, 49, 44, 52, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 49, 10, 45, 98, 97, 108, 108, 32, 54, 52, 44, 123, 50, 53, 53, 42, > 36, 114, 51, 125, 44, 123, 50, 53, 53, 42, 36, 103, 51, 125, 44, 123, > 50, 53, 53, 42, 36, 98, 51, 125, 32, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 52, 53, 48, 44, 53, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, > 32, 55, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 91, 45, 49, 93, 10, 45, 100, 114, 111, 112, 95, 115, > 104, 97, 100, 111, 119, 91, 45, 49, 93, 32, 49, 48, 44, 49, 48, 44, > 49, 37, 44, 48, 46, 53, 10, 48, 32, 45, 116, 91, 45, 49, 93, 32, > 34, 36, 49, 34, 44, 48, 44, 48, 44, 53, 51, 44, 49, 44, 50, 53, > 53, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 52, 44, 52, > 44, 48, 32, 91, 45, 49, 93, 120, 51, 32, 45, 100, 105, 108, 97, 116, > 101, 91, 45, 49, 93, 32, 55, 32, 45, 97, 91, 45, 52, 45, 45, 49, > 93, 32, 99, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 44, > 48, 46, 53, 10, 45, 114, 50, 100, 121, 91, 45, 49, 93, 32, 53, 48, > 37, 10, 45, 105, 91, 45, 50, 93, 32, 49, 50, 48, 37, 44, 49, 50, > 48, 37, 44, 49, 44, 51, 44, 50, 53, 53, 32, 45, 112, 108, 97, 115, > 109, 97, 91, 45, 50, 93, 32, 49, 44, 49, 32, 45, 115, 91, 45, 50, > 93, 32, 99, 10, 45, 110, 91, 45, 52, 93, 32, 49, 53, 48, 44, 50, > 53, 53, 32, 45, 110, 91, 45, 51, 93, 32, 49, 56, 48, 44, 50, 53, > 53, 32, 45, 110, 91, 45, 50, 93, 32, 50, 48, 48, 44, 50, 53, 53, > 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 10, 45, 98, 108, > 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, > 10, 45, 102, 114, 97, 109, 101, 32, 48, 44, 49, 44, 48, 44, 48, 44, > 48, 32, 45, 102, 114, 97, 109, 101, 32, 48, 44, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 50, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 123, 49, 61, 80, 108, 117, 103, 45, 105, 110, > 32, 102, 111, 114, 32, 71, 73, 77, 80, 125, 34, 10, 45, 105, 102, 32, > 64, 35, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 116, 111, 95, 114, 103, 98, 32, 48, 32, 45, 116, 91, 45, 49, 93, > 32, 34, 71, 92, 52, 55, 77, 73, 67, 34, 44, 48, 44, 48, 44, 53, > 51, 44, 49, 44, 49, 32, 45, 108, 97, 98, 101, 108, 91, 45, 49, 93, > 10, 54, 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, > 49, 93, 32, 49, 53, 48, 44, 50, 53, 53, 32, 45, 112, 111, 105, 110, > 116, 91, 45, 49, 93, 32, 48, 32, 45, 109, 97, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, > 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 49, 48, 44, > 48, 32, 45, 98, 91, 45, 49, 93, 32, 50, 32, 45, 114, 91, 45, 49, > 93, 32, 50, 48, 48, 37, 44, 50, 48, 48, 37, 44, 49, 44, 51, 44, > 54, 32, 45, 115, 113, 114, 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 54, 48, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 119, 97, 114, 112, 95, 112, 101, 114, 115, 112, > 101, 99, 116, 105, 118, 101, 91, 45, 49, 93, 32, 48, 46, 53, 44, 48, > 44, 49, 44, 53, 48, 44, 53, 48, 44, 48, 32, 45, 115, 104, 105, 102, > 116, 91, 45, 49, 93, 32, 48, 44, 45, 49, 48, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 110, 111, 105, 115, 101, 91, 45, 49, 93, > 32, 48, 46, 56, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 49, 56, > 48, 32, 45, 45, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 91, > 45, 49, 93, 32, 50, 48, 44, 48, 44, 52, 53, 44, 48, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 48, 32, 45, 109, 97, 120, 91, 45, 51, 45, > 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, > 40, 48, 59, 49, 50, 56, 41, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 44, 51, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 109, 105, 110, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 34, 36, 49, 34, 44, 51, 50, 37, 44, > 55, 53, 37, 44, 49, 51, 44, 51, 44, 49, 44, 50, 53, 53, 32, 45, > 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 49, 50, > 56, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 10, 45, 105, 102, 32, > 123, 64, 35, 62, 49, 125, 32, 45, 42, 91, 94, 48, 93, 32, 48, 46, > 52, 53, 32, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, 123, 40, 119, > 45, 64, 123, 48, 44, 119, 125, 41, 47, 50, 125, 44, 123, 40, 104, 45, > 64, 123, 48, 44, 104, 125, 41, 47, 50, 125, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 49, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 34, 36, 123, 49, 61, 80, 108, 117, 103, 45, 105, 110, > 32, 102, 111, 114, 32, 71, 73, 77, 80, 125, 34, 10, 45, 105, 102, 32, > 64, 35, 32, 114, 97, 116, 105, 111, 61, 123, 119, 47, 104, 125, 32, 45, > 101, 108, 115, 101, 32, 114, 97, 116, 105, 111, 61, 49, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 109, 32, 49, 49, 56, 44, 52, 52, 44, 49, > 44, 49, 32, 45, 116, 32, 34, 71, 92, 52, 55, 77, 73, 67, 34, 44, > 51, 44, 45, 54, 44, 53, 51, 44, 49, 44, 50, 53, 53, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 44, 49, 32, > 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 50, 48, 44, > 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 98, 32, 49, 46, 53, 10, 45, 105, 115, 111, 115, 117, 114, > 102, 97, 99, 101, 51, 100, 32, 53, 48, 37, 10, 45, 99, 111, 108, 51, > 100, 32, 123, 63, 40, 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, > 63, 40, 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 49, > 53, 48, 44, 50, 53, 53, 41, 125, 10, 45, 115, 112, 104, 101, 114, 101, > 51, 100, 32, 56, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, > 123, 63, 40, 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, > 49, 53, 48, 44, 50, 53, 53, 41, 125, 44, 123, 63, 40, 49, 53, 48, > 44, 50, 53, 53, 41, 125, 32, 45, 43, 51, 100, 91, 45, 49, 93, 32, > 55, 50, 44, 45, 54, 32, 45, 43, 51, 100, 32, 45, 99, 51, 100, 91, > 45, 49, 93, 32, 45, 114, 118, 51, 100, 10, 45, 100, 98, 51, 100, 32, > 48, 32, 45, 115, 108, 51, 100, 32, 48, 46, 50, 32, 45, 115, 115, 51, > 100, 32, 49, 46, 51, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, > 44, 48, 44, 48, 44, 51, 48, 32, 45, 102, 51, 100, 32, 49, 50, 48, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 49, 46, 53, 10, 50, 51, > 48, 44, 49, 50, 48, 44, 49, 44, 51, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, > 44, 51, 48, 37, 44, 48, 44, 49, 44, 52, 32, 45, 114, 109, 91, 45, > 50, 93, 32, 45, 116, 32, 34, 36, 49, 34, 44, 51, 54, 37, 44, 55, > 53, 37, 44, 49, 51, 44, 49, 44, 50, 53, 53, 10, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 100, 114, 111, 112, 95, > 115, 104, 97, 100, 111, 119, 32, 54, 44, 54, 44, 50, 10, 45, 105, 91, > 45, 50, 93, 32, 64, 123, 45, 102, 105, 116, 114, 97, 116, 105, 111, 95, > 119, 104, 92, 32, 50, 51, 48, 44, 49, 50, 48, 44, 36, 114, 97, 116, > 105, 111, 125, 44, 49, 44, 51, 10, 45, 114, 97, 110, 100, 91, 45, 50, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 115, 104, 91, 45, 50, 93, 32, > 48, 44, 48, 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 98, 108, 117, 114, 95, 114, 97, 100, 105, 97, > 108, 91, 45, 50, 93, 32, 49, 48, 32, 45, 115, 104, 97, 114, 112, 101, > 110, 91, 45, 50, 93, 32, 54, 48, 48, 10, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 52, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 98, 108, 101, 110, > 100, 32, 97, 108, 112, 104, 97, 10, 103, 105, 109, 112, 95, 108, 111, 103, > 111, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 80, > 108, 117, 103, 45, 105, 110, 32, 102, 111, 114, 32, 71, 73, 77, 80, 92, > 110, 32, 32, 32, 32, 91, 32, 34, 64, 123, 45, 115, 116, 114, 118, 101, > 114, 125, 34, 32, 93, 125, 34, 10, 45, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, > 36, 49, 34, 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 101, 110, > 32, 58, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, > 109, 105, 99, 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 10, 45, 103, > 105, 109, 112, 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, > 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, > 57, 41, 41, 125, 32, 34, 80, 108, 117, 103, 45, 105, 110, 32, 102, 111, > 114, 32, 71, 73, 77, 80, 92, 110, 32, 34, 91, 34, 32, 34, 64, 123, > 45, 115, 116, 114, 118, 101, 114, 125, 34, 32, 98, 101, 116, 97, 32, 34, > 93, 10, 45, 101, 108, 115, 101, 10, 45, 103, 105, 109, 112, 95, 108, 111, > 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, > 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, > 80, 108, 117, 103, 45, 105, 110, 32, 102, 111, 114, 32, 71, 73, 77, 80, > 92, 110, 32, 32, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, 116, > 114, 118, 101, 114, 125, 34, 32, 34, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 102, 114, 32, 58, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, > 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 10, 45, 103, 105, 109, 112, > 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, > 125, 32, 34, 71, 114, 101, 102, 102, 111, 110, 32, 112, 111, 117, 114, 32, > 71, 73, 77, 80, 92, 110, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, > 115, 116, 114, 118, 101, 114, 125, 34, 32, 98, 101, 116, 97, 32, 34, 93, > 10, 45, 101, 108, 115, 101, 10, 45, 103, 105, 109, 112, 95, 108, 111, 103, > 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, 40, > 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, 71, > 114, 101, 102, 102, 111, 110, 32, 112, 111, 117, 114, 32, 71, 73, 77, 80, > 92, 110, 32, 32, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, 116, > 114, 118, 101, 114, 125, 34, 32, 34, 93, 10, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 99, 97, 32, 58, 10, > 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, 36, 95, 103, 109, 105, 99, > 95, 105, 115, 95, 98, 101, 116, 97, 41, 125, 10, 45, 103, 105, 109, 112, > 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, > 125, 32, 34, 32, 32, 112, 101, 114, 32, 97, 108, 32, 71, 73, 77, 80, > 92, 110, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, 116, 114, 118, > 101, 114, 125, 34, 32, 98, 101, 116, 97, 32, 34, 93, 10, 45, 101, 108, > 115, 101, 10, 45, 103, 105, 109, 112, 95, 108, 111, 103, 111, 95, 118, 101, > 114, 115, 105, 111, 110, 123, 114, 111, 117, 110, 100, 40, 63, 40, 48, 46, > 53, 44, 51, 46, 52, 57, 41, 41, 125, 32, 34, 32, 32, 112, 101, 114, > 32, 97, 108, 32, 71, 73, 77, 80, 92, 110, 32, 32, 32, 32, 34, 91, > 34, 32, 34, 64, 123, 45, 115, 116, 114, 118, 101, 114, 125, 34, 32, 34, > 93, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 100, 105, > 115, 112, 108, 97, 121, 95, 102, 105, 108, 116, 101, 114, 95, 115, 111, 117, > 114, 99, 101, 115, 32, 58, 10, 45, 105, 102, 32, 64, 35, 32, 45, 107, > 91, 48, 93, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 102, 32, 48, 32, 45, 101, 108, 115, 101, 32, 50, > 53, 54, 44, 50, 53, 54, 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, > 91, 93, 32, 45, 103, 105, 109, 112, 95, 102, 105, 108, 116, 101, 114, 95, > 115, 111, 117, 114, 99, 101, 115, 32, 45, 121, 32, 120, 32, 45, 97, 32, > 121, 32, 45, 111, 110, 102, 97, 105, 108, 32, 40, 48, 41, 32, 45, 101, > 110, 100, 108, 10, 45, 102, 91, 48, 93, 32, 54, 52, 10, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, 32, 34, 69, > 110, 97, 98, 108, 101, 100, 32, 101, 120, 116, 101, 114, 110, 97, 108, 32, > 115, 111, 117, 114, 99, 101, 115, 58, 92, 110, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, > 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 34, 44, 53, 44, > 53, 44, 49, 51, 44, 49, 44, 49, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 64, 123, 45, 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 125, 32, > 112, 97, 116, 104, 61, 64, 123, 45, 112, 97, 116, 104, 95, 117, 115, 101, > 114, 125, 47, 32, 45, 101, 108, 115, 101, 32, 112, 97, 116, 104, 61, 64, > 123, 45, 112, 97, 116, 104, 95, 117, 115, 101, 114, 125, 47, 46, 32, 45, > 101, 110, 100, 105, 102, 10, 105, 61, 49, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 104, 125, 10, 45, 45, 114, 111, 119, 115, 91, 45, 49, 93, > 32, 36, 62, 10, 45, 105, 102, 32, 123, 64, 123, 45, 49, 44, 48, 45, > 51, 125, 39, 61, 61, 39, 123, 39, 104, 116, 116, 112, 39, 125, 125, 32, > 45, 114, 101, 112, 108, 97, 99, 101, 91, 45, 49, 93, 32, 49, 44, 51, > 50, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, > 48, 93, 32, 91, 36, 105, 93, 34, 32, 34, 64, 123, 45, 49, 44, 116, > 125, 44, 53, 44, 123, 51, 50, 43, 49, 53, 42, 36, 105, 125, 44, 49, > 51, 44, 49, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 32, > 105, 61, 123, 36, 105, 43, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 36, 112, 97, 116, 104, 64, 123, 45, 49, 44, 116, 125, 32, > 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, > 32, 91, 36, 105, 93, 34, 32, 34, 64, 123, 45, 49, 44, 116, 125, 34, > 32, 40, 108, 111, 99, 97, 108, 32, 102, 105, 108, 101, 41, 34, 44, 53, > 44, 123, 51, 50, 43, 49, 53, 42, 36, 105, 125, 44, 49, 51, 44, 49, > 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 32, 105, 61, 123, 36, 105, > 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, > 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 102, 114, 105, > 101, 110, 100, 115, 32, 58, 10, 45, 105, 102, 32, 64, 35, 32, 114, 97, > 116, 105, 111, 61, 123, 119, 47, 104, 125, 32, 45, 101, 108, 115, 101, 32, > 114, 97, 116, 105, 111, 61, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 32, 45, 95, 104, 101, 97, 114, 116, 56, 48, 120, 55, 51, 32, > 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 114, 32, 49, 53, 48, 37, > 44, 49, 53, 48, 37, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 10, 45, 45, 42, 91, 45, 49, 93, 32, 55, 48, > 32, 45, 45, 42, 91, 45, 50, 93, 32, 49, 49, 48, 32, 45, 45, 42, > 91, 45, 51, 93, 32, 50, 53, 53, 32, 45, 42, 91, 45, 52, 93, 32, > 50, 53, 53, 32, 45, 97, 32, 99, 10, 45, 98, 108, 117, 114, 95, 114, > 97, 100, 105, 97, 108, 32, 52, 32, 45, 115, 104, 97, 114, 112, 101, 110, > 32, 51, 48, 48, 10, 45, 105, 91, 45, 50, 93, 32, 64, 123, 45, 102, > 105, 116, 114, 97, 116, 105, 111, 95, 119, 104, 92, 32, 123, 119, 125, 44, > 123, 104, 125, 44, 36, 114, 97, 116, 105, 111, 125, 44, 49, 44, 51, 10, > 45, 114, 97, 110, 100, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, > 45, 115, 104, 91, 45, 50, 93, 32, 49, 44, 50, 32, 45, 47, 91, 45, > 49, 93, 32, 50, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, > 117, 114, 95, 114, 97, 100, 105, 97, 108, 91, 45, 50, 93, 32, 49, 48, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 50, 93, 32, 54, 48, > 48, 10, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, > 50, 93, 44, 49, 44, 52, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, > 46, 53, 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, > 49, 49, 51, 44, 54, 55, 44, 49, 44, 49, 44, 48, 32, 45, 116, 91, > 45, 49, 93, 32, 34, 71, 114, 101, 101, 116, 105, 110, 103, 115, 32, 116, > 111, 92, 110, 32, 32, 97, 108, 108, 32, 71, 92, 52, 55, 77, 73, 67, > 92, 110, 32, 32, 102, 114, 105, 101, 110, 100, 115, 33, 34, 44, 50, 44, > 45, 50, 44, 50, 51, 44, 49, 44, 49, 10, 45, 45, 100, 105, 108, 97, > 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 42, 91, 45, 50, 93, 32, > 50, 53, 53, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 50, 93, 32, > 45, 106, 91, 45, 51, 93, 32, 91, 45, 50, 93, 44, 123, 40, 64, 123, > 45, 51, 44, 119, 125, 45, 64, 123, 45, 50, 44, 119, 125, 41, 47, 50, > 125, 44, 123, 40, 64, 123, 45, 51, 44, 104, 125, 45, 64, 123, 45, 50, > 44, 104, 125, 41, 47, 50, 46, 50, 125, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, > 95, 104, 101, 97, 114, 116, 56, 48, 120, 55, 51, 32, 58, 10, 52, 48, > 44, 55, 51, 44, 49, 44, 49, 44, 48, 32, 45, 101, 108, 108, 105, 112, > 115, 101, 32, 50, 50, 44, 50, 50, 44, 50, 48, 44, 50, 48, 44, 48, > 44, 49, 44, 49, 32, 45, 112, 111, 108, 121, 103, 111, 110, 32, 51, 44, > 55, 44, 51, 55, 44, 52, 50, 44, 55, 50, 44, 52, 50, 44, 50, 55, > 44, 49, 44, 49, 32, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, > 45, 97, 32, 120, 10, 103, 105, 109, 112, 95, 103, 109, 105, 99, 107, 121, > 32, 58, 10, 45, 114, 109, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 48, 125, 32, 45, 103, 109, 105, 99, 107, 121, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 103, 109, 105, 99, 107, 121, > 95, 119, 105, 108, 98, 101, 114, 10, 45, 101, 108, 115, 101, 32, 45, 114, > 111, 100, 100, 121, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 103, 109, 105, 99, 107, 121, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, > 109, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 10, 102, 105, > 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, 95, 116, > 109, 112, 125, 47, 103, 109, 105, 99, 107, 121, 95, 115, 109, 97, 108, 108, > 46, 99, 105, 109, 103, 122, 10, 117, 114, 108, 61, 104, 116, 116, 112, 58, > 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, > 103, 101, 46, 110, 101, 116, 47, 105, 109, 103, 47, 103, 109, 105, 99, 107, > 121, 95, 115, 109, 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, > 125, 47, 103, 109, 105, 99, 107, 121, 95, 119, 105, 108, 98, 101, 114, 95, > 115, 109, 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 117, 114, 108, 61, > 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, > 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, 47, 105, 109, 103, 47, > 103, 109, 105, 99, 107, 121, 95, 119, 105, 108, 98, 101, 114, 95, 115, 109, > 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, 101, 10, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 116, 109, 112, 125, 47, 114, 111, 100, 100, 121, 95, 115, 109, 97, 108, > 108, 46, 99, 105, 109, 103, 122, 10, 117, 114, 108, 61, 104, 116, 116, 112, > 58, 47, 47, 103, 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, > 114, 103, 101, 46, 110, 101, 116, 47, 105, 109, 103, 47, 114, 111, 100, 100, > 121, 95, 115, 109, 97, 108, 108, 46, 99, 105, 109, 103, 122, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, > 109, 101, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, > 115, 101, 32, 45, 105, 32, 36, 117, 114, 108, 32, 45, 111, 32, 36, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 50, 100, 121, 32, 36, 104, 32, 45, 45, 32, 50, 53, 53, 32, 45, > 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 51, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 43, 32, 50, 53, 53, 10, 103, > 105, 109, 112, 95, 97, 114, 114, 97, 121, 95, 102, 97, 100, 101, 32, 58, > 10, 45, 105, 102, 32, 123, 36, 55, 38, 49, 125, 32, 45, 109, 105, 114, > 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, 32, 45, 105, 102, > 32, 123, 36, 55, 62, 49, 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, > 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 114, 114, 97, 121, 95, > 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 44, 36, 53, 44, 36, 54, > 44, 36, 56, 10, 45, 115, 104, 105, 102, 116, 32, 45, 36, 51, 37, 44, > 45, 36, 52, 37, 44, 48, 44, 48, 44, 50, 10, 103, 105, 109, 112, 95, > 97, 114, 114, 97, 121, 95, 102, 97, 100, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, > 95, 102, 97, 100, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 48, 10, 103, 105, 109, > 112, 95, 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, 111, 114, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 55, 61, 48, 125, 10, 45, 105, > 102, 32, 123, 36, 53, 61, 61, 49, 125, 32, 45, 109, 105, 114, 114, 111, > 114, 32, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 50, > 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, 121, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 53, 61, 61, 51, 125, 32, 45, 114, 111, 116, 97, 116, > 101, 32, 57, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, > 52, 125, 32, 45, 114, 111, 116, 97, 116, 101, 32, 49, 56, 48, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 53, 125, 32, 45, 114, 111, > 116, 97, 116, 101, 32, 50, 55, 48, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 36, 55, 10, 45, 105, 102, 32, 123, 36, 52, 61, 61, > 48, 125, 32, 45, 99, 111, 108, 117, 109, 110, 115, 32, 48, 44, 123, 49, > 48, 48, 45, 36, 55, 125, 37, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 52, 61, 61, 49, 125, 32, 45, 114, 111, 119, 115, 32, 48, 44, 123, 49, > 48, 48, 45, 36, 55, 125, 37, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 52, 61, 61, 50, 125, 32, 45, 122, 32, 48, 44, 48, 44, 123, 49, 48, > 48, 45, 36, 55, 125, 37, 44, 123, 49, 48, 48, 45, 36, 55, 125, 37, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 61, 61, 51, 125, 32, 45, > 122, 32, 123, 36, 55, 47, 50, 125, 37, 44, 123, 36, 55, 47, 50, 125, > 37, 44, 123, 49, 48, 48, 45, 36, 55, 47, 50, 125, 37, 44, 123, 49, > 48, 48, 45, 36, 55, 47, 50, 125, 37, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 115, 104, 105, 102, 116, 32, 45, > 36, 50, 37, 44, 45, 36, 51, 37, 44, 48, 44, 48, 44, 50, 10, 45, > 97, 114, 114, 97, 121, 95, 109, 105, 114, 114, 111, 114, 32, 36, 49, 44, > 36, 52, 44, 36, 54, 10, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, > 95, 109, 105, 114, 114, 111, 114, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, 95, 109, 105, > 114, 114, 111, 114, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, > 44, 36, 53, 44, 48, 44, 36, 55, 10, 103, 105, 109, 112, 95, 97, 114, > 114, 97, 121, 95, 99, 111, 108, 111, 114, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 10, 36, 49, > 44, 36, 50, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 99, 111, 108, 111, > 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 115, > 125, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 42, > 91, 45, 49, 93, 32, 36, 51, 32, 45, 42, 91, 45, 50, 93, 32, 123, > 49, 45, 36, 51, 125, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, > 32, 58, 10, 45, 115, 104, 105, 102, 116, 32, 45, 36, 51, 37, 44, 45, > 36, 52, 37, 44, 48, 44, 48, 44, 50, 10, 45, 105, 102, 32, 123, 36, > 53, 38, 49, 125, 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, > 101, 110, 100, 105, 102, 32, 45, 105, 102, 32, 123, 36, 53, 62, 49, 125, > 32, 45, 109, 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 97, 114, 114, 97, 121, 32, 36, 49, 44, 36, 50, 44, 36, > 54, 10, 103, 105, 109, 112, 95, 97, 114, 114, 97, 121, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 114, 114, > 97, 121, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, > 53, 44, 48, 10, 103, 105, 109, 112, 95, 97, 115, 99, 105, 105, 97, 114, > 116, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 97, > 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 123, 49, 48, 94, 36, > 55, 125, 32, 45, 98, 32, 36, 56, 37, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 100, > 105, 99, 116, 61, 34, 36, 50, 34, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 49, 125, 32, 100, 105, 99, 116, 61, 34, 32, 48, 49, > 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, > 100, 105, 99, 116, 61, 34, 32, 48, 49, 50, 51, 52, 53, 54, 55, 56, > 57, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, > 32, 100, 105, 99, 116, 61, 34, 32, 97, 98, 99, 100, 101, 102, 103, 104, > 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, > 121, 122, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 52, > 125, 32, 100, 105, 99, 116, 61, 34, 32, 65, 66, 67, 68, 69, 70, 71, > 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, > 88, 89, 90, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 53, 125, 32, 100, 105, 99, 116, 61, 34, 32, 33, 92, 48, 52, 50, 92, > 35, 36, 37, 38, 92, 48, 52, 55, 40, 41, 42, 43, 44, 45, 46, 47, > 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, > 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, > 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 49, 51, 51, 92, > 92, 92, 49, 51, 53, 94, 95, 92, 49, 52, 48, 97, 98, 99, 100, 101, > 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, > 118, 119, 120, 121, 122, 92, 49, 55, 51, 124, 92, 49, 55, 52, 126, 34, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 54, 125, 32, 100, > 105, 99, 116, 61, 34, 32, 92, 49, 54, 92, 49, 55, 92, 50, 48, 92, > 50, 49, 34, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 55, > 125, 32, 100, 105, 99, 116, 61, 34, 32, 92, 50, 48, 48, 92, 50, 48, > 49, 92, 50, 48, 50, 92, 50, 48, 51, 92, 50, 48, 52, 92, 50, 48, > 53, 92, 50, 48, 54, 92, 50, 48, 55, 92, 50, 49, 48, 92, 50, 49, > 49, 92, 50, 49, 50, 92, 50, 49, 51, 92, 50, 49, 52, 92, 50, 49, > 53, 92, 50, 49, 54, 92, 50, 49, 55, 92, 50, 50, 48, 92, 50, 50, > 49, 92, 50, 50, 50, 92, 50, 50, 51, 92, 50, 50, 52, 92, 50, 50, > 53, 92, 50, 50, 54, 92, 50, 50, 55, 92, 50, 51, 48, 92, 50, 51, > 49, 34, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 54, 61, 61, 49, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 45, 51, 32, 45, > 45, 105, 109, 103, 50, 97, 115, 99, 105, 105, 32, 36, 100, 105, 99, 116, > 44, 36, 51, 44, 36, 52, 37, 44, 36, 53, 44, 34, 36, 45, 50, 34, > 47, 34, 36, 45, 49, 34, 10, 45, 101, 108, 115, 101, 32, 45, 45, 105, > 109, 103, 50, 97, 115, 99, 105, 105, 32, 36, 100, 105, 99, 116, 44, 36, > 51, 44, 36, 52, 37, 44, 36, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 119, 104, 61, 64, 123, 125, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, > 48, 125, 32, 45, 107, 91, 45, 49, 93, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 54, 61, 61, 49, 125, > 32, 45, 107, 91, 45, 49, 93, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 54, 61, 61, 50, 124, 124, 36, 54, 61, 61, 51, 125, 10, > 45, 114, 91, 48, 93, 32, 36, 119, 104, 44, 49, 44, 49, 48, 48, 37, > 44, 49, 10, 45, 105, 102, 32, 123, 36, 57, 62, 61, 55, 125, 32, 45, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 57, 37, 55, 125, 32, 45, > 113, 117, 97, 110, 116, 105, 122, 101, 91, 48, 93, 32, 123, 97, 114, 103, > 40, 36, 57, 37, 55, 44, 50, 44, 51, 44, 52, 44, 56, 44, 49, 50, > 44, 49, 54, 41, 45, 49, 125, 44, 49, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 91, 48, 93, 32, 91, 49, 93, 44, 91, 49, 93, > 44, 49, 44, 49, 48, 48, 37, 32, 45, 42, 91, 48, 93, 32, 91, 49, > 93, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 114, > 109, 91, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 42, 91, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 32, 99, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 97, 115, 99, 105, 105, 97, 114, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 103, 105, 109, 112, 95, > 97, 115, 99, 105, 105, 97, 114, 116, 32, 36, 49, 44, 34, 36, 50, 34, > 44, 36, 123, 51, 45, 45, 52, 125, 44, 48, 44, 102, 111, 111, 44, 102, > 111, 111, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, > 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 99, 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 58, 10, 45, 116, 111, > 95, 114, 103, 98, 97, 32, 45, 99, 104, 101, 115, 115, 98, 111, 97, 114, > 100, 32, 36, 123, 49, 45, 49, 52, 125, 10, 103, 105, 109, 112, 95, 99, > 104, 101, 115, 115, 98, 111, 97, 114, 100, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, > 104, 101, 115, 115, 98, 111, 97, 114, 100, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 100, 105, 99, 101, 115, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 54, 32, 123, 50, 42, 36, 50, 125, 44, > 123, 50, 42, 36, 50, 125, 32, 45, 95, 100, 105, 99, 101, 36, 62, 32, > 45, 100, 111, 110, 101, 10, 45, 105, 102, 32, 123, 36, 51, 37, 50, 125, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 54, 45, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 102, 114, 97, 109, 101, 95, > 114, 111, 117, 110, 100, 91, 45, 54, 45, 45, 49, 93, 32, 49, 48, 44, > 49, 48, 44, 48, 44, 48, 44, 49, 50, 56, 44, 49, 50, 56, 44, 49, > 50, 56, 44, 48, 10, 45, 114, 50, 100, 121, 91, 45, 54, 45, 45, 49, > 93, 32, 36, 50, 32, 45, 97, 91, 45, 54, 45, 45, 49, 93, 32, 120, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, > 45, 108, 91, 36, 62, 44, 45, 49, 93, 10, 45, 45, 108, 117, 109, 105, > 110, 97, 110, 99, 101, 91, 48, 93, 32, 45, 114, 118, 91, 49, 44, 50, > 93, 32, 45, 114, 91, 48, 44, 49, 93, 32, 123, 49, 48, 48, 42, 36, > 49, 47, 36, 50, 125, 37, 44, 123, 49, 48, 48, 42, 36, 49, 47, 36, > 50, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 113, 117, > 97, 110, 116, 105, 122, 101, 91, 49, 93, 32, 54, 44, 48, 10, 45, 42, > 91, 45, 50, 93, 32, 36, 50, 32, 45, 99, 104, 97, 110, 110, 101, 108, > 115, 91, 45, 50, 93, 32, 48, 44, 49, 32, 45, 114, 91, 45, 50, 93, > 32, 123, 36, 50, 42, 49, 48, 48, 125, 37, 44, 123, 36, 50, 42, 49, > 48, 48, 125, 37, 10, 36, 50, 44, 36, 50, 44, 49, 44, 50, 44, 39, > 105, 102, 40, 99, 44, 121, 44, 120, 41, 39, 32, 45, 114, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 44, 91, 45, 51, 93, 44, 49, 44, 50, 44, > 48, 44, 50, 32, 45, 43, 91, 45, 51, 44, 45, 49, 93, 32, 45, 45, > 119, 97, 114, 112, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 105, 102, 32, 123, 36, > 51, 60, 50, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 10, 45, 101, 108, 115, 101, 32, 45, 114, 91, 48, > 93, 32, 91, 50, 93, 44, 91, 50, 93, 44, 49, 44, 49, 48, 48, 37, > 32, 45, 114, 118, 91, 48, 44, 45, 49, 93, 32, 45, 98, 108, 101, 110, > 100, 91, 48, 44, 45, 49, 93, 32, 109, 117, 108, 116, 105, 112, 108, 121, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, 95, 100, 105, 99, > 101, 48, 32, 58, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 53, 48, 37, 44, 53, 48, 37, 44, 53, 46, 50, 37, 44, 53, > 46, 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 10, 95, 100, 105, 99, > 101, 49, 32, 58, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 50, 53, 37, 44, 50, 53, 37, 44, 53, 46, 50, 37, 44, 53, > 46, 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 55, 53, 37, 44, 55, 53, 37, > 44, 53, 46, 50, 37, 44, 53, 46, 50, 37, 44, 48, 44, 49, 44, 50, > 53, 53, 10, 95, 100, 105, 99, 101, 50, 32, 58, 32, 45, 95, 100, 105, > 99, 101, 49, 32, 45, 95, 100, 105, 99, 101, 48, 10, 95, 100, 105, 99, > 101, 51, 32, 58, 32, 45, 95, 100, 105, 99, 101, 49, 32, 45, 101, 108, > 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 50, 53, 37, 44, 55, 53, > 37, 44, 53, 46, 50, 37, 44, 53, 46, 50, 37, 44, 48, 44, 49, 44, > 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, > 32, 55, 53, 37, 44, 50, 53, 37, 44, 53, 46, 50, 37, 44, 53, 46, > 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 10, 95, 100, 105, 99, 101, > 52, 32, 58, 32, 45, 95, 100, 105, 99, 101, 51, 32, 45, 95, 100, 105, > 99, 101, 48, 10, 95, 100, 105, 99, 101, 53, 32, 58, 32, 45, 95, 100, > 105, 99, 101, 51, 32, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, > 93, 32, 50, 53, 37, 44, 53, 48, 37, 44, 53, 46, 50, 37, 44, 53, > 46, 50, 37, 44, 48, 44, 49, 44, 50, 53, 53, 32, 45, 101, 108, 108, > 105, 112, 115, 101, 91, 45, 49, 93, 32, 55, 53, 37, 44, 53, 48, 37, > 44, 53, 46, 50, 37, 44, 53, 46, 50, 37, 44, 48, 44, 49, 44, 50, > 53, 53, 10, 103, 105, 109, 112, 95, 101, 120, 116, 114, 97, 99, 116, 95, > 111, 98, 106, 101, 99, 116, 115, 32, 58, 10, 45, 105, 102, 32, 36, 53, > 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, 36, 53, 37, 32, 45, 101, > 108, 115, 101, 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, 53, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 60, 93, 32, 45, 116, 111, 95, 114, 103, 98, 97, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 120, 61, 123, > 36, 49, 37, 42, 40, 119, 45, 49, 41, 125, 10, 121, 61, 123, 36, 50, > 37, 42, 40, 104, 45, 49, 41, 125, 10, 99, 111, 108, 111, 114, 61, 64, > 123, 45, 97, 116, 92, 32, 36, 120, 44, 36, 121, 125, 10, 45, 105, 102, > 32, 123, 36, 55, 61, 61, 48, 125, 10, 45, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 99, 111, 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, > 111, 108, 111, 114, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 97, 117, > 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, > 115, 91, 45, 49, 93, 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, > 114, 101, 97, 44, 36, 54, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 123, 119, 125, 32, 45, 45, 122, 91, 48, 93, 32, 64, 123, 49, 44, > 105, 40, 36, 62, 44, 48, 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, > 62, 44, 49, 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 51, > 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 52, 41, 125, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 44, 49, 93, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 10, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 36, 51, 44, 48, > 44, 36, 99, 111, 108, 111, 114, 44, 48, 44, 48, 44, 48, 44, 48, 32, > 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, > 101, 110, 116, 115, 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, 114, > 101, 97, 44, 36, 54, 44, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 55, 61, 61, 50, 125, 10, 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 99, 111, 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, 111, 108, 111, > 114, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 91, 45, > 49, 93, 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, 114, 101, 97, > 44, 36, 54, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, > 125, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 52, 32, 45, 45, > 122, 91, 48, 93, 32, 64, 123, 49, 44, 105, 40, 36, 62, 44, 48, 41, > 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 49, 41, 125, 44, 64, > 123, 49, 44, 105, 40, 36, 62, 44, 51, 41, 125, 44, 64, 123, 49, 44, > 105, 40, 36, 62, 44, 52, 41, 125, 32, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 48, 41, > 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 49, 41, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, > 91, 48, 44, 49, 93, 10, 36, 119, 44, 36, 104, 44, 49, 44, 52, 32, > 45, 102, 99, 91, 45, 49, 93, 32, 36, 99, 111, 108, 111, 114, 10, 45, > 101, 108, 115, 101, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, 111, 108, 111, 114, 44, > 48, 44, 48, 44, 48, 44, 48, 32, 45, 45, 97, 117, 116, 111, 99, 114, > 111, 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, 36, 52, > 37, 44, 36, 109, 105, 110, 95, 97, 114, 101, 97, 44, 36, 54, 44, 50, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 109, 112, 111, > 110, 101, 110, 116, 115, 91, 48, 93, 32, 36, 52, 37, 44, 36, 109, 105, > 110, 95, 97, 114, 101, 97, 44, 36, 54, 44, 49, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 119, 125, 32, 120, 61, 123, 105, 40, 36, 62, 44, > 48, 41, 125, 32, 121, 61, 123, 105, 40, 36, 62, 44, 49, 41, 125, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 105, 91, 48, 93, 32, 36, 119, 44, > 36, 104, 44, 49, 44, 52, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, > 44, 36, 120, 44, 36, 121, 32, 45, 114, 109, 91, 49, 93, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 36, 119, 44, 36, 104, 44, 49, 44, 52, 32, 45, 102, 99, 91, > 45, 49, 93, 32, 36, 99, 111, 108, 111, 114, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 101, 120, 116, 114, 97, 99, 116, 95, 111, 98, 106, 101, 99, > 116, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, > 32, 36, 53, 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, 36, 53, 37, > 32, 45, 101, 108, 115, 101, 32, 109, 105, 110, 95, 97, 114, 101, 97, 61, > 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, > 103, 98, 97, 10, 120, 61, 123, 36, 49, 37, 42, 40, 119, 45, 49, 41, > 125, 10, 121, 61, 123, 36, 50, 37, 42, 40, 104, 45, 49, 41, 125, 10, > 99, 111, 108, 111, 114, 61, 64, 123, 45, 97, 116, 92, 32, 36, 120, 44, > 36, 121, 125, 10, 45, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 36, 51, 44, 48, 44, 36, 99, 111, 108, 111, 114, 44, > 48, 44, 48, 44, 48, 44, 48, 10, 45, 97, 117, 116, 111, 99, 114, 111, > 112, 95, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 91, 45, 49, 93, > 32, 36, 52, 37, 44, 36, 109, 105, 110, 95, 97, 114, 101, 97, 44, 36, > 54, 44, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 119, 125, 10, > 120, 121, 99, 111, 111, 114, 100, 115, 61, 64, 123, 49, 44, 105, 40, 36, > 62, 44, 48, 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 49, > 41, 125, 44, 64, 123, 49, 44, 105, 40, 36, 62, 44, 51, 41, 125, 44, > 64, 123, 49, 44, 105, 40, 36, 62, 44, 52, 41, 125, 10, 45, 114, 101, > 99, 116, 97, 110, 103, 108, 101, 91, 48, 93, 32, 36, 120, 121, 99, 111, > 111, 114, 100, 115, 44, 48, 46, 51, 44, 48, 44, 48, 44, 50, 53, 53, > 44, 50, 53, 53, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 91, > 48, 93, 32, 36, 120, 121, 99, 111, 111, 114, 100, 115, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 10, 45, 100, 111, 110, 101, 10, 45, 100, 114, 103, 98, 97, > 91, 48, 93, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, > 101, 91, 48, 93, 32, 123, 119, 125, 34, 32, 111, 98, 106, 101, 99, 116, > 115, 34, 44, 50, 44, 50, 44, 49, 51, 44, 50, 44, 48, 46, 51, 44, > 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, > 45, 107, 91, 48, 93, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 120, > 44, 36, 121, 44, 51, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 120, 44, 36, 121, 44, 51, 44, > 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 103, 114, 105, 100, 32, 58, 10, 45, 105, 109, 97, > 103, 101, 103, 114, 105, 100, 32, 36, 49, 44, 36, 50, 10, 103, 105, 109, > 112, 95, 109, 111, 110, 116, 97, 103, 101, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 34, 36, 123, 50, 61, 65, 125, 34, 10, 99, 111, 100, 101, 48, > 61, 34, 36, 50, 34, 32, 99, 111, 100, 101, 49, 61, 72, 32, 99, 111, > 100, 101, 50, 61, 86, 32, 99, 111, 100, 101, 51, 61, 65, 32, 99, 111, > 100, 101, 52, 61, 66, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, 49, > 38, 38, 36, 52, 60, 48, 46, 53, 125, 32, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, 44, 123, > 109, 97, 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, > 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 102, 32, 123, 36, > 49, 51, 37, 64, 35, 125, 32, 45, 109, 118, 91, 123, 36, 49, 51, 37, > 64, 35, 125, 45, 45, 49, 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 49, 124, 124, 36, 49, 50, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 111, 116, 97, > 116, 101, 91, 36, 62, 93, 32, 123, 36, 49, 49, 43, 63, 40, 45, 36, > 49, 50, 44, 36, 49, 50, 41, 125, 44, 49, 44, 48, 32, 45, 100, 111, > 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 111, 110, 116, 97, > 103, 101, 32, 36, 123, 99, 111, 100, 101, 36, 49, 125, 44, 123, 105, 102, > 40, 36, 51, 61, 61, 48, 44, 36, 52, 44, 50, 43, 109, 97, 120, 40, > 48, 44, 36, 52, 45, 48, 46, 53, 41, 41, 125, 44, 36, 49, 52, 44, > 92, 10, 34, 45, 105, 102, 32, 123, 36, 34, 34, 55, 37, 50, 125, 32, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 105, 102, 32, 123, 36, 34, 34, 56, 37, 50, 125, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, 32, 34, > 92, 10, 34, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 36, > 34, 34, 54, 125, 32, 34, 92, 10, 34, 45, 105, 102, 32, 123, 36, 53, > 124, 124, 36, 54, 125, 32, 34, 92, 10, 34, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 44, 36, 34, 34, 52, 45, 50, 42, 40, 36, 53, 43, 36, > 54, 41, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 36, 34, 34, 53, > 45, 50, 42, 40, 36, 53, 43, 36, 54, 41, 41, 125, 44, 49, 44, 49, > 48, 48, 37, 44, 50, 32, 34, 92, 10, 34, 45, 102, 114, 97, 109, 101, > 32, 36, 54, 44, 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 32, 34, > 92, 10, 34, 45, 114, 32, 123, 119, 43, 50, 42, 36, 53, 125, 44, 123, > 104, 43, 50, 42, 36, 53, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 34, 92, 10, 34, 45, > 101, 108, 115, 101, 32, 45, 114, 32, 36, 34, 34, 52, 44, 36, 34, 34, > 53, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, > 102, 32, 34, 10, 103, 105, 109, 112, 95, 109, 111, 110, 116, 97, 103, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, 105, 112, > 32, 34, 36, 123, 50, 61, 65, 125, 34, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, 49, > 38, 38, 36, 52, 60, 48, 46, 53, 125, 32, 45, 114, 32, 123, 109, 97, > 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, 44, 123, > 109, 97, 120, 40, 49, 48, 44, 36, 52, 42, 50, 48, 48, 41, 125, 37, > 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 100, 114, 103, 98, 97, 10, 99, 111, 100, 101, 48, 61, 34, 36, > 50, 34, 32, 99, 111, 100, 101, 49, 61, 72, 32, 99, 111, 100, 101, 50, > 61, 86, 32, 99, 111, 100, 101, 51, 61, 65, 32, 99, 111, 100, 101, 52, > 61, 66, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 105, 102, 32, > 123, 36, 49, 51, 37, 64, 35, 125, 32, 45, 109, 118, 91, 123, 36, 49, > 51, 37, 64, 35, 125, 45, 45, 49, 93, 32, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 49, 124, 124, 36, 49, 50, > 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 114, 111, > 116, 97, 116, 101, 91, 36, 62, 93, 32, 123, 36, 49, 49, 43, 63, 40, > 45, 36, 49, 50, 44, 36, 49, 50, 41, 125, 44, 49, 44, 48, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 111, 110, > 116, 97, 103, 101, 32, 36, 123, 99, 111, 100, 101, 36, 49, 125, 44, 123, > 105, 102, 40, 36, 51, 61, 61, 48, 44, 36, 52, 44, 50, 43, 109, 97, > 120, 40, 48, 44, 36, 52, 45, 48, 46, 53, 41, 41, 125, 44, 48, 44, > 92, 10, 34, 45, 105, 102, 32, 123, 36, 34, 34, 55, 37, 50, 125, 32, > 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 105, 102, 32, 123, 36, 34, 34, 56, 37, 50, 125, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, 32, 34, > 92, 10, 34, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 36, > 34, 34, 54, 125, 32, 34, 92, 10, 34, 45, 105, 102, 32, 123, 36, 53, > 124, 124, 36, 54, 125, 32, 34, 92, 10, 34, 32, 32, 45, 114, 32, 123, > 109, 97, 120, 40, 49, 44, 36, 34, 34, 52, 45, 50, 42, 40, 36, 53, > 43, 36, 54, 41, 41, 125, 44, 123, 109, 97, 120, 40, 49, 44, 36, 34, > 34, 53, 45, 50, 42, 40, 36, 53, 43, 36, 54, 41, 41, 125, 44, 49, > 44, 49, 48, 48, 37, 44, 50, 32, 102, 115, 61, 123, 109, 105, 110, 40, > 53, 51, 44, 109, 97, 120, 40, 119, 44, 104, 41, 47, 51, 41, 125, 32, > 34, 92, 10, 34, 32, 32, 45, 102, 114, 97, 109, 101, 32, 36, 54, 44, > 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 32, 34, 92, 10, 34, 32, > 32, 45, 114, 32, 123, 119, 43, 50, 42, 36, 53, 125, 44, 123, 104, 43, > 50, 42, 36, 53, 125, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, > 44, 48, 46, 53, 44, 48, 46, 53, 32, 34, 92, 10, 34, 32, 32, 48, > 32, 45, 116, 91, 45, 49, 93, 32, 36, 34, 34, 49, 44, 48, 44, 48, > 44, 36, 102, 115, 44, 49, 44, 50, 53, 53, 32, 45, 101, 120, 112, 97, > 110, 100, 95, 120, 121, 91, 45, 49, 93, 32, 51, 44, 48, 32, 91, 45, > 49, 93, 120, 51, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 123, 51, 43, > 50, 42, 36, 102, 115, 47, 50, 48, 125, 32, 45, 97, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 99, 32, 45, 106, 91, 48, 93, 32, 91, 49, > 93, 44, 123, 53, 43, 36, 53, 43, 36, 54, 125, 44, 123, 36, 53, 43, > 36, 54, 125, 44, 48, 44, 48, 44, 49, 44, 91, 50, 93, 44, 50, 53, > 53, 32, 45, 107, 91, 48, 93, 32, 34, 92, 10, 34, 45, 101, 108, 115, > 101, 32, 34, 92, 10, 34, 32, 32, 45, 114, 32, 36, 34, 34, 52, 44, > 36, 34, 34, 53, 44, 49, 44, 49, 48, 48, 37, 44, 50, 32, 102, 115, > 61, 123, 109, 105, 110, 40, 53, 51, 44, 109, 97, 120, 40, 119, 44, 104, > 41, 47, 51, 41, 125, 32, 34, 92, 10, 34, 32, 32, 48, 32, 45, 116, > 91, 45, 49, 93, 32, 36, 34, 34, 49, 44, 48, 44, 48, 44, 36, 102, > 115, 44, 49, 44, 50, 53, 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, > 120, 121, 91, 45, 49, 93, 32, 51, 44, 48, 32, 91, 45, 49, 93, 120, > 51, 32, 45, 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 32, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 123, 51, 43, 50, 42, 36, > 102, 115, 47, 50, 48, 125, 32, 45, 97, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 99, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, 44, 53, > 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 50, 93, 44, 50, 53, 53, > 32, 45, 107, 91, 48, 93, 32, 34, 92, 10, 34, 45, 101, 110, 100, 105, > 102, 32, 34, 10, 110, 119, 61, 123, 119, 125, 32, 110, 104, 61, 123, 104, > 125, 10, 45, 114, 101, 115, 105, 122, 101, 95, 114, 97, 116, 105, 111, 50, > 100, 32, 36, 119, 44, 123, 36, 104, 45, 49, 54, 125, 44, 50, 44, 50, > 10, 45, 100, 114, 103, 98, 97, 10, 45, 105, 91, 48, 93, 32, 49, 48, > 48, 37, 44, 49, 53, 44, 49, 44, 51, 44, 50, 52, 48, 32, 45, 116, > 91, 48, 93, 32, 34, 69, 115, 116, 105, 109, 97, 116, 101, 100, 32, 115, > 105, 122, 101, 32, 58, 32, 34, 123, 114, 111, 117, 110, 100, 40, 49, 48, > 48, 42, 36, 110, 119, 47, 36, 119, 41, 125, 37, 34, 32, 120, 32, 34, > 123, 114, 111, 117, 110, 100, 40, 49, 48, 48, 42, 36, 110, 104, 47, 36, > 104, 41, 125, 37, 44, 50, 44, 48, 44, 49, 54, 32, 45, 114, 91, 48, > 93, 32, 49, 48, 48, 37, 44, 49, 54, 44, 49, 44, 51, 44, 48, 10, > 45, 97, 32, 121, 10, 103, 105, 109, 112, 95, 112, 117, 122, 122, 108, 101, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 60, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, > 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 112, 117, 122, 122, 108, 101, > 32, 36, 119, 44, 36, 104, 44, 36, 49, 44, 36, 50, 44, 36, 51, 44, > 36, 52, 44, 36, 53, 10, 45, 45, 98, 91, 45, 49, 93, 32, 36, 54, > 37, 44, 48, 32, 45, 103, 91, 45, 49, 93, 32, 120, 121, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 91, 45, 49, 93, 32, 45, > 36, 55, 44, 36, 55, 32, 45, 43, 91, 48, 44, 45, 49, 93, 10, 45, > 45, 98, 91, 45, 49, 93, 32, 36, 56, 37, 44, 48, 32, 45, 110, 91, > 45, 49, 93, 32, 48, 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, 45, > 49, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 110, 91, 45, 49, > 93, 32, 123, 40, 50, 53, 53, 45, 36, 57, 41, 47, 50, 53, 53, 125, > 44, 49, 32, 45, 42, 91, 48, 44, 45, 49, 93, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 49, 48, 33, 61, 49, > 48, 48, 124, 124, 36, 49, 49, 124, 124, 36, 49, 50, 124, 124, 36, 49, > 51, 124, 124, 36, 49, 52, 124, 124, 36, 49, 53, 124, 124, 36, 49, 54, > 125, 10, 45, 45, 45, 91, 45, 49, 93, 32, 49, 32, 45, 108, 97, 98, > 101, 108, 95, 102, 103, 91, 45, 49, 93, 32, 48, 10, 45, 45, 97, 114, > 101, 97, 95, 102, 103, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 108, > 116, 91, 45, 49, 93, 32, 53, 48, 37, 32, 45, 111, 114, 91, 45, 51, > 93, 32, 91, 45, 49, 93, 32, 45, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 50, 93, 32, 48, 32, 45, 42, 91, 45, 50, > 93, 32, 45, 49, 32, 45, 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, > 32, 45, 108, 97, 98, 101, 108, 91, 45, 49, 93, 32, 48, 44, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 77, 43, 49, 125, 10, 45, > 45, 61, 61, 91, 49, 93, 32, 36, 62, 10, 99, 111, 111, 114, 100, 115, > 61, 64, 123, 45, 97, 117, 116, 111, 99, 114, 111, 112, 95, 99, 111, 111, > 114, 100, 115, 91, 45, 49, 93, 92, 32, 48, 125, 10, 45, 45, 122, 91, > 48, 93, 32, 36, 99, 111, 111, 114, 100, 115, 32, 45, 122, 91, 45, 50, > 93, 32, 36, 99, 111, 111, 114, 100, 115, 32, 45, 114, 118, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 10, 120, 36, 62, 61, 123, 97, 114, 103, > 40, 49, 44, 36, 99, 111, 111, 114, 100, 115, 41, 43, 114, 111, 117, 110, > 100, 40, 119, 47, 50, 41, 125, 32, 121, 36, 62, 61, 123, 97, 114, 103, > 40, 50, 44, 36, 99, 111, 111, 114, 100, 115, 41, 43, 114, 111, 117, 110, > 100, 40, 104, 47, 50, 41, 125, 10, 45, 100, 111, 110, 101, 10, 45, 114, > 109, 91, 48, 44, 49, 93, 10, 45, 105, 102, 32, 36, 49, 52, 32, 45, > 115, 111, 114, 116, 95, 108, 105, 115, 116, 32, 43, 44, 63, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 54, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, > 114, 50, 100, 121, 32, 123, 109, 97, 120, 40, 48, 46, 49, 44, 36, 49, > 48, 43, 36, 49, 49, 42, 63, 40, 45, 49, 44, 49, 41, 41, 125, 37, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 123, 36, 49, 50, 43, 36, 49, > 51, 42, 63, 40, 45, 49, 44, 49, 41, 125, 10, 45, 105, 102, 32, 36, > 49, 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 99, 120, 61, 123, 114, 111, 117, > 110, 100, 40, 119, 47, 50, 41, 125, 32, 99, 121, 61, 123, 114, 111, 117, > 110, 100, 40, 104, 47, 50, 41, 125, 10, 45, 115, 104, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 32, 45, 105, 102, 32, 36, 49, 53, 32, 45, > 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 91, 48, 93, 32, 36, 119, 44, 36, 104, 44, > 49, 44, 52, 10, 45, 106, 91, 48, 93, 32, 91, 45, 50, 93, 44, 123, > 36, 123, 120, 36, 60, 125, 45, 36, 99, 120, 125, 44, 123, 36, 123, 121, > 36, 60, 125, 45, 36, 99, 121, 125, 44, 48, 44, 48, 44, 49, 44, 91, > 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 101, 108, 115, 101, 10, 45, 105, 91, 48, 93, 32, 36, 119, 44, 36, 104, > 44, 49, 44, 123, 115, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 49, 125, 10, 45, 114, 50, 100, 121, 91, 45, 49, 93, 32, > 123, 109, 97, 120, 40, 48, 46, 49, 44, 36, 49, 48, 43, 36, 49, 49, > 42, 63, 40, 45, 49, 44, 49, 41, 41, 125, 37, 32, 45, 114, 111, 116, > 97, 116, 101, 91, 45, 49, 93, 32, 123, 36, 49, 50, 43, 36, 49, 51, > 42, 63, 40, 45, 49, 44, 49, 41, 125, 10, 45, 105, 102, 32, 36, 49, > 53, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 91, 45, 49, 93, > 32, 49, 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 99, 120, 61, 123, > 114, 111, 117, 110, 100, 40, 119, 47, 50, 41, 125, 32, 99, 121, 61, 123, > 114, 111, 117, 110, 100, 40, 104, 47, 50, 41, 125, 10, 45, 115, 104, 91, > 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 105, > 102, 32, 36, 49, 53, 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, > 93, 32, 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, 106, 91, 48, 93, > 32, 91, 45, 50, 93, 44, 123, 36, 123, 120, 36, 60, 125, 45, 36, 99, > 120, 125, 44, 123, 36, 123, 121, 36, 60, 125, 45, 36, 99, 121, 125, 44, > 48, 44, 48, 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 100, 111, 110, 101, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 112, 117, 122, > 122, 108, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 112, 117, 122, 122, 108, 101, 32, 36, 123, 49, 45, 49, > 53, 125, 44, 48, 10, 103, 105, 109, 112, 95, 116, 97, 113, 117, 105, 110, > 32, 58, 10, 45, 116, 111, 95, 97, 32, 45, 116, 97, 113, 117, 105, 110, > 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 37, > 44, 36, 54, 44, 36, 123, 55, 45, 49, 48, 125, 10, 103, 105, 109, 112, > 95, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, 101, 97, 98, 108, 101, > 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 45, 97, 114, 114, 97, 121, > 95, 109, 105, 114, 114, 111, 114, 32, 49, 44, 123, 36, 51, 45, 49, 125, > 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 111, 116, 97, 116, > 101, 95, 116, 105, 108, 101, 97, 98, 108, 101, 32, 36, 49, 44, 123, 105, > 102, 40, 36, 51, 61, 61, 48, 44, 36, 50, 44, 36, 50, 47, 50, 41, > 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 105, 102, > 32, 123, 64, 123, 36, 62, 44, 119, 125, 61, 61, 49, 34, 32, 38, 38, > 32, 34, 64, 123, 36, 62, 44, 104, 125, 61, 61, 49, 125, 32, 45, 114, > 109, 32, 45, 95, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 32, 32, 73, 110, 118, 97, 108, 105, 100, 92, 110, > 105, 109, 97, 103, 101, 32, 115, 105, 122, 101, 34, 32, 45, 114, 101, 116, > 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 114, 111, 116, 97, 116, 101, 95, 116, 105, 108, > 101, 115, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, > 111, 116, 97, 116, 101, 95, 116, 105, 108, 101, 115, 32, 36, 51, 44, 36, > 49, 44, 36, 50, 32, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 32, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 10, 95, 103, > 105, 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 116, 105, > 108, 101, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 116, > 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 32, 45, 110, 32, 36, 51, > 44, 36, 52, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, > 115, 32, 36, 49, 44, 36, 50, 32, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 116, 105, 108, > 101, 115, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 36, 123, 49, > 45, 52, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 104, > 105, 102, 116, 95, 116, 105, 108, 101, 115, 32, 58, 10, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 115, 104, 105, 102, 116, 95, 116, 105, 108, 101, > 115, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 45, 105, 102, 32, 123, > 36, 52, 60, 49, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 52, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, 32, 99, 32, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, > 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 112, 97, 114, 97, > 109, 101, 116, 101, 114, 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 58, > 10, 45, 105, 102, 32, 36, 51, 10, 45, 113, 117, 97, 100, 114, 97, 116, > 105, 122, 101, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, > 45, 101, 108, 115, 101, 10, 45, 108, 105, 110, 101, 97, 114, 105, 122, 101, > 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, > 112, 95, 105, 115, 111, 108, 97, 116, 101, 95, 116, 105, 108, 101, 115, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, 45, 105, 102, > 32, 36, 53, 32, 115, 120, 61, 123, 114, 111, 117, 110, 100, 40, 109, 105, > 110, 40, 119, 44, 104, 41, 42, 109, 97, 120, 40, 36, 49, 44, 36, 50, > 41, 47, 49, 48, 48, 41, 125, 32, 115, 121, 61, 36, 115, 120, 32, 45, > 101, 108, 115, 101, 32, 115, 120, 61, 123, 114, 111, 117, 110, 100, 40, 119, > 42, 36, 49, 47, 49, 48, 48, 41, 125, 32, 115, 121, 61, 123, 114, 111, > 117, 110, 100, 40, 104, 42, 36, 50, 47, 49, 48, 48, 41, 125, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, 32, 98, 120, 61, > 123, 109, 97, 120, 40, 36, 51, 44, 36, 52, 41, 125, 32, 98, 121, 61, > 36, 98, 120, 32, 45, 101, 108, 115, 101, 32, 98, 120, 61, 36, 51, 32, > 98, 121, 61, 36, 52, 32, 45, 101, 110, 100, 105, 102, 10, 45, 115, 32, > 120, 44, 45, 36, 115, 120, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 32, 121, 44, 45, 36, > 115, 121, 32, 45, 114, 32, 49, 48, 48, 37, 44, 123, 49, 48, 48, 43, > 36, 98, 121, 125, 37, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, > 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 97, 32, 121, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 32, 123, 49, 48, > 48, 43, 36, 98, 120, 125, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, > 45, 97, 32, 120, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 98, 111, 107, 101, 104, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 98, 111, 107, 101, > 104, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, > 97, 114, 116, 111, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 99, 97, 114, 116, 111, 111, 110, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, 105, 114, 99, > 108, 101, 95, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 45, 98, 32, 36, 52, 37, 10, 45, 45, 99, 111, 108, 111, > 114, 109, 97, 112, 32, 36, 49, 32, 45, 105, 110, 100, 101, 120, 91, 48, > 93, 32, 91, 49, 93, 44, 48, 44, 48, 10, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 52, 44, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 36, 49, 10, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 36, > 62, 42, 49, 48, 48, 47, 36, 49, 125, 10, 45, 45, 61, 61, 91, 48, > 93, 32, 36, 62, 10, 45, 115, 107, 101, 108, 101, 116, 111, 110, 51, 100, > 91, 45, 49, 93, 32, 50, 44, 50, 44, 48, 44, 49, 44, 48, 10, 45, > 115, 51, 100, 91, 45, 49, 93, 32, 45, 108, 91, 45, 54, 45, 45, 49, > 93, 10, 45, 114, 91, 50, 93, 32, 51, 44, 64, 123, 50, 44, 104, 47, > 51, 125, 44, 49, 44, 49, 44, 45, 49, 10, 49, 44, 64, 123, 50, 44, > 104, 47, 50, 42, 36, 50, 37, 125, 44, 49, 44, 49, 44, 49, 32, 45, > 114, 91, 45, 49, 93, 32, 49, 44, 64, 123, 50, 44, 104, 47, 50, 125, > 44, 49, 44, 49, 44, 52, 32, 45, 114, 91, 45, 49, 93, 32, 51, 44, > 50, 48, 48, 37, 32, 45, 42, 91, 50, 44, 45, 49, 93, 32, 45, 121, > 10, 45, 101, 110, 100, 108, 10, 45, 97, 91, 45, 54, 45, 45, 49, 93, > 32, 121, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 64, 123, > 45, 97, 116, 91, 49, 93, 92, 32, 36, 62, 125, 10, 91, 48, 93, 44, > 91, 48, 93, 44, 49, 44, 52, 44, 48, 10, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, > 44, 48, 44, 49, 44, 123, 49, 43, 36, 53, 125, 44, 48, 44, 48, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 99, 111, 108, > 51, 100, 91, 45, 51, 93, 32, 50, 53, 53, 32, 45, 111, 98, 106, 101, > 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 51, 93, 44, 48, 44, > 48, 44, 48, 44, 36, 51, 44, 123, 49, 43, 36, 53, 125, 44, 48, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 98, 108, 101, 110, 100, 91, 50, 44, 45, 49, 93, 32, 97, > 108, 112, 104, 97, 10, 45, 100, 111, 110, 101, 10, 45, 107, 91, 50, 93, > 10, 45, 105, 102, 32, 36, 54, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 51, 32, 45, 108, 116, 91, 45, 49, 93, 32, 49, 32, 45, > 105, 110, 112, 97, 105, 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 48, > 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 36, 55, 32, 45, 110, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 112, 114, 111, > 103, 114, 101, 115, 115, 32, 49, 48, 48, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, > 101, 95, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 97, 98, 115, 116, 114, 97, > 99, 116, 105, 111, 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 99, 117, 98, 105, 115, 109, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 36, 49, 32, 45, 99, 117, 98, 105, 115, 109, 32, 36, > 123, 50, 45, 45, 49, 125, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 99, 117, 98, 105, 115, 109, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 117, > 98, 105, 115, 109, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 99, 117, 116, 111, 117, 116, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, > 93, 10, 45, 109, 101, 100, 105, 97, 110, 32, 123, 49, 48, 45, 36, 51, > 125, 10, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 36, 49, 10, 45, > 45, 97, 114, 101, 97, 91, 45, 49, 93, 32, 48, 44, 49, 32, 109, 101, > 100, 61, 64, 123, 45, 109, 101, 100, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 105, 110, 112, 97, 105, 110, 116, 95, 104, 111, 108, 101, 115, > 32, 123, 36, 109, 101, 100, 42, 36, 50, 37, 125, 44, 48, 44, 49, 10, > 45, 105, 102, 32, 36, 52, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 99, 117, 116, 111, 117, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, > 117, 116, 111, 117, 116, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 101, 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, > 58, 10, 45, 101, 108, 108, 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, > 36, 123, 94, 48, 125, 10, 103, 105, 109, 112, 95, 101, 108, 108, 105, 112, > 115, 105, 111, 110, 105, 115, 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 108, 108, > 105, 112, 115, 105, 111, 110, 105, 115, 109, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 102, 101, 108, 116, 112, 101, 110, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 45, 103, 105, 109, 112, 95, 104, 97, 114, 100, 115, 107, > 101, 116, 99, 104, 98, 119, 32, 36, 123, 49, 45, 53, 125, 44, 48, 44, > 48, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, 105, 103, > 104, 116, 32, 45, 101, 114, 111, 100, 101, 95, 111, 99, 116, 32, 36, 54, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 102, 101, 108, 116, 112, 101, 110, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 102, > 101, 108, 116, 112, 101, 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 112, 111, 115, 116, 101, 114, 95, 104, 111, 112, 101, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 32, 123, > 49, 48, 94, 36, 49, 125, 32, 45, 112, 111, 115, 116, 101, 114, 95, 104, > 111, 112, 101, 32, 36, 50, 10, 103, 105, 109, 112, 95, 112, 111, 115, 116, > 101, 114, 95, 104, 111, 112, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 111, 115, > 116, 101, 114, 95, 104, 111, 112, 101, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 107, 117, 119, 97, 104, 97, 114, 97, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 107, 117, > 119, 97, 104, 97, 114, 97, 32, 36, 50, 32, 45, 100, 111, 110, 101, 34, > 44, 36, 51, 44, 48, 10, 103, 105, 109, 112, 95, 107, 117, 119, 97, 104, > 97, 114, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 107, 117, 119, 97, 104, 97, 114, > 97, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 108, > 121, 108, 101, 106, 107, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 95, 103, > 105, 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, 97, 105, 110, 116, > 105, 110, 103, 91, 45, 49, 93, 32, 49, 48, 44, 49, 48, 46, 52, 57, > 44, 48, 46, 55, 53, 44, 48, 10, 45, 115, 109, 111, 111, 116, 104, 91, > 45, 49, 93, 32, 51, 48, 48, 44, 48, 46, 50, 54, 44, 49, 44, 48, > 44, 55, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, > 36, 51, 10, 91, 45, 49, 93, 32, 45, 114, 118, 91, 45, 51, 45, 45, > 49, 93, 10, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, > 32, 108, 105, 103, 104, 116, 101, 110, 44, 48, 46, 53, 10, 45, 98, 108, > 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 103, 114, 97, 105, 110, > 109, 101, 114, 103, 101, 44, 49, 10, 45, 103, 105, 109, 112, 95, 107, 117, > 119, 97, 104, 97, 114, 97, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, > 44, 48, 10, 45, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, 99, 97, > 110, 118, 97, 115, 91, 45, 49, 93, 32, 36, 51, 44, 52, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, 97, 105, 110, 116, 105, > 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, > 97, 105, 110, 116, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 95, 103, 105, 109, 112, 95, 108, 121, 108, 101, 106, 107, 95, 112, 97, 105, > 110, 116, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 114, 101, 112, 101, 97, 116, > 32, 36, 49, 32, 45, 98, 32, 36, 51, 32, 45, 117, 110, 115, 104, 97, > 114, 112, 32, 36, 51, 44, 36, 50, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 34, 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, 112, 97, 105, > 110, 116, 105, 110, 103, 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, > 52, 61, 48, 125, 44, 36, 123, 53, 61, 48, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 32, 123, 109, 97, 120, > 40, 51, 44, 115, 41, 125, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 114, 118, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 49, 32, 45, 103, 105, 109, 112, 95, 110, 111, 114, 109, 97, > 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 49, > 48, 44, 54, 44, 53, 44, 50, 48, 44, 49, 44, 51, 32, 45, 100, 111, > 110, 101, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, > 111, 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 91, 45, > 49, 93, 32, 123, 49, 48, 48, 42, 36, 50, 125, 44, 48, 46, 50, 44, > 49, 44, 36, 50, 44, 123, 50, 42, 36, 50, 125, 44, 48, 46, 56, 44, > 57, 48, 44, 50, 44, 48, 44, 49, 44, 49, 44, 50, 44, 49, 44, 49, > 54, 10, 45, 103, 105, 109, 112, 95, 109, 105, 120, 95, 108, 97, 98, 91, > 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 36, 51, 44, 48, 44, 48, > 46, 53, 44, 36, 51, 44, 48, 44, 48, 46, 53, 44, 48, 44, 50, 44, > 48, 10, 45, 105, 102, 32, 36, 53, 32, 45, 103, 105, 109, 112, 95, 115, > 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, 104, 101, 100, > 91, 45, 49, 93, 32, 49, 48, 44, 49, 44, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 115, 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 36, > 52, 44, 48, 44, 49, 44, 49, 44, 49, 10, 45, 114, 118, 32, 45, 97, > 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 112, 97, 105, 110, 116, 105, 110, 103, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 36, 42, 34, 44, 36, > 45, 49, 10, 103, 105, 109, 112, 95, 112, 101, 110, 95, 100, 114, 97, 119, > 105, 110, 103, 32, 58, 10, 45, 100, 114, 97, 119, 105, 110, 103, 32, 36, > 49, 10, 103, 105, 109, 112, 95, 112, 101, 110, 95, 100, 114, 97, 119, 105, > 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 112, 101, 110, 95, 100, 114, 97, 119, > 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, > 95, 112, 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 58, 10, 45, 112, > 111, 108, 121, 103, 111, 110, 105, 122, 101, 32, 36, 49, 44, 36, 50, 44, > 123, 36, 51, 94, 50, 125, 44, 36, 52, 44, 36, 53, 10, 45, 105, 102, > 32, 36, 57, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 45, 110, 111, 114, 109, 32, 45, 103, 91, > 45, 49, 93, 32, 120, 121, 44, 49, 32, 45, 110, 101, 113, 91, 45, 50, > 44, 45, 49, 93, 32, 48, 32, 45, 111, 114, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 52, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, > 99, 111, 108, 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, > 49, 44, 49, 44, 49, 44, 36, 54, 44, 36, 55, 44, 36, 56, 44, 36, > 57, 10, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 112, 111, 108, 121, 103, 111, 110, 105, 122, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 112, 111, 108, 121, 103, 111, 110, 105, 122, > 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 112, > 111, 115, 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 58, 10, 45, 105, > 102, 32, 36, 49, 32, 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, > 49, 48, 44, 36, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 111, > 115, 116, 101, 114, 95, 101, 100, 103, 101, 115, 32, 36, 123, 50, 45, 55, > 125, 10, 103, 105, 109, 112, 95, 112, 111, 115, 116, 101, 114, 95, 101, 100, > 103, 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 111, 115, 116, 101, 114, 95, > 101, 100, 103, 101, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 114, 111, 100, 105, 108, 105, 117, 115, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 114, 111, 100, 105, 108, 105, 117, 115, 32, 36, 123, 49, 45, 53, 44, 55, > 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 54, 32, 45, 115, 109, > 111, 111, 116, 104, 32, 49, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, > 48, 46, 56, 44, 52, 53, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, > 51, 48, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 34, 44, 36, 56, 44, 48, 10, 103, 105, 109, 112, 95, 114, 111, 100, > 105, 108, 105, 117, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 114, 111, 100, 105, 108, > 105, 117, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 114, 103, 98, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 51, > 37, 32, 45, 94, 91, 45, 49, 93, 32, 36, 49, 50, 32, 45, 113, 117, > 97, 110, 116, 105, 122, 101, 91, 45, 49, 93, 32, 36, 54, 44, 48, 44, > 48, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 54, 10, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 50, 93, 32, 49, 48, 48, 37, 32, 45, 45, > 103, 116, 91, 49, 93, 32, 36, 62, 32, 45, 110, 101, 113, 91, 45, 50, > 93, 32, 48, 32, 45, 111, 114, 91, 45, 50, 44, 45, 49, 93, 32, 45, > 97, 91, 50, 44, 45, 49, 93, 32, 99, 10, 115, 105, 122, 101, 61, 123, > 105, 102, 40, 36, 54, 60, 61, 49, 44, 36, 55, 44, 36, 55, 43, 40, > 36, 56, 45, 36, 55, 41, 42, 36, 62, 47, 40, 36, 54, 45, 49, 41, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 115, 105, 122, 101, 60, 49, 125, > 32, 45, 98, 114, 101, 97, 107, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 36, 53, 32, 123, 50, 42, 36, 115, 105, 122, 101, 125, 44, > 123, 50, 42, 36, 115, 105, 122, 101, 125, 32, 45, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 36, 49, 91, 45, 49, 93, 32, > 36, 123, 50, 45, 52, 125, 32, 45, 114, 50, 100, 121, 91, 45, 49, 93, > 32, 36, 115, 105, 122, 101, 10, 45, 101, 108, 115, 101, 32, 36, 115, 105, > 122, 101, 44, 36, 115, 105, 122, 101, 32, 45, 95, 103, 105, 109, 112, 95, > 115, 104, 97, 112, 101, 105, 115, 109, 36, 49, 91, 45, 49, 93, 32, 36, > 123, 50, 45, 52, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 110, > 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 101, 120, 112, 97, 110, 100, > 95, 120, 121, 91, 45, 50, 44, 45, 49, 93, 32, 49, 44, 48, 32, 45, > 110, 91, 45, 50, 44, 45, 49, 93, 32, 48, 44, 49, 10, 45, 105, 102, > 32, 123, 36, 49, 48, 60, 49, 125, 32, 45, 100, 105, 108, 97, 116, 101, > 91, 45, 49, 93, 32, 51, 32, 45, 101, 110, 100, 105, 102, 10, 91, 45, > 49, 93, 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 10, 45, > 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 34, 45, 112, 97, 99, 107, > 95, 115, 112, 114, 105, 116, 101, 115, 91, 45, 50, 44, 45, 49, 93, 32, > 49, 44, 49, 48, 48, 44, 36, 57, 44, 36, 49, 48, 44, 36, 49, 49, > 34, 44, 123, 36, 62, 42, 49, 48, 48, 47, 36, 54, 125, 44, 123, 40, > 36, 62, 43, 49, 41, 42, 49, 48, 48, 47, 36, 54, 125, 10, 45, 99, > 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 44, 49, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, > 32, 57, 55, 10, 45, 114, 109, 91, 49, 93, 10, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 45, 110, 101, 113, > 91, 45, 49, 93, 32, 48, 32, 45, 98, 108, 101, 110, 100, 91, 48, 44, > 45, 49, 93, 32, 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, > 48, 32, 45, 42, 91, 49, 93, 32, 50, 53, 53, 32, 45, 97, 32, 99, > 10, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 52, 32, 45, 102, 99, 91, 48, 93, 32, 36, 49, 52, 44, > 36, 49, 53, 44, 36, 49, 54, 44, 36, 49, 55, 10, 45, 98, 108, 101, > 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 114, 112, 114, 111, 103, 114, > 101, 115, 115, 32, 49, 48, 48, 10, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, > 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, > 64, 35, 62, 61, 49, 32, 45, 107, 91, 48, 93, 32, 45, 101, 108, 115, > 101, 32, 50, 53, 54, 44, 50, 53, 54, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 95, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 32, 34, 44, 34, 36, 42, 34, 10, 53, 48, 37, 44, > 53, 48, 37, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 105, 115, 109, 36, 49, 91, 45, 49, 93, 32, 36, 123, 50, 45, 52, 125, > 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, > 48, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, 37, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 10, > 45, 114, 91, 45, 49, 93, 32, 91, 48, 93, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 32, 45, 111, 114, 10, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 48, 32, 58, 10, 45, 102, 32, > 50, 53, 53, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 49, 32, 58, 10, 45, > 112, 111, 108, 121, 103, 111, 110, 32, 51, 44, 53, 48, 37, 44, 48, 44, > 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, > 105, 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 50, 32, 58, 10, > 45, 95, 100, 116, 95, 99, 105, 114, 99, 108, 101, 32, 123, 119, 125, 32, > 45, 114, 109, 91, 45, 50, 93, 32, 45, 115, 107, 105, 112, 32, 36, 42, > 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 51, > 32, 58, 10, 45, 95, 100, 116, 95, 100, 105, 97, 109, 111, 110, 100, 32, > 123, 119, 125, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 115, 107, 105, > 112, 32, 36, 42, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 105, 115, 109, 52, 32, 58, 10, 45, 115, 116, 97, 114, 51, 100, 32, 51, > 44, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 64, 123, 48, 44, > 109, 105, 110, 40, 119, 44, 104, 41, 47, 50, 125, 32, 45, 111, 98, 106, > 101, 99, 116, 51, 100, 91, 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, > 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 32, 45, 107, > 91, 48, 93, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 105, 115, 109, 53, 32, 58, 10, 45, > 115, 116, 97, 114, 51, 100, 32, 52, 44, 49, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 64, 123, 48, 44, 109, 105, 110, 40, 119, 44, 104, 41, > 47, 50, 125, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, > 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 49, 44, 50, 44, 48, 32, 45, 107, 91, 48, 93, 32, 45, 115, 107, 105, > 112, 32, 36, 42, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 105, 115, 109, 54, 32, 58, 10, 45, 115, 116, 97, 114, 51, 100, 32, 53, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 64, 123, 48, 44, 109, 105, > 110, 40, 119, 44, 104, 41, 47, 50, 125, 32, 45, 111, 98, 106, 101, 99, > 116, 51, 100, 91, 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, > 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 32, 45, 107, 91, 48, > 93, 32, 45, 115, 107, 105, 112, 32, 36, 42, 10, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 105, 115, 109, 55, 32, 58, 10, 45, 115, 116, > 97, 114, 51, 100, 32, 36, 49, 44, 36, 50, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 64, 123, 48, 44, 109, 105, 110, 40, 119, 44, 104, 41, > 47, 50, 125, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 49, 44, 36, 51, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, > 48, 44, 49, 44, 50, 44, 48, 32, 45, 107, 91, 48, 93, 10, 103, 105, > 109, 112, 95, 100, 114, 97, 119, 95, 119, 104, 105, 114, 108, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 100, 114, > 97, 119, 95, 119, 104, 105, 114, 108, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 98, 108, 97, 99, 107, 97, 110, 100, 119, 104, > 105, 116, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 10, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, > 103, 98, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, > 45, 42, 91, 45, 51, 93, 32, 36, 49, 32, 45, 98, 91, 45, 51, 93, > 32, 36, 50, 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 51, 32, 45, > 98, 91, 45, 50, 93, 32, 36, 52, 37, 10, 45, 42, 91, 45, 49, 93, > 32, 36, 53, 32, 45, 98, 91, 45, 49, 93, 32, 36, 54, 37, 10, 45, > 43, 91, 45, 51, 45, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, > 123, 36, 49, 43, 36, 51, 43, 36, 53, 125, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 112, 112, 108, 121, 95, 103, > 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 55, 125, > 10, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, 45, > 49, 93, 32, 36, 56, 32, 45, 43, 91, 45, 49, 93, 32, 49, 50, 56, > 32, 45, 43, 91, 45, 49, 93, 32, 36, 57, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 49, 50, > 124, 124, 36, 49, 51, 124, 124, 36, 49, 52, 125, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 91, 45, 49, 93, 120, 50, 10, 45, 110, 111, > 105, 115, 101, 91, 45, 51, 93, 32, 49, 48, 48, 44, 36, 49, 55, 32, > 45, 98, 91, 45, 51, 93, 32, 36, 49, 54, 37, 32, 45, 110, 91, 45, > 51, 93, 32, 45, 36, 49, 50, 44, 36, 49, 50, 10, 45, 110, 111, 105, > 115, 101, 91, 45, 50, 93, 32, 49, 48, 48, 44, 36, 49, 55, 32, 45, > 98, 91, 45, 50, 93, 32, 36, 49, 54, 37, 32, 45, 110, 91, 45, 50, > 93, 32, 45, 36, 49, 51, 44, 36, 49, 51, 10, 45, 110, 111, 105, 115, > 101, 91, 45, 49, 93, 32, 49, 48, 48, 44, 36, 49, 55, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 49, 54, 37, 32, 45, 110, 91, 45, 49, 93, > 32, 45, 36, 49, 52, 44, 36, 49, 52, 10, 45, 45, 116, 111, 110, 101, > 115, 91, 45, 52, 93, 32, 51, 32, 45, 98, 91, 45, 51, 45, 45, 49, > 93, 32, 36, 49, 53, 37, 10, 45, 42, 91, 45, 54, 44, 45, 51, 93, > 32, 45, 42, 91, 45, 52, 44, 45, 50, 93, 32, 45, 42, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 43, 91, 45, 52, 45, 45, 49, 93, 32, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 48, 124, 124, 36, 49, 49, > 125, 10, 45, 47, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 105, 91, > 45, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 49, 44, 36, 49, 49, 10, 45, 105, 91, 45, 51, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 49, 48, 10, 45, > 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, 118, 50, > 114, 103, 98, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 118, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 105, > 102, 32, 36, 49, 56, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, > 95, 108, 111, 99, 97, 108, 32, 36, 49, 56, 44, 36, 49, 57, 44, 36, > 50, 48, 44, 50, 37, 44, 49, 44, 48, 44, 50, 53, 53, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 50, 50, 32, 45, 110, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, > 32, 36, 50, 49, 32, 45, 116, 111, 95, 112, 115, 101, 117, 100, 111, 103, > 114, 97, 121, 32, 36, 50, 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 98, 108, 97, 99, 107, 97, 110, 100, 119, 104, > 105, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 98, 108, 97, 99, 107, 97, 110, > 100, 119, 104, 105, 116, 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, 108, 98, 119, 32, 58, 10, > 45, 115, 116, 101, 110, 99, 105, 108, 98, 119, 32, 36, 49, 44, 36, 50, > 10, 45, 105, 102, 32, 123, 36, 51, 124, 124, 36, 52, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, > 47, 91, 48, 93, 32, 50, 53, 53, 32, 45, 105, 91, 48, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 52, 32, > 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 49, 44, 36, 51, 32, 45, 97, 91, 48, 45, 50, 93, 32, 99, > 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 48, 93, 10, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, > 108, 98, 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, 108, > 98, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 99, 104, 97, 114, 99, 111, 97, 108, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, > 93, 10, 45, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 109, 97, 120, 10, 119, 61, 123, 119, 125, 32, 104, 61, > 123, 104, 125, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 53, 48, 37, 44, 49, 53, 48, 37, 44, 49, 44, 49, 44, > 54, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 52, 32, > 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 115, 104, 97, 114, 112, 101, 110, 32, 123, 36, 49, 42, 51, > 125, 32, 45, 99, 117, 116, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, > 32, 36, 54, 32, 45, 45, 116, 50, 32, 36, 55, 44, 36, 56, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 116, 50, 91, 48, 93, 32, 36, 50, 44, > 36, 51, 10, 45, 105, 102, 32, 123, 33, 36, 49, 53, 125, 32, 45, 101, > 113, 91, 48, 93, 32, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 111, > 114, 10, 45, 45, 42, 91, 48, 93, 32, 36, 49, 48, 32, 45, 45, 42, > 91, 48, 93, 32, 36, 49, 49, 32, 45, 42, 91, 48, 93, 32, 36, 57, > 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 36, 49, 50, 44, 36, 49, 51, 44, 36, 49, > 52, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, 48, > 37, 44, 50, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 99, 104, 97, 114, 99, 111, 97, 108, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 104, > 97, 114, 99, 111, 97, 108, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 105, 122, 101, 95, 99, 111, 109, > 105, 99, 115, 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, > 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 49, 60, 50, 125, 32, 115, 101, 108, 101, 99, > 116, 105, 111, 110, 61, 48, 44, 49, 32, 45, 101, 108, 115, 101, 32, 115, > 101, 108, 101, 99, 116, 105, 111, 110, 61, 48, 44, 49, 44, 50, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 108, 91, 36, 115, 101, 108, 101, 99, 116, > 105, 111, 110, 93, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, > 114, 118, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, > 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 49, 61, 61, 51, 125, 32, 45, 114, 109, 91, 50, 93, 32, 45, 114, 118, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 45, 116, 111, 95, 114, 103, 98, > 97, 91, 48, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 91, 45, 49, 93, 32, 45, 43, 91, 45, 50, 93, 32, 49, > 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 45, 110, 111, 114, 109, 91, 49, 93, 32, > 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 45, 104, 105, 115, > 116, 111, 103, 114, 97, 109, 91, 45, 49, 93, 32, 50, 44, 48, 44, 49, > 10, 45, 105, 102, 32, 123, 105, 40, 48, 41, 62, 105, 40, 49, 41, 125, > 32, 45, 42, 91, 45, 50, 93, 32, 45, 49, 32, 45, 43, 91, 45, 50, > 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 98, 91, 45, 49, 93, 32, 36, 52, 37, 32, 45, 119, > 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 45, 91, 45, 49, 93, > 32, 49, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, 125, 32, 45, > 114, 109, 91, 48, 93, 32, 45, 114, 118, 32, 45, 98, 108, 101, 110, 100, > 91, 48, 44, 49, 93, 32, 109, 117, 108, 116, 105, 112, 108, 121, 32, 105, > 110, 100, 61, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, > 61, 49, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, 114, 118, 32, 105, > 110, 100, 61, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, > 50, 125, 32, 45, 114, 109, 91, 48, 93, 32, 105, 110, 100, 61, 49, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 51, 125, 32, 45, 114, > 118, 91, 49, 44, 50, 93, 32, 105, 110, 100, 61, 49, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 50, 61, 61, 52, 125, 32, 45, 114, 118, 91, 48, > 44, 49, 93, 32, 105, 110, 100, 61, 50, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 51, 38, 38, 36, 105, 110, 100, 62, 61, > 48, 125, 32, 45, 108, 91, 36, 105, 110, 100, 93, 10, 45, 45, 109, 105, > 120, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 40, 54, 53, 53, 51, > 54, 44, 50, 53, 54, 44, 49, 41, 10, 45, 105, 102, 32, 123, 36, 51, > 61, 61, 49, 48, 125, 32, 45, 100, 111, 10, 105, 77, 61, 64, 123, 49, > 44, 105, 77, 125, 10, 45, 105, 102, 32, 123, 36, 105, 77, 62, 61, 48, > 125, 10, 45, 45, 61, 61, 91, 49, 93, 32, 36, 105, 77, 32, 97, 114, > 101, 97, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, 114, 101, 112, 108, > 97, 99, 101, 91, 49, 93, 32, 36, 105, 77, 44, 45, 49, 10, 45, 45, > 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 49, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, 93, 10, 45, > 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, 45, 49, 93, > 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 97, 114, 101, 97, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 119, 104, 105, 108, 101, 32, 123, 36, 105, > 77, 62, 61, 48, 125, 32, 45, 101, 108, 115, 101, 10, 45, 108, 97, 98, > 101, 108, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, 36, 51, 60, 49, > 48, 125, 32, 45, 37, 91, 45, 49, 93, 32, 123, 36, 51, 43, 49, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 105, 77, 43, 49, 125, 32, 45, 45, 61, 61, 91, 49, 93, 32, 36, > 60, 32, 97, 114, 101, 97, 61, 64, 123, 45, 49, 44, 43, 125, 32, 45, > 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 91, 48, 93, 32, 45, 42, 91, 45, 49, 93, 32, 91, 48, > 93, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 42, 91, > 45, 49, 93, 32, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, > 93, 32, 99, 32, 45, 110, 109, 91, 45, 49, 93, 32, 36, 97, 114, 101, > 97, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 109, 91, 48, 44, 49, 93, 10, 45, 115, 111, 114, 116, 95, 108, 105, > 115, 116, 32, 43, 44, 110, 10, 45, 101, 110, 100, 108, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 103, 105, 109, 112, 95, 99, > 111, 108, 111, 114, 105, 122, 101, 95, 99, 111, 109, 105, 99, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 99, > 111, 108, 111, 114, 105, 122, 101, 95, 99, 111, 109, 105, 99, 115, 32, 36, > 49, 44, 48, 44, 36, 51, 44, 36, 52, 10, 103, 105, 109, 112, 95, 114, > 101, 99, 111, 108, 111, 114, 105, 122, 101, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 10, > 45, 105, 102, 32, 36, 51, 32, 115, 61, 36, 62, 44, 123, 36, 62, 43, > 49, 125, 32, 45, 101, 108, 115, 101, 32, 115, 61, 123, 50, 42, 36, 62, > 125, 44, 123, 50, 42, 36, 62, 43, 49, 125, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 108, 91, 36, 115, 93, 32, 45, 114, 118, 91, 48, 44, 49, > 93, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, > 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 50, 93, 10, 45, 116, 111, > 95, 114, 103, 98, 97, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 91, 45, 49, 93, 32, 45, 110, 101, > 113, 91, 45, 49, 93, 32, 48, 10, 45, 115, 114, 103, 98, 50, 114, 103, > 98, 91, 45, 51, 44, 45, 50, 93, 32, 45, 114, 103, 98, 50, 108, 97, > 98, 56, 91, 45, 51, 44, 45, 50, 93, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 45, 51, 93, 32, 48, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 45, 50, 93, 32, 49, 44, 50, 10, 45, 43, 91, 45, > 50, 93, 32, 49, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 32, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, > 91, 45, 51, 93, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, > 119, 97, 116, 101, 114, 115, 104, 101, 100, 91, 45, 51, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 45, 91, 45, 50, > 93, 32, 49, 10, 45, 45, 100, 105, 102, 102, 117, 115, 105, 111, 110, 116, > 101, 110, 115, 111, 114, 115, 91, 45, 51, 93, 32, 36, 50, 44, 49, 44, > 48, 46, 53, 44, 48, 46, 53, 32, 45, 101, 113, 91, 45, 50, 93, 32, > 48, 32, 45, 42, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, > 109, 91, 45, 50, 93, 10, 45, 115, 109, 111, 111, 116, 104, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 123, 36, 49, 42, 56, 48, 125, 44, 48, > 46, 56, 44, 54, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 108, 97, 98, 56, 50, > 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 103, 98, 50, 115, 114, 103, > 98, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 103, > 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, > 32, 99, 32, 45, 105, 91, 50, 93, 32, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 49, 44, 49, 32, 45, 105, 91, 51, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 50, 44, 48, 32, 45, > 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 97, 91, 94, 48, 93, 32, > 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 32, 45, 114, 118, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 10, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 114, 101, 99, 111, 108, 111, 114, 105, 122, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 114, 101, 99, 111, 108, 111, 114, 105, 122, 101, 32, 36, 42, 32, > 45, 97, 32, 120, 10, 103, 105, 109, 112, 95, 98, 119, 114, 101, 99, 111, > 108, 111, 114, 105, 122, 101, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 36, 52, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 53, 61, 61, 48, 125, 10, 40, 36, 123, 57, > 45, 45, 50, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 52, 44, 36, > 56, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, 114, 109, 117, 116, > 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 53, 61, 61, 49, 125, 10, 40, 48, 44, 50, 53, 53, 94, > 48, 44, 50, 53, 53, 94, 48, 44, 50, 53, 53, 94, 50, 53, 53, 44, > 50, 53, 53, 41, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, > 50, 125, 10, 40, 50, 53, 53, 44, 48, 94, 50, 53, 53, 44, 48, 94, > 50, 53, 53, 44, 48, 94, 50, 53, 53, 44, 50, 53, 53, 41, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 51, 125, 10, 40, 48, 44, > 52, 52, 44, 49, 49, 53, 44, 49, 52, 51, 44, 49, 57, 54, 44, 50, > 52, 52, 94, 48, 44, 50, 48, 44, 56, 52, 44, 49, 49, 57, 44, 49, > 56, 52, 44, 50, 51, 53, 94, 48, 44, 53, 44, 52, 52, 44, 55, 51, > 44, 49, 52, 52, 44, 50, 48, 48, 94, 50, 53, 53, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, > 41, 10, 45, 101, 108, 115, 101, 10, 40, 48, 44, 51, 53, 57, 94, 49, > 44, 49, 94, 49, 44, 49, 94, 50, 53, 53, 44, 50, 53, 53, 41, 32, > 45, 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 52, > 44, 51, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, > 104, 115, 118, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 36, 54, 61, 61, 48, 125, 32, 45, 114, 91, 45, 49, 93, 32, 50, 53, > 54, 44, 49, 44, 49, 44, 52, 44, 49, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 54, 61, 61, 49, 125, 32, 45, 114, 91, 45, 49, 93, 32, 50, > 53, 54, 44, 49, 44, 49, 44, 52, 44, 51, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 114, 91, 45, 49, 93, 32, > 50, 53, 54, 44, 49, 44, 49, 44, 52, 44, 53, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, > 114, 91, 45, 49, 93, 32, 50, 53, 54, 44, 49, 44, 49, 44, 52, 44, > 54, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 55, > 61, 61, 49, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, > 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 45, 102, 91, 45, 49, 93, > 32, 120, 47, 119, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, 50, > 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 108, 91, 94, 45, 49, 93, 32, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 32, 45, 97, 112, 112, 108, 121, 95, 103, 97, > 109, 109, 97, 32, 123, 49, 48, 94, 36, 49, 125, 32, 45, 45, 32, 49, > 50, 56, 32, 45, 42, 32, 36, 50, 32, 45, 43, 32, 123, 36, 51, 43, > 49, 50, 56, 125, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, > 110, 100, 108, 32, 45, 109, 97, 112, 91, 94, 45, 49, 93, 32, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, > 98, 119, 114, 101, 99, 111, 108, 111, 114, 105, 122, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 98, 119, 114, 101, 99, 111, 108, 111, 114, 105, 122, 101, 32, 36, > 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, > 105, 116, 104, 101, 114, 101, 100, 98, 119, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, > 48, 93, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 110, > 32, 48, 44, 50, 53, 53, 32, 45, 97, 112, 112, 108, 121, 95, 103, 97, > 109, 109, 97, 32, 123, 49, 48, 94, 36, 49, 125, 32, 45, 45, 32, 49, > 50, 56, 32, 45, 42, 32, 36, 50, 32, 45, 43, 32, 49, 50, 56, 32, > 45, 43, 32, 36, 51, 32, 45, 98, 32, 36, 52, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 32, 45, 100, 105, 116, 104, 101, 114, 101, 100, 98, 119, > 10, 45, 105, 102, 32, 123, 36, 53, 124, 124, 36, 54, 125, 32, 45, 47, > 32, 50, 53, 53, 32, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 50, 32, 45, 102, 99, 91, 48, 93, 32, > 36, 53, 44, 36, 54, 32, 45, 97, 32, 99, 32, 45, 104, 115, 118, 50, > 114, 103, 98, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 100, 105, 116, 104, 101, 114, 101, 100, 98, > 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 100, 105, 116, 104, 101, 114, 101, 100, 98, > 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 104, > 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, 32, 58, 10, 45, 98, > 32, 36, 51, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 52, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 45, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, > 32, 36, 49, 44, 36, 50, 44, 36, 52, 44, 36, 53, 44, 36, 54, 32, > 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, 105, 103, 104, 116, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 101, > 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 104, 97, 114, > 100, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 49, 44, 36, 50, 44, > 36, 52, 44, 36, 53, 44, 36, 54, 10, 45, 105, 102, 32, 123, 36, 55, > 38, 49, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 50, 125, > 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, > 91, 36, 62, 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, > 45, 50, 32, 45, 43, 91, 45, 49, 93, 32, 123, 50, 42, 50, 53, 53, > 125, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 55, 61, 61, 51, 125, 32, 45, 114, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 51, > 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 104, 97, 114, 100, 115, 107, 101, 116, 99, 104, 98, > 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 104, > 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 58, 10, 45, > 98, 32, 36, 49, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 105, > 102, 32, 123, 36, 54, 61, 61, 52, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 45, 104, 111, > 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, 50, 45, > 53, 125, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, 105, > 103, 104, 116, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, > 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, > 50, 45, 53, 125, 10, 45, 105, 102, 32, 123, 36, 54, 38, 49, 125, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 114, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, > 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 45, 50, 32, 45, > 43, 91, 45, 49, 93, 32, 123, 50, 42, 50, 53, 53, 125, 32, 45, 99, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 54, 61, 61, 51, 125, 32, 45, 114, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 51, 44, 51, 32, 45, > 42, 91, 45, 49, 93, 32, 50, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 104, > 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 104, 111, 117, 103, 104, 115, 107, 101, 116, 99, 104, 98, 119, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 105, 110, 107, > 95, 119, 97, 115, 104, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, > 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 48, 44, 48, 44, 48, 10, 45, 105, > 102, 32, 123, 36, 51, 61, 61, 49, 125, 32, 45, 99, 111, 110, 116, 105, > 110, 117, 101, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 48, > 125, 32, 45, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, 111, > 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 91, 45, 49, > 93, 32, 54, 48, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 49, 46, > 49, 44, 48, 46, 56, 44, 51, 48, 44, 50, 44, 48, 44, 49, 44, 49, > 44, 48, 44, 49, 44, 49, 54, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, > 50, 44, 54, 44, 53, 44, 50, 52, 44, 49, 44, 48, 44, 50, 53, 53, > 10, 9, 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 50, 125, 32, > 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, > 108, 91, 45, 49, 93, 32, 50, 44, 54, 44, 53, 44, 50, 52, 44, 49, > 44, 48, 44, 50, 53, 53, 32, 45, 103, 105, 109, 112, 95, 99, 111, 110, > 116, 114, 97, 115, 116, 95, 115, 119, 109, 32, 50, 44, 48, 44, 48, 46, > 53, 49, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 51, > 125, 32, 45, 103, 105, 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 91, 45, 49, 93, 32, 36, 56, 44, 36, > 57, 44, 36, 49, 48, 44, 36, 49, 49, 44, 49, 44, 51, 44, 48, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 32, 58, 10, 45, 112, > 101, 110, 99, 105, 108, 98, 119, 32, 36, 49, 44, 36, 50, 10, 45, 105, > 102, 32, 123, 36, 51, 124, 124, 36, 52, 125, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 47, 91, 48, > 93, 32, 50, 53, 53, 32, 45, 105, 91, 48, 93, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 36, 52, 32, 45, 105, 91, > 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 44, 36, 51, 32, 45, 97, 91, 48, 45, 50, 93, 32, 99, 32, 45, 104, > 115, 118, 50, 114, 103, 98, 91, 48, 93, 10, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, 98, 119, 32, 36, 42, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, > 108, 95, 112, 111, 114, 116, 114, 97, 105, 116, 98, 119, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 108, 91, 48, 93, 10, 45, 45, 98, 32, 50, 37, 10, 45, 45, 98, > 108, 101, 110, 100, 32, 100, 105, 118, 105, 100, 101, 32, 45, 114, 109, 91, > 45, 50, 93, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 45, > 49, 93, 10, 45, 103, 105, 109, 112, 95, 105, 110, 107, 95, 119, 97, 115, > 104, 91, 45, 50, 93, 32, 48, 44, 49, 54, 55, 44, 48, 44, 48, 46, > 53, 44, 48, 46, 53, 52, 44, 50, 46, 50, 53, 44, 48, 44, 50, 44, > 54, 44, 53, 44, 50, 48, 10, 45, 45, 103, 105, 109, 112, 95, 104, 97, > 114, 100, 115, 107, 101, 116, 99, 104, 98, 119, 91, 45, 49, 93, 32, 56, > 48, 44, 51, 50, 44, 49, 46, 56, 57, 44, 48, 46, 50, 49, 44, 51, > 49, 46, 52, 54, 44, 48, 44, 48, 10, 45, 45, 103, 105, 109, 112, 95, > 115, 107, 101, 116, 99, 104, 98, 119, 91, 45, 50, 93, 32, 49, 44, 36, > 50, 44, 49, 56, 48, 44, 36, 49, 44, 36, 51, 44, 48, 46, 48, 51, > 44, 48, 44, 48, 46, 54, 44, 48, 46, 49, 44, 48, 46, 54, 44, 48, > 46, 50, 53, 44, 49, 44, 48, 44, 49, 44, 48, 10, 45, 98, 108, 101, > 110, 100, 91, 48, 44, 49, 93, 32, 100, 97, 114, 107, 101, 110, 10, 45, > 98, 108, 101, 110, 100, 91, 48, 44, 49, 93, 32, 109, 117, 108, 116, 105, > 112, 108, 121, 44, 48, 46, 53, 10, 45, 98, 108, 101, 110, 100, 91, 48, > 44, 49, 93, 32, 108, 105, 103, 104, 116, 101, 110, 44, 36, 52, 10, 45, > 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 32, > 44, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 45, 102, 99, 32, 36, > 123, 53, 45, 55, 125, 32, 45, 98, 108, 101, 110, 100, 32, 115, 111, 102, > 116, 108, 105, 103, 104, 116, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 112, 101, 110, 99, 105, 108, 95, 112, 111, 114, 116, 114, 97, > 105, 116, 98, 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 101, 110, 99, 105, 108, > 95, 112, 111, 114, 116, 114, 97, 105, 116, 98, 119, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 107, 101, 116, 99, 104, 98, > 119, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 53, 61, 61, 52, 125, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 45, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, > 49, 45, 49, 52, 125, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, > 100, 108, 105, 103, 104, 116, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 115, 107, 101, 116, 99, 104, 98, 119, 32, 36, 123, 49, 45, > 49, 52, 125, 10, 45, 105, 102, 32, 123, 36, 49, 53, 38, 49, 125, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 53, 61, 61, 50, 125, 32, 45, 114, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, > 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 45, 50, 32, > 45, 43, 91, 45, 49, 93, 32, 123, 50, 42, 50, 53, 53, 125, 32, 45, > 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 53, 61, 61, 51, 125, 32, 45, 114, 32, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 51, 44, 51, > 32, 45, 42, 91, 45, 49, 93, 32, 50, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 115, 107, 101, 116, 99, 104, 98, 119, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, > 107, 101, 116, 99, 104, 98, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 115, 116, 97, 109, 112, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 110, > 111, 114, 109, 32, 45, 110, 111, 105, 115, 101, 32, 36, 53, 10, 45, 105, > 102, 32, 36, 49, 32, 45, 111, 116, 115, 117, 32, 50, 53, 54, 32, 45, > 101, 108, 115, 101, 32, 45, 103, 101, 32, 36, 50, 37, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 98, 32, 36, 51, 44, 48, 32, 45, 115, 104, 97, > 114, 112, 101, 110, 32, 36, 52, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 49, 44, > 48, 44, 48, 44, 49, 48, 49, 44, 51, 51, 44, 49, 55, 48, 44, 50, > 50, 57, 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, > 54, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 115, 116, 97, 109, 112, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 115, 116, 97, 109, 112, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 95, 97, 98, 115, > 116, 114, 97, 99, 116, 105, 111, 110, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, > 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 98, 32, 36, 49, 32, > 45, 115, 32, 99, 32, 45, 113, 117, 97, 110, 116, 105, 122, 101, 32, 36, > 50, 44, 49, 44, 48, 32, 45, 97, 114, 101, 97, 32, 48, 32, 45, 94, > 32, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, > 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 95, 97, > 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 99, 111, 108, 111, 114, 95, 97, 98, 115, 116, 114, 97, 99, 116, 105, 111, > 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 98, > 111, 111, 115, 116, 95, 102, 97, 100, 101, 32, 58, 10, 45, 105, 91, 48, > 93, 32, 54, 52, 48, 44, 52, 56, 48, 44, 49, 44, 51, 32, 45, 114, > 97, 110, 100, 91, 48, 93, 32, 48, 44, 49, 32, 45, 98, 91, 48, 93, > 32, 123, 49, 48, 45, 36, 49, 125, 32, 45, 110, 91, 48, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, > 111, 108, 111, 114, 115, 32, 45, 114, 109, 91, 48, 93, 10, 103, 105, 109, > 112, 95, 98, 111, 111, 115, 116, 95, 102, 97, 100, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 98, 111, 111, 115, 116, 95, 102, 97, 100, 101, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 99, 104, 97, 110, 110, > 101, 108, 95, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, 109, 97, 91, 45, 49, 93, > 32, 123, 49, 48, 94, 36, 49, 125, 10, 45, 105, 102, 32, 123, 36, 50, > 33, 61, 49, 125, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, > 45, 42, 91, 45, 49, 93, 32, 36, 50, 32, 45, 43, 91, 45, 49, 93, > 32, 49, 50, 56, 32, 45, 101, 110, 100, 105, 102, 10, 45, 43, 91, 45, > 49, 93, 32, 36, 51, 10, 45, 98, 91, 45, 49, 93, 32, 36, 52, 37, > 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, > 102, 32, 123, 36, 53, 61, 61, 49, 125, 32, 45, 99, 91, 45, 49, 93, > 32, 36, 54, 37, 44, 36, 55, 37, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 53, 61, 61, 50, 125, 32, 45, 99, 91, 45, 49, 93, 32, 36, 54, > 37, 44, 36, 55, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 51, 125, > 32, 45, 110, 91, 45, 49, 93, 32, 36, 54, 37, 44, 36, 55, 37, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 52, 125, 32, 45, 116, > 50, 91, 45, 49, 93, 32, 36, 54, 37, 44, 36, 55, 37, 32, 45, 42, > 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 102, 32, 123, 36, 56, 33, 61, 50, 53, 54, 125, 32, 45, 113, > 117, 97, 110, 116, 105, 122, 101, 91, 45, 49, 93, 32, 36, 56, 44, 49, > 44, 48, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 57, > 32, 45, 101, 113, 117, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 49, 48, 32, 45, 110, > 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 99, 104, 97, 110, 110, 101, 108, 95, > 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, > 118, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, > 105, 109, 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, 32, 36, 49, > 49, 44, 36, 49, 50, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 34, 45, 95, 103, 105, 109, > 112, 95, 99, 104, 97, 110, 110, 101, 108, 95, 112, 114, 111, 99, 101, 115, > 115, 105, 110, 103, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, > 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 44, 36, 57, 44, > 36, 49, 48, 34, 44, 36, 49, 51, 44, 48, 10, 45, 103, 105, 109, 112, > 95, 101, 110, 100, 95, 109, 105, 120, 32, 36, 49, 49, 10, 45, 105, 102, > 32, 123, 64, 35, 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, > 99, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 99, 104, 97, 110, 110, 101, 108, 95, 112, 114, 111, 99, > 101, 115, 115, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 104, 97, 110, > 110, 101, 108, 95, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 98, 97, 108, 97, > 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 58, 10, 45, 98, 97, 108, > 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 36, 123, 49, 45, 51, > 125, 10, 45, 105, 102, 32, 36, 52, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 32, > 45, 115, 32, 99, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, > 109, 109, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 98, 97, 108, 97, 110, 99, 101, > 95, 103, 97, 109, 109, 97, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 10, 45, 105, 102, 32, 123, > 36, 49, 62, 61, 50, 125, 10, 45, 105, 110, 100, 101, 120, 91, 48, 93, > 32, 123, 36, 49, 45, 50, 125, 44, 36, 50, 44, 49, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 40, 36, 123, 53, 45, > 50, 56, 125, 41, 32, 45, 122, 91, 45, 49, 93, 32, 48, 44, 123, 51, > 42, 36, 52, 45, 49, 125, 10, 45, 114, 91, 45, 49, 93, 32, 51, 44, > 123, 119, 47, 51, 125, 44, 49, 44, 49, 44, 45, 49, 32, 45, 112, 101, > 114, 109, 117, 116, 101, 91, 45, 49, 93, 32, 121, 122, 99, 120, 32, 45, > 114, 91, 45, 49, 93, 32, 36, 51, 44, 49, 44, 49, 44, 51, 44, 51, > 10, 45, 105, 110, 100, 101, 120, 91, 48, 93, 32, 91, 45, 49, 93, 44, > 36, 50, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, > 115, 101, 10, 45, 97, 117, 116, 111, 105, 110, 100, 101, 120, 91, 48, 93, > 32, 36, 51, 44, 36, 50, 44, 123, 105, 102, 40, 36, 51, 60, 61, 51, > 50, 44, 49, 44, 48, 41, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 109, 97, 112, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 99, 111, 108, 111, 114, 109, 97, 112, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 123, 49, 45, 49, > 51, 125, 34, 44, 36, 49, 52, 44, 36, 49, 53, 10, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 49, 51, > 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, > 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, > 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, > 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, > 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, > 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, > 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 50, 53, 53, 44, 36, 49, 50, 10, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, > 49, 51, 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, > 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, > 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, > 102, 32, 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, > 36, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, > 44, 36, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 56, 44, 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, > 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, > 34, 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, > 32, 36, 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, > 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, > 92, 10, 50, 53, 53, 44, 36, 49, 50, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 10, 45, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 44, 50, 53, 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 32, > 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, > 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, 51, > 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, > 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, > 44, 45, 49, 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 49, > 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, > 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 108, > 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, > 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, 50, > 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 32, 45, 116, 111, 95, 103, > 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, > 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 32, 45, 110, 101, > 113, 91, 45, 49, 93, 32, 48, 32, 45, 42, 91, 45, 49, 93, 32, 50, > 53, 53, 32, 45, 114, 109, 91, 45, 51, 93, 10, 45, 45, 120, 111, 114, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 106, 91, 45, 51, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, 49, 54, 44, > 91, 45, 50, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 50, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 50, 53, > 53, 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, > 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, > 45, 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, > 45, 50, 44, 45, 49, 93, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 48, 44, 36, 49, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 50, 44, 36, 51, 44, 49, 10, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 52, 44, 36, 53, 44, 50, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 54, 44, 36, 55, 44, > 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 56, 44, > 36, 57, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 36, 49, 48, 44, 36, 49, 49, 44, 53, 10, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 49, 50, 44, 54, 10, 45, > 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, > 114, 109, 91, 48, 93, 10, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 105, 102, 32, 123, 36, 49, 62, 61, 48, 125, 10, 120, 61, > 123, 36, 49, 42, 49, 48, 48, 47, 50, 53, 53, 125, 37, 32, 121, 61, > 123, 49, 48, 48, 45, 36, 50, 42, 49, 48, 48, 47, 50, 53, 53, 125, > 37, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, > 120, 44, 36, 121, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 32, 45, 101, > 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, 36, 120, 44, 36, 121, > 44, 50, 44, 50, 44, 48, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, > 10, 45, 116, 91, 45, 49, 93, 32, 36, 51, 44, 36, 120, 44, 123, 36, > 121, 42, 104, 45, 50, 48, 125, 44, 49, 51, 44, 49, 44, 50, 53, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 32, 58, 32, 45, 115, > 107, 105, 112, 32, 36, 49, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, > 105, 103, 102, 105, 108, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, > 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, 10, > 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 48, 93, > 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 125, 10, 45, 115, 104, 91, > 48, 93, 32, 48, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 91, 45, 49, 93, > 32, 64, 123, 45, 50, 44, 48, 45, 49, 50, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, > 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 49, 51, > 45, 50, 53, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 48, 93, 32, 50, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 91, 45, 49, > 93, 32, 64, 123, 45, 50, 44, 50, 54, 45, 51, 56, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 49, > 51, 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, > 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, > 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, > 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, > 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, > 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, > 36, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, > 44, 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 50, 53, 53, 44, 36, 49, 50, 10, 45, 99, 32, 48, 44, 50, 53, > 53, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, > 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, > 104, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 32, 45, 102, > 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 48, 44, 36, 123, 45, > 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 71, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, > 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 49, 44, 49, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, > 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 91, 94, 45, > 49, 93, 32, 64, 45, 49, 44, 49, 44, 36, 123, 45, 50, 44, 45, 49, > 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 66, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, > 103, 102, 105, 108, 101, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, > 50, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, 36, 123, 49, > 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, > 45, 49, 44, 50, 44, 36, 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 82, 71, 66, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, > 102, 105, 108, 101, 32, 58, 10, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 46, 103, 109, > 105, 99, 95, 82, 71, 66, 99, 117, 114, 118, 101, 46, 100, 108, 109, 10, > 45, 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 36, 102, > 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 32, 40, 48, > 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, > 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, > 49, 50, 56, 44, 50, 53, 53, 44, 49, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 48, 48, 37, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 82, 71, 66, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 40, 36, > 123, 49, 45, 45, 51, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, 49, > 51, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 111, 91, 45, 49, > 93, 32, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 46, > 103, 109, 105, 99, 95, 82, 71, 66, 99, 117, 114, 118, 101, 46, 100, 108, > 109, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 102, 117, 110, 99, 116, > 105, 111, 110, 49, 100, 32, 36, 49, 51, 44, 48, 44, 36, 49, 44, 92, > 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, 101, 108, 115, 101, 32, > 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, > 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 52, 62, 61, 48, 125, > 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, 45, 101, 108, 115, 101, > 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, > 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 54, 62, 61, 48, > 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 56, 62, 61, > 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 48, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, 44, 36, 49, 49, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, 44, 36, 49, 50, > 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, 50, 54, > 44, 48, 44, 36, 49, 52, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 49, 53, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 53, 44, > 36, 49, 54, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 49, 55, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 49, 55, 44, 36, 49, 56, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 57, 62, 61, 48, 125, > 32, 45, 117, 32, 36, 49, 57, 44, 36, 50, 48, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 49, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 49, 44, 36, 50, 50, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 50, 51, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 51, 44, > 36, 50, 52, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, > 44, 36, 50, 53, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, > 32, 36, 51, 57, 44, 48, 44, 36, 50, 55, 44, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 50, 56, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 50, 56, 44, 36, 50, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 48, 62, 61, 48, 125, > 32, 45, 117, 32, 36, 51, 48, 44, 36, 51, 49, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 50, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 50, 44, 36, 51, 51, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 51, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 52, 44, > 36, 51, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 51, 54, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 51, 54, 44, 36, 51, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, > 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, > 10, 50, 53, 53, 44, 36, 51, 56, 10, 45, 97, 91, 45, 51, 45, 45, > 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 82, 71, 66, 99, 117, 114, 118, 101, 32, 48, 34, 44, > 36, 45, 49, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, > 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, 50, 53, > 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 114, 91, 45, > 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, 51, 93, 32, 91, > 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 91, 45, > 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 49, 48, 37, 44, > 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, > 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 108, 105, 110, 101, > 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, > 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, 50, 10, 91, 45, > 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 49, 44, 45, 123, 36, 45, > 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 116, 111, 95, 103, > 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, 116, 111, 103, 114, > 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, 44, 50, 53, 53, > 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 45, 51, 93, > 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, 45, 114, 109, > 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, 45, 50, > 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, > 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, 48, 46, > 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, > 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 44, 48, 44, 48, 10, > 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 50, 53, 53, 44, > 49, 50, 56, 44, 49, 50, 56, 32, 45, 45, 91, 45, 49, 93, 32, 49, > 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, 44, 50, > 48, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 48, 93, 32, 49, 44, 49, 44, 48, 44, 48, 10, 45, 103, > 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, > 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 49, 50, 56, 44, 50, 53, > 53, 44, 49, 50, 56, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, 45, > 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, > 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, 44, 48, 44, 50, > 48, 48, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, > 91, 48, 93, 32, 50, 44, 50, 44, 48, 44, 48, 10, 45, 103, 114, 97, > 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, > 50, 53, 53, 44, 48, 44, 49, 44, 49, 50, 56, 44, 49, 50, 56, 44, > 50, 53, 53, 32, 45, 45, 91, 45, 49, 93, 32, 49, 10, 45, 103, 114, > 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, 44, 48, 44, 48, 44, 50, > 48, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 105, 102, 32, 123, > 36, 52, 48, 61, 61, 48, 125, 10, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 48, 44, 36, 49, 44, 48, 32, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 36, 50, 44, 36, 51, 44, 49, 10, 45, 95, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 36, 52, 44, 36, 53, 44, 50, 32, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 54, 44, 36, 55, > 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 56, > 44, 36, 57, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 49, 48, 44, 36, 49, 49, 44, 53, 10, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 49, 50, 44, 54, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 52, 48, 61, 61, 49, 125, 10, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 49, 52, 44, > 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 53, > 44, 36, 49, 54, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 36, 49, 55, 44, 36, 49, 56, 44, 50, 32, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 49, 57, 44, 36, 50, 48, 44, 51, > 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 49, 44, > 36, 50, 50, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 50, 51, 44, 36, 50, 52, 44, 53, 10, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 50, 53, 44, 54, 10, > 45, 101, 108, 115, 101, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 48, 44, 36, 50, 55, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 50, 56, 44, 36, 50, 57, 44, 49, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 48, 44, 36, 51, 49, > 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, > 50, 44, 36, 51, 51, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 51, 52, 44, 36, 51, 53, 44, 52, 32, 45, 95, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 54, 44, 36, 51, 55, 44, > 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, 53, > 44, 36, 51, 56, 44, 54, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 48, 93, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 36, 49, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 99, 111, 110, > 102, 105, 103, 102, 105, 108, 101, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, > 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 48, > 93, 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 125, 32, 45, 115, 104, > 91, 48, 93, 32, 48, 44, 50, 32, 45, 114, 103, 98, 50, 121, 99, 98, > 99, 114, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 48, 93, 32, 48, 44, 48, 32, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, > 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 48, 45, 49, 50, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, > 49, 44, 49, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, > 64, 123, 45, 50, 44, 49, 51, 45, 50, 53, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 50, 44, 50, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, > 114, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, > 50, 54, 45, 51, 56, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 115, 104, 91, 48, 93, 32, 48, 44, 50, 32, 45, 121, 99, 98, 99, 114, > 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, > 91, 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 32, 36, 49, 51, 44, 48, > 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, > 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, > 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, > 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, > 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, > 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, > 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, > 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, > 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, > 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, > 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, > 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, > 53, 44, 36, 49, 50, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, > 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 32, 45, 102, 91, > 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 48, 44, 36, 123, > 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 67, 98, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, > 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, > 104, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 48, 32, 45, 102, > 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 49, 44, 36, > 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 67, 114, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, > 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, > 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 44, 48, 44, 48, 32, 45, > 102, 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 50, 44, > 36, 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, > 114, 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, > 101, 32, 58, 10, 102, 105, 108, 101, 110, 97, 109, 101, 61, 64, 123, 45, > 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, 46, 103, 109, 105, 99, 95, > 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, 46, 100, 108, 109, 10, 45, > 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, 32, 40, 48, 44, > 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, > 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, > 50, 56, 44, 50, 53, 53, 44, 49, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 49, 48, 48, 37, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 40, > 36, 123, 49, 45, 45, 51, 125, 41, 32, 45, 114, 91, 45, 49, 93, 32, > 49, 51, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 111, 91, 45, > 49, 93, 32, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, > 46, 103, 109, 105, 99, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, 101, > 46, 100, 108, 109, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 102, 117, > 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, 49, 51, 44, 48, 44, 36, > 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 62, 61, > 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 52, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, > 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 54, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, 32, 45, > 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, > 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, > 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, 44, 36, > 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, 44, > 36, 49, 50, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 36, 50, 54, 44, 48, 44, 36, 49, 52, 44, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 49, 53, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 49, 53, 44, 36, 49, 54, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 55, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 49, 55, 44, 36, 49, 56, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 57, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 49, 57, 44, 36, 50, 48, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 50, 49, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 49, 44, 36, > 50, 50, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 50, 51, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 50, 51, 44, 36, 50, 52, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 50, 53, 53, 44, 36, 50, 53, 10, 45, 102, 117, 110, 99, 116, 105, 111, > 110, 49, 100, 32, 36, 51, 57, 44, 48, 44, 36, 50, 55, 44, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 56, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 50, 56, 44, 36, 50, 57, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 48, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 51, 48, 44, 36, 51, 49, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 51, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 50, 44, 36, > 51, 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 51, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 51, 52, 44, 36, 51, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 54, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 51, 54, 44, 36, 51, 55, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 50, 53, 53, 44, 36, 51, 56, 10, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, > 10, 45, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 89, 67, 98, 67, 114, 99, 117, 114, 118, > 101, 32, 48, 34, 44, 36, 45, 49, 10, 45, 97, 120, 101, 115, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 49, > 51, 44, 49, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 32, 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, > 32, 45, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, > 45, 114, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, > 51, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 49, 44, 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 50, 44, 45, 49, 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, > 49, 48, 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, > 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, > 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, > 50, 10, 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 49, 44, > 45, 123, 36, 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, > 116, 111, 95, 103, 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, > 116, 111, 103, 114, 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, > 44, 50, 53, 53, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, > 91, 45, 51, 93, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, > 10, 45, 114, 109, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, > 123, 36, 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, > 50, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, > 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, > 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, > 44, 50, 53, 53, 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 44, > 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, > 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 46, 53, 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, > 49, 44, 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, > 49, 44, 49, 50, 56, 44, 49, 50, 56, 44, 50, 53, 53, 32, 45, 45, > 91, 45, 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, > 44, 48, 46, 53, 44, 48, 44, 48, 44, 50, 48, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 50, 44, 50, 44, > 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, > 50, 53, 53, 44, 49, 50, 56, 44, 49, 50, 56, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 46, 53, 44, 50, 48, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 123, 36, 52, 48, 61, 61, 48, 125, 10, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 49, 44, > 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 44, > 36, 51, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 36, 52, 44, 36, 53, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 54, 44, 36, 55, 44, 51, 10, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 36, 56, 44, 36, 57, 44, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 48, 44, 36, 49, 49, > 44, 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, > 53, 44, 36, 49, 50, 44, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 52, 48, 61, 61, 49, 125, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 48, 44, 36, 49, 52, 44, 48, 32, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 36, 49, 53, 44, 36, 49, 54, 44, 49, 10, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 55, 44, 36, 49, > 56, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, > 49, 57, 44, 36, 50, 48, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 50, 49, 44, 36, 50, 50, 44, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 51, 44, 36, 50, 52, > 44, 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, > 53, 44, 36, 50, 53, 44, 54, 10, 45, 101, 108, 115, 101, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 50, 55, 44, 48, > 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 56, 44, > 36, 50, 57, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 51, 48, 44, 36, 51, 49, 44, 50, 32, 45, 95, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 36, 51, 50, 44, 36, 51, 51, 44, 51, 10, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 52, 44, 36, > 51, 53, 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 36, 51, 54, 44, 36, 51, 55, 44, 53, 10, 45, 95, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 50, 53, 53, 44, 36, 51, 56, 44, 54, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, > 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 10, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 49, 10, 45, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, > 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, 62, > 44, 45, 49, 93, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, > 100, 101, 91, 48, 93, 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 125, > 32, 45, 115, 104, 91, 48, 93, 32, 48, 44, 50, 32, 45, 114, 103, 98, > 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, > 49, 93, 32, 50, 46, 53, 53, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 91, 45, 49, > 93, 32, 64, 123, 45, 50, 44, 48, 45, 49, 50, 125, 32, 45, 47, 91, > 45, 49, 93, 32, 50, 46, 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, 45, 43, 91, 45, > 49, 93, 32, 56, 54, 32, 45, 42, 91, 45, 49, 93, 32, 49, 46, 51, > 56, 53, 56, 55, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, > 123, 45, 50, 44, 49, 51, 45, 50, 53, 125, 32, 45, 47, 91, 45, 49, > 93, 32, 49, 46, 51, 56, 53, 56, 55, 32, 45, 45, 91, 45, 49, 93, > 32, 56, 54, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, > 48, 93, 32, 50, 44, 50, 32, 45, 43, 91, 45, 49, 93, 32, 49, 48, > 56, 32, 45, 42, 91, 45, 49, 93, 32, 49, 46, 50, 53, 54, 49, 54, > 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, > 98, 99, 117, 114, 118, 101, 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, > 50, 54, 45, 51, 56, 125, 32, 45, 47, 91, 45, 49, 93, 32, 49, 46, > 50, 53, 54, 49, 54, 32, 45, 45, 91, 45, 49, 93, 32, 49, 48, 56, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, > 48, 44, 50, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, 93, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, > 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 32, 36, 49, 51, 44, 48, 44, 36, 49, 44, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, > 44, 36, 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, > 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, > 45, 105, 102, 32, 123, 36, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 52, 44, 36, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, > 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, > 34, 45, 105, 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 117, 32, > 36, 54, 44, 36, 55, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, > 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, > 123, 34, 45, 105, 102, 32, 123, 36, 56, 62, 61, 48, 125, 32, 45, 117, > 32, 36, 56, 44, 36, 57, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 49, 48, 44, 36, 49, 49, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 50, 53, 53, 44, 36, 49, 50, 10, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 76, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, > 99, 117, 114, 118, 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, > 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 48, 44, > 36, 123, 45, 50, 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 97, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, > 101, 95, 99, 111, 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, 48, 32, 45, 102, 91, > 45, 49, 93, 32, 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 76, 97, 98, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 91, 94, 45, 49, 93, 32, 64, 45, 49, 44, 49, 44, 36, 123, 45, 50, > 44, 45, 49, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, > 112, 95, 97, 112, 112, 108, 121, 95, 98, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 95, 99, 111, > 110, 102, 105, 103, 102, 105, 108, 101, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 50, 44, 50, 44, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, > 36, 123, 49, 45, 45, 51, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 91, 94, 45, 49, > 93, 32, 64, 45, 49, 44, 50, 44, 36, 123, 45, 50, 44, 45, 49, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 95, 99, 111, 110, > 102, 105, 103, 102, 105, 108, 101, 32, 58, 10, 102, 105, 108, 101, 110, 97, > 109, 101, 61, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, 125, 47, > 46, 103, 109, 105, 99, 95, 76, 97, 98, 99, 117, 114, 118, 101, 46, 100, > 108, 109, 10, 45, 105, 102, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, > 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 32, 45, 101, 108, 115, 101, > 32, 40, 48, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, > 56, 44, 45, 49, 44, 49, 50, 56, 44, 45, 49, 44, 49, 50, 56, 44, > 45, 49, 44, 49, 50, 56, 44, 50, 53, 53, 44, 49, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 51, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 76, 97, > 98, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 40, 36, 123, 49, 45, 45, 51, 125, 41, 32, 45, 114, 91, 45, 49, > 93, 32, 49, 51, 44, 51, 44, 49, 44, 49, 44, 45, 49, 32, 45, 111, > 91, 45, 49, 93, 32, 64, 123, 45, 112, 97, 116, 104, 95, 116, 109, 112, > 125, 47, 46, 103, 109, 105, 99, 95, 76, 97, 98, 99, 117, 114, 118, 101, > 46, 100, 108, 109, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 102, 117, > 110, 99, 116, 105, 111, 110, 49, 100, 32, 36, 49, 51, 44, 48, 44, 36, > 49, 44, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 62, 61, > 48, 125, 32, 45, 117, 32, 36, 50, 44, 36, 51, 44, 32, 45, 101, 108, > 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, > 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 52, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 52, 44, 36, 53, 44, 32, 45, 101, > 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, > 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 54, > 62, 61, 48, 125, 32, 45, 117, 32, 36, 54, 44, 36, 55, 44, 32, 45, > 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, > 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, > 56, 62, 61, 48, 125, 32, 45, 117, 32, 36, 56, 44, 36, 57, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 49, 48, 62, 61, 48, 125, 32, 45, 117, 32, 36, 49, 48, 44, 36, > 49, 49, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 50, 53, 53, 44, > 36, 49, 50, 10, 45, 102, 117, 110, 99, 116, 105, 111, 110, 49, 100, 32, > 36, 50, 54, 44, 48, 44, 36, 49, 52, 44, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 49, 53, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 49, 53, 44, 36, 49, 54, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 55, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 49, 55, 44, 36, 49, 56, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 49, 57, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 49, 57, 44, 36, 50, 48, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 50, 49, 62, 61, 48, 125, 32, 45, 117, 32, 36, 50, 49, 44, 36, > 50, 50, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 50, 51, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 50, 51, 44, 36, 50, 52, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 50, 53, 53, 44, 36, 50, 53, 10, 45, 102, 117, 110, 99, 116, 105, 111, > 110, 49, 100, 32, 36, 51, 57, 44, 48, 44, 36, 50, 55, 44, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 50, 56, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 50, 56, 44, 36, 50, 57, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 48, 62, > 61, 48, 125, 32, 45, 117, 32, 36, 51, 48, 44, 36, 51, 49, 44, 32, > 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, > 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, 105, 102, 32, 123, > 36, 51, 50, 62, 61, 48, 125, 32, 45, 117, 32, 36, 51, 50, 44, 36, > 51, 51, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, 32, 92, 34, 92, > 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, 64, 123, 34, 45, > 105, 102, 32, 123, 36, 51, 52, 62, 61, 48, 125, 32, 45, 117, 32, 36, > 51, 52, 44, 36, 51, 53, 44, 32, 45, 101, 108, 115, 101, 32, 45, 117, > 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, 34, 125, 92, 10, > 64, 123, 34, 45, 105, 102, 32, 123, 36, 51, 54, 62, 61, 48, 125, 32, > 45, 117, 32, 36, 51, 54, 44, 36, 51, 55, 44, 32, 45, 101, 108, 115, > 101, 32, 45, 117, 32, 92, 34, 92, 34, 32, 45, 101, 110, 100, 105, 102, > 34, 125, 92, 10, 50, 53, 53, 44, 36, 51, 56, 10, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 121, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, > 10, 45, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 91, 45, 49, 93, 32, 34, 45, 103, 105, 109, 112, > 95, 97, 112, 112, 108, 121, 95, 76, 97, 98, 99, 117, 114, 118, 101, 32, > 48, 34, 44, 36, 45, 49, 10, 45, 97, 120, 101, 115, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 49, 51, 44, > 49, 44, 50, 53, 53, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 97, 120, 101, 115, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 44, > 50, 53, 53, 44, 48, 44, 49, 51, 44, 49, 44, 50, 53, 53, 32, 45, > 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 32, 45, 114, > 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 106, 91, 45, 51, 93, > 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 49, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 103, 114, 105, 100, 91, 45, 49, 93, 32, 49, 48, > 37, 44, 49, 48, 37, 44, 48, 44, 48, 44, 48, 46, 51, 44, 48, 120, > 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, 53, 53, 10, 45, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 48, 44, 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, > 67, 67, 67, 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 45, 50, 10, > 91, 45, 49, 93, 44, 91, 45, 49, 93, 44, 49, 44, 49, 44, 45, 123, > 36, 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 116, 111, > 95, 103, 114, 97, 121, 91, 45, 51, 93, 32, 45, 104, 105, 115, 116, 111, > 103, 114, 97, 109, 91, 45, 51, 93, 32, 50, 53, 54, 44, 48, 44, 50, > 53, 53, 32, 45, 103, 114, 97, 112, 104, 91, 45, 49, 93, 32, 91, 45, > 51, 93, 44, 51, 44, 48, 44, 48, 44, 48, 44, 49, 44, 48, 10, 45, > 114, 109, 91, 45, 51, 93, 32, 45, 43, 91, 45, 49, 93, 32, 123, 36, > 45, 50, 42, 50, 53, 53, 47, 49, 48, 48, 125, 32, 45, 43, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 45, 50, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 48, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 48, 44, > 48, 46, 51, 44, 48, 120, 67, 67, 67, 67, 67, 67, 67, 67, 44, 50, > 53, 53, 10, 45, 115, 104, 91, 48, 93, 32, 48, 44, 48, 44, 48, 44, > 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 45, 91, 45, 49, 93, > 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, > 44, 50, 48, 48, 44, 50, 48, 48, 44, 50, 48, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 44, > 48, 44, 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, > 50, 53, 53, 44, 49, 50, 56, 44, 49, 50, 56, 32, 45, 45, 91, 45, > 49, 93, 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, > 46, 53, 44, 50, 48, 48, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 50, 44, 50, 44, 48, 44, > 48, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 49, 44, 49, 50, > 56, 44, 49, 50, 56, 44, 50, 53, 53, 32, 45, 45, 91, 45, 49, 93, > 32, 49, 10, 45, 103, 114, 97, 112, 104, 91, 45, 50, 93, 32, 91, 45, > 49, 93, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 46, 53, > 44, 48, 44, 48, 44, 50, 48, 48, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 123, 36, 52, 48, 61, 61, 48, 125, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 49, 44, 48, 32, > 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, > 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 44, 36, 51, > 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 52, > 44, 36, 53, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, > 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 54, 44, 36, 55, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 56, 44, 36, 57, 44, 52, 32, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 49, 48, 44, 36, 49, 49, 44, 53, > 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, > 36, 49, 50, 44, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, 52, 48, > 61, 61, 49, 125, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, > 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 48, 44, 36, 49, 52, 44, 48, 32, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 49, 53, 44, 36, 49, 54, 44, 49, 10, 45, 95, 103, > 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 55, 44, 36, 49, 56, 44, > 50, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, > 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 49, 57, > 44, 36, 50, 48, 44, 51, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, > 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 36, 50, 49, 44, 36, 50, 50, 44, 52, 32, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 50, 51, 44, 36, 50, 52, 44, 53, > 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, > 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 50, 53, 53, 44, > 36, 50, 53, 44, 54, 10, 45, 101, 108, 115, 101, 10, 45, 95, 103, 105, > 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 48, 44, 36, 50, 55, 44, 48, 32, 45, > 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 50, 56, 44, 36, 50, > 57, 44, 49, 10, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, > 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, > 51, 48, 44, 36, 51, 49, 44, 50, 32, 45, 95, 103, 105, 109, 112, 95, > 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 36, 51, 50, 44, 36, 51, 51, 44, 51, 10, 45, 95, > 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, 52, 44, 36, 51, 53, > 44, 52, 32, 45, 95, 103, 105, 109, 112, 95, 97, 112, 112, 108, 121, 95, > 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 36, 51, > 54, 44, 36, 51, 55, 44, 53, 10, 45, 95, 103, 105, 109, 112, 95, 97, > 112, 112, 108, 121, 95, 99, 117, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 50, 53, 53, 44, 36, 51, 56, 44, 54, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, > 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, 10, 103, 105, 109, 112, 95, > 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 58, 10, 45, 105, 102, 32, 123, 33, 36, 50, 125, 10, 45, > 105, 102, 32, 36, 52, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 101, 108, 115, 101, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 45, 49, 93, 10, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, > 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 36, 49, > 91, 48, 93, 10, 45, 115, 91, 48, 93, 32, 99, 32, 45, 105, 102, 32, > 123, 33, 36, 51, 125, 32, 45, 97, 32, 120, 32, 45, 101, 110, 100, 105, > 102, 10, 110, 98, 61, 64, 35, 10, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 36, 110, 98, 45, 45, 49, 93, 32, 48, 32, 45, 100, 111, > 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 48, 32, 110, 98, 99, 61, 123, 51, 43, 40, 36, 49, 61, > 61, 49, 48, 41, 125, 32, 110, 98, 61, 123, 36, 110, 98, 99, 43, 36, > 52, 125, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 36, 110, 98, 41, 125, 32, > 45, 108, 91, 48, 45, 123, 36, 110, 98, 45, 49, 125, 93, 10, 45, 97, > 91, 48, 45, 123, 36, 110, 98, 99, 45, 49, 125, 93, 32, 99, 32, 45, > 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 36, 49, 91, 48, 93, 32, 45, 97, > 32, 99, 10, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, > 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 115, 32, 120, 44, 36, 110, 98, 32, 45, 97, 91, 48, 45, 123, > 36, 110, 98, 99, 45, 49, 125, 93, 32, 99, 32, 45, 95, 103, 105, 109, > 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 36, 49, 91, 48, 93, 32, 45, 97, 32, 99, 10, 45, > 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 36, 123, > 94, 48, 125, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, > 115, 32, 44, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 48, 32, 58, 10, > 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 49, 32, 58, 32, 45, 114, 103, 98, > 50, 104, 115, 118, 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, > 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 50, 32, > 58, 32, 45, 114, 103, 98, 50, 104, 115, 108, 56, 10, 95, 103, 105, 109, > 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 51, 32, 58, 32, 45, 114, 103, 98, 50, 104, 115, 105, > 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 52, 32, 58, 32, 45, 114, > 103, 98, 50, 121, 117, 118, 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, > 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 53, 32, 58, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 10, 95, > 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 54, 32, 58, 32, 45, 114, 103, 98, 50, > 120, 121, 122, 56, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 55, 32, 58, > 32, 45, 114, 103, 98, 50, 108, 97, 98, 56, 10, 95, 103, 105, 109, 112, > 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 56, 32, 58, 32, 45, 114, 103, 98, 50, 108, 99, 104, 56, > 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 57, 32, 58, 32, 45, 114, 103, > 98, 50, 99, 109, 121, 10, 95, 103, 105, 109, 112, 95, 100, 101, 99, 111, > 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 49, 48, > 32, 58, 32, 45, 114, 103, 98, 50, 99, 109, 121, 107, 10, 95, 103, 105, > 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 48, 32, 58, 10, 95, 103, 105, 109, 112, 95, 114, > 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 49, 32, 58, 32, 45, 104, 115, 118, 56, 50, 114, 103, 98, 10, 95, > 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 50, 32, 58, 32, 45, 104, 115, 108, 56, > 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, > 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 51, 32, 58, > 32, 45, 104, 115, 105, 56, 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, > 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 52, 32, 58, 32, 45, 121, 117, 118, 56, 50, 114, 103, 98, > 10, 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 53, 32, 58, 32, 45, 121, 99, > 98, 99, 114, 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, 114, 101, > 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 54, 32, 58, 32, 45, 120, 121, 122, 56, 50, 114, 103, 98, 10, 95, 103, > 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 55, 32, 58, 32, 45, 108, 97, 98, 56, 50, > 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, > 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 56, 32, 58, 32, > 45, 108, 99, 104, 56, 50, 114, 103, 98, 10, 95, 103, 105, 109, 112, 95, > 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 57, 32, 58, 32, 45, 99, 109, 121, 50, 114, 103, 98, 10, 95, > 103, 105, 109, 112, 95, 114, 101, 99, 111, 109, 112, 111, 115, 101, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 49, 48, 32, 58, 32, 45, 99, 109, 121, > 107, 50, 114, 103, 98, 10, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, > 10, 45, 109, 32, 34, 95, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 32, 58, 10, 45, 105, 102, 32, 36, 53, 32, > 45, 98, 97, 108, 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 49, > 50, 56, 44, 49, 50, 56, 44, 49, 50, 56, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 49, 32, 45, 100, 101, 116, 101, 99, 116, > 95, 115, 107, 105, 110, 32, 36, 50, 32, 45, 101, 108, 115, 101, 32, 45, > 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, 36, 50, 44, 36, > 54, 37, 44, 36, 55, 37, 44, 36, 56, 37, 32, 45, 101, 110, 100, 105, > 102, 10, 77, 61, 123, 105, 77, 125, 32, 45, 98, 32, 36, 51, 37, 32, > 45, 42, 32, 123, 50, 53, 53, 42, 36, 77, 47, 105, 77, 125, 32, 45, > 42, 32, 36, 52, 32, 45, 99, 32, 48, 44, 50, 53, 53, 34, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 45, 105, 102, 32, 36, 57, 10, 45, 45, 95, 103, 105, 109, 112, 95, > 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, 45, 97, 32, 99, > 10, 45, 105, 102, 32, 123, 36, 57, 62, 49, 125, 32, 45, 115, 104, 32, > 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 42, 91, 45, 49, 93, > 32, 45, 49, 32, 45, 43, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 108, 115, 101, 32, 45, 95, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 117, 110, 99, 111, 109, > 109, 97, 110, 100, 32, 95, 103, 105, 109, 112, 95, 100, 101, 116, 101, 99, > 116, 95, 115, 107, 105, 110, 10, 103, 105, 109, 112, 95, 100, 101, 116, 101, > 99, 116, 95, 115, 107, 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, 101, 116, > 101, 99, 116, 95, 115, 107, 105, 110, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 45, 116, 111, 95, 114, 103, 98, 97, 10, 45, 105, 102, 32, 123, 33, > 36, 49, 125, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 54, 37, 44, > 36, 55, 37, 44, 36, 56, 37, 44, 48, 46, 51, 44, 48, 44, 50, 53, > 53, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, 101, 32, > 36, 54, 37, 44, 36, 55, 37, 44, 36, 56, 37, 44, 49, 44, 48, 120, > 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 50, 53, 53, 44, 48, > 44, 50, 53, 53, 10, 45, 108, 105, 110, 101, 32, 123, 36, 54, 45, 48, > 46, 50, 53, 42, 36, 56, 125, 37, 44, 123, 36, 55, 45, 48, 46, 50, > 53, 42, 36, 56, 125, 37, 44, 123, 36, 54, 43, 48, 46, 50, 53, 42, > 36, 56, 125, 37, 44, 123, 36, 55, 43, 48, 46, 50, 53, 42, 36, 56, > 125, 37, 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 50, > 53, 53, 10, 45, 108, 105, 110, 101, 32, 123, 36, 54, 43, 48, 46, 50, > 53, 42, 36, 56, 125, 37, 44, 123, 36, 55, 45, 48, 46, 50, 53, 42, > 36, 56, 125, 37, 44, 123, 36, 54, 45, 48, 46, 50, 53, 42, 36, 56, > 125, 37, 44, 123, 36, 55, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, > 44, 49, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 104, 115, 118, > 95, 101, 113, 117, 97, 108, 105, 122, 101, 114, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 64, 123, 62, 44, 45, > 49, 125, 93, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, > 50, 104, 115, 118, 32, 45, 115, 32, 99, 10, 45, 45, 102, 91, 48, 93, > 32, 105, 102, 40, 97, 98, 115, 40, 105, 45, 36, 50, 41, 60, 36, 51, > 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 50, 45, 51, 54, 48, 41, > 60, 36, 51, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 50, 43, 51, > 54, 48, 41, 60, 36, 51, 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, > 102, 91, 48, 93, 32, 105, 102, 40, 97, 98, 115, 40, 105, 45, 36, 55, > 41, 60, 36, 56, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 55, 45, > 51, 54, 48, 41, 60, 36, 56, 47, 50, 124, 97, 98, 115, 40, 105, 45, > 36, 55, 43, 51, 54, 48, 41, 60, 36, 56, 47, 50, 44, 49, 44, 48, > 41, 10, 45, 45, 102, 91, 48, 93, 32, 105, 102, 40, 97, 98, 115, 40, > 105, 45, 36, 49, 50, 41, 60, 36, 49, 51, 47, 50, 124, 97, 98, 115, > 40, 105, 45, 36, 49, 50, 45, 51, 54, 48, 41, 60, 36, 49, 51, 47, > 50, 124, 97, 98, 115, 40, 105, 45, 36, 49, 50, 43, 51, 54, 48, 41, > 60, 36, 49, 51, 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, 116, 104, > 114, 101, 115, 104, 111, 108, 100, 91, 49, 44, 50, 93, 32, 48, 46, 48, > 49, 32, 45, 42, 91, 45, 49, 44, 45, 50, 93, 32, 91, 45, 49, 93, > 120, 50, 32, 45, 42, 91, 45, 49, 44, 51, 93, 32, 45, 42, 91, 45, > 49, 44, 52, 93, 32, 45, 42, 91, 45, 49, 44, 53, 93, 9, 35, 48, > 32, 115, 97, 116, 117, 114, 97, 116, 105, 111, 110, 32, 97, 110, 100, 32, > 118, 97, 108, 117, 101, 32, 110, 111, 116, 32, 105, 110, 32, 109, 97, 115, > 107, 10, 45, 45, 42, 91, 51, 93, 32, 36, 52, 32, 45, 45, 42, 91, > 52, 93, 32, 36, 57, 32, 45, 45, 42, 91, 53, 93, 32, 36, 49, 52, > 32, 45, 43, 91, 45, 49, 44, 45, 50, 44, 45, 51, 93, 10, 45, 43, > 91, 45, 49, 44, 48, 93, 32, 45, 37, 91, 48, 93, 32, 51, 54, 48, > 10, 45, 105, 102, 32, 123, 36, 53, 62, 61, 48, 125, 32, 45, 45, 42, > 91, 51, 93, 32, 45, 36, 53, 32, 45, 101, 108, 115, 101, 32, 45, 45, > 42, 91, 51, 93, 32, 123, 49, 47, 40, 49, 43, 36, 53, 41, 45, 49, > 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, 45, 49, 93, 32, > 49, 10, 45, 105, 102, 32, 123, 36, 49, 48, 62, 61, 48, 125, 32, 45, > 45, 42, 91, 52, 93, 32, 45, 36, 49, 48, 32, 45, 101, 108, 115, 101, > 32, 45, 45, 42, 91, 52, 93, 32, 123, 49, 47, 40, 49, 43, 36, 49, > 48, 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, > 45, 49, 93, 32, 49, 10, 45, 105, 102, 32, 123, 36, 49, 53, 62, 61, > 48, 125, 32, 45, 45, 42, 91, 53, 93, 32, 45, 36, 49, 53, 32, 45, > 101, 108, 115, 101, 32, 45, 45, 42, 91, 53, 93, 32, 123, 49, 47, 40, > 49, 43, 36, 49, 53, 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 43, 91, 45, 49, 93, 32, 49, 10, 45, 42, 91, 45, 49, 44, > 45, 50, 44, 45, 51, 93, 32, 45, 94, 91, 49, 44, 45, 49, 93, 10, > 45, 105, 102, 32, 123, 36, 54, 62, 61, 48, 125, 32, 45, 45, 42, 91, > 51, 93, 32, 45, 36, 54, 32, 45, 101, 108, 115, 101, 32, 45, 45, 42, > 91, 51, 93, 32, 123, 49, 47, 40, 49, 43, 36, 54, 41, 45, 49, 125, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, 45, 49, 93, 32, 49, > 10, 45, 105, 102, 32, 123, 36, 49, 49, 62, 61, 48, 125, 32, 45, 45, > 42, 91, 52, 93, 32, 45, 36, 49, 49, 32, 45, 101, 108, 115, 101, 32, > 45, 45, 42, 91, 52, 93, 32, 123, 49, 47, 40, 49, 43, 36, 49, 49, > 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 10, 45, 105, 102, 32, 123, 36, 49, 54, 62, 61, 48, > 125, 32, 45, 45, 42, 91, 53, 93, 32, 45, 36, 49, 54, 32, 45, 101, > 108, 115, 101, 32, 45, 45, 42, 91, 53, 93, 32, 123, 49, 47, 40, 49, > 43, 36, 49, 54, 41, 45, 49, 125, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 10, 45, 42, 91, 45, 49, 44, 45, > 50, 44, 45, 51, 93, 32, 45, 94, 91, 50, 44, 45, 49, 93, 10, 45, > 114, 109, 91, 51, 44, 52, 44, 53, 93, 32, 45, 97, 91, 48, 44, 49, > 44, 50, 93, 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 104, 115, 118, 95, 101, 113, 117, 97, 108, 105, 122, 101, 114, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 108, 91, 45, 49, 93, 10, 45, > 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 45, 103, 105, 109, 112, > 95, 104, 115, 118, 95, 101, 113, 117, 97, 108, 105, 122, 101, 114, 32, 36, > 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, > 44, 36, 55, 44, 36, 56, 44, 36, 57, 44, 36, 49, 48, 44, 36, 49, > 49, 44, 36, 49, 50, 44, 36, 49, 51, 44, 36, 49, 52, 44, 36, 49, > 53, 44, 36, 49, 54, 10, 45, 101, 108, 115, 101, 10, 45, 116, 111, 95, > 114, 103, 98, 32, 45, 114, 103, 98, 50, 104, 115, 118, 32, 45, 115, 32, > 99, 10, 40, 48, 44, 51, 53, 57, 41, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 123, 64, 123, 48, 44, 104, 125, 47, 49, 48, > 125, 44, 49, 44, 49, 44, 51, 32, 91, 45, 49, 93, 32, 45, 102, 91, > 45, 49, 93, 32, 49, 9, 35, 99, 114, 101, 97, 116, 101, 32, 108, 111, > 119, 101, 114, 32, 98, 97, 110, 100, 10, 45, 106, 91, 48, 93, 32, 91, > 51, 93, 44, 48, 44, 57, 49, 37, 32, 45, 106, 91, 49, 93, 32, 91, > 52, 93, 44, 48, 44, 57, 49, 37, 32, 45, 106, 91, 50, 93, 32, 91, > 52, 93, 44, 48, 44, 57, 49, 37, 32, 45, 114, 109, 91, 45, 49, 44, > 45, 50, 93, 10, 45, 45, 102, 91, 48, 93, 32, 105, 102, 40, 97, 98, > 115, 40, 105, 45, 36, 50, 41, 60, 36, 51, 47, 50, 124, 97, 98, 115, > 40, 105, 45, 36, 50, 45, 51, 54, 48, 41, 60, 36, 51, 47, 50, 124, > 97, 98, 115, 40, 105, 45, 36, 50, 43, 51, 54, 48, 41, 60, 36, 51, > 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, 102, 91, 48, 93, 32, 105, > 102, 40, 97, 98, 115, 40, 105, 45, 36, 55, 41, 60, 36, 56, 47, 50, > 124, 97, 98, 115, 40, 105, 45, 36, 55, 45, 51, 54, 48, 41, 60, 36, > 56, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 55, 43, 51, 54, 48, > 41, 60, 36, 56, 47, 50, 44, 49, 44, 48, 41, 10, 45, 45, 102, 91, > 48, 93, 32, 105, 102, 40, 97, 98, 115, 40, 105, 45, 36, 49, 50, 41, > 60, 36, 49, 51, 47, 50, 124, 97, 98, 115, 40, 105, 45, 36, 49, 50, > 45, 51, 54, 48, 41, 60, 36, 49, 51, 47, 50, 124, 97, 98, 115, 40, > 105, 45, 36, 49, 50, 43, 51, 54, 48, 41, 60, 36, 49, 51, 47, 50, > 44, 49, 44, 48, 41, 10, 45, 111, 114, 91, 45, 51, 45, 45, 49, 93, > 32, 45, 43, 91, 45, 49, 93, 32, 48, 46, 51, 51, 32, 45, 47, 91, > 45, 49, 93, 32, 49, 46, 51, 51, 9, 35, 49, 32, 97, 110, 100, 32, > 48, 46, 50, 53, 10, 45, 42, 91, 50, 44, 45, 49, 93, 32, 45, 97, > 32, 99, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 108, 10, 103, 105, 109, 112, 95, 115, 116, > 97, 114, 116, 95, 109, 105, 120, 32, 58, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 49, 125, 32, 45, 45, 116, 111, 110, 101, 115, 91, 45, 49, > 93, 32, 51, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 98, > 91, 45, 50, 44, 45, 49, 93, 32, 36, 50, 37, 32, 45, 114, 91, 45, > 50, 44, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, 42, 91, 45, 49, > 93, 32, 91, 45, 51, 93, 32, 45, 109, 118, 91, 45, 51, 93, 32, 64, > 35, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, > 45, 45, 116, 111, 110, 101, 115, 91, 45, 49, 93, 32, 51, 32, 45, 43, > 91, 45, 51, 44, 45, 49, 93, 32, 45, 98, 91, 45, 50, 44, 45, 49, > 93, 32, 36, 50, 37, 32, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, > 91, 45, 51, 93, 32, 45, 42, 91, 45, 50, 93, 32, 91, 45, 51, 93, > 32, 45, 109, 118, 91, 45, 51, 93, 32, 64, 35, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 45, 116, 111, 110, 101, > 115, 91, 45, 49, 93, 32, 51, 32, 45, 43, 91, 45, 51, 44, 45, 50, > 93, 32, 45, 98, 91, 45, 50, 44, 45, 49, 93, 32, 36, 50, 37, 32, > 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 91, 45, 51, 93, 32, 45, > 42, 91, 45, 50, 93, 32, 91, 45, 51, 93, 32, 45, 109, 118, 91, 45, > 51, 93, 32, 64, 35, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, > 112, 95, 101, 110, 100, 95, 109, 105, 120, 32, 58, 10, 45, 105, 102, 32, > 123, 36, 49, 61, 61, 49, 125, 32, 45, 42, 91, 45, 51, 44, 45, 49, > 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 42, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 109, 105, 120, 95, > 114, 103, 98, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, > 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 115, 116, 97, > 114, 116, 95, 109, 105, 120, 32, 36, 49, 48, 44, 36, 49, 49, 10, 45, > 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 115, 91, 45, 49, 93, > 32, 99, 10, 45, 42, 91, 45, 51, 93, 32, 36, 49, 32, 45, 43, 91, > 45, 51, 93, 32, 36, 50, 32, 45, 98, 91, 45, 51, 93, 32, 36, 51, > 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, 45, 43, 91, 45, > 50, 93, 32, 36, 53, 32, 45, 98, 91, 45, 50, 93, 32, 36, 54, 37, > 10, 45, 42, 91, 45, 49, 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, > 93, 32, 36, 56, 32, 45, 98, 91, 45, 49, 93, 32, 36, 57, 37, 10, > 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 43, 91, 45, > 49, 93, 32, 49, 50, 56, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 103, 105, 109, 112, 95, 101, 110, 100, 95, 109, 105, > 120, 32, 36, 49, 48, 10, 45, 105, 102, 32, 123, 64, 35, 33, 61, 51, > 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 105, > 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 109, 105, 120, > 95, 114, 103, 98, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, 105, 120, 95, 114, 103, > 98, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, > 105, 120, 95, 121, 99, 98, 99, 114, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, > 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, 32, 36, 49, 48, 44, > 36, 49, 49, 10, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 91, 45, > 49, 93, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 115, > 91, 45, 49, 93, 32, 99, 10, 45, 42, 91, 45, 51, 93, 32, 36, 49, > 32, 45, 43, 91, 45, 51, 93, 32, 36, 50, 32, 45, 98, 91, 45, 51, > 93, 32, 36, 51, 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, > 45, 43, 91, 45, 50, 93, 32, 36, 53, 32, 45, 98, 91, 45, 50, 93, > 32, 36, 54, 37, 10, 45, 42, 91, 45, 49, 93, 32, 36, 55, 32, 45, > 43, 91, 45, 49, 93, 32, 36, 56, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 57, 37, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 121, 99, 98, 99, 114, 50, 114, > 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 101, 110, 100, > 95, 109, 105, 120, 32, 36, 49, 48, 10, 45, 105, 102, 32, 123, 64, 35, > 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 121, 99, 98, 99, 114, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, > 105, 120, 95, 121, 99, 98, 99, 114, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 109, 105, 120, 95, 104, 115, 118, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, > 10, 45, 103, 105, 109, 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, > 32, 36, 49, 48, 44, 36, 49, 49, 10, 45, 114, 103, 98, 50, 104, 115, > 118, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, > 45, 91, 45, 50, 44, 45, 49, 93, 32, 48, 46, 53, 10, 45, 42, 91, > 45, 51, 93, 32, 36, 49, 32, 45, 43, 91, 45, 51, 93, 32, 36, 50, > 32, 45, 98, 91, 45, 51, 93, 32, 36, 51, 37, 10, 45, 42, 91, 45, > 50, 93, 32, 36, 52, 32, 45, 43, 91, 45, 50, 93, 32, 36, 53, 32, > 45, 98, 91, 45, 50, 93, 32, 36, 54, 37, 10, 45, 42, 91, 45, 49, > 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, 93, 32, 36, 56, 32, 45, > 98, 91, 45, 49, 93, 32, 36, 57, 37, 10, 45, 37, 91, 45, 51, 93, > 32, 51, 54, 48, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 48, > 46, 53, 32, 45, 99, 91, 45, 50, 44, 45, 49, 93, 32, 48, 44, 49, > 32, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 104, 115, > 118, 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, > 101, 110, 100, 95, 109, 105, 120, 32, 36, 49, 48, 10, 45, 105, 102, 32, > 123, 64, 35, 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 109, 105, 120, 95, 104, 115, 118, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 104, 115, 118, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 105, 120, 95, 108, 97, 98, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 116, 111, 95, 114, 103, 98, 91, 48, 93, 10, 45, 103, 105, 109, 112, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 91, 48, 93, 32, 34, 45, 95, 103, 105, 109, 112, 95, 109, 105, 120, > 95, 108, 97, 98, 32, 36, 42, 34, 44, 48, 44, 123, 51, 42, 109, 97, > 120, 40, 36, 51, 44, 36, 54, 44, 36, 57, 41, 125, 10, 45, 97, 32, > 99, 10, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 36, 62, 93, 32, > 48, 32, 45, 100, 111, 110, 101, 10, 95, 103, 105, 109, 112, 95, 109, 105, > 120, 95, 108, 97, 98, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 116, > 97, 114, 116, 95, 109, 105, 120, 32, 36, 49, 48, 44, 36, 49, 49, 10, > 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 115, 91, > 45, 49, 93, 32, 99, 10, 45, 42, 91, 45, 51, 93, 32, 36, 49, 32, > 45, 43, 91, 45, 51, 93, 32, 36, 50, 32, 45, 98, 91, 45, 51, 93, > 32, 36, 51, 37, 10, 45, 42, 91, 45, 50, 93, 32, 36, 52, 32, 45, > 43, 91, 45, 50, 93, 32, 36, 53, 32, 45, 98, 91, 45, 50, 93, 32, > 36, 54, 37, 10, 45, 42, 91, 45, 49, 93, 32, 36, 55, 32, 45, 43, > 91, 45, 49, 93, 32, 36, 56, 32, 45, 98, 91, 45, 49, 93, 32, 36, > 57, 37, 10, 45, 97, 91, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, > 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, > 112, 95, 101, 110, 100, 95, 109, 105, 120, 32, 36, 49, 48, 10, 103, 105, > 109, 112, 95, 109, 105, 120, 95, 108, 97, 98, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 108, 97, 98, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 105, 120, 95, 99, 109, 121, 107, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 114, 118, 32, 45, 116, 111, 95, 114, 103, 98, 91, 45, 49, 93, > 10, 45, 103, 105, 109, 112, 95, 115, 116, 97, 114, 116, 95, 109, 105, 120, > 32, 36, 49, 51, 44, 36, 49, 52, 10, 45, 114, 103, 98, 50, 99, 109, > 121, 107, 91, 45, 49, 93, 32, 45, 115, 91, 45, 49, 93, 32, 99, 10, > 45, 42, 91, 45, 52, 93, 32, 36, 49, 32, 45, 43, 91, 45, 52, 93, > 32, 36, 50, 32, 45, 98, 91, 45, 52, 93, 32, 36, 51, 37, 10, 45, > 42, 91, 45, 51, 93, 32, 36, 52, 32, 45, 43, 91, 45, 51, 93, 32, > 36, 53, 32, 45, 98, 91, 45, 51, 93, 32, 36, 54, 37, 10, 45, 42, > 91, 45, 50, 93, 32, 36, 55, 32, 45, 43, 91, 45, 50, 93, 32, 36, > 56, 32, 45, 98, 91, 45, 50, 93, 32, 36, 57, 37, 10, 45, 42, 91, > 45, 49, 93, 32, 36, 49, 48, 32, 45, 43, 91, 45, 49, 93, 32, 36, > 49, 49, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 50, 37, 10, 45, > 97, 91, 45, 52, 45, 45, 49, 93, 32, 99, 32, 45, 99, 109, 121, 107, > 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 101, > 110, 100, 95, 109, 105, 120, 32, 36, 49, 51, 10, 45, 105, 102, 32, 123, > 64, 35, 33, 61, 51, 125, 32, 45, 114, 118, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 109, 105, 120, 95, 99, 109, 121, 107, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 109, 105, 120, 95, 99, 109, 121, 107, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 95, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, 99, 111, > 108, 111, 114, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, > 125, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 61, 61, 50, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, > 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 51, 125, 32, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 52, 125, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 53, 125, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 50, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 54, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 51, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 55, 125, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 48, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 56, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, > 114, 103, 98, 50, 121, 99, 98, 99, 114, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 49, 44, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, > 49, 61, 61, 57, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, > 103, 98, 50, 104, 115, 118, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 48, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 48, > 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, 50, 104, > 115, 118, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, 10, 45, > 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, > 116, 95, 99, 111, 108, 111, 114, 32, 58, 10, 40, 36, 53, 94, 36, 54, > 94, 36, 55, 94, 36, 56, 41, 32, 45, 95, 103, 105, 109, 112, 95, 115, > 101, 108, 101, 99, 116, 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, 32, > 36, 49, 32, 99, 111, 108, 111, 114, 61, 64, 45, 49, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, > 45, 45, 95, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, 99, > 111, 108, 111, 114, 32, 36, 49, 10, 45, 115, 101, 108, 101, 99, 116, 95, > 99, 111, 108, 111, 114, 91, 49, 93, 32, 36, 50, 37, 44, 36, 99, 111, > 108, 111, 114, 10, 45, 105, 102, 32, 36, 52, 32, 45, 45, 97, 114, 101, > 97, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 108, 101, 91, 45, 49, > 93, 32, 123, 114, 111, 117, 110, 100, 40, 36, 52, 94, 49, 46, 53, 41, > 125, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 44, 48, 44, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 98, 91, 49, 93, 32, 36, 51, 32, > 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, > 123, 36, 57, 61, 61, 48, 125, 32, 45, 115, 104, 91, 48, 93, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 110, 100, 91, 45, 49, > 93, 32, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 57, 61, > 61, 49, 125, 32, 45, 114, 109, 91, 48, 93, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 57, 61, 61, 50, 125, 32, 45, 45, 91, 49, 93, 32, 50, > 53, 53, 32, 45, 42, 91, 49, 93, 32, 45, 49, 32, 45, 115, 104, 91, > 48, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 97, 110, > 100, 91, 45, 49, 93, 32, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 57, 61, 61, 51, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, > 45, 32, 50, 53, 53, 32, 45, 42, 32, 45, 49, 10, 45, 101, 108, 115, > 101, 10, 45, 47, 91, 49, 93, 32, 50, 53, 53, 32, 45, 45, 42, 91, > 48, 44, 49, 93, 32, 45, 45, 42, 91, 49, 93, 32, 36, 49, 49, 32, > 45, 45, 42, 91, 49, 93, 32, 36, 49, 50, 32, 45, 45, 42, 91, 49, > 93, 32, 36, 49, 51, 32, 45, 42, 91, 49, 93, 32, 36, 49, 48, 32, > 45, 97, 91, 49, 44, 45, 51, 45, 45, 49, 93, 32, 99, 32, 45, 45, > 91, 49, 44, 50, 93, 32, 45, 43, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 107, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, 99, 111, > 108, 111, 114, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 95, > 99, 111, 108, 111, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 115, 101, 112, 105, 97, 32, 58, 10, 45, 115, 101, 112, 105, > 97, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 97, 112, 112, 108, 121, 95, > 103, 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 49, > 125, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 50, 32, 45, 43, 91, 45, 49, 93, 32, 123, 49, > 50, 56, 43, 36, 51, 125, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 114, 109, 91, 45, 49, 93, 32, 45, 109, 118, 91, > 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, > 95, 115, 101, 112, 105, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 101, 112, 105, > 97, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, > 117, 115, 116, 111, 109, 95, 116, 114, 97, 110, 115, 102, 111, 114, 109, 32, > 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 10, 45, 102, 91, 45, 49, 93, 32, 34, 36, 49, > 34, 10, 45, 115, 91, 45, 49, 93, 32, 99, 32, 45, 97, 91, 45, 52, > 45, 45, 50, 93, 32, 99, 32, 45, 102, 91, 45, 50, 93, 32, 34, 36, > 50, 34, 10, 45, 115, 91, 45, 50, 93, 32, 99, 32, 45, 102, 91, 45, > 52, 93, 32, 34, 36, 51, 34, 32, 45, 102, 91, 45, 51, 93, 32, 34, > 36, 52, 34, 32, 45, 102, 91, 45, 50, 93, 32, 34, 36, 53, 34, 32, > 45, 102, 91, 45, 49, 93, 32, 34, 36, 54, 34, 10, 45, 105, 102, 32, > 123, 36, 55, 61, 61, 48, 125, 32, 45, 97, 91, 45, 52, 45, 45, 49, > 93, 32, 99, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, > 97, 91, 45, 52, 45, 45, 50, 93, 32, 99, 32, 45, 110, 91, 45, 50, > 93, 32, 48, 44, 50, 53, 53, 32, 45, 99, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 45, 101, 108, 115, 101, 32, 45, 97, 91, 45, 52, 45, 45, 49, 93, > 32, 99, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 111, 110, 118, > 111, 108, 118, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 99, > 111, 110, 118, 111, 108, 118, 101, 32, 36, 49, 44, 36, 50, 44, 92, 34, > 36, 51, 92, 34, 44, 36, 123, 52, 45, 45, 51, 125, 34, 44, 36, 45, > 50, 44, 48, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, > 118, 101, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 95, 103, 105, > 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 36, 49, 91, 93, 32, > 45, 101, 108, 115, 101, 32, 40, 36, 51, 41, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 123, 33, 36, 52, 125, 32, 45, 42, 91, 45, > 49, 93, 32, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 99, 111, > 110, 118, 111, 108, 118, 101, 91, 48, 45, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 36, 50, 10, 45, 105, 102, 32, 36, 52, 32, 45, 110, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 99, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 45, > 49, 93, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, > 101, 49, 32, 58, 32, 51, 44, 51, 32, 45, 102, 32, 49, 32, 45, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, > 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 50, 32, 58, 32, 53, > 44, 53, 32, 45, 102, 32, 49, 32, 45, 110, 111, 114, 109, 97, 108, 105, > 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, > 118, 111, 108, 118, 101, 51, 32, 58, 32, 55, 44, 55, 32, 45, 102, 32, > 49, 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, > 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 52, > 32, 58, 32, 57, 44, 57, 32, 45, 102, 32, 49, 32, 45, 110, 111, 114, > 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 110, 118, 111, 108, 118, 101, 53, 32, 58, 32, 40, 49, 44, > 48, 44, 45, 49, 59, 49, 44, 48, 44, 45, 49, 59, 49, 44, 48, 44, > 45, 49, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, > 118, 101, 54, 32, 58, 32, 40, 49, 44, 49, 44, 49, 59, 48, 44, 48, > 44, 48, 59, 45, 49, 44, 45, 49, 44, 45, 49, 41, 10, 95, 103, 105, > 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 55, 32, 58, 32, 40, > 49, 44, 48, 44, 45, 49, 59, 50, 44, 48, 44, 45, 50, 59, 49, 44, > 48, 44, 45, 49, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, > 111, 108, 118, 101, 56, 32, 58, 32, 40, 49, 44, 50, 44, 49, 59, 48, > 44, 48, 44, 48, 59, 45, 49, 44, 45, 50, 44, 45, 49, 41, 10, 95, > 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 57, 32, 58, > 32, 97, 61, 123, 48, 46, 50, 53, 42, 40, 50, 45, 115, 113, 114, 116, > 40, 50, 41, 41, 125, 32, 98, 61, 123, 48, 46, 53, 42, 40, 115, 113, > 114, 116, 40, 50, 41, 45, 49, 41, 125, 32, 40, 36, 97, 44, 48, 44, > 45, 36, 97, 59, 36, 98, 44, 48, 44, 45, 36, 98, 59, 36, 97, 44, > 48, 44, 45, 36, 97, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, > 118, 111, 108, 118, 101, 49, 48, 32, 58, 32, 97, 61, 123, 48, 46, 50, > 53, 42, 40, 50, 45, 115, 113, 114, 116, 40, 50, 41, 41, 125, 32, 98, > 61, 123, 48, 46, 53, 42, 40, 115, 113, 114, 116, 40, 50, 41, 45, 49, > 41, 125, 32, 40, 36, 97, 44, 36, 98, 44, 36, 97, 59, 48, 44, 48, > 44, 48, 59, 45, 36, 97, 44, 45, 36, 98, 44, 45, 36, 97, 41, 10, > 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 49, 49, > 32, 58, 32, 40, 48, 44, 49, 44, 48, 59, 49, 44, 45, 52, 44, 49, > 59, 48, 44, 49, 44, 48, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, > 110, 118, 111, 108, 118, 101, 49, 50, 32, 58, 32, 40, 49, 44, 48, 59, > 48, 44, 45, 49, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, > 111, 108, 118, 101, 49, 51, 32, 58, 32, 40, 48, 44, 49, 59, 45, 49, > 44, 48, 41, 10, 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, > 118, 101, 49, 52, 32, 58, 32, 51, 44, 51, 32, 45, 102, 32, 49, 32, > 45, 114, 32, 55, 44, 55, 44, 49, 44, 49, 44, 52, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, > 32, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, > 95, 103, 105, 109, 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 49, 53, > 32, 58, 32, 51, 44, 51, 32, 45, 102, 32, 49, 32, 45, 114, 32, 57, > 44, 57, 44, 49, 44, 49, 44, 52, 44, 48, 44, 48, 46, 53, 44, 48, > 46, 53, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 95, 103, 105, 109, > 112, 95, 99, 111, 110, 118, 111, 108, 118, 101, 49, 54, 32, 58, 32, 51, > 44, 51, 32, 45, 102, 32, 49, 32, 45, 114, 32, 49, 49, 44, 49, 49, > 44, 49, 44, 49, 44, 52, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 110, 111, 114, 109, > 97, 108, 105, 122, 101, 95, 115, 117, 109, 10, 103, 105, 109, 112, 95, 99, > 111, 110, 118, 111, 108, 118, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 111, 110, > 118, 111, 108, 118, 101, 32, 36, 49, 44, 36, 50, 44, 92, 34, 36, 51, > 92, 34, 44, 36, 123, 52, 45, 45, 49, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 99, 117, 114, 118, 97, 116, 117, 114, 101, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 108, 91, 48, 93, 10, 45, 98, 32, 36, 49, 32, 45, 105, > 101, 101, 10, 45, 105, 102, 32, 36, 52, 32, 45, 97, 98, 115, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 99, 32, 36, 50, 37, 44, 36, 51, 37, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 117, > 114, 118, 97, 116, 117, 114, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 117, 114, > 118, 97, 116, 117, 114, 101, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 100, 111, 103, 32, 58, 10, 45, 100, 111, > 103, 32, 36, 49, 37, 44, 36, 50, 37, 10, 45, 99, 32, 36, 51, 37, > 44, 123, 49, 48, 48, 45, 36, 51, 125, 37, 10, 45, 105, 102, 32, 36, > 52, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 100, 111, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, 111, 103, 32, 36, 123, > 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, 105, > 115, 116, 97, 110, 99, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, > 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, 36, 49, 44, 36, 50, 10, > 45, 105, 102, 32, 123, 36, 51, 61, 61, 48, 125, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, > 49, 125, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 108, 115, > 101, 32, 45, 37, 32, 36, 52, 32, 45, 110, 32, 48, 44, 50, 53, 53, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 100, 105, 115, 116, 97, 110, 99, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 100, 105, 115, 116, 97, 110, 99, 101, 32, 36, 123, 94, 48, 125, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 101, 100, 103, 101, 115, > 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 98, 32, 36, 49, > 37, 32, 45, 101, 100, 103, 101, 115, 32, 36, 50, 37, 10, 45, 105, 102, > 32, 36, 51, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, > 109, 112, 95, 101, 100, 103, 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 100, > 103, 101, 115, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 100, 103, 101, 95, 111, 102, 102, 115, 101, 116, 115, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 111, 115, > 61, 123, 115, 125, 10, 45, 98, 91, 45, 49, 93, 32, 36, 49, 37, 32, > 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 91, 45, > 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, 50, 37, 32, 45, > 115, 107, 101, 108, 101, 116, 111, 110, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, > 114, 111, 117, 110, 100, 91, 45, 49, 93, 32, 49, 32, 45, 37, 91, 45, > 49, 93, 32, 36, 51, 32, 45, 103, 101, 91, 45, 49, 93, 32, 123, 109, > 97, 120, 40, 49, 44, 36, 51, 45, 36, 52, 41, 125, 10, 45, 105, 102, > 32, 123, 33, 36, 53, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, > 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 116, 111, 95, 99, 111, 108, > 111, 114, 109, 111, 100, 101, 91, 45, 49, 93, 32, 36, 111, 115, 10, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 101, 100, 103, 101, 95, 111, 102, 102, 115, 101, 116, 115, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 101, 100, 103, 101, 95, 111, 102, 102, 115, 101, > 116, 115, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, > 32, 58, 10, 45, 98, 32, 36, 49, 32, 45, 103, 114, 97, 100, 105, 101, > 110, 116, 95, 110, 111, 114, 109, 32, 45, 94, 32, 36, 50, 10, 45, 99, > 32, 36, 51, 37, 44, 36, 52, 37, 10, 45, 105, 102, 32, 36, 53, 32, > 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 103, > 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, > 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 103, 114, 97, 100, 105, 101, 110, 116, 50, 114, 103, 98, 32, 58, 10, 45, > 98, 32, 36, 49, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, 50, 114, > 103, 98, 32, 36, 52, 10, 45, 99, 32, 36, 50, 37, 44, 36, 51, 37, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 110, 101, 103, 97, 116, 105, 118, > 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, > 53, 10, 103, 105, 109, 112, 95, 103, 114, 97, 100, 105, 101, 110, 116, 50, > 114, 103, 98, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 103, 114, 97, 100, 105, 101, 110, > 116, 50, 114, 103, 98, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 105, 115, 111, 112, 104, 111, 116, 101, 115, 32, > 58, 10, 45, 105, 102, 32, 36, 51, 10, 45, 116, 111, 112, 111, 103, 114, > 97, 112, 104, 105, 99, 95, 109, 97, 112, 32, 36, 49, 44, 36, 50, 10, > 45, 101, 108, 115, 101, 10, 45, 98, 32, 36, 50, 32, 45, 105, 115, 111, > 112, 104, 111, 116, 101, 115, 32, 36, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 105, 115, 111, 112, 104, 111, 116, 101, 115, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 105, 115, 111, 112, 104, 111, 116, 101, 115, 32, 36, > 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 108, > 97, 112, 108, 97, 99, 105, 97, 110, 32, 58, 10, 45, 98, 32, 36, 49, > 32, 45, 108, 97, 112, 108, 97, 99, 105, 97, 110, 10, 45, 105, 102, 32, > 36, 52, 32, 45, 97, 98, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 99, 32, 36, 50, 37, 44, 36, 51, 37, 10, 45, 105, 102, 32, 36, 53, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, > 108, 97, 112, 108, 97, 99, 105, 97, 110, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, > 97, 112, 108, 97, 99, 105, 97, 110, 32, 36, 123, 94, 48, 125, 34, 44, > 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 108, 111, 99, 97, 108, 95, > 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, > 108, 91, 48, 93, 10, 45, 98, 32, 36, 49, 37, 32, 45, 103, 114, 97, > 100, 105, 101, 110, 116, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, > 110, 32, 50, 32, 45, 99, 111, 109, 112, 108, 101, 120, 50, 112, 111, 108, > 97, 114, 32, 45, 114, 109, 91, 48, 45, 45, 49, 58, 50, 93, 10, 45, > 99, 32, 36, 50, 37, 44, 36, 51, 37, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, > 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 108, 111, 99, 97, 108, 95, 111, 114, 105, > 101, 110, 116, 97, 116, 105, 111, 110, 32, 58, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, > 109, 112, 95, 108, 111, 99, 97, 108, 95, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, > 34, 44, 36, 53, 44, 49, 10, 103, 105, 109, 112, 95, 108, 111, 99, 97, > 108, 95, 111, 114, 105, 101, 110, 116, 97, 116, 105, 111, 110, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 108, 111, 99, 97, 108, 95, 111, 114, 105, 101, 110, 116, 97, > 116, 105, 111, 110, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 95, 95, 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 32, 36, 123, > 94, 48, 125, 34, 44, 36, 53, 44, 36, 54, 10, 103, 105, 109, 112, 95, > 109, 111, 114, 112, 104, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, 111, 114, 112, > 104, 111, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 95, 95, > 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 32, 58, 10, 45, 105, > 102, 32, 123, 36, 52, 61, 61, 49, 125, 32, 115, 117, 102, 61, 34, 95, > 111, 99, 116, 34, 32, 45, 101, 108, 105, 102, 32, 123, 36, 52, 61, 61, > 48, 125, 32, 115, 117, 102, 61, 34, 34, 32, 45, 101, 108, 115, 101, 32, > 115, 117, 102, 61, 34, 95, 99, 105, 114, 99, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 45, > 101, 114, 111, 100, 101, 36, 115, 117, 102, 32, 36, 50, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 100, 105, 108, 97, > 116, 101, 36, 115, 117, 102, 32, 36, 50, 10, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 61, 61, 50, 125, 32, 45, 101, 114, 111, 100, 101, 36, 115, > 117, 102, 32, 36, 50, 32, 45, 100, 105, 108, 97, 116, 101, 36, 115, 117, > 102, 32, 36, 50, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 51, 125, 32, 45, 100, 105, 108, 97, 116, 101, 36, 115, 117, 102, 32, 36, > 50, 32, 45, 101, 114, 111, 100, 101, 36, 115, 117, 102, 32, 36, 50, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 52, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 101, 114, 111, 100, 101, > 36, 115, 117, 102, 32, 36, 50, 32, 45, 45, 91, 45, 50, 44, 45, 49, > 93, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 53, 125, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 100, 105, 108, > 97, 116, 101, 36, 115, 117, 102, 32, 36, 50, 32, 45, 114, 118, 91, 45, > 50, 44, 45, 49, 93, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 54, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 45, 101, 114, 111, 100, 101, > 36, 115, 117, 102, 32, 36, 50, 32, 45, 100, 105, 108, 97, 116, 101, 36, > 115, 117, 102, 91, 45, 49, 93, 32, 36, 50, 32, 45, 45, 91, 45, 50, > 44, 45, 49, 93, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 45, 100, 105, 108, 97, 116, 101, 36, 115, > 117, 102, 32, 36, 50, 32, 45, 101, 114, 111, 100, 101, 36, 115, 117, 102, > 91, 45, 49, 93, 32, 36, 50, 32, 45, 114, 118, 91, 45, 50, 44, 45, > 49, 93, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 109, 118, > 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 36, 51, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, 101, 103, > 97, 116, 105, 118, 101, 91, 48, 93, 32, 45, 97, 32, 99, 32, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, > 116, 101, 114, 115, 104, 101, 100, 32, 58, 10, 45, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 98, 32, 36, 50, > 32, 45, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, > 104, 101, 100, 32, 36, 49, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, > 112, 95, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, 101, 114, 115, > 104, 101, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 101, 103, 109, 101, 110, 116, > 95, 119, 97, 116, 101, 114, 115, 104, 101, 100, 32, 36, 123, 94, 48, 125, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 107, 101, 108, 101, > 116, 111, 110, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 33, 36, 52, 125, 32, > 45, 110, 111, 114, 109, 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 32, > 36, 50, 37, 10, 45, 105, 102, 32, 36, 49, 32, 45, 116, 104, 105, 110, > 110, 105, 110, 103, 32, 45, 101, 108, 115, 101, 32, 45, 115, 107, 101, 108, > 101, 116, 111, 110, 32, 36, 51, 37, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 42, 32, 50, 53, 53, 10, 103, 105, 109, 112, 95, 115, 107, 101, 108, > 101, 116, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 107, 101, 108, 101, 116, > 111, 110, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 116, 104, 105, 110, 95, 101, 100, 103, 101, 115, 32, 58, 10, > 45, 98, 32, 36, 49, 37, 32, 45, 103, 114, 97, 100, 105, 101, 110, 116, > 95, 110, 111, 114, 109, 32, 45, 103, 101, 32, 36, 50, 37, 32, 45, 116, > 104, 105, 110, 110, 105, 110, 103, 10, 45, 105, 102, 32, 123, 33, 36, 51, > 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 116, 104, 105, 110, 95, 101, 100, 103, 101, 115, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 116, 104, 105, 110, 95, 101, 100, 103, 101, 115, 32, 36, 123, 94, 48, > 125, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 100, 101, 102, 111, 114, 109, 97, 116, 105, 111, 110, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, 110, 111, > 114, 109, 91, 45, 49, 93, 32, 91, 45, 49, 93, 32, 45, 102, 91, 45, > 50, 93, 32, 34, 36, 49, 34, 32, 45, 102, 91, 45, 49, 93, 32, 34, > 36, 50, 34, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, > 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 116, 114, > 97, 110, 115, 102, 111, 114, 109, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 10, 114, 61, 123, 36, 53, 42, 115, 113, 114, 116, 40, > 119, 94, 50, 43, 104, 94, 50, 41, 125, 10, 45, 105, 102, 32, 123, 36, > 54, 61, 61, 48, 125, 32, 99, 111, 110, 100, 61, 34, 105, 40, 88, 44, > 89, 44, 122, 44, 99, 44, 36, 55, 44, 36, 56, 41, 34, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 54, 61, 61, 49, 125, 32, 99, 111, 110, 100, > 61, 34, 105, 102, 40, 78, 60, 34, 36, 114, 34, 44, 105, 40, 88, 44, > 89, 44, 122, 44, 99, 44, 36, 55, 44, 36, 56, 41, 44, 105, 41, 34, > 10, 45, 101, 108, 115, 101, 32, 99, 111, 110, 100, 61, 34, 105, 102, 40, > 78, 62, 34, 36, 114, 34, 44, 105, 40, 88, 44, 89, 44, 122, 44, 99, > 44, 36, 55, 44, 36, 56, 41, 44, 105, 41, 34, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 102, 32, 39, 85, 61, 120, 45, 119, 42, 36, 49, 59, > 86, 61, 121, 45, 104, 42, 36, 50, 59, 78, 61, 115, 113, 114, 116, 40, > 85, 42, 85, 43, 86, 42, 86, 41, 59, 78, 114, 61, 78, 45, 36, 114, > 59, 88, 61, 120, 43, 36, 51, 42, 78, 114, 42, 85, 47, 78, 59, 89, > 61, 121, 43, 36, 52, 42, 78, 114, 42, 86, 47, 78, 59, 36, 99, 111, > 110, 100, 39, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 116, 114, 97, 110, > 115, 102, 111, 114, 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 99, 105, 114, 99, 108, 101, 95, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 32, 36, 42, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 120, 48, 61, 123, > 36, 49, 42, 119, 125, 10, 121, 48, 61, 123, 36, 50, 42, 104, 125, 10, > 114, 61, 123, 36, 53, 42, 115, 113, 114, 116, 40, 119, 94, 50, 43, 104, > 94, 50, 41, 125, 10, 45, 105, 102, 32, 36, 57, 10, 45, 99, 105, 114, > 99, 108, 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 123, 36, 114, 45, > 49, 125, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, > 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, > 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 123, 36, 114, 43, 49, 125, > 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, > 48, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, 101, 32, > 36, 120, 48, 44, 36, 121, 48, 44, 36, 114, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 50, 53, 53, 44, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 101, 117, 99, 108, > 105, 100, 101, 97, 110, 50, 112, 111, 108, 97, 114, 32, 58, 10, 45, 105, > 102, 32, 36, 53, 32, 45, 112, 111, 108, 97, 114, 50, 101, 117, 99, 108, > 105, 100, 101, 97, 110, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 32, 45, 101, 108, 115, 101, 32, 45, 101, 117, 99, 108, 105, 100, 101, > 97, 110, 50, 112, 111, 108, 97, 114, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 102, 108, 111, 119, 101, 114, 32, 58, 10, 45, 102, 108, 111, 119, 101, > 114, 32, 36, 49, 44, 36, 50, 44, 36, 51, 37, 44, 36, 52, 44, 36, > 53, 44, 36, 54, 44, 36, 55, 10, 103, 105, 109, 112, 95, 114, 111, 116, > 111, 105, 100, 111, 115, 99, 111, 112, 101, 32, 58, 10, 45, 114, 111, 116, > 111, 105, 100, 111, 115, 99, 111, 112, 101, 32, 123, 36, 49, 42, 49, 48, > 48, 125, 37, 44, 123, 36, 50, 42, 49, 48, 48, 125, 37, 44, 36, 51, > 44, 36, 52, 37, 44, 36, 53, 10, 103, 105, 109, 112, 95, 107, 97, 108, > 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 58, 10, 45, 115, 104, 105, > 102, 116, 32, 36, 51, 37, 44, 36, 52, 37, 44, 48, 44, 48, 44, 50, > 32, 45, 107, 97, 108, 101, 105, 100, 111, 115, 99, 111, 112, 101, 32, 36, > 49, 44, 36, 50, 44, 36, 53, 44, 36, 54, 44, 36, 55, 10, 103, 105, > 109, 112, 95, 115, 121, 109, 109, 101, 116, 114, 105, 122, 111, 115, 99, 111, > 112, 101, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 36, 49, 10, 97, 110, 103, 61, 123, 36, 50, > 43, 49, 56, 48, 42, 36, 62, 47, 109, 97, 120, 40, 49, 44, 36, 49, > 45, 49, 41, 125, 10, 45, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, > 32, 53, 48, 37, 44, 53, 48, 37, 44, 36, 97, 110, 103, 44, 36, 51, > 44, 48, 44, 123, 105, 102, 40, 36, 52, 33, 61, 50, 44, 36, 52, 44, > 36, 62, 37, 50, 41, 125, 10, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 119, 97, 114, 112, 95, 112, 101, 114, 115, 112, 101, 99, 116, 105, > 118, 101, 32, 58, 10, 45, 115, 104, 105, 102, 116, 32, 36, 54, 37, 44, > 36, 55, 37, 44, 48, 44, 48, 44, 50, 32, 45, 119, 97, 114, 112, 95, > 112, 101, 114, 115, 112, 101, 99, 116, 105, 118, 101, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 56, 10, 103, 105, > 109, 112, 95, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, > 97, 114, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, > 10, 45, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, 108, 97, > 114, 32, 34, 36, 52, 34, 44, 34, 36, 53, 34, 44, 36, 50, 44, 36, > 51, 44, 36, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, > 49, 125, 10, 45, 116, 114, 97, 110, 115, 102, 111, 114, 109, 95, 112, 111, > 108, 97, 114, 32, 82, 45, 114, 44, 97, 44, 36, 50, 44, 36, 51, 44, > 36, 54, 10, 45, 101, 108, 115, 101, 10, 45, 116, 114, 97, 110, 115, 102, > 111, 114, 109, 95, 112, 111, 108, 97, 114, 32, 97, 42, 82, 47, 40, 50, > 42, 112, 105, 41, 44, 114, 42, 50, 42, 112, 105, 47, 82, 44, 36, 50, > 44, 36, 51, 44, 36, 54, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 114, 101, 102, 108, 101, 99, 116, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 10, 45, 116, 111, 95, 114, 103, 98, 97, > 91, 45, 49, 93, 32, 45, 45, 114, 111, 119, 115, 91, 45, 49, 93, 32, > 123, 49, 48, 48, 45, 36, 49, 125, 37, 44, 49, 48, 48, 37, 32, 45, > 109, 105, 114, 114, 111, 114, 91, 45, 49, 93, 32, 121, 32, 45, 119, 97, > 116, 101, 114, 91, 45, 49, 93, 32, 36, 55, 44, 36, 56, 10, 45, 115, > 91, 45, 49, 93, 32, 99, 10, 45, 102, 91, 45, 52, 93, 32, 34, 40, > 105, 42, 40, 50, 53, 53, 45, 36, 54, 41, 32, 43, 32, 36, 54, 42, > 36, 51, 41, 47, 50, 53, 53, 34, 10, 45, 102, 91, 45, 51, 93, 32, > 34, 40, 105, 42, 40, 50, 53, 53, 45, 36, 54, 41, 32, 43, 32, 36, > 54, 42, 36, 52, 41, 47, 50, 53, 53, 34, 10, 45, 102, 91, 45, 50, > 93, 32, 34, 40, 105, 42, 40, 50, 53, 53, 45, 36, 54, 41, 32, 43, > 32, 36, 54, 42, 36, 53, 41, 47, 50, 53, 53, 34, 32, 45, 97, 91, > 45, 52, 45, 45, 49, 93, 32, 99, 10, 45, 42, 91, 45, 49, 93, 32, > 39, 40, 104, 94, 36, 50, 45, 121, 94, 36, 50, 41, 47, 104, 94, 36, > 50, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 121, 10, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, > 36, 49, 49, 42, 36, 49, 50, 42, 40, 120, 47, 119, 45, 48, 46, 53, > 41, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 36, 49, 49, 42, 36, 49, 50, 42, 40, 121, 47, 104, 45, > 48, 46, 53, 41, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 34, 36, 49, 48, 42, 40, 120, 47, 119, 45, > 48, 46, 53, 41, 32, 43, 32, 36, 57, 42, 40, 121, 47, 104, 45, 48, > 46, 53, 41, 32, 43, 32, 36, 49, 49, 34, 10, 45, 47, 91, 45, 51, > 93, 32, 91, 45, 49, 93, 32, 45, 43, 91, 45, 51, 93, 32, 48, 46, > 53, 32, 45, 42, 91, 45, 51, 93, 32, 64, 123, 45, 51, 44, 119, 125, > 10, 45, 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 43, 91, 45, 49, > 93, 32, 48, 46, 53, 32, 45, 42, 91, 45, 49, 93, 32, 123, 104, 125, > 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, 119, 97, > 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, 49, 44, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 97, 117, 116, 111, 99, > 114, 111, 112, 32, 48, 44, 48, 44, 48, 44, 48, 10, 103, 105, 109, 112, > 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 58, 10, 45, 105, 102, > 32, 36, 52, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, > 101, 114, 114, 111, 114, 32, 34, 80, 114, 105, 111, 114, 105, 116, 121, 32, > 109, 97, 115, 107, 32, 40, 116, 111, 112, 32, 108, 97, 121, 101, 114, 41, > 32, 105, 115, 32, 109, 105, 115, 115, 105, 110, 103, 33, 34, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 95, 103, 105, 109, 112, 95, 115, 101, 97, 109, > 99, 97, 114, 118, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 115, 101, > 97, 109, 99, 97, 114, 118, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 36, 52, 44, 36, 53, 44, 36, 51, 37, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 36, 62, 93, 32, 48, 44, 64, 123, 36, 62, > 44, 115, 45, 50, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 105, 102, 32, 36, 52, 10, 45, 105, 102, 32, > 123, 64, 35, 60, 50, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, > 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, 80, 114, > 105, 111, 114, 105, 116, 121, 32, 109, 97, 115, 107, 32, 40, 116, 111, 112, > 32, 108, 97, 121, 101, 114, 41, 32, 105, 115, 32, 109, 105, 115, 115, 105, > 110, 103, 33, 34, 44, 53, 44, 53, 44, 49, 56, 44, 50, 32, 45, 114, > 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 95, 103, > 105, 109, 112, 95, 115, 101, 97, 109, 99, 97, 114, 118, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 10, 45, 115, 101, 97, 109, 99, 97, 114, 118, 101, 32, 36, 49, > 37, 44, 36, 50, 37, 44, 36, 52, 44, 36, 53, 44, 123, 109, 97, 120, > 40, 36, 51, 44, 49, 48, 41, 125, 37, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 44, 123, 115, 45, > 50, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 114, 103, > 98, 97, 32, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 49, 48, > 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 99, 32, 48, 44, > 50, 53, 53, 10, 95, 103, 105, 109, 112, 95, 115, 101, 97, 109, 99, 97, > 114, 118, 101, 32, 58, 10, 45, 109, 118, 91, 48, 93, 32, 64, 35, 10, > 45, 108, 91, 45, 49, 93, 10, 45, 115, 32, 99, 32, 45, 107, 91, 48, > 44, 49, 93, 10, 45, 103, 116, 91, 49, 93, 32, 91, 48, 93, 32, 45, > 33, 61, 91, 48, 93, 32, 48, 32, 45, 45, 91, 48, 93, 32, 91, 49, > 93, 32, 45, 42, 91, 48, 93, 32, 45, 49, 32, 45, 43, 32, 45, 42, > 32, 50, 53, 54, 10, 45, 101, 110, 100, 108, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 97, 91, 36, 62, 93, > 32, 91, 45, 49, 93, 44, 99, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 109, 97, 112, 95, 115, > 112, 104, 101, 114, 101, 32, 58, 10, 45, 114, 111, 116, 97, 116, 101, 32, > 123, 36, 56, 42, 57, 48, 125, 10, 45, 105, 102, 32, 36, 54, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 115, 104, 105, 102, 116, > 91, 45, 49, 93, 32, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, 50, > 32, 45, 45, 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 123, > 40, 49, 45, 36, 55, 47, 49, 48, 48, 41, 42, 119, 47, 50, 125, 44, > 123, 40, 49, 43, 36, 55, 47, 49, 48, 48, 41, 42, 119, 47, 50, 125, > 10, 49, 48, 48, 37, 32, 45, 103, 97, 117, 115, 115, 105, 97, 110, 91, > 45, 49, 93, 32, 123, 48, 46, 49, 42, 119, 125, 44, 123, 104, 125, 44, > 48, 32, 49, 48, 48, 37, 32, 49, 48, 48, 37, 32, 45, 97, 91, 45, > 51, 45, 45, 49, 93, 32, 99, 32, 45, 114, 91, 45, 49, 93, 32, 91, > 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 51, 10, 45, 115, 109, > 111, 111, 116, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 54, > 44, 53, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 106, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, 40, 49, 45, 36, 55, 47, > 49, 48, 48, 41, 42, 64, 123, 45, 50, 44, 119, 125, 47, 50, 125, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 105, 102, 116, 91, 45, > 49, 93, 32, 45, 53, 48, 37, 44, 48, 44, 48, 44, 48, 44, 50, 10, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 115, 104, 105, 102, 116, 32, 36, 53, > 37, 44, 48, 44, 48, 44, 48, 44, 50, 32, 45, 116, 111, 95, 114, 103, > 98, 97, 10, 45, 105, 102, 32, 36, 57, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 45, 45, 114, 111, 119, 115, 91, 36, 62, 93, 32, > 48, 32, 45, 114, 91, 45, 49, 93, 32, 49, 44, 49, 44, 49, 44, 52, > 44, 50, 32, 82, 71, 66, 65, 36, 62, 61, 64, 45, 49, 10, 45, 114, > 91, 45, 49, 93, 32, 91, 36, 62, 93, 44, 91, 36, 62, 93, 44, 49, > 44, 52, 32, 45, 45, 91, 36, 62, 44, 45, 49, 93, 10, 45, 100, 111, > 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, 97, 112, 95, 115, > 112, 104, 101, 114, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 44, 36, 49, 48, 44, 36, 49, 49, 10, 45, 105, 102, 32, 36, 57, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 40, 36, 123, 82, > 71, 66, 65, 36, 62, 125, 41, 32, 45, 121, 91, 45, 49, 93, 32, 99, > 32, 45, 114, 91, 45, 49, 93, 32, 91, 36, 62, 93, 44, 91, 36, 62, > 93, 44, 49, 44, 52, 32, 45, 43, 91, 36, 62, 44, 45, 49, 93, 10, > 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, > 112, 95, 109, 97, 112, 95, 115, 112, 104, 101, 114, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 109, 97, 112, > 95, 115, 112, 104, 101, 114, 101, 32, 123, 119, 125, 44, 123, 104, 125, 44, > 36, 123, 51, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, 115, 121, 109, > 109, 101, 116, 114, 105, 122, 101, 32, 58, 10, 45, 116, 111, 95, 114, 103, > 98, 97, 32, 45, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 36, > 49, 37, 44, 36, 50, 37, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, > 36, 54, 10, 103, 105, 109, 112, 95, 115, 121, 109, 109, 101, 116, 114, 105, > 122, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 121, 109, 109, 101, 116, 114, 105, 122, 101, 32, 36, 42, > 10, 116, 104, 101, 116, 97, 61, 123, 36, 51, 42, 112, 105, 47, 49, 56, > 48, 125, 32, 117, 61, 123, 99, 111, 115, 40, 36, 116, 104, 101, 116, 97, > 41, 125, 32, 118, 61, 123, 115, 105, 110, 40, 36, 116, 104, 101, 116, 97, > 41, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 10, 120, 48, 61, 123, 119, 42, 36, 49, 37, 125, 10, > 121, 48, 61, 123, 104, 42, 36, 50, 37, 125, 10, 120, 49, 61, 123, 36, > 120, 48, 45, 109, 97, 120, 40, 119, 44, 104, 41, 42, 36, 117, 125, 32, > 121, 49, 61, 123, 36, 121, 48, 45, 109, 97, 120, 40, 119, 44, 104, 41, > 42, 36, 118, 125, 10, 120, 50, 61, 123, 36, 120, 48, 43, 109, 97, 120, > 40, 119, 44, 104, 41, 42, 36, 117, 125, 32, 121, 50, 61, 123, 36, 121, > 48, 43, 109, 97, 120, 40, 119, 44, 104, 41, 42, 36, 118, 125, 10, 45, > 108, 105, 110, 101, 32, 36, 120, 49, 44, 36, 121, 49, 44, 36, 120, 50, > 44, 36, 121, 50, 44, 49, 44, 48, 120, 48, 70, 48, 70, 48, 70, 48, > 70, 44, 48, 10, 45, 108, 105, 110, 101, 32, 36, 120, 49, 44, 36, 121, > 49, 44, 36, 120, 50, 44, 36, 121, 50, 44, 49, 44, 48, 120, 70, 48, > 70, 48, 70, 48, 70, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, > 108, 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 51, 44, 49, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, > 108, 101, 32, 36, 120, 48, 44, 36, 121, 48, 44, 51, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 116, 101, 120, 116, 117, 114, 101, 100, 95, 103, 108, > 97, 115, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, > 37, 44, 49, 44, 49, 10, 45, 105, 102, 32, 36, 55, 32, 45, 112, 108, > 97, 115, 109, 97, 91, 45, 49, 93, 32, 49, 44, 49, 44, 36, 55, 32, > 45, 101, 108, 115, 101, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, > 48, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, 103, 91, 45, 49, > 93, 32, 120, 121, 10, 45, 105, 102, 32, 36, 53, 10, 45, 45, 103, 114, > 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 91, 45, 51, 93, 32, > 45, 43, 91, 45, 49, 93, 32, 49, 32, 45, 98, 91, 45, 49, 93, 32, > 36, 54, 32, 45, 94, 91, 45, 49, 93, 32, 45, 36, 53, 10, 45, 42, > 91, 45, 51, 93, 32, 91, 45, 49, 93, 32, 45, 42, 91, 45, 50, 44, > 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 98, 108, 117, 114, > 95, 120, 121, 91, 45, 50, 44, 45, 49, 93, 32, 36, 51, 44, 36, 52, > 10, 45, 42, 91, 45, 50, 93, 32, 64, 123, 45, 50, 44, 36, 49, 47, > 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, > 105, 77, 41, 41, 125, 10, 45, 42, 91, 45, 49, 93, 32, 64, 123, 45, > 49, 44, 36, 50, 47, 109, 97, 120, 40, 97, 98, 115, 40, 105, 109, 41, > 44, 97, 98, 115, 40, 105, 77, 41, 41, 125, 10, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 99, 10, 45, 119, 97, 114, 112, 91, 45, 50, 93, > 32, 91, 45, 49, 93, 44, 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 116, 101, 120, 116, 117, 114, 101, 100, 95, 103, 108, 97, 115, > 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 116, 101, 120, 116, 117, 114, 101, 100, 95, > 103, 108, 97, 115, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 119, 105, 110, 100, 32, 58, 10, 45, 105, 102, 32, 123, 33, > 36, 53, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 119, 105, 110, 100, 32, 36, 123, 49, 45, > 52, 125, 34, 44, 36, 45, 50, 10, 45, 105, 102, 32, 123, 33, 36, 53, > 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 119, 105, 110, 100, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 119, 105, 110, 100, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 122, 111, 111, 109, 32, 58, 10, 45, 105, 102, 32, 123, > 36, 49, 60, 49, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 122, 111, 111, 109, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 44, 48, 44, 36, 52, 10, 103, 105, 109, 112, 95, 98, > 108, 117, 114, 95, 97, 110, 103, 117, 108, 97, 114, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 98, 108, 117, 114, 95, 97, 110, 103, 117, 108, 97, 114, 32, 36, 49, 37, > 44, 36, 50, 44, 36, 51, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, > 36, 52, 34, 44, 36, 53, 44, 36, 54, 10, 103, 105, 109, 112, 95, 98, > 108, 117, 114, 95, 100, 111, 102, 32, 58, 10, 45, 95, 36, 48, 32, 36, > 123, 49, 45, 49, 48, 125, 44, 48, 44, 36, 49, 50, 10, 103, 105, 109, > 112, 95, 98, 108, 117, 114, 95, 100, 111, 102, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 98, 108, 117, 114, > 95, 100, 111, 102, 32, 36, 42, 10, 95, 103, 105, 109, 112, 95, 98, 108, > 117, 114, 95, 100, 111, 102, 32, 58, 10, 45, 105, 102, 32, 123, 33, 36, > 51, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 45, 105, 102, 32, 36, 49, 49, 32, 45, 100, 114, > 103, 98, 97, 32, 45, 101, 110, 100, 105, 102, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, > 114, 109, 97, 120, 61, 123, 40, 119, 42, 119, 43, 104, 42, 104, 41, 94, > 48, 46, 53, 125, 32, 82, 61, 123, 36, 55, 42, 36, 114, 109, 97, 120, > 47, 49, 48, 48, 125, 32, 114, 61, 123, 36, 56, 42, 36, 114, 109, 97, > 120, 47, 49, 48, 48, 125, 10, 116, 61, 123, 36, 57, 42, 112, 105, 47, > 49, 56, 48, 125, 32, 117, 61, 123, 99, 111, 115, 40, 36, 116, 41, 125, > 32, 118, 61, 123, 115, 105, 110, 40, 36, 116, 41, 125, 10, 108, 49, 61, > 123, 40, 36, 114, 109, 97, 120, 47, 40, 49, 101, 45, 56, 43, 36, 82, > 41, 41, 94, 50, 125, 32, 108, 50, 61, 123, 40, 36, 114, 109, 97, 120, > 47, 40, 49, 101, 45, 56, 43, 36, 114, 41, 41, 94, 50, 125, 10, 97, > 61, 123, 36, 108, 49, 42, 40, 36, 117, 41, 94, 50, 43, 36, 108, 50, > 42, 40, 36, 118, 41, 94, 50, 125, 32, 98, 61, 123, 36, 117, 42, 36, > 118, 42, 40, 36, 108, 49, 45, 36, 108, 50, 41, 125, 32, 99, 61, 123, > 36, 108, 49, 42, 40, 36, 118, 41, 94, 50, 43, 36, 108, 50, 42, 40, > 36, 117, 41, 94, 50, 125, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, > 44, 49, 44, 49, 44, 39, 88, 61, 40, 120, 45, 36, 53, 42, 119, 47, > 49, 48, 48, 41, 47, 109, 97, 120, 40, 119, 44, 104, 41, 59, 89, 61, > 40, 121, 45, 36, 54, 42, 104, 47, 49, 48, 48, 41, 47, 109, 97, 120, > 40, 119, 44, 104, 41, 59, 102, 61, 36, 97, 42, 88, 42, 88, 43, 50, > 42, 36, 98, 42, 88, 42, 89, 43, 36, 99, 42, 89, 42, 89, 59, 101, > 120, 112, 40, 45, 102, 94, 36, 49, 48, 47, 50, 46, 53, 41, 39, 10, > 45, 45, 91, 49, 93, 32, 49, 32, 45, 42, 91, 49, 93, 32, 45, 36, > 49, 32, 109, 115, 61, 123, 105, 109, 125, 32, 77, 115, 61, 123, 105, 77, > 125, 10, 45, 105, 102, 32, 36, 49, 49, 10, 45, 45, 105, 115, 111, 108, > 105, 110, 101, 51, 100, 91, 49, 93, 32, 123, 48, 46, 49, 42, 36, 49, > 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, > 44, 50, 53, 53, 44, 48, 10, 45, 45, 105, 115, 111, 108, 105, 110, 101, > 51, 100, 91, 49, 93, 32, 123, 48, 46, 53, 42, 36, 49, 125, 32, 45, > 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 50, 53, 53, 44, 49, 50, > 56, 44, 48, 10, 45, 43, 51, 100, 91, 45, 50, 45, 45, 49, 93, 10, > 45, 95, 95, 103, 105, 109, 112, 95, 100, 111, 102, 95, 98, 108, 117, 114, > 91, 48, 44, 49, 93, 32, 36, 50, 44, 36, 109, 115, 44, 36, 77, 115, > 44, 36, 52, 10, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 51, 32, > 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, > 50, 93, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 99, 105, 114, 99, 108, 101, > 91, 45, 49, 93, 32, 36, 53, 37, 44, 36, 54, 37, 44, 51, 44, 49, > 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 10, 45, 45, 99, > 111, 109, 112, 111, 115, 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, > 45, 49, 93, 32, 43, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 51, 10, 45, > 106, 91, 48, 93, 32, 91, 45, 50, 93, 44, 48, 44, 48, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 91, 45, 49, 93, 44, 49, 32, 45, 114, 109, > 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 95, > 95, 103, 105, 109, 112, 95, 100, 111, 102, 95, 98, 108, 117, 114, 91, 48, > 44, 49, 93, 32, 36, 50, 44, 36, 109, 115, 44, 36, 77, 115, 44, 36, > 52, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, > 105, 102, 32, 36, 49, 49, 32, 45, 107, 91, 48, 93, 32, 45, 101, 110, > 100, 105, 102, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 105, 102, 32, 123, 64, 35, 62, 49, > 125, 10, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 49, 32, 45, 94, 91, 45, > 49, 93, 32, 123, 49, 48, 94, 36, 49, 50, 125, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 45, 114, 91, 45, > 49, 93, 32, 64, 123, 36, 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, > 104, 125, 44, 49, 44, 49, 44, 51, 32, 45, 108, 91, 36, 62, 44, 45, > 49, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 91, 48, 93, 10, 45, 95, 95, 103, 105, 109, 112, 95, 100, 111, 102, > 95, 98, 108, 117, 114, 91, 48, 44, 45, 49, 93, 32, 36, 50, 44, 48, > 44, 36, 49, 44, 36, 52, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 32, 45, 100, 114, 103, 98, 97, 32, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, 68, 101, 112, 116, > 104, 45, 111, 102, 45, 102, 105, 101, 108, 100, 32, 40, 98, 111, 116, 116, > 111, 109, 32, 108, 97, 121, 101, 114, 41, 32, 105, 115, 32, 109, 105, 115, > 115, 105, 110, 103, 32, 33, 34, 44, 50, 44, 50, 44, 49, 51, 44, 50, > 44, 49, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 95, 95, > 103, 105, 109, 112, 95, 100, 111, 102, 95, 98, 108, 117, 114, 32, 58, 10, > 45, 110, 91, 49, 93, 32, 48, 44, 123, 36, 49, 45, 49, 125, 32, 45, > 114, 111, 117, 110, 100, 91, 49, 93, 10, 91, 48, 93, 44, 91, 48, 93, > 44, 49, 44, 64, 123, 48, 44, 115, 43, 49, 125, 10, 115, 61, 48, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 45, 61, 61, 91, > 49, 93, 32, 123, 105, 102, 40, 36, 52, 44, 36, 60, 44, 36, 62, 41, > 125, 32, 45, 98, 91, 45, 49, 93, 32, 50, 37, 10, 45, 106, 91, 45, > 50, 93, 32, 91, 48, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 45, > 49, 44, 91, 45, 49, 93, 44, 49, 10, 45, 106, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 49, 48, 48, 37, 44, > 45, 49, 10, 45, 114, 109, 91, 45, 49, 93, 10, 110, 115, 61, 123, 36, > 50, 43, 40, 36, 51, 45, 36, 50, 41, 42, 40, 36, 62, 43, 49, 41, > 47, 40, 36, 49, 45, 49, 41, 125, 10, 45, 98, 91, 48, 93, 32, 123, > 115, 113, 114, 116, 40, 36, 110, 115, 94, 50, 45, 36, 115, 94, 50, 41, > 125, 37, 10, 115, 61, 36, 110, 115, 10, 45, 100, 111, 110, 101, 10, 45, > 115, 91, 45, 49, 93, 32, 99, 44, 123, 45, 115, 43, 49, 125, 32, 45, > 47, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 48, 44, 49, > 93, 10, 95, 103, 105, 109, 112, 95, 103, 97, 117, 115, 115, 105, 97, 110, > 95, 98, 108, 117, 114, 32, 58, 10, 45, 98, 32, 36, 49, 44, 36, 52, > 10, 45, 105, 102, 32, 123, 36, 50, 62, 48, 125, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, > 32, 121, 32, 45, 98, 32, 36, 50, 44, 36, 52, 32, 45, 97, 32, 121, > 32, 45, 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 123, 36, 51, 62, 48, 125, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 45, 49, 93, 32, 45, 115, 32, 120, 32, > 45, 98, 32, 36, 51, 44, 36, 52, 32, 45, 97, 32, 120, 32, 45, 101, > 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, > 103, 97, 117, 115, 115, 105, 97, 110, 95, 98, 108, 117, 114, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 95, 103, 105, 109, 112, 95, 103, 97, 117, 115, 115, 105, 97, 110, > 95, 98, 108, 117, 114, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, > 52, 34, 44, 36, 53, 44, 36, 54, 10, 103, 105, 109, 112, 95, 103, 97, > 117, 115, 115, 105, 97, 110, 95, 98, 108, 117, 114, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 103, 97, 117, 115, 115, 105, 97, 110, 95, 98, 108, 117, 114, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 103, 108, 111, 119, > 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 34, 45, 103, 108, 111, 119, 32, 36, 49, 34, 44, 36, 50, > 44, 48, 10, 103, 105, 109, 112, 95, 103, 108, 111, 119, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 103, 108, 111, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 98, 108, 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, > 36, 49, 44, 123, 36, 50, 42, 36, 49, 47, 49, 48, 48, 125, 44, 36, > 51, 44, 36, 53, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 52, > 34, 44, 36, 54, 44, 36, 55, 10, 103, 105, 109, 112, 95, 98, 108, 117, > 114, 95, 108, 105, 110, 101, 97, 114, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 98, 108, > 117, 114, 95, 108, 105, 110, 101, 97, 114, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 98, 108, 117, 114, 95, 114, 97, 100, 105, > 97, 108, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 98, 108, 117, 114, 95, 114, 97, 100, 105, > 97, 108, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 32, 45, 115, 104, > 97, 114, 112, 101, 110, 32, 36, 52, 34, 44, 36, 53, 44, 36, 54, 10, > 103, 105, 109, 112, 95, 108, 111, 109, 111, 32, 58, 10, 45, 114, 101, 109, > 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, > 103, 97, 117, 115, 115, 105, 97, 110, 32, 123, 49, 48, 48, 45, 36, 49, > 125, 37, 44, 123, 49, 48, 48, 45, 36, 49, 125, 37, 32, 45, 110, 111, > 114, 109, 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 48, 44, 49, 32, > 45, 42, 10, 45, 115, 32, 99, 10, 45, 102, 91, 48, 93, 32, 39, 50, > 53, 53, 42, 97, 116, 97, 110, 40, 40, 105, 45, 49, 50, 56, 41, 47, > 49, 50, 56, 41, 39, 10, 45, 102, 91, 49, 93, 32, 39, 50, 53, 53, > 42, 116, 97, 110, 40, 40, 105, 45, 49, 50, 56, 41, 47, 49, 50, 56, > 41, 39, 10, 45, 102, 91, 50, 93, 32, 39, 50, 53, 53, 42, 97, 116, > 97, 110, 40, 40, 105, 45, 49, 50, 56, 41, 47, 50, 53, 53, 41, 39, > 10, 45, 97, 32, 99, 10, 45, 115, 104, 97, 114, 112, 101, 110, 32, 49, > 10, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 108, 111, 109, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, 111, 109, > 111, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 110, > 111, 105, 115, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 110, 111, 105, 115, 101, 32, 36, > 49, 44, 36, 50, 34, 44, 36, 51, 44, 36, 52, 10, 103, 105, 109, 112, > 95, 110, 111, 105, 115, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 110, 111, 105, 115, > 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, > 112, 114, 101, 97, 100, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 115, 112, 114, 101, 97, 100, > 32, 36, 49, 44, 36, 50, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, > 112, 95, 115, 112, 114, 101, 97, 100, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 112, > 114, 101, 97, 100, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 115, 116, 114, 105, 112, 101, 115, 95, 121, 32, 36, 49, 34, 44, 36, 50, > 44, 48, 10, 103, 105, 109, 112, 95, 115, 116, 114, 105, 112, 101, 115, 95, > 121, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 115, 116, 114, 105, 112, 101, 115, 95, 121, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 56, 98, > 105, 116, 115, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, > 123, 104, 125, 10, 45, 114, 32, 36, 49, 37, 44, 36, 49, 37, 44, 49, > 44, 49, 48, 48, 37, 44, 50, 10, 45, 45, 108, 117, 109, 105, 110, 97, > 110, 99, 101, 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, > 32, 36, 50, 32, 45, 111, 116, 115, 117, 91, 45, 49, 93, 32, 50, 53, > 54, 32, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, > 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 10, 45, 108, > 91, 45, 49, 93, 32, 45, 115, 32, 99, 32, 45, 113, 117, 97, 110, 116, > 105, 122, 101, 32, 36, 51, 44, 49, 44, 49, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 108, 10, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, > 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, 49, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 56, 98, 105, > 116, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 56, 98, 105, 116, 115, 32, 36, 42, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 104, 97, 100, 101, > 95, 115, 116, 114, 105, 112, 101, 115, 32, 58, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 115, 104, 97, > 100, 101, 95, 115, 116, 114, 105, 112, 101, 115, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 44, 36, 52, 34, 44, 36, 53, 44, 48, 10, 103, 105, 109, > 112, 95, 115, 104, 97, 100, 101, 95, 115, 116, 114, 105, 112, 101, 115, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 115, 104, 97, 100, 101, 95, 115, 116, 114, 105, 112, > 101, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 118, 105, 115, 105, 98, 108, > 101, 32, 58, 10, 45, 119, 97, 116, 101, 114, 109, 97, 114, 107, 95, 118, > 105, 115, 105, 98, 108, 101, 32, 34, 36, 49, 34, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 54, 44, 36, 53, 10, 95, 103, 105, 109, 112, > 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, > 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, > 97, 105, 108, 115, 32, 53, 44, 53, 37, 44, 48, 46, 53, 37, 10, 45, > 95, 95, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, > 100, 101, 116, 97, 105, 108, 115, 91, 49, 93, 32, 36, 123, 49, 45, 52, > 125, 44, 56, 10, 45, 95, 95, 103, 105, 109, 112, 95, 101, 113, 117, 97, > 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, 115, 91, 50, 93, 32, > 36, 123, 53, 45, 56, 125, 44, 52, 10, 45, 95, 95, 103, 105, 109, 112, > 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, > 115, 91, 51, 93, 32, 36, 123, 57, 45, 49, 50, 125, 44, 50, 10, 45, > 95, 95, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, > 100, 101, 116, 97, 105, 108, 115, 91, 52, 93, 32, 36, 123, 49, 51, 45, > 49, 54, 125, 44, 49, 10, 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 95, > 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, > 116, 97, 105, 108, 115, 32, 58, 10, 45, 116, 104, 114, 101, 115, 104, 111, > 108, 100, 32, 36, 49, 44, 49, 10, 45, 105, 102, 32, 123, 36, 51, 61, > 61, 48, 125, 32, 45, 98, 32, 123, 36, 50, 42, 36, 53, 47, 50, 125, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, 49, 125, 10, 45, > 105, 102, 32, 123, 36, 50, 62, 48, 125, 10, 109, 61, 123, 105, 109, 125, > 32, 77, 61, 123, 105, 77, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, 110, > 116, 40, 36, 50, 47, 53, 41, 125, 32, 45, 98, 105, 108, 97, 116, 101, > 114, 97, 108, 32, 49, 53, 44, 123, 53, 42, 36, 53, 125, 32, 45, 100, > 111, 110, 101, 10, 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 49, > 53, 44, 123, 40, 36, 50, 37, 53, 41, 42, 36, 53, 125, 10, 45, 42, > 91, 45, 49, 93, 32, 123, 40, 36, 77, 45, 36, 109, 41, 47, 50, 53, > 53, 125, 32, 45, 43, 91, 45, 49, 93, 32, 36, 109, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 108, 115, 101, 32, 45, 115, 109, 111, 111, 116, > 104, 32, 123, 36, 50, 42, 53, 48, 125, 44, 48, 46, 50, 44, 48, 46, > 56, 44, 36, 53, 44, 36, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 42, 32, 123, 49, 48, 94, 36, 52, 125, 10, 103, 105, 109, 112, 95, 101, > 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, 108, 115, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, > 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 95, 103, 105, > 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, > 105, 108, 115, 32, 36, 123, 49, 45, 49, 54, 125, 92, 34, 44, 36, 49, > 55, 44, 36, 49, 56, 34, 44, 36, 49, 57, 44, 48, 10, 103, 105, 109, > 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 100, 101, 116, 97, 105, > 108, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, > 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 95, 103, 105, 109, 112, 95, 102, 114, 101, 97, 107, 121, 95, 100, 101, > 116, 97, 105, 108, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 51, 10, 91, 45, 49, 93, 32, 45, 45, 45, 91, 45, 49, > 93, 32, 50, 53, 53, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 32, 45, 98, 105, 108, 97, > 116, 101, 114, 97, 108, 91, 45, 49, 93, 32, 36, 50, 44, 123, 49, 46, > 53, 42, 36, 50, 125, 32, 45, 100, 111, 110, 101, 10, 45, 98, 108, 101, > 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 118, 105, 118, 105, 100, 108, > 105, 103, 104, 116, 32, 45, 98, 108, 101, 110, 100, 32, 111, 118, 101, 114, > 108, 97, 121, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, 114, 101, 97, 107, > 121, 95, 100, 101, 116, 97, 105, 108, 115, 32, 58, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, > 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, > 108, 97, 112, 32, 92, 34, 45, 95, 103, 105, 109, 112, 95, 102, 114, 101, > 97, 107, 121, 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 123, 49, 45, > 51, 125, 92, 34, 44, 36, 53, 44, 36, 54, 34, 44, 36, 52, 44, 48, > 10, 45, 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 102, > 114, 101, 97, 107, 121, 95, 100, 101, 116, 97, 105, 108, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 102, 114, 101, 97, 107, 121, 95, 100, 101, 116, 97, 105, 108, > 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 110, > 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, 108, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, > 97, 108, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, > 53, 44, 48, 44, 50, 53, 53, 34, 44, 36, 54, 44, 48, 10, 103, 105, > 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, > 97, 108, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 110, 111, 114, 109, 97, 108, 105, 122, > 101, 95, 108, 111, 99, 97, 108, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 100, 101, 98, 108, 117, 114, 32, 58, 10, 45, 97, > 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, > 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, > 101, 114, 108, 97, 112, 32, 92, 34, 45, 100, 101, 98, 108, 117, 114, 32, > 36, 123, 49, 45, 53, 125, 32, 45, 99, 32, 48, 44, 50, 53, 53, 92, > 34, 44, 36, 55, 44, 36, 56, 34, 44, 36, 54, 44, 48, 10, 103, 105, > 109, 112, 95, 100, 101, 98, 108, 117, 114, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, > 101, 98, 108, 117, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 103, 111, 108, 100, 109, > 101, 105, 110, 101, 108, 58, 10, 45, 103, 105, 109, 112, 95, 112, 97, 114, > 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 34, 45, > 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 103, 111, > 108, 100, 109, 101, 105, 110, 101, 108, 32, 36, 42, 34, 44, 36, 54, 44, > 36, 55, 10, 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, > 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, 108, 32, 58, 10, 45, 100, > 101, 98, 108, 117, 114, 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, 108, > 32, 36, 42, 10, 45, 105, 102, 32, 36, 53, 32, 45, 99, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 110, 32, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 117, > 110, 115, 104, 97, 114, 112, 95, 103, 111, 108, 100, 109, 101, 105, 110, 101, > 108, 95, 112, 114, 101, 118, 105, 101, 119, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 103, 111, > 108, 100, 109, 101, 105, 110, 101, 108, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 115, 104, 97, 114, 112, 101, 110, 95, 105, 110, > 118, 101, 114, 115, 101, 100, 105, 102, 102, 32, 58, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, > 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, > 108, 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 49, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 32, 45, 100, 111, 110, 101, 92, 34, 44, 36, 52, > 44, 36, 53, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, 112, 95, 115, > 104, 97, 114, 112, 101, 110, 95, 105, 110, 118, 101, 114, 115, 101, 100, 105, > 102, 102, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 115, 104, 97, 114, 112, 101, 110, 95, > 105, 110, 118, 101, 114, 115, 101, 100, 105, 102, 102, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, > 95, 111, 99, 116, 97, 118, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 32, 92, 34, 45, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, > 97, 118, 101, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 36, 52, 92, > 34, 44, 36, 54, 44, 36, 55, 34, 44, 36, 53, 44, 48, 10, 103, 105, > 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 111, 99, 116, 97, 118, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 111, > 99, 116, 97, 118, 101, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, > 109, 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 114, 105, 99, 104, 97, > 114, 100, 115, 111, 110, 108, 117, 99, 121, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 32, 34, 45, 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, > 114, 112, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, > 121, 32, 36, 42, 34, 44, 36, 53, 44, 36, 54, 10, 95, 103, 105, 109, > 112, 95, 117, 110, 115, 104, 97, 114, 112, 95, 114, 105, 99, 104, 97, 114, > 100, 115, 111, 110, 108, 117, 99, 121, 32, 58, 10, 45, 100, 101, 98, 108, > 117, 114, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, 99, > 121, 32, 36, 42, 10, 45, 105, 102, 32, 36, 52, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 110, 32, 48, 44, > 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, > 117, 110, 115, 104, 97, 114, 112, 95, 114, 105, 99, 104, 97, 114, 100, 115, > 111, 110, 108, 117, 99, 121, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 117, 110, 115, 104, > 97, 114, 112, 95, 114, 105, 99, 104, 97, 114, 100, 115, 111, 110, 108, 117, > 99, 121, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 115, 104, 97, 114, 112, 101, 110, 95, 115, 104, 111, 99, 107, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, > 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 53, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, 49, > 44, 36, 50, 44, 36, 51, 44, 36, 52, 32, 45, 99, 32, 48, 44, 50, > 53, 53, 32, 45, 100, 111, 110, 101, 92, 34, 44, 36, 55, 44, 36, 56, > 34, 44, 36, 54, 44, 48, 10, 103, 105, 109, 112, 95, 115, 104, 97, 114, > 112, 101, 110, 95, 115, 104, 111, 99, 107, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, > 104, 97, 114, 112, 101, 110, 95, 115, 104, 111, 99, 107, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 117, 110, 115, 104, 97, > 114, 112, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 56, 10, 45, 105, 102, 32, 123, > 36, 49, 61, 61, 48, 125, 32, 45, 45, 98, 91, 45, 49, 93, 32, 36, > 50, 32, 45, 101, 108, 115, 101, 32, 45, 45, 98, 105, 108, 97, 116, 101, > 114, 97, 108, 91, 45, 49, 93, 32, 36, 50, 44, 36, 51, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, 93, > 32, 45, 42, 91, 45, 49, 93, 32, 45, 36, 52, 10, 45, 45, 110, 111, > 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, > 53, 37, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, > 42, 91, 45, 50, 44, 45, 49, 93, 10, 45, 105, 102, 32, 36, 57, 32, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 99, 91, 45, 49, 93, 32, 48, 44, 49, 48, 48, 37, 32, > 45, 99, 91, 45, 50, 93, 32, 45, 49, 48, 48, 37, 44, 48, 32, 45, > 42, 91, 45, 50, 93, 32, 36, 54, 32, 45, 42, 91, 45, 49, 93, 32, > 36, 55, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 43, 91, > 45, 50, 44, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 100, 111, 110, 101, 32, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 117, > 110, 115, 104, 97, 114, 112, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, > 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, > 95, 117, 110, 115, 104, 97, 114, 112, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, > 44, 36, 57, 34, 44, 36, 49, 48, 44, 48, 10, 103, 105, 109, 112, 95, > 117, 110, 115, 104, 97, 114, 112, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 117, 110, 115, > 104, 97, 114, 112, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 95, > 97, 108, 112, 104, 97, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, 95, > 111, 112, 97, 99, 105, 116, 121, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 36, 49, 45, 49, 125, 10, 115, 61, 123, 36, 51, 43, 40, > 36, 50, 45, 36, 51, 41, 42, 36, 62, 47, 105, 102, 40, 36, 49, 45, > 50, 62, 48, 44, 36, 49, 45, 50, 44, 49, 41, 125, 10, 45, 45, 95, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, > 108, 115, 95, 97, 108, 112, 104, 97, 95, 98, 108, 117, 114, 91, 45, 49, > 93, 32, 36, 115, 10, 45, 45, 115, 117, 98, 95, 97, 108, 112, 104, 97, > 91, 45, 50, 44, 45, 49, 93, 32, 36, 52, 32, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 100, 111, > 110, 101, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 114, 118, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, > 95, 97, 108, 112, 104, 97, 95, 98, 108, 117, 114, 32, 58, 10, 45, 105, > 102, 32, 123, 36, 49, 62, 61, 48, 46, 49, 125, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 49, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, > 123, 36, 49, 62, 61, 48, 46, 48, 53, 125, 32, 40, 49, 44, 52, 44, > 55, 44, 52, 44, 49, 59, 52, 44, 49, 54, 44, 50, 54, 44, 49, 54, > 44, 52, 59, 55, 44, 50, 54, 44, 52, 49, 44, 50, 54, 44, 55, 59, > 52, 44, 49, 54, 44, 50, 54, 44, 49, 54, 44, 52, 59, 49, 44, 52, > 44, 55, 44, 52, 44, 49, 41, 10, 45, 101, 108, 115, 101, 32, 40, 49, > 44, 50, 44, 49, 59, 50, 44, 52, 44, 50, 59, 49, 44, 50, 44, 49, > 41, 32, 45, 101, 110, 100, 105, 102, 10, 45, 110, 111, 114, 109, 97, 108, > 105, 122, 101, 95, 115, 117, 109, 91, 45, 49, 93, 32, 45, 99, 111, 110, > 118, 111, 108, 118, 101, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, > 95, 97, 108, 112, 104, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, > 97, 105, 108, 115, 95, 97, 108, 112, 104, 97, 32, 36, 123, 49, 45, 52, > 125, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 91, 94, 45, 49, 93, 32, 45, 101, > 108, 115, 101, 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 100, 114, 103, 98, 97, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 32, 34, > 92, 35, 34, 123, 49, 43, 36, 62, 125, 44, 49, 44, 49, 44, 52, 51, > 44, 55, 44, 49, 44, 50, 53, 53, 32, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, > 101, 115, 32, 44, 10, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 100, 101, 116, 97, 105, 108, 115, 32, 58, 10, 45, 114, 101, 109, 111, 118, > 101, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, 36, > 49, 61, 61, 49, 125, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 60, 93, 10, 45, 45, 114, 111, 119, 115, 32, 48, > 32, 118, 108, 105, 115, 116, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 109, 97, 103, 105, 99, 107, 61, 123, 97, > 114, 103, 40, 49, 44, 36, 118, 108, 105, 115, 116, 41, 125, 32, 110, 98, > 95, 105, 109, 103, 115, 61, 123, 49, 43, 97, 114, 103, 40, 50, 44, 36, > 118, 108, 105, 115, 116, 41, 125, 32, 109, 111, 100, 101, 61, 123, 97, 114, > 103, 40, 51, 44, 36, 118, 108, 105, 115, 116, 41, 125, 10, 45, 105, 102, > 32, 123, 36, 109, 97, 103, 105, 99, 107, 33, 61, 55, 49, 55, 55, 55, > 51, 54, 55, 124, 124, 36, 110, 98, 95, 105, 109, 103, 115, 60, 50, 124, > 124, 36, 109, 111, 100, 101, 60, 48, 124, 124, 36, 109, 111, 100, 101, 62, > 50, 125, 32, 45, 101, 114, 114, 111, 114, 32, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, 61, > 48, 125, 32, 45, 115, 32, 120, 44, 36, 110, 98, 95, 105, 109, 103, 115, > 32, 45, 101, 108, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, 61, 49, > 125, 32, 45, 115, 32, 121, 44, 36, 110, 98, 95, 105, 109, 103, 115, 10, > 45, 101, 108, 115, 101, 32, 78, 61, 123, 105, 110, 116, 40, 115, 113, 114, > 116, 40, 36, 110, 98, 95, 105, 109, 103, 115, 41, 41, 125, 32, 77, 61, > 123, 114, 111, 117, 110, 100, 40, 36, 110, 98, 95, 105, 109, 103, 115, 47, > 36, 78, 44, 49, 44, 49, 41, 125, 32, 45, 115, 112, 108, 105, 116, 95, > 116, 105, 108, 101, 115, 32, 36, 77, 44, 36, 78, 32, 45, 107, 91, 48, > 45, 123, 36, 110, 98, 95, 105, 109, 103, 115, 45, 49, 125, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 108, 91, > 94, 48, 93, 32, 45, 45, 32, 49, 50, 56, 32, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 42, 91, 36, 62, 93, 32, 123, 97, 114, > 103, 40, 36, 62, 43, 52, 44, 36, 118, 108, 105, 115, 116, 41, 47, 49, > 50, 55, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, 32, > 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 111, 110, 102, > 97, 105, 108, 32, 45, 101, 114, 114, 111, 114, 32, 34, 67, 111, 109, 109, > 97, 110, 100, 32, 39, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 100, 101, 116, 97, 105, 108, 115, 39, 58, 32, 67, 97, 110, 110, 111, > 116, 32, 114, 101, 99, 111, 109, 112, 111, 115, 101, 32, 105, 109, 97, 103, > 101, 44, 32, 100, 101, 99, 111, 109, 112, 111, 115, 101, 32, 105, 116, 32, > 98, 101, 102, 111, 114, 101, 32, 116, 114, 121, 105, 110, 103, 32, 116, 111, > 32, 114, 101, 99, 111, 109, 112, 111, 115, 101, 32, 105, 116, 32, 33, 34, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 115, 101, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 60, 93, 10, 45, 45, 114, 111, 119, 115, 32, 48, 32, 118, 108, > 105, 115, 116, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 109, 97, 103, 105, 99, 107, 61, 123, 97, 114, 103, 40, > 49, 44, 36, 118, 108, 105, 115, 116, 41, 125, 32, 110, 98, 95, 105, 109, > 103, 115, 61, 123, 49, 43, 97, 114, 103, 40, 50, 44, 36, 118, 108, 105, > 115, 116, 41, 125, 32, 109, 111, 100, 101, 61, 123, 97, 114, 103, 40, 51, > 44, 36, 118, 108, 105, 115, 116, 41, 125, 10, 45, 105, 102, 32, 123, 36, > 109, 97, 103, 105, 99, 107, 33, 61, 55, 49, 55, 55, 55, 51, 54, 55, > 124, 124, 36, 110, 98, 95, 105, 109, 103, 115, 60, 50, 124, 124, 36, 109, > 111, 100, 101, 60, 48, 124, 124, 36, 109, 111, 100, 101, 62, 50, 125, 32, > 45, 101, 114, 114, 111, 114, 32, 34, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 45, 108, 10, 45, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, > 61, 48, 125, 32, 45, 115, 32, 120, 44, 36, 110, 98, 95, 105, 109, 103, > 115, 32, 45, 101, 108, 105, 102, 32, 123, 36, 109, 111, 100, 101, 61, 61, > 49, 125, 32, 45, 115, 32, 121, 44, 36, 110, 98, 95, 105, 109, 103, 115, > 10, 45, 101, 108, 115, 101, 32, 78, 61, 123, 105, 110, 116, 40, 115, 113, > 114, 116, 40, 36, 110, 98, 95, 105, 109, 103, 115, 41, 41, 125, 32, 77, > 61, 123, 114, 111, 117, 110, 100, 40, 36, 110, 98, 95, 105, 109, 103, 115, > 47, 36, 78, 44, 49, 44, 49, 41, 125, 32, 45, 115, 112, 108, 105, 116, > 95, 116, 105, 108, 101, 115, 32, 36, 77, 44, 36, 78, 32, 45, 107, 91, > 48, 45, 123, 36, 110, 98, 95, 105, 109, 103, 115, 45, 49, 125, 93, 10, > 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, 91, 48, 93, 32, 45, 108, > 91, 94, 48, 93, 32, 45, 45, 32, 49, 50, 56, 32, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 42, 91, 36, 62, 93, 32, 123, 97, > 114, 103, 40, 36, 62, 43, 52, 44, 36, 118, 108, 105, 115, 116, 41, 47, > 49, 50, 55, 125, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 108, > 32, 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, > 100, 108, 10, 45, 106, 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, > 91, 49, 93, 32, 40, 123, 39, 36, 118, 108, 105, 115, 116, 39, 125, 44, > 48, 41, 32, 45, 106, 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, > 91, 49, 93, 10, 45, 111, 110, 102, 97, 105, 108, 10, 45, 45, 115, 112, > 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 50, 44, 36, > 51, 44, 36, 52, 10, 118, 108, 105, 115, 116, 61, 55, 49, 55, 55, 55, > 51, 54, 55, 44, 36, 50, 44, 36, 53, 10, 45, 108, 91, 50, 45, 45, > 49, 93, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 102, 97, > 99, 116, 61, 123, 114, 111, 117, 110, 100, 40, 109, 97, 120, 40, 97, 98, > 115, 40, 105, 109, 41, 44, 97, 98, 115, 40, 105, 77, 41, 41, 44, 48, > 46, 48, 49, 41, 125, 32, 118, 108, 105, 115, 116, 61, 36, 118, 108, 105, > 115, 116, 44, 36, 102, 97, 99, 116, 32, 45, 42, 91, 36, 62, 93, 32, > 123, 49, 50, 55, 47, 36, 102, 97, 99, 116, 125, 10, 45, 100, 111, 110, > 101, 32, 45, 43, 32, 49, 50, 56, 32, 45, 101, 110, 100, 108, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 53, 61, > 61, 48, 125, 32, 45, 97, 32, 120, 32, 45, 101, 108, 105, 102, 32, 123, > 36, 53, 61, 61, 49, 125, 32, 45, 97, 32, 121, 32, 45, 101, 108, 115, > 101, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, > 44, 32, 45, 101, 110, 100, 105, 102, 10, 40, 123, 39, 36, 118, 108, 105, > 115, 116, 39, 125, 44, 48, 41, 32, 45, 106, 91, 48, 93, 32, 91, 49, > 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 36, 49, 32, > 45, 103, 105, 109, 112, 95, 110, 111, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 44, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 115, 112, 108, > 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 32, 36, 50, 44, 36, 51, > 44, 36, 52, 32, 45, 110, 91, 50, 45, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 10, 45, 105, 102, 32, 123, 36, 54, 61, 61, 48, 125, 32, 45, > 107, 91, 49, 93, 32, 45, 101, 108, 105, 102, 32, 123, 36, 54, 61, 61, > 49, 125, 32, 45, 107, 91, 50, 45, 45, 49, 93, 32, 45, 97, 112, 112, > 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 44, 32, 45, 101, 108, 105, > 102, 32, 123, 36, 54, 61, 61, 50, 125, 32, 45, 107, 91, 45, 49, 93, > 32, 45, 101, 108, 115, 101, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 44, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, > 10, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, 115, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 32, 36, 123, > 49, 45, 52, 125, 34, 44, 36, 53, 44, 48, 10, 45, 110, 32, 48, 44, > 50, 53, 53, 10, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, > 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, > 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, > 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, 32, 58, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, > 32, 36, 49, 44, 36, 50, 34, 44, 36, 51, 44, 48, 10, 103, 105, 109, > 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, 102, 97, 115, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 109, 97, 112, 95, 116, 111, 110, 101, 115, 95, > 102, 97, 115, 116, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, > 105, 110, 32, 58, 10, 45, 95, 95, 103, 105, 109, 112, 95, 101, 109, 117, > 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 32, 64, 123, 45, 97, 114, > 103, 92, 32, 123, 49, 43, 36, 49, 125, 44, 64, 123, 45, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, > 125, 125, 44, 36, 123, 50, 45, 49, 48, 125, 44, 48, 10, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, > 32, 58, 10, 45, 117, 32, 103, 114, 97, 105, 110, 95, 111, 114, 119, 111, > 95, 110, 112, 50, 48, 44, 103, 114, 97, 105, 110, 95, 107, 111, 100, 97, > 107, 95, 116, 109, 97, 120, 52, 48, 48, 44, 103, 114, 97, 105, 110, 95, > 107, 111, 100, 97, 107, 95, 116, 109, 97, 120, 51, 50, 48, 48, 44, 103, > 114, 97, 105, 110, 95, 107, 111, 100, 97, 107, 95, 116, 114, 105, 120, 49, > 54, 48, 48, 44, 103, 114, 97, 105, 110, 95, 117, 110, 107, 110, 111, 119, > 110, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, > 114, 97, 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 34, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 103, 114, 97, 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 95, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 32, 64, 123, 45, > 97, 114, 103, 92, 32, 123, 49, 43, 36, 49, 125, 44, 64, 123, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, > 105, 110, 125, 125, 44, 36, 123, 50, 45, 49, 49, 125, 10, 95, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, > 110, 32, 58, 10, 98, 109, 48, 61, 97, 108, 112, 104, 97, 32, 98, 109, > 49, 61, 103, 114, 97, 105, 110, 109, 101, 114, 103, 101, 32, 98, 109, 50, > 61, 104, 97, 114, 100, 108, 105, 103, 104, 116, 32, 98, 109, 51, 61, 111, > 118, 101, 114, 108, 97, 121, 32, 98, 109, 52, 61, 115, 111, 102, 116, 108, > 105, 103, 104, 116, 10, 100, 105, 114, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 117, 115, 101, 114, 125, 10, 45, 105, 102, 32, 123, 33, 64, 123, 45, > 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 125, 125, 10, 100, 105, 114, > 61, 36, 100, 105, 114, 47, 46, 103, 109, 105, 99, 95, 102, 105, 108, 109, > 95, 112, 114, 101, 115, 101, 116, 115, 10, 45, 105, 102, 32, 36, 100, 105, > 114, 32, 45, 101, 108, 115, 101, 32, 45, 120, 32, 34, 109, 107, 100, 105, > 114, 32, 34, 36, 100, 105, 114, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, > 36, 95, 102, 111, 114, 99, 101, 95, 114, 101, 100, 111, 119, 110, 108, 111, > 97, 100, 41, 125, 10, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, > 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, > 110, 101, 116, 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, > 101, 115, 101, 116, 115, 47, 36, 49, 46, 99, 105, 109, 103, 122, 32, 45, > 111, 91, 45, 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, > 36, 49, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 49, 46, > 99, 105, 109, 103, 122, 32, 45, 105, 32, 36, 100, 105, 114, 47, 103, 109, > 105, 99, 95, 36, 49, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, > 101, 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, > 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, > 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, 101, 115, 101, > 116, 115, 47, 36, 49, 46, 99, 105, 109, 103, 122, 32, 45, 111, 91, 45, > 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 49, 46, > 99, 105, 109, 103, 122, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 49, 125, 32, 45, 108, 91, 36, 62, 44, 45, 49, 93, 32, 45, 115, 112, > 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 91, 48, 93, 10, 45, > 45, 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 91, 45, 49, > 93, 32, 64, 123, 48, 44, 109, 97, 120, 40, 49, 48, 44, 49, 48, 48, > 42, 119, 47, 36, 52, 41, 125, 44, 64, 123, 48, 44, 109, 97, 120, 40, > 49, 48, 44, 49, 48, 48, 42, 104, 47, 36, 52, 41, 125, 10, 45, 105, > 102, 32, 36, 53, 32, 45, 45, 115, 121, 110, 116, 101, 120, 116, 117, 114, > 105, 122, 101, 91, 45, 50, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, > 45, 45, 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 91, 45, > 51, 93, 32, 123, 119, 125, 44, 123, 104, 125, 32, 45, 97, 91, 45, 51, > 45, 45, 49, 93, 32, 99, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, > 91, 45, 49, 93, 32, 64, 123, 48, 44, 119, 125, 44, 64, 123, 48, 44, > 104, 125, 44, 49, 44, 49, 48, 48, 37, 44, 53, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 97, 112, 112, 108, 121, 95, > 103, 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 54, > 125, 10, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, 93, 32, 49, 50, > 56, 32, 45, 43, 91, 45, 49, 93, 32, 36, 56, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 36, 57, > 124, 124, 36, 49, 48, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, > 91, 45, 49, 93, 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 43, > 91, 45, 49, 93, 32, 36, 57, 32, 45, 37, 91, 45, 49, 93, 32, 51, > 54, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, > 49, 93, 32, 49, 44, 49, 32, 45, 43, 91, 45, 49, 93, 32, 36, 49, > 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 104, 115, 118, 50, 114, > 103, 98, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, > 102, 32, 36, 49, 49, 32, 45, 107, 91, 48, 44, 45, 49, 93, 32, 45, > 114, 118, 10, 45, 101, 108, 115, 101, 32, 45, 98, 108, 101, 110, 100, 91, > 48, 44, 45, 49, 93, 32, 36, 123, 98, 109, 36, 50, 125, 44, 36, 51, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 94, 45, 49, 93, 32, > 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 98, 119, 32, 58, 10, 45, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 36, 49, 44, 64, > 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 98, 119, 32, 58, 10, 45, 117, 32, 97, 103, 102, 97, 95, > 97, 112, 120, 95, 49, 48, 48, 44, 97, 103, 102, 97, 95, 97, 112, 120, > 95, 50, 53, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, > 49, 54, 48, 48, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, > 95, 97, 99, 114, 111, 115, 95, 49, 48, 48, 44, 105, 108, 102, 111, 114, > 100, 95, 100, 101, 108, 116, 97, 95, 49, 48, 48, 44, 105, 108, 102, 111, > 114, 100, 95, 100, 101, 108, 116, 97, 95, 51, 50, 48, 48, 44, 105, 108, > 102, 111, 114, 100, 95, 100, 101, 108, 116, 97, 95, 52, 48, 48, 44, 105, > 108, 102, 111, 114, 100, 95, 102, 112, 52, 95, 112, 108, 117, 115, 95, 49, > 50, 53, 44, 92, 10, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, > 112, 108, 117, 115, 95, 52, 48, 48, 44, 105, 108, 102, 111, 114, 100, 95, > 104, 112, 115, 95, 56, 48, 48, 44, 105, 108, 102, 111, 114, 100, 95, 112, > 97, 110, 95, 102, 95, 112, 108, 117, 115, 95, 53, 48, 44, 105, 108, 102, > 111, 114, 100, 95, 120, 112, 50, 44, 107, 111, 100, 97, 107, 95, 98, 119, > 95, 52, 48, 48, 95, 99, 110, 44, 107, 111, 100, 97, 107, 95, 104, 105, > 101, 95, 40, 104, 115, 95, 105, 110, 102, 114, 97, 41, 44, 107, 111, 100, > 97, 107, 95, 116, 45, 109, 97, 120, 95, 49, 48, 48, 44, 107, 111, 100, > 97, 107, 95, 116, 45, 109, 97, 120, 95, 51, 50, 48, 48, 44, 92, 10, > 107, 111, 100, 97, 107, 95, 116, 45, 109, 97, 120, 95, 52, 48, 48, 44, > 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, 120, 95, 52, 48, 48, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 52, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 54, 54, 55, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 55, 50, 44, 114, 111, 108, 108, 101, 105, 95, 105, 114, > 95, 52, 48, 48, 44, 114, 111, 108, 108, 101, 105, 95, 111, 114, 116, 104, > 111, 95, 50, 53, 44, 114, 111, 108, 108, 101, 105, 95, 114, 101, 116, 114, > 111, 95, 49, 48, 48, 95, 116, 111, 110, 97, 108, 44, 114, 111, 108, 108, > 101, 105, 95, 114, 101, 116, 114, 111, 95, 56, 48, 115, 10, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 98, > 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 95, 98, 119, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 105, 110, 115, 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, > 114, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, > 103, 92, 32, 36, 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, > 123, 50, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, > 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, 110, > 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, 32, 58, 10, 45, 117, 32, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, > 118, 43, 95, 99, 111, 108, 100, 95, 45, 45, 44, 112, 111, 108, 97, 114, > 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 99, 111, > 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 49, 48, 48, 117, 118, 43, 95, 99, 111, 108, 100, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, > 99, 111, 108, 100, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 99, 111, 108, 100, 95, 43, > 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, > 48, 117, 118, 43, 95, 99, 111, 108, 100, 95, 43, 43, 43, 44, 92, 10, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, > 118, 43, 95, 119, 97, 114, 109, 95, 45, 45, 44, 112, 111, 108, 97, 114, > 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 119, 97, > 114, 109, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 49, 48, 48, 117, 118, 43, 95, 119, 97, 114, 109, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, > 119, 97, 114, 109, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 49, 48, 48, 117, 118, 43, 95, 119, 97, 114, 109, 95, 43, > 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 49, 48, > 48, 117, 118, 43, 95, 119, 97, 114, 109, 95, 43, 43, 43, 44, 92, 10, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, > 56, 48, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 54, 56, 48, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 54, 56, 48, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 54, 56, 48, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 99, 111, 108, 100, > 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, > 54, 56, 48, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, > 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 99, 111, 108, 100, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, > 99, 111, 108, 100, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 54, 56, 48, 95, 99, 111, 108, 100, 95, 43, 43, 44, 112, > 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 99, > 111, 108, 100, 95, 43, 43, 95, 97, 108, 116, 44, 92, 10, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 119, 97, 114, > 109, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 54, 56, 48, 95, 119, 97, 114, 109, 95, 45, 44, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, 95, 119, 97, 114, 109, > 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 54, 56, 48, > 95, 119, 97, 114, 109, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 112, 120, 45, 54, 56, 48, 95, 119, 97, 114, 109, 95, 43, 43, 44, > 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, > 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, > 55, 48, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 55, 48, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, > 55, 48, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, > 45, 55, 48, 95, 43, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, > 112, 120, 45, 55, 48, 95, 43, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 99, 111, 108, 100, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 112, 120, 45, 55, 48, 95, 99, 111, 108, 100, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 99, 111, 108, 100, > 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 99, 111, 108, 100, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 119, 97, 114, 109, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 119, 97, 114, 109, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 112, 120, 45, 55, 48, 95, 119, 97, 114, 109, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, 48, 95, 119, 97, 114, 109, > 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 120, 45, 55, > 48, 95, 119, 97, 114, 109, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, > 101, 120, 112, 105, 114, 101, 100, 41, 95, 45, 45, 45, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, > 40, 101, 120, 112, 105, 114, 101, 100, 41, 95, 45, 45, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, > 40, 101, 120, 112, 105, 114, 101, 100, 41, 95, 45, 44, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, > 101, 120, 112, 105, 114, 101, 100, 41, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, > 105, 114, 101, 100, 41, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, 105, > 114, 101, 100, 41, 95, 43, 43, 44, 92, 10, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, > 112, 105, 114, 101, 100, 41, 95, 99, 111, 108, 100, 95, 45, 45, 45, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 116, 105, 109, 101, 95, 122, 101, > 114, 111, 95, 40, 101, 120, 112, 105, 114, 101, 100, 41, 95, 99, 111, 108, > 100, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 116, 105, > 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, 105, 114, 101, 100, > 41, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 116, 105, 109, 101, 95, 122, 101, 114, 111, 95, 40, 101, 120, 112, > 105, 114, 101, 100, 41, 95, 99, 111, 108, 100, 10, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, > 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 105, 110, 115, 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, > 110, 116, 95, 112, 114, 111, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 32, 36, 49, 44, > 64, 123, 45, 97, 114, 103, 92, 32, 36, 49, 44, 64, 123, 45, 95, 36, > 48, 125, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, > 110, 115, 116, 97, 110, 116, 95, 112, 114, 111, 32, 58, 10, 45, 117, 32, > 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 45, 45, 44, > 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 45, 44, 102, > 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 44, 102, 117, 106, 105, > 95, 102, 112, 45, 49, 48, 48, 99, 95, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 49, 48, 48, 99, 95, 43, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 49, 48, 48, 99, 95, 43, 43, 95, 97, 108, 116, 44, 102, > 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 43, 43, 43, 44, > 92, 10, 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 99, > 111, 111, 108, 95, 45, 45, 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, > 48, 48, 99, 95, 99, 111, 111, 108, 95, 45, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 49, 48, 48, 99, 95, 99, 111, 111, 108, 44, 102, 117, 106, > 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 99, 111, 111, 108, 95, 43, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 99, 111, > 111, 108, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 102, 112, 45, > 49, 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 45, 45, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, > 103, 97, 116, 105, 118, 101, 95, 45, 44, 102, 117, 106, 105, 95, 102, 112, > 45, 49, 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, 102, > 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 95, 43, 44, 102, 117, 106, 105, 95, 102, 112, 45, 49, > 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 43, 43, 44, > 102, 117, 106, 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 95, 43, 43, 95, 97, 108, 116, 44, 102, 117, 106, > 105, 95, 102, 112, 45, 49, 48, 48, 99, 95, 110, 101, 103, 97, 116, 105, > 118, 101, 95, 43, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 102, 112, > 45, 51, 48, 48, 48, 98, 95, 45, 45, 44, 102, 117, 106, 105, 95, 102, > 112, 45, 51, 48, 48, 48, 98, 95, 45, 44, 102, 117, 106, 105, 95, 102, > 112, 45, 51, 48, 48, 48, 98, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 43, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 43, 43, 44, 102, 117, 106, 105, 95, 102, 112, > 45, 51, 48, 48, 48, 98, 95, 43, 43, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 51, 48, 48, 48, 98, 95, 104, 99, 44, 92, 10, 102, 117, > 106, 105, 95, 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 95, 45, 45, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 45, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 44, 102, 117, 106, 105, 95, 102, 112, 45, > 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 43, > 44, 102, 117, 106, 105, 95, 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 43, 43, 44, 102, 117, 106, 105, 95, > 102, 112, 45, 51, 48, 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, > 101, 95, 43, 43, 43, 44, 102, 117, 106, 105, 95, 102, 112, 45, 51, 48, > 48, 48, 98, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 101, 97, 114, > 108, 121, 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, > 53, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, > 53, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, > 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 43, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 43, 43, 44, > 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 45, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 54, 53, 95, 110, 101, 103, 97, 116, 105, 118, 101, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 53, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 54, 54, 53, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 104, 99, > 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, > 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, > 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 44, 112, > 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 43, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 43, 43, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 43, 43, 43, 44, 92, > 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 54, 57, 95, 99, 111, > 108, 100, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, > 54, 57, 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 54, 57, 95, 99, 111, 108, 100, 44, 112, 111, 108, 97, > 114, 111, 105, 100, 95, 54, 54, 57, 95, 99, 111, 108, 100, 95, 43, 44, > 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 45, > 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 45, > 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 43, 44, 112, 111, 108, > 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 43, 43, 44, 92, 10, 112, > 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 99, 111, 108, 100, > 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, > 95, 99, 111, 108, 100, 95, 45, 44, 112, 111, 108, 97, 114, 111, 105, 100, > 95, 54, 57, 48, 95, 99, 111, 108, 100, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 57, 48, 95, 99, 111, 108, 100, 95, 43, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 99, 111, 108, 100, 95, > 43, 43, 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, > 48, 95, 119, 97, 114, 109, 95, 45, 45, 44, 112, 111, 108, 97, 114, 111, > 105, 100, 95, 54, 57, 48, 95, 119, 97, 114, 109, 95, 45, 44, 112, 111, > 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 119, 97, 114, 109, 44, > 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, 95, 119, 97, 114, > 109, 95, 43, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, 57, 48, > 95, 119, 97, 114, 109, 95, 43, 43, 10, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, > 110, 116, 95, 112, 114, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, 110, 116, > 95, 112, 114, 111, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 99, 111, 108, 111, 114, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 36, > 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, 45, > 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 99, > 111, 108, 111, 114, 32, 58, 10, 45, 117, 32, 97, 103, 102, 97, 95, 117, > 108, 116, 114, 97, 95, 99, 111, 108, 111, 114, 95, 49, 48, 48, 44, 97, > 103, 102, 97, 95, 118, 105, 115, 116, 97, 95, 50, 48, 48, 44, 102, 117, > 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 50, 48, 48, 44, 102, > 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 104, 103, 95, 49, > 54, 48, 48, 44, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, > 95, 114, 101, 97, 108, 97, 95, 49, 48, 48, 44, 102, 117, 106, 105, 95, > 115, 117, 112, 101, 114, 105, 97, 95, 120, 45, 116, 114, 97, 95, 56, 48, > 48, 44, 92, 10, 107, 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, > 49, 48, 48, 95, 120, 112, 114, 111, 44, 107, 111, 100, 97, 107, 95, 101, > 108, 105, 116, 101, 95, 99, 111, 108, 111, 114, 95, 50, 48, 48, 44, 107, > 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, 99, 111, 108, 111, 114, > 95, 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 49, 54, 48, 95, 110, 99, 44, 107, 111, 100, 97, 107, 95, 112, > 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, 44, 108, 111, 109, > 111, 103, 114, 97, 112, 104, 121, 95, 114, 101, 100, 115, 99, 97, 108, 101, > 95, 49, 48, 48, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, > 99, 111, 108, 111, 114, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 95, 99, 111, 108, 111, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 110, 101, 119, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 123, > 109, 97, 120, 40, 49, 44, 52, 42, 36, 49, 43, 36, 50, 45, 51, 41, > 125, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 51, 45, 45, > 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 110, > 101, 119, 32, 58, 10, 45, 117, 32, 102, 117, 106, 105, 95, 49, 54, 48, > 99, 95, 45, 44, 102, 117, 106, 105, 95, 49, 54, 48, 99, 44, 102, 117, > 106, 105, 95, 49, 54, 48, 99, 95, 43, 44, 102, 117, 106, 105, 95, 49, > 54, 48, 99, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 52, 48, > 48, 104, 95, 45, 44, 102, 117, 106, 105, 95, 52, 48, 48, 104, 44, 102, > 117, 106, 105, 95, 52, 48, 48, 104, 95, 43, 44, 102, 117, 106, 105, 95, > 52, 48, 48, 104, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 56, > 48, 48, 122, 95, 45, 44, 102, 117, 106, 105, 95, 56, 48, 48, 122, 44, > 102, 117, 106, 105, 95, 56, 48, 48, 122, 95, 43, 44, 102, 117, 106, 105, > 95, 56, 48, 48, 122, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, > 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, 45, 44, 102, 117, 106, > 105, 95, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 44, 102, 117, 106, > 105, 95, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, 43, 44, 102, > 117, 106, 105, 95, 105, 108, 102, 111, 114, 100, 95, 104, 112, 53, 95, 43, > 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 49, 54, 48, 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, > 116, 114, 97, 95, 49, 54, 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 49, 54, 48, 95, 43, 44, 107, 111, 100, 97, 107, > 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 43, 43, 44, 92, > 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, > 48, 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 52, 48, 48, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 52, 48, 48, 95, 43, 43, 44, 92, 10, 107, 111, > 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 56, 48, 48, 95, 45, > 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 56, 48, > 48, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 56, > 48, 48, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 56, 48, 48, 95, 43, 43, 44, 92, 10, 107, 111, 100, 97, 107, > 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 95, 45, 44, 107, 111, 100, > 97, 107, 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 44, 107, 111, 100, > 97, 107, 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 95, 43, 44, 107, > 111, 100, 97, 107, 95, 116, 109, 97, 120, 95, 51, 50, 48, 48, 95, 43, > 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, 120, 95, > 52, 48, 48, 95, 45, 44, 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, > 120, 95, 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 116, 114, 105, 45, > 120, 95, 52, 48, 48, 95, 43, 44, 107, 111, 100, 97, 107, 95, 116, 114, > 105, 45, 120, 95, 52, 48, 48, 95, 43, 43, 10, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, > 97, 116, 105, 118, 101, 95, 110, 101, 119, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, > 116, 105, 118, 101, 95, 110, 101, 119, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 32, > 58, 10, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, > 32, 123, 109, 97, 120, 40, 49, 44, 52, 42, 36, 49, 43, 36, 50, 45, > 51, 41, 125, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 51, > 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, > 95, 111, 108, 100, 32, 58, 10, 45, 117, 32, 102, 117, 106, 105, 95, 105, > 108, 102, 111, 114, 100, 95, 100, 101, 108, 116, 97, 95, 51, 50, 48, 48, > 95, 45, 44, 102, 117, 106, 105, 95, 105, 108, 102, 111, 114, 100, 95, 100, > 101, 108, 116, 97, 95, 51, 50, 48, 48, 44, 102, 117, 106, 105, 95, 105, > 108, 102, 111, 114, 100, 95, 100, 101, 108, 116, 97, 95, 51, 50, 48, 48, > 95, 43, 44, 102, 117, 106, 105, 95, 105, 108, 102, 111, 114, 100, 95, 100, > 101, 108, 116, 97, 95, 51, 50, 48, 48, 95, 43, 43, 44, 92, 10, 102, > 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, 49, 54, 48, 48, 95, > 45, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, 49, 54, > 48, 48, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, 110, 95, 49, > 54, 48, 48, 95, 43, 44, 102, 117, 106, 105, 95, 110, 101, 111, 112, 97, > 110, 95, 49, 54, 48, 48, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, > 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 48, 48, 95, 45, 44, 102, > 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 48, 48, 44, > 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 48, 48, > 95, 43, 44, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, > 49, 48, 48, 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 115, 117, > 112, 101, 114, 105, 97, 95, 52, 48, 48, 95, 45, 44, 102, 117, 106, 105, > 95, 115, 117, 112, 101, 114, 105, 97, 95, 52, 48, 48, 44, 102, 117, 106, > 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 52, 48, 48, 95, 43, 44, > 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 52, 48, 48, > 95, 43, 43, 44, 92, 10, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, > 105, 97, 95, 56, 48, 48, 95, 45, 44, 102, 117, 106, 105, 95, 115, 117, > 112, 101, 114, 105, 97, 95, 56, 48, 48, 44, 102, 117, 106, 105, 95, 115, > 117, 112, 101, 114, 105, 97, 95, 56, 48, 48, 95, 43, 44, 102, 117, 106, > 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 56, 48, 48, 95, 43, 43, > 44, 92, 10, 102, 117, 106, 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, > 49, 54, 48, 48, 95, 45, 44, 102, 117, 106, 105, 95, 115, 117, 112, 101, > 114, 105, 97, 95, 49, 54, 48, 48, 44, 102, 117, 106, 105, 95, 115, 117, > 112, 101, 114, 105, 97, 95, 49, 54, 48, 48, 95, 43, 44, 102, 117, 106, > 105, 95, 115, 117, 112, 101, 114, 105, 97, 95, 49, 54, 48, 48, 95, 43, > 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 49, 54, 48, 95, 110, 99, 95, 45, 44, 107, 111, 100, 97, 107, 95, > 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 110, 99, 44, 107, 111, > 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 110, > 99, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, > 95, 49, 54, 48, 95, 110, 99, 95, 43, 43, 44, 92, 10, 107, 111, 100, > 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, > 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, > 49, 54, 48, 95, 118, 99, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, > 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, 95, 43, 44, 107, 111, 100, > 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 49, 54, 48, 95, 118, 99, > 95, 43, 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, > 114, 97, 95, 52, 48, 48, 95, 110, 99, 95, 45, 44, 107, 111, 100, 97, > 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, 110, 99, 44, > 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, > 95, 110, 99, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, > 114, 97, 95, 52, 48, 48, 95, 110, 99, 95, 43, 43, 44, 92, 10, 107, > 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, > 117, 99, 95, 45, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, > 97, 95, 52, 48, 48, 95, 117, 99, 44, 107, 111, 100, 97, 107, 95, 112, > 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, 117, 99, 95, 43, 44, 107, > 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, > 117, 99, 95, 43, 43, 44, 92, 10, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 52, 48, 48, 95, 118, 99, 95, 45, 44, 107, 111, > 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, 48, 48, 95, 118, > 99, 44, 107, 111, 100, 97, 107, 95, 112, 111, 114, 116, 114, 97, 95, 52, > 48, 48, 95, 118, 99, 95, 43, 44, 107, 111, 100, 97, 107, 95, 112, 111, > 114, 116, 114, 97, 95, 52, 48, 48, 95, 118, 99, 95, 43, 43, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, 115, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, 36, > 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, 45, > 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, 115, 32, 58, 10, 45, > 117, 32, 54, 48, 115, 44, 54, 48, 115, 95, 50, 44, 54, 48, 115, 95, > 51, 44, 104, 107, 102, 105, 108, 109, 44, 108, 111, 109, 111, 44, 110, 111, > 115, 116, 97, 108, 103, 105, 99, 44, 114, 101, 116, 114, 111, 44, 115, 117, > 116, 114, 111, 102, 120, 44, 118, 105, 110, 116, 97, 103, 101, 44, 118, 105, > 110, 116, 97, 103, 101, 95, 50, 44, 119, 97, 114, 109, 44, 119, 97, 114, > 109, 95, 115, 112, 114, 105, 110, 103, 44, 119, 97, 114, 109, 95, 121, 101, > 108, 108, 111, 119, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 111, 116, 104, 101, 114, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 112, 114, 105, 110, 116, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 32, 36, 49, 44, > 64, 123, 45, 97, 114, 103, 92, 32, 36, 49, 44, 64, 123, 45, 95, 36, > 48, 125, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 112, > 114, 105, 110, 116, 32, 58, 10, 45, 117, 32, 102, 117, 106, 105, 51, 53, > 49, 48, 95, 99, 111, 110, 115, 116, 108, 99, 108, 105, 112, 44, 102, 117, > 106, 105, 51, 53, 49, 48, 95, 99, 111, 110, 115, 116, 108, 109, 97, 112, > 44, 102, 117, 106, 105, 51, 53, 49, 48, 95, 99, 117, 115, 112, 99, 108, > 105, 112, 44, 92, 10, 102, 117, 106, 105, 51, 53, 49, 51, 95, 99, 111, > 110, 115, 116, 108, 99, 108, 105, 112, 44, 102, 117, 106, 105, 51, 53, 49, > 51, 95, 99, 111, 110, 115, 116, 108, 109, 97, 112, 44, 102, 117, 106, 105, > 51, 53, 49, 51, 95, 99, 117, 115, 112, 99, 108, 105, 112, 44, 92, 10, > 107, 111, 100, 97, 107, 50, 51, 56, 51, 95, 99, 111, 110, 115, 116, 108, > 99, 108, 105, 112, 44, 107, 111, 100, 97, 107, 50, 51, 56, 51, 95, 99, > 111, 110, 115, 116, 108, 109, 97, 112, 44, 107, 111, 100, 97, 107, 50, 51, > 56, 51, 95, 99, 117, 115, 112, 99, 108, 105, 112, 44, 92, 10, 107, 111, > 100, 97, 107, 50, 51, 57, 51, 95, 99, 111, 110, 115, 116, 108, 99, 108, > 105, 112, 44, 107, 111, 100, 97, 107, 50, 51, 57, 51, 95, 99, 111, 110, > 115, 116, 108, 109, 97, 112, 44, 107, 111, 100, 97, 107, 50, 51, 57, 51, > 95, 99, 117, 115, 112, 99, 108, 105, 112, 10, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 112, 114, 105, 110, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 95, 112, 114, 105, 110, 116, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, > 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, 101, 32, 58, > 10, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 32, 36, 49, 44, 64, 123, 45, 97, 114, 103, 92, 32, > 36, 49, 44, 64, 123, 45, 95, 36, 48, 125, 125, 44, 36, 123, 50, 45, > 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, > 101, 32, 58, 10, 45, 117, 32, 97, 103, 102, 97, 95, 112, 114, 101, 99, > 105, 115, 97, 95, 49, 48, 48, 44, 102, 117, 106, 105, 95, 97, 115, 116, > 105, 97, 95, 49, 48, 48, 102, 44, 102, 117, 106, 105, 95, 102, 112, 95, > 49, 48, 48, 99, 44, 102, 117, 106, 105, 95, 112, 114, 111, 118, 105, 97, > 95, 49, 48, 48, 102, 44, 102, 117, 106, 105, 95, 112, 114, 111, 118, 105, > 97, 95, 52, 48, 48, 102, 44, 102, 117, 106, 105, 95, 112, 114, 111, 118, > 105, 97, 95, 52, 48, 48, 120, 44, 102, 117, 106, 105, 95, 115, 101, 110, > 115, 105, 97, 95, 49, 48, 48, 44, 92, 10, 102, 117, 106, 105, 95, 115, > 117, 112, 101, 114, 105, 97, 95, 50, 48, 48, 95, 120, 112, 114, 111, 44, > 102, 117, 106, 105, 95, 118, 101, 108, 118, 105, 97, 95, 53, 48, 44, 103, > 101, 110, 101, 114, 105, 99, 95, 102, 117, 106, 105, 95, 97, 115, 116, 105, > 97, 95, 49, 48, 48, 44, 103, 101, 110, 101, 114, 105, 99, 95, 102, 117, > 106, 105, 95, 112, 114, 111, 118, 105, 97, 95, 49, 48, 48, 44, 103, 101, > 110, 101, 114, 105, 99, 95, 102, 117, 106, 105, 95, 118, 101, 108, 118, 105, > 97, 95, 49, 48, 48, 44, 92, 10, 103, 101, 110, 101, 114, 105, 99, 95, > 107, 111, 100, 97, 99, 104, 114, 111, 109, 101, 95, 54, 52, 44, 103, 101, > 110, 101, 114, 105, 99, 95, 107, 111, 100, 97, 107, 95, 101, 107, 116, 97, > 99, 104, 114, 111, 109, 101, 95, 49, 48, 48, 95, 118, 115, 44, 107, 111, > 100, 97, 107, 95, 101, 45, 49, 48, 48, 95, 103, 120, 95, 101, 107, 116, > 97, 99, 104, 114, 111, 109, 101, 95, 49, 48, 48, 44, 107, 111, 100, 97, > 107, 95, 101, 107, 116, 97, 99, 104, 114, 111, 109, 101, 95, 49, 48, 48, > 95, 118, 115, 44, 107, 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, > 99, 104, 114, 111, 109, 101, 95, 50, 48, 48, 44, 92, 10, 107, 111, 100, > 97, 107, 95, 101, 108, 105, 116, 101, 95, 99, 104, 114, 111, 109, 101, 95, > 52, 48, 48, 44, 107, 111, 100, 97, 107, 95, 101, 108, 105, 116, 101, 95, > 101, 120, 116, 114, 97, 99, 111, 108, 111, 114, 95, 49, 48, 48, 44, 107, > 111, 100, 97, 107, 95, 107, 111, 100, 97, 99, 104, 114, 111, 109, 101, 95, > 50, 48, 48, 44, 107, 111, 100, 97, 107, 95, 107, 111, 100, 97, 99, 104, > 114, 111, 109, 101, 95, 50, 53, 44, 107, 111, 100, 97, 107, 95, 107, 111, > 100, 97, 99, 104, 114, 111, 109, 101, 95, 54, 52, 44, 108, 111, 109, 111, > 103, 114, 97, 112, 104, 121, 95, 120, 45, 112, 114, 111, 95, 115, 108, 105, > 100, 101, 95, 50, 48, 48, 44, 92, 10, 112, 111, 108, 97, 114, 111, 105, > 100, 95, 54, 54, 57, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 54, > 57, 48, 44, 112, 111, 108, 97, 114, 111, 105, 100, 95, 112, 111, 108, 97, > 99, 104, 114, 111, 109, 101, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, > 105, 100, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, 101, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 32, 58, 10, 45, 105, > 102, 32, 36, 49, 10, 100, 105, 114, 61, 64, 123, 45, 112, 97, 116, 104, > 95, 117, 115, 101, 114, 125, 10, 45, 105, 102, 32, 123, 33, 64, 123, 45, > 105, 115, 95, 119, 105, 110, 100, 111, 119, 115, 125, 125, 10, 100, 105, 114, > 61, 36, 100, 105, 114, 47, 46, 103, 109, 105, 99, 95, 102, 105, 108, 109, > 95, 112, 114, 101, 115, 101, 116, 115, 10, 45, 105, 102, 32, 36, 100, 105, > 114, 32, 45, 101, 108, 115, 101, 32, 45, 120, 32, 34, 109, 107, 100, 105, > 114, 32, 34, 36, 100, 105, 114, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 110, 97, 114, 103, 40, > 36, 95, 102, 111, 114, 99, 101, 95, 114, 101, 100, 111, 119, 110, 108, 111, > 97, 100, 41, 125, 10, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, > 109, 105, 99, 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, > 110, 101, 116, 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, > 101, 115, 101, 116, 115, 47, 36, 50, 46, 99, 105, 109, 103, 122, 32, 45, > 111, 91, 45, 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, > 36, 50, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, 101, 10, 45, > 105, 102, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 50, 46, > 99, 105, 109, 103, 122, 32, 45, 105, 32, 36, 100, 105, 114, 47, 103, 109, > 105, 99, 95, 36, 50, 46, 99, 105, 109, 103, 122, 10, 45, 101, 108, 115, > 101, 32, 45, 105, 32, 104, 116, 116, 112, 58, 47, 47, 103, 109, 105, 99, > 46, 115, 111, 117, 114, 99, 101, 102, 111, 114, 103, 101, 46, 110, 101, 116, > 47, 100, 97, 116, 97, 95, 102, 105, 108, 109, 95, 112, 114, 101, 115, 101, > 116, 115, 47, 36, 50, 46, 99, 105, 109, 103, 122, 32, 45, 111, 91, 45, > 49, 93, 32, 36, 100, 105, 114, 47, 103, 109, 105, 99, 95, 36, 50, 46, > 99, 105, 109, 103, 122, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 109, 97, 112, 95, 99, 108, 117, 116, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 10, 45, 97, 112, 112, 108, 121, 95, 103, 97, 109, > 109, 97, 91, 48, 93, 32, 123, 49, 48, 94, 36, 51, 125, 10, 45, 45, > 91, 48, 93, 32, 49, 50, 56, 32, 45, 42, 91, 48, 93, 32, 36, 52, > 32, 45, 43, 91, 48, 93, 32, 49, 50, 56, 32, 45, 43, 91, 48, 93, > 32, 36, 53, 32, 45, 99, 91, 48, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 105, 102, 32, 123, 36, 54, 124, 124, 36, 55, 124, 124, 36, 56, 125, > 10, 45, 114, 103, 98, 50, 104, 115, 118, 91, 48, 93, 10, 45, 115, 104, > 91, 48, 93, 32, 48, 44, 48, 32, 45, 43, 91, 45, 49, 93, 32, 36, > 54, 32, 45, 37, 91, 45, 49, 93, 32, 51, 54, 48, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 115, 104, 91, 48, 93, 32, 49, 44, 49, 32, > 45, 43, 91, 45, 49, 93, 32, 36, 55, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 104, 115, > 118, 50, 114, 103, 98, 91, 48, 93, 10, 45, 105, 102, 32, 36, 56, 32, > 45, 110, 91, 48, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, > 108, 97, 103, 101, 95, 98, 119, 32, 58, 10, 45, 107, 91, 48, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, > 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, > 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, > 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 98, 119, 125, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, > 95, 105, 110, 115, 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, > 114, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, 104, 41, 62, > 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, > 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, > 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, 108, 97, 98, > 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, 117, 116, 112, > 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, > 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, > 116, 97, 110, 116, 95, 99, 111, 110, 115, 117, 109, 101, 114, 125, 10, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 99, 111, 108, 108, 97, 103, 101, 95, 105, 110, 115, 116, 97, 110, 116, > 95, 112, 114, 111, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, > 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, > 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, > 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, > 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, > 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, > 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, > 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 105, 110, 115, 116, 97, 110, 116, 95, 112, 114, 111, 125, 10, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, > 111, 108, 108, 97, 103, 101, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, > 99, 111, 108, 111, 114, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, > 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, > 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, > 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, > 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, > 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, > 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 99, 111, 108, 111, 114, 125, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 110, 101, 103, 97, 116, > 105, 118, 101, 95, 110, 101, 119, 32, 58, 10, 45, 107, 91, 48, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, > 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, > 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, > 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 110, 101, 119, 125, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 110, 101, 103, 97, 116, > 105, 118, 101, 95, 111, 108, 100, 32, 58, 10, 45, 107, 91, 48, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, > 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, > 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, > 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, > 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, > 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, > 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, > 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, 100, 125, > 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, > 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 111, 116, 104, 101, 114, > 115, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, > 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, 104, 41, 62, > 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, > 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, > 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, > 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, 108, 97, 98, > 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, 117, 116, 112, > 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, > 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, > 101, 114, 115, 125, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 95, 112, > 114, 105, 110, 116, 32, 58, 10, 45, 107, 91, 48, 93, 32, 45, 116, 111, > 95, 114, 103, 98, 32, 45, 105, 102, 32, 123, 109, 97, 120, 40, 119, 44, > 104, 41, 62, 36, 49, 125, 32, 45, 105, 102, 32, 123, 119, 62, 104, 125, > 32, 45, 114, 50, 100, 120, 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, > 45, 114, 50, 100, 121, 32, 36, 49, 32, 45, 101, 110, 100, 105, 102, 32, > 45, 101, 110, 100, 105, 102, 10, 95, 110, 98, 99, 61, 36, 50, 32, 95, > 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 61, 36, 51, 32, 95, 111, > 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 61, 36, 52, 32, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, > 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 64, 123, 45, 95, 103, 105, > 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, > 112, 114, 105, 110, 116, 125, 10, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, > 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, 101, 32, 58, 10, 45, 107, > 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, > 123, 109, 97, 120, 40, 119, 44, 104, 41, 62, 36, 49, 125, 32, 45, 105, > 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, 50, 100, 120, 32, 36, 49, > 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 49, 32, > 45, 101, 110, 100, 105, 102, 32, 45, 101, 110, 100, 105, 102, 10, 95, 110, > 98, 99, 61, 36, 50, 32, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, > 101, 61, 36, 51, 32, 95, 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, > 101, 61, 36, 52, 32, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, > 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, > 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, 108, 105, 100, > 101, 125, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, > 95, 102, 105, 108, 109, 95, 99, 111, 108, 108, 97, 103, 101, 32, 58, 10, > 36, 61, 97, 114, 103, 32, 45, 112, 114, 111, 103, 114, 101, 115, 115, 32, > 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 35, 10, 112, 114, 101, > 115, 101, 116, 61, 36, 123, 97, 114, 103, 123, 36, 62, 43, 49, 125, 125, > 10, 45, 45, 108, 91, 48, 93, 10, 45, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 91, 48, 93, 32, 49, > 44, 36, 112, 114, 101, 115, 101, 116, 44, 48, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 48, 44, 48, 10, 40, 123, 39, 36, 112, 114, 101, 115, 101, > 116, 39, 125, 41, 32, 45, 114, 101, 112, 108, 97, 99, 101, 91, 45, 49, > 93, 32, 123, 39, 95, 39, 125, 44, 51, 50, 32, 45, 102, 91, 45, 49, > 93, 32, 105, 102, 40, 120, 61, 61, 48, 38, 38, 105, 62, 61, 123, 39, > 97, 39, 125, 38, 38, 105, 60, 61, 123, 39, 122, 39, 125, 44, 105, 43, > 123, 39, 65, 39, 125, 45, 123, 39, 97, 39, 125, 44, 105, 41, 32, 116, > 105, 116, 108, 101, 61, 64, 123, 45, 49, 44, 116, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, > 110, 101, 91, 45, 49, 93, 32, 36, 116, 105, 116, 108, 101, 44, 50, 44, > 50, 44, 36, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 44, 50, > 44, 49, 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 10, 45, 112, 114, > 111, 103, 114, 101, 115, 115, 32, 123, 40, 49, 43, 36, 62, 41, 42, 49, > 48, 48, 47, 36, 35, 125, 10, 45, 100, 111, 110, 101, 10, 45, 116, 101, > 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 48, 93, 32, 34, 79, > 114, 105, 103, 105, 110, 97, 108, 32, 105, 109, 97, 103, 101, 34, 44, 50, > 44, 50, 44, 36, 95, 108, 97, 98, 101, 108, 95, 115, 105, 122, 101, 44, > 50, 44, 49, 44, 50, 53, 53, 10, 45, 105, 102, 32, 123, 33, 36, 95, > 111, 117, 116, 112, 117, 116, 95, 116, 121, 112, 101, 125, 32, 45, 102, 114, > 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 102, 114, 97, 109, 101, > 32, 53, 44, 53, 44, 50, 53, 53, 32, 45, 45, 32, 50, 53, 53, 32, > 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 123, 109, > 105, 110, 40, 36, 95, 110, 98, 99, 44, 64, 35, 41, 125, 32, 45, 43, > 32, 50, 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, > 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 100, 111, > 119, 110, 108, 111, 97, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 100, 111, 119, > 110, 108, 111, 97, 100, 32, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, > 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 98, 119, 125, 44, > 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, > 116, 101, 95, 102, 105, 108, 109, 95, 105, 110, 115, 116, 97, 110, 116, 95, > 99, 111, 110, 115, 117, 109, 101, 114, 125, 44, 92, 10, 64, 123, 45, 95, > 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, > 109, 95, 105, 110, 115, 116, 97, 110, 116, 95, 112, 114, 111, 125, 44, 92, > 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, > 101, 95, 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, > 99, 111, 108, 111, 114, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, > 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 110, > 101, 103, 97, 116, 105, 118, 101, 95, 110, 101, 119, 125, 44, 92, 10, 64, > 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 110, 101, 103, 97, 116, 105, 118, 101, 95, 111, 108, > 100, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 111, 116, 104, 101, 114, > 115, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, > 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 112, 114, 105, 110, 116, > 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, 95, 101, 109, 117, > 108, 97, 116, 101, 95, 102, 105, 108, 109, 95, 99, 111, 108, 111, 114, 115, > 108, 105, 100, 101, 125, 44, 92, 10, 64, 123, 45, 95, 103, 105, 109, 112, > 95, 101, 109, 117, 108, 97, 116, 101, 95, 103, 114, 97, 105, 110, 125, 10, > 45, 108, 91, 93, 32, 45, 112, 114, 111, 103, 114, 101, 115, 115, 32, 48, > 10, 45, 105, 102, 32, 36, 49, 32, 95, 102, 111, 114, 99, 101, 95, 114, > 101, 100, 111, 119, 110, 108, 111, 97, 100, 61, 49, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 95, 110, 98, 95, > 112, 114, 101, 115, 101, 116, 115, 32, 45, 108, 91, 93, 32, 45, 95, 103, > 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, 102, 105, 108, 109, > 32, 49, 44, 36, 123, 95, 112, 114, 101, 115, 101, 116, 123, 49, 43, 36, > 62, 125, 125, 44, 49, 44, 49, 44, 48, 44, 48, 44, 49, 44, 48, 32, > 45, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 40, 36, 62, 43, 49, > 41, 42, 49, 48, 48, 47, 36, 95, 110, 98, 95, 112, 114, 101, 115, 101, > 116, 115, 125, 32, 45, 111, 110, 102, 97, 105, 108, 32, 45, 101, 110, 100, > 108, 32, 45, 114, 109, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, > 108, 10, 95, 103, 105, 109, 112, 95, 101, 109, 117, 108, 97, 116, 101, 95, > 102, 105, 108, 109, 95, 100, 111, 119, 110, 108, 111, 97, 100, 32, 58, 10, > 95, 110, 98, 95, 112, 114, 101, 115, 101, 116, 115, 61, 36, 35, 10, 36, > 61, 95, 112, 114, 101, 115, 101, 116, 10, 103, 105, 109, 112, 95, 100, 114, > 111, 115, 116, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 10, 45, 105, 102, 32, 123, 36, 49, 54, 61, 61, 49, 125, 32, 49, > 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, 120, 39, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, 44, 39, > 121, 39, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 57, > 10, 120, 48, 61, 123, 114, 111, 117, 110, 100, 40, 36, 49, 42, 119, 47, > 49, 48, 48, 41, 125, 32, 121, 48, 61, 123, 114, 111, 117, 110, 100, 40, > 36, 50, 42, 104, 47, 49, 48, 48, 41, 125, 32, 120, 49, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 51, 42, 119, 47, 49, 48, 48, 41, 125, 32, > 121, 49, 61, 123, 114, 111, 117, 110, 100, 40, 36, 52, 42, 104, 47, 49, > 48, 48, 41, 125, 10, 120, 50, 61, 123, 114, 111, 117, 110, 100, 40, 36, > 53, 42, 119, 47, 49, 48, 48, 41, 125, 32, 121, 50, 61, 123, 114, 111, > 117, 110, 100, 40, 36, 54, 42, 104, 47, 49, 48, 48, 41, 125, 32, 120, > 51, 61, 123, 114, 111, 117, 110, 100, 40, 36, 55, 42, 119, 47, 49, 48, > 48, 41, 125, 32, 121, 51, 61, 123, 114, 111, 117, 110, 100, 40, 36, 56, > 42, 104, 47, 49, 48, 48, 41, 125, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 44, 49, 44, 50, 44, 45, 51, 50, 55, 54, 55, 32, 45, 112, > 111, 108, 121, 103, 111, 110, 91, 45, 49, 93, 32, 52, 44, 36, 120, 48, > 44, 36, 121, 48, 44, 36, 120, 49, 44, 36, 121, 49, 44, 36, 120, 50, > 44, 36, 121, 50, 44, 36, 120, 51, 44, 36, 121, 51, 44, 49, 44, 45, > 54, 53, 53, 51, 53, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, > 48, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, > 45, 54, 53, 53, 51, 53, 44, 120, 48, 51, 61, 36, 120, 48, 43, 40, > 121, 45, 36, 121, 48, 41, 47, 40, 36, 121, 51, 45, 36, 121, 48, 41, > 42, 40, 36, 120, 51, 45, 36, 120, 48, 41, 59, 120, 49, 50, 61, 36, > 120, 49, 43, 40, 121, 45, 36, 121, 49, 41, 47, 40, 36, 121, 50, 45, > 36, 121, 49, 41, 42, 40, 36, 120, 50, 45, 36, 120, 49, 41, 59, 40, > 120, 45, 120, 48, 51, 41, 47, 40, 120, 49, 50, 45, 120, 48, 51, 41, > 42, 40, 119, 45, 49, 41, 44, 105, 41, 39, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, > 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 54, 53, > 53, 51, 53, 44, 121, 48, 49, 61, 36, 121, 48, 43, 40, 120, 45, 36, > 120, 48, 41, 47, 40, 36, 120, 49, 45, 36, 120, 48, 41, 42, 40, 36, > 121, 49, 45, 36, 121, 48, 41, 59, 121, 51, 50, 61, 36, 121, 51, 43, > 40, 120, 45, 36, 120, 51, 41, 47, 40, 36, 120, 50, 45, 36, 120, 51, > 41, 42, 40, 36, 121, 50, 45, 36, 121, 51, 41, 59, 40, 121, 45, 121, > 48, 49, 41, 47, 40, 121, 51, 50, 45, 121, 48, 49, 41, 42, 40, 104, > 45, 49, 41, 44, 105, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 120, 115, 104, 105, 102, 116, 61, 123, 119, 42, 36, 49, 48, 47, 49, 48, > 48, 125, 32, 121, 115, 104, 105, 102, 116, 61, 123, 104, 42, 36, 49, 49, > 47, 49, 48, 48, 125, 32, 97, 108, 112, 104, 97, 61, 123, 45, 36, 49, > 50, 42, 112, 105, 47, 49, 56, 48, 125, 32, 99, 97, 61, 123, 99, 111, > 115, 40, 36, 97, 108, 112, 104, 97, 41, 47, 36, 49, 51, 125, 32, 115, > 97, 61, 123, 115, 105, 110, 40, 36, 97, 108, 112, 104, 97, 41, 47, 36, > 49, 51, 125, 32, 119, 50, 61, 123, 119, 47, 50, 125, 32, 104, 50, 61, > 123, 104, 47, 50, 125, 10, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, > 40, 105, 61, 61, 45, 51, 50, 55, 54, 55, 44, 105, 44, 88, 61, 105, > 40, 120, 44, 121, 44, 48, 44, 48, 41, 45, 36, 119, 50, 59, 89, 61, > 105, 40, 120, 44, 121, 44, 48, 44, 49, 41, 45, 36, 104, 50, 59, 105, > 102, 40, 99, 61, 61, 48, 44, 36, 119, 50, 45, 36, 120, 115, 104, 105, > 102, 116, 43, 88, 42, 36, 99, 97, 45, 89, 42, 36, 115, 97, 44, 36, > 104, 50, 45, 36, 121, 115, 104, 105, 102, 116, 43, 88, 42, 36, 115, 97, > 43, 89, 42, 36, 99, 97, 41, 41, 39, 10, 45, 105, 102, 32, 123, 36, > 49, 52, 61, 61, 48, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, > 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, > 61, 45, 51, 50, 55, 54, 55, 44, 120, 44, 105, 41, 39, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, > 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, > 45, 51, 50, 55, 54, 55, 44, 121, 44, 105, 41, 39, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 52, 61, > 61, 49, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, > 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 51, > 50, 55, 54, 55, 44, 120, 44, 119, 45, 49, 45, 105, 41, 39, 32, 45, > 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, > 44, 49, 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, > 61, 45, 51, 50, 55, 54, 55, 44, 121, 44, 105, 41, 39, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 52, > 61, 61, 50, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, > 51, 50, 55, 54, 55, 44, 120, 44, 105, 41, 39, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, > 45, 102, 91, 45, 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 51, > 50, 55, 54, 55, 44, 121, 44, 104, 45, 49, 45, 105, 41, 39, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, 101, 32, 45, 115, 104, > 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, 102, 91, 45, 49, 93, 32, > 39, 105, 102, 40, 105, 61, 61, 45, 51, 50, 55, 54, 55, 44, 120, 44, > 119, 45, 49, 45, 105, 41, 39, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 102, 91, 45, > 49, 93, 32, 39, 105, 102, 40, 105, 61, 61, 45, 51, 50, 55, 54, 55, > 44, 121, 44, 104, 45, 49, 45, 105, 41, 39, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 49, 54, 60, 50, 125, 32, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 48, 44, 123, 36, 49, 54, 61, 61, 48, 125, 44, > 36, 49, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 115, > 101, 10, 45, 45, 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, > 93, 44, 48, 44, 49, 44, 36, 49, 53, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 45, 105, 102, 32, 123, 36, 49, 54, 61, 61, 51, 125, 32, 45, > 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, > 108, 112, 104, 97, 10, 45, 101, 110, 100, 105, 102, 10, 45, 100, 111, 110, > 101, 10, 45, 105, 102, 32, 123, 36, 49, 54, 61, 61, 49, 125, 32, 45, > 119, 97, 114, 112, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 48, 44, > 49, 44, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, > 110, 101, 10, 103, 105, 109, 112, 95, 100, 114, 111, 115, 116, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 123, 33, 36, > 49, 55, 125, 32, 45, 103, 105, 109, 112, 95, 100, 114, 111, 115, 116, 101, > 32, 36, 42, 32, 45, 101, 108, 115, 101, 32, 45, 112, 111, 108, 121, 103, > 111, 110, 32, 52, 44, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, > 44, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 44, 36, 55, 37, > 44, 36, 56, 37, 44, 48, 46, 51, 44, 48, 44, 48, 44, 48, 44, 50, > 53, 53, 32, 45, 101, 110, 100, 105, 102, 10, 45, 112, 111, 108, 121, 103, > 111, 110, 32, 52, 44, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, > 44, 36, 52, 37, 44, 36, 53, 37, 44, 36, 54, 37, 44, 36, 55, 37, > 44, 36, 56, 37, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 51, > 44, 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, 50, 53, 53, > 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, > 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, > 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, > 101, 108, 108, 105, 112, 115, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, > 51, 44, 51, 44, 48, 44, 49, 44, 50, 53, 53, 44, 48, 44, 50, 53, > 53, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, 101, 32, 36, > 51, 37, 44, 36, 52, 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 10, 45, 101, 108, 108, 105, 112, 115, 101, 32, 36, 53, 37, > 44, 36, 54, 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, 48, 44, 48, > 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 101, 108, 108, 105, 112, 115, > 101, 32, 36, 53, 37, 44, 36, 54, 37, 44, 51, 44, 51, 44, 48, 44, > 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 10, 45, 101, 108, 108, 105, 112, 115, 101, 32, > 36, 55, 37, 44, 36, 56, 37, 44, 51, 44, 51, 44, 48, 44, 49, 44, > 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 32, 45, 101, > 108, 108, 105, 112, 115, 101, 32, 36, 55, 37, 44, 36, 56, 37, 44, 51, > 44, 51, 44, 48, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, > 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, > 95, 102, 114, 97, 109, 101, 95, 98, 108, 117, 114, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 10, 45, 45, 114, 32, 123, 49, 48, 48, > 43, 36, 49, 125, 37, 44, 123, 49, 48, 48, 43, 36, 49, 125, 37, 44, > 49, 44, 49, 48, 48, 37, 44, 51, 32, 45, 98, 91, 49, 93, 32, 36, > 51, 37, 10, 45, 105, 102, 32, 36, 53, 32, 45, 98, 97, 108, 97, 110, > 99, 101, 95, 103, 97, 109, 109, 97, 91, 49, 93, 32, 36, 123, 54, 45, > 56, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, > 57, 61, 61, 49, 125, 32, 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, > 53, 32, 45, 101, 108, 105, 102, 32, 123, 36, 57, 61, 61, 50, 125, 32, > 45, 110, 91, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 101, 113, 117, > 97, 108, 105, 122, 101, 91, 49, 93, 32, 50, 53, 54, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 118, 10, 45, 122, 91, 49, 93, 32, 123, 36, > 50, 47, 50, 125, 37, 44, 123, 36, 50, 47, 50, 125, 37, 44, 123, 49, > 48, 48, 45, 36, 50, 47, 50, 125, 37, 44, 123, 49, 48, 48, 45, 36, > 50, 47, 50, 125, 37, 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, 49, > 93, 10, 45, 105, 102, 32, 36, 52, 32, 114, 61, 123, 49, 43, 49, 47, > 36, 52, 125, 32, 45, 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 102, 91, 45, 49, 93, 32, 39, 49, 45, 40, > 97, 98, 115, 40, 120, 47, 119, 45, 48, 46, 53, 41, 94, 36, 114, 43, > 97, 98, 115, 40, 121, 47, 104, 45, 48, 46, 53, 41, 94, 36, 114, 41, > 94, 40, 49, 47, 36, 114, 41, 39, 10, 118, 61, 123, 109, 105, 110, 40, > 105, 40, 119, 47, 50, 44, 48, 41, 44, 105, 40, 119, 45, 49, 44, 104, > 47, 50, 41, 44, 105, 40, 119, 47, 50, 44, 104, 45, 49, 41, 44, 105, > 40, 48, 44, 104, 47, 50, 41, 41, 125, 10, 45, 99, 91, 45, 49, 93, > 32, 36, 118, 44, 123, 36, 118, 43, 48, 46, 53, 47, 109, 97, 120, 40, > 119, 44, 104, 41, 125, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, > 53, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, > 102, 10, 115, 61, 123, 36, 49, 48, 37, 42, 109, 97, 120, 40, 119, 44, > 104, 41, 125, 10, 45, 114, 91, 49, 93, 32, 123, 119, 43, 36, 115, 125, > 44, 123, 104, 43, 36, 115, 125, 44, 49, 44, 52, 44, 48, 44, 48, 44, > 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 91, 49, 93, 32, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 51, 32, 45, 102, 99, 91, > 49, 93, 32, 36, 123, 49, 49, 45, 49, 51, 125, 32, 45, 98, 108, 101, > 110, 100, 91, 49, 44, 50, 93, 32, 97, 108, 112, 104, 97, 32, 45, 116, > 111, 95, 97, 91, 45, 49, 93, 10, 45, 105, 102, 32, 36, 52, 32, 45, > 115, 104, 91, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, > 45, 102, 91, 45, 49, 93, 32, 39, 49, 45, 40, 97, 98, 115, 40, 120, > 47, 119, 45, 48, 46, 53, 41, 94, 36, 114, 43, 97, 98, 115, 40, 121, > 47, 104, 45, 48, 46, 53, 41, 94, 36, 114, 41, 94, 40, 49, 47, 36, > 114, 41, 39, 10, 118, 61, 123, 109, 105, 110, 40, 105, 40, 119, 47, 50, > 44, 48, 41, 44, 105, 40, 119, 45, 49, 44, 104, 47, 50, 41, 44, 105, > 40, 119, 47, 50, 44, 104, 45, 49, 41, 44, 105, 40, 48, 44, 104, 47, > 50, 41, 41, 125, 10, 45, 99, 91, 45, 49, 93, 32, 36, 118, 44, 123, > 36, 118, 43, 48, 46, 53, 47, 109, 97, 120, 40, 119, 44, 104, 41, 125, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, > 49, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 52, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 49, 93, 32, 49, 48, 48, 37, 32, 45, 98, > 91, 45, 49, 93, 32, 36, 49, 54, 37, 44, 48, 32, 45, 99, 91, 45, > 49, 93, 32, 48, 44, 123, 109, 97, 120, 40, 49, 44, 49, 48, 48, 45, > 36, 49, 55, 41, 125, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 115, 104, 105, 102, 116, 91, 45, 49, 93, 32, 36, > 49, 52, 37, 44, 36, 49, 53, 37, 44, 48, 44, 48, 44, 48, 32, 45, > 47, 91, 45, 49, 93, 32, 45, 50, 53, 53, 32, 45, 43, 91, 45, 49, > 93, 32, 49, 32, 45, 42, 91, 48, 44, 45, 49, 93, 10, 45, 98, 108, > 101, 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, 114, 97, 109, 101, > 95, 102, 117, 122, 122, 121, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 40, 123, 119, 42, 36, 49, 47, 50, 48, 48, 125, 44, > 123, 104, 42, 36, 50, 47, 50, 48, 48, 125, 41, 32, 45, 114, 111, 117, > 110, 100, 91, 45, 49, 93, 32, 49, 10, 45, 102, 114, 97, 109, 101, 95, > 102, 117, 122, 122, 121, 91, 45, 50, 93, 32, 64, 45, 49, 44, 36, 51, > 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, 114, 97, > 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, 58, 10, 45, 105, > 102, 32, 36, 49, 52, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, > 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 91, 45, > 49, 93, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 37, 44, 36, 123, > 52, 45, 54, 125, 44, 36, 55, 37, 44, 36, 123, 56, 45, 49, 51, 125, > 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 116, 111, 95, > 97, 91, 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 44, 91, 45, 50, 93, 44, 49, 44, 52, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 32, 45, 109, 118, 91, 45, 50, 44, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, > 45, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, 110, 103, 32, > 36, 49, 37, 44, 36, 50, 44, 36, 51, 37, 44, 36, 123, 52, 45, 54, > 125, 44, 36, 55, 37, 44, 36, 123, 56, 45, 49, 51, 125, 10, 45, 101, > 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 102, 114, 97, 109, 101, 95, > 112, 97, 105, 110, 116, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 102, 114, 97, 109, 101, 95, 112, 97, 105, 110, 116, 105, > 110, 103, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 37, 44, 36, 123, > 52, 45, 54, 125, 44, 36, 55, 37, 44, 36, 123, 56, 45, 49, 51, 125, > 10, 103, 105, 109, 112, 95, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, > 101, 114, 110, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, > 32, 45, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, 110, 32, > 36, 49, 44, 36, 50, 44, 36, 52, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, > 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 102, 114, 97, 109, 101, 95, 112, 97, 116, 116, 101, 114, 110, 32, > 36, 49, 44, 36, 50, 44, 36, 51, 44, 49, 10, 103, 105, 109, 112, 95, > 102, 114, 97, 109, 101, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 122, 91, 45, > 49, 93, 32, 36, 49, 37, 44, 36, 51, 37, 44, 36, 50, 37, 44, 36, > 52, 37, 10, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 36, 49, > 49, 44, 36, 49, 49, 44, 36, 123, 49, 50, 45, 49, 53, 125, 10, 45, > 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 36, 53, 37, 44, 36, 54, > 37, 44, 36, 123, 55, 45, 49, 48, 125, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 102, > 114, 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 58, 10, 45, 102, 114, > 97, 109, 101, 95, 114, 111, 117, 110, 100, 32, 36, 123, 49, 45, 56, 125, > 10, 45, 105, 102, 32, 36, 57, 32, 45, 102, 114, 97, 109, 101, 95, 98, > 108, 117, 114, 32, 36, 49, 44, 123, 109, 105, 110, 40, 57, 57, 44, 36, > 49, 43, 36, 57, 41, 125, 44, 36, 51, 44, 36, 49, 48, 44, 36, 49, > 49, 37, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 111, > 108, 100, 95, 112, 104, 111, 116, 111, 32, 58, 10, 45, 118, 105, 103, 110, > 101, 116, 116, 101, 32, 36, 123, 49, 45, 51, 125, 32, 45, 111, 108, 100, > 95, 112, 104, 111, 116, 111, 10, 103, 105, 109, 112, 95, 112, 111, 108, 97, > 114, 111, 105, 100, 32, 58, 10, 45, 118, 105, 103, 110, 101, 116, 116, 101, > 32, 36, 123, 55, 45, 57, 125, 32, 45, 112, 111, 108, 97, 114, 111, 105, > 100, 32, 36, 49, 44, 36, 50, 32, 45, 100, 114, 111, 112, 95, 115, 104, > 97, 100, 111, 119, 32, 36, 51, 37, 44, 36, 52, 37, 44, 36, 53, 37, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 36, 54, 44, 49, 44, 48, 10, > 103, 105, 109, 112, 95, 116, 117, 110, 110, 101, 108, 32, 58, 10, 45, 116, > 117, 110, 110, 101, 108, 32, 36, 49, 44, 36, 50, 37, 44, 36, 123, 51, > 45, 54, 125, 10, 103, 105, 109, 112, 95, 118, 105, 103, 110, 101, 116, 116, > 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 116, 111, 95, 114, 103, 98, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, > 97, 99, 105, 116, 121, 32, 45, 61, 91, 45, 49, 93, 32, 48, 32, 45, > 118, 105, 103, 110, 101, 116, 116, 101, 91, 45, 49, 93, 32, 36, 123, 49, > 45, 51, 125, 32, 45, 97, 32, 99, 32, 45, 45, 102, 99, 32, 36, 123, > 52, 45, 55, 125, 32, 45, 98, 108, 101, 110, 100, 32, 97, 108, 112, 104, > 97, 44, 49, 44, 49, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 97, 118, 101, > 114, 97, 103, 101, 95, 97, 108, 108, 32, 58, 10, 45, 105, 102, 32, 64, > 35, 10, 78, 61, 64, 35, 32, 45, 43, 32, 45, 47, 32, 36, 78, 10, > 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 98, 108, 101, 110, > 100, 95, 101, 100, 103, 101, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, 32, 45, 108, > 91, 36, 62, 44, 123, 36, 62, 43, 49, 125, 93, 32, 45, 105, 102, 32, > 36, 51, 32, 45, 114, 118, 32, 45, 101, 110, 100, 105, 102, 32, 45, 45, > 98, 108, 101, 110, 100, 95, 101, 100, 103, 101, 115, 91, 45, 50, 44, 45, > 49, 93, 32, 36, 50, 32, 45, 114, 109, 91, 45, 51, 93, 32, 45, 98, > 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, 104, > 97, 44, 36, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, > 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, 45, > 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, > 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 32, 52, 10, 45, 105, > 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 50, > 32, 45, 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 55, 61, 61, 50, 125, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, 32, 48, 44, 50, > 32, 45, 115, 114, 103, 98, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, > 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 32, 91, 48, 93, > 44, 91, 48, 93, 44, 49, 44, 49, 44, 34, 36, 49, 49, 34, 10, 45, > 101, 108, 115, 101, 32, 45, 95, 103, 105, 109, 112, 95, 98, 108, 101, 110, > 100, 95, 102, 97, 100, 101, 36, 49, 32, 36, 56, 44, 36, 57, 44, 36, > 49, 48, 32, 45, 114, 91, 45, 49, 93, 32, 91, 48, 93, 44, 91, 48, > 93, 44, 49, 44, 49, 44, 51, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 110, 91, 45, 49, 93, 32, 123, 45, 40, 64, 35, 45, 50, 41, 42, 36, > 51, 125, 44, 123, 40, 64, 35, 45, 50, 41, 42, 40, 49, 43, 36, 51, > 41, 125, 10, 45, 45, 91, 45, 49, 93, 32, 123, 36, 50, 42, 40, 49, > 43, 36, 51, 41, 42, 40, 64, 35, 45, 50, 41, 125, 10, 45, 99, 91, > 45, 49, 93, 32, 48, 44, 123, 64, 35, 45, 50, 125, 10, 45, 105, 102, > 32, 36, 54, 32, 45, 114, 118, 91, 94, 45, 49, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 36, 53, 32, 45, 114, 111, 117, 110, > 100, 91, 45, 49, 93, 32, 49, 10, 45, 101, 108, 115, 101, 32, 45, 114, > 111, 117, 110, 100, 105, 102, 121, 91, 45, 49, 93, 32, 36, 52, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 108, 101, 110, 100, 95, 102, 97, 100, > 101, 10, 45, 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, > 32, 48, 44, 50, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 55, 61, 61, 50, 125, 32, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 115, 104, 91, 36, 62, 93, > 32, 48, 44, 50, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 114, 103, 98, 50, 115, 114, 103, 98, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 32, 45, 100, 111, 110, 101, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 95, 103, > 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 49, 32, > 58, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 49, 44, 34, 97, > 61, 36, 49, 42, 112, 105, 47, 50, 59, 32, 120, 42, 99, 111, 115, 40, > 97, 41, 32, 43, 32, 121, 42, 115, 105, 110, 40, 97, 41, 34, 10, 95, > 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, 102, 97, 100, 101, 50, > 32, 58, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 49, 44, 48, > 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 123, 40, 36, 49, 43, 49, > 41, 42, 53, 48, 125, 37, 44, 123, 40, 36, 50, 43, 49, 41, 42, 53, > 48, 125, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, > 93, 32, 49, 10, 95, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, 95, > 102, 97, 100, 101, 51, 32, 58, 32, 91, 48, 93, 44, 91, 48, 93, 44, > 49, 44, 49, 44, 48, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 123, > 40, 36, 49, 43, 49, 41, 42, 53, 48, 125, 37, 44, 123, 40, 36, 50, > 43, 49, 41, 42, 53, 48, 125, 37, 32, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 42, 91, 45, 49, 93, 32, > 123, 48, 46, 48, 49, 43, 36, 51, 47, 50, 125, 32, 45, 99, 111, 115, > 91, 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, 98, 108, 101, 110, 100, > 95, 102, 97, 100, 101, 52, 32, 58, 32, 91, 48, 93, 44, 91, 48, 93, > 44, 49, 44, 49, 44, 34, 40, 40, 120, 45, 119, 42, 40, 36, 49, 43, > 48, 46, 53, 41, 41, 42, 40, 121, 45, 104, 42, 40, 36, 50, 43, 48, > 46, 53, 41, 41, 41, 37, 40, 48, 46, 50, 42, 119, 42, 104, 42, 40, > 49, 46, 48, 48, 49, 43, 36, 51, 41, 41, 34, 10, 103, 105, 109, 112, > 95, 98, 108, 101, 110, 100, 32, 58, 10, 109, 111, 100, 101, 61, 64, 123, > 45, 97, 114, 103, 92, 32, 49, 43, 36, 49, 44, 97, 100, 100, 44, 97, > 108, 112, 104, 97, 44, 97, 110, 100, 44, 97, 118, 101, 114, 97, 103, 101, > 44, 98, 108, 117, 101, 44, 98, 117, 114, 110, 44, 100, 97, 114, 107, 101, > 110, 44, 100, 105, 102, 102, 101, 114, 101, 110, 99, 101, 44, 92, 10, 100, > 105, 118, 105, 100, 101, 44, 100, 111, 100, 103, 101, 44, 101, 100, 103, 101, > 115, 44, 101, 120, 99, 108, 117, 115, 105, 111, 110, 44, 102, 114, 101, 101, > 122, 101, 44, 103, 114, 97, 105, 110, 101, 120, 116, 114, 97, 99, 116, 44, > 103, 114, 97, 105, 110, 109, 101, 114, 103, 101, 44, 103, 114, 101, 101, 110, > 44, 104, 97, 114, 100, 108, 105, 103, 104, 116, 44, 92, 10, 104, 97, 114, > 100, 109, 105, 120, 44, 104, 117, 101, 44, 105, 110, 116, 101, 114, 112, 111, > 108, 97, 116, 105, 111, 110, 44, 108, 105, 103, 104, 116, 101, 110, 44, 108, > 105, 103, 104, 116, 110, 101, 115, 115, 44, 108, 105, 110, 101, 97, 114, 98, > 117, 114, 110, 44, 108, 105, 110, 101, 97, 114, 108, 105, 103, 104, 116, 44, > 108, 117, 109, 105, 110, 97, 110, 99, 101, 44, 92, 10, 109, 117, 108, 116, > 105, 112, 108, 121, 44, 110, 101, 103, 97, 116, 105, 111, 110, 44, 111, 114, > 44, 111, 118, 101, 114, 108, 97, 121, 44, 112, 105, 110, 108, 105, 103, 104, > 116, 44, 114, 101, 100, 44, 114, 101, 102, 108, 101, 99, 116, 44, 115, 97, > 116, 117, 114, 97, 116, 105, 111, 110, 44, 92, 10, 115, 104, 97, 112, 101, > 97, 118, 101, 114, 97, 103, 101, 44, 115, 104, 97, 112, 101, 97, 118, 101, > 114, 97, 103, 101, 48, 44, 115, 111, 102, 116, 98, 117, 114, 110, 44, 115, > 111, 102, 116, 100, 111, 100, 103, 101, 44, 115, 111, 102, 116, 108, 105, 103, > 104, 116, 44, 115, 99, 114, 101, 101, 110, 44, 115, 116, 97, 109, 112, 44, > 115, 117, 98, 116, 114, 97, 99, 116, 44, 118, 97, 108, 117, 101, 44, 92, > 10, 118, 105, 118, 105, 100, 108, 105, 103, 104, 116, 44, 120, 111, 114, 125, > 10, 45, 98, 108, 101, 110, 100, 32, 36, 109, 111, 100, 101, 44, 36, 50, > 44, 123, 49, 45, 36, 51, 125, 10, 103, 105, 109, 112, 95, 98, 108, 101, > 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, 58, 10, 45, 114, > 118, 32, 45, 116, 111, 95, 97, 91, 94, 48, 93, 32, 45, 114, 91, 94, > 48, 93, 32, 91, 48, 93, 44, 91, 48, 93, 44, 49, 44, 49, 48, 48, > 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 115, > 104, 105, 102, 116, 91, 94, 48, 93, 32, 36, 52, 37, 44, 36, 53, 37, > 10, 45, 105, 102, 32, 36, 54, 10, 45, 45, 98, 108, 101, 110, 100, 95, > 115, 101, 97, 109, 108, 101, 115, 115, 32, 36, 49, 44, 36, 50, 37, 44, > 36, 51, 37, 10, 45, 107, 91, 48, 44, 45, 49, 93, 32, 45, 114, 118, > 32, 45, 45, 115, 117, 98, 95, 97, 108, 112, 104, 97, 32, 49, 32, 45, > 114, 118, 91, 48, 44, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 108, 115, 101, 32, 45, 98, 108, 101, 110, 100, 95, 115, 101, > 97, 109, 108, 101, 115, 115, 32, 36, 49, 44, 36, 50, 37, 44, 36, 51, > 37, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 98, 108, > 101, 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 98, 108, 101, > 110, 100, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, 36, 123, 49, 45, > 53, 125, 44, 48, 10, 103, 105, 109, 112, 95, 97, 108, 105, 103, 110, 95, > 108, 97, 121, 101, 114, 115, 32, 58, 10, 45, 105, 102, 32, 36, 123, 52, > 61, 48, 125, 32, 45, 95, 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, > 116, 95, 108, 97, 121, 101, 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 10, > 45, 105, 102, 32, 36, 49, 32, 45, 114, 101, 103, 105, 115, 116, 101, 114, > 95, 110, 111, 110, 114, 105, 103, 105, 100, 32, 36, 50, 44, 48, 46, 49, > 44, 36, 51, 10, 45, 101, 108, 115, 101, 32, 40, 36, 50, 41, 32, 45, > 42, 91, 45, 49, 93, 32, 51, 32, 45, 114, 101, 103, 105, 115, 116, 101, > 114, 95, 114, 105, 103, 105, 100, 91, 94, 45, 49, 93, 32, 64, 45, 49, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 103, 105, 109, 112, 95, 97, 108, 105, 103, 110, 95, 108, 97, 121, 101, 114, > 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 97, 108, 105, 103, 110, 95, 108, 97, 121, 101, 114, 115, 32, 36, > 49, 44, 36, 50, 44, 48, 32, 45, 98, 108, 101, 110, 100, 95, 101, 100, > 103, 101, 115, 32, 48, 46, 49, 10, 95, 103, 105, 109, 112, 95, 114, 101, > 118, 101, 114, 116, 95, 108, 97, 121, 101, 114, 115, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, > 125, 32, 45, 114, 118, 91, 123, 50, 42, 36, 62, 125, 44, 123, 50, 42, > 36, 62, 43, 49, 125, 93, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 102, 97, 100, 101, 95, 108, 97, 121, 101, 114, 115, 32, 58, 10, > 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 32, 122, 32, 45, > 114, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 123, 40, 100, 45, > 49, 41, 42, 36, 49, 43, 49, 125, 44, 49, 48, 48, 37, 44, 51, 32, > 45, 115, 32, 122, 10, 103, 105, 109, 112, 95, 102, 97, 100, 101, 95, 108, > 97, 121, 101, 114, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, 32, 45, 114, 101, 116, 117, > 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 107, 91, 48, 44, 49, > 93, 32, 45, 43, 32, 45, 47, 32, 50, 10, 103, 105, 109, 112, 95, 109, > 111, 114, 112, 104, 32, 58, 10, 45, 105, 102, 32, 36, 123, 52, 61, 48, > 125, 32, 45, 95, 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, 116, 95, > 108, 97, 121, 101, 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 109, 111, 114, 112, 104, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 10, 103, 105, 109, 112, 95, 97, 112, 112, 101, 110, > 100, 95, 116, 105, 108, 101, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, > 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, 10, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 58, 10, 45, 115, > 112, 108, 105, 116, 95, 116, 105, 108, 101, 115, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 32, 45, 107, 91, 53, 48, 37, 93, 10, 103, 105, 109, 112, > 95, 116, 114, 97, 110, 115, 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, > 32, 58, 10, 45, 105, 102, 32, 36, 123, 50, 61, 48, 125, 32, 45, 95, > 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, 116, 95, 108, 97, 121, 101, > 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 114, 97, 110, 115, > 102, 101, 114, 95, 99, 111, 108, 111, 114, 115, 32, 36, 49, 10, 103, 105, > 109, 112, 95, 116, 114, 97, 110, 115, 112, 97, 114, 101, 110, 116, 95, 100, > 105, 102, 102, 32, 58, 10, 45, 105, 102, 32, 36, 123, 53, 61, 48, 125, > 32, 45, 95, 103, 105, 109, 112, 95, 114, 101, 118, 101, 114, 116, 95, 108, > 97, 121, 101, 114, 115, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 105, 110, 116, 40, 64, 35, 47, 50, 41, 125, > 10, 45, 105, 102, 32, 36, 51, 10, 45, 45, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 110, 111, 114, 109, 91, 45, 50, 93, 32, 45, 98, > 91, 45, 50, 93, 32, 36, 50, 37, 32, 45, 103, 101, 91, 45, 50, 93, > 32, 36, 49, 37, 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 101, 108, 115, 101, 10, 45, 45, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 110, 111, 114, 109, 91, 45, 49, 93, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 50, 37, 32, 45, 103, 101, 91, 45, 49, 93, 32, 36, > 49, 37, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 33, > 36, 52, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 114, 103, 98, > 97, 91, 45, 50, 93, 32, 45, 42, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, > 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 116, 111, 110, 101, 115, > 32, 58, 10, 115, 118, 97, 108, 61, 36, 50, 32, 101, 118, 97, 108, 61, > 123, 109, 97, 120, 40, 36, 50, 44, 36, 51, 41, 125, 10, 45, 114, 101, > 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, > 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 114, 118, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 36, 49, 45, 49, 125, 10, 91, 49, > 93, 10, 118, 97, 108, 48, 61, 123, 36, 115, 118, 97, 108, 43, 40, 36, > 101, 118, 97, 108, 45, 36, 115, 118, 97, 108, 41, 42, 36, 62, 47, 40, > 36, 49, 45, 50, 41, 125, 10, 118, 97, 108, 49, 61, 123, 36, 115, 118, > 97, 108, 43, 40, 36, 101, 118, 97, 108, 45, 36, 115, 118, 97, 108, 41, > 42, 40, 36, 62, 43, 49, 41, 47, 40, 36, 49, 45, 50, 41, 45, 49, > 125, 10, 45, 45, 116, 50, 91, 48, 93, 32, 36, 118, 97, 108, 48, 44, > 36, 118, 97, 108, 49, 10, 45, 105, 102, 32, 36, 53, 32, 45, 42, 91, > 45, 49, 93, 32, 91, 48, 93, 32, 45, 98, 91, 45, 49, 93, 32, 36, > 52, 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, > 45, 101, 108, 115, 101, 32, 45, 98, 91, 45, 49, 93, 32, 36, 52, 37, > 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, 32, 45, 114, > 118, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 116, 111, 110, 101, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 116, 111, 110, 101, 115, 32, 36, 42, 32, 45, 114, > 118, 32, 45, 116, 111, 95, 97, 32, 45, 97, 112, 112, 101, 110, 100, 95, > 116, 105, 108, 101, 115, 32, 44, 10, 95, 103, 105, 109, 112, 95, 98, 117, > 114, 110, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 10, 45, 45, 110, 111, 114, 109, 10, 45, 103, 105, 109, 112, 95, > 102, 111, 117, 114, 105, 101, 114, 91, 45, 49, 93, 32, 48, 10, 45, 45, > 114, 111, 119, 115, 91, 45, 49, 93, 32, 48, 44, 123, 36, 104, 45, 49, > 125, 32, 45, 114, 91, 45, 49, 93, 32, 36, 50, 37, 44, 36, 50, 37, > 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 32, 45, 98, 91, 45, 49, 93, 32, 36, 51, 37, 10, 45, > 106, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 123, 40, 36, 119, 45, > 119, 41, 47, 50, 125, 44, 123, 40, 36, 104, 45, 104, 41, 47, 50, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 103, 105, 109, 112, 95, 102, > 111, 117, 114, 105, 101, 114, 91, 45, 49, 93, 32, 49, 10, 45, 98, 108, > 101, 110, 100, 32, 111, 118, 101, 114, 108, 97, 121, 44, 36, 49, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 98, 117, 114, 110, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 98, > 117, 114, 110, 32, 36, 123, 49, 45, 51, 125, 34, 44, 36, 52, 44, 49, > 10, 103, 105, 109, 112, 95, 98, 117, 114, 110, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 98, 117, 114, 110, 32, 36, 123, 94, 48, 125, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 99, 111, 110, 116, 114, 97, 115, 116, 95, 115, 119, > 109, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 45, 108, 117, 109, > 105, 110, 97, 110, 99, 101, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, > 98, 108, 117, 114, 95, 120, 121, 91, 49, 93, 32, 36, 49, 44, 36, 49, > 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 48, 125, 32, 45, 110, 101, > 103, 97, 116, 105, 118, 101, 91, 49, 93, 32, 45, 101, 108, 105, 102, 32, > 123, 36, 50, 61, 61, 49, 125, 32, 45, 103, 105, 109, 112, 95, 100, 111, > 95, 110, 111, 116, 104, 105, 110, 103, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 114, 118, 32, 45, 98, 108, 101, 110, 100, 32, 104, 97, 114, 100, 108, > 105, 103, 104, 116, 44, 36, 51, 10, 45, 101, 110, 100, 108, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 32, > 58, 10, 45, 42, 32, 45, 49, 32, 45, 43, 32, 50, 53, 53, 32, 45, > 118, 105, 103, 110, 101, 116, 116, 101, 32, 123, 50, 53, 53, 42, 36, 53, > 125, 44, 56, 48, 44, 57, 53, 32, 45, 42, 32, 45, 49, 32, 45, 43, > 32, 50, 53, 53, 10, 45, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 32, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, 37, 44, 36, 52, > 32, 45, 114, 111, 116, 97, 116, 101, 32, 36, 54, 44, 49, 44, 48, 10, > 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, > 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, > 45, 108, 91, 36, 60, 93, 10, 45, 45, 95, 103, 105, 109, 112, 95, 100, > 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 51, 100, 32, 36, 42, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, > 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, 119, 51, 100, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, 10, 45, 105, 102, 32, 36, > 49, 51, 32, 45, 95, 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, > 104, 97, 100, 111, 119, 51, 100, 32, 36, 42, 10, 45, 101, 108, 115, 101, > 32, 45, 45, 95, 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, > 97, 100, 111, 119, 51, 100, 32, 36, 42, 32, 45, 114, 118, 32, 45, 98, > 108, 101, 110, 100, 32, 97, 108, 112, 104, 97, 44, 49, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 95, 103, 105, 109, 112, 95, 100, 114, 111, 112, 95, 115, 104, 97, 100, 111, > 119, 51, 100, 32, 58, 10, 45, 112, 111, 105, 110, 116, 51, 100, 32, 48, > 44, 48, 44, 49, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, > 48, 44, 48, 44, 36, 49, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 48, 44, 49, 44, 48, 44, 36, 50, 32, 45, 114, 51, 100, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 49, 44, 36, 51, 10, 117, 61, 123, 105, 40, > 48, 44, 56, 41, 125, 32, 118, 61, 123, 105, 40, 48, 44, 57, 41, 125, > 32, 119, 61, 123, 105, 40, 48, 44, 49, 48, 41, 125, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 116, 111, 95, 97, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 49, 48, 48, 37, 32, 45, 105, 102, 32, 123, 105, > 109, 61, 61, 105, 77, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 45, 102, 32, 39, 88, 61, 120, 47, 119, > 45, 48, 46, 53, 59, 89, 61, 121, 47, 104, 45, 48, 46, 53, 59, 65, > 61, 40, 36, 55, 45, 36, 52, 42, 36, 55, 47, 49, 48, 48, 41, 42, > 36, 119, 47, 40, 88, 42, 36, 117, 43, 89, 42, 36, 118, 43, 36, 55, > 42, 36, 119, 41, 59, 105, 102, 40, 65, 60, 48, 44, 49, 101, 56, 44, > 65, 41, 39, 10, 45, 45, 42, 91, 45, 49, 93, 32, 39, 121, 47, 104, > 45, 48, 46, 53, 39, 32, 45, 42, 91, 45, 50, 93, 32, 39, 120, 47, > 119, 45, 48, 46, 53, 39, 32, 45, 43, 91, 45, 50, 93, 32, 123, 48, > 46, 53, 45, 36, 53, 47, 49, 48, 48, 125, 32, 45, 43, 91, 45, 49, > 93, 32, 123, 48, 46, 53, 45, 36, 54, 47, 49, 48, 48, 125, 32, 45, > 42, 91, 45, 50, 93, 32, 123, 119, 125, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 104, 125, 10, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, > 32, 45, 119, 97, 114, 112, 91, 48, 93, 32, 91, 45, 49, 93, 44, 48, > 44, 49, 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 32, > 36, 56, 37, 32, 45, 110, 32, 48, 44, 36, 49, 50, 32, 45, 105, 91, > 45, 50, 93, 32, 40, 36, 57, 94, 36, 49, 48, 94, 36, 49, 49, 41, > 32, 45, 114, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 91, 45, 49, > 93, 44, 49, 44, 51, 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, > 99, 10, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, > 115, 104, 97, 100, 111, 119, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 45, 110, 101, 103, > 97, 116, 105, 118, 101, 32, 45, 98, 108, 101, 110, 100, 32, 115, 111, 102, > 116, 108, 105, 103, 104, 116, 44, 36, 49, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 101, 113, 117, 97, 108, > 105, 122, 101, 95, 115, 104, 97, 100, 111, 119, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, > 101, 113, 117, 97, 108, 105, 122, 101, 95, 115, 104, 97, 100, 111, 119, 32, > 36, 49, 34, 44, 36, 45, 49, 10, 95, 103, 105, 109, 112, 95, 108, 105, > 103, 104, 116, 103, 108, 111, 119, 32, 58, 10, 109, 111, 100, 101, 61, 64, > 123, 45, 97, 114, 103, 92, 32, 49, 43, 36, 51, 44, 98, 117, 114, 110, > 44, 100, 111, 100, 103, 101, 44, 102, 114, 101, 101, 122, 101, 44, 103, 114, > 97, 105, 110, 109, 101, 114, 103, 101, 44, 104, 97, 114, 100, 108, 105, 103, > 104, 116, 44, 105, 110, 116, 101, 114, 112, 111, 108, 97, 116, 105, 111, 110, > 44, 108, 105, 103, 104, 116, 101, 110, 44, 109, 117, 108, 116, 105, 112, 108, > 121, 44, 111, 118, 101, 114, 108, 97, 121, 44, 114, 101, 102, 108, 101, 99, > 116, 44, 115, 111, 102, 116, 108, 105, 103, 104, 116, 44, 115, 116, 97, 109, > 112, 44, 118, 97, 108, 117, 101, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 45, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, > 111, 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 91, 45, 49, 93, 32, > 123, 49, 48, 48, 45, 36, 49, 125, 37, 32, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 94, 91, 45, 49, 93, > 32, 36, 50, 32, 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 110, > 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 98, 108, 101, 110, > 100, 32, 36, 109, 111, 100, 101, 44, 36, 52, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 108, 105, 103, 104, 116, 103, 108, 111, 119, 32, 58, 10, 45, 97, 112, 112, > 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 95, 103, > 105, 109, 112, 95, 108, 105, 103, 104, 116, 103, 108, 111, 119, 32, 36, 123, > 49, 45, 52, 125, 34, 44, 36, 53, 44, 48, 10, 103, 105, 109, 112, 95, > 108, 105, 103, 104, 116, 103, 108, 111, 119, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, > 105, 103, 104, 116, 103, 108, 111, 119, 32, 36, 42, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 108, 105, 103, 104, 116, 95, 112, 97, 116, 99, > 104, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, > 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 108, 105, 103, > 104, 116, 95, 112, 97, 116, 99, 104, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 34, 44, 36, 52, 44, 48, 10, 45, 101, 110, 100, 108, 32, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 108, 105, 103, 104, 116, 114, 97, 121, 115, 32, 58, 10, > 45, 108, 105, 103, 104, 116, 114, 97, 121, 115, 32, 36, 123, 49, 45, 53, > 125, 10, 45, 105, 102, 32, 36, 54, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 123, 64, 123, 36, 62, 44, 115, 125, 43, > 40, 64, 123, 36, 62, 44, 115, 125, 37, 50, 41, 125, 32, 45, 100, 111, > 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 108, > 105, 103, 104, 116, 95, 114, 101, 108, 105, 101, 102, 32, 58, 10, 45, 98, > 32, 36, 49, 49, 37, 32, 45, 108, 105, 103, 104, 116, 95, 114, 101, 108, > 105, 101, 102, 32, 36, 123, 49, 45, 49, 48, 125, 10, 103, 105, 109, 112, > 95, 115, 104, 97, 100, 111, 119, 95, 112, 97, 116, 99, 104, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 108, 91, 48, 93, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 115, 104, 97, 100, 111, 119, 95, > 112, 97, 116, 99, 104, 32, 36, 49, 34, 44, 36, 50, 44, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 98, 111, 120, 102, 105, > 116, 116, 105, 110, 103, 32, 58, 10, 45, 98, 111, 120, 102, 105, 116, 116, > 105, 110, 103, 32, 36, 123, 49, 45, 51, 125, 44, 51, 10, 45, 105, 102, > 32, 36, 52, 32, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, > 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, > 48, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 98, 111, > 120, 102, 105, 116, 116, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 98, 111, 120, 102, 105, 116, 116, 105, 110, 103, 32, 36, > 123, 49, 45, 51, 125, 44, 49, 10, 45, 105, 102, 32, 36, 52, 32, 45, > 116, 111, 95, 114, 103, 98, 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, > 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, > 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, > 100, 105, 102, 10, 103, 105, 109, 112, 95, 99, 97, 110, 118, 97, 115, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 45, 49, 93, 10, 45, 105, 102, 32, 36, 52, 10, 40, 123, 99, 111, 115, > 40, 36, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, 94, 123, 115, 105, > 110, 40, 36, 50, 42, 112, 105, 47, 49, 56, 48, 41, 125, 41, 32, 45, > 118, 101, 99, 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 91, 45, 49, > 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, > 50, 93, 32, 45, 45, 115, 109, 111, 111, 116, 104, 91, 45, 50, 93, 32, > 91, 45, 49, 93, 44, 36, 49, 32, 45, 114, 109, 91, 45, 50, 93, 32, > 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 49, 93, 32, 36, 51, 32, > 45, 99, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 40, 123, 99, > 111, 115, 40, 36, 54, 42, 112, 105, 47, 49, 56, 48, 41, 125, 94, 123, > 115, 105, 110, 40, 36, 54, 42, 112, 105, 47, 49, 56, 48, 41, 125, 41, > 32, 45, 118, 101, 99, 116, 111, 114, 50, 116, 101, 110, 115, 111, 114, 91, > 45, 49, 93, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, > 91, 45, 50, 93, 32, 45, 115, 109, 111, 111, 116, 104, 91, 45, 51, 93, > 32, 91, 45, 49, 93, 44, 36, 53, 32, 45, 114, 109, 91, 45, 49, 93, > 32, 45, 115, 104, 97, 114, 112, 101, 110, 91, 45, 50, 93, 32, 36, 55, > 32, 45, 99, 91, 45, 50, 93, 32, 48, 44, 50, 53, 53, 32, 45, 43, > 91, 45, 50, 44, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, 50, > 10, 45, 101, 108, 115, 101, 10, 40, 123, 99, 111, 115, 40, 36, 50, 42, > 112, 105, 47, 49, 56, 48, 41, 125, 94, 123, 115, 105, 110, 40, 36, 50, > 42, 112, 105, 47, 49, 56, 48, 41, 125, 41, 32, 45, 118, 101, 99, 116, > 111, 114, 50, 116, 101, 110, 115, 111, 114, 91, 45, 49, 93, 32, 45, 114, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 32, 45, > 115, 109, 111, 111, 116, 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, > 36, 49, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 115, 104, 97, 114, > 112, 101, 110, 91, 45, 49, 93, 32, 36, 51, 32, 45, 99, 91, 45, 49, > 93, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 101, 110, 100, 108, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 97, 110, 118, 97, 115, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 99, 97, 110, 118, 97, 115, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 99, 114, 97, 99, 107, 115, > 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 34, 45, 99, 114, 97, 99, 107, 115, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 34, 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, > 99, 114, 97, 99, 107, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 99, 114, 97, 99, > 107, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, > 104, 97, 108, 102, 116, 111, 110, 101, 32, 58, 10, 45, 97, 112, 112, 108, > 121, 95, 103, 97, 109, 109, 97, 32, 123, 49, 48, 94, 36, 49, 125, 32, > 45, 45, 32, 49, 50, 56, 32, 45, 42, 32, 36, 50, 32, 45, 43, 32, > 49, 50, 56, 32, 45, 43, 32, 36, 51, 32, 45, 98, 32, 36, 52, 32, > 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 104, 97, 108, 102, 116, > 111, 110, 101, 91, 48, 93, 32, 36, 123, 53, 45, 57, 125, 10, 45, 97, > 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 104, 97, 108, 102, 116, 111, 110, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, > 112, 95, 104, 97, 108, 102, 116, 111, 110, 101, 32, 36, 42, 34, 44, 36, > 45, 49, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 115, 32, 58, > 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 34, 45, 104, 101, 97, 114, 116, 115, 32, 36, 49, 34, 44, 36, 50, > 44, 48, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 104, 101, 97, 114, 116, 115, 32, 36, 42, 34, 44, 36, > 45, 49, 10, 103, 105, 109, 112, 95, 108, 97, 118, 97, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, > 45, 108, 91, 48, 93, 32, 45, 110, 111, 114, 109, 10, 49, 48, 48, 37, > 44, 49, 48, 48, 37, 32, 45, 112, 108, 97, 115, 109, 97, 91, 45, 49, > 93, 32, 49, 44, 49, 44, 123, 49, 54, 45, 36, 49, 125, 32, 45, 115, > 109, 111, 111, 116, 104, 91, 45, 49, 93, 32, 36, 50, 44, 48, 44, 49, > 44, 36, 51, 44, 36, 51, 44, 48, 46, 56, 44, 57, 48, 32, 45, 42, > 10, 45, 103, 114, 97, 100, 105, 101, 110, 116, 95, 110, 111, 114, 109, 32, > 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 101, 113, 117, 97, 108, 105, > 122, 101, 32, 45, 109, 97, 112, 32, 51, 10, 45, 115, 104, 97, 114, 112, > 101, 110, 32, 36, 52, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 108, 97, 118, 97, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 108, 97, 118, 97, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, 97, > 114, 98, 108, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 109, > 97, 114, 98, 108, 101, 32, 36, 49, 47, 49, 48, 44, 36, 50, 47, 49, > 48, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, > 44, 36, 56, 44, 36, 57, 37, 44, 36, 49, 48, 37, 10, 45, 101, 110, > 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 103, 105, 109, 112, 95, 109, 97, 107, 101, 95, 115, 101, > 97, 109, 108, 101, 115, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 36, > 49, 32, 45, 45, 98, 32, 123, 50, 48, 46, 53, 45, 36, 49, 47, 53, > 48, 125, 37, 32, 45, 45, 91, 48, 93, 32, 91, 49, 93, 32, 45, 102, > 99, 91, 45, 49, 93, 32, 64, 123, 45, 97, 118, 101, 114, 97, 103, 101, > 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, 125, 32, 45, 43, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 45, 112, 101, 114, 105, 111, 100, 105, 122, 101, 95, 112, 111, 105, > 115, 115, 111, 110, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 105, > 109, 112, 95, 109, 97, 107, 101, 95, 115, 101, 97, 109, 108, 101, 115, 115, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 105, 102, 32, 123, 33, 36, 50, 125, 32, 45, 103, 105, 109, 112, 95, > 109, 97, 107, 101, 95, 115, 101, 97, 109, 108, 101, 115, 115, 32, 36, 42, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 105, 102, 32, 36, 51, 32, 45, > 97, 114, 114, 97, 121, 32, 123, 36, 51, 43, 49, 125, 44, 123, 36, 51, > 43, 49, 125, 32, 45, 101, 110, 100, 105, 102, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 109, 97, 122, 101, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, > 104, 125, 10, 45, 114, 91, 45, 49, 93, 32, 123, 49, 48, 48, 47, 36, > 49, 125, 37, 44, 123, 49, 48, 48, 47, 36, 49, 125, 37, 44, 49, 44, > 49, 48, 48, 37, 44, 50, 10, 45, 105, 102, 32, 123, 36, 51, 61, 61, > 48, 125, 32, 45, 102, 91, 45, 49, 93, 32, 49, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 51, 61, 61, 49, 125, 32, 45, 110, 101, 103, 97, 116, > 105, 118, 101, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, > 109, 97, 122, 101, 95, 109, 97, 115, 107, 91, 45, 49, 93, 32, 36, 49, > 32, 45, 100, 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 36, 50, 32, > 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 10, 45, 105, 102, 32, 123, > 33, 36, 53, 125, 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, > 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 114, 91, 45, 49, 93, 32, 36, 119, 44, 36, 104, 44, 49, 48, > 48, 37, 44, 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 100, > 116, 95, 109, 105, 110, 101, 114, 97, 108, 95, 109, 111, 115, 97, 105, 99, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, 10, 45, 45, 98, > 32, 36, 51, 32, 45, 115, 101, 103, 109, 101, 110, 116, 95, 119, 97, 116, > 101, 114, 115, 104, 101, 100, 91, 45, 49, 93, 32, 36, 49, 32, 45, 45, > 110, 111, 114, 109, 91, 45, 49, 93, 10, 45, 97, 114, 101, 97, 91, 45, > 49, 93, 32, 48, 32, 45, 45, 108, 101, 91, 45, 49, 93, 32, 123, 36, > 50, 94, 50, 125, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 108, 97, 98, 101, 108, 91, 45, 49, 93, 10, 45, 45, 102, 91, 48, 93, > 32, 39, 105, 102, 40, 99, 61, 61, 48, 44, 120, 44, 121, 41, 39, 32, > 45, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 115, > 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 44, 49, 44, 49, 10, > 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 114, 109, 91, 48, 44, > 50, 93, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, > 32, 48, 44, 49, 10, 97, 108, 112, 104, 97, 61, 123, 36, 53, 42, 112, > 105, 47, 49, 56, 48, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, > 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 123, 99, 111, 115, 40, 36, > 97, 108, 112, 104, 97, 41, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, > 49, 93, 32, 123, 115, 105, 110, 40, 36, 97, 108, 112, 104, 97, 41, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 99, 111, 109, 112, 111, 115, > 101, 95, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 43, > 10, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, 108, 111, 99, 97, > 108, 91, 45, 49, 93, 32, 49, 48, 48, 48, 32, 45, 110, 91, 45, 49, > 93, 32, 45, 36, 52, 44, 36, 52, 10, 45, 43, 32, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 109, 111, 115, 97, 105, 99, 32, 58, 10, 45, > 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, > 45, 109, 111, 115, 97, 105, 99, 32, 36, 49, 44, 36, 50, 34, 44, 36, > 51, 44, 48, 10, 103, 105, 109, 112, 95, 109, 111, 115, 97, 105, 99, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 109, 111, 115, 97, 105, 99, 32, 36, 42, 34, 44, > 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 32, > 58, 10, 45, 105, 102, 32, 36, 49, 10, 45, 114, 101, 109, 111, 118, 101, > 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, > 33, 36, 55, 125, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, > 101, 115, 32, 36, 42, 32, 45, 42, 32, 50, 53, 53, 10, 45, 101, 108, > 105, 102, 32, 123, 36, 55, 61, 61, 49, 125, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 116, 111, 95, 114, 103, > 98, 91, 48, 93, 32, 45, 115, 91, 48, 93, 32, 99, 32, 45, 114, 101, > 112, 101, 97, 116, 32, 51, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, > 97, 112, 101, 115, 91, 36, 62, 93, 32, 36, 42, 32, 45, 100, 111, 110, > 101, 32, 45, 42, 91, 48, 45, 50, 93, 32, 50, 53, 53, 32, 45, 97, > 91, 48, 45, 50, 93, 32, 99, 32, 45, 97, 32, 99, 10, 45, 101, 108, > 115, 101, 32, 45, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, > 115, 32, 36, 42, 32, 45, 114, 91, 48, 93, 32, 36, 51, 37, 44, 36, > 51, 37, 32, 45, 114, 91, 48, 93, 32, 91, 49, 93, 44, 91, 49, 93, > 32, 45, 42, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, > 32, 123, 64, 35, 60, 61, 36, 50, 125, 32, 45, 101, 114, 114, 111, 114, > 91, 93, 32, 34, 67, 111, 109, 109, 97, 110, 100, 32, 39, 45, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 115, 39, 58, 32, 83, 111, 109, 101, > 32, 108, 97, 121, 101, 114, 115, 32, 97, 114, 101, 32, 109, 105, 115, 115, > 105, 110, 103, 32, 105, 110, 32, 39, 67, 117, 115, 116, 111, 109, 32, 108, > 97, 121, 101, 114, 115, 39, 32, 109, 111, 100, 101, 32, 40, 34, 123, 36, > 50, 43, 49, 125, 34, 32, 101, 120, 112, 101, 99, 116, 101, 100, 32, 97, > 116, 32, 108, 101, 97, 115, 116, 44, 32, 34, 64, 35, 34, 32, 112, 114, > 111, 118, 105, 100, 101, 100, 41, 46, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, 101, 91, 48, > 45, 123, 36, 50, 45, 49, 125, 93, 32, 64, 123, 45, 109, 97, 120, 95, > 115, 91, 48, 45, 123, 36, 50, 45, 49, 125, 93, 125, 32, 45, 114, 101, > 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 91, 36, 50, 45, > 45, 49, 93, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, > 36, 50, 125, 32, 45, 108, 91, 48, 45, 123, 36, 50, 45, 49, 125, 44, > 123, 36, 50, 43, 36, 62, 125, 93, 10, 45, 110, 111, 114, 109, 91, 45, > 49, 93, 32, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, > 114, 91, 45, 49, 93, 32, 36, 51, 37, 44, 36, 51, 37, 44, 49, 44, > 49, 44, 50, 10, 115, 61, 123, 36, 52, 42, 109, 97, 120, 40, 114, 111, > 117, 110, 100, 40, 36, 119, 47, 119, 41, 44, 114, 111, 117, 110, 100, 40, > 36, 104, 47, 104, 41, 41, 125, 10, 114, 48, 61, 123, 36, 115, 42, 36, > 53, 37, 125, 32, 114, 49, 61, 123, 36, 115, 42, 36, 54, 37, 125, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 32, 114, 61, 123, 114, 111, > 117, 110, 100, 40, 36, 114, 48, 43, 36, 62, 42, 40, 36, 114, 49, 45, > 36, 114, 48, 41, 47, 40, 36, 50, 45, 49, 41, 41, 125, 32, 45, 105, > 102, 32, 36, 114, 32, 45, 45, 114, 91, 36, 62, 93, 32, 36, 114, 44, > 36, 114, 44, 49, 44, 49, 48, 48, 37, 44, 51, 32, 45, 101, 108, 115, > 101, 32, 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, 32, 45, 100, 111, > 110, 101, 10, 45, 114, 91, 45, 36, 50, 45, 45, 49, 93, 32, 36, 115, > 44, 36, 115, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 45, 109, 97, 112, 95, 115, 112, 114, 105, > 116, 101, 115, 91, 36, 50, 45, 45, 49, 93, 32, 36, 50, 44, 36, 56, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, > 91, 48, 45, 123, 36, 50, 45, 49, 125, 93, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 32, 36, > 123, 49, 45, 51, 125, 44, 49, 44, 36, 123, 53, 45, 45, 50, 125, 34, > 44, 36, 45, 49, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, > 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 101, 108, > 115, 101, 10, 45, 105, 102, 32, 123, 64, 35, 62, 36, 50, 125, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 36, 50, 125, 32, 45, > 108, 91, 48, 45, 123, 36, 50, 45, 49, 125, 44, 123, 36, 50, 43, 36, > 62, 125, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, > 45, 45, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 32, 36, 123, > 49, 45, 51, 125, 44, 49, 44, 36, 123, 53, 45, 45, 50, 125, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 114, 91, 45, 49, 93, 32, 36, 119, > 44, 36, 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, 44, 48, 44, 48, > 46, 53, 44, 48, 46, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 32, 45, 114, 109, 91, 48, 45, 123, 36, 50, 45, 49, 125, 93, > 10, 45, 101, 108, 115, 101, 32, 45, 95, 103, 105, 109, 112, 95, 110, 111, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 77, 105, 115, 115, 105, 110, > 103, 92, 110, 108, 97, 121, 101, 114, 115, 32, 33, 34, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 95, 103, 105, 109, 112, > 95, 115, 104, 97, 112, 101, 115, 32, 58, 10, 45, 110, 111, 114, 109, 32, > 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, 32, 36, > 51, 37, 44, 36, 51, 37, 44, 49, 44, 49, 44, 50, 10, 115, 61, 123, > 40, 49, 43, 36, 49, 48, 41, 42, 36, 52, 42, 109, 97, 120, 40, 114, > 111, 117, 110, 100, 40, 36, 119, 47, 119, 41, 44, 114, 111, 117, 110, 100, > 40, 36, 104, 47, 104, 41, 41, 125, 10, 114, 48, 61, 123, 36, 115, 42, > 36, 53, 37, 125, 32, 114, 49, 61, 123, 36, 115, 42, 36, 54, 37, 125, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 32, 114, 61, 123, 114, > 111, 117, 110, 100, 40, 36, 114, 48, 43, 36, 62, 42, 40, 36, 114, 49, > 45, 36, 114, 48, 41, 47, 40, 36, 50, 45, 49, 41, 41, 125, 32, 45, > 105, 102, 32, 36, 114, 32, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, > 112, 101, 115, 123, 36, 49, 45, 49, 125, 91, 93, 32, 36, 114, 44, 36, > 115, 32, 45, 101, 108, 115, 101, 32, 49, 44, 49, 32, 45, 101, 110, 100, > 105, 102, 32, 45, 100, 111, 110, 101, 10, 45, 114, 91, 45, 36, 50, 45, > 45, 49, 93, 32, 36, 115, 44, 36, 115, 44, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 102, 32, 36, 57, > 32, 45, 114, 118, 91, 45, 36, 50, 45, 45, 49, 93, 32, 45, 42, 91, > 45, 36, 50, 45, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 45, 36, > 50, 45, 45, 49, 93, 32, 49, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 109, 97, 112, 95, 115, 112, 114, 105, 116, 101, 115, 32, 36, 50, 44, 36, > 56, 10, 45, 105, 102, 32, 36, 49, 48, 32, 45, 114, 32, 53, 48, 37, > 44, 53, 48, 37, 44, 49, 44, 49, 44, 50, 32, 45, 101, 110, 100, 105, > 102, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 48, 32, > 58, 10, 45, 95, 100, 116, 95, 99, 105, 114, 99, 108, 101, 91, 93, 32, > 36, 49, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, > 32, 58, 10, 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 49, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 50, 32, 58, 10, 36, > 49, 44, 36, 49, 44, 49, 44, 49, 32, 45, 61, 32, 49, 44, 53, 48, > 37, 44, 53, 48, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 32, > 49, 44, 49, 32, 45, 108, 116, 32, 123, 36, 49, 47, 50, 125, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 51, 32, 58, 10, 36, > 50, 44, 36, 50, 44, 49, 44, 49, 44, 39, 120, 43, 121, 60, 61, 50, > 42, 36, 49, 45, 49, 39, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, > 112, 101, 115, 52, 32, 58, 10, 36, 50, 44, 36, 49, 44, 49, 44, 49, > 44, 49, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 53, > 32, 58, 10, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, 49, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 54, 32, 58, 10, 45, > 98, 97, 108, 108, 32, 36, 49, 44, 50, 48, 48, 32, 45, 110, 32, 48, > 44, 49, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 55, > 32, 58, 10, 45, 104, 101, 97, 114, 116, 32, 54, 53, 32, 45, 114, 32, > 36, 49, 44, 36, 49, 44, 49, 44, 49, 44, 50, 32, 45, 103, 101, 32, > 53, 48, 37, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, > 56, 32, 58, 10, 45, 115, 116, 97, 114, 32, 36, 49, 44, 36, 49, 10, > 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 57, 32, 58, 10, > 45, 97, 114, 114, 111, 119, 51, 100, 32, 48, 44, 48, 44, 48, 44, 49, > 44, 48, 44, 48, 44, 49, 53, 37, 44, 52, 48, 37, 44, 51, 48, 37, > 32, 45, 99, 111, 108, 51, 100, 32, 49, 32, 45, 42, 51, 100, 32, 36, > 49, 32, 45, 99, 51, 100, 10, 36, 50, 44, 36, 50, 32, 45, 111, 98, > 106, 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, > 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 50, 44, 48, 44, > 48, 10, 45, 114, 109, 91, 45, 50, 93, 32, 45, 45, 109, 105, 114, 114, > 111, 114, 32, 121, 32, 45, 109, 97, 120, 10, 95, 103, 105, 109, 112, 95, > 115, 104, 97, 112, 101, 115, 49, 48, 32, 58, 10, 83, 61, 123, 36, 50, > 43, 49, 45, 40, 36, 50, 37, 50, 41, 125, 10, 36, 83, 44, 36, 83, > 44, 49, 44, 49, 44, 34, 88, 61, 120, 47, 40, 119, 45, 49, 41, 59, > 89, 61, 121, 47, 40, 104, 45, 49, 41, 59, 114, 61, 97, 98, 115, 40, > 48, 46, 53, 45, 115, 113, 114, 116, 40, 88, 94, 50, 43, 89, 94, 50, > 41, 41, 59, 97, 61, 97, 116, 97, 110, 50, 40, 121, 44, 120, 41, 59, > 114, 60, 48, 46, 49, 45, 48, 46, 49, 55, 42, 40, 48, 46, 53, 45, > 36, 49, 47, 36, 50, 41, 42, 115, 105, 110, 40, 50, 42, 97, 41, 34, > 10, 45, 45, 109, 105, 114, 114, 111, 114, 32, 120, 121, 32, 45, 109, 97, > 120, 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 49, > 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, > 48, 32, 36, 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, > 49, 44, 48, 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, > 10, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 50, 32, > 58, 10, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, > 32, 36, 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, > 44, 48, 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, > 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 51, 32, 58, > 10, 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 50, 32, > 36, 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, > 48, 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 52, 32, 58, 10, > 45, 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 51, 32, 36, > 42, 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, > 32, 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, 103, > 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 53, 32, 58, 10, 45, > 95, 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 55, 32, 36, 42, > 32, 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, 32, > 45, 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, 103, 105, > 109, 112, 95, 115, 104, 97, 112, 101, 115, 49, 54, 32, 58, 10, 45, 95, > 103, 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 56, 32, 36, 42, 32, > 45, 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, 32, 45, > 45, 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 95, 103, 105, 109, > 112, 95, 115, 104, 97, 112, 101, 115, 49, 55, 32, 58, 10, 45, 95, 103, > 105, 109, 112, 95, 115, 104, 97, 112, 101, 115, 57, 32, 36, 42, 32, 45, > 101, 120, 112, 97, 110, 100, 95, 120, 121, 32, 49, 44, 48, 32, 45, 45, > 101, 114, 111, 100, 101, 32, 51, 32, 45, 45, 10, 103, 105, 109, 112, 95, > 112, 97, 99, 107, 95, 115, 112, 114, 105, 116, 101, 115, 32, 58, 10, 45, > 105, 102, 32, 36, 54, 10, 45, 105, 102, 32, 123, 64, 35, 60, 50, 125, > 32, 45, 101, 114, 114, 111, 114, 91, 93, 32, 34, 67, 111, 109, 109, 97, > 110, 100, 32, 39, 45, 103, 105, 109, 112, 95, 112, 97, 99, 107, 95, 115, > 112, 114, 105, 116, 101, 115, 39, 58, 32, 77, 97, 115, 107, 105, 110, 103, > 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 116, 32, 108, 101, 97, > 115, 116, 32, 116, 119, 111, 32, 105, 110, 112, 117, 116, 32, 108, 97, 121, > 101, 114, 115, 32, 33, 32, 40, 112, 108, 101, 97, 115, 101, 32, 99, 104, > 101, 99, 107, 32, 116, 104, 97, 116, 32, 39, 73, 110, 112, 117, 116, 32, > 76, 97, 121, 101, 114, 115, 39, 32, 105, 115, 32, 99, 111, 114, 114, 101, > 99, 116, 108, 121, 32, 115, 101, 116, 41, 46, 34, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, > 125, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, 114, 103, 98, > 97, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, > 32, 45, 45, 110, 101, 113, 91, 49, 93, 32, 48, 32, 45, 42, 91, 48, > 93, 32, 91, 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 32, 48, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 10, 45, 114, 101, 109, 111, 118, 101, 95, 101, 109, 112, 116, > 121, 91, 48, 45, 45, 50, 93, 32, 45, 45, 99, 104, 97, 110, 110, 101, > 108, 115, 91, 45, 49, 93, 32, 49, 48, 48, 37, 32, 45, 99, 104, 97, > 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 45, 52, 44, 48, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 10, 45, 112, 97, 99, 107, 95, 115, > 112, 114, 105, 116, 101, 115, 91, 48, 45, 45, 50, 93, 32, 36, 123, 49, > 45, 53, 125, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, > 105, 116, 121, 32, 45, 45, 110, 101, 113, 91, 49, 93, 32, 48, 32, 45, > 42, 91, 48, 93, 32, 91, 45, 49, 93, 32, 45, 97, 32, 99, 32, 45, > 97, 117, 116, 111, 99, 114, 111, 112, 32, 48, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 45, 114, 101, 109, 111, 118, 101, 95, 101, > 109, 112, 116, 121, 32, 45, 105, 91, 48, 93, 32, 36, 55, 44, 36, 56, > 44, 49, 44, 53, 32, 45, 112, 97, 99, 107, 95, 115, 112, 114, 105, 116, > 101, 115, 32, 36, 123, 49, 45, 53, 125, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 48, 44, > 64, 123, 48, 44, 115, 45, 50, 125, 10, 103, 105, 109, 112, 95, 112, 97, > 112, 101, 114, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 34, 45, 116, 101, 120, 116, 117, 114, 105, 122, > 101, 95, 112, 97, 112, 101, 114, 34, 44, 36, 49, 44, 48, 10, 103, 105, > 109, 112, 95, 112, 97, 112, 101, 114, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, > 112, 101, 114, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, > 95, 112, 108, 97, 105, 100, 95, 116, 101, 120, 116, 117, 114, 101, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 115, > 61, 123, 115, 125, 10, 45, 114, 111, 119, 115, 32, 36, 49, 37, 10, 45, > 98, 32, 36, 53, 37, 32, 45, 115, 104, 97, 114, 112, 101, 110, 32, 36, > 54, 10, 45, 114, 32, 36, 119, 44, 36, 104, 44, 49, 44, 36, 115, 44, > 50, 10, 45, 45, 114, 111, 116, 97, 116, 101, 91, 48, 93, 32, 36, 51, > 44, 49, 44, 50, 44, 53, 48, 37, 44, 53, 48, 37, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 36, 50, 45, 49, 125, 32, 45, 45, 114, 111, > 116, 97, 116, 101, 91, 48, 93, 32, 123, 36, 51, 43, 36, 52, 42, 40, > 36, 62, 43, 49, 41, 47, 40, 36, 50, 45, 49, 41, 125, 44, 49, 44, > 50, 44, 53, 48, 37, 44, 53, 48, 37, 32, 45, 43, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 48, 93, > 10, 45, 47, 32, 36, 50, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 103, 105, 109, 112, 95, 112, 108, 97, 115, 109, 97, 32, 58, > 32, 45, 115, 107, 105, 112, 32, 36, 123, 52, 61, 48, 125, 44, 36, 123, > 53, 61, 48, 125, 10, 45, 105, 102, 32, 36, 53, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 101, 108, 115, 101, 32, 45, 116, 111, 95, 114, > 103, 98, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 52, > 32, 45, 114, 97, 110, 100, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 112, 108, 97, 115, 109, 97, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 32, 45, 110, 32, 48, 44, 50, 53, 53, 10, 45, 98, > 97, 108, 97, 110, 99, 101, 95, 103, 97, 109, 109, 97, 32, 36, 123, 54, > 45, 56, 125, 10, 103, 105, 109, 112, 95, 112, 111, 108, 107, 97, 95, 100, > 111, 116, 115, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 112, 111, 108, 107, 97, 95, 100, 111, 116, 115, 32, 123, 36, 49, 42, 36, > 50, 47, 49, 48, 48, 125, 44, 36, 123, 50, 45, 45, 49, 125, 10, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 95, 101, 108, 108, 105, 112, 115, > 101, 115, 32, 58, 10, 45, 99, 111, 108, 111, 114, 95, 101, 108, 108, 105, > 112, 115, 101, 115, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 103, 105, > 109, 112, 95, 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 115, 121, 110, 116, 101, 120, 116, 117, 114, 105, 122, 101, 32, 49, 48, 48, > 37, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 114, 111, 114, 115, > 99, 104, 97, 99, 104, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, 102, 32, 123, 36, > 51, 61, 61, 48, 125, 32, 45, 110, 111, 114, 109, 32, 45, 114, 111, 114, > 115, 99, 104, 97, 99, 104, 32, 36, 49, 37, 44, 36, 50, 32, 45, 42, > 32, 50, 53, 53, 10, 45, 101, 108, 105, 102, 32, 123, 36, 51, 61, 61, > 49, 125, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 111, 114, 115, > 99, 104, 97, 99, 104, 32, 36, 49, 37, 44, 36, 50, 32, 45, 42, 32, > 50, 53, 53, 10, 45, 101, 108, 115, 101, 32, 45, 45, 110, 111, 114, 109, > 32, 45, 114, 111, 114, 115, 99, 104, 97, 99, 104, 91, 45, 49, 93, 32, > 36, 49, 37, 44, 36, 50, 32, 45, 98, 108, 101, 110, 100, 32, 115, 104, > 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 10, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, > 105, 109, 112, 95, 115, 101, 97, 109, 108, 101, 115, 115, 95, 116, 117, 114, > 98, 117, 108, 101, 110, 99, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 119, 104, 61, 123, > 119, 125, 44, 123, 104, 125, 32, 45, 114, 109, 10, 36, 119, 104, 44, 49, > 44, 123, 105, 102, 40, 36, 54, 44, 51, 44, 49, 41, 125, 32, 45, 114, > 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 10, 36, 119, > 104, 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 123, 36, 51, 42, > 112, 105, 47, 49, 56, 48, 45, 36, 52, 42, 49, 48, 42, 112, 105, 125, > 44, 123, 36, 51, 42, 112, 105, 47, 49, 56, 48, 43, 36, 52, 42, 49, > 48, 42, 112, 105, 125, 32, 45, 45, 115, 105, 110, 91, 45, 49, 93, 32, > 45, 99, 111, 115, 91, 45, 50, 93, 32, 45, 97, 91, 45, 50, 44, 45, > 49, 93, 32, 99, 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 49, > 51, 48, 37, 44, 49, 51, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, > 48, 44, 50, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 98, 91, 45, > 49, 93, 32, 36, 50, 32, 45, 111, 114, 105, 101, 110, 116, 97, 116, 105, > 111, 110, 91, 45, 49, 93, 10, 45, 118, 101, 99, 116, 111, 114, 50, 116, > 101, 110, 115, 111, 114, 91, 45, 49, 93, 10, 45, 115, 109, 111, 111, 116, > 104, 91, 45, 50, 93, 32, 91, 45, 49, 93, 44, 36, 49, 44, 48, 46, > 53, 44, 50, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 114, 91, > 45, 49, 93, 32, 36, 119, 104, 44, 49, 44, 49, 48, 48, 37, 44, 48, > 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 102, 32, 123, > 36, 53, 33, 61, 49, 125, 32, 105, 97, 61, 123, 105, 97, 125, 32, 45, > 45, 32, 36, 105, 97, 32, 45, 42, 32, 36, 53, 32, 45, 43, 32, 36, > 105, 97, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, > 110, 32, 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 115, 112, 111, > 110, 103, 101, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 34, 45, 115, 112, 111, 110, 103, 101, 32, 36, > 49, 34, 44, 36, 50, 44, 48, 10, 103, 105, 109, 112, 95, 115, 112, 111, > 110, 103, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 115, 112, 111, 110, 103, 101, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 116, 97, > 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, > 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, > 91, 48, 93, 10, 45, 115, 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, > 115, 115, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 45, 110, 32, 48, > 44, 50, 53, 53, 10, 45, 105, 102, 32, 36, 52, 32, 45, 101, 113, 117, > 97, 108, 105, 122, 101, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 114, 103, 98, 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 49, 44, 50, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 53, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 108, 97, 98, > 50, 114, 103, 98, 91, 45, 49, 93, 10, 45, 97, 112, 112, 108, 121, 95, > 103, 97, 109, 109, 97, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 54, > 125, 32, 45, 45, 91, 45, 49, 93, 32, 49, 50, 56, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 55, 32, 45, 43, 91, 45, 49, 93, 32, 123, 49, > 50, 56, 43, 36, 56, 125, 10, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 115, 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 115, 116, 97, 105, 110, 101, 100, 95, 103, 108, 97, 115, 115, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 115, 116, > 97, 114, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, > 112, 97, 99, 105, 116, 121, 32, 45, 114, 118, 10, 45, 115, 116, 97, 114, > 115, 32, 36, 49, 37, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, > 53, 44, 36, 54, 37, 44, 36, 123, 55, 45, 57, 125, 44, 123, 36, 49, > 48, 47, 50, 53, 53, 125, 10, 45, 114, 118, 32, 45, 97, 32, 99, 32, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, > 95, 115, 116, 101, 110, 99, 105, 108, 32, 58, 10, 45, 118, 32, 45, 10, > 45, 105, 102, 32, 123, 36, 53, 61, 61, 48, 125, 32, 45, 110, 111, 114, > 109, 32, 45, 115, 116, 101, 110, 99, 105, 108, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 10, 45, 101, 108, 105, 102, 32, 123, 36, 53, 61, 61, 49, > 125, 32, 45, 115, 116, 101, 110, 99, 105, 108, 32, 36, 49, 44, 36, 50, > 44, 36, 51, 10, 45, 101, 108, 115, 101, 32, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 10, 45, 45, 110, 111, 114, 109, 91, 45, 49, 93, 32, > 45, 115, 116, 101, 110, 99, 105, 108, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 32, 45, 103, 101, 91, 45, 49, 93, 32, 53, 48, > 37, 32, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, > 115, 104, 97, 112, 101, 97, 118, 101, 114, 97, 103, 101, 48, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, 32, 45, 116, 111, 95, > 114, 103, 98, 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, > 108, 111, 114, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 44, 48, 44, 48, 44, 48, 44, 48, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, 109, 111, 111, 116, 104, 32, > 123, 51, 48, 42, 36, 52, 125, 44, 48, 44, 49, 44, 49, 32, 45, 101, > 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, > 108, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 115, 116, 101, 110, 99, 105, 108, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 116, 101, 116, 114, > 105, 115, 32, 58, 10, 45, 116, 101, 116, 114, 105, 115, 32, 36, 49, 10, > 103, 105, 109, 112, 95, 116, 114, 117, 99, 104, 101, 116, 32, 58, 10, 45, > 105, 102, 32, 36, 54, 32, 45, 116, 111, 95, 97, 32, 45, 101, 108, 115, > 101, 32, 45, 114, 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 114, 117, 99, 104, 101, > 116, 32, 36, 49, 44, 36, 50, 44, 36, 52, 10, 45, 105, 102, 32, 36, > 53, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 99, 104, > 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, 32, 45, 108, 97, > 98, 101, 108, 91, 45, 49, 93, 32, 48, 44, 49, 32, 123, 105, 77, 43, > 49, 125, 44, 49, 44, 49, 44, 51, 32, 45, 114, 97, 110, 100, 91, 45, > 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, 109, 97, 112, 91, 45, 50, > 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, > 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 98, 32, 36, 51, 32, 45, 110, 32, 48, > 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 116, 117, 114, 98, 117, 108, > 101, 110, 99, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, > 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, > 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, 45, 116, > 117, 114, 98, 117, 108, 101, 110, 99, 101, 32, 36, 123, 94, 48, 125, 10, > 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 119, 104, 105, 114, > 108, 115, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 34, 45, 119, 104, 105, 114, 108, 115, 32, 36, 49, > 44, 36, 50, 44, 36, 51, 44, 36, 52, 34, 44, 36, 53, 44, 48, 10, > 103, 105, 109, 112, 95, 119, 104, 105, 114, 108, 115, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 119, 104, 105, 114, 108, 115, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, > 32, 58, 10, 45, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 32, > 48, 32, 45, 115, 107, 105, 112, 32, 36, 123, 94, 48, 125, 10, 103, 105, > 109, 112, 95, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 100, 101, 105, 110, 116, 101, 114, 108, 97, 99, 101, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 105, 110, 112, > 97, 105, 110, 116, 95, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 58, > 10, 45, 105, 102, 32, 36, 55, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 45, 115, 101, 108, 101, > 99, 116, 95, 99, 111, 108, 111, 114, 32, 48, 44, 36, 123, 56, 45, 49, > 49, 125, 32, 45, 114, 118, 10, 45, 105, 102, 32, 36, 49, 32, 45, 105, > 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, 119, 32, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 37, 44, 36, 54, 37, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, 101, 32, 45, 105, 110, 112, > 97, 105, 110, 116, 91, 49, 93, 32, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 109, 91, 48, 93, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, > 123, 64, 35, 61, 61, 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 97, 91, 48, 93, 32, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 48, 93, 32, 49, 48, 48, > 37, 32, 45, 103, 101, 91, 48, 93, 32, 53, 48, 37, 10, 45, 105, 102, > 32, 36, 49, 32, 45, 105, 110, 112, 97, 105, 110, 116, 95, 102, 108, 111, > 119, 32, 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 37, 44, 36, > 54, 37, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, > 101, 32, 45, 105, 110, 112, 97, 105, 110, 116, 91, 94, 48, 93, 32, 91, > 48, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 116, 111, 95, 97, 91, > 48, 93, 32, 45, 102, 91, 48, 93, 32, 48, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, 110, 116, 95, 100, > 105, 102, 102, 117, 115, 105, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, 110, 116, > 95, 100, 105, 102, 102, 117, 115, 105, 111, 110, 32, 36, 123, 94, 48, 125, > 10, 45, 105, 102, 32, 123, 33, 36, 55, 34, 32, 38, 38, 32, 34, 64, > 35, 62, 49, 125, 32, 45, 114, 109, 91, 48, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, 110, 116, 95, > 104, 111, 108, 101, 115, 32, 58, 10, 45, 105, 110, 112, 97, 105, 110, 116, > 95, 104, 111, 108, 101, 115, 32, 123, 36, 49, 94, 49, 46, 53, 125, 44, > 36, 50, 44, 36, 51, 10, 103, 105, 109, 112, 95, 105, 110, 112, 97, 105, > 110, 116, 95, 112, 97, 116, 99, 104, 32, 58, 10, 45, 105, 102, 32, 123, > 64, 46, 62, 61, 49, 53, 56, 49, 125, 32, 105, 110, 112, 97, 105, 110, > 116, 61, 105, 110, 112, 97, 105, 110, 116, 32, 45, 101, 108, 115, 101, 32, > 105, 110, 112, 97, 105, 110, 116, 61, 114, 101, 112, 97, 105, 114, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 57, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, > 45, 115, 101, 108, 101, 99, 116, 95, 99, 111, 108, 111, 114, 32, 48, 44, > 36, 123, 49, 48, 45, 49, 51, 125, 10, 45, 105, 102, 32, 123, 64, 46, > 62, 61, 49, 53, 56, 52, 125, 32, 45, 36, 105, 110, 112, 97, 105, 110, > 116, 91, 48, 93, 32, 91, 49, 93, 44, 36, 49, 44, 123, 36, 49, 42, > 36, 50, 125, 44, 36, 51, 44, 49, 44, 123, 36, 52, 42, 36, 49, 125, > 44, 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, > 46, 62, 61, 49, 53, 56, 51, 125, 32, 45, 36, 105, 110, 112, 97, 105, > 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 36, 49, 44, 123, 36, 49, > 42, 36, 50, 125, 44, 36, 51, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 115, 101, 32, 45, 36, 105, > 110, 112, 97, 105, 110, 116, 91, 48, 93, 32, 91, 49, 93, 44, 36, 49, > 44, 123, 36, 49, 42, 36, 50, 125, 44, 123, 114, 111, 117, 110, 100, 40, > 49, 43, 36, 51, 41, 125, 44, 123, 36, 52, 42, 36, 49, 125, 44, 36, > 123, 53, 45, 56, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 109, > 91, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 101, 108, 115, 101, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, > 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 116, 111, 95, 97, 91, 48, 93, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 91, 48, 93, 32, 49, 48, 48, 37, 32, 45, 103, 101, 91, > 48, 93, 32, 53, 48, 37, 10, 45, 105, 102, 32, 123, 64, 46, 62, 61, > 49, 53, 56, 52, 125, 32, 45, 36, 105, 110, 112, 97, 105, 110, 116, 91, > 94, 48, 93, 32, 91, 48, 93, 44, 36, 49, 44, 123, 36, 49, 42, 36, > 50, 125, 44, 36, 51, 44, 49, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 105, 102, 32, 123, 64, 46, > 62, 61, 49, 53, 56, 51, 125, 32, 45, 36, 105, 110, 112, 97, 105, 110, > 116, 91, 94, 48, 93, 32, 91, 48, 93, 44, 36, 49, 44, 123, 36, 49, > 42, 36, 50, 125, 44, 36, 51, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 108, 115, 101, 32, 45, 36, 105, > 110, 112, 97, 105, 110, 116, 91, 94, 48, 93, 32, 91, 48, 93, 44, 36, > 49, 44, 123, 36, 49, 42, 36, 50, 125, 44, 123, 114, 111, 117, 110, 100, > 40, 49, 43, 36, 51, 41, 125, 44, 123, 36, 52, 42, 36, 49, 125, 44, > 36, 123, 53, 45, 56, 125, 10, 45, 101, 110, 100, 105, 102, 10, 45, 116, > 111, 95, 97, 91, 48, 93, 32, 45, 102, 91, 48, 93, 32, 48, 10, 45, > 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, 111, 108, 105, 100, > 105, 102, 121, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 115, 111, > 108, 105, 100, 105, 102, 121, 10, 45, 101, 108, 115, 101, 32, 45, 115, 111, > 108, 105, 100, 105, 102, 121, 95, 108, 105, 110, 101, 97, 114, 32, 36, 50, > 44, 36, 51, 44, 36, 52, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 115, 111, 108, 105, 100, 105, 102, 121, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, > 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, > 95, 115, 111, 108, 105, 100, 105, 102, 121, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 114, 101, 109, 111, 118, 101, 95, 104, 111, > 116, 112, 105, 120, 101, 108, 115, 32, 58, 10, 45, 114, 101, 109, 111, 118, > 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 36, 49, 44, 36, > 50, 10, 103, 105, 109, 112, 95, 114, 101, 109, 111, 118, 101, 95, 104, 111, > 116, 112, 105, 120, 101, 108, 115, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 114, 101, 109, > 111, 118, 101, 95, 104, 111, 116, 112, 105, 120, 101, 108, 115, 32, 36, 42, > 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, > 116, 114, 111, 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 49, 51, 61, 49, 125, > 44, 36, 123, 49, 52, 61, 48, 125, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 97, 112, 112, 108, > 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, > 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, > 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 49, > 32, 45, 115, 109, 111, 111, 116, 104, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 44, 36, 55, 44, 36, 56, > 44, 36, 57, 44, 36, 49, 48, 32, 45, 100, 111, 110, 101, 92, 34, 44, > 36, 49, 51, 44, 36, 49, 52, 34, 44, 36, 49, 50, 44, 48, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, > 50, 53, 53, 10, 103, 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, > 111, 112, 105, 99, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 97, 110, 105, 115, 111, 116, 114, 111, 112, 105, 99, 95, > 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 98, 105, 108, 97, 116, 101, 114, 97, 108, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 36, 123, 53, 61, 48, 125, 44, > 36, 123, 54, 61, 48, 125, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, > 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, > 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, > 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 51, 32, 45, 98, 105, 108, > 97, 116, 101, 114, 97, 108, 32, 36, 49, 44, 36, 50, 32, 45, 100, 111, > 110, 101, 92, 34, 44, 36, 53, 44, 36, 54, 34, 44, 36, 52, 44, 48, > 10, 103, 105, 109, 112, 95, 98, 105, 108, 97, 116, 101, 114, 97, 108, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 103, 105, 109, 112, 95, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 36, > 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, 105, 102, 102, > 117, 115, 105, 111, 110, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, > 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 115, 109, 111, > 111, 116, 104, 32, 36, 54, 44, 36, 49, 44, 36, 50, 44, 36, 51, 44, > 36, 52, 44, 36, 53, 44, 48, 32, 45, 99, 32, 48, 44, 50, 53, 53, > 92, 34, 44, 36, 56, 44, 36, 57, 34, 44, 36, 55, 44, 48, 10, 103, > 105, 109, 112, 95, 100, 105, 102, 102, 117, 115, 105, 111, 110, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 100, 105, 102, > 102, 117, 115, 105, 111, 110, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, 101, > 97, 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, 95, 115, 109, 111, 111, > 116, 104, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, > 92, 34, 45, 109, 101, 97, 110, 99, 117, 114, 118, 97, 116, 117, 114, 101, > 95, 102, 108, 111, 119, 32, 36, 50, 44, 36, 49, 44, 36, 51, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 92, 34, 44, 36, 53, 44, 36, 54, 34, > 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, 109, 101, 97, 110, 99, > 117, 114, 118, 97, 116, 117, 114, 101, 95, 115, 109, 111, 111, 116, 104, 105, > 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, > 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 34, 45, 103, 105, 109, 112, 95, 109, 101, 97, 110, 99, 117, 114, 118, > 97, 116, 117, 114, 101, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 109, 101, 100, > 105, 97, 110, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, > 110, 110, 101, 108, 115, 32, 34, 45, 109, 101, 100, 105, 97, 110, 32, 36, > 49, 34, 44, 36, 50, 44, 48, 10, 103, 105, 109, 112, 95, 109, 101, 100, > 105, 97, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 109, 101, 100, 105, 97, 110, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 112, 97, 116, > 99, 104, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, 58, 10, 45, > 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, > 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, > 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, > 32, 36, 55, 32, 45, 100, 101, 110, 111, 105, 115, 101, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, 32, 45, > 100, 111, 110, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 92, 34, 44, > 36, 57, 44, 36, 49, 48, 34, 44, 36, 56, 44, 48, 10, 103, 105, 109, > 112, 95, 112, 97, 116, 99, 104, 95, 115, 109, 111, 111, 116, 104, 105, 110, > 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, > 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 34, 45, 103, 105, 109, 112, 95, 112, 97, 116, 99, 104, 95, 115, 109, 111, > 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, > 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, > 95, 112, 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, > 112, 32, 92, 34, 45, 114, 101, 112, 101, 97, 116, 32, 36, 52, 32, 45, > 98, 108, 117, 114, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 32, 36, > 49, 44, 36, 50, 44, 36, 51, 32, 45, 100, 111, 110, 101, 32, 45, 99, > 32, 48, 44, 50, 53, 53, 92, 34, 44, 36, 54, 44, 36, 55, 34, 44, > 36, 53, 44, 48, 10, 103, 105, 109, 112, 95, 115, 101, 108, 101, 99, 116, > 105, 118, 101, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, > 109, 112, 95, 115, 101, 108, 101, 99, 116, 105, 118, 101, 95, 115, 109, 111, > 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, 103, > 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, 110, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, > 116, 121, 32, 45, 108, 91, 48, 93, 32, 45, 116, 111, 95, 114, 103, 98, > 10, 45, 105, 102, 32, 36, 53, 32, 45, 45, 98, 97, 108, 97, 110, 99, > 101, 95, 103, 97, 109, 109, 97, 32, 49, 50, 56, 44, 49, 50, 56, 44, > 49, 50, 56, 32, 45, 101, 108, 115, 101, 32, 91, 48, 93, 32, 45, 101, > 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, > 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 48, > 32, 45, 102, 91, 45, 49, 93, 32, 49, 32, 45, 101, 108, 105, 102, 32, > 123, 36, 49, 61, 61, 50, 125, 32, 45, 100, 101, 116, 101, 99, 116, 95, > 115, 107, 105, 110, 91, 45, 49, 93, 32, 36, 50, 32, 45, 101, 108, 115, > 101, 32, 45, 100, 101, 116, 101, 99, 116, 95, 115, 107, 105, 110, 91, 45, > 49, 93, 32, 36, 50, 44, 36, 54, 37, 44, 36, 55, 37, 44, 36, 56, > 37, 32, 45, 101, 110, 100, 105, 102, 10, 77, 61, 123, 105, 77, 125, 32, > 45, 98, 91, 45, 49, 93, 32, 36, 51, 37, 32, 45, 42, 91, 45, 49, > 93, 32, 123, 36, 77, 47, 105, 77, 125, 32, 45, 42, 91, 45, 49, 93, > 32, 36, 52, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 49, 10, 45, > 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, 105, 108, 115, 91, 48, 93, > 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, 37, 10, 45, 45, 95, 103, > 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, 110, 91, > 50, 93, 32, 36, 49, 50, 44, 36, 49, 49, 10, 45, 106, 91, 50, 93, > 32, 91, 45, 49, 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, > 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, > 45, 42, 91, 45, 49, 93, 32, 123, 49, 48, 94, 36, 49, 51, 125, 32, > 45, 43, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 45, 101, 110, 100, > 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 95, 103, 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, > 115, 107, 105, 110, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 48, 125, 32, 45, 98, 32, 123, 36, 50, 47, 56, 125, 37, 10, 45, 101, > 108, 115, 101, 10, 45, 105, 102, 32, 123, 36, 50, 62, 48, 125, 10, 109, > 61, 123, 105, 109, 125, 32, 77, 61, 123, 105, 77, 125, 32, 45, 110, 32, > 48, 44, 50, 53, 53, 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 105, > 110, 116, 40, 36, 50, 47, 53, 41, 125, 32, 45, 98, 105, 108, 97, 116, > 101, 114, 97, 108, 32, 51, 37, 44, 123, 53, 42, 51, 125, 32, 45, 100, > 111, 110, 101, 10, 45, 98, 105, 108, 97, 116, 101, 114, 97, 108, 32, 51, > 37, 44, 123, 40, 36, 50, 37, 53, 41, 42, 51, 125, 10, 45, 42, 32, > 123, 40, 36, 77, 45, 36, 109, 41, 47, 50, 53, 53, 125, 32, 45, 43, > 32, 36, 109, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, > 105, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, > 32, 123, 36, 45, 50, 61, 61, 48, 125, 10, 45, 103, 105, 109, 112, 95, > 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, > 105, 102, 32, 36, 53, 32, 45, 98, 97, 108, 97, 110, 99, 101, 95, 103, > 97, 109, 109, 97, 32, 49, 50, 56, 44, 49, 50, 56, 44, 49, 50, 56, > 32, 45, 101, 110, 100, 105, 102, 32, 45, 105, 102, 32, 123, 36, 49, 61, > 61, 48, 125, 32, 45, 102, 32, 49, 32, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 50, 125, 32, 45, 100, 101, 116, 101, 99, 116, 95, 115, > 107, 105, 110, 32, 36, 50, 32, 45, 101, 108, 115, 101, 32, 45, 100, 101, > 116, 101, 99, 116, 95, 115, 107, 105, 110, 32, 36, 50, 44, 36, 54, 37, > 44, 36, 55, 37, 44, 36, 56, 37, 32, 45, 101, 110, 100, 105, 102, 32, > 77, 61, 123, 105, 77, 125, 32, 45, 98, 32, 36, 51, 37, 32, 45, 42, > 32, 123, 50, 53, 53, 42, 36, 77, 47, 105, 77, 125, 32, 45, 42, 32, > 36, 52, 32, 45, 99, 32, 48, 44, 50, 53, 53, 34, 44, 36, 45, 49, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, 49, 125, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 98, 32, 36, 57, 37, 34, 44, 36, 45, 49, > 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, 50, 125, 10, > 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 34, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, 97, > 105, 108, 115, 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, 37, 32, 45, > 107, 91, 45, 50, 93, 32, 45, 110, 32, 48, 44, 50, 53, 53, 34, 44, > 36, 45, 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, > 51, 125, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 34, 45, 115, 112, 108, 105, 116, 95, 100, > 101, 116, 97, 105, 108, 115, 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, > 37, 32, 45, 107, 91, 45, 50, 93, 32, 45, 95, 103, 105, 109, 112, 95, > 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, 110, 32, 36, 49, 50, 44, > 36, 49, 49, 32, 45, 110, 32, 48, 44, 50, 53, 53, 34, 44, 36, 45, > 49, 10, 45, 101, 108, 105, 102, 32, 123, 36, 45, 50, 61, 61, 52, 125, > 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 34, 45, 115, 112, 108, 105, 116, 95, 100, 101, 116, > 97, 105, 108, 115, 32, 52, 44, 36, 57, 37, 44, 36, 49, 48, 37, 32, > 45, 107, 91, 45, 49, 93, 32, 45, 110, 32, 48, 44, 50, 53, 53, 34, > 44, 36, 45, 49, 10, 45, 101, 108, 115, 101, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 115, 109, 111, 111, 116, 104, 95, 115, 107, 105, > 110, 32, 36, 42, 34, 44, 36, 45, 49, 10, 45, 101, 110, 100, 105, 102, > 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 45, 116, 111, > 95, 114, 103, 98, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 54, 37, > 44, 36, 55, 37, 44, 36, 56, 37, 44, 48, 46, 50, 44, 48, 44, 50, > 53, 53, 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 54, 37, > 44, 36, 55, 37, 44, 36, 56, 37, 44, 48, 46, 52, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 50, 53, 53, 44, 48, 10, > 45, 108, 105, 110, 101, 32, 123, 36, 54, 45, 48, 46, 50, 53, 42, 36, > 56, 125, 37, 44, 123, 36, 55, 45, 48, 46, 50, 53, 42, 36, 56, 125, > 37, 44, 123, 36, 54, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, > 123, 36, 55, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 48, 46, > 56, 44, 50, 53, 53, 44, 50, 53, 53, 44, 48, 10, 45, 108, 105, 110, > 101, 32, 123, 36, 54, 43, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, > 123, 36, 55, 45, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 123, 36, > 54, 45, 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 123, 36, 55, 43, > 48, 46, 50, 53, 42, 36, 56, 125, 37, 44, 48, 46, 56, 44, 50, 53, > 53, 44, 50, 53, 53, 44, 48, 10, 45, 101, 110, 100, 105, 102, 10, 103, > 105, 109, 112, 95, 116, 118, 95, 115, 109, 111, 111, 116, 104, 105, 110, 103, > 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, > 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, 97, 114, 97, 108, 108, > 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, 92, 34, 45, 116, 118, > 95, 102, 108, 111, 119, 32, 36, 50, 44, 36, 49, 44, 36, 51, 32, 45, > 99, 32, 48, 44, 50, 53, 53, 92, 34, 44, 36, 53, 44, 36, 54, 34, > 44, 36, 52, 44, 48, 10, 103, 105, 109, 112, 95, 116, 118, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 34, 45, 103, 105, 109, 112, 95, 116, 118, 95, > 115, 109, 111, 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, > 49, 10, 103, 105, 109, 112, 95, 104, 97, 97, 114, 95, 115, 109, 111, 111, > 116, 104, 105, 110, 103, 32, 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, > 104, 97, 110, 110, 101, 108, 115, 32, 34, 45, 103, 105, 109, 112, 95, 112, > 97, 114, 97, 108, 108, 101, 108, 95, 111, 118, 101, 114, 108, 97, 112, 32, > 92, 34, 45, 100, 101, 110, 111, 105, 115, 101, 95, 104, 97, 97, 114, 32, > 36, 49, 44, 36, 51, 44, 36, 50, 32, 45, 99, 32, 48, 44, 50, 53, > 53, 92, 34, 44, 36, 53, 44, 36, 54, 34, 44, 36, 52, 44, 48, 10, > 103, 105, 109, 112, 95, 104, 97, 97, 114, 95, 115, 109, 111, 111, 116, 104, > 105, 110, 103, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, > 105, 109, 112, 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 34, 45, 103, 105, 109, 112, 95, 104, 97, 97, 114, 95, 115, 109, > 111, 111, 116, 104, 105, 110, 103, 32, 36, 42, 34, 44, 36, 45, 49, 10, > 103, 105, 109, 112, 95, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, 97, > 114, 116, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 117, 112, > 115, 99, 97, 108, 101, 95, 115, 109, 97, 114, 116, 32, 36, 49, 44, 36, > 50, 44, 49, 44, 36, 51, 44, 36, 52, 44, 36, 53, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 103, 105, 109, 112, 95, 117, 112, 115, 99, 97, > 108, 101, 95, 115, 109, 97, 114, 116, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, 45, > 114, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 49, 44, 49, 44, > 48, 10, 45, 105, 102, 32, 123, 119, 60, 64, 123, 45, 50, 44, 119, 125, > 124, 124, 104, 60, 64, 123, 45, 50, 44, 104, 125, 125, 10, 45, 114, 109, > 91, 45, 49, 93, 32, 45, 47, 91, 45, 49, 93, 32, 52, 10, 48, 32, > 45, 116, 91, 45, 49, 93, 32, 34, 68, 111, 119, 110, 115, 99, 97, 108, > 105, 110, 103, 32, 105, 115, 92, 110, 110, 111, 116, 32, 97, 108, 108, 111, > 119, 101, 100, 33, 34, 44, 53, 44, 53, 44, 50, 48, 44, 49, 44, 50, > 53, 53, 32, 45, 114, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 91, > 45, 50, 93, 44, 49, 44, 49, 44, 48, 44, 48, 44, 48, 46, 53, 44, > 48, 46, 53, 10, 45, 111, 114, 91, 45, 50, 44, 45, 49, 93, 10, 45, > 101, 108, 115, 101, 10, 45, 122, 91, 45, 50, 93, 32, 123, 53, 48, 45, > 53, 48, 42, 64, 123, 45, 50, 44, 119, 125, 47, 119, 125, 37, 44, 123, > 53, 48, 45, 53, 48, 42, 64, 123, 45, 50, 44, 104, 125, 47, 104, 125, > 37, 44, 123, 53, 48, 43, 53, 48, 42, 64, 123, 45, 50, 44, 119, 125, > 47, 119, 125, 37, 44, 123, 53, 48, 43, 53, 48, 42, 64, 123, 45, 50, > 44, 104, 125, 47, 104, 125, 37, 10, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 103, 105, 109, 112, 95, 117, 112, 115, 99, 97, 108, 101, 95, 115, 109, > 97, 114, 116, 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, > 44, 36, 52, 44, 36, 53, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, > 50, 53, 53, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, > 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 115, 99, 97, 108, 101, 110, 120, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, > 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, 45, 105, 102, 32, 123, > 36, 50, 61, 61, 49, 125, 32, 45, 114, 103, 98, 50, 121, 99, 98, 99, > 114, 91, 48, 93, 32, 45, 114, 111, 117, 110, 100, 91, 48, 93, 10, 45, > 101, 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 32, 45, 114, 103, > 98, 50, 108, 97, 98, 56, 91, 48, 93, 32, 45, 114, 111, 117, 110, 100, > 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, > 36, 49, 61, 61, 48, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 115, > 99, 97, 108, 101, 51, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 50, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 115, > 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 51, 125, 32, 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 115, > 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 52, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 115, > 99, 97, 108, 101, 50, 120, 32, 45, 115, 99, 97, 108, 101, 50, 120, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 53, 125, 32, 45, 115, > 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, 101, 51, 120, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 54, 125, 32, 45, 115, > 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, > 45, 115, 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, > 36, 49, 61, 61, 55, 125, 32, 45, 115, 99, 97, 108, 101, 50, 120, 32, > 45, 115, 99, 97, 108, 101, 50, 120, 32, 45, 115, 99, 97, 108, 101, 50, > 120, 32, 45, 115, 99, 97, 108, 101, 50, 120, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 56, 125, 32, 45, 115, 99, 97, 108, 101, 51, > 120, 32, 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, > 101, 50, 120, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 57, > 125, 32, 45, 115, 99, 97, 108, 101, 51, 120, 32, 45, 115, 99, 97, 108, > 101, 51, 120, 32, 45, 115, 99, 97, 108, 101, 51, 120, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 50, 61, 61, 49, 125, 32, > 45, 121, 99, 98, 99, 114, 50, 114, 103, 98, 91, 48, 93, 10, 45, 101, > 108, 105, 102, 32, 123, 36, 50, 61, 61, 50, 125, 32, 45, 108, 97, 98, > 56, 50, 114, 103, 98, 91, 48, 93, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 115, 99, 97, 108, 101, 110, 120, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 122, 32, 52, 48, 37, 44, 52, > 48, 37, 44, 54, 48, 37, 44, 54, 48, 37, 10, 45, 103, 105, 109, 112, > 95, 115, 99, 97, 108, 101, 110, 120, 32, 36, 49, 44, 36, 50, 10, 103, > 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 32, 58, 10, 45, > 110, 51, 100, 32, 45, 99, 51, 100, 32, 45, 109, 51, 100, 32, 36, 49, > 51, 32, 102, 51, 100, 61, 123, 48, 46, 53, 42, 109, 97, 120, 40, 36, > 49, 44, 36, 50, 41, 47, 116, 97, 110, 40, 36, 55, 42, 112, 105, 47, > 51, 54, 48, 41, 125, 10, 45, 102, 51, 100, 32, 36, 102, 51, 100, 32, > 45, 108, 51, 100, 32, 123, 36, 56, 42, 36, 102, 51, 100, 125, 44, 123, > 36, 57, 42, 36, 102, 51, 100, 125, 44, 123, 36, 49, 48, 42, 36, 102, > 51, 100, 125, 32, 45, 115, 108, 51, 100, 32, 36, 49, 49, 32, 45, 115, > 115, 51, 100, 32, 36, 49, 50, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 42, 51, 100, 32, 123, > 36, 51, 42, 109, 97, 120, 40, 36, 49, 44, 36, 50, 41, 125, 32, 45, > 114, 51, 100, 32, 48, 44, 48, 44, 49, 44, 36, 54, 32, 45, 114, 51, > 100, 32, 48, 44, 49, 44, 48, 44, 36, 53, 32, 45, 114, 51, 100, 32, > 49, 44, 48, 44, 48, 44, 36, 52, 10, 36, 49, 44, 36, 50, 44, 49, > 44, 51, 44, 45, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, 48, 37, > 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 116, 111, 95, 114, 103, 98, > 97, 32, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, > 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 45, 49, 44, 50, 53, > 53, 44, 48, 44, 48, 44, 48, 44, 48, 10, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 98, 108, 111, 99, 107, > 115, 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 10, 87, 61, 123, 119, 125, 32, 72, 61, > 123, 104, 125, 32, 77, 61, 123, 109, 97, 120, 40, 119, 44, 104, 41, 125, > 10, 45, 105, 102, 32, 123, 119, 62, 104, 125, 32, 45, 114, 50, 100, 120, > 32, 36, 49, 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, 100, 121, 32, > 36, 49, 32, 45, 101, 110, 100, 105, 102, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 32, 109, 61, 123, 109, 97, 120, 40, 119, 44, 104, > 41, 125, 10, 45, 105, 102, 32, 123, 36, 51, 62, 48, 125, 32, 45, 109, > 105, 114, 114, 111, 114, 32, 121, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 105, 109, 97, 103, 101, 98, 108, 111, 99, 107, 115, 51, 100, 32, 36, 51, > 44, 36, 50, 37, 10, 45, 45, 51, 100, 91, 45, 49, 93, 32, 123, 36, > 119, 47, 50, 125, 44, 123, 36, 104, 47, 50, 125, 32, 102, 61, 123, 36, > 52, 42, 36, 77, 47, 40, 36, 109, 42, 40, 50, 45, 36, 49, 54, 41, > 41, 125, 32, 45, 42, 51, 100, 32, 36, 102, 44, 36, 102, 44, 123, 36, > 102, 42, 97, 98, 115, 40, 36, 51, 42, 36, 49, 47, 49, 48, 48, 41, > 125, 10, 45, 105, 102, 32, 123, 36, 51, 62, 48, 125, 32, 45, 114, 51, > 100, 32, 49, 44, 48, 44, 48, 44, 49, 56, 48, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 51, 100, 32, 48, 44, 48, 44, 49, 44, 36, 53, > 32, 45, 114, 51, 100, 32, 49, 44, 48, 44, 48, 44, 36, 54, 10, 45, > 105, 102, 32, 36, 49, 54, 32, 123, 50, 42, 36, 77, 125, 44, 123, 50, > 42, 36, 77, 125, 44, 49, 44, 52, 44, 45, 49, 32, 45, 101, 108, 115, > 101, 32, 36, 77, 44, 36, 77, 44, 49, 44, 52, 44, 45, 49, 32, 45, > 101, 110, 100, 105, 102, 10, 102, 51, 100, 61, 123, 48, 46, 53, 42, 119, > 47, 116, 97, 110, 40, 36, 55, 42, 112, 105, 47, 51, 54, 48, 41, 125, > 32, 45, 102, 51, 100, 32, 36, 102, 51, 100, 10, 45, 108, 51, 100, 32, > 123, 36, 49, 48, 42, 36, 102, 51, 100, 125, 44, 123, 36, 49, 49, 42, > 36, 102, 51, 100, 125, 44, 123, 36, 49, 50, 42, 36, 102, 51, 100, 125, > 32, 45, 115, 108, 51, 100, 32, 36, 49, 51, 32, 45, 115, 115, 51, 100, > 32, 36, 49, 52, 10, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 48, 93, 44, 36, 56, 37, 44, 36, 57, 37, 44, 48, > 44, 49, 44, 123, 105, 102, 40, 36, 49, 53, 44, 51, 44, 50, 41, 125, > 44, 48, 44, 49, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 32, 45, 43, 91, 45, 49, 93, 32, 49, 32, > 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 105, 102, 32, 36, 50, 48, 10, 91, 45, 49, 93, 44, > 91, 45, 49, 93, 44, 49, 44, 51, 44, 45, 49, 10, 45, 111, 98, 106, > 101, 99, 116, 51, 100, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, 56, > 37, 44, 36, 57, 37, 44, 48, 44, 49, 44, 51, 44, 48, 44, 49, 32, > 45, 114, 109, 91, 48, 93, 10, 45, 103, 91, 45, 49, 93, 32, 120, 121, > 44, 49, 32, 45, 43, 91, 45, 50, 44, 45, 49, 93, 32, 45, 110, 111, > 114, 109, 91, 45, 49, 93, 32, 45, 110, 101, 113, 91, 45, 49, 93, 32, > 48, 10, 45, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 51, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 55, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, > 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 56, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, > 50, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 57, 32, 45, 114, 109, > 91, 45, 49, 93, 10, 45, 106, 91, 48, 93, 32, 91, 45, 49, 93, 44, > 48, 44, 48, 44, 48, 44, 48, 44, 123, 36, 50, 48, 47, 50, 53, 53, > 125, 44, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 101, 108, 115, 101, 32, 45, 114, 109, 91, 48, 93, 10, 45, > 101, 110, 100, 105, 102, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, > 111, 108, 111, 114, 32, 48, 44, 48, 44, 45, 49, 44, 45, 49, 44, 45, > 49, 44, 48, 44, 48, 44, 48, 44, 48, 44, 48, 10, 45, 105, 102, 32, > 36, 49, 54, 32, 45, 114, 32, 53, 48, 37, 44, 53, 48, 37, 44, 49, > 44, 52, 44, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 99, 32, 48, > 44, 50, 53, 53, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, > 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, > 32, 45, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, > 98, 106, 101, 99, 116, 51, 100, 36, 49, 36, 50, 32, 36, 123, 54, 45, > 56, 125, 32, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 36, 123, > 51, 45, 53, 125, 10, 45, 100, 98, 51, 100, 32, 48, 10, 103, 105, 109, > 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, > 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, 95, 34, 44, 36, > 123, 49, 45, 52, 44, 54, 45, 56, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 45, 103, 105, 109, 112, 95, > 114, 101, 110, 100, 101, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, 36, > 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, 104, 125, 44, 36, 54, 44, > 36, 123, 57, 45, 45, 49, 125, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 53, 47, 50, > 53, 53, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, 101, > 110, 100, 91, 36, 62, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, 10, > 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 45, 49, 93, 10, 103, 105, > 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 95, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, > 116, 51, 100, 32, 34, 95, 112, 114, 101, 118, 105, 101, 119, 95, 34, 44, > 36, 123, 49, 45, 52, 44, 54, 45, 56, 125, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, 45, 45, 103, 105, 109, 112, > 95, 114, 101, 110, 100, 101, 114, 51, 100, 91, 45, 49, 93, 32, 64, 123, > 36, 62, 44, 119, 125, 44, 64, 123, 36, 62, 44, 104, 125, 44, 36, 54, > 44, 36, 123, 57, 45, 45, 49, 125, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 123, 36, 53, 47, > 50, 53, 53, 125, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 98, 108, > 101, 110, 100, 91, 36, 62, 44, 45, 49, 93, 32, 97, 108, 112, 104, 97, > 10, 45, 100, 111, 110, 101, 32, 45, 114, 109, 91, 45, 49, 93, 10, 95, > 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, > 99, 116, 51, 100, 95, 48, 32, 58, 32, 45, 112, 108, 97, 110, 101, 51, > 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 49, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 49, 32, 58, 32, 45, > 98, 111, 120, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, > 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, > 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, > 50, 32, 58, 32, 45, 112, 121, 114, 97, 109, 105, 100, 51, 100, 32, 49, > 44, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 51, 32, 58, 32, 45, > 115, 112, 104, 101, 114, 101, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 49, 44, 123, 50, 42, 36, 50, 125, 44, 123, 50, 42, > 36, 51, 125, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, > 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 52, 32, 58, 32, 45, 116, > 111, 114, 117, 115, 51, 100, 32, 36, 49, 44, 123, 36, 50, 47, 50, 125, > 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 51, 44, 48, 46, 53, > 44, 48, 46, 53, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, > 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 53, 32, 58, 32, 45, > 103, 121, 114, 111, 105, 100, 51, 100, 32, 50, 52, 32, 45, 42, 51, 100, > 91, 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, > 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, > 116, 51, 100, 95, 54, 32, 58, 32, 45, 119, 101, 105, 114, 100, 51, 100, > 32, 51, 50, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, 49, 44, > 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, > 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 55, 32, 58, 32, > 45, 99, 117, 112, 51, 100, 32, 49, 50, 56, 32, 45, 42, 51, 100, 91, > 45, 49, 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, > 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 95, 48, 32, 58, 32, 45, > 112, 108, 97, 110, 101, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, > 49, 93, 32, 36, 49, 44, 36, 50, 44, 49, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 49, 32, 58, 32, 45, 98, 111, > 120, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, 36, > 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 99, 111, > 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, > 101, 118, 105, 101, 119, 95, 50, 32, 58, 32, 45, 112, 121, 114, 97, 109, > 105, 100, 51, 100, 32, 49, 44, 49, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 51, 32, 58, 32, 45, 115, 112, > 104, 101, 114, 101, 51, 100, 32, 49, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 49, 44, 123, 50, 42, 36, 50, 125, 44, 123, 50, 42, 36, 51, > 125, 10, 95, 103, 105, 109, 112, 95, 99, 111, 108, 111, 114, 101, 100, 111, > 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 95, > 52, 32, 58, 32, 45, 116, 111, 114, 117, 115, 51, 100, 32, 36, 49, 44, > 123, 36, 50, 47, 50, 125, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 36, 51, 44, 48, 46, 53, 44, 48, 46, 53, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 53, 32, 58, 32, 45, 103, 121, > 114, 111, 105, 100, 51, 100, 32, 56, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 54, 32, 58, 32, 45, 119, 101, > 105, 114, 100, 51, 100, 32, 49, 50, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, > 95, 99, 111, 108, 111, 114, 101, 100, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 55, 32, 58, 32, 45, 99, 117, > 112, 51, 100, 32, 54, 52, 32, 45, 42, 51, 100, 91, 45, 49, 93, 32, > 36, 49, 44, 36, 50, 44, 36, 51, 10, 95, 103, 105, 109, 112, 95, 101, > 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 47, 50, 125, 32, 45, 108, 91, 36, > 62, 44, 123, 109, 105, 110, 40, 36, 62, 43, 49, 44, 64, 35, 45, 49, > 41, 125, 93, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, > 45, 45, 110, 111, 114, 109, 32, 45, 101, 108, 115, 101, 32, 45, 114, 91, > 49, 93, 32, 91, 48, 93, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 110, 91, 49, 93, 32, 48, 44, 36, 49, 32, 45, 98, 91, 49, 93, > 32, 36, 50, 10, 45, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, > 91, 48, 93, 32, 91, 49, 93, 32, 45, 114, 109, 91, 49, 93, 10, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 100, 98, 51, 100, > 10, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, > 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, > 116, 105, 111, 110, 51, 100, 32, 36, 123, 49, 45, 50, 125, 32, 45, 103, > 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 32, 36, 123, 51, > 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, > 105, 111, 110, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, > 100, 32, 36, 123, 49, 45, 50, 125, 44, 123, 119, 125, 44, 123, 104, 125, > 44, 36, 123, 53, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 101, > 120, 116, 114, 117, 100, 101, 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 123, 64, 35, 47, 50, 125, 32, 45, 108, 91, 36, 62, 44, > 123, 109, 105, 110, 40, 36, 62, 43, 49, 44, 64, 35, 45, 49, 41, 125, > 93, 10, 45, 101, 120, 116, 114, 117, 100, 101, 51, 100, 91, 45, 49, 93, > 32, 36, 49, 44, 36, 50, 44, 36, 51, 37, 10, 45, 105, 102, 32, 123, > 64, 35, 61, 61, 50, 125, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, > 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, > 45, 100, 98, 51, 100, 32, 48, 10, 103, 105, 109, 112, 95, 101, 120, 116, > 114, 117, 100, 101, 51, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 36, 123, 49, 45, 51, 125, > 32, 45, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 32, > 36, 123, 52, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, 101, 120, 116, > 114, 117, 100, 101, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, > 10, 45, 103, 105, 109, 112, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, > 32, 36, 123, 49, 45, 51, 125, 44, 123, 119, 125, 44, 123, 104, 125, 44, > 36, 123, 54, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, > 32, 45, 108, 91, 36, 62, 93, 32, 45, 95, 103, 105, 109, 112, 95, 105, > 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 36, 49, 36, 50, > 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 100, 98, > 51, 100, 32, 48, 10, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, > 98, 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, > 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, > 95, 34, 44, 36, 49, 32, 45, 103, 105, 109, 112, 95, 114, 101, 110, 100, > 101, 114, 51, 100, 32, 36, 123, 50, 45, 45, 49, 125, 10, 103, 105, 109, > 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 32, 45, 95, 103, 105, 109, 112, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, 95, 112, 114, 101, > 118, 105, 101, 119, 95, 34, 44, 36, 49, 32, 45, 103, 105, 109, 112, 95, > 114, 101, 110, 100, 101, 114, 51, 100, 32, 36, 119, 44, 36, 104, 44, 36, > 123, 52, 45, 45, 49, 125, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 48, 32, 58, 32, 45, > 105, 109, 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 10, 95, 103, 105, > 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 49, 32, 58, 32, 45, 105, 109, 97, 103, 101, 99, 117, 98, 101, 51, > 100, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, > 101, 99, 116, 51, 100, 95, 50, 32, 58, 32, 45, 105, 109, 97, 103, 101, > 112, 121, 114, 97, 109, 105, 100, 51, 100, 10, 95, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 51, 32, > 58, 32, 45, 105, 109, 97, 103, 101, 115, 112, 104, 101, 114, 101, 51, 100, > 32, 54, 52, 44, 51, 50, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 52, 32, 58, 32, 45, > 116, 111, 114, 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, > 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, > 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, > 111, 98, 106, 101, 99, 116, 51, 100, 95, 53, 32, 58, 32, 45, 103, 121, > 114, 111, 105, 100, 51, 100, 32, 50, 52, 32, 45, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, > 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, > 116, 51, 100, 95, 54, 32, 58, 32, 45, 119, 101, 105, 114, 100, 51, 100, > 32, 51, 50, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, > 93, 32, 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 55, 32, > 58, 32, 45, 99, 117, 112, 51, 100, 32, 49, 50, 56, 32, 45, 116, 51, > 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, > 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, > 106, 101, 99, 116, 51, 100, 95, 56, 32, 58, 32, 45, 105, 109, 97, 103, > 101, 114, 117, 98, 105, 107, 51, 100, 32, 53, 44, 53, 10, 95, 103, 105, > 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 95, 48, 32, 58, 32, 45, 105, 109, > 97, 103, 101, 112, 108, 97, 110, 101, 51, 100, 10, 95, 103, 105, 109, 112, > 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, > 114, 101, 118, 105, 101, 119, 95, 49, 32, 58, 32, 45, 105, 109, 97, 103, > 101, 99, 117, 98, 101, 51, 100, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 50, 32, 58, 32, 45, 105, 109, 97, 103, 101, 112, 121, > 114, 97, 109, 105, 100, 51, 100, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 51, 32, 58, 32, 45, 105, 109, 97, 103, 101, 115, 112, > 104, 101, 114, 101, 51, 100, 32, 49, 54, 44, 56, 10, 95, 103, 105, 109, > 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, > 112, 114, 101, 118, 105, 101, 119, 95, 52, 32, 58, 32, 45, 116, 111, 114, > 117, 115, 51, 100, 32, 49, 48, 48, 44, 51, 48, 32, 45, 116, 51, 100, > 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, > 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, > 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 95, 53, 32, > 58, 32, 45, 103, 121, 114, 111, 105, 100, 51, 100, 32, 56, 32, 45, 99, > 51, 100, 91, 45, 49, 93, 32, 45, 110, 51, 100, 91, 45, 49, 93, 32, > 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, > 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, > 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, > 119, 95, 54, 32, 58, 32, 45, 119, 101, 105, 114, 100, 51, 100, 32, 49, > 50, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 55, 32, 58, 32, 45, 99, 117, 112, 51, 100, 32, 54, > 52, 32, 45, 116, 51, 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 32, > 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, 112, 95, 105, 109, > 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, > 105, 101, 119, 95, 56, 32, 58, 32, 45, 105, 109, 97, 103, 101, 114, 117, > 98, 105, 107, 51, 100, 32, 51, 44, 51, 44, 53, 44, 53, 10, 95, 103, > 105, 109, 112, 95, 108, 97, 116, 104, 105, 110, 103, 51, 100, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 47, 50, 125, 32, 45, > 108, 91, 36, 62, 44, 123, 109, 105, 110, 40, 36, 62, 43, 49, 44, 64, > 35, 45, 49, 41, 125, 93, 10, 45, 108, 97, 116, 104, 101, 51, 100, 91, > 45, 49, 93, 32, 36, 49, 44, 36, 50, 37, 44, 36, 51, 10, 45, 105, > 102, 32, 123, 64, 35, 61, 61, 50, 125, 32, 45, 116, 51, 100, 91, 45, > 49, 93, 32, 91, 45, 50, 93, 32, 45, 114, 109, 91, 45, 50, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, > 110, 101, 10, 45, 100, 98, 51, 100, 32, 48, 10, 103, 105, 109, 112, 95, > 108, 97, 116, 104, 105, 110, 103, 51, 100, 32, 58, 10, 45, 95, 103, 105, > 109, 112, 95, 108, 97, 116, 104, 105, 110, 103, 51, 100, 32, 36, 123, 49, > 45, 51, 125, 32, 45, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, > 51, 100, 32, 36, 123, 52, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, > 108, 97, 116, 104, 105, 110, 103, 51, 100, 95, 112, 114, 101, 118, 105, 101, > 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 108, 97, 116, 104, 105, 110, > 103, 51, 100, 32, 36, 123, 49, 45, 51, 125, 44, 123, 119, 125, 44, 123, > 104, 125, 44, 36, 123, 54, 45, 45, 49, 125, 10, 103, 105, 109, 112, 95, > 114, 97, 110, 100, 111, 109, 51, 100, 32, 58, 10, 45, 114, 101, 112, 101, > 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 102, 51, 100, > 61, 123, 48, 46, 53, 42, 109, 97, 120, 40, 119, 44, 104, 41, 47, 116, > 97, 110, 40, 36, 53, 42, 112, 105, 47, 51, 54, 48, 41, 125, 32, 45, > 102, 51, 100, 32, 36, 102, 51, 100, 32, 45, 108, 51, 100, 32, 123, 36, > 54, 42, 36, 102, 51, 100, 125, 44, 123, 36, 55, 42, 36, 102, 51, 100, > 125, 44, 123, 36, 56, 42, 36, 102, 51, 100, 125, 32, 45, 115, 108, 51, > 100, 32, 36, 57, 32, 45, 115, 115, 51, 100, 32, 36, 49, 48, 10, 45, > 116, 111, 95, 114, 103, 98, 32, 40, 123, 119, 125, 44, 123, 104, 125, 44, > 123, 100, 125, 44, 123, 115, 125, 41, 32, 45, 47, 91, 45, 49, 93, 32, > 50, 32, 45, 114, 101, 112, 101, 97, 116, 32, 36, 50, 10, 40, 64, 123, > 49, 44, 48, 125, 41, 32, 45, 43, 91, 45, 49, 93, 32, 64, 123, 49, > 44, 49, 125, 32, 45, 42, 91, 45, 49, 93, 32, 36, 51, 32, 45, 47, > 91, 45, 49, 93, 32, 49, 48, 48, 32, 45, 95, 103, 105, 109, 112, 95, > 114, 97, 110, 100, 111, 109, 51, 100, 36, 49, 32, 64, 45, 49, 32, 45, > 114, 109, 91, 45, 50, 93, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 49, 44, 49, 44, 48, 44, 123, 63, 40, 48, 44, 51, 54, 48, 41, 125, > 10, 40, 123, 63, 40, 45, 49, 44, 49, 41, 125, 41, 32, 45, 42, 91, > 45, 49, 93, 32, 64, 123, 49, 44, 48, 125, 32, 40, 123, 63, 40, 45, > 49, 44, 49, 41, 125, 41, 32, 45, 42, 91, 45, 49, 93, 32, 64, 123, > 49, 44, 49, 125, 10, 45, 43, 51, 100, 91, 45, 51, 93, 32, 64, 45, > 50, 44, 64, 45, 49, 44, 123, 63, 40, 45, 36, 52, 44, 36, 52, 41, > 125, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 10, 45, 99, 111, > 108, 51, 100, 91, 45, 49, 93, 32, 123, 63, 40, 50, 53, 53, 41, 125, > 44, 123, 63, 40, 50, 53, 53, 41, 125, 44, 123, 63, 40, 50, 53, 53, > 41, 125, 32, 45, 100, 111, 110, 101, 32, 45, 43, 51, 100, 91, 50, 45, > 45, 49, 93, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, 48, 93, > 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, > 36, 49, 50, 44, 36, 49, 49, 44, 48, 44, 49, 10, 45, 107, 91, 48, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 103, > 105, 109, 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 48, 32, 58, 32, > 45, 98, 111, 120, 51, 100, 32, 36, 49, 10, 95, 103, 105, 109, 112, 95, > 114, 97, 110, 100, 111, 109, 51, 100, 49, 32, 58, 32, 40, 36, 49, 41, > 32, 45, 47, 91, 45, 49, 93, 32, 50, 32, 45, 99, 111, 110, 101, 51, > 100, 32, 64, 45, 49, 44, 36, 49, 32, 45, 114, 109, 91, 45, 50, 93, > 10, 95, 103, 105, 109, 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 50, > 32, 58, 32, 40, 36, 49, 41, 32, 45, 47, 91, 45, 49, 93, 32, 50, > 32, 45, 99, 121, 108, 105, 110, 100, 101, 114, 51, 100, 32, 64, 45, 49, > 44, 36, 49, 32, 45, 114, 109, 91, 45, 50, 93, 10, 95, 103, 105, 109, > 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 51, 32, 58, 32, 45, 115, > 112, 104, 101, 114, 101, 51, 100, 32, 36, 49, 44, 50, 10, 95, 103, 105, > 109, 112, 95, 114, 97, 110, 100, 111, 109, 51, 100, 52, 32, 58, 32, 40, > 36, 49, 41, 32, 45, 47, 91, 45, 49, 93, 32, 51, 32, 45, 116, 111, > 114, 117, 115, 51, 100, 32, 36, 49, 44, 64, 45, 49, 32, 45, 114, 109, > 91, 45, 50, 93, 10, 103, 105, 109, 112, 95, 98, 97, 108, 108, 32, 58, > 10, 45, 98, 97, 108, 108, 32, 36, 49, 44, 36, 123, 53, 45, 55, 125, > 44, 36, 123, 50, 45, 52, 125, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 103, 105, 109, 112, 95, 98, 97, 108, 108, 95, 112, 114, 101, 118, > 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 98, 97, 108, 108, > 32, 36, 42, 10, 45, 105, 102, 32, 123, 64, 35, 62, 49, 125, 32, 45, > 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, 108, 112, > 104, 97, 44, 49, 44, 49, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 99, 117, 112, 105, 100, 32, 58, 10, 45, 105, 102, 32, 123, > 64, 35, 62, 48, 125, 32, 115, 105, 122, 61, 123, 109, 105, 110, 40, 64, > 123, 45, 109, 105, 110, 95, 119, 125, 44, 64, 123, 45, 109, 105, 110, 95, > 104, 125, 41, 125, 32, 45, 101, 108, 115, 101, 32, 115, 105, 122, 61, 53, > 49, 50, 32, 45, 101, 110, 100, 105, 102, 10, 45, 99, 117, 112, 105, 100, > 32, 36, 115, 105, 122, 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, > 49, 93, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, > 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, > 50, 53, 53, 44, 36, 50, 44, 36, 51, 44, 36, 52, 44, 48, 10, 45, > 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 49, > 93, 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, 50, 53, 53, 44, > 36, 50, 44, 36, 51, 44, 36, 52, 44, 36, 53, 10, 45, 102, 114, 97, > 109, 101, 91, 45, 49, 93, 32, 123, 50, 46, 53, 42, 36, 49, 125, 37, > 44, 123, 50, 46, 53, 42, 36, 49, 125, 37, 44, 36, 50, 44, 36, 51, > 44, 36, 52, 44, 48, 32, 45, 98, 91, 45, 49, 93, 32, 36, 49, 37, > 10, 45, 98, 108, 101, 110, 100, 91, 45, 50, 44, 45, 49, 93, 32, 97, > 108, 112, 104, 97, 10, 103, 105, 109, 112, 95, 101, 113, 117, 97, 116, 105, > 111, 110, 95, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 58, 10, > 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, > 93, 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, > 109, 10, 36, 53, 44, 49, 44, 49, 44, 50, 44, 39, 34, 116, 61, 36, > 51, 43, 120, 42, 40, 36, 52, 45, 36, 51, 41, 47, 40, 36, 53, 45, > 49, 41, 59, 105, 102, 40, 99, 61, 61, 48, 44, 36, 49, 44, 36, 50, > 41, 34, 39, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, > 93, 32, 48, 44, 50, 10, 40, 36, 56, 44, 36, 49, 49, 94, 36, 57, > 44, 36, 49, 50, 94, 36, 49, 48, 44, 36, 49, 51, 41, 32, 45, 114, > 91, 45, 49, 93, 32, 64, 123, 45, 50, 44, 119, 125, 44, 49, 44, 49, > 44, 51, 44, 51, 32, 45, 97, 32, 99, 10, 45, 100, 105, 115, 112, 108, > 97, 121, 95, 112, 97, 114, 97, 109, 101, 116, 114, 105, 99, 32, 36, 119, > 44, 36, 104, 44, 123, 36, 54, 43, 36, 49, 52, 42, 49, 46, 48, 48, > 49, 125, 44, 36, 55, 44, 36, 49, 53, 44, 36, 49, 54, 10, 45, 101, > 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 101, > 113, 117, 97, 116, 105, 111, 110, 95, 112, 108, 111, 116, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 32, 45, 114, 109, > 10, 36, 52, 44, 49, 44, 49, 44, 36, 53, 44, 34, 88, 61, 36, 50, > 43, 40, 36, 51, 45, 36, 50, 41, 42, 120, 47, 40, 36, 52, 45, 49, > 41, 59, 36, 49, 34, 10, 45, 100, 103, 32, 36, 119, 44, 36, 104, 44, > 36, 54, 44, 36, 55, 44, 36, 50, 44, 36, 51, 10, 45, 101, 110, 100, > 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 111, 114, > 110, 101, 114, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 40, 123, 119, 125, 44, 123, > 104, 125, 41, 32, 45, 114, 109, 91, 45, 50, 93, 10, 40, 36, 49, 44, > 36, 53, 59, 36, 57, 44, 36, 49, 51, 94, 36, 50, 44, 36, 54, 59, > 36, 49, 48, 44, 36, 49, 52, 94, 36, 51, 44, 36, 55, 59, 36, 49, > 49, 44, 36, 49, 53, 94, 36, 52, 44, 36, 56, 59, 36, 49, 50, 44, > 36, 49, 54, 41, 32, 45, 114, 91, 45, 49, 93, 32, 64, 45, 50, 44, > 49, 44, 52, 44, 51, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, > 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, > 110, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, > 105, 112, 32, 34, 36, 123, 49, 53, 61, 125, 34, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 105, > 102, 32, 36, 52, 10, 45, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, > 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 49, 32, 36, 123, > 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, 123, 49, 54, > 45, 45, 49, 125, 32, 45, 45, 101, 114, 111, 100, 101, 91, 45, 49, 93, > 32, 51, 32, 45, 45, 91, 45, 50, 44, 45, 49, 93, 32, 45, 45, 100, > 105, 108, 97, 116, 101, 91, 45, 49, 93, 32, 53, 32, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 99, 32, 45, 110, 91, 45, 49, 93, 32, 48, > 44, 50, 53, 53, 10, 45, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, > 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 91, 48, 93, 32, 36, 123, > 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, 123, 49, 54, > 45, 45, 49, 125, 44, 45, 49, 32, 45, 98, 108, 101, 110, 100, 32, 97, > 108, 112, 104, 97, 10, 45, 101, 108, 115, 101, 32, 45, 103, 105, 109, 112, > 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, > 123, 49, 54, 45, 45, 49, 125, 44, 45, 49, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 105, 102, 32, 36, 49, 52, 10, 45, 45, 95, 103, 105, 109, > 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, > 116, 48, 91, 93, 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, 36, 49, > 53, 34, 44, 36, 123, 49, 54, 45, 45, 49, 125, 32, 45, 114, 91, 45, > 49, 93, 32, 123, 64, 123, 48, 44, 119, 125, 45, 49, 54, 125, 44, 49, > 54, 44, 49, 44, 52, 32, 45, 102, 114, 97, 109, 101, 91, 45, 49, 93, > 32, 49, 44, 49, 44, 48, 32, 45, 106, 91, 48, 93, 32, 91, 45, 49, > 93, 44, 56, 44, 64, 123, 48, 44, 104, 45, 50, 53, 125, 32, 45, 114, > 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 99, 117, > 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, 58, 32, > 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 53, 61, 125, 34, 10, 45, > 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, > 100, 105, 101, 110, 116, 48, 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, > 36, 49, 53, 34, 44, 36, 123, 49, 54, 45, 45, 49, 125, 10, 45, 105, > 102, 32, 123, 36, 45, 49, 62, 61, 48, 38, 38, 110, 97, 114, 103, 40, > 34, 36, 49, 53, 34, 41, 125, 10, 100, 105, 114, 95, 103, 103, 114, 61, > 64, 123, 45, 112, 97, 116, 104, 95, 103, 105, 109, 112, 125, 47, 103, 114, > 97, 100, 105, 101, 110, 116, 115, 10, 48, 32, 45, 110, 109, 91, 45, 49, > 93, 32, 64, 123, 34, 45, 110, 111, 114, 109, 97, 108, 105, 122, 101, 95, > 102, 105, 108, 101, 110, 97, 109, 101, 32, 92, 34, 36, 49, 53, 92, 34, > 34, 125, 32, 110, 97, 109, 101, 95, 103, 103, 114, 61, 64, 123, 45, 49, > 44, 98, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 111, 117, 116, > 112, 117, 116, 95, 103, 103, 114, 91, 45, 49, 93, 32, 36, 100, 105, 114, > 95, 103, 103, 114, 47, 36, 110, 97, 109, 101, 95, 103, 103, 114, 46, 103, > 103, 114, 44, 34, 36, 49, 53, 34, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 105, 91, 45, 50, 93, 32, 40, 48, 94, 48, 94, 48, 94, 48, 41, > 32, 45, 97, 91, 45, 50, 44, 45, 49, 93, 32, 120, 10, 45, 114, 101, > 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 32, 45, 108, 91, 36, > 62, 44, 45, 49, 93, 10, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, > 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 49, 91, 48, 93, > 32, 36, 123, 49, 45, 49, 52, 125, 44, 34, 36, 49, 53, 34, 44, 36, > 123, 49, 54, 45, 45, 49, 125, 10, 45, 45, 100, 105, 115, 116, 97, 110, > 99, 101, 91, 48, 93, 32, 49, 44, 36, 49, 49, 32, 45, 45, 100, 105, > 115, 116, 97, 110, 99, 101, 91, 48, 93, 32, 48, 44, 36, 49, 49, 32, > 45, 42, 91, 45, 49, 93, 32, 45, 49, 32, 45, 43, 91, 48, 93, 32, > 49, 32, 45, 43, 91, 48, 44, 45, 50, 44, 45, 49, 93, 10, 109, 61, > 123, 36, 57, 37, 42, 64, 123, 48, 44, 105, 109, 125, 125, 32, 77, 61, > 123, 36, 49, 48, 37, 42, 64, 123, 48, 44, 105, 77, 125, 125, 10, 45, > 45, 91, 48, 93, 32, 36, 109, 32, 45, 42, 91, 48, 93, 32, 123, 64, > 123, 49, 44, 119, 45, 50, 125, 47, 40, 36, 77, 45, 36, 109, 41, 125, > 32, 45, 43, 91, 48, 93, 32, 49, 10, 45, 114, 111, 117, 110, 100, 91, > 48, 93, 32, 45, 109, 97, 112, 91, 48, 93, 32, 91, 45, 49, 93, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 45, 49, 93, 10, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, > 95, 103, 114, 97, 100, 105, 101, 110, 116, 48, 32, 58, 10, 45, 105, 102, > 32, 36, 49, 54, 32, 52, 44, 56, 44, 49, 44, 49, 44, 36, 123, 49, > 56, 45, 53, 54, 125, 32, 45, 112, 101, 114, 109, 117, 116, 101, 91, 45, > 49, 93, 32, 121, 122, 99, 120, 10, 45, 101, 108, 115, 101, 32, 56, 44, > 49, 44, 49, 44, 51, 32, 45, 115, 114, 97, 110, 100, 32, 36, 49, 55, > 32, 45, 114, 97, 110, 100, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 10, 45, 101, > 110, 100, 105, 102, 10, 45, 122, 91, 45, 49, 93, 32, 48, 44, 123, 36, > 53, 45, 49, 125, 10, 45, 105, 102, 32, 36, 49, 51, 10, 45, 114, 91, > 45, 49, 93, 32, 123, 50, 48, 48, 42, 36, 54, 125, 37, 44, 49, 44, > 49, 44, 52, 44, 48, 44, 50, 10, 45, 95, 95, 103, 105, 109, 112, 95, > 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, 101, 110, 116, 48, > 91, 45, 49, 93, 32, 36, 49, 50, 44, 36, 56, 10, 45, 115, 104, 105, > 102, 116, 91, 45, 49, 93, 32, 123, 45, 36, 55, 47, 50, 125, 37, 44, > 48, 44, 48, 44, 48, 44, 50, 32, 45, 122, 91, 45, 49, 93, 32, 48, > 44, 123, 119, 47, 50, 45, 49, 125, 10, 45, 101, 108, 115, 101, 10, 45, > 95, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, > 97, 100, 105, 101, 110, 116, 48, 91, 45, 49, 93, 32, 36, 49, 50, 44, > 36, 56, 10, 45, 114, 91, 45, 49, 93, 32, 123, 49, 48, 48, 42, 36, > 54, 125, 37, 44, 49, 44, 49, 44, 52, 44, 48, 44, 50, 32, 45, 115, > 104, 105, 102, 116, 91, 45, 49, 93, 32, 45, 36, 55, 37, 44, 48, 44, > 48, 44, 48, 44, 50, 10, 45, 101, 110, 100, 105, 102, 10, 95, 95, 103, > 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, 105, > 101, 110, 116, 48, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 49, 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, > 114, 103, 98, 50, 104, 115, 118, 91, 45, 49, 93, 32, 45, 114, 109, 91, > 45, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 50, > 125, 32, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 50, 32, 45, 115, > 114, 103, 98, 50, 114, 103, 98, 91, 45, 49, 93, 32, 45, 114, 103, 98, > 50, 108, 97, 98, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 49, 93, 32, 123, > 36, 50, 42, 119, 125, 44, 49, 44, 49, 44, 52, 44, 51, 10, 45, 105, > 102, 32, 123, 36, 49, 61, 61, 49, 125, 32, 45, 115, 104, 91, 45, 49, > 93, 32, 48, 44, 50, 32, 45, 104, 115, 118, 50, 114, 103, 98, 91, 45, > 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 108, 105, 102, > 32, 123, 36, 49, 61, 61, 50, 125, 32, 45, 115, 104, 91, 45, 49, 93, > 32, 48, 44, 50, 32, 45, 108, 97, 98, 50, 114, 103, 98, 91, 45, 49, > 93, 32, 45, 114, 103, 98, 50, 115, 114, 103, 98, 91, 45, 49, 93, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 95, > 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 103, 114, 97, 100, > 105, 101, 110, 116, 49, 32, 58, 10, 45, 98, 32, 36, 50, 37, 10, 45, > 105, 102, 32, 123, 36, 49, 61, 61, 48, 125, 10, 45, 116, 111, 95, 97, > 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 10, > 45, 105, 102, 32, 123, 105, 77, 62, 105, 109, 43, 51, 50, 125, 10, 45, > 114, 109, 91, 45, 50, 93, 32, 45, 103, 101, 91, 48, 93, 32, 123, 49, > 48, 48, 45, 36, 51, 125, 37, 10, 45, 101, 108, 115, 101, 10, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 110, 111, 114, 109, 32, 45, 110, 32, 48, > 44, 49, 10, 45, 105, 102, 32, 123, 105, 97, 62, 48, 46, 53, 125, 32, > 45, 108, 101, 91, 48, 93, 32, 36, 51, 37, 32, 45, 101, 108, 115, 101, > 32, 45, 103, 101, 91, 48, 93, 32, 123, 49, 48, 48, 45, 36, 51, 125, > 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 108, 105, 102, 32, 123, 36, 49, 61, 61, 49, 125, 10, 45, 114, > 101, 109, 111, 118, 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, > 111, 114, 109, 32, 45, 108, 101, 32, 36, 51, 37, 10, 45, 101, 108, 105, > 102, 32, 123, 36, 49, 61, 61, 50, 125, 10, 45, 114, 101, 109, 111, 118, > 101, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, 111, 114, 109, 32, > 45, 103, 101, 32, 123, 49, 48, 48, 45, 36, 51, 125, 37, 10, 45, 101, > 108, 115, 101, 10, 45, 116, 111, 95, 97, 32, 45, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 49, 48, 48, 37, 32, 45, 103, 101, 32, 123, 49, 48, > 48, 45, 36, 51, 125, 37, 10, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, > 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 48, 61, 125, > 34, 10, 45, 95, 103, 105, 109, 112, 95, 108, 105, 110, 101, 95, 103, 114, > 97, 100, 105, 101, 110, 116, 32, 36, 42, 10, 45, 105, 102, 32, 123, 110, > 97, 114, 103, 40, 34, 36, 49, 48, 34, 41, 125, 10, 100, 105, 114, 95, > 103, 103, 114, 61, 64, 123, 45, 112, 97, 116, 104, 95, 103, 105, 109, 112, > 125, 47, 103, 114, 97, 100, 105, 101, 110, 116, 115, 10, 48, 32, 45, 110, > 109, 91, 45, 49, 93, 32, 64, 123, 34, 45, 110, 111, 114, 109, 97, 108, > 105, 122, 101, 95, 102, 105, 108, 101, 110, 97, 109, 101, 32, 92, 34, 36, > 49, 48, 92, 34, 34, 125, 32, 110, 97, 109, 101, 95, 103, 103, 114, 61, > 64, 123, 45, 49, 44, 98, 125, 32, 45, 114, 109, 91, 45, 49, 93, 32, > 45, 111, 117, 116, 112, 117, 116, 95, 103, 103, 114, 91, 45, 49, 93, 32, > 36, 100, 105, 114, 95, 103, 103, 114, 47, 36, 110, 97, 109, 101, 95, 103, > 103, 114, 46, 103, 103, 114, 44, 34, 36, 49, 48, 34, 10, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 114, 91, 36, 62, 93, 32, 49, 48, 48, 37, 44, 54, 52, 44, 49, 44, > 49, 48, 48, 37, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 32, 45, 108, 91, 36, 62, 93, 10, 45, 116, 111, 95, 114, 103, > 98, 97, 10, 45, 105, 102, 32, 36, 57, 32, 45, 45, 95, 103, 105, 109, > 112, 95, 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 36, 42, 32, 45, 101, 110, 100, 105, 102, 10, 45, 108, 91, 48, 93, 10, > 45, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 36, 51, > 37, 44, 36, 52, 37, 44, 49, 44, 48, 120, 70, 48, 70, 48, 70, 48, > 70, 48, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, 53, 53, 44, 50, > 53, 53, 10, 45, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, 50, 37, > 44, 36, 51, 37, 44, 36, 52, 37, 44, 49, 44, 48, 120, 48, 70, 48, > 70, 48, 70, 48, 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 52, 44, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, > 52, 44, 49, 44, 48, 44, 48, 44, 50, 53, 53, 44, 50, 53, 53, 10, > 45, 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 52, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, > 44, 48, 44, 48, 44, 50, 53, 53, 10, 45, 99, 105, 114, 99, 108, 101, > 32, 36, 51, 37, 44, 36, 52, 37, 44, 52, 44, 49, 44, 48, 120, 70, > 70, 70, 70, 70, 70, 70, 70, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 10, 45, 101, 110, 100, 108, 10, 45, 105, 102, 32, 123, 64, 35, 62, > 49, 125, 32, 45, 114, 91, 45, 49, 93, 32, 123, 64, 123, 48, 44, 119, > 125, 45, 51, 50, 125, 44, 51, 50, 44, 49, 44, 52, 44, 49, 32, 45, > 102, 114, 97, 109, 101, 91, 45, 49, 93, 32, 49, 44, 49, 44, 48, 44, > 48, 44, 48, 44, 50, 53, 53, 32, 45, 106, 91, 48, 93, 32, 91, 49, > 93, 44, 49, 54, 44, 123, 64, 123, 48, 44, 104, 125, 45, 52, 56, 125, > 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, > 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 95, 103, 105, 109, > 112, 95, 108, 105, 110, 101, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, > 58, 10, 45, 97, 116, 95, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, > 50, 37, 44, 48, 44, 36, 51, 37, 44, 36, 52, 37, 44, 48, 32, 45, > 114, 32, 123, 109, 97, 120, 40, 48, 46, 49, 44, 36, 53, 41, 125, 37, > 44, 49, 44, 49, 44, 49, 48, 48, 37, 44, 49, 10, 45, 109, 32, 34, > 102, 101, 97, 116, 117, 114, 101, 49, 32, 58, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 48, 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, > 117, 114, 101, 50, 32, 58, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, > 32, 49, 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 51, > 32, 58, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 50, 34, 10, > 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 52, 32, 58, 32, 45, > 116, 111, 95, 114, 103, 98, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 53, 32, > 58, 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, 50, 121, > 99, 98, 99, 114, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 49, > 34, 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 54, 32, 58, > 32, 45, 116, 111, 95, 114, 103, 98, 32, 45, 114, 103, 98, 50, 121, 99, > 98, 99, 114, 32, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 50, 34, > 10, 45, 109, 32, 34, 102, 101, 97, 116, 117, 114, 101, 55, 32, 58, 32, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 115, 114, 103, 98, 50, 114, 103, > 98, 32, 45, 114, 103, 98, 50, 108, 97, 98, 32, 45, 99, 104, 97, 110, > 110, 101, 108, 115, 32, 48, 34, 10, 45, 105, 102, 32, 36, 55, 32, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 45, 102, 101, 97, 116, 117, 114, 101, 36, 55, 32, 45, 114, 118, > 32, 45, 97, 32, 121, 32, 45, 115, 111, 114, 116, 32, 43, 44, 120, 32, > 45, 114, 111, 119, 115, 32, 49, 32, 45, 101, 110, 100, 108, 32, 45, 100, > 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, > 54, 32, 45, 114, 32, 36, 54, 44, 49, 44, 49, 44, 49, 48, 48, 37, > 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 56, > 32, 45, 109, 105, 114, 114, 111, 114, 32, 120, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 108, 105, 110, 101, 97, 114, 95, 103, 114, > 97, 100, 105, 101, 110, 116, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 10, 40, 123, 119, 125, 44, 123, 104, 125, 41, 32, 45, 114, > 109, 91, 45, 50, 93, 10, 40, 36, 49, 94, 36, 50, 94, 36, 51, 94, > 36, 52, 41, 32, 40, 36, 53, 94, 36, 54, 94, 36, 55, 94, 36, 56, > 41, 10, 45, 105, 102, 32, 36, 57, 32, 45, 114, 118, 91, 45, 50, 44, > 45, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 114, 91, 45, 50, > 44, 45, 49, 93, 32, 64, 45, 51, 32, 45, 114, 109, 91, 45, 51, 93, > 10, 45, 102, 97, 100, 101, 95, 108, 105, 110, 101, 97, 114, 32, 36, 49, > 48, 44, 36, 49, 49, 44, 36, 49, 50, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 48, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 114, > 97, 100, 105, 97, 108, 95, 103, 114, 97, 100, 105, 101, 110, 116, 32, 58, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 40, 123, 119, 125, > 44, 123, 104, 125, 41, 32, 45, 114, 109, 91, 45, 50, 93, 10, 40, 36, > 49, 94, 36, 50, 94, 36, 51, 94, 36, 52, 41, 32, 40, 36, 53, 94, > 36, 54, 94, 36, 55, 94, 36, 56, 41, 10, 45, 105, 102, 32, 36, 57, > 32, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 114, 91, 45, 50, 44, 45, 49, 93, 32, 64, 45, 51, > 32, 45, 114, 109, 91, 45, 51, 93, 10, 49, 48, 48, 37, 44, 49, 48, > 48, 37, 32, 45, 61, 91, 45, 49, 93, 32, 49, 44, 36, 49, 50, 37, > 44, 36, 49, 51, 37, 32, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, > 45, 49, 93, 32, 49, 32, 45, 95, 102, 97, 100, 101, 32, 36, 49, 48, > 44, 36, 49, 49, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, > 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 32, > 58, 10, 45, 105, 102, 32, 123, 64, 35, 62, 48, 125, 32, 119, 104, 61, > 64, 123, 45, 109, 97, 120, 95, 119, 104, 125, 32, 119, 61, 123, 36, 49, > 37, 42, 109, 105, 110, 40, 53, 49, 50, 44, 97, 114, 103, 40, 49, 44, > 36, 119, 104, 41, 41, 125, 32, 104, 61, 123, 36, 49, 37, 42, 109, 105, > 110, 40, 53, 49, 50, 44, 97, 114, 103, 40, 50, 44, 36, 119, 104, 41, > 41, 125, 32, 45, 101, 108, 115, 101, 32, 119, 61, 123, 36, 49, 37, 42, > 53, 49, 50, 125, 32, 104, 61, 123, 36, 49, 37, 42, 53, 49, 50, 125, > 32, 45, 101, 110, 100, 105, 102, 10, 45, 104, 101, 97, 114, 116, 32, 123, > 109, 97, 120, 40, 49, 44, 36, 119, 41, 125, 44, 123, 109, 97, 120, 40, > 49, 44, 36, 104, 41, 125, 32, 45, 116, 111, 95, 114, 103, 98, 97, 91, > 45, 49, 93, 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, > 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, > 44, 50, 53, 53, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 36, 54, > 10, 45, 114, 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, > 45, 49, 93, 32, 48, 44, 48, 44, 48, 44, 48, 44, 48, 44, 50, 53, > 53, 44, 36, 51, 44, 36, 52, 44, 36, 53, 44, 48, 10, 45, 98, 91, > 45, 49, 93, 32, 36, 50, 37, 32, 45, 109, 118, 91, 45, 49, 93, 32, > 48, 10, 103, 105, 109, 112, 95, 104, 101, 97, 114, 116, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 104, 101, 97, > 114, 116, 32, 36, 42, 32, 45, 98, 108, 101, 110, 100, 91, 48, 44, 45, > 49, 93, 32, 97, 108, 112, 104, 97, 44, 49, 44, 49, 10, 103, 105, 109, > 112, 95, 108, 105, 115, 115, 97, 106, 111, 117, 115, 32, 58, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, > 45, 116, 111, 95, 114, 103, 98, 97, 10, 123, 119, 125, 44, 123, 104, 125, > 10, 45, 102, 51, 100, 32, 123, 48, 46, 53, 42, 109, 97, 120, 40, 119, > 44, 104, 41, 47, 116, 97, 110, 40, 36, 52, 42, 112, 105, 47, 51, 54, > 48, 41, 125, 10, 45, 108, 105, 115, 115, 97, 106, 111, 117, 115, 51, 100, > 32, 36, 49, 44, 36, 53, 44, 36, 56, 44, 36, 54, 44, 36, 57, 44, > 36, 55, 44, 36, 49, 48, 10, 45, 114, 51, 100, 91, 45, 49, 93, 32, > 48, 44, 48, 44, 49, 44, 36, 49, 51, 32, 45, 114, 51, 100, 91, 45, > 49, 93, 32, 48, 44, 49, 44, 48, 44, 36, 49, 50, 32, 45, 114, 51, > 100, 91, 45, 49, 93, 32, 49, 44, 48, 44, 48, 44, 36, 49, 49, 10, > 45, 42, 51, 100, 91, 45, 49, 93, 32, 123, 48, 46, 53, 42, 36, 50, > 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, 123, 48, 46, 53, 42, 36, > 51, 42, 64, 123, 45, 50, 44, 104, 125, 125, 44, 123, 48, 46, 53, 42, > 36, 52, 42, 109, 97, 120, 40, 64, 123, 45, 50, 44, 119, 125, 44, 64, > 123, 45, 50, 44, 104, 125, 41, 125, 10, 45, 99, 111, 108, 51, 100, 91, > 45, 49, 93, 32, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, 100, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 44, 53, 48, 37, 44, 53, 48, 37, > 44, 48, 44, 49, 44, 49, 44, 48, 44, 48, 32, 45, 114, 109, 91, 45, > 49, 93, 10, 45, 100, 105, 115, 116, 97, 110, 99, 101, 91, 45, 49, 93, > 32, 49, 32, 45, 103, 116, 91, 45, 49, 93, 32, 36, 49, 52, 37, 32, > 45, 42, 91, 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 101, 113, 91, > 45, 49, 93, 32, 48, 10, 45, 114, 91, 45, 49, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 10, 45, 115, 104, 91, 45, > 49, 93, 32, 48, 44, 48, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, > 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, > 93, 32, 49, 44, 49, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 54, > 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, > 32, 50, 44, 50, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 55, 32, > 45, 114, 109, 91, 45, 49, 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, > 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, 32, 36, 49, 56, 32, 45, > 114, 109, 91, 45, 49, 93, 10, 45, 43, 91, 45, 50, 44, 45, 49, 93, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, > 112, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, 58, 10, 40, > 48, 94, 48, 94, 48, 41, 32, 40, 36, 56, 94, 36, 57, 94, 36, 49, > 48, 41, 32, 40, 36, 49, 49, 94, 36, 49, 50, 94, 36, 49, 51, 41, > 32, 40, 36, 49, 52, 94, 36, 49, 53, 94, 36, 49, 54, 41, 32, 40, > 36, 49, 55, 94, 36, 49, 56, 94, 36, 49, 57, 41, 10, 45, 97, 91, > 45, 52, 45, 45, 49, 93, 32, 120, 32, 45, 114, 91, 45, 49, 93, 32, > 36, 52, 44, 49, 44, 49, 44, 51, 44, 51, 32, 45, 97, 91, 45, 50, > 44, 45, 49, 93, 32, 120, 32, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 10, 45, 114, 101, 112, 101, 97, 116, 32, 123, 64, 35, 45, 49, 125, 10, > 119, 104, 61, 123, 119, 125, 44, 123, 104, 125, 32, 45, 114, 109, 91, 45, > 49, 93, 32, 36, 119, 104, 10, 45, 109, 97, 110, 100, 101, 108, 98, 114, > 111, 116, 91, 45, 49, 93, 32, 123, 36, 49, 45, 50, 47, 40, 49, 43, > 36, 51, 41, 125, 44, 123, 36, 50, 45, 50, 47, 40, 49, 43, 36, 51, > 41, 125, 44, 123, 36, 49, 43, 50, 47, 40, 49, 43, 36, 51, 41, 125, > 44, 123, 36, 50, 43, 50, 47, 40, 49, 43, 36, 51, 41, 125, 44, 36, > 52, 44, 36, 53, 44, 123, 105, 102, 40, 36, 53, 44, 36, 54, 44, 48, > 41, 125, 44, 123, 105, 102, 40, 36, 53, 44, 36, 55, 44, 48, 41, 125, > 10, 45, 109, 97, 112, 91, 45, 49, 93, 32, 91, 48, 93, 10, 45, 109, > 118, 91, 45, 49, 93, 32, 49, 32, 45, 100, 111, 110, 101, 32, 45, 114, > 109, 91, 48, 93, 10, 103, 105, 109, 112, 95, 109, 97, 110, 100, 101, 108, > 98, 114, 111, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 109, 97, 110, 100, 101, 108, 98, 114, 111, 116, 32, > 36, 123, 94, 48, 125, 10, 45, 108, 105, 110, 101, 32, 48, 44, 53, 48, > 37, 44, 49, 48, 48, 37, 44, 53, 48, 37, 44, 48, 46, 53, 44, 50, > 53, 53, 10, 45, 108, 105, 110, 101, 32, 53, 48, 37, 44, 48, 44, 53, > 48, 37, 44, 49, 48, 48, 37, 44, 48, 46, 53, 44, 50, 53, 53, 10, > 103, 105, 109, 112, 95, 113, 117, 105, 99, 107, 95, 99, 111, 112, 121, 114, > 105, 103, 104, 116, 32, 58, 10, 45, 105, 91, 48, 93, 32, 48, 32, 45, > 116, 91, 48, 93, 32, 34, 36, 49, 34, 44, 48, 44, 48, 44, 36, 50, > 44, 49, 44, 36, 51, 44, 36, 52, 44, 36, 53, 32, 45, 97, 117, 116, > 111, 99, 114, 111, 112, 91, 48, 93, 32, 48, 32, 45, 114, 91, 48, 93, > 32, 123, 64, 123, 48, 44, 119, 125, 43, 50, 42, 36, 55, 125, 44, 123, > 64, 123, 48, 44, 104, 125, 43, 50, 42, 36, 55, 125, 44, 49, 44, 51, > 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 10, 45, 105, 91, > 49, 93, 32, 48, 32, 45, 116, 91, 49, 93, 32, 34, 36, 49, 34, 44, > 48, 44, 48, 44, 36, 50, 44, 49, 44, 49, 32, 45, 97, 117, 116, 111, > 99, 114, 111, 112, 91, 49, 93, 32, 48, 32, 45, 114, 91, 49, 93, 32, > 123, 64, 123, 49, 44, 119, 125, 43, 50, 42, 36, 55, 125, 44, 123, 64, > 123, 49, 44, 104, 125, 43, 50, 42, 36, 55, 125, 44, 49, 44, 49, 44, > 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, 53, 32, 45, 100, 105, 108, > 97, 116, 101, 91, 49, 93, 32, 123, 49, 43, 50, 42, 36, 55, 125, 10, > 45, 114, 111, 116, 97, 116, 101, 91, 48, 44, 49, 93, 32, 123, 57, 48, > 42, 40, 36, 49, 48, 45, 49, 41, 125, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 123, 64, 35, 45, 50, 125, 10, 45, 105, 102, 32, 123, 36, 56, > 61, 61, 48, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, > 36, 57, 44, 36, 57, 44, 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, > 53, 125, 44, 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 56, > 61, 61, 49, 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, > 123, 119, 45, 49, 45, 64, 123, 48, 44, 119, 125, 45, 36, 57, 125, 44, > 36, 57, 44, 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, 53, 125, 44, > 91, 49, 93, 10, 45, 101, 108, 105, 102, 32, 123, 36, 56, 61, 61, 50, > 125, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, 93, 44, 36, 57, 44, > 123, 104, 45, 49, 45, 64, 123, 48, 44, 104, 125, 45, 36, 57, 125, 44, > 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, 53, 125, 44, 91, 49, 93, > 10, 45, 101, 108, 115, 101, 32, 45, 106, 91, 45, 49, 93, 32, 91, 48, > 93, 44, 123, 119, 45, 49, 45, 64, 123, 48, 44, 119, 125, 45, 36, 57, > 125, 44, 123, 104, 45, 49, 45, 64, 123, 48, 44, 104, 125, 45, 36, 57, > 125, 44, 48, 44, 48, 44, 123, 36, 54, 47, 50, 53, 53, 125, 44, 91, > 49, 93, 10, 45, 101, 110, 100, 105, 102, 10, 45, 109, 118, 91, 45, 49, > 93, 32, 50, 32, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 44, > 49, 93, 10, 103, 105, 109, 112, 95, 114, 97, 105, 110, 98, 111, 119, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 115, > 112, 108, 105, 110, 101, 91, 45, 49, 93, 32, 48, 44, 36, 49, 37, 44, > 49, 48, 48, 44, 123, 45, 36, 51, 125, 37, 44, 49, 48, 48, 37, 44, > 36, 50, 37, 44, 49, 48, 48, 44, 36, 52, 37, 44, 50, 53, 54, 44, > 49, 44, 49, 10, 45, 102, 108, 111, 111, 100, 91, 45, 49, 93, 32, 48, > 44, 48, 44, 48, 44, 48, 44, 48, 44, 49, 44, 49, 32, 45, 102, 108, > 111, 111, 100, 91, 45, 49, 93, 32, 123, 119, 45, 49, 125, 44, 48, 44, > 48, 44, 48, 44, 48, 44, 49, 44, 49, 10, 45, 100, 105, 115, 116, 97, > 110, 99, 101, 91, 45, 49, 93, 32, 48, 32, 45, 99, 91, 45, 49, 93, > 32, 48, 44, 50, 53, 53, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, > 123, 36, 53, 42, 50, 53, 53, 125, 10, 45, 114, 97, 105, 110, 98, 111, > 119, 95, 108, 117, 116, 32, 45, 45, 108, 117, 109, 105, 110, 97, 110, 99, > 101, 91, 45, 49, 93, 32, 45, 99, 91, 45, 49, 93, 32, 48, 44, 123, > 109, 105, 110, 40, 49, 48, 48, 44, 50, 48, 48, 45, 36, 54, 41, 125, > 37, 32, 45, 110, 91, 45, 49, 93, 32, 48, 44, 50, 53, 53, 32, 45, > 97, 91, 45, 50, 44, 45, 49, 93, 32, 99, 10, 45, 109, 97, 112, 91, > 45, 50, 93, 32, 91, 45, 49, 93, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 105, 102, 32, 123, 36, 54, 60, 49, 48, 48, 125, 32, 45, 115, > 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, 49, 93, > 32, 123, 36, 54, 47, 49, 48, 48, 125, 32, 45, 114, 109, 91, 45, 49, > 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 98, 108, 101, 110, 100, 32, > 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, > 101, 10, 103, 105, 109, 112, 95, 115, 104, 97, 100, 101, 98, 111, 98, 115, > 32, 58, 10, 45, 99, 104, 97, 110, 110, 101, 108, 115, 32, 48, 32, 45, > 102, 32, 48, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, > 108, 91, 36, 62, 93, 10, 116, 61, 48, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 36, 51, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, > 114, 61, 123, 36, 54, 43, 36, 53, 42, 99, 111, 115, 40, 54, 42, 36, > 55, 42, 36, 116, 41, 43, 40, 49, 45, 36, 53, 41, 42, 115, 105, 110, > 40, 54, 42, 36, 56, 42, 36, 116, 41, 125, 10, 97, 61, 123, 40, 51, > 54, 48, 42, 115, 105, 110, 40, 36, 55, 42, 36, 116, 41, 43, 51, 48, > 42, 36, 54, 42, 36, 62, 41, 42, 112, 105, 47, 49, 56, 48, 125, 10, > 97, 120, 61, 123, 50, 42, 36, 62, 42, 112, 105, 47, 36, 49, 43, 36, > 116, 125, 10, 99, 120, 61, 123, 40, 49, 43, 36, 57, 42, 99, 111, 115, > 40, 36, 97, 120, 41, 43, 36, 114, 42, 99, 111, 115, 40, 36, 97, 41, > 41, 42, 119, 47, 50, 125, 10, 99, 121, 61, 123, 40, 49, 43, 36, 57, > 42, 115, 105, 110, 40, 36, 97, 120, 41, 43, 36, 114, 42, 115, 105, 110, > 40, 36, 97, 41, 41, 42, 104, 47, 50, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 36, 99, 120, 44, 36, 99, 121, 44, > 36, 50, 37, 44, 36, 50, 37, 44, 48, 44, 45, 49, 44, 49, 10, 45, > 100, 111, 110, 101, 10, 116, 61, 123, 36, 116, 43, 36, 52, 47, 49, 48, > 48, 125, 10, 45, 100, 111, 110, 101, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 97, 110, 100, 32, 50, 53, 53, 32, 45, 105, > 102, 32, 36, 49, 48, 32, 45, 109, 97, 112, 32, 123, 36, 49, 48, 45, > 49, 125, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, 112, 95, 115, > 105, 101, 114, 112, 105, 110, 115, 107, 105, 32, 58, 10, 45, 114, 101, 112, > 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, > 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, > 48, 93, 10, 49, 48, 48, 37, 44, 49, 48, 48, 37, 32, 45, 115, 105, > 101, 114, 112, 105, 110, 115, 107, 105, 91, 45, 49, 93, 32, 36, 123, 49, > 45, 55, 125, 10, 45, 45, 102, 99, 91, 45, 50, 93, 32, 36, 56, 44, > 36, 57, 44, 36, 49, 48, 32, 45, 106, 91, 48, 93, 32, 91, 45, 49, > 93, 44, 48, 44, 48, 44, 48, 44, 48, 44, 36, 49, 49, 44, 91, 45, > 50, 93, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, > 93, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, 101, 110, > 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 115, 110, > 111, 119, 102, 108, 97, 107, 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, > 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, > 105, 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, > 10, 45, 115, 110, 111, 119, 102, 108, 97, 107, 101, 32, 36, 123, 49, 45, > 49, 49, 125, 10, 45, 101, 110, 100, 108, 32, 45, 97, 32, 99, 32, 45, > 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, > 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, 108, 97, 32, 58, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, > 32, 45, 116, 111, 95, 114, 103, 98, 97, 10, 123, 119, 125, 44, 123, 104, > 125, 10, 45, 102, 51, 100, 32, 123, 48, 46, 53, 42, 109, 97, 120, 40, > 119, 44, 104, 41, 47, 116, 97, 110, 40, 36, 52, 42, 112, 105, 47, 51, > 54, 48, 41, 125, 10, 45, 115, 117, 112, 101, 114, 102, 111, 114, 109, 117, > 108, 97, 51, 100, 32, 36, 49, 44, 36, 123, 52, 45, 55, 125, 10, 45, > 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 48, 44, 49, 44, 36, 49, > 48, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 48, 44, 49, 44, 48, > 44, 36, 57, 32, 45, 114, 51, 100, 91, 45, 49, 93, 32, 49, 44, 48, > 44, 48, 44, 36, 56, 10, 45, 42, 51, 100, 91, 45, 49, 93, 32, 123, > 48, 46, 53, 42, 36, 50, 42, 64, 123, 45, 50, 44, 119, 125, 125, 44, > 123, 48, 46, 53, 42, 36, 51, 42, 64, 123, 45, 50, 44, 104, 125, 125, > 10, 45, 99, 111, 108, 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 111, > 98, 106, 101, 99, 116, 51, 100, 91, 45, 50, 93, 32, 91, 45, 49, 93, > 44, 53, 48, 37, 44, 53, 48, 37, 44, 48, 44, 49, 44, 49, 44, 48, > 44, 48, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, 100, 105, 115, 116, > 97, 110, 99, 101, 91, 45, 49, 93, 32, 49, 32, 45, 103, 116, 91, 45, > 49, 93, 32, 36, 49, 49, 37, 32, 45, 42, 91, 45, 50, 93, 32, 91, > 45, 49, 93, 32, 45, 101, 113, 91, 45, 49, 93, 32, 48, 10, 45, 114, > 91, 45, 49, 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, > 44, 52, 10, 45, 115, 104, 91, 45, 49, 93, 32, 48, 44, 48, 32, 45, > 42, 91, 45, 49, 93, 32, 36, 49, 50, 32, 45, 114, 109, 91, 45, 49, > 93, 10, 45, 115, 104, 91, 45, 49, 93, 32, 49, 44, 49, 32, 45, 42, > 91, 45, 49, 93, 32, 36, 49, 51, 32, 45, 114, 109, 91, 45, 49, 93, > 10, 45, 115, 104, 91, 45, 49, 93, 32, 50, 44, 50, 32, 45, 42, 91, > 45, 49, 93, 32, 36, 49, 52, 32, 45, 114, 109, 91, 45, 49, 93, 10, > 45, 115, 104, 91, 45, 49, 93, 32, 51, 44, 51, 32, 45, 42, 91, 45, > 49, 93, 32, 36, 49, 53, 32, 45, 114, 109, 91, 45, 49, 93, 10, 45, > 43, 91, 45, 50, 44, 45, 49, 93, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, > 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, 105, > 112, 32, 36, 123, 52, 61, 49, 125, 44, 36, 123, 53, 61, 48, 125, 44, > 36, 123, 54, 61, 36, 53, 125, 10, 45, 114, 101, 112, 101, 97, 116, 32, > 64, 35, 10, 45, 105, 102, 32, 36, 53, 32, 119, 105, 100, 116, 104, 61, > 36, 53, 32, 45, 101, 108, 115, 101, 32, 119, 105, 100, 116, 104, 61, 123, > 119, 125, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 36, 54, > 32, 104, 101, 105, 103, 104, 116, 61, 36, 54, 32, 45, 101, 108, 115, 101, > 32, 104, 101, 105, 103, 104, 116, 61, 123, 104, 125, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 105, 102, 32, 36, 52, 32, 45, 115, 91, 45, 49, 93, > 32, 120, 44, 50, 32, 45, 101, 108, 115, 101, 32, 91, 45, 49, 93, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 36, 49, 91, 45, 50, 93, 32, 36, > 50, 32, 45, 36, 49, 91, 45, 49, 93, 32, 36, 51, 10, 45, 114, 91, > 45, 50, 44, 45, 49, 93, 32, 123, 109, 97, 120, 40, 119, 44, 64, 123, > 45, 50, 44, 119, 125, 41, 125, 44, 123, 109, 97, 120, 40, 104, 44, 64, > 123, 45, 50, 44, 104, 125, 41, 125, 44, 49, 44, 49, 48, 48, 37, 44, > 51, 10, 45, 105, 102, 32, 123, 33, 36, 52, 125, 32, 45, 99, 111, 108, > 117, 109, 110, 115, 91, 45, 50, 93, 32, 48, 44, 53, 48, 37, 32, 45, > 99, 111, 108, 117, 109, 110, 115, 91, 45, 49, 93, 32, 53, 48, 37, 44, > 49, 48, 48, 37, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 91, 45, > 50, 44, 45, 49, 93, 32, 120, 32, 45, 114, 91, 45, 49, 93, 32, 36, > 119, 105, 100, 116, 104, 44, 36, 104, 101, 105, 103, 104, 116, 44, 49, 44, > 49, 48, 48, 37, 44, 50, 32, 45, 100, 114, 103, 98, 97, 91, 45, 49, > 93, 10, 45, 108, 105, 110, 101, 91, 45, 49, 93, 32, 53, 48, 37, 44, > 48, 44, 53, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 48, 44, 48, > 44, 48, 44, 50, 53, 53, 10, 45, 116, 101, 120, 116, 95, 111, 117, 116, > 108, 105, 110, 101, 91, 45, 49, 93, 32, 34, 83, 116, 97, 114, 116, 34, > 44, 49, 44, 48, 44, 49, 51, 44, 50, 44, 49, 44, 50, 53, 53, 32, > 45, 116, 101, 120, 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, > 93, 32, 34, 69, 110, 100, 34, 44, 123, 119, 45, 50, 51, 125, 44, 123, > 104, 45, 49, 54, 125, 44, 49, 51, 44, 50, 44, 49, 44, 50, 53, 53, > 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 108, > 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 105, 102, 32, > 36, 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, > 103, 109, 105, 99, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, > 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 95, 103, 105, 109, 112, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, > 100, 32, 36, 123, 53, 45, 54, 125, 10, 45, 97, 110, 105, 109, 97, 116, > 101, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 44, > 34, 36, 123, 55, 45, 56, 125, 44, 36, 123, 49, 48, 45, 49, 57, 125, > 44, 36, 57, 34, 44, 92, 10, 34, 36, 123, 55, 45, 56, 125, 44, 36, > 123, 50, 48, 45, 50, 57, 125, 44, 36, 57, 34, 44, 36, 49, 44, 36, > 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, > 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, > 97, 116, 101, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, 119, 125, 32, > 104, 61, 123, 104, 125, 10, 45, 95, 103, 105, 109, 112, 95, 101, 108, 101, > 118, 97, 116, 105, 111, 110, 51, 100, 32, 36, 123, 53, 45, 54, 125, 10, > 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, > 114, 51, 100, 44, 36, 119, 34, 44, 34, 36, 104, 34, 44, 36, 123, 49, > 48, 45, 49, 57, 125, 44, 36, 57, 34, 44, 92, 10, 36, 119, 34, 44, > 34, 36, 104, 34, 44, 36, 123, 50, 48, 45, 50, 57, 125, 44, 36, 57, > 34, 44, 48, 44, 36, 119, 44, 36, 104, 10, 103, 105, 109, 112, 95, 97, > 110, 105, 109, 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, > 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, 97, > 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 101, 120, 116, 114, > 117, 100, 101, 51, 100, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 95, 103, 105, 109, 112, 95, 101, 120, 116, 114, 117, > 100, 101, 51, 100, 32, 36, 123, 53, 45, 55, 125, 10, 45, 97, 110, 105, > 109, 97, 116, 101, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, > 51, 100, 44, 34, 36, 123, 56, 45, 57, 125, 44, 36, 123, 49, 49, 45, > 50, 48, 125, 44, 36, 49, 48, 34, 44, 92, 10, 34, 36, 123, 56, 45, > 57, 125, 44, 36, 123, 50, 49, 45, 51, 48, 125, 44, 36, 49, 48, 34, > 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, > 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, > 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, > 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 95, 103, 105, 109, 112, 95, > 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 36, 123, 53, 45, 55, 125, > 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, > 101, 114, 51, 100, 44, 36, 119, 34, 44, 34, 36, 104, 34, 44, 36, 123, > 49, 49, 45, 50, 48, 125, 44, 36, 49, 48, 34, 44, 92, 10, 36, 119, > 34, 44, 34, 36, 104, 34, 44, 36, 123, 50, 49, 45, 51, 48, 125, 44, > 36, 49, 48, 34, 44, 48, 44, 36, 119, 44, 36, 104, 10, 103, 105, 109, > 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, > 98, 106, 101, 99, 116, 51, 100, 32, 58, 10, 45, 105, 102, 32, 36, 51, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, > 105, 99, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, > 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 95, 103, 105, 109, 112, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, > 116, 51, 100, 32, 34, 95, 34, 44, 36, 53, 10, 45, 97, 110, 105, 109, > 97, 116, 101, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, > 100, 44, 34, 36, 123, 54, 45, 55, 125, 44, 36, 123, 57, 45, 49, 56, > 125, 44, 36, 56, 34, 44, 92, 10, 34, 36, 123, 54, 45, 55, 125, 44, > 36, 123, 49, 57, 45, 50, 56, 125, 44, 36, 56, 34, 44, 36, 49, 44, > 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, > 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 119, 61, 123, > 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 95, 103, 105, 109, 112, 95, > 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 32, 34, 95, > 112, 114, 101, 118, 105, 101, 119, 95, 34, 44, 36, 53, 10, 45, 103, 105, > 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 103, 105, 109, 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, > 44, 36, 119, 34, 44, 34, 36, 104, 34, 44, 36, 123, 57, 45, 49, 56, > 125, 44, 36, 56, 34, 44, 92, 10, 36, 119, 34, 44, 34, 36, 104, 34, > 44, 36, 123, 49, 57, 45, 50, 56, 125, 44, 36, 56, 34, 44, 48, 44, > 36, 119, 44, 36, 104, 10, 103, 105, 109, 112, 95, 116, 101, 120, 116, 95, > 112, 111, 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 58, 10, 87, > 61, 123, 119, 125, 32, 72, 61, 123, 104, 125, 32, 77, 61, 123, 114, 111, > 117, 110, 100, 40, 49, 46, 53, 42, 109, 97, 120, 40, 119, 44, 104, 41, > 41, 125, 32, 45, 114, 109, 10, 45, 116, 101, 120, 116, 95, 112, 111, 105, > 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 34, 36, 50, 34, 44, 34, > 36, 51, 34, 44, 36, 52, 10, 45, 99, 111, 108, 51, 100, 91, 45, 49, > 93, 32, 36, 123, 53, 45, 55, 125, 32, 45, 42, 51, 100, 91, 45, 49, > 93, 32, 123, 48, 46, 55, 42, 36, 77, 125, 10, 45, 102, 51, 100, 32, > 52, 48, 48, 48, 32, 45, 100, 98, 51, 100, 32, 48, 32, 45, 109, 51, > 100, 10, 45, 114, 101, 112, 101, 97, 116, 32, 36, 49, 10, 45, 114, 112, > 114, 111, 103, 114, 101, 115, 115, 32, 123, 54, 48, 42, 36, 62, 47, 36, > 49, 125, 10, 97, 110, 103, 108, 101, 61, 123, 36, 62, 42, 51, 54, 48, > 47, 36, 49, 125, 10, 45, 45, 114, 51, 100, 91, 48, 93, 32, 49, 44, > 48, 44, 49, 44, 36, 97, 110, 103, 108, 101, 10, 36, 77, 44, 36, 77, > 44, 49, 44, 51, 44, 45, 49, 32, 45, 111, 98, 106, 101, 99, 116, 51, > 100, 91, 45, 49, 93, 32, 91, 45, 50, 93, 44, 53, 48, 37, 44, 53, > 48, 37, 44, 48, 44, 49, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, > 100, 111, 110, 101, 10, 45, 114, 109, 91, 48, 93, 32, 45, 97, 32, 122, > 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 49, 32, 45, 116, > 111, 95, 114, 103, 98, 97, 32, 45, 115, 32, 122, 32, 45, 114, 101, 112, > 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 32, 48, 44, 48, 44, 45, > 49, 44, 45, 49, 44, 45, 49, 44, 50, 53, 53, 44, 48, 44, 48, 44, > 48, 44, 48, 10, 45, 105, 102, 32, 36, 49, 49, 32, 78, 61, 64, 35, > 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, > 62, 93, 32, 45, 114, 112, 114, 111, 103, 114, 101, 115, 115, 32, 123, 54, > 48, 43, 52, 48, 42, 36, 62, 47, 36, 78, 125, 10, 45, 105, 91, 48, > 93, 32, 49, 48, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, > 45, 102, 99, 91, 48, 93, 32, 36, 123, 56, 45, 49, 49, 125, 32, 45, > 45, 99, 104, 97, 110, 110, 101, 108, 115, 91, 45, 49, 93, 32, 51, 44, > 51, 32, 45, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, > 32, 45, 98, 91, 45, 50, 44, 45, 49, 93, 32, 36, 49, 52, 37, 32, > 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 10, 45, 106, 91, > 48, 93, 32, 91, 45, 49, 93, 44, 36, 49, 50, 37, 44, 36, 49, 51, > 37, 44, 48, 44, 48, 44, 49, 44, 91, 45, 50, 93, 44, 50, 53, 53, > 32, 45, 114, 109, 91, 45, 50, 44, 45, 49, 93, 32, 45, 98, 108, 101, > 110, 100, 32, 97, 108, 112, 104, 97, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, > 123, 36, 87, 62, 36, 72, 125, 32, 45, 114, 50, 100, 120, 32, 36, 87, > 32, 45, 101, 108, 115, 101, 32, 45, 114, 50, 100, 121, 32, 36, 72, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 49, 53, 62, > 49, 125, 10, 45, 105, 91, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, > 125, 93, 32, 91, 123, 105, 110, 116, 40, 36, 49, 47, 50, 41, 125, 93, > 120, 123, 36, 49, 53, 45, 49, 125, 10, 45, 105, 91, 48, 93, 32, 91, > 48, 93, 120, 123, 36, 49, 53, 45, 49, 125, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 116, 101, 120, 116, 95, 112, 111, 105, 110, > 116, 99, 108, 111, 117, 100, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 58, 10, 45, 103, 105, 109, 112, 95, 116, 101, 120, 116, 95, 112, 111, > 105, 110, 116, 99, 108, 111, 117, 100, 51, 100, 32, 52, 44, 34, 36, 50, > 34, 44, 34, 36, 51, 34, 44, 36, 52, 44, 36, 123, 53, 45, 55, 125, > 44, 36, 123, 56, 45, 49, 49, 125, 44, 36, 123, 49, 50, 45, 49, 52, > 125, 44, 49, 32, 45, 100, 114, 103, 98, 97, 10, 45, 102, 114, 97, 109, > 101, 32, 49, 44, 49, 44, 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, > 116, 105, 108, 101, 115, 32, 50, 44, 50, 10, 103, 105, 109, 112, 95, 116, > 114, 97, 110, 115, 105, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 102, > 51, 100, 32, 36, 55, 10, 45, 116, 114, 97, 110, 115, 105, 116, 105, 111, > 110, 51, 100, 32, 36, 49, 44, 36, 50, 44, 36, 51, 44, 34, 36, 52, > 34, 44, 34, 36, 53, 34, 44, 34, 36, 54, 34, 44, 36, 56, 10, 103, > 105, 109, 112, 95, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 51, 100, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 102, 51, 100, 32, > 36, 55, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, 49, 125, 32, 45, > 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, 102, 10, 45, 107, > 91, 48, 44, 49, 93, 32, 45, 116, 114, 97, 110, 115, 105, 116, 105, 111, > 110, 51, 100, 32, 52, 44, 36, 50, 44, 36, 51, 44, 34, 36, 52, 34, > 44, 34, 36, 53, 34, 44, 34, 36, 54, 34, 44, 36, 56, 10, 45, 107, > 91, 49, 44, 50, 93, 10, 45, 114, 91, 48, 93, 32, 53, 48, 37, 44, > 49, 48, 48, 37, 44, 49, 44, 49, 48, 48, 37, 44, 48, 10, 45, 114, > 91, 49, 93, 32, 53, 48, 37, 44, 49, 48, 48, 37, 44, 49, 44, 49, > 48, 48, 37, 44, 48, 44, 48, 44, 49, 10, 45, 97, 32, 120, 10, 45, > 108, 105, 110, 101, 32, 53, 48, 37, 44, 48, 44, 53, 48, 37, 44, 49, > 48, 48, 37, 44, 49, 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 10, > 103, 105, 109, 112, 95, 116, 114, 97, 110, 115, 105, 116, 105, 111, 110, 95, > 112, 108, 97, 115, 109, 97, 32, 58, 10, 45, 116, 114, 97, 110, 115, 105, > 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, 32, 36, 49, 44, 36, > 50, 44, 36, 51, 37, 10, 103, 105, 109, 112, 95, 116, 114, 97, 110, 115, > 105, 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 105, 102, 32, 123, 64, 35, 61, 61, > 49, 125, 32, 45, 114, 101, 116, 117, 114, 110, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 107, 91, 48, 44, 49, 93, 32, 45, 116, 114, 97, 110, 115, > 105, 116, 105, 111, 110, 95, 112, 108, 97, 115, 109, 97, 32, 54, 44, 36, > 50, 44, 36, 51, 37, 32, 45, 107, 91, 49, 45, 45, 50, 93, 32, 45, > 102, 114, 97, 109, 101, 32, 49, 44, 49, 44, 48, 32, 45, 97, 112, 112, > 101, 110, 100, 95, 116, 105, 108, 101, 115, 32, 44, 10, 103, 105, 109, 112, > 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 101, 110, 99, 105, 108, 98, > 119, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, > 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 112, 101, 110, > 99, 105, 108, 98, 119, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 112, 101, 110, > 99, 105, 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, > 10, 34, 36, 123, 55, 45, 56, 125, 34, 44, 36, 49, 44, 36, 50, 44, > 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, > 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, > 101, 95, 112, 101, 110, 99, 105, 108, 98, 119, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 112, 101, 110, 99, 105, > 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, 10, 34, > 36, 123, 55, 45, 56, 125, 34, 10, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 115, 116, 101, 110, 99, 105, 108, 98, 119, 32, 58, > 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 115, 116, 101, 110, 99, 105, > 108, 98, 119, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, > 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, > 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 115, 116, 101, 110, 99, > 105, 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, 10, > 34, 36, 123, 55, 45, 56, 125, 34, 44, 36, 49, 44, 36, 50, 44, 64, > 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, 97, > 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, > 95, 115, 116, 101, 110, 99, 105, 108, 98, 119, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 115, 116, 101, 110, 99, > 105, 108, 98, 119, 44, 34, 36, 123, 53, 45, 54, 125, 34, 44, 92, 10, > 34, 36, 123, 55, 45, 56, 125, 34, 10, 103, 105, 109, 112, 95, 97, 110, > 105, 109, 97, 116, 101, 95, 99, 97, 114, 116, 111, 111, 110, 32, 58, 10, > 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 34, 36, 52, 47, 103, 109, 105, 99, 95, 99, 97, 114, 116, 111, 111, 110, > 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 97, 110, 105, 109, 97, 116, 101, 32, 99, 97, 114, 116, 111, 111, 110, 44, > 34, 36, 123, 54, 45, 49, 48, 125, 44, 36, 53, 34, 44, 92, 10, 34, > 36, 123, 49, 49, 45, 49, 53, 125, 44, 36, 53, 34, 44, 36, 49, 44, > 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, > 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 99, 97, 114, 116, 111, 111, 110, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, > 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 99, 97, 114, > 116, 111, 111, 110, 44, 34, 36, 123, 54, 45, 49, 48, 125, 44, 36, 53, > 34, 44, 92, 10, 34, 36, 123, 49, 49, 45, 49, 53, 125, 44, 36, 53, > 34, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, > 100, 103, 101, 115, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, > 101, 100, 103, 101, 115, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, > 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 103, 105, 109, > 112, 95, 101, 100, 103, 101, 115, 44, 34, 36, 123, 54, 45, 55, 125, 44, > 36, 53, 34, 44, 92, 10, 34, 36, 123, 56, 45, 57, 125, 44, 36, 53, > 34, 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, > 92, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, > 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 100, 103, 101, 115, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, > 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 103, 105, 109, 112, 95, 101, 100, 103, 101, 115, 44, 34, 36, 123, 54, 45, > 55, 125, 44, 36, 53, 34, 44, 92, 10, 34, 36, 123, 56, 45, 57, 125, > 44, 36, 53, 34, 10, 103, 105, 109, 112, 95, 102, 105, 114, 101, 95, 101, > 100, 103, 101, 115, 32, 58, 10, 45, 102, 105, 114, 101, 95, 101, 100, 103, > 101, 115, 32, 36, 123, 49, 45, 55, 125, 32, 45, 114, 118, 10, 103, 105, > 109, 112, 95, 102, 105, 114, 101, 95, 101, 100, 103, 101, 115, 95, 112, 114, > 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, > 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 102, 105, > 114, 101, 95, 101, 100, 103, 101, 115, 32, 36, 49, 44, 36, 50, 44, 36, > 51, 44, 36, 52, 44, 49, 44, 36, 54, 44, 48, 34, 44, 36, 45, 49, > 10, 103, 105, 109, 112, 95, 108, 97, 118, 97, 108, 97, 109, 112, 98, 119, > 32, 58, 10, 45, 105, 102, 32, 123, 33, 64, 35, 125, 32, 40, 50, 53, > 53, 59, 49, 48, 48, 94, 54, 52, 59, 49, 54, 94, 49, 50, 56, 59, > 48, 41, 32, 45, 114, 91, 45, 49, 93, 32, 53, 49, 50, 44, 53, 49, > 50, 44, 49, 44, 51, 44, 51, 32, 45, 101, 110, 100, 105, 102, 10, 45, > 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, 36, 60, 93, > 10, 119, 61, 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 45, 114, > 32, 36, 52, 37, 44, 36, 52, 37, 44, 49, 44, 49, 44, 48, 32, 91, > 45, 49, 93, 120, 123, 36, 49, 45, 49, 125, 32, 45, 114, 97, 110, 100, > 91, 94, 48, 93, 32, 48, 44, 49, 32, 45, 115, 116, 101, 110, 99, 105, > 108, 91, 94, 48, 93, 32, 36, 53, 44, 48, 10, 45, 105, 102, 32, 36, > 51, 32, 91, 49, 93, 32, 45, 101, 110, 100, 105, 102, 10, 45, 109, 111, > 114, 112, 104, 91, 94, 48, 93, 32, 36, 50, 44, 36, 54, 44, 48, 10, > 45, 115, 116, 101, 110, 99, 105, 108, 91, 94, 48, 93, 32, 36, 53, 44, > 48, 10, 45, 114, 91, 94, 48, 93, 32, 36, 119, 44, 36, 104, 44, 49, > 44, 49, 44, 51, 32, 45, 98, 91, 94, 48, 93, 32, 49, 48, 32, 45, > 103, 101, 91, 94, 48, 93, 32, 53, 48, 37, 32, 45, 42, 91, 94, 48, > 93, 32, 50, 53, 53, 10, 45, 114, 91, 94, 48, 93, 32, 49, 48, 48, > 37, 44, 49, 48, 48, 37, 44, 49, 44, 52, 32, 45, 106, 91, 94, 48, > 93, 32, 91, 48, 93, 32, 45, 114, 109, 91, 48, 93, 10, 45, 105, 102, > 32, 36, 51, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, > 105, 102, 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 10, 45, > 105, 102, 32, 123, 33, 36, 55, 125, 32, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 110, 91, 45, 49, 93, > 32, 48, 44, 49, 32, 45, 42, 91, 94, 45, 49, 93, 32, 91, 45, 49, > 93, 32, 45, 114, 109, 91, 45, 49, 93, 32, 45, 101, 110, 100, 108, 32, > 45, 100, 111, 110, 101, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, 109, > 112, 95, 108, 97, 118, 97, 108, 97, 109, 112, 98, 119, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 108, 97, 118, > 97, 108, 97, 109, 112, 98, 119, 32, 50, 44, 50, 44, 49, 44, 36, 52, > 44, 36, 53, 44, 36, 54, 44, 36, 55, 32, 45, 107, 91, 48, 93, 10, > 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 108, 105, 115, > 115, 97, 106, 111, 117, 115, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, > 99, 95, 108, 105, 115, 115, 97, 106, 111, 117, 115, 46, 112, 110, 103, 34, > 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, > 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, > 116, 101, 32, 103, 105, 109, 112, 95, 108, 105, 115, 115, 97, 106, 111, 117, > 115, 44, 34, 36, 123, 53, 45, 50, 50, 125, 34, 44, 92, 10, 34, 36, > 123, 50, 51, 45, 52, 48, 125, 34, 44, 36, 49, 44, 36, 50, 44, 64, > 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, 97, > 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, > 95, 108, 105, 115, 115, 97, 106, 111, 117, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 103, 105, 109, 112, 95, > 108, 105, 115, 115, 97, 106, 111, 117, 115, 44, 34, 36, 123, 53, 45, 50, > 50, 125, 34, 44, 92, 10, 34, 36, 123, 50, 51, 45, 52, 48, 125, 34, > 44, 48, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, > 109, 111, 114, 112, 104, 111, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, > 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, > 99, 95, 109, 111, 114, 112, 104, 111, 46, 112, 110, 103, 34, 32, 45, 101, > 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, > 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 44, 34, 36, 53, 44, > 36, 56, 44, 36, 54, 44, 36, 55, 44, 48, 44, 49, 34, 44, 92, 10, > 34, 36, 53, 44, 36, 57, 44, 36, 54, 44, 36, 55, 44, 48, 44, 49, > 34, 44, 36, 49, 44, 36, 50, 44, 64, 123, 45, 113, 117, 111, 116, 101, > 92, 32, 36, 102, 105, 108, 101, 110, 97, 109, 101, 125, 10, 103, 105, 109, > 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 109, 111, 114, 112, 104, 111, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 97, 110, 105, 109, 97, 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, > 32, 103, 105, 109, 112, 95, 109, 111, 114, 112, 104, 111, 44, 34, 36, 53, > 44, 36, 56, 44, 36, 54, 44, 36, 55, 44, 48, 44, 49, 34, 44, 92, > 10, 34, 36, 53, 44, 36, 57, 44, 36, 54, 44, 36, 55, 44, 48, 44, > 49, 34, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, > 114, 111, 100, 105, 108, 105, 117, 115, 32, 58, 10, 45, 105, 102, 32, 36, > 51, 32, 102, 105, 108, 101, 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, > 109, 105, 99, 95, 114, 111, 100, 105, 108, 105, 117, 115, 46, 112, 110, 103, > 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, 108, 101, 110, 97, 109, 101, > 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, 10, 45, 97, 110, 105, 109, > 97, 116, 101, 32, 114, 111, 100, 105, 108, 105, 117, 115, 44, 34, 36, 123, > 54, 45, 49, 48, 125, 44, 36, 53, 34, 44, 92, 10, 34, 36, 123, 49, > 49, 45, 49, 53, 125, 44, 36, 53, 34, 44, 36, 49, 44, 36, 50, 44, > 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, 110, > 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, > 101, 95, 114, 111, 100, 105, 108, 105, 117, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 114, 111, 100, 105, 108, > 105, 117, 115, 44, 34, 36, 123, 54, 45, 49, 48, 125, 44, 36, 53, 34, > 44, 92, 10, 34, 36, 123, 49, 49, 45, 49, 53, 125, 44, 36, 53, 34, > 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 103, 108, > 111, 119, 32, 58, 10, 45, 105, 102, 32, 36, 51, 32, 102, 105, 108, 101, > 110, 97, 109, 101, 61, 34, 36, 52, 47, 103, 109, 105, 99, 95, 103, 108, > 111, 119, 46, 112, 110, 103, 34, 32, 45, 101, 108, 115, 101, 32, 102, 105, > 108, 101, 110, 97, 109, 101, 61, 34, 34, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 103, 108, 111, 119, 44, 34, > 36, 53, 34, 44, 92, 10, 34, 36, 54, 34, 44, 36, 49, 44, 36, 50, > 44, 64, 123, 45, 113, 117, 111, 116, 101, 92, 32, 36, 102, 105, 108, 101, > 110, 97, 109, 101, 125, 10, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 103, 108, 111, 119, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, > 112, 114, 101, 118, 105, 101, 119, 32, 103, 108, 111, 119, 44, 34, 36, 53, > 34, 44, 92, 10, 34, 36, 54, 34, 10, 103, 105, 109, 112, 95, 98, 97, > 110, 100, 112, 97, 115, 115, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, > 32, 64, 35, 32, 45, 108, 91, 36, 62, 93, 32, 45, 115, 112, 108, 105, > 116, 95, 111, 112, 97, 99, 105, 116, 121, 32, 45, 108, 91, 48, 93, 10, > 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, 115, 32, > 34, 45, 98, 97, 110, 100, 112, 97, 115, 115, 32, 36, 49, 37, 44, 36, > 50, 37, 34, 44, 36, 51, 44, 36, 52, 10, 45, 101, 110, 100, 108, 32, > 45, 97, 32, 99, 32, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 98, 97, 110, 100, 112, 97, 115, 115, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, > 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, > 105, 109, 112, 95, 98, 97, 110, 100, 112, 97, 115, 115, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 105, 109, 112, 95, 100, 105, 115, 112, 108, 97, > 121, 95, 102, 102, 116, 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, > 45, 100, 105, 115, 112, 108, 97, 121, 95, 102, 102, 116, 10, 103, 105, 109, > 112, 95, 102, 111, 117, 114, 105, 101, 114, 32, 58, 10, 45, 105, 102, 32, > 36, 49, 32, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, > 10, 45, 102, 102, 116, 56, 50, 102, 108, 111, 97, 116, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 45, 111, 110, 102, 97, 105, 108, 32, 45, 101, > 114, 114, 111, 114, 32, 34, 73, 109, 97, 103, 101, 32, 91, 34, 36, 62, > 34, 93, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 115, 101, 101, 109, > 32, 116, 111, 32, 98, 101, 32, 97, 32, 70, 70, 84, 32, 116, 114, 97, > 110, 115, 102, 111, 114, 109, 46, 34, 10, 45, 101, 110, 100, 108, 32, 45, > 100, 111, 110, 101, 10, 45, 101, 108, 115, 101, 32, 45, 102, 108, 111, 97, > 116, 50, 102, 102, 116, 56, 32, 45, 101, 110, 100, 105, 102, 10, 103, 105, > 109, 112, 95, 102, 111, 117, 114, 105, 101, 114, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 103, 105, 109, > 112, 95, 110, 111, 95, 112, 114, 101, 118, 105, 101, 119, 32, 48, 10, 45, > 101, 108, 115, 101, 32, 45, 100, 102, 102, 116, 10, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 119, 97, 116, 101, 114, 109, 97, 114, 107, > 95, 102, 111, 117, 114, 105, 101, 114, 32, 58, 10, 45, 119, 97, 116, 101, > 114, 109, 97, 114, 107, 95, 102, 111, 117, 114, 105, 101, 114, 32, 34, 36, > 49, 34, 44, 36, 50, 32, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, > 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 32, > 58, 32, 45, 115, 107, 105, 112, 32, 34, 36, 123, 49, 61, 45, 115, 107, > 105, 112, 32, 44, 125, 34, 10, 45, 109, 32, 34, 95, 103, 105, 109, 112, > 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 95, 115, 116, 97, > 114, 116, 32, 58, 32, 36, 49, 34, 10, 45, 105, 102, 32, 123, 36, 51, > 62, 48, 125, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, > 101, 108, 115, 32, 34, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 99, 111, 100, 101, 95, 115, 116, 97, 114, 116, 34, 44, 36, > 51, 44, 36, 50, 10, 45, 101, 108, 115, 101, 10, 45, 95, 103, 105, 109, > 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 10, 45, 105, > 102, 32, 36, 50, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 101, > 108, 115, 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 101, 110, 100, 105, 102, 10, 45, 117, 110, 99, 111, > 109, 109, 97, 110, 100, 32, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 99, 111, 100, 101, 95, 115, 116, 97, 114, 116, 10, 103, 105, > 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 58, 32, 45, 115, 107, 105, 112, 32, 34, > 36, 123, 49, 61, 45, 115, 107, 105, 112, 32, 44, 125, 34, 10, 119, 61, > 123, 119, 125, 32, 104, 61, 123, 104, 125, 10, 45, 108, 10, 95, 103, 99, > 112, 95, 97, 114, 103, 61, 34, 36, 49, 34, 10, 45, 103, 105, 109, 112, > 95, 115, 112, 108, 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, > 45, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, > 101, 32, 36, 95, 103, 99, 112, 95, 97, 114, 103, 44, 36, 123, 50, 45, > 45, 50, 125, 34, 44, 36, 45, 49, 10, 45, 111, 110, 102, 97, 105, 108, > 10, 45, 114, 109, 10, 45, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, > 111, 109, 95, 99, 111, 100, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, > 64, 123, 125, 10, 45, 115, 32, 45, 44, 123, 39, 42, 42, 42, 39, 125, > 32, 45, 107, 91, 45, 49, 93, 32, 45, 115, 32, 121, 44, 123, 45, 105, > 110, 116, 40, 36, 119, 47, 55, 41, 125, 32, 45, 105, 91, 49, 45, 45, > 50, 93, 32, 40, 49, 48, 41, 32, 45, 97, 32, 121, 10, 36, 119, 44, > 36, 104, 44, 49, 44, 51, 44, 56, 48, 10, 45, 116, 101, 120, 116, 95, > 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 34, 80, 114, 101, > 118, 105, 101, 119, 32, 101, 114, 114, 111, 114, 58, 34, 44, 53, 44, 53, > 44, 51, 52, 44, 50, 44, 49, 44, 50, 53, 53, 10, 45, 116, 101, 120, > 116, 95, 111, 117, 116, 108, 105, 110, 101, 91, 45, 49, 93, 32, 64, 123, > 45, 50, 44, 116, 125, 44, 53, 44, 53, 48, 44, 49, 51, 44, 49, 44, > 49, 44, 50, 53, 53, 32, 45, 114, 109, 91, 45, 50, 93, 10, 45, 101, > 110, 100, 108, 10, 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, > 95, 99, 111, 100, 101, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 32, > 40, 123, 39, 34, 36, 42, 34, 39, 125, 41, 10, 95, 103, 105, 109, 112, > 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, 101, 32, 58, 10, 45, > 95, 103, 105, 109, 112, 95, 99, 117, 115, 116, 111, 109, 95, 99, 111, 100, > 101, 95, 115, 116, 97, 114, 116, 10, 103, 105, 109, 112, 95, 100, 111, 95, > 110, 111, 116, 104, 105, 110, 103, 32, 58, 10, 103, 105, 109, 112, 95, 100, > 105, 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, > 32, 58, 10, 45, 116, 111, 95, 114, 103, 98, 32, 45, 105, 102, 32, 36, > 50, 32, 45, 108, 117, 109, 105, 110, 97, 110, 99, 101, 32, 45, 101, 110, > 100, 105, 102, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, > 100, 105, 115, 112, 108, 97, 121, 95, 104, 105, 115, 116, 111, 103, 114, 97, > 109, 91, 45, 49, 93, 32, 123, 119, 125, 44, 123, 104, 125, 44, 36, 49, > 44, 48, 44, 50, 53, 53, 10, 45, 109, 118, 91, 45, 49, 93, 32, 48, > 32, 45, 100, 111, 110, 101, 10, 103, 105, 109, 112, 95, 105, 109, 112, 111, > 114, 116, 95, 105, 109, 97, 103, 101, 32, 58, 10, 45, 114, 109, 32, 45, > 105, 32, 34, 36, 49, 34, 32, 45, 115, 32, 122, 32, 45, 105, 102, 32, > 36, 50, 32, 45, 110, 32, 48, 44, 50, 53, 53, 32, 45, 101, 108, 115, > 101, 32, 45, 99, 32, 48, 44, 50, 53, 53, 32, 45, 101, 110, 100, 105, > 102, 10, 103, 105, 109, 112, 95, 115, 111, 108, 118, 101, 95, 109, 97, 122, > 101, 32, 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 10, 45, > 45, 110, 111, 114, 109, 91, 45, 49, 93, 32, 45, 103, 101, 91, 45, 49, > 93, 32, 53, 48, 37, 10, 45, 105, 102, 32, 123, 33, 36, 49, 48, 125, > 32, 45, 110, 101, 103, 97, 116, 105, 118, 101, 91, 45, 49, 93, 32, 45, > 101, 110, 100, 105, 102, 10, 45, 42, 91, 45, 49, 93, 32, 50, 53, 53, > 32, 45, 45, 98, 91, 45, 49, 93, 32, 36, 53, 37, 32, 45, 42, 91, > 45, 50, 93, 32, 49, 101, 49, 48, 32, 45, 43, 91, 45, 50, 44, 45, > 49, 93, 10, 45, 109, 105, 110, 105, 109, 97, 108, 95, 112, 97, 116, 104, > 91, 45, 49, 93, 32, 36, 49, 37, 44, 36, 50, 37, 44, 48, 44, 36, > 51, 37, 44, 36, 52, 37, 44, 48, 10, 45, 112, 111, 105, 110, 116, 99, > 108, 111, 117, 100, 91, 45, 49, 93, 32, 48, 32, 45, 100, 105, 108, 97, > 116, 101, 91, 45, 49, 93, 32, 36, 54, 32, 45, 114, 91, 45, 49, 93, > 32, 91, 45, 50, 93, 44, 91, 45, 50, 93, 44, 49, 44, 49, 44, 48, > 10, 45, 116, 111, 95, 114, 103, 98, 97, 91, 45, 49, 93, 10, 45, 114, > 101, 112, 108, 97, 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, > 32, 48, 44, 48, 44, 49, 44, 49, 44, 49, 44, 50, 53, 53, 44, 36, > 123, 55, 45, 57, 125, 44, 50, 53, 53, 10, 45, 114, 101, 112, 108, 97, > 99, 101, 95, 99, 111, 108, 111, 114, 91, 45, 49, 93, 32, 48, 44, 48, > 44, 48, 44, 48, 44, 48, 44, 50, 53, 53, 44, 48, 44, 48, 44, 48, > 44, 48, 10, 45, 101, 108, 108, 105, 112, 115, 101, 91, 45, 49, 93, 32, > 36, 49, 37, 44, 36, 50, 37, 44, 53, 44, 53, 44, 48, 44, 49, 44, > 36, 123, 55, 45, 57, 125, 44, 50, 53, 53, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 91, 45, 49, 93, 32, 36, 51, 37, 44, 36, 52, 37, 44, > 53, 44, 53, 44, 48, 44, 49, 44, 36, 123, 55, 45, 57, 125, 44, 50, > 53, 53, 10, 45, 114, 118, 91, 45, 50, 44, 45, 49, 93, 10, 45, 109, > 118, 91, 45, 50, 44, 45, 49, 93, 32, 48, 32, 45, 100, 111, 110, 101, > 10, 103, 105, 109, 112, 95, 115, 111, 108, 118, 101, 95, 109, 97, 122, 101, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, 100, 114, 103, 98, > 97, 10, 45, 108, 105, 110, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, > 36, 51, 37, 44, 36, 52, 37, 44, 49, 44, 48, 120, 67, 67, 67, 67, > 67, 67, 67, 67, 44, 36, 123, 55, 45, 57, 125, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 51, > 44, 48, 44, 49, 44, 36, 123, 55, 45, 57, 125, 10, 45, 101, 108, 108, > 105, 112, 115, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 51, > 44, 48, 44, 49, 44, 48, 120, 49, 44, 48, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, 51, 44, 51, 44, > 48, 44, 49, 44, 36, 123, 55, 45, 57, 125, 10, 45, 101, 108, 108, 105, > 112, 115, 101, 32, 36, 51, 37, 44, 36, 52, 37, 44, 51, 44, 51, 44, > 48, 44, 49, 44, 48, 120, 49, 44, 48, 10, 103, 109, 105, 99, 111, 108, > 95, 108, 111, 103, 111, 95, 101, 110, 32, 58, 10, 45, 103, 105, 109, 112, > 95, 108, 111, 103, 111, 95, 118, 101, 114, 115, 105, 111, 110, 123, 114, 111, > 117, 110, 100, 40, 63, 40, 48, 46, 53, 44, 51, 46, 52, 57, 41, 41, > 125, 32, 34, 32, 32, 32, 32, 45, 32, 79, 110, 108, 105, 110, 101, 32, > 45, 92, 110, 32, 32, 32, 32, 34, 91, 34, 32, 34, 64, 123, 45, 115, > 116, 114, 118, 101, 114, 125, 34, 32, 34, 93, 10, 103, 109, 105, 99, 111, > 108, 95, 97, 100, 106, 117, 115, 116, 95, 99, 111, 108, 111, 114, 115, 32, > 58, 10, 45, 114, 101, 112, 101, 97, 116, 32, 64, 35, 32, 45, 108, 91, > 36, 62, 93, 10, 97, 118, 103, 61, 123, 105, 97, 125, 32, 45, 45, 32, > 36, 97, 118, 103, 32, 45, 42, 32, 36, 49, 32, 45, 43, 32, 36, 97, > 118, 103, 10, 45, 43, 32, 123, 36, 50, 42, 50, 53, 54, 125, 10, 45, > 105, 102, 32, 123, 36, 51, 33, 61, 49, 125, 32, 45, 97, 112, 112, 108, > 121, 95, 103, 97, 109, 109, 97, 32, 123, 49, 48, 94, 36, 51, 125, 32, > 45, 101, 110, 100, 105, 102, 10, 45, 105, 102, 32, 123, 36, 52, 37, 51, > 54, 48, 125, 10, 45, 116, 111, 95, 99, 111, 108, 111, 114, 109, 111, 100, > 101, 32, 123, 109, 97, 120, 40, 51, 44, 115, 41, 43, 49, 45, 115, 37, > 50, 125, 32, 45, 115, 112, 108, 105, 116, 95, 111, 112, 97, 99, 105, 116, > 121, 32, 45, 108, 91, 48, 93, 10, 45, 114, 103, 98, 50, 104, 115, 118, > 32, 45, 115, 104, 32, 48, 44, 48, 32, 45, 43, 91, 45, 49, 93, 32, > 36, 52, 32, 45, 37, 91, 45, 49, 93, 32, 51, 54, 48, 32, 45, 114, > 109, 91, 45, 49, 93, 32, 45, 104, 115, 118, 50, 114, 103, 98, 10, 45, > 101, 110, 100, 108, 10, 45, 97, 32, 99, 32, 45, 101, 110, 100, 105, 102, > 10, 45, 101, 110, 100, 108, 32, 45, 100, 111, 110, 101, 32, 45, 99, 32, > 48, 44, 50, 53, 53, 10, 103, 109, 105, 99, 111, 108, 95, 97, 100, 106, > 117, 115, 116, 95, 99, 111, 108, 111, 114, 115, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, 105, 116, > 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 109, 105, 99, 111, > 108, 95, 97, 100, 106, 117, 115, 116, 95, 99, 111, 108, 111, 114, 115, 32, > 36, 42, 34, 44, 36, 45, 49, 10, 103, 109, 105, 99, 111, 108, 95, 99, > 114, 111, 112, 32, 58, 10, 45, 122, 32, 36, 49, 37, 44, 36, 50, 37, > 44, 36, 51, 37, 44, 36, 52, 37, 10, 103, 109, 105, 99, 111, 108, 95, > 99, 114, 111, 112, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 36, 49, 37, 44, 36, 50, > 37, 44, 36, 51, 37, 44, 36, 52, 37, 44, 48, 46, 53, 44, 49, 50, > 56, 10, 45, 114, 101, 99, 116, 97, 110, 103, 108, 101, 32, 36, 49, 37, > 44, 36, 50, 37, 44, 36, 51, 37, 44, 36, 52, 37, 44, 49, 44, 48, > 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 99, 105, 114, > 99, 108, 101, 32, 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 49, 44, > 48, 44, 50, 53, 53, 44, 48, 32, 45, 99, 105, 114, 99, 108, 101, 32, > 36, 49, 37, 44, 36, 50, 37, 44, 51, 44, 49, 44, 48, 120, 70, 70, > 70, 70, 70, 70, 70, 70, 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, > 32, 36, 51, 37, 44, 36, 50, 37, 44, 51, 44, 49, 44, 48, 44, 50, > 53, 53, 44, 48, 32, 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, 37, > 44, 36, 50, 37, 44, 51, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, > 70, 70, 70, 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, > 37, 44, 36, 52, 37, 44, 51, 44, 49, 44, 48, 44, 50, 53, 53, 44, > 48, 32, 45, 99, 105, 114, 99, 108, 101, 32, 36, 51, 37, 44, 36, 52, > 37, 44, 51, 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, > 44, 48, 10, 45, 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, > 52, 37, 44, 51, 44, 49, 44, 48, 44, 50, 53, 53, 44, 48, 32, 45, > 99, 105, 114, 99, 108, 101, 32, 36, 49, 37, 44, 36, 52, 37, 44, 51, > 44, 49, 44, 48, 120, 70, 70, 70, 70, 70, 70, 70, 70, 44, 48, 10, > 103, 109, 105, 99, 111, 108, 95, 101, 113, 117, 97, 108, 105, 122, 101, 32, > 58, 10, 45, 97, 112, 112, 108, 121, 95, 99, 104, 97, 110, 110, 101, 108, > 115, 32, 34, 45, 101, 113, 117, 97, 108, 105, 122, 101, 32, 50, 53, 54, > 44, 48, 44, 50, 53, 53, 34, 44, 36, 49, 44, 49, 10, 103, 109, 105, > 99, 111, 108, 95, 101, 113, 117, 97, 108, 105, 122, 101, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 115, 112, 108, > 105, 116, 95, 112, 114, 101, 118, 105, 101, 119, 32, 34, 45, 103, 109, 105, > 99, 111, 108, 95, 101, 113, 117, 97, 108, 105, 122, 101, 32, 36, 42, 34, > 44, 36, 45, 49, 10, 103, 109, 105, 99, 111, 108, 95, 102, 108, 105, 112, > 32, 58, 10, 45, 105, 102, 32, 36, 49, 32, 45, 109, 105, 114, 114, 111, > 114, 32, 121, 32, 45, 101, 108, 115, 101, 32, 45, 109, 105, 114, 114, 111, > 114, 32, 120, 32, 45, 101, 110, 100, 105, 102, 10, 103, 109, 105, 99, 111, > 108, 95, 104, 105, 115, 116, 111, 103, 114, 97, 109, 32, 58, 10, 45, 116, > 111, 95, 114, 103, 98, 32, 45, 100, 104, 32, 54, 52, 48, 44, 52, 56, > 48, 44, 36, 49, 10, 103, 109, 105, 99, 111, 108, 95, 104, 105, 115, 116, > 111, 103, 114, 97, 109, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, > 45, 116, 111, 95, 114, 103, 98, 32, 45, 100, 104, 32, 51, 50, 48, 44, > 50, 52, 48, 44, 36, 49, 10, 103, 109, 105, 99, 111, 108, 95, 114, 101, > 115, 105, 122, 101, 32, 58, 10, 45, 105, 102, 32, 123, 36, 49, 61, 61, > 48, 125, 10, 45, 114, 32, 36, 50, 37, 44, 36, 50, 37, 44, 49, 44, > 49, 48, 48, 37, 44, 54, 10, 45, 101, 108, 105, 102, 32, 123, 36, 49, > 61, 61, 49, 125, 10, 45, 114, 101, 115, 105, 122, 101, 50, 100, 120, 32, > 36, 51, 44, 54, 10, 45, 101, 108, 115, 101, 10, 45, 114, 101, 115, 105, > 122, 101, 50, 100, 121, 32, 36, 52, 44, 54, 10, 45, 101, 110, 100, 105, > 102, 10, 45, 99, 32, 48, 44, 50, 53, 53, 10, 103, 109, 105, 99, 111, > 108, 95, 114, 111, 116, 97, 116, 101, 32, 58, 10, 45, 105, 102, 32, 36, > 50, 10, 45, 114, 111, 116, 97, 116, 101, 32, 123, 57, 48, 42, 114, 111, > 117, 110, 100, 40, 36, 49, 47, 57, 48, 41, 125, 44, 48, 44, 48, 10, > 45, 101, 108, 115, 101, 10, 45, 116, 111, 95, 114, 103, 98, 97, 32, 45, > 114, 111, 116, 97, 116, 101, 32, 36, 49, 44, 49, 44, 36, 51, 10, 45, > 101, 110, 100, 105, 102, 10, 95, 103, 109, 105, 99, 111, 108, 95, 114, 103, > 98, 95, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 58, > 10, 45, 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 51, 100, > 32, 45, 99, 111, 108, 111, 114, 99, 117, 98, 101, 51, 100, 32, 45, 112, > 51, 100, 91, 45, 49, 93, 32, 49, 32, 45, 43, 51, 100, 10, 45, 114, > 101, 112, 101, 97, 116, 32, 52, 10, 45, 45, 115, 110, 97, 112, 115, 104, > 111, 116, 51, 100, 91, 48, 93, 32, 36, 49, 44, 48, 46, 57, 44, 50, > 53, 53, 10, 45, 114, 51, 100, 91, 48, 93, 32, 48, 44, 49, 44, 48, > 46, 50, 44, 57, 48, 10, 45, 100, 111, 110, 101, 10, 45, 114, 109, 91, > 48, 93, 32, 45, 97, 117, 116, 111, 99, 114, 111, 112, 32, 45, 45, 32, > 50, 53, 53, 10, 45, 114, 32, 64, 123, 45, 109, 97, 120, 95, 119, 104, > 125, 44, 49, 44, 51, 44, 48, 44, 48, 44, 48, 46, 53, 44, 48, 46, > 53, 32, 45, 43, 32, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, > 53, 44, 53, 44, 50, 53, 53, 32, 45, 102, 114, 97, 109, 101, 32, 49, > 44, 49, 44, 48, 32, 45, 97, 112, 112, 101, 110, 100, 95, 116, 105, 108, > 101, 115, 32, 44, 10, 103, 109, 105, 99, 111, 108, 95, 114, 103, 98, 95, > 100, 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 32, 58, 10, 45, > 95, 103, 109, 105, 99, 111, 108, 95, 114, 103, 98, 95, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 32, 53, 49, 50, 10, 103, 109, 105, > 99, 111, 108, 95, 114, 103, 98, 95, 100, 105, 115, 116, 114, 105, 98, 117, > 116, 105, 111, 110, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 95, 103, 109, 105, 99, 111, 108, 95, 114, 103, 98, 95, 100, 105, 115, 116, > 114, 105, 98, 117, 116, 105, 111, 110, 32, 51, 50, 48, 10, 103, 109, 105, > 99, 111, 108, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 108, 101, 118, > 97, 116, 105, 111, 110, 51, 100, 32, 58, 10, 45, 95, 103, 105, 109, 112, > 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 32, 36, 123, 50, > 45, 51, 125, 10, 45, 97, 110, 105, 109, 97, 116, 101, 32, 103, 105, 109, > 112, 95, 114, 101, 110, 100, 101, 114, 51, 100, 44, 34, 36, 123, 52, 45, > 53, 125, 44, 36, 123, 55, 45, 49, 54, 125, 44, 36, 54, 34, 44, 92, > 10, 34, 36, 123, 52, 45, 53, 125, 44, 36, 123, 49, 55, 45, 50, 54, > 125, 44, 36, 54, 34, 44, 36, 49, 10, 45, 111, 32, 36, 95, 111, 117, > 116, 112, 117, 116, 46, 103, 105, 102, 44, 49, 48, 10, 45, 114, 109, 10, > 103, 109, 105, 99, 111, 108, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, > 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 101, 108, 101, 118, 97, 116, 105, 111, 110, 51, 100, 95, 112, > 114, 101, 118, 105, 101, 119, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, > 92, 34, 44, 36, 123, 50, 45, 45, 49, 125, 10, 103, 109, 105, 99, 111, > 108, 95, 97, 110, 105, 109, 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, > 101, 51, 100, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, > 97, 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, 32, 36, 49, > 44, 49, 44, 48, 44, 92, 34, 92, 34, 44, 36, 123, 50, 45, 45, 49, > 125, 10, 103, 109, 105, 99, 111, 108, 95, 97, 110, 105, 109, 97, 116, 101, > 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, > 116, 101, 95, 101, 120, 116, 114, 117, 100, 101, 51, 100, 95, 112, 114, 101, > 118, 105, 101, 119, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, 92, 34, > 44, 36, 123, 50, 45, 45, 49, 125, 10, 103, 109, 105, 99, 111, 108, 95, > 97, 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, > 101, 99, 116, 51, 100, 32, 58, 10, 45, 103, 105, 109, 112, 95, 97, 110, > 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, 99, > 116, 51, 100, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, 92, 34, 44, > 36, 123, 50, 45, 45, 49, 125, 10, 103, 109, 105, 99, 111, 108, 95, 97, > 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, 103, 101, 111, 98, 106, 101, > 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, 101, 119, 32, 58, 10, 45, > 103, 105, 109, 112, 95, 97, 110, 105, 109, 97, 116, 101, 95, 105, 109, 97, > 103, 101, 111, 98, 106, 101, 99, 116, 51, 100, 95, 112, 114, 101, 118, 105, > 101, 119, 32, 36, 49, 44, 49, 44, 48, 44, 92, 34, 92, 34, 44, 36, > 123, 50, 45, 45, 49, 125, 0 }; > >unsigned int size_data_gmic_def = sizeof(data_gmic_def); ># 1882 "gmic.cpp" 2 > > > > > >using namespace cimg_library; ># 1901 "gmic.cpp" >inline bool _gmic_image_arg(const unsigned int ind, const CImg<unsigned int>& selection) { > for (int l = 0; l<(int)((selection)._height); ++l) if (selection[l]==ind) return true; > return false; >} > > > > >inline bool gmic_check_filename(const char *const filename) { > bool res = false; > > > > > try { > std::FILE *file = cimg::fopen(filename,"r"); > if (file) { res = true; cimg::fclose(file); } > } catch (CImgException&) {} > > return res; >} > > >struct _gmic_mutex { > > > > > > > pthread_mutex_t mutex[256]; > _gmic_mutex() { for (unsigned int i = 0; i<256; ++i) pthread_mutex_init(&mutex[i],0); } > void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); } > void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); } > > > > > >}; >inline _gmic_mutex& gmic_mutex() { static _gmic_mutex val; return val; } > > >inline const char *gmic_ellipsize_arg(const char *const argument, CImg<char>& argument_text) { > if (argument_text) return argument_text; > const unsigned int l = std::strlen(argument); > if (l>=72) { > argument_text.assign(72); > std::memcpy(argument_text.data(),argument,32); > std::memcpy(argument_text.data()+32," ... ",5); > std::memcpy(argument_text.data()+37,argument+l-34,35); > } > return argument_text?argument_text:argument; >} ># 2099 "gmic.cpp" >inline unsigned int gmic_hashcode(const char *const str, const bool is_variable) { > if (!str) return 0; > unsigned int hash = 0; > if (is_variable) { > if (*str=='_') return 255; > for (const char *s = str; *s; ++s) hash+=*s; > return hash%255; > } > for (const char *s = str; *s; ++s) hash+=*s; > return hash&255; >} > > > >inline bool gmic_command_has_arguments(const char *const command) { > if (!command || !*command) return false; > for (const char *s = std::strchr(command,'$'); s; s = std::strchr(s,'$')) { > const char c = *(++s); > if (c=='#' || > c=='*' || > c=='=' || > (c>'0' && c<='9') || > (c=='-' && *(s+1)>'0' && *(s+1)<='9') || > (c=='\"' && *(s+1)=='*' && *(s+2)=='\"') || > (c=='{' && (*(s+1)=='^' || > (*(s+1)>'0' && *(s+1)<='9') || > (*(s+1)=='-' && *(s+2)>'0' && *(s+2)<='9')))) return true; > } > return false; >} > > > >inline const char* gmic_basename(const char *const s) { > if (!s) return s; > const unsigned int l = (unsigned int)std::strlen(s); > if (*s=='[' && (s[l-1]==']' || s[l-1]=='.')) return s; > const char *p = 0; > for (const char *np = s; np>=s && (p=np); np = std::strchr(np,'/')+1) {} > return p; >} > > > >template<typename T> >struct st_gmic_parallel { > gmic gmic_instance; > CImgList<T> *images; > CImgList<char> *images_names, commands_line; > unsigned int variables_sizes[256], wait_mode; > gmic_exception exception; > > > pthread_t thread_id; > > > > >}; > >template<typename T> > >static void *gmic_parallel(void *arg) > > > >{ > st_gmic_parallel<T> &st = *(st_gmic_parallel<T>*)arg; > unsigned int pos = 0; > try { > st.gmic_instance._parse(st.commands_line,pos,*st.images,*st.images_names,st.variables_sizes); > } catch (gmic_exception &e) { > st.exception._command_help.assign(e._command_help); > st.exception._message.assign(e._message); > } > > pthread_exit(0); > > return 0; >} > > > > >static int _gmic_levenshtein(const char *const s, const char *const t, > CImg<int>& d, const int i, const int j) { > const int ls = d.width()-1, lt = d.height()-1; > if (d(i,j)>=0) return d(i,j); > int x; > if (i==ls) x = lt - j; > else if (j==lt) x = ls - i; > else if (s[i]==t[j]) x = _gmic_levenshtein(s,t,d,i+1,j+1); > else { > x = _gmic_levenshtein(s,t,d,i+1,j+1); > int y; > if ((y=_gmic_levenshtein(s,t,d,i,j+1))<x) x = y; > if ((y=_gmic_levenshtein(s,t,d,i+1,j))<x) x = y; > ++x; > } > return d(i,j) = x; >} > >inline int gmic_levenshtein(const char *const s, const char *const t) { > const char *const ns = s?s:"", *const nt = t?t:""; > const int ls = std::strlen(ns), lt = std::strlen(nt); > if (!ls) return lt; else if (!lt) return ls; > CImg<int> d(1+ls,1+lt,1,1,-1); > return _gmic_levenshtein(ns,nt,d,0,0); >} > > > > > >gmic::gmic():commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) {} > >gmic::~gmic() { > debug("%sEnd G'MIC instance.%s\n",cimg::t_bold,cimg::t_normal); > delete[] commands; > delete[] commands_names; > delete[] commands_has_arguments; > delete[] _variables; > delete[] _variables_names; > delete[] variables; > delete[] variables_names; >} > >gmic::gmic(const char *const commands_line, const char *const custom_commands, > const bool include_default_commands, float *const p_progress, int *const p_cancel): > commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) { > CImgList<float> images; > CImgList<char> images_names; > _gmic(commands_line,images,images_names,custom_commands,include_default_commands, > p_progress,p_cancel); >} > > > >CImg<char> gmic::scope2string(const CImg<unsigned int> *const scope_selection) const { > if (scope_selection && !*scope_selection) return CImg<char>("./",3); > CImgList<char> input_scope; > if (!scope_selection) input_scope.assign(scope,true); > else for (int l = 0; l<(int)((*scope_selection)._height); ++l) input_scope.insert(scope[(*scope_selection)[l]],~0U,true); > CImgList<char> res; > const unsigned int siz = (unsigned int)input_scope.size(); > if (siz<=8) res.assign(input_scope,false); > else { > res.assign(8); > res[0].assign(input_scope[0],false); > res[1].assign(input_scope[1],false); > res[2].assign(input_scope[2],false); > res[3].assign("..",3); > res[4].assign(input_scope[siz-4],false); > res[5].assign(input_scope[siz-3],false); > res[6].assign(input_scope[siz-2],false); > res[7].assign(input_scope[siz-1],false); > } > for (int l = 0; l<(int)(res)._width; ++l) res[l].back() = '/'; > CImg<char>::vector(0).move_to(res); > return res>'x'; >} > >CImg<char> gmic::scope2string() const { > return scope2string(0); >} > >CImg<char> gmic::scope2string(const CImg<unsigned int>& scope_selection) const { > return scope2string(&scope_selection); >} > > > >CImgList<char> gmic::commands_line_to_CImgList(const char *const commands_line) { > if (!commands_line || !*commands_line) return CImgList<char>(); > bool is_dquoted = false; > const char *ptrs0 = commands_line; > while (*ptrs0==' ') ++ptrs0; > CImg<char> item(std::strlen(ptrs0)+1); > CImgList<char> items; > char *ptrd = item.data(), c = 0; > for (const char *ptrs = ptrs0; *ptrs; ++ptrs) { > c = *ptrs; > if (c=='\\') { > c = *(++ptrs); > if (!c) { c = '\\'; --ptrs; } > else if (c=='$') c = _dollar; > else if (c=='{') c = _lbrace; > else if (c=='}') c = _rbrace; > else if (c==',') c = _comma; > else if (c=='\"') c = _dquote; > else if (c=='@') c = _arobace; > else if (c==' ') c = ' '; > else *(ptrd++) = '\\'; > *(ptrd++) = c; > } else if (is_dquoted) { > if (c=='\"') is_dquoted = false; > else if (c==1) while (c && c!=' ') c = *(++ptrs); > else *(ptrd++) = c=='$'?_dollar:c=='{'?_lbrace:c=='}'?_rbrace: > c==','?_comma:c=='@'?_arobace:c; > } else { > if (c=='\"') is_dquoted = true; > else if (c==' ') { > *ptrd = 0; CImg<char>(item.data(),ptrd - item.data() + 1).move_to(items); > ptrd = item.data(); > ++ptrs; while (*ptrs==' ') ++ptrs; ptrs0 = ptrs--; > } else *(ptrd++) = c; > } > } > if (is_dquoted) { > CImg<char> str; CImg<char>::string(commands_line).move_to(str); > char *ptrd = str,c = 0; > bool _is_debug_infos = false; > for (char *ptrs = (str)._data, *_maxptrs = (str)._data + (str).size(); ptrs<_maxptrs; ++ptrs) { > c = *ptrs; > if (c!=1) *(ptrd++) = c; > else { > unsigned int _debug_filename = ~0U, _debug_line = ~0U; > if (!_is_debug_infos && std::sscanf(ptrs+1,"%x,%x",&_debug_line,&(_debug_filename=0))) { > debug_filename = _debug_filename; > debug_line = _debug_line; > _is_debug_infos = is_debug_infos = true; > } > while (c && c!=' ') c = *(++ptrs); > } > } *ptrd = 0; > error("Invalid command line: Double quotes are not closed, in expression '%s'.", > str.data()); > } > if (ptrd!=item.data() && c!=' ') { > *ptrd = 0; CImg<char>(item.data(),ptrd - item.data() + 1).move_to(items); > } > if (is_debug) { > debug("Decompose command line into %u items: ",items.size()); > for (int l = 0; l<(int)(items)._width; ++l) { > if (items(l,0)==1) { > if (items(l,1)) debug(" item[%u] = (debug info 0x%s)",l,items[l].data()+1); > else debug(" item[%u] = (debug info)",l); > } else debug(" item[%u] = '%s'",l,items[l].data()); > } > } > return items; >} > > > >gmic& gmic::print(const char *format, ...) { > if (verbosity<0 && !is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(16384,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(), > "[gmic]%s %s", > scope2string().data(),message.data()); > std::fflush(cimg::output()); > return *this; >} > > > >gmic& gmic::error(const char *const format, ...) { > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (verbosity>=0 || is_debug) { > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(),"[gmic]%s %s*** Error *** %s%s", > scope2string().data(),cimg::t_red,message.data(),cimg::t_normal); > std::fflush(cimg::output()); > } > > > CImg<char> full_message(512+message.width(),1,1,1,0); > if (debug_filename<commands_files.size() && debug_line!=~0U) > snprintf(full_message,full_message.width(), > "*** Error in %s (file '%s', %sline %u) *** %s", > scope2string().data(),commands_files[debug_filename].data(), > is_debug_infos?"":"call from ",debug_line,message.data()); > else snprintf(full_message,full_message.width(), > "*** Error in %s *** %s", > scope2string().data(),message.data()); > CImg<char>::string(full_message).move_to(status); > message.assign(); > throw gmic_exception(0,status); > return *this; >} > > > >gmic& gmic::debug(const char *format, ...) { > if (!is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(), > "%s<gmic>%s ", > cimg::t_green,scope2string().data()); > for (char *s = message; *s; ++s) { > char c = *s; > if (c<' ') switch (c) { > case _dollar : std::fprintf(cimg::output(),"\\$"); break; > case _lbrace : std::fprintf(cimg::output(),"\\{"); break; > case _rbrace : std::fprintf(cimg::output(),"\\}"); break; > case _comma : std::fprintf(cimg::output(),"\\,"); break; > case _dquote : std::fprintf(cimg::output(),"\\\""); break; > case _arobace : std::fprintf(cimg::output(),"\\@"); break; > default : std::fputc(c,cimg::output()); > } > else std::fputc(c,cimg::output()); > } > std::fprintf(cimg::output(), > "%s", > cimg::t_normal); > std::fflush(cimg::output()); > return *this; >} > > > >gmic& gmic::add_commands(const char *const data_commands, > CImgList<char> commands_names[256], > CImgList<char> commands[256], > CImgList<char> commands_has_arguments[256], > const char *const commands_file) { > if (!data_commands || !*data_commands) return *this; > CImg<char> com(256*1024), line(256*1024); > char mac[256] = { 0 }, debug_info[32] = { 0 }; > unsigned int pos[256] = { 0 }, line_number = 1; > bool is_last_slash = false, _is_last_slash = false, is_newline = false, was_dquotes = false; > int ind = -1, l_debug_info = 0; > char sep = 0; > if (commands_file) CImg<char>::string(commands_file).move_to(commands_files); > > for (const char *data = data_commands; *data; is_last_slash = _is_last_slash, > line_number+=is_newline?1:0) { > > > char *_line = line, *const line_end = line.end(); > while (*data!='\n' && *data && _line<line_end) *(_line++) = *(data++); > if (_line<line_end) *_line = 0; else *(line_end-1) = 0; > if (*data=='\n') { is_newline = true; ++data; } else is_newline = false; > > > for (_line = line; *_line; ++_line) if ((unsigned char)*_line<' ') *_line = ' '; > _line = line; if (*_line=='#') *_line = 0; else do { > if ((_line=std::strchr(_line,'#')) && *(_line-1)==' ') { *--_line = 0; break; } > } while (_line++); > > > char *linee = line.data() + std::strlen(line) - 1; > while (linee>=line && *linee==' ') --linee; *(linee+1) = 0; > char *lines = line; while (*lines==' ') ++lines; > if (!*lines) continue; > > > _is_last_slash = false; > for (_line = linee; *_line=='\\' && _line>=lines; --_line) _is_last_slash = !_is_last_slash; > if (_is_last_slash) *(linee--) = 0; > if (!*lines) continue; > *mac = *com = 0; > > if (!is_last_slash && std::strchr(lines,':') && > std::sscanf(lines,"%255[a-zA-Z0-9_] %c %262143[^\n]",mac,&sep,com.data())>=2 && > (*lines<'0' || *lines>'9') && sep==':') { > ind = gmic_hashcode(mac,false); > CImg<char>::string(mac).move_to(commands_names[ind],pos[ind]); > CImg<char> body = CImg<char>::string(com); > CImg<char>::vector((char)gmic_command_has_arguments(body)). > move_to(commands_has_arguments[ind],pos[ind]); > if (commands_file) { > if (commands_files.width()<2) > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x",line_number); > else > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x,%x", > line_number,commands_files.width()-1); > debug_info[0] = 1; debug_info[l_debug_info+1] = ' '; > ((CImg<char>(debug_info,l_debug_info+2,1,1,1,true),body)>'x'). > move_to(commands[ind],pos[ind]++); > } else body.move_to(commands[ind],pos[ind]++); > } else { > if (ind<0) error("Command '-command': Syntax error in expression '%s'.",lines); > const unsigned int p = pos[ind] - 1; > if (!is_last_slash) commands[ind][p].back() = ' '; > else --(commands[ind][p]._width); > const CImg<char> body = CImg<char>(lines,linee - lines + 2); > commands_has_arguments[ind](p,0) |= (char)gmic_command_has_arguments(body); > if (commands_file && !is_last_slash) { > const bool is_dquotes = (bool)std::strchr(body,'\"'); > if (!is_dquotes && !was_dquotes) > ((commands[ind][p],CImg<char>(2,1,1,1,1,' '),body)>'x').move_to(commands[ind][p]); > else { > if (commands_files.width()<2) > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x",line_number); > else > l_debug_info = snprintf(debug_info+1,sizeof(debug_info)-2,"%x,%x", > line_number,commands_files.width()-1); > debug_info[0] = 1; debug_info[l_debug_info+1] = ' '; > ((commands[ind][p],CImg<char>(debug_info,l_debug_info+2,1,1,1,true),body)>'x'). > move_to(commands[ind][p]); > } > was_dquotes = is_dquotes; > } else commands[ind][p].append(body,'x'); > } > } > > if (is_debug) { > CImg<unsigned int> hdist(256); > unsigned int nb_commands = 0; > for (int i = 0; i<(int)((hdist)._width); ++i) { hdist[i] = commands[i].size(); nb_commands+=commands[i].size(); } > const CImg<double> st = hdist.get_stats(); > debug("Distribution of command hashes: [ %s ], min = %u, max = %u, mean = %g, " > "std = %g (%u commands).", > hdist.value_string().data(),(unsigned int)st[0],(unsigned int)st[1],st[2], > std::sqrt(st[3]),nb_commands); > } > return *this; >} > > > >gmic& gmic::add_commands(std::FILE *const file, > const char *const filename, > CImgList<char> commands_names[256], > CImgList<char> commands[256], > CImgList<char> commands_has_arguments[256], > const bool add_debug_infos) { > if (!file) return *this; > > > try { > CImg<char> buffer; > buffer.load_cimg(file); > add_commands(buffer.data(),commands_names,commands,commands_has_arguments, > add_debug_infos?(filename?filename:"(FILE*)"):0); > } catch (...) { > std::rewind(file); > std::fseek(file,0,2); > const long siz = std::ftell(file); > std::rewind(file); > if (siz>0) { > CImg<char> buffer(siz+1); > if (std::fread(buffer.data(),sizeof(char),siz,file)) { > buffer[siz] = 0; > add_commands(buffer.data(),commands_names,commands,commands_has_arguments, > add_debug_infos?(filename?filename:"(FILE*)"):0); > } > } > } > return *this; >} > > > >CImg<unsigned int> gmic::selection2cimg(const char *const string, const unsigned int indice_max, > const CImgList<char>& names, > const char *const command, const bool is_selection, > const bool allow_new_name, CImg<char> &new_name) { > if (string && !*string) return CImg<unsigned int>(); > if (!string || (*string=='^' && !string[1])) { > if (indice_max) return CImg<unsigned int>::sequence(indice_max,0,indice_max-1); > else return CImg<unsigned int>(); > } > const char *const stype = is_selection?"selection":"subset"; > const int > ctypel = is_selection?'[':'{', > ctyper = is_selection?']':'}'; > CImg<bool> is_selected(1,indice_max,1,1,false); > > bool is_inverse = *string=='^'; > const char *it = string + (is_inverse?1:0); > for (bool stopflag = false; !stopflag; ) { > CImg<char> name(256), item; > float ind0 = 0, ind1 = 0, step = 1; > int iind0 = 0, iind1 = 0; > bool is_label = false; > char sep = 0; > > const char *const it_comma = std::strchr(it,','); > if (it_comma) { item.assign(it,it_comma-it+1); item.back() = 0; it = it_comma + 1; } > else { CImg<char>::string(it).move_to(item); stopflag = true; } > > char end, *const it_colon = std::strchr(item,':'); > if (it_colon) { > *it_colon = 0; > if (std::sscanf(it_colon+1,"%f%c",&step,&end)!=1 || step<=0) > error("Command '%s': Invalid %s %c%s%c (syntax error after colon ':').", > command,stype,ctypel,string,ctyper); > } > if (!*item) { > if (is_inverse) { iind0 = 0; iind1 = -1; is_inverse = false; } > else continue; > } else if (std::sscanf(item,"%f%c",&ind0,&end)==1) { > iind1 = iind0 = (int)cimg::round(ind0); > } else if (std::sscanf(item,"%f-%f%c",&ind0,&ind1,&end)==2) { > iind0 = (int)cimg::round(ind0); > iind1 = (int)cimg::round(ind1); > } else if (std::sscanf(item,"%255[a-zA-Z0-9_]%c",name.data(),&end)==1 && > (*name<'0' || *name>'9')) { > for (int l = 0; l<(int)(names)._width; ++l) if (names[l] && !std::strcmp(names[l],name)) { > is_selected(l) = true; is_label = true; > } > if (!is_label) { > if (allow_new_name && !new_name) { > iind0 = iind1 = -1; > CImg<char>::string(name).move_to(new_name); > } else error("Command '%s': Invalid %s %c%s%c (undefined label '%s').", > command,stype,ctypel,string,ctyper,name.data()); > } > } else if (std::sscanf(item,"%f%c%c",&ind0,&sep,&end)==2 && sep=='%') { > iind1 = iind0 = (int)cimg::round(ind0*((int)indice_max-1)/100)-(ind0<0?1:0); > } else if (std::sscanf(item,"%f%%-%f%c%c",&ind0,&ind1,&sep,&end)==3 && sep=='%') { > > iind0 = (int)cimg::round(ind0*((int)indice_max-1)/100)-(ind0<0?1:0); > iind1 = (int)cimg::round(ind1*((int)indice_max-1)/100)-(ind1<0?1:0); > } else if (std::sscanf(item,"%f%%-%f%c",&ind0,&ind1,&end)==2) { > > iind0 = (int)cimg::round(ind0*((int)indice_max-1)/100)-(ind0<0?1:0);; > iind1 = (int)cimg::round(ind1); > } else if (std::sscanf(item,"%f-%f%c%c",&ind0,&ind1,&sep,&end)==3 && sep=='%') { > > iind0 = (int)cimg::round(ind0); > iind1 = (int)cimg::round(ind1*((int)indice_max-1)/100)-(ind1<0?1:0);; > } else error("Command '%s': Invalid %s %c%s%c.", > command,stype,ctypel,string,ctyper); > > if (!indice_max) error("Command '%s': Invalid %s %c%s%c (no data available).", > command,stype,ctypel,string,ctyper); > if (!is_label) { > int > uind0 = iind0<0?iind0+indice_max:iind0, > uind1 = iind1<0?iind1+indice_max:iind1; > if (uind0>uind1) { cimg::swap(uind0,uind1); cimg::swap(iind0,iind1); } > if (uind0<0 || uind0>=(int)indice_max) > error("Command '%s': Invalid %s %c%s%c (contains starting indice '%d', " > "not in range -%u..%u).", > command,stype,ctypel,string,ctyper,iind0,indice_max,indice_max-1); > if (uind1<0 || uind1>=(int)indice_max) > error("Command '%s': Invalid %s %c%s%c (contains ending indice '%d', " > "not in range -%u..%u).", > command,stype,ctypel,string,ctyper,iind1,indice_max,indice_max-1); > const int istep = (int)cimg::round(step); > for (int l = uind0; l<=uind1; l+=istep) is_selected[l] = true; > } > } > unsigned int indice = 0; > for (bool *p = (is_selected)._data, *_maxp = (is_selected)._data + (is_selected).size(); p<_maxp; ++p) if (*p) ++indice; > CImg<unsigned int> selection(1,is_inverse?indice_max-indice:indice); > indice = 0; > if (is_inverse) { for (int l = 0; l<(int)((is_selected)._height); ++l) if (!is_selected[l]) selection[indice++] = l; } > else for (int l = 0; l<(int)((is_selected)._height); ++l) if (is_selected[l]) selection[indice++] = l; > return selection; >} > > > >CImg<char> gmic::selection2string(const CImg<unsigned int>& selection, > const CImgList<char>& images_names, > const bool display_indices) const { > CImg<char> res(1024); > if (display_indices) { > switch (selection.height()) { > case 0: snprintf(res.data(),res.width()," []"); break; > case 1: snprintf(res.data(),res.width()," [%u]", > selection[0]); break; > case 2: snprintf(res.data(),res.width(),"s [%u,%u]", > selection[0],selection[1]); break; > case 3: snprintf(res.data(),res.width(),"s [%u,%u,%u]", > selection[0],selection[1],selection[2]); break; > case 4: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u]", > selection[0],selection[1],selection[2],selection[3]); break; > case 5: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u,%u]", > selection[0],selection[1],selection[2],selection[3],selection[4]); break; > case 6: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u,%u,%u]", > selection[0],selection[1],selection[2], > selection[3],selection[4],selection[5]); break; > case 7: snprintf(res.data(),res.width(),"s [%u,%u,%u,%u,%u,%u,%u]", > selection[0],selection[1],selection[2],selection[3], > selection[4],selection[5],selection[6]); break; > default: snprintf(res.data(),res.width(),"s [%u,%u,%u,..,%u,%u,%u]", > selection[0],selection[1],selection[2], > selection[selection.height()-3], > selection[selection.height()-2], > selection[selection.height()-1]); > } > return res; > } > > switch (selection.height()) { > case 0: > *res = 0; > break; > case 1: > snprintf(res.data(),res.width(),"%s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":""); > break; > case 2: > snprintf(res.data(),res.width(),"%s%s, %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection[1]].data()), > images_names[selection[1]].back()?"*":""); > break; > case 3: > snprintf(res.data(),res.width(),"%s%s, %s%s, %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection[1]].data()), > images_names[selection[1]].back()?"*":"", > gmic_basename(images_names[selection[2]].data()), > images_names[selection[2]].back()?"*":""); > break; > case 4: > snprintf(res.data(),res.width(),"%s%s, %s%s, %s%s, %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection[1]].data()), > images_names[selection[1]].back()?"*":"", > gmic_basename(images_names[selection[2]].data()), > images_names[selection[2]].back()?"*":"", > gmic_basename(images_names[selection[3]].data()), > images_names[selection[3]].back()?"*":""); > break; > default: > snprintf(res.data(),res.width(),"%s%s, .., %s%s", > gmic_basename(images_names[selection[0]].data()), > images_names[selection[0]].back()?"*":"", > gmic_basename(images_names[selection.back()].data()), > images_names[selection.back()].back()?"*":""); > } > return res; >} > > > > > >template<typename T> >gmic& gmic::print(const CImgList<T>& list, const CImg<unsigned int> *const scope_selection, > const char *format, ...) { > if (verbosity<0 && !is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(16384,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > if (!scope_selection || *scope_selection) > std::fprintf(cimg::output(), > "[gmic]-%u%s %s", > list.size(),scope2string(scope_selection).data(),message.data()); > else std::fprintf(cimg::output(),"%s",message.data()); > std::fflush(cimg::output()); > return *this; >} > > > >template<typename T> >gmic& gmic::warn(const CImgList<T>& list, const CImg<unsigned int> *const scope_selection, > const char *format, ...) { > if (verbosity<0 && !is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > if (!scope_selection || *scope_selection) > std::fprintf(cimg::output(), > "[gmic]-%u%s %s*** Warning *** %s%s", > list.size(),scope2string(scope_selection).data(), > cimg::t_red,message.data(),cimg::t_normal); > else std::fprintf(cimg::output(), > "%s*** Warning *** %s%s", > cimg::t_red,message.data(),cimg::t_normal); > std::fflush(cimg::output()); > return *this; >} > > > >template<typename T> >gmic& gmic::error(const CImgList<T>& list, const CImg<unsigned int> *const scope_selection, > const char *const command, const char *const format, ...) { > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > gmic_strreplace(message); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (verbosity>=0 || is_debug) { > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > if (!scope_selection || *scope_selection) > std::fprintf(cimg::output(), > "[gmic]-%u%s %s*** Error *** %s%s", > list.size(),scope2string(scope_selection).data(), > cimg::t_red,message.data(),cimg::t_normal); > else std::fprintf(cimg::output(),"%s",message.data()); > std::fflush(cimg::output()); > } > > > CImg<char> full_message(512+message.width(),1,1,1,0); > if (debug_filename<commands_files.size() && debug_line!=~0U) > snprintf(full_message,full_message.width(), > "*** Error in %s (file '%s', %sline %u) *** %s", > scope2string().data(),commands_files[debug_filename].data(), > is_debug_infos?"":"call from ",debug_line,message.data()); > else snprintf(full_message,full_message.width(), > "*** Error in %s *** %s", > scope2string().data(),message.data()); > CImg<char>::string(full_message).move_to(status); > message.assign(); > throw gmic_exception(command,status); > return *this; >} > > > > > >template<typename T> >gmic& gmic::debug(const CImgList<T>& list, const char *format, ...) { > if (!is_debug) return *this; > va_list ap; > __builtin_va_start(ap,format); > CImg<char> message(1024,1,1,1,0); > vsnprintf(message,message.width(),format,ap); > { if (message.width()>=5 && message[message.width()-2]) message[message.width()-4] = message[message.width()-3] = message[message.width()-2] = '.'; }; > __builtin_va_end(ap); > > > if (*message!='\r') > for (unsigned int i = 0; i<nb_carriages; ++i) std::fputc('\n',cimg::output()); > nb_carriages = 1; > std::fprintf(cimg::output(), > "%s<gmic>-%u%s ", > cimg::t_green,list.size(),scope2string().data()); > for (char *s = message; *s; ++s) { > char c = *s; > if (c<' ') { > switch (c) { > case _dollar : std::fprintf(cimg::output(),"\\$"); break; > case _lbrace : std::fprintf(cimg::output(),"\\{"); break; > case _rbrace : std::fprintf(cimg::output(),"\\}"); break; > case _comma : std::fprintf(cimg::output(),"\\,"); break; > case _dquote : std::fprintf(cimg::output(),"\\\""); break; > case _arobace : std::fprintf(cimg::output(),"\\@"); break; > default : std::fputc(c,cimg::output()); > } > } else std::fputc(c,cimg::output()); > } > std::fprintf(cimg::output(), > "%s", > cimg::t_normal); > std::fflush(cimg::output()); > return *this; >} > > > >template<typename T> >inline bool gmic_is_valid_pointer(const T *const ptr) { > > const int result = access((const char*)ptr,0); > if (result==-1 && (*__errno_location ())==14) return false; > > > > return true; >} > >template<typename T> >CImg<T>& gmic::check_image(const CImgList<T>& list, CImg<T>& img) { > check_image(list,(const CImg<T>&)img); > return img; >} > >template<typename T> >const CImg<T>& gmic::check_image(const CImgList<T>& list, const CImg<T>& img) { ># 2930 "gmic.cpp" > cimg::unused(list); > > return img; >} > > > > > >template<typename T> >gmic& gmic::remove_images(CImgList<T> &images, CImgList<char> &images_names, > const CImg<unsigned int>& selection, > const unsigned int start, const unsigned int end) { > if (start==0 && end==(unsigned int)selection.height()-1 && selection.height()==images.width()) { > images.assign(); > images_names.assign(); > } else for (int l = (int)end; l>=(int)start; ) { > unsigned int eind = selection[l--], ind = eind; > while (l>=(int)start && selection[l]==ind-1) ind = selection[l--]; > images.remove(ind,eind); images_names.remove(ind,eind); > } > return *this; >} > > > >template<typename T> >gmic::gmic(const int argc, const char *const *const argv, > CImgList<T>& images, CImgList<char>& images_names, > const char *custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel):commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) { > CImgList<char> items; > for (int l = 1; l<argc; ++l) { > if (std::strchr(argv[l],' ')) { > CImg<char>(1,1,1,1,'\"').move_to(items); > CImg<char>(argv[l],std::strlen(argv[l])).move_to(items); > CImg<char>::string("\"").move_to(items); > } else CImg<char>::string(argv[l]).move_to(items); > if (l<argc-1) items.back().back()=' '; > } > const CImg<char> commands_line(items>'x'); > _gmic(commands_line.data(),images,images_names,custom_commands,include_default_commands, > p_progress,p_cancel); >} > >template<typename T> >gmic::gmic(const char *const commands_line, CImgList<T>& images, CImgList<char>& images_names, > const char *custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel):commands(new CImgList<char>[256]), commands_names(new CImgList<char>[256]), commands_has_arguments(new CImgList<char>[256]), _variables(new CImgList<char>[256]), _variables_names(new CImgList<char>[256]), variables(new CImgList<char>*[256]), variables_names(new CImgList<char>*[256]) { > _gmic(commands_line,images,images_names,custom_commands,include_default_commands, > p_progress,p_cancel); >} > >template<typename T> >void gmic::_gmic(const char *const commands_line, CImgList<T>& images, > CImgList<char>& images_names, > const char *custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel) { > > > setlocale(1,"C"); > cimg::srand(); > verbosity = 0; > nb_carriages = 0; > debug_filename = ~0U; > debug_line = ~0U; > is_released = true; > is_debug = false; > is_debug_infos = false; > is_start = true; > is_quit = false; > is_return = false; > is_double3d = true; > is_default_type = true; > check_elif = false; > reference_time = cimg::time(); > background3d.assign(1,2,1,3).fill(32,64,32,116,64,96).resize(1,256,1,3,3); > render3d = 4; > renderd3d = -1; > focale3d = 700; > light3d.assign(); > light3d_x = light3d_y = 0; > light3d_z = -5e8f; > specular_lightness3d = 0.15f; > specular_shininess3d = 0.8f; > if (p_progress) progress = p_progress; else { _progress = -1; progress = &_progress; } > if (p_cancel) cancel = p_cancel; else { _cancel = 0; cancel = &_cancel; } > for (unsigned int l = 0; l<256; ++l) { > commands_names[l].assign(); > commands[l].assign(); > commands_has_arguments[l].assign(); > _variables[l].assign(); > variables[l] = &_variables[l]; > _variables_names[l].assign(); > variables_names[l] = &_variables_names[l]; > } > if (include_default_commands) > add_commands(data_gmic_def,commands_names,commands,commands_has_arguments); > add_commands(custom_commands,commands_names,commands,commands_has_arguments); ># 3038 "gmic.cpp" > const CImgList<char> items = commands_line_to_CImgList(commands_line); > for (int l = 0; l<(int)(items)._width; ++l) if (!std::strcmp("-debug",items[l].data())) { is_debug = true; break; } > if (is_debug) { > debug(images,"%sStart G'MIC instance, in debug mode.%s",cimg::t_bold,cimg::t_normal); > debug(images,"Initial command line: '%s'.",commands_line); > is_start = false; > } > if (is_debug) commands_line_to_CImgList(commands_line); > > > try { > parse(items,images,images_names); > } catch (gmic_exception &e) { > print(images,0,"Abort G'MIC instance.\n"); > throw e; > } >} > > > >template<typename T> >gmic& gmic::print_images(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection, const bool is_header) { > if (!images || !images_names || !selection) { > if (is_header) print(images,0,"Print image []."); > return *this; > } > char title[256] = { 0 }; > if (is_header) print(images,0,"Print image%s.\n", > selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = images[ind]; > bool is_valid = true; > int _verbosity = verbosity; > bool _is_debug = is_debug; > verbosity = -1; is_debug = false; > try { check_image(images,img); } catch (gmic_exception&) { is_valid = false; } > verbosity = _verbosity; is_debug = _is_debug; > snprintf(title,sizeof(title),"[%u] = '%s'", > ind,images_names[ind].data()); > { if (sizeof(title)>=5 && title[sizeof(title)-2]) title[sizeof(title)-4] = title[sizeof(title)-3] = title[sizeof(title)-2] = '.'; }; > img.gmic_print(title,is_debug,is_valid); > } > nb_carriages = 0; > return *this; >} > > > > > >template<typename T> >gmic& gmic::display_images(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection, unsigned int *const XYZ) { > if (!images || !images_names || !selection) { print(images,0,"Display image []."); return *this; } ># 3105 "gmic.cpp" > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0,"Display image%s",selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) { > if (XYZ) std::fprintf(cimg::output(),", from point (%u,%u,%u)",XYZ[0],XYZ[1],XYZ[2]); > std::fprintf(cimg::output()," (console output only, no display available).\n"); > std::fflush(cimg::output()); > print_images(images,images_names,selection,false); > } > } > if (!is_available_display) return *this; > > CImgList<T> visu; > CImg<bool> is_valid(1,selection.height(),1,1,true); > for (int l = 0; l<(int)((selection)._height); ++l) { > const CImg<T>& img = images[selection[l]]; > int _verbosity = verbosity; > bool _is_debug = is_debug; > verbosity = -1; is_debug = false; > try { check_image(images,img); } catch (gmic_exception&) { is_valid[l] = false; } > verbosity = _verbosity; is_debug = _is_debug; > } > > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = images[ind]; > if (img && is_valid[l]) visu.insert(img,~0U,true); > else visu.insert(1); > } > const CImg<char> _gmic_names = selection2string(selection,images_names,false); > const char *const gmic_names = _gmic_names.data(); > print(images,0,"Display image%s = '%s'",selection2string(selection,images_names,true).data(),gmic_names); > if (verbosity>=0 || is_debug) { > if (XYZ) std::fprintf(cimg::output(),", from point (%u,%u,%u).\n",XYZ[0],XYZ[1],XYZ[2]); > else std::fprintf(cimg::output(),".\n"); > std::fflush(cimg::output()); > } > if (visu) { > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > char title[256] = { 0 }; > if (visu.size()==1) > snprintf(title,sizeof(title),"%s (%dx%dx%dx%d)", > gmic_names, > visu[0].width(),visu[0].height(),visu[0].depth(),visu[0].spectrum()); > else > snprintf(title,sizeof(title),"%s (%u)", > gmic_names,visu.size()); > { if (sizeof(title)>=5 && title[sizeof(title)-2]) title[sizeof(title)-4] = title[sizeof(title)-3] = title[sizeof(title)-2] = '.'; }; > CImg<bool> is_shared(visu.size()); > for (int l = 0; l<(int)(visu)._width; ++l) { > is_shared[l] = visu[l].is_shared(); > visu[l]._is_shared = images[selection[l]].is_shared(); > } > print_images(images,images_names,selection,false); > if (disp) visu.display(disp.set_title("%s",title),false,'x',0.5f,XYZ); > else visu.display(title,false,'x',0.5f,XYZ); > nb_carriages = 0; > for (int l = 0; l<(int)(visu)._width; ++l) visu[l]._is_shared = is_shared(l); > } > > return *this; >} > > > >template<typename T> >gmic& gmic::display_plots(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection, > const unsigned int plot_type, const unsigned int vertex_type, > const double xmin, const double xmax, > const double ymin, const double ymax) { > if (!images || !images_names || !selection) { print(images,0,"Plot image []."); return *this; } > > > > > > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0,"Plot image%s (console output only, no display available).",selection2string(selection,images_names,true).data()); > print_images(images,images_names,selection,false); > } > if (!is_available_display) return *this; > > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-plot': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = images[ind]; > if (img) { > print(images,0,"Plot image%s = '%s'.",selection2string(selection,images_names,true).data(), > selection2string(selection,images_names,false).data()); > if (verbosity>=0 || is_debug) { > std::fputc('\n',cimg::output()); > std::fflush(cimg::output()); > img.print(images_names[ind].data()); > } > if (!disp) disp.assign(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),0,0); > img.display_graph(disp.set_title("%s%s (%dx%dx%dx%d)", > gmic_basename(images_names[ind].data()), > images_names[ind].back()?"*":"", > img.width(),img.height(),img.depth(),img.spectrum()), > plot_type,vertex_type,0,xmin,xmax,0,ymin,ymax); > nb_carriages = 0; > } > } > > return *this; >} > > > >template<typename T> >gmic& gmic::display_objects3d(const CImgList<T>& images, const CImgList<char>& images_names, > const CImg<unsigned int>& selection) { > if (!images || !images_names || !selection) { > print(images,0,"Display 3d object []."); > return *this; > } > char message[1024] = { 0 }; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection[l]]).is_CImg3d(true,message)) > error(images,0,0, > "Command '-display3d': Invalid 3d object [%d] in selected image%s (%s).", > selection[l],selection2string(selection,images_names,true).data(),message); > > > > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0,"Display 3d object%s (skipped, no display available).",selection2string(selection,images_names,true).data()); > } > if (!is_available_display) return *this; > > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = images[ind]; > if (!disp) disp.assign(CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,false),CImgDisplay::_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1,128,-85,true),0,0); > CImg<unsigned char> background = background3d.get_resize(disp.width(),disp.height(),1,3); > background.display(disp); > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > CImgList<float> opacities; > CImg<float> vertices(img,false); > float _pose3d[16] = { 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 }; > if (pose3d) std::memcpy(_pose3d,pose3d.data(),16*sizeof(float)); > vertices.CImg3dtoobject3d(primitives,colors,opacities,false); > print(images,0,"Display 3d object [%u] = '%s%s' (%d vertices, %u primitives).", > ind,images_names[ind].data(), > images_names[ind].back()?"*":"", > vertices.width(),primitives.size()); > disp.set_title("%s%s (%d vertices, %u primitives)", > gmic_basename(images_names[ind].data()), > images_names[ind].back()?"*":"", > vertices.width(),primitives.size()); > if (light3d) colors.insert(light3d,~0U,true); > background.display_object3d(disp,vertices,primitives,colors,opacities, > !(bool)pose3d,render3d,renderd3d,is_double3d,focale3d, > light3d_x,light3d_y,light3d_z, > specular_lightness3d,specular_shininess3d, > true,_pose3d); > print(images,0,"Selected 3d pose = [ %g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g ].", > _pose3d[0],_pose3d[1],_pose3d[2],_pose3d[3], > _pose3d[4],_pose3d[5],_pose3d[6],_pose3d[7], > _pose3d[8],_pose3d[9],_pose3d[10],_pose3d[11], > _pose3d[12],_pose3d[13],_pose3d[14],_pose3d[15]); > if (disp.is_closed()) break; > } > > return *this; >} > > > > > >template<typename T> >CImg<char> gmic::substitute_item(const char *const source, > CImgList<T>& images, > CImgList<char>& images_names, > unsigned int variables_sizes[256]) { > if (!source) return CImg<char>(); > CImgList<char> substituted_items; > CImg<char> inbraces; > > for (const char *nsource = source; *nsource; ) > if (*nsource!='@' && *nsource!='{' && *nsource!='$') { > > const char *const nsource0 = nsource; > do { ++nsource; } while (*nsource && *nsource!='@' && *nsource!='{' && *nsource!='$'); > CImg<char>(nsource0,nsource - nsource0).move_to(substituted_items); > } else { > CImg<char> substr(256); > CImg<unsigned int> _ind; > if (inbraces) *inbraces = 0; else inbraces.assign(1,1,1,1,0); > int ind = 0, l_inbraces = 0; > bool is_braces = false; > char end, sep = 0; > > > if (*nsource=='{') { > const char *const ptr_beg = nsource + 1, *ptr_end = ptr_beg; > unsigned int p = 0; > for (p = 1; p>0 && *ptr_end; ++ptr_end) { if (*ptr_end=='{') ++p; if (*ptr_end=='}') --p; } > if (p) { CImg<char>(nsource++,1).move_to(substituted_items); continue; } > l_inbraces = ptr_end - ptr_beg - 1; > if (l_inbraces>0) { > inbraces.assign(ptr_beg,l_inbraces + 1).back() = 0; > substitute_item(inbraces,images,images_names,variables_sizes).move_to(inbraces); > gmic_strreplace(inbraces); > } > nsource+=l_inbraces + 2; > if (*inbraces) { > const CImg<T>& img = images.size()?check_image(images,images.back()):CImg<T>::empty(); > bool is_substitution_done = false; > > > if (!inbraces[1]) { > switch (*inbraces) { > case 'w' : > snprintf(substr,substr.width(),"%d",img.width()); > is_substitution_done = true; > break; > case 'h' : > snprintf(substr,substr.width(),"%d",img.height()); > is_substitution_done = true; > break; > case 'd' : > snprintf(substr,substr.width(),"%d",img.depth()); > is_substitution_done = true; > break; > case 's' : > snprintf(substr,substr.width(),"%d",img.spectrum()); > is_substitution_done = true; > break; > } > if (is_substitution_done) > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } > > > if (!is_substitution_done && inbraces.width()>=3 && *inbraces=='\'' && > inbraces[inbraces.width()-2]=='\'') { > const char *s = inbraces.data() + 1; > if (inbraces.width()>3) { > inbraces[inbraces.width()-2] = 0; > for (*substr=0, cimg::strunescape(inbraces); *s; ++s) { > snprintf(substr,substr.width(),"%d,",(int)(unsigned char)*s); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } > if (*substr) --(substituted_items.back()._width); > } > is_substitution_done = true; > } > > > if (!is_substitution_done && inbraces.width()>=3 && *inbraces=='`' && > inbraces[inbraces.width()-2]=='`') { > if (inbraces.width()>3) { > unsigned int nb_values = 1; > for (char *p = (inbraces)._data, *_maxp = (inbraces)._data + (inbraces).size(); p<_maxp; ++p) if (*p==',') ++nb_values; > inbraces[inbraces.width()-2] = 0; > try { > CImg<char>(nb_values,1,1,1,inbraces.data()+1,false).move_to(substituted_items); > is_substitution_done = true; > } catch (CImgException &e) { > const char *const e_ptr = std::strstr(e.what(),": "); > error(images,0,0, > "Item substitution '{`value1,..,valueN`}': %s", > e_ptr?e_ptr+2:e.what()); > } > } > is_substitution_done = true; > } > > > if (!is_substitution_done && inbraces.width()>=5) { > char *const peq = std::strstr(inbraces,"'=='"); > if (peq) { > *peq = 0; > snprintf(substr,substr.width(),"%d",(int)!std::strcmp(inbraces,peq+4)); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } else { > char *const pne = std::strstr(inbraces,"'!='"); > if (pne) { > *pne = 0; > snprintf(substr,substr.width(),"%d",(int)std::strcmp(inbraces,pne+4)); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } > } > } > > > if (!is_substitution_done && inbraces.width()>=3 && *inbraces=='_') try { > snprintf(substr,substr.width(),"%g",img.eval(inbraces.data(1))); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } catch (CImgException& e) { > const char *const e_ptr = std::strstr(e.what(),": "); > error(images,0,0, > "Item substitution '{_expression}': %s", > e_ptr?e_ptr+2:e.what()); > } > > > if (!is_substitution_done) try { > snprintf(substr,substr.width(),"%.16g",img.eval(inbraces.data())); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } catch (CImgException& e) { > const char *const e_ptr = std::strstr(e.what(),": "); > error(images,0,0, > "Item substitution '{expression}': %s", > e_ptr?e_ptr+2:e.what()); > } > } else error(images,0,0, > "Item substitution '{}': empty braces."); > continue; > > > } else if (nsource[1]=='{') { > const char *const ptr_beg = nsource + 2, *ptr_end = ptr_beg; unsigned int p = 0; > for (p = 1; p>0 && *ptr_end; ++ptr_end) { if (*ptr_end=='{') ++p; if (*ptr_end=='}') --p; } > if (p) { CImg<char>(nsource++,1).move_to(substituted_items); continue; } > l_inbraces = ptr_end - ptr_beg - 1; > if (l_inbraces>0) { > inbraces.assign(ptr_beg,l_inbraces + 1).back() = 0; > substitute_item(inbraces,images,images_names,variables_sizes).move_to(inbraces); > } > is_braces = true; > } > > > if (*nsource=='@' && nsource[1]=='#') { > nsource+=2; > snprintf(substr,substr.width(),"%u",images.size()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='*') { > nsource+=2; > snprintf(substr,substr.width(),"%u",cimg::nb_cpus()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='^') { > nsource+=2; > snprintf(substr,substr.width(),"%d",verbosity); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='.') { > nsource+=2; > snprintf(substr,substr.width(),"%u",1593); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='%') { > nsource+=2; > > snprintf(substr,substr.width(),"%u",(unsigned int)getpid()); > > > > > > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='|') { > nsource+=2; > snprintf(substr,substr.width(),"%g",(cimg::time()-reference_time)/1000.); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='?') { > nsource+=2; > snprintf(substr,substr.width(),"%s",CImg<T>::pixel_type()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='!') { > nsource+=2; > > > > snprintf(substr,substr.width(),"%d", > instant_window[0]?(instant_window[0].is_closed()?0:1):0); > > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > > } else if (*nsource=='@' && inbraces[0]=='!' && > (inbraces[1]==0 || > (inbraces[1]>='0' && inbraces[1]<='9' && inbraces[2]==0) || > (inbraces[1]==',' && inbraces[2]) || > (inbraces[1]>='0' && inbraces[1]<='9' && inbraces[2]==',' && inbraces[3]))) { > nsource+=l_inbraces + 3; > > > > unsigned int wind = 0; > bool is_substitution_done = true; > const char *ninbraces = inbraces.data() + 1; > if (*ninbraces>='0' && *ninbraces<='9') wind = (unsigned int)(*(ninbraces++)-'0'); > if (!*ninbraces) > snprintf(substr,substr.width(),"%d", > instant_window[wind]?(instant_window[wind].is_closed()?0:1):0); > else if (*ninbraces==',') switch (*(++ninbraces)) { > case 'w' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].width()); > else if (ninbraces[1]=='h' && !ninbraces[2]) > snprintf(substr,substr.width(),"%d", > instant_window[wind].width()*instant_window[wind].height()); > else is_substitution_done = false; > break; > case 'h' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].height()); > else is_substitution_done = false; > break; > case 'd' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].window_width()); > else if (ninbraces[1]=='e' && !ninbraces[2]) > snprintf(substr,substr.width(),"%d", > instant_window[wind].window_width()* > instant_window[wind].window_height()); > else is_substitution_done = false; > break; > case 'e' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].window_height()); > else is_substitution_done = false; > break; > case 'u' : > if (!ninbraces[1]) try { > snprintf(substr,substr.width(),"%d",CImgDisplay::screen_width()); > } catch (CImgDisplayException&) { std::strcpy(substr,"0"); } > else if (ninbraces[1]=='v' && !ninbraces[2]) try { > snprintf(substr,substr.width(),"%d", > CImgDisplay::screen_width()*CImgDisplay::screen_height()); > } catch (CImgDisplayException&) { std::strcpy(substr,"0"); } > else is_substitution_done = false; > break; > case 'v' : > if (!ninbraces[1]) try { > snprintf(substr,substr.width(),"%d",CImgDisplay::screen_height()); > } catch (CImgDisplayException&) { std::strcpy(substr,"0"); } > else is_substitution_done = false; > break; > case 'x' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].mouse_x()); > else is_substitution_done = false; > break; > case 'y' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].mouse_y()); > else is_substitution_done = false; > break; > case 'n' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].normalization()); > else is_substitution_done = false; > break; > case 'b' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].button()); > else is_substitution_done = false; > break; > case 'o' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",instant_window[wind].wheel()); > else is_substitution_done = false; > break; > case 'c' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",(int)instant_window[wind].is_closed()); > else is_substitution_done = false; > break; > case 'r' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",(int)instant_window[wind].is_resized()); > else is_substitution_done = false; > break; > case 'm' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%d",(int)instant_window[wind].is_moved()); > else is_substitution_done = false; > break; > case 'k' : > if (!ninbraces[1]) > snprintf(substr,substr.width(),"%u",instant_window[wind].key()); > else is_substitution_done = false; > break; > default : > snprintf(substr,substr.width(),"%d",instant_window[wind].is_key(ninbraces)); > } else snprintf(substr,substr.width(),"@{!%s}",inbraces.data()); > if (!is_substitution_done) std::strcpy(substr,"0"); > > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && nsource[1]=='/') { > nsource+=2; > snprintf(substr,substr.width(),"%u",scope.size()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (*nsource=='@' && inbraces[0]=='/' && > (inbraces[1]==0 || (inbraces[1]==',' && inbraces[2]))) { > nsource+=l_inbraces + 3; > const CImg<unsigned int> > subset = selection2cimg(inbraces[1]?inbraces.data()+2:0,scope.size(), > CImgList<char>::empty(), > "Item substitution '@{/[,subset]}'",false, > false,CImg<char>::empty()); > if (subset) for (unsigned long i = 0, _maxi = (subset).size(); i<_maxi; ++i) > substituted_items.insert(scope[subset[i]]).back().back() = '/'; > > > } else if (*nsource=='$' && nsource[1]=='/') { > snprintf(substr,substr.width(),"%s",scope.back().data()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > nsource+=2; > > > } else if (*nsource=='@' && (nsource[1]=='>' || nsource[1]=='<')) { > nsource+=2; > snprintf(substr,substr.width(),"%u",repeatdones.size()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > > } else if (*nsource=='@' && (*inbraces=='>' || *inbraces=='<') && > (inbraces[1]==0 || (inbraces[1]==',' && inbraces[2]))) { > nsource+=l_inbraces + 3; > const CImg<unsigned int> > subset = selection2cimg(inbraces[1]?inbraces.data()+2:0,repeatdones.size(), > CImgList<char>::empty(), > "Item substitution '@{>[,subset]}'",false, > false,CImg<char>::empty()); > if (subset) { > for (unsigned long i = 0, _maxi = (subset).size(); i<_maxi; ++i) { > snprintf(substr,substr.width(),"%u", > *inbraces=='>'?repeatdones(subset[i],2):repeatdones(subset[i],1)-1); > CImg<char>::string(substr.data()).move_to(substituted_items).back().back()=','; > } > --(substituted_items.back()._width); > } > > > } else if (*nsource=='$' && > (nsource[1]=='>' || nsource[1]=='<' || > ((*inbraces=='>' || *inbraces=='<') && inbraces[1]==0))) { > const char direction = is_braces?*inbraces:nsource[1]; > if (!repeatdones) > error(images,0,0, > "Item substitution '$%s': There is no loop currently running.", > is_braces?(direction=='>'?"{>}":"{<}"):(direction=='>'?">":"<")); > snprintf(substr,substr.width(),"%u", > direction=='>'?repeatdones.back()(2):repeatdones.back()(1)-1); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > nsource+=is_braces?4:2; > > > } else if (*nsource=='$' && > (((is_braces && std::sscanf(inbraces,"%255[a-zA-Z0-9_]",substr.data())==1)) || > (std::sscanf(nsource+1,"%255[a-zA-Z0-9_]",substr.data())==1)) && > (*substr<'0' || *substr>'9')) { > const CImg<char>& name = is_braces?inbraces:substr; > const unsigned int sind = gmic_hashcode(name,true); > const bool is_global = *name=='_'; > const int lind = is_global?0:(int)variables_sizes[sind]; > if (is_global) cimg::mutex(29); > const CImgList<char> > &__variables = *variables[sind], > &__variables_names = *variables_names[sind]; > bool is_name_found = false; > for (int l = __variables.width()-1; l>=lind; --l) > if (!std::strcmp(__variables_names[l],name)) { > is_name_found = true; ind = l; break; > } > if (is_name_found) { > if (__variables[ind].size()>1) > CImg<char>(__variables[ind].data(),__variables[ind].size()-1). > move_to(substituted_items); > } else { > for (int l = images.width()-1; l>=0; --l) > if (images_names[l] && !std::strcmp(images_names[l],name)) { > is_name_found = true; ind = l; break; > } > if (is_name_found) { > char text[64]; > snprintf(text,sizeof(text),"%d",ind); > CImg<char>(text,std::strlen(text)).move_to(substituted_items); > } else { > const char *const s_env = std::getenv(name); > if (s_env) CImg<char>(s_env,std::strlen(s_env)).move_to(substituted_items); > } > } > if (is_global) cimg::mutex(29,0); > nsource+=is_braces?l_inbraces + 3:std::strlen(substr)+1; > > > } else if (*nsource=='@' && (std::sscanf(nsource+1,"%d",&ind)==1 || > ((end=0),std::sscanf(inbraces,"%d%c",&ind,&end)==1) || > ((end=1),std::sscanf(inbraces,"%d,%c",&ind,&sep)==2) || > (std::sscanf(nsource+1,"%255[a-zA-Z0-9_]",substr.data())==1 && > (_ind=selection2cimg(substr,images.size(),images_names, > "Item substitution '@name'",true, > false,CImg<char>::empty())).height()>0) || > (((end=0),std::sscanf(inbraces,"%255[a-zA-Z0-9_]%c", > substr.data(),&end)==1) && > (_ind=selection2cimg(substr,images.size(),images_names, > "Item substitution '@{name}'",true, > false,CImg<char>::empty())).height()>0) || > (((end=1),std::sscanf(inbraces,"%255[a-zA-Z0-9_],%c", > substr.data(),&sep)==2) && > (_ind=selection2cimg(substr,images.size(),images_names, > "Item substitution '@{name,feature}'", > true,false, > CImg<char>::empty())).height()>0))) { > if (_ind) { > if (_ind.height()>1) > error(images,0,0, > "Item substitution '%s': Selection [%s] specifies %d items.", > !*inbraces?"@name":end?"@{name,feature}":"@{name}", > substr.data(),_ind.height()); > ind=*_ind; > } > const unsigned int > l_ind = _ind?std::strlen(substr):snprintf(substr,substr.width(),"%d",ind); > nsource+=is_braces?l_inbraces + 3:l_ind + 1; > int nind = ind; > if (nind<0) nind+=images.width(); > if (nind<0 || nind>=images.width()) { > if (images.width()) > error(images,0,0, > "Item substitution '%s': Invalid indice '%d' (not in range -%u..%u).", > !*inbraces?"@indice":end?"@{indice,feature}":"@{indice}", > ind,images.size(),images.size()-1); > else > error(images,0,0, > "Item substitution '%s': Invalid indice '%d' (no image data available).", > !*inbraces?"@indice":end?"@{indice,feature}":"@{indice}",ind); > } > const CImg<T>& img = check_image(images,images[nind]); > char argx[256], argy[256], argz[256], argc[256]; > *argx = *argy = *argz = *argc = 0; > char sepp = 0, sepx = 0, sepy = 0, sepz = 0, sepc = 0; > float x = 0, y = 0, z = 0, v = 0, bcond = 0; > bool is_substitution_done = false; > const char *subset = sep?inbraces.data() + l_ind + 1:&sep; > *substr = 0; > > > if (*subset) { > is_substitution_done = true; > switch (*subset) { > case 'w' : > if (subset[1]=='h') { > if (subset[2]=='d') { > if (subset[3]=='s' && !subset[4]) > snprintf(substr,substr.width(),"%d", > img.width()*img.height()*img.depth()*img.spectrum()); > else if (!subset[3]) > snprintf(substr,substr.width(),"%d", > img.width()*img.height()*img.depth()); > else is_substitution_done = false; > } else if (!subset[2]) > snprintf(substr,substr.width(),"%d",img.width()*img.height()); > else is_substitution_done = false; > } else if (!subset[1]) > snprintf(substr,substr.width(),"%d",img.width()); > else is_substitution_done = false; > break; > case 'h' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.height()); > else is_substitution_done = false; > break; > case 'd' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.depth()); > else is_substitution_done = false; > break; > case 's' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.spectrum()); > else is_substitution_done = false; > break; > case 'r' : > if (!subset[1]) snprintf(substr,substr.width(),"%d",img.is_shared()); > else is_substitution_done = false; > break; > case 'n' : > if (!subset[1]) { > snprintf(substr,substr.width(),"%s",images_names[nind].data()); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } > else is_substitution_done = false; > break; > case 'b' : > if (!subset[1]) { > cimg::split_filename(images_names[nind].data(),substr); > const char *const basename = cimg::basename(substr); > if (substr.data()!=basename) > substr.draw_image(CImg<char>::string(basename)); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } else is_substitution_done = false; > break; > case 'x' : > if (!subset[1]) { > snprintf(substr,substr.width(),"%s", > cimg::split_filename(images_names[nind].data())); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } > else is_substitution_done = false; > break; > case 'f' : > if (!subset[1]) { > CImg<char> _substr(images_names[nind]); > char *const basename = const_cast<char*>(cimg::basename(_substr)); > *basename = 0; > std::strcpy(substr,_substr); > for (char *ps = substr.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > } else is_substitution_done = false; > break; > case '#' : > if (!subset[1]) snprintf(substr,substr.width(),"%lu",img.size()); > else is_substitution_done = false; > break; > case '+' : > if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res+=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case '-' : > if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res-=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case '*' : > if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res*=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case '/' : if (!subset[1]) { > double res = img?(double)img.front():0; > for (const T *ptrs = img.data() + 1, *ptre = img.end(); ptrs<ptre; > res/=(double)*ptrs++) {} > snprintf(substr,substr.width(),"%.16g",res); > } else is_substitution_done = false; > break; > case 'm' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",(double)img.min()); > else is_substitution_done = false; > break; > case 'M' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",(double)img.max()); > else is_substitution_done = false; > break; > case 'a' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",img.mean()); > else is_substitution_done = false; > break; > case 'v' : > if (!subset[1]) snprintf(substr,substr.width(),"%.16g",img.variance()); > else is_substitution_done = false; > break; > case 't' : > if (!subset[1]) { > const unsigned int siz = (unsigned int)img.size(); > if (siz) { > unsigned int strsiz = 0; > for (T *ptr = (img)._data, *_maxptr = (img)._data + (img).size(); ptr<_maxptr; ++ptr) if ((unsigned char)*ptr) ++strsiz; > if (strsiz) { > CImg<char> text(strsiz+1), _text = text.get_shared_points(0,strsiz-1,0,0,0); > _text = CImg<T>(img.data(),strsiz,1,1,1,true); > text.back() = 0; > for (char *ps = _text.data(); *ps; ++ps) > *ps = *ps=='$'?_dollar:*ps=='{'?_lbrace:*ps=='}'?_rbrace: > *ps==','?_comma:*ps=='\"'?_dquote:*ps=='@'?_arobace:*ps; > _text.move_to(substituted_items); > } > } > *substr = 0; > } else is_substitution_done = false; > break; > case 'c' : > if (!subset[1]) { > CImg<unsigned int> st; > if (img) st = img.get_stats(); else st.assign(8,1,1,1,0); > snprintf(substr,substr.width(),"%u,%u,%u,%u",st[4],st[5],st[6],st[7]); > } else is_substitution_done = false; > break; > case 'C' : > if (!subset[1]) { > CImg<unsigned int> st; > if (img) st = img.get_stats(); else st.assign(12,1,1,1,0); > snprintf(substr,substr.width(),"%u,%u,%u,%u",st[8],st[9],st[10],st[11]); > } else is_substitution_done = false; > break; > default : is_substitution_done = false; > } > > > if (is_substitution_done) { > if (*substr) CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } else if ((std::sscanf(subset,"(%255[0-9.eE%+-]%c%c", > argx,&sepp,&end)==2 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-]%c%c", > argx,argy,&sepp,&end)==3 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c%c", > argx,argy,argz,&sepp,&end)==4 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c%c", > argx,argy,argz,argc,&sepp,&end)==5 || > std::sscanf(subset,"(%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f%c%c", > argx,argy,argz,argc,&bcond,&sepp,&end)==6) && > sepp==')' && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&v,&end)==1 || > (std::sscanf(argc,"%f%c%c",&v,&sepc,&end)==2 && sepc=='%'))) { > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z), > nv = (int)cimg::round(sepc=='%'?v*(img.spectrum()-1)/100:v); > snprintf(substr,substr.width(),"%.16g", > bcond?(double)img.atXYZC(nx,ny,nz,nv):(double)img.atXYZC(nx,ny,nz,nv,0)); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > is_substitution_done = true; > } > } > > > if (!is_substitution_done) { > CImg<T> values; > is_substitution_done = true; > if (!*subset) values = img.get_shared(); > else { > int _verbosity = verbosity; > bool _is_debug = is_debug; > verbosity = -1; is_debug = false; > try { > const CImg<unsigned int> > inds = selection2cimg(subset,img.size(), > CImgList<char>::empty(),"",false,false,CImg<char>::empty()); > values.assign(1,inds.height()); > for (unsigned long p = 0, _maxp = (inds).size(); p<_maxp; ++p) values[p] = img[inds(p)]; > } catch (gmic_exception&) { > is_substitution_done = false; > } > verbosity = _verbosity; is_debug = _is_debug; > } > if (is_substitution_done) { > for (unsigned long p = 0, _maxp = (values).size(); p<_maxp; ++p) { > snprintf(substr,substr.width(),"%.16g",(double)values[p]); > CImg<char>::string(substr).move_to(substituted_items).back().back() = ','; > } > if (values) --(substituted_items.back()._width); > } > } > > > if (!is_substitution_done) { > try { > snprintf(substr,substr.width(),"%.16g",img.eval(subset)); > } catch (CImgException&) { > error(images,0,0, > "Item substitution '@{%d,%s}': Invalid argument '%s'.", > ind,subset,subset); > } > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > } > > > } else if (!is_braces || *nsource!='@') CImg<char>(nsource++,1).move_to(substituted_items); > > > else { > nsource+=l_inbraces + 3; > if (l_inbraces>0) { > const CImgList<char> > ncommands_line = commands_line_to_CImgList(gmic_strreplace(inbraces)); > unsigned int nposition = 0; > CImg<char>::string("*substitute").move_to(scope); > unsigned int nvariables_sizes[256]; > for (unsigned int l = 0; l<256; ++l) nvariables_sizes[l] = variables[l]->size(); > _parse(ncommands_line,nposition,images,images_names,nvariables_sizes); > for (unsigned int l = 0; l<255; ++l) if (variables[l]->size()>nvariables_sizes[l]) { > variables_names[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > variables[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > } > scope.remove(); > is_return = false; > } > if (status.width()>1) > CImg<char>(status.data(),std::strlen(status)).move_to(substituted_items); > continue; > } > } > CImg<char>::vector(0).move_to(substituted_items); > return substituted_items>'x'; >} > > > >template<typename T> >gmic& gmic::_parse(const CImgList<char>& commands_line, unsigned int& position, > CImgList<T> &images, CImgList<char> &images_names, > unsigned int variables_sizes[256]) { > > > typedef typename cimg::superset<T,float>::type Tfloat; > typedef typename cimg::superset<T,long>::type Tlong; > > > const unsigned int initial_scope_size = scope.size(), initial_debug_line = debug_line; > bool is_endlocal = false; > char end; > > > > CImgList<st_gmic_parallel<T> > threads_data; > static CImgList<st_gmic_parallel<T> > global_threads_data; > > CImg<char> _formula(4096), _title(256), _indices(256), > _argx(256), _argy(256), _argz(256), _argc(256); > char > *const formula = _formula.fill(0).data(), > *const title = _title.fill(0).data(), > *const indices = _indices.fill(0).data(), > *const argx = _argx.fill(0).data(), > *const argy = _argy.fill(0).data(), > *const argz = _argz.fill(0).data(), > *const argc = _argc.fill(0).data(); > > > CImg<char> _color(4096); > char *const color = _color.data(); > > > try { > > > cimg::exception_mode() = 0; > if (images.size()<images_names.size()) > images_names.remove(images.size(),images_names.size()-1); > else if (images.size()>images_names.size()) > images_names.insert(images.size() - images_names.size(),CImg<char>::string("[unnamed]")); > > is_debug_infos = false; > if (is_debug) { > nb_carriages = 2; > debug(images,"%sStart G'MIC parser in scope '%s/' [%s].%s", > cimg::t_bold,scope.back().data(),CImg<T>::pixel_type(),cimg::t_normal); > is_start = false; > } > > > if (!commands_line && is_start) { print(images,0,"Start G'MIC parser."); is_start = false; } > while (position<commands_line.size() && !is_quit && !is_return) { > > > while (position<commands_line.size() && *commands_line[position]==1) { > const CImg<char> &code = commands_line[position]; > if (!code[1]) ++debug_line; > else if (!std::sscanf(code.data()+1,"%x,%x",&debug_line,&(debug_filename=0))) > debug_filename = debug_line = ~0U; > else is_debug_infos = true; > ++position; > } > if (position>=commands_line.size()) continue; > > > if (images_names.size()!=images.size()) > error("Internal error: Images (%u) and images names (%u) have different size.", > images_names.size(),images.size()); > if (!scope) > error("Internal error: Scope is empty."); > if (scope.size()>64) > error("Scope overflow (infinite recursion ?)."); > > > const char > *const initial_item = commands_line[position].data(), > *const initial_argument = position+1<commands_line.size()?commands_line[position+1].data(): > ""; > > CImg<char> _item, _argument, _argument_text; > substitute_item(initial_item,images,images_names,variables_sizes).move_to(_item); > char *item = _item.data(); > const char *argument = initial_argument, *argument_text = initial_argument; > > > CImg<char> _command(256), _restriction(256); > char *const command = _command.data(), *const restriction = _restriction.data(); > *command = *restriction = 0; > > bool is_get_version = false, is_restriction = false; > CImg<unsigned int> selection; > CImg<char> new_name; > if (item[0]=='-' && item[1] && item[1]!='.') { > char sep0 = 0, sep1 = 0; > if (item[1]=='-' && item[2] && item[2]!='[' && (item[2]!='3' || item[3]!='d')) { > ++item; is_get_version = true; > } > gmic_strreplace(item); > const int err = std::sscanf(item,"%255[^[]%c%255[a-zA-Z_0-9.eE%^,:+-]%c%c", > command,&sep0,restriction,&sep1,&end); > if (err==1) selection = CImg<unsigned int>::sequence(images.size(),0,images.size()-1); > else if (err==2 && sep0=='[' && item[std::strlen(command)+1]==']') { > selection.assign(); is_restriction = true; > } else if (err==4 && sep1==']') { > is_restriction = true; > if ((!std::strcmp("-wait",command) || !std::strcmp("-cursor",command)) && !is_get_version) > selection = selection2cimg(restriction,10,CImgList<char>::empty(),command,true, > false,CImg<char>::empty()); > else if ((!std::strcmp("-i",command) || !std::strcmp("-input",command)) && > !is_get_version) > selection = selection2cimg(restriction,images.size()+1,images_names,command,true, > true,new_name); > else if ((!std::strcmp("-e",command) || !std::strcmp("-echo",command) || > !std::strcmp("-error",command) || !std::strcmp("-warn",command)) && > !is_get_version) > selection = selection2cimg(restriction,scope.size(),CImgList<char>::empty(), > command,true,false,CImg<char>::empty()); > else > selection = selection2cimg(restriction,images.size(),images_names,command,true, > false,CImg<char>::empty()); > } else { > std::strncpy(command,item,_command.size()-1); > command[_command.size()-1] = *restriction = 0; > } > if (is_get_version) --item; > } else { > std::strncpy(command,item,_command.size()-1); > command[_command.size()-1] = *restriction = 0; > } > ++position; > > if (is_debug) { > const char *const _initial_item = initial_item+(is_get_version?1:0); > if (std::strcmp(item,_initial_item)) > debug(images,"Item '%s' -> '%s', indice%s.", > _initial_item,item,selection2string(selection,images_names,true).data()); > else > debug(images,"Item '%s', indice%s.", > _initial_item,selection2string(selection,images_names,true).data()); > } > > > bool is_verbose_argument = false; > const int old_verbosity = verbosity; > if (!std::strcmp("-v",item) || !std::strcmp("-verbose",item)) { > > if (*argument=='-' && !argument[1]) { --verbosity; is_verbose_argument = true; } > else if (*argument=='+' && !argument[1]) { ++verbosity; is_verbose_argument = true; } > else { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (*argument=='-' && !argument[1]) { --verbosity; is_verbose_argument = true; } > else if (*argument=='+' && !argument[1]) { ++verbosity; is_verbose_argument = true; } > else { > float level = 0; > if (std::sscanf(argument,"%f%c",&level,&end)==1) { > verbosity = (int)cimg::round(level); > is_verbose_argument = true; > } > else verbosity = 0; > } > } > } > if (is_start) { print(images,0,"Start G'MIC parser."); is_start = false; } > > > if (*cancel) { > if (verbosity>0 || is_debug) print(images,0,"Cancel G'MIC instance.\n"); > dowhiles.assign(); > repeatdones.assign(); > position = commands_line.size(); > is_released = is_quit = true; > break; > } > > > if (*item=='-' && item[1]) { > > > > > char _item[16] = { 0 }, command1 = command[1]; > const char > command2 = command1?command[2]:0, command3 = command2?command[3]:0, > command4 = command3?command[4]:0, command5 = command4?command[5]:0; > > if (!command2) switch (command1) { > case 'm' : if (!is_get_version && !is_restriction) { > std::strcpy(item=_item,"-command"); command1 = 'c'; > } break; > case 'd' : std::strcpy(command,"-display"); break; > case 'e' : std::strcpy(command,"-echo"); break; > case 'i' : std::strcpy(command,"-input"); break; > case 'o' : std::strcpy(command,"-output"); break; > case 'p' : std::strcpy(command,"-print"); break; > case 'v' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-verbose"); break; > case 'w' : std::strcpy(command,"-window"); break; > case 'k' : std::strcpy(command,"-keep"); break; > case '+' : std::strcpy(command,"-add"); command1 = 'a'; break; > case '&' : std::strcpy(command,"-and"); command1 = 'a'; break; > case '/' : std::strcpy(command,"-div"); command1 = 'd'; break; > case '>' : std::strcpy(command,"-gt"); command1 = 'g'; break; > case '<' : std::strcpy(command,"-lt"); command1 = 'l'; break; > case '%' : std::strcpy(command,"-mod"); command1 = 'm'; break; > case '*' : std::strcpy(command,"-mul"); command1 = 'm'; break; > case '|' : std::strcpy(command,"-or"); command1 = 'o'; break; > case '^' : std::strcpy(command,"-pow"); command1 = 'p'; break; > case '-' : std::strcpy(command,"-sub"); command1 = 's'; break; > case 'c' : std::strcpy(command,"-cut"); break; > case 'f' : std::strcpy(command,"-fill"); break; > case 'n' : std::strcpy(command,"-normalize"); break; > case '=' : std::strcpy(command,"-set"); command1 = 's'; break; > case 't' : std::strcpy(command,"-text"); break; > case 'a' : std::strcpy(command,"-append"); break; > case 'z' : std::strcpy(command,"-crop"); command1 = 'c'; break; > case 'r' : std::strcpy(command,"-resize"); break; > case 's' : std::strcpy(command,"-split"); break; > case 'y' : std::strcpy(command,"-unroll"); command1 = 'u'; break; > case 'b' : std::strcpy(command,"-blur"); break; > case 'g' : std::strcpy(command,"-gradient"); break; > case 'j' : std::strcpy(command,"-image"); command1 = 'i'; break; > case 'q' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-quit"); break; > case 'l' : std::strcpy(command,"-local"); break; > case 'u' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-status"); command1 = 's'; break; > case 'x' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-exec"); command1 = 'e'; break; > } else if (!command3) { > if (command1=='s' && command2=='h') std::strcpy(command,"-shared"); > else if (command1=='m' && command2=='v') std::strcpy(command,"-move"); > else if (command1=='n' && command2=='m') std::strcpy(command,"-name"); > else if (command1=='r' && command2=='m') std::strcpy(command,"-remove"); > else if (command1=='r' && command2=='v') std::strcpy(command,"-reverse"); > else if (command1=='<' && command2=='<') { std::strcpy(command,"-bsl"); command1 = 'b'; } > else if (command1=='>' && command2=='>') { std::strcpy(command,"-bsr"); command1 = 'b'; } > else if (command1=='=' && command2=='=') { std::strcpy(command,"-eq"); command1 = 'e'; } > else if (command1=='>' && command2=='=') { std::strcpy(command,"-ge"); command1 = 'g'; } > else if (command1=='<' && command2=='=') { std::strcpy(command,"-le"); command1 = 'l'; } > else if (command1=='/' && command2=='/') { > std::strcpy(command,"-mdiv"); command1 = 'm'; > } > else if (command1=='*' && command2=='*') { > std::strcpy(command,"-mmul"); command1 = 'm'; > } > else if (command1=='!' && command2=='=') { std::strcpy(command,"-neq"); command1 = 'n'; } > } else if (!command4 && command2=='3' && command3=='d') switch (command1) { > > case 'd' : std::strcpy(command,"-display3d"); break; > case '+' : std::strcpy(command,"-add3d"); command1 = 'a'; break; > case 'b' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-background3d"); break; > case '/' : std::strcpy(command,"-div3d"); command1 = 'd'; break; > case 'f' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-focale3d"); break; > case 'l' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-light3d"); break; > case 'm' : if (!is_get_version && !is_restriction) > std::strcpy(item=_item,"-mode3d"); break; > case '*' : std::strcpy(command,"-mul3d"); command1 = 'm'; break; > case 'o' : std::strcpy(command,"-opacity3d"); break; > case 'p' : std::strcpy(command,"-primitives3d"); break; > case 'r' : std::strcpy(command,"-rotate3d"); break; > case 's' : std::strcpy(command,"-split3d"); break; > case '-' : std::strcpy(command,"-sub3d"); command1 = 's'; break; > case 't' : std::strcpy(command,"-texturize3d"); break; > } else if (!command5 && command3=='3' && command4=='d') { > > if (command1=='d' && command2=='b') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-double3d"); > } else if (command1=='m' && command2=='d') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-moded3d"); > } > else if (command1=='r' && command2=='v') std::strcpy(command,"-reverse3d"); > else if (command1=='s' && command2=='l') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-specl3d"); > } > else if (command1=='s' && command2=='s') { > if (!is_get_version && !is_restriction) std::strcpy(item=_item,"-specs3d"); > } > } > > > if (new_name && std::strcmp("-input",command) && !is_get_version) > error(images,0,0, > "Item '%s %s': Unknow name '%s'.", > initial_item,initial_argument,new_name.data()); > > > > > if (command1=='a') { > > > if (!std::strcmp("-append",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float align = 0; > char axis = 0, sep = 0; > CImg<unsigned int> ind; > if ((std::sscanf(argument,"%c%c", > &axis,&end)==1 || > std::sscanf(argument,"%c,%f%c", > &axis,&align,&end)==2) && > (axis=='x' || axis=='y' || axis=='z' || axis=='c')) { > print(images,0,"Append image%s along the '%c'-axis, with alignment %g.", > selection2string(selection,images_names,true).data(), > axis,align); > if (selection) { > CImgList<T> subimages; > for (int l = 0; l<(int)((selection)._height); ++l) if (check_image(images,images[selection[l]])) > subimages.insert(check_image(images,images[selection[l]]),~0U,true); > CImg<T> img = subimages.get_append(axis,align); > CImg<char> name = images_names[selection[0]].get_mark(); > if (is_get_version) { > img.move_to(images); > images_names.insert(name.copymark()); > } else if (selection.height()>=2) { > remove_images(images,images_names,selection,1,selection.height()-1); > img.move_to(images[selection[0]].assign()); > name.move_to(images_names[selection[0]]); > } > } > } else if ((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c,%c%c", > indices,&sep,&axis,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c,%c,%f%c", > indices,&sep,&axis,&(align=0),&end)==4) && > (axis=='x' || axis=='y' || axis=='z' || axis=='c') && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-append",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Append image [%u] to image%s, along the '%c'-axis, with alignment %g.", > *ind,selection2string(selection,images_names,true).data(),axis,align); > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_append(img0,axis,align); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].append(img0,axis,align); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"append","Command '-%s': Invalid argument '%s'.","append",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-autocrop",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<T> is_arg; > if (*argument && std::sscanf(argument,"%4095[0-9.,eE+-]%c",formula,&end)==1) > try { CImg<T>(1).fill(argument,true).move_to(is_arg); } > catch (CImgException&) { is_arg.assign(); } > if (is_arg) { > print(images,0,"Auto-crop image%s by vector '%s'.", > selection2string(selection,images_names,true).data(), > argument_text); > ++position; > } else print(images,0,"Auto-crop image%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > if (is_arg) { > const CImg<T> col = CImg<T>(img.spectrum()).fill(argument,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_gmic_autocrop(col); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.gmic_autocrop(col); images_names[posi].mark(); } }; > } > else { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_gmic_autocrop(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.gmic_autocrop(); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > > > if (!std::strcmp("-add",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Add %g%s to image%s" ".",value,ssep,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator+=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator+=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-add", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Add image [%d] to image%s" ".",ind[0],selection2string(selection,images_names,true).data()); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator+=(img0); } else { images_names[selection[l]].mark(); img.operator+=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Add expression %s to image%s" ".",argument_text,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator+=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator+=((const char*)formula); } } ++position; } else { print(images,0,"Add image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator+=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator+=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4437 "gmic.cpp" > ; > > > if (!std::strcmp("-add3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float tx = 0, ty = 0, tz = 0; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"%f%c", > &tx,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &tx,&ty,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &tx,&ty,&tz,&end)==3) { > print(images,0,"Shift 3d object%s by displacement (%g,%g,%g).", > selection2string(selection,images_names,true).data(), > tx,ty,tz); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_shift_CImg3d(tx,ty,tz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.shift_CImg3d(tx,ty,tz); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-add3d",true, > false,CImg<char>::empty())).height()==1) { > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > print(images,0,"Merge 3d object%s with 3d object [%u].", > selection2string(selection,images_names,true).data(),*ind); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int _ind = selection[l]; > CImg<T>& img = check_image(images,images[_ind]); > CImgList<T> nimages(2); > nimages[0].assign(img,true); > nimages[1].assign(img0,true); > CImg<T> res; > try { CImg<T>::append_CImg3d(nimages).move_to(res); } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img0.is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%u], in specified " > "argument '%s' (%s).", > *ind,argument_text,message.data()); > else if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%d], in selected image%s (%s).", > _ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > if (is_get_version) { > res.move_to(images); > images_names[_ind].get_mark().copymark().move_to(images_names); > } else { > res.move_to(images[_ind].assign()); > images_names[_ind].mark(); > } > } > ++position; > } else { > print(images,0,"Merge 3d object%s.", > selection2string(selection,images_names,true).data()); > if (selection) { > CImgList<T> subimages(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) subimages[l].assign(check_image(images,images[selection[l]]),true); > CImg<T> img; > try { CImg<T>::append_CImg3d(subimages).move_to(img); } > catch (CImgException &e) { > CImg<char> message(1024); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > if (!images[ind].is_CImg3d(true,message)) > error(images,0,0, > "Command '-add3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > } > throw e; > } > CImg<char> name = images_names[selection[0]].get_mark(); > if (is_get_version) { > img.move_to(images); > images_names.insert(name.copymark()); > } else if (selection.height()>=2) { > remove_images(images,images_names,selection,1,selection.height()-1); > img.move_to(images[selection[0]].assign()); > name.move_to(images_names[selection[0]]); > } > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-abs",command)) { print(images,0,"Compute pointwise absolute value of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_abs(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].abs(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-and",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise AND of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator&=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator&=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-and", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise AND of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator&=(img0); } else { images_names[selection[l]].mark(); img.operator&=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise AND of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator&=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator&=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise AND of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator&=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator&=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4551 "gmic.cpp" > ; > > > if (!std::strcmp("-atan2",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-atan2",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Compute pointwise oriented arc-tangent of image%s, " > "with x-argument [%u].", > selection2string(selection,images_names,true).data(), > *ind); > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_atan2(img0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].atan2(img0); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"atan2","Command '-%s': Invalid argument '%s'.","atan2",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-acos",command)) { print(images,0,"Compute pointwise arc-cosine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_acos(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].acos(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-asin",command)) { print(images,0,"Compute pointwise arc-sine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_asin(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].asin(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-atan",command)) { print(images,0,"Compute pointwise arc-tangent of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_atan(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].atan(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-axes",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float xmin = 0, xmax = 0, ymin = 0, ymax = 0, opacity = 1, siz = 13; > unsigned int pattern = ~0U; > char seph = 0; > *color = 0; > if (std::sscanf(argument,"%f,%f%c", > &xmin,&xmax,&end)==2 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &xmin,&xmax,&ymin,&ymax,&end)==4 || > std::sscanf(argument,"%f,%f,%f,%f,%f%c", > &xmin,&xmax,&ymin,&ymax,&siz,&end)==5 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity,&end)==6 || > (std::sscanf(argument,"%f,%f,%f,%f,%f,%f,0%c%x%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity,&seph,&pattern,&end)==8 && > seph=='x') || > (std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%4095[0-9.eE,+-]%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity,color,&end)==7 && > (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"%f,%f,%f,%f,%f,%f,0%c%x,%4095[0-9.eE,+-]%c", > &xmin,&xmax,&ymin,&ymax,&siz,&opacity, > &seph,&pattern,color,&end)==9 && seph=='x')) { > siz = cimg::round(siz); > print(images,0,"Draw xy-axes on image%s, with x-range (%g,%g), y-range (%g,%g), " > "font height %g, opacity %g, pattern 0x%x and color (%s).", > selection2string(selection,images_names,true).data(), > xmin,xmax, > ymin,ymax, > siz,opacity,pattern, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_axes(xmin,xmax,ymin,ymax,col.data(),opacity, -60,-60,0,0,pattern,pattern,(unsigned int)siz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_axes(xmin,xmax,ymin,ymax,col.data(),opacity, -60,-60,0,0,pattern,pattern,(unsigned int)siz); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"axes","Command '-%s': Invalid argument '%s'.","axes",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='b') { > > > > > if (!std::strcmp("-blur",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_gaussian = 0; > float sigma = -1; > char sep = 0; > if ((std::sscanf(argument,"%f%c", > &sigma,&end)==1 || > (std::sscanf(argument,"%f%c%c", > &sigma,&sep,&end)==2 && sep=='%') || > std::sscanf(argument,"%f,%u%c", > &sigma,&boundary,&end)==2 || > (std::sscanf(argument,"%f%c,%u%c", > &sigma,&sep,&boundary,&end)==3 && sep=='%') || > std::sscanf(argument,"%f,%u,%u%c", > &sigma,&boundary,&is_gaussian,&end)==3 || > (std::sscanf(argument,"%f%c,%u,%u%c", > &sigma,&sep,&boundary,&is_gaussian,&end)==4 && sep=='%')) && > sigma>=0 && boundary<=1 && is_gaussian<=1) { > print(images,0,"Blur image%s, with standard deviation %g%s, %s boundary conditions " > "and %s kernel.", > selection2string(selection,images_names,true).data(), > sigma,sep=='%'?"%":"", > boundary?"neumann":"dirichlet", > is_gaussian?"gaussian":"quasi-gaussian"); > if (sep=='%') sigma = -sigma; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur(sigma,(bool)boundary,(bool)is_gaussian); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur(sigma,(bool)boundary,(bool)is_gaussian); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"blur","Command '-%s': Invalid argument '%s'.","blur",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-bsr",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise right shift of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator>>=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator>>=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-bsr", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise right shift of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator>>=(img0); } else { images_names[selection[l]].mark(); img.operator>>=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise right shift of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator>>=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator>>=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise right shift of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator>>=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator>>=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4678 "gmic.cpp" > ; > > > if (!std::strcmp("-bsl",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise left shift of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator<<=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator<<=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-bsl", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise left shift of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator<<=(img0); } else { images_names[selection[l]].mark(); img.operator<<=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise left shift of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator<<=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator<<=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise left shift of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator<<=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator<<=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 4690 "gmic.cpp" > ; > > > if (!std::strcmp("-bilateral",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sigma_s = 0, sigma_r = 0; > CImg<unsigned int> ind; > char sep_s = 0, sep_r = 0; > if ((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > indices,argx,argy,&end)==3) && > (std::sscanf(argx,"%f%c",&sigma_s,&end)==1 || > (std::sscanf(argx,"%f%c%c",&sigma_s,&sep_s,&end)==2 && sep_s=='%')) && > (std::sscanf(argy,"%f%c",&sigma_r,&end)==1 || > (std::sscanf(argy,"%f%c%c",&sigma_r,&sep_r,&end)==2 && sep_r=='%')) && > (ind=selection2cimg(indices,images.size(),images_names,"-bilateral",true, > false,CImg<char>::empty())).height()==1 && > sigma_s>=0 && sigma_r>=0) { > print(images,0,"Apply joint bilateral filter on image%s, with guide image [%u] " > "and standard deviations %g%s and %g.", > selection2string(selection,images_names,true).data(), > *ind, > sigma_s,sep_s=='%'?"%":"", > sigma_r,sep_r=='%'?"%":""); > const CImg<T> guide = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > if (sep_s=='%') sigma_s = -sigma_s; > if (sep_r=='%') sigma_r = -sigma_r; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_bilateral(guide,sigma_s,sigma_r); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_bilateral(guide,sigma_s,sigma_r); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2) && > (std::sscanf(argx,"%f%c",&sigma_s,&end)==1 || > (std::sscanf(argx,"%f%c%c",&sigma_s,&sep_s,&end)==2 && sep_s=='%')) && > (std::sscanf(argy,"%f%c",&sigma_r,&end)==1 || > (std::sscanf(argy,"%f%c%c",&sigma_r,&sep_r,&end)==2 && sep_r=='%')) && > sigma_s>=0 && sigma_r>=0) { > print(images,0,"Apply bilateral filter on image%s, with standard deviations %g%s " > "and %g.", > selection2string(selection,images_names,true).data(), > sigma_s,sep_s=='%'?"%":"", > sigma_r,sep_r=='%'?"%":""); > if (sep_s=='%') sigma_s = -sigma_s; > if (sep_r=='%') sigma_r = -sigma_r; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_bilateral(images[selection[l]],sigma_s,sigma_r); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_bilateral(images[selection[l]],sigma_s,sigma_r); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"bilateral","Command '-%s': Invalid argument '%s'.","bilateral",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-background3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float R = 0, G = 0, B = 0; > CImg<unsigned int> ind; > char sep = 0; > const int nb = std::sscanf(argument,"%f,%f,%f%c", > &R,&G,&B,&end); > R = cimg::round(R); > G = cimg::round(G); > B = cimg::round(B); > if (nb>=1 && nb<=3) { > switch (nb) { > case 1 : background3d.assign(1,1,1,3,(unsigned char)R); break; > case 2 : background3d.assign(1,1,1,3,(unsigned char)R,(unsigned char)G,0); break; > case 3 : background3d.assign(1,1,1,3,(unsigned char)R,(unsigned char)G, > (unsigned char)B); break; > } > print(images,0,"Set 3d background color to (%u,%u,%u).", > (unsigned int)R,(unsigned int)G,(unsigned int)B); > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-background3d",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Set 3d background from image [%u].",*ind); > background3d.assign(images[*ind],false); > ++position; > } else { > print(images,0,"Reset 3d background to default."); > background3d.assign(1,2,1,3).fill(32,64,32,116,64,96).resize(1,256,1,3,3); > } > continue; > } > > > } > > > > > else if (command1=='c') { > > > if (!std::strcmp("-check",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> arg_check(argument,std::strlen(argument)+1); > gmic_strreplace(arg_check); > bool is_cond = false, is_filename = false; > const CImg<T> &img = images.size()?images.back():CImg<T>::empty(); > try { if (img.eval(arg_check)) is_cond = true; } > catch (CImgException&) { > is_filename = true; > is_cond = gmic_check_filename(arg_check); > } > if (verbosity>0 || is_debug) { > print(images,0,"Check %s '%s' -> %s.", > is_filename?"file":"expression", > argument_text, > is_filename?(is_cond?"found":"not found"):(is_cond?"true":"false")); > } > if (!is_cond) { > if (scope.size()>1 && scope.back()[0]!='*') > error(images,0,scope.back().data(), > "Command '-check': %s '%s' %s.", > is_filename?"file":"expression", > argument_text, > is_filename?"does not exist":"is false"); > else error(images,0,0, > "Command '-check': %s '%s' %s.", > is_filename?"file":"expression", > argument_text, > is_filename?"does not exist":"is false"); > } > ++position; continue; > } > > > if (!std::strcmp("-crop",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> st0(64), st1(64), st2(64), st3(64), st4(64), st5(64), st6(64), st7(64); > char sep0 = 0, sep1 = 0, sep2 = 0, sep3 = 0, sep4 = 0, sep5 = 0, sep6 = 0, sep7 = 0; > float a0 = 0, a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0, a7 = 0; > *st0 = *st1 = *st2 = *st3 = *st4 = *st5 = *st6 = *st7 = 0; > unsigned int boundary = 0; > if ((boundary=0,std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(), > st1.data(),&end)==2 || > std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(), > st1.data(),&boundary,&end)==3) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > boundary<=1) { > print(images,0,"Crop image%s with selection (%g%s) x (%g%s) and " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > x1 = (int)cimg::round(sep1=='%'?a1*(img.width()-1)/100:a1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,x1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,x1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else if ((boundary=0,std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(),st1.data(), > st2.data(),st3.data(),&end)==4 || > std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(),st1.data(), > st2.data(),st3.data(),&boundary,&end)==5) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > boundary<=1) { > print(images,0, > "Crop image%s with selection (%g%s,%g%s) x (%g%s,%g%s) and " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > y0 = (int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > x1 = (int)cimg::round(sep2=='%'?a2*(img.width()-1)/100:a2), > y1 = (int)cimg::round(sep3=='%'?a3*(img.height()-1)/100:a3); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,y0,x1,y1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,y0,x1,y1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else if ((boundary=0,std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(),st1.data(),st2.data(), > st3.data(),st4.data(),st5.data(),&end)==6 || > std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(),st1.data(),st2.data(), > st3.data(),st4.data(),st5.data(),&boundary,&end)==7) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > (std::sscanf(st4,"%f%c",&a4,&end)==1 || > (std::sscanf(st4,"%f%c%c",&a4,&sep4,&end)==2 && sep4=='%')) && > (std::sscanf(st5,"%f%c",&a5,&end)==1 || > (std::sscanf(st5,"%f%c%c",&a5,&sep5,&end)==2 && sep5=='%')) && > boundary<=1) { > print(images,0,"Crop image%s with selection (%g%s,%g%s,%g%s) x (%g%s,%g%s,%g%s) " > "and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > a4,sep4=='%'?"%":"", > a5,sep5=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > y0 = (int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > z0 = (int)cimg::round(sep2=='%'?a2*(img.depth()-1)/100:a2), > x1 = (int)cimg::round(sep3=='%'?a3*(img.width()-1)/100:a3), > y1 = (int)cimg::round(sep4=='%'?a4*(img.height()-1)/100:a4), > z1 = (int)cimg::round(sep5=='%'?a5*(img.depth()-1)/100:a5); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,y0,z0,x1,y1,z1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,y0,z0,x1,y1,z1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else if ((boundary=0,std::sscanf(argument, > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-]%c", > st0.data(),st1.data(),st2.data(),st3.data(), > st4.data(),st5.data(),st6.data(),st7.data(),&end)==8 || > std::sscanf(argument,"%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%63[0-9.eE%+-]," > "%63[0-9.eE%+-],%63[0-9.eE%+-],%u%c", > st0.data(),st1.data(),st2.data(),st3.data(), > st4.data(),st5.data(),st6.data(),st7.data(),&boundary,&end)==9) && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > (std::sscanf(st4,"%f%c",&a4,&end)==1 || > (std::sscanf(st4,"%f%c%c",&a4,&sep4,&end)==2 && sep4=='%')) && > (std::sscanf(st5,"%f%c",&a5,&end)==1 || > (std::sscanf(st5,"%f%c%c",&a5,&sep5,&end)==2 && sep5=='%')) && > (std::sscanf(st6,"%f%c",&a6,&end)==1 || > (std::sscanf(st6,"%f%c%c",&a6,&sep6,&end)==2 && sep6=='%')) && > (std::sscanf(st7,"%f%c",&a7,&end)==1 || > (std::sscanf(st7,"%f%c%c",&a7,&sep7,&end)==2 && sep7=='%')) && > boundary<=1) { > print(images,0, > "Crop image%s with selection (%g%s,%g%s,%g%s,%g%s) x (%g%s,%g%s,%g%s,%g%s) " > "and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > a4,sep4=='%'?"%":"", > a5,sep5=='%'?"%":"", > a6,sep6=='%'?"%":"", > a7,sep7=='%'?"%":"", > boundary?"neumann":"dirichlet"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > x0 = (int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > y0 = (int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > z0 = (int)cimg::round(sep2=='%'?a2*(img.depth()-1)/100:a2), > v0 = (int)cimg::round(sep3=='%'?a3*(img.spectrum()-1)/100:a3), > x1 = (int)cimg::round(sep4=='%'?a4*(img.width()-1)/100:a4), > y1 = (int)cimg::round(sep5=='%'?a5*(img.height()-1)/100:a5), > z1 = (int)cimg::round(sep6=='%'?a6*(img.depth()-1)/100:a6), > v1 = (int)cimg::round(sep7=='%'?a7*(img.spectrum()-1)/100:a7); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(x0,y0,z0,v0,x1,y1,z1,v1,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(x0,y0,z0,v0,x1,y1,z1,v1,(bool)boundary); images_names[posi].mark(); } }; > } > ++position; > } else { > > > > > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0,"Crop image%s in interactive mode (skipped, no display available).", > selection2string(selection,images_names,true).data()); > } > if (is_available_display) { > print(images,0,"Crop image%s in interactive mode.", > selection2string(selection,images_names,true).data()); > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > if (disp) disp.resize(CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,false),CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,true),false); > else disp.assign(CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,false),CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,true),0,1); > disp.set_title("%s: crop",gmic_basename(images_names[selection[l]].data())); > const CImg<int> s = img.get_select(disp,2); > print(images,0,"Crop image [%d] with selection (%d,%d,%d) x (%d,%d,%d).", > selection[l], > s[0],s[1],s[2], > s[3],s[4],s[5]); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_crop(s[0],s[1],s[2],s[3],s[4],s[5]); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.crop(s[0],s[1],s[2],s[3],s[4],s[5]); images_names[posi].mark(); } }; > } > } > > } > is_released = false; continue; > } > > > if (!std::strcmp("-channels",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-channels",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].spectrum() - 1.0f; sep0 = 0; } > print(images,0,"Keep channel %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.spectrum()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_channel(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.channel(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-channels",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-channels",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].spectrum() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].spectrum() - 1.0f; sep1 = 0; } > print(images,0,"Keep channels %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.spectrum()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.spectrum()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_channels(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.channels(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"channels","Command '-%s': Invalid argument '%s'.","channels",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-columns",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-columns",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].width() - 1.0f; sep0 = 0; } > print(images,0,"Keep column %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.width()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_column(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.column(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-columns",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-columns",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].width() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].width() - 1.0f; sep1 = 0; } > print(images,0,"Keep columns %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.width()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.width()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_columns(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.columns(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"columns","Command '-%s': Invalid argument '%s'.","columns",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-command",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> _arg_command(argument,std::strlen(argument)+1); > const char *arg_command_text = argument_text; > char *arg_command = _arg_command; > gmic_strreplace(arg_command); > > unsigned int siz = 0; > for (unsigned int l = 0; l<256; ++l) siz+=commands[l].size(); > > bool add_debug_infos = true; > if ((*arg_command=='0' || *arg_command=='1') && arg_command[1]==',') { > add_debug_infos = (*arg_command=='1'); > arg_command+=2; arg_command_text+=2; > } > > std::FILE *file = std::fopen(arg_command,"rb"); > if (file) { > print(images,0,"Import custom commands from file '%s'%s", > arg_command_text, > !add_debug_infos?" without debug infos":""); > add_commands(file,arg_command,commands_names,commands,commands_has_arguments, > add_debug_infos); > std::fclose(file); > } else if (!cimg::strncasecmp(arg_command,"http://",7) || > !cimg::strncasecmp(arg_command,"https://",8)) { > print(images,0,"Import custom commands from URL '%s'%s", > arg_command_text, > !add_debug_infos?" without debug infos":""); > CImg<char> filename_tmp(1024); > try { > file = std::fopen(cimg::load_network_external(arg_command,filename_tmp),"r"); > } catch (...) { > file = 0; > } > if (file) { > add_commands(file,arg_command,commands_names,commands,commands_has_arguments, > add_debug_infos); > std::fclose(file); > } else > error(images,0,0, > "Command '-command': Unable to reach custom commands file '%s' " > "from network.", > arg_command_text); > std::remove(filename_tmp); > } else { > print(images,0,"Import custom commands from expression '%s'", > arg_command_text); > add_commands(arg_command,commands_names,commands,commands_has_arguments); > } > if (verbosity>=0 || is_debug) { > unsigned int nb_added = 0; > for (unsigned int l = 0; l<256; ++l) nb_added+=commands[l].size(); > nb_added-=siz; > std::fprintf(cimg::output()," (added %u command%s, total %u).", > nb_added,nb_added>1?"s":"",siz+nb_added); > std::fflush(cimg::output()); > } > ++position; continue; > } > > > if (!std::strcmp("-camera",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float > cam_index = 0, nb_frames = 1, skip_frames = 0, > capture_width = 0, capture_height = 0; > if ((std::sscanf(argument,"%f%c", > &cam_index,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &cam_index,&nb_frames,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &cam_index,&nb_frames,&skip_frames,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%c", > &cam_index,&nb_frames,&skip_frames, > &capture_width,&capture_height,&end)==6) && > cam_index>=0 && nb_frames>=0 && skip_frames>=0 && > ((!capture_width && !capture_height) || (capture_width>0 && capture_height>0))) > ++position; > cam_index = cimg::round(cam_index); > nb_frames = cimg::round(nb_frames); > skip_frames = cimg::round(skip_frames); > capture_width = cimg::round(capture_width); > capture_height = cimg::round(capture_height); > if (!nb_frames) { > print(images,0,"Release camera #%g.",cam_index); > CImg<T>::get_load_camera((unsigned int)cam_index,0,true); > } else { > if (capture_width) > print(images,0,"Insert %g image%s from camera #%g, with %g frames skipping " > "and resolution %gx%g.", > cam_index,nb_frames,nb_frames>1?"s":"",skip_frames, > capture_width,capture_height); > else print(images,0,"Insert %g image%s from camera #%g, with %g frames skipping.", > cam_index,nb_frames,nb_frames>1?"s":"",skip_frames); > snprintf(title,_title.size(),"[Camera #%g]",cam_index); > const CImg<char> _title = CImg<char>::string(title); > if (nb_frames>1) { > std::fputc('\n',cimg::output()); > std::fflush(cimg::output()); > } > for (unsigned int k = 0; k<(unsigned int)nb_frames; ++k) { > if (nb_frames>1 && (verbosity>=0 || is_debug)) { > std::fprintf(cimg::output(),"\r > Image %u/%u ", > k+1,(unsigned int)nb_frames); > std::fflush(cimg::output()); > } > CImg<T>::get_load_camera((unsigned int)cam_index,(unsigned int)skip_frames,false, > (unsigned int)capture_width,(unsigned int)capture_height). > move_to(images); > images_names.insert(_title); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-check3d",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > bool is_full_check = true; > if (!argument[1] && (*argument=='0' || *argument=='1')) { > is_full_check = (*argument=='1'); > ++position; > } else is_full_check = true; > if (verbosity>0 || is_debug) > print(images,0,"Check validity of 3d object%s (%s check)", > selection2string(selection,images_names,true).data(), > is_full_check?"full":"fast"); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > CImg<char> message(1024); > if (!img.is_CImg3d(is_full_check,message)) { > if (verbosity>0 || is_debug) { > std::fprintf(cimg::output()," -> invalid."); > std::fflush(cimg::output()); > } > error(images,0,0, > "Command '-check3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > } > } > if (verbosity>0 || is_debug) { > std::fprintf(cimg::output()," -> valid."); > std::fflush(cimg::output()); > } > continue; > } > > > > > if (!std::strcmp("-cut",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > double value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-cut",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%lf%c%c",&value0,&sep0,&end)==2 && sep0=='%') || > std::sscanf(argx,"%lf%c",&value0,&end)==1) && > ((std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep1,&end)==2 && > sep1==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-cut",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%lf%c%c",&value1,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argy,"%lf%c",&value1,&end)==1)) { > if (ind0) { value0 = images[*ind0].min(); sep0 = 0; } > if (ind1) { value1 = images[*ind1].max(); sep1 = 0; } > print(images,0,"Cut image%s in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_cut((T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.cut((T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-cut",true, > false,CImg<char>::empty())).height()==1) { > if (images[*ind0]) value1 = (double)images[*ind0].max_min(value0); > print(images,0,"Cut image%s in range [%g,%g].", > selection2string(selection,images_names,true).data(), > value0, > value1); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_cut((T)value0,(T)value1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].cut((T)value0,(T)value1); images_names[posi].mark(); } }; > } > ++position; > } else { > > > > > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0,"Cut image%s in interactive mode (skipped, no display available).", > selection2string(selection,images_names,true).data()); > } > if (is_available_display) { > print(images,0,"Cut image%s in interactive mode.", > selection2string(selection,images_names,true).data()); > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > if (img) { > CImg<T> visu = img.depth()>1?img.get_projections2d(img.width()/2, > img.height()/2, > img.depth()/2). > channels(0,cimg::min(3,img.spectrum())-1): > img.get_channels(0,cimg::min(3,img.spectrum()-1)); > const unsigned int > w = CImgDisplay::_fitscreen(visu.width(),visu.height(),1,256,-85,false), > h = CImgDisplay::_fitscreen(visu.width(),visu.height(),1,256,-85,true); > if (disp) disp.resize(w,h,false); else disp.assign(w,h,0,0); > double vmin = 0, vmax = (double)img.max_min(vmin), > percent0 = 0, percent1 = 100; > bool stopflag = false, is_clicked = false; > int omx = -1, omy = -1; > CImg<unsigned char> res; > for (disp.show().flush(); !stopflag; ) { > const unsigned char white[] = { 255,255,255 }, black[] = { 0,0,0 }; > const unsigned int key = disp.key(); > if (!res) > disp.display((res=visu.get_cut((T)(vmin + percent0*(vmax-vmin)/100), > (T)(vmin + percent1*(vmax-vmin)/100)). > resize(disp).normalize((T)0,(T)255)). > draw_text(0,0,"Cut [%g,%g] = [%.3g%%,%.3g%%]", > white,black,0.7f,13, > (double)(vmin + percent0*(vmax-vmin)/100), > (double)(vmin + percent1*(vmax-vmin)/100), > percent0,percent1)). > set_title("%s (%dx%dx%dx%d)", > gmic_basename(images_names[selection[l]].data()), > img.width(),img.height(),img.depth(),img.spectrum()).wait(); > const int mx = disp.mouse_x(), my = disp.mouse_y(); > if (disp.button()) { > if (mx>=0 && my>=0 && (mx!=omx || my!=omy)) { > percent0 = (my-16)*100.0/(disp.height()-32); > percent1 = (mx-16)*100.0/(disp.width()-32); > if (percent0<0) percent0 = 0; else if (percent0>101) percent0 = 101; > if (percent1<0) percent1 = 0; else if (percent1>101) percent1 = 101; > if (percent0>percent1) cimg::swap(percent0,percent1); > omx = mx; omy = my; res.assign(); > } > is_clicked = true; > } else if (is_clicked) break; > if (disp.is_closed() || (key && key!=cimg::keyCTRLLEFT)) stopflag = true; > if (key==cimg::keyD && disp.is_keyCTRLLEFT()) { > disp.resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-85,false),CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-85,true), > stopflag=false).set_key(cimg::keyD,false); > res.assign(); > } > if (key==cimg::keyC && disp.is_keyCTRLLEFT()) { > disp.resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true), > stopflag=false).set_key(cimg::keyC,false); > res.assign(); > } > if (disp.is_resized()) { disp.resize(false); res.assign(); } > } > print(images,0,"Cut image [%d] in range [%g,%g] = [%.3g%%,%.3g%%].", > selection[l], > (double)(vmin + percent0*(vmax-vmin)/100), > (double)(vmin + percent1*(vmax-vmin)/100), > percent0,percent1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_cut((T)(vmin + percent0*(vmax-vmin)/100), (T)(vmin + percent1*(vmax-vmin)/100)); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.cut((T)(vmin + percent0*(vmax-vmin)/100), (T)(vmin + percent1*(vmax-vmin)/100)); images_names[posi].mark(); } } > ; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } > > } > is_released = false; continue; > } > > > if (!std::strcmp("-cos",command)) { print(images,0,"Compute pointwise cosine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_cos(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].cos(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-convolve",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_normalized = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-convolve",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0, > "Convolve image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_convolve(mask,boundary,(bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].convolve(mask,boundary,(bool)is_normalized); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"convolve","Command '-%s': Invalid argument '%s'.","convolve",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-correlate",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_normalized = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-correlate",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0, > "Correlate image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_correlate(mask,boundary,(bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].correlate(mask,boundary,(bool)is_normalized); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"correlate","Command '-%s': Invalid argument '%s'.","correlate",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-color3d",command) || !std::strcmp("-col3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float R = 200, G = 200, B = 200, opacity = -1; > if ((std::sscanf(argument,"%f%c", > &R,&end)==1 && ((B=G=R),1)) || > (std::sscanf(argument,"%f,%f%c", > &R,&G,&end)==2 && ((B=0),1)) || > std::sscanf(argument,"%f,%f,%f%c", > &R,&G,&B,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &R,&G,&B,&opacity,&end)==4) { > const bool set_opacity = (opacity>=0); > if (set_opacity) > print(images,0,"Set colors of 3d object%s to (%g,%g,%g), with opacity %g.", > selection2string(selection,images_names,true).data(), > R,G,B, > opacity); > else > print(images,0,"Set color of 3d object%s to (%g,%g,%g).", > selection2string(selection,images_names,true).data(), > R,G,B); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_color_CImg3d(R,G,B,opacity,true,set_opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.color_CImg3d(R,G,B,opacity,true,set_opacity); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-color3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"color3d","Command '-%s': Invalid argument '%s'.","color3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-cursor",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!is_restriction) > CImg<unsigned int>::vector(0,1,2,3,4,5,6,7,8,9).move_to(selection); > bool value = true; > if (!argument[1] && (*argument=='0' || *argument=='1')) { > value = (*argument=='1'); ++position; > } else value = true; > > > > > > > try { > if (value) for (int l = 0; l<(int)((selection)._height); ++l) { > if (!instant_window[l].is_closed()) instant_window[selection[l]].show_mouse(); > } > else for (int l = 0; l<(int)((selection)._height); ++l) { > if (!instant_window[l].is_closed()) instant_window[selection[l]].hide_mouse(); > } > print(images,0,"%s mouse cursor for instant window%s.", > value?"Show":"Hide", > selection2string(selection,images_names,true).data()); > } catch (CImgDisplayException&) { > print(images,0,"%s mouse cursor for instant window%s (skipped, no display available).", > value?"Show":"Hide", > selection2string(selection,images_names,true).data()); > } > > continue; > } > > > if (!std::strcmp("-cosh",command)) { print(images,0,"Compute pointwise hyperbolic cosine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_cosh(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].cosh(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > } > > > > > else if (command1=='d') { > > > if (!std::strcmp("-done",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='r') > error(images,0,0, > "Command '-done': Not associated to a '-repeat' command " > "within the same scope."); > if (--repeatdones.back()(1)) { > ++repeatdones.back()(2); > position = repeatdones.back()(0); > } else { > if (verbosity>0 || is_debug) print(images,0,"End 'repeat..done' block."); > repeatdones.remove(); > scope.remove(); > } > continue; > } > > > if (!std::strcmp("-do",item)) { > CImg<char>::string("*do").move_to(scope); > if (verbosity>0 || is_debug) print(images,0,"Start '-do..-while' block."); > CImg<unsigned int>::vector(position).move_to(dowhiles); > continue; > } > > > if (!std::strcmp("-discard",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 0; > if (std::sscanf(argument,"%f%c", > &value,&end)==1) { > print(images,0,"Remove value %g in image%s.", > value, > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_discard((T)value); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].discard((T)value); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"discard","Command '-%s': Invalid argument '%s'.","discard",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-debug",item)) { > is_debug = true; > continue; > } > > > > > if (!std::strcmp("-div",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Divide image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator/=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-div", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Divide image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].div(img0); } else { images_names[selection[l]].mark(); img.div(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Divide image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].div((const char*)formula); } else { images_names[selection[l]].mark(); img.div((const char*)formula); } } ++position; } else { print(images,0,"Divide image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.div(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.div(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 5632 "gmic.cpp" > ; > > > if (!std::strcmp("-distance",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int algorithm = 0, off = 0; > char sep1 = 0, sep2 = 0; > CImg<unsigned int> ind; > double value = 0; > int metric = 2; > if ((std::sscanf(argument,"%lf%c", > &value,&end)==1 || > (std::sscanf(argument,"%lf%c%c", > &value,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argument,"%lf,%d%c", > &value,&metric,&end)==2 || > (std::sscanf(argument,"%lf%c,%d%c", > &value,&sep1,&metric,&end)==3 && sep1=='%')) && > metric>=0 && metric<=3) { > print(images,0,"Compute distance map to isovalue %g%s in image%s, " > "with %s metric.", > value,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data(), > metric==0?"chebyshev":metric==1?"manhattan":metric==2?"euclidean": > "squared-euclidean"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double nvalue = value; > if (sep1=='%' && img) { > double vmin, vmax = (double)img.max_min(vmin); > nvalue = vmin + value*(vmax-vmin)/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_distance((T)nvalue,metric); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.distance((T)nvalue,metric); images_names[posi].mark(); } }; > } > } else if ((((std::sscanf(argument,"%lf,[%255[a-zA-Z0-9_.%+-]%c%c", > &value,indices,&sep2,&end)==3 || > (std::sscanf(argument,"%lf%c,[%255[a-zA-Z0-9_.%+-]%c%c", > &value,&sep1,indices,&sep2,&end)==4 && sep1=='%')) && > sep2==']') || > ((std::sscanf(argument,"%lf,[%255[a-zA-Z0-9_.%+-]],%u%c", > &value,indices,&algorithm,&end)==3 || > (std::sscanf(argument,"%lf%c,[%255[a-zA-Z0-9_.%+-]],%u%c", > &value,&sep1,indices,&algorithm,&end)==4 && sep1=='%')) && > algorithm<=4)) && > (ind=selection2cimg(indices,images.size(),images_names,"-distance",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Compute distance map%s to isovalue %g%s in image%s, " > "using %s algorithm, with metric [%u].", > selection.height()>1?(algorithm>=3?"s and return paths":"s"): > (algorithm>=3?" and return path":""), > value,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data(), > algorithm==0?"fast-marching":algorithm==1||algorithm==3? > "low-connectivity dijkstra":"high-connectivity dijkstra", > *ind); > const CImg<T> custom_metric = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > if (algorithm<3) for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double nvalue = value; > if (sep1=='%' && img) { > double vmin, vmax = (double)img.max_min(vmin); > nvalue = vmin + value*(vmax-vmin)/100; > } > if (!algorithm) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_distance_eikonal((T)nvalue,custom_metric); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.distance_eikonal((T)nvalue,custom_metric); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_distance_dijkstra((T)nvalue,custom_metric,algorithm==2); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.distance_dijkstra((T)nvalue,custom_metric,algorithm==2); images_names[posi].mark(); } }; } > } > else for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<T>& img = check_image(images,images[ind]); > double nvalue = value; > if (sep1=='%' && img) { > double vmin, vmax = (double)img.max_min(vmin); > nvalue = vmin + value*(vmax-vmin)/100; > } > CImg<char> name = images_names[ind].get_mark(); > CImg<T> path(1), > dist = img.get_distance_dijkstra((T)nvalue,custom_metric,algorithm==4,path); > if (is_get_version) { > images_names.insert(2,name.copymark()); > dist.move_to(images,~0U); > path.move_to(images,~0U); > } else { > off+=1; > dist.move_to(images[ind].assign()); > path.move_to(images,ind+1); > images_names[ind] = name; > images_names.insert(name.copymark(),ind+1); > } > } > } else gmic::error(images,0,"distance","Command '-%s': Invalid argument '%s'.","distance",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-dilate",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sx = 3, sy = 3, sz = 1; > unsigned int boundary = 1, is_normalized = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-dilate",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0,"Dilate image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_dilate(mask,boundary, (bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].dilate(mask,boundary, (bool)is_normalized); images_names[posi].mark(); } } > ; > } > } else if ((std::sscanf(argument,"%f%c", > &sx,&end)==1) && > sx>=0) { > sx = cimg::round(sx); > print(images,0,"Dilate image%s with mask of size %g and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_dilate((unsigned int)sx); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].dilate((unsigned int)sx); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%f,%f%c", > &sx,&sy,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sx,&sy,&sz,&end)==3) && > sx>=0 && sy>=0 && sz>=0) { > sx = cimg::round(sx); > sy = cimg::round(sy); > sz = cimg::round(sz); > print(images,0,"Dilate image%s with %gx%gx%g mask and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_dilate((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].dilate((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"dilate","Command '-%s': Invalid argument '%s'.","dilate",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-double3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > bool value = true; > if (!argument[1] && (*argument=='0' || *argument=='1')) { > value = (*argument=='1'); > ++position; > } else value = true; > is_double3d = value; > print(images,0,"%s double-sided mode for 3d rendering.", > is_double3d?"Enable":"Disable"); > continue; > } > > > if (!std::strcmp("-denoise",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sigma_s = 10, sigma_r = 10, smoothness = 1; > unsigned int is_fast_approximation = 0; > float psize = 5, rsize = 6; > if ((std::sscanf(argument,"%f%c", > &sigma_s,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &sigma_s,&sigma_r,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sigma_s,&sigma_r,&psize,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &sigma_s,&sigma_r,&psize,&rsize,&end)==4 || > std::sscanf(argument,"%f,%f,%f,%f,%f%c", > &sigma_s,&sigma_r,&psize,&rsize,&smoothness,&end)==5 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%u%c", > &sigma_s,&sigma_r,&psize,&rsize,&smoothness, > &is_fast_approximation,&end)==6) && > sigma_s>=0 && sigma_r>=0 && psize>=0 && rsize>=0 && is_fast_approximation<=1) { > psize = cimg::round(psize); > rsize = cimg::round(rsize); > print(images,0,"Denoise image%s using %gx%g patchs, with standard deviations %lg,%g, " > "lookup size %g and smoothness %g.", > selection2string(selection,images_names,true).data(), > psize, > psize, > sigma_s, > sigma_r, > rsize, > smoothness); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_patch(sigma_s,sigma_r, (unsigned int)psize,(unsigned int)rsize, smoothness, (bool)is_fast_approximation); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_patch(sigma_s,sigma_r, (unsigned int)psize,(unsigned int)rsize, smoothness, (bool)is_fast_approximation); images_names[posi].mark(); } } > > > ; > } > } else gmic::error(images,0,"denoise","Command '-%s': Invalid argument '%s'.","denoise",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-deriche",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, order = 0; > char sep = 0, axis = 0; > float sigma = 0; > if ((std::sscanf(argument,"%f,%u,%c%c",&sigma,&order,&axis,&end)==3 || > (std::sscanf(argument,"%f%c,%u,%c%c",&sigma,&sep,&order,&axis,&end)==4 && > sep=='%') || > std::sscanf(argument,"%f,%u,%c,%u%c",&sigma,&order,&axis,&boundary,&end)==4 || > (std::sscanf(argument,"%f%c,%u,%c,%u%c", > &sigma,&sep,&order,&axis,&boundary,&end)==5 && sep=='%')) && > sigma>=0 && order<=2 && (axis=='x' || axis=='y' || axis=='z' || axis=='c') && > boundary<=1) { > print(images,0,"Apply Deriche filter on image%s, with standard " > "deviation %g%s, order %d, axis '%c' and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > sigma,sep=='%'?"%":"", > order,axis, > boundary?"neumann":"dirichlet"); > if (sep=='%') sigma = -sigma; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_deriche(sigma,order,axis,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].deriche(sigma,order,axis,(bool)boundary); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"deriche","Command '-%s': Invalid argument '%s'.","deriche",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-dijkstra",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float snode = 0, enode = 0; > if (std::sscanf(argument,"%f,%f%c",&snode,&enode,&end)==2 && > snode>=0 && enode>=0) { > snode = cimg::round(snode); > enode = cimg::round(enode); > print(images,0,"Compute minimal path from adjacency matri%s%s with the " > "Dijkstra algorithm.", > selection.height()>1?"ce":"x",selection2string(selection,images_names,true).data()); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<char> name = images_names[ind].get_mark(); > if (is_get_version) { > CImg<T> path, dist = check_image(images,images[ind]).get_dijkstra((unsigned int)snode, > (unsigned int)enode, > path); > images_names.insert(name.copymark()); > name.move_to(images_names); > dist.move_to(images); > path.move_to(images); > } else { > CImg<T> path; > check_image(images,images[ind]).dijkstra((unsigned int)snode,(unsigned int)enode,path); > images_names.insert(name.get_copymark(),ind+1); > name.move_to(images_names[ind]); > images.insert(path,ind+1); > ++off; > } > } > } else gmic::error(images,0,"dijkstra","Command '-%s': Invalid argument '%s'.","dijkstra",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-displacement",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float nb_scales = 0, nb_iterations = 10000, smoothness = 0.1f, precision = 5.0f; > unsigned int is_backward = 1; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&smoothness,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&smoothness,&precision,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f%c", > indices,&smoothness,&precision,&nb_scales,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f%c", > indices,&smoothness,&precision,&nb_scales,&nb_iterations,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%u%c", > indices,&smoothness,&precision,&nb_scales,&nb_iterations, > &is_backward,&end)==6) && > (ind=selection2cimg(indices,images.size(),images_names,"-displacement",true, > false,CImg<char>::empty())).height()==1 && > precision>=0 && nb_scales>=0 && nb_iterations>=0 && is_backward<=1) { > nb_scales = cimg::round(nb_scales); > nb_iterations = cimg::round(nb_iterations); > print(images,0,"Estimate displacement field from source [%u] to image%s, with " > "%s smoothness %g, precision %g, %g scales, %g iterations, in %s direction.", > *ind, > selection2string(selection,images_names,true).data(), > smoothness>=0?"isotropic":"anisotropic",cimg::abs(smoothness), > precision, > nb_scales, > nb_iterations, > is_backward?"backward":"forward"); > const CImg<T> source = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_displacement(source,smoothness,precision, (unsigned int)nb_scales, (unsigned int)nb_iterations, (bool)is_backward); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].displacement(source,smoothness,precision, (unsigned int)nb_scales, (unsigned int)nb_iterations, (bool)is_backward); images_names[posi].mark(); } } > > > ; > } > } else gmic::error(images,0,"displacement","Command '-%s': Invalid argument '%s'.","displacement",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-display",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int X,Y,Z, XYZ[3]; > bool is_xyz = false; > if (std::sscanf(argument,"%u,%u,%u%c", > &X,&Y,&Z,&end)==3) { is_xyz = true; ++position; } > XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; > display_images(images,images_names,selection,is_xyz?XYZ:0); > is_released = true; continue; > } > > > if (!std::strcmp("-display3d",command) && !is_get_version) { > display_objects3d(images,images_names,selection); > is_released = true; continue; > } > > > } > > > > > else if (command1=='e') { > > > if (!std::strcmp("-endif",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='i') > error(images,0,0, > "Command '-endif': Not associated to a '-if' command within the same scope."); > if (verbosity>0 || is_debug) print(images,0,"End 'if..endif' block."); > check_elif = false; > scope.remove(); > continue; > } > > > if (!std::strcmp("-else",item) || (!std::strcmp("-elif",item) && !check_elif)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='i') > error(images,0,0, > "Command '%s': Not associated to a '-if' command within the same scope.", > item); > check_elif = false; > if (verbosity>0 || is_debug) print(images,0,"Reach '-else' block."); > for (int nb_ifs = 1; nb_ifs && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-if",it)) ++nb_ifs; > else if (!std::strcmp("-endif",it)) { if (!--nb_ifs) --position; } > } > continue; > } > > > if (!std::strcmp("-endlocal",item) || !std::strcmp("-endl",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='l') > error(images,0,0, > "Command '-endlocal': Not associated to a '-local' command within " > "the same scope."); > if (verbosity>0 || is_debug) print(images,0,"End 'local..endlocal' block."); > is_endlocal = true; > break; > } > > > if (!std::strcmp("-echo",command) && !is_get_version) { > if (verbosity>=0 || is_debug) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> str(argument,std::strlen(argument)+1); > cimg::strunescape(str); > if (is_restriction) print(images,&selection,"%s",str.data()); > else print(images,0,"%s",str.data()); > } > ++position; continue; > } > > > if (!std::strcmp("-exec",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > > > > > print(images,0,"Execute external command '%s'\n", > argument_text); > CImg<char> arg_exec(argument,std::strlen(argument)+1); > gmic_strreplace(arg_exec); > cimg::strunescape(arg_exec); > cimg::mutex(31); > const int errcode = cimg::system(arg_exec); > cimg::mutex(31,0); > snprintf(title,_title.size(),"%d",errcode); > CImg<char>::string(title).move_to(status); > if (errcode) print(images,0,"Command '-exec' returned error code '%d'.", > errcode); > > ++position; continue; > } > > > if (!std::strcmp("-error",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> str(argument,std::strlen(argument)+1); > cimg::strunescape(str); > if (is_restriction) error(images,&selection,0,"%s",str.data()); > else error(images,0,0,"%s",str.data()); > } > > > if (!std::strcmp("-endian",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!std::strcmp(argument,"bool") || !std::strcmp(argument,"uchar") || > !std::strcmp(argument,"unsigned char") || !std::strcmp(argument,"char") || > !std::strcmp(argument,"ushort") || !std::strcmp(argument,"unsigned short") || > !std::strcmp(argument,"short") || !std::strcmp(argument,"uint") || > !std::strcmp(argument,"unsigned int") || !std::strcmp(argument,"int") || > !std::strcmp(argument,"ulong") || !std::strcmp(argument,"unsigned long") || > !std::strcmp(argument,"long") || !std::strcmp(argument,"float") || > !std::strcmp(argument,"double")) { > print(images,0,"Invert data endianness of image%s, with assumed pixel type '%s'.", > selection2string(selection,images_names,true).data(),argument); > ++position; > } else print(images,0,"Invert data endianness of image%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_gmic_invert_endianness(argument); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].gmic_invert_endianness(argument); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > > > if (!std::strcmp("-exp",command)) { print(images,0,"Compute pointwise exponential of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_exp(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].exp(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-eq",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean equality between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_eq((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_eq((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-eq", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean equality between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_eq(img0); } else { images_names[selection[l]].mark(); img.operator_eq(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean equality between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_eq((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_eq((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean equality between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_eq(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_eq(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 6093 "gmic.cpp" > ; > > > if (!std::strcmp("-ellipse",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> argR(256), argr(256); > *argx = *argy = *argR = *argr = *color = 0; > float x = 0, y = 0, R = 0, r = 0, angle = 0, opacity = 1; > char sepx = 0, sepy = 0, sepR = 0, sepr = 0, seph = 0; > unsigned int pattern = ~0U; > if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argR.data(),&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,argR.data(),argr.data(),&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f%c", > argx,argy,argR.data(),argr.data(),&angle,&end)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,&end)==6 || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f,0%c%x%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,&seph,&pattern, > &end)==8 && > seph=='x') || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f,%4095[0-9.eE,+-]%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,color,&end)==7 && > (bool)(pattern=~0U))|| > (*color=0,std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%f,0%c%x,%4095[0-9.eE,+-]%c", > argx,argy,argR.data(),argr.data(),&angle,&opacity,&seph, > &pattern,color,&end)==9 && > seph=='x')) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (std::sscanf(argR,"%f%c",&R,&end)==1 || > (std::sscanf(argR,"%f%c%c",&R,&sepR,&end)==2 && sepR=='%')) && > (!*argr || > std::sscanf(argr,"%f%c",&r,&end)==1 || > (std::sscanf(argr,"%f%c%c",&r,&sepr,&end)==2 && sepr=='%'))) { > if (!*argr) r = R; > print(images,0,"Draw %s ellipse at (%g%s,%g%s) with radii (%g%s,%g%s) on image%s, " > "with orientation %g°, opacity %g and color (%s).", > seph=='x'?"outlined":"filled", > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > R,sepR=='%'?"%":"", > r,sepr=='%'?"%":"", > selection2string(selection,images_names,true).data(), > angle, > opacity, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const float rmax = std::sqrt((float)cimg::sqr(img.width()) + > cimg::sqr(img.height())); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y); > const float > nR = cimg::round(sepR=='%'?R*rmax/100:R), > nr = cimg::round(sepr=='%'?r*rmax/100:r); > if (seph=='x') { > if (nR==nr) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_circle(nx,ny,(int)nR,col.data(),opacity,~0U); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_circle(nx,ny,(int)nR,col.data(),opacity,~0U); images_names[posi].mark(); } };} > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity,~0U); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity,~0U); images_names[posi].mark(); } }; } > } else { > if (nR==nr) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_circle(nx,ny,(int)nR,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_circle(nx,ny,(int)nR,col.data(),opacity); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_ellipse(nx,ny,nR,nr,angle,col.data(),opacity); images_names[posi].mark(); } }; } > } > } > } else gmic::error(images,0,"ellipse","Command '-%s': Invalid argument '%s'.","ellipse",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-equalize",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sep = 0, sep0 = 0, sep1 = 0; > double value0 = 0, value1 = 0; > float nb_levels = 256; > bool no_min_max = false; > if (((std::sscanf(argument,"%f%c", > &nb_levels,&end)==1 && (no_min_max=true)) || > ((std::sscanf(argument,"%f%c%c", > &nb_levels,&sep,&end)==2 && sep=='%') && (no_min_max=true)) || > std::sscanf(argument,"%f,%lf,%lf%c", > &nb_levels,&value0,&value1,&end)==3 || > (std::sscanf(argument,"%f%c,%lf,%lf%c", > &nb_levels,&sep,&value0,&value1,&end)==4 && sep=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c", > &nb_levels,&value0,&sep0,&value1,&end)==4 && sep0=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c", > &nb_levels,&sep,&value0,&sep0,&value1,&end)==5 && sep=='%' && > sep0=='%') || > (std::sscanf(argument,"%f,%lf,%lf%c%c", > &nb_levels,&value0,&value1,&sep1,&end)==4 && sep1=='%') || > (std::sscanf(argument,"%f%c,%lf,%lf%c%c", > &nb_levels,&sep,&value0,&value1,&sep1,&end)==5 && sep=='%' && > sep1=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c%c", > &nb_levels,&value0,&sep0,&value1,&sep1,&end)==5 && sep0=='%' && > sep1=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c%c", > &nb_levels,&sep,&value0,&sep0,&value1,&sep1,&end)==6 && sep=='%' && > sep0=='%' && sep1=='%')) && > nb_levels>=0.5) { nb_levels = cimg::round(nb_levels); ++position; } > else { nb_levels = 256; value0 = 0; value1 = 100; sep = 0; sep0 = sep1 = '%'; } > if (no_min_max) { value0 = 0; value1 = 100; sep0 = sep1 = '%'; } > print(images,0,"Equalize histogram of image%s, with %g%s levels in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > nb_levels,sep=='%'?"%":"", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > const unsigned int > _nb_levels = cimg::max(1U, > (unsigned int)cimg::round(sep=='%'? > nb_levels*(1+nvalue1-nvalue0)/100: > nb_levels)); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_equalize(_nb_levels,(T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].equalize(_nb_levels,(T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-erode",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, is_normalized = 0; > float sx = 3, sy = 3, sz = 1; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&boundary,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&boundary,&is_normalized,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-erode",true, > false,CImg<char>::empty())).height()==1 && > boundary<=1) { > print(images,0,"Erode image%s with mask [%u] and %s boundary conditions, " > "with%s normalization.", > selection2string(selection,images_names,true).data(), > *ind, > boundary?"neumann":"dirichlet", > is_normalized?"":"out"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_erode(mask,boundary,(bool)is_normalized); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].erode(mask,boundary,(bool)is_normalized); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%f%c", > &sx,&end)==1) && > sx>=0) { > sx = cimg::round(sx); > print(images,0,"Erode image%s with mask of size %g and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_erode((unsigned int)sx); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].erode((unsigned int)sx); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%f,%f%c", > &sx,&sy,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sx,&sy,&sz,&end)==3) && > sx>=0 && sy>=0 && sz>=0) { > sx = cimg::round(sx); > sy = cimg::round(sy); > sz = cimg::round(sz); > print(images,0,"Erode image%s with %gx%gx%g mask and neumann boundary conditions.", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_erode((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].erode((unsigned int)sx,(unsigned int)sy, (unsigned int)sz); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"erode","Command '-%s': Invalid argument '%s'.","erode",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-elevation3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > float fact = 1; > char sep = 0; > *formula = 0; > if (std::sscanf(argument,"'%4095[^']'%c",formula,&end)==1) { > print(images,0,"Build 3d elevation of image%s, with elevation formula '%s'.", > selection2string(selection,images_names,true).data(), > formula); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > CImg<typename CImg<T>::Tfloat> elev(img.width(),img.height(),1,1,formula,true); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<float> vertices = img.get_elevation3d(primitives,colors,elev); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-elevation3d",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Build 3d elevation of image%s, with elevation map [%u].", > selection2string(selection,images_names,true).data(), > *ind); > CImg<typename CImg<T>::Tfloat> elev; > if (images[*ind].spectrum()>1) images[*ind].get_norm().move_to(elev); > else elev = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<float> vertices = img.get_elevation3d(primitives,colors,elev); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > ++position; > } else { > if (std::sscanf(argument,"%f%c", > &fact,&end)==1) { > print(images,0,"Build 3d elevation of image%s, with elevation factor %g.", > selection2string(selection,images_names,true).data(), > fact); > ++position; > } else > print(images,0,"Build 3d elevation of image%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<typename CImg<T>::Tfloat> elev; > if (fact==1 && img.spectrum()==1) elev = img.get_shared(); > else if (img.spectrum()>1) (img.get_norm().move_to(elev))*=fact; > else (elev = img)*=fact; > CImg<float> vertices = img.get_elevation3d(primitives,colors,elev); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-eigen",command)) { > print(images,0,"Compute eigen-values/vectors of symmetric matri%s or matrix field%s.", > selection.height()>1?"ce":"x",selection2string(selection,images_names,true).data()); > CImg<float> val, vec; > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<char> name = images_names[ind].get_mark(); > check_image(images,images[ind]).gmic_symmetric_eigen(val,vec); > if (is_get_version) { > images_names.insert(name.copymark()); > name.move_to(images_names); > val.move_to(images); > vec.move_to(images); > } else { > images_names.insert(name.get_copymark(),ind+1); name.move_to(images_names[ind]); > val.move_to(images[ind].assign()); images.insert(vec,ind+1); > ++off; > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='f') { > > > > > if (!std::strcmp("-fill",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double value = 0; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"%lf%c", > &value,&end)==1) { > print(images,0,"Fill image%s with %g.", > selection2string(selection,images_names,true).data(), > value); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_fill((T)value); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].fill((T)value); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-fill",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Fill image%s with values from image [%u].", > selection2string(selection,images_names,true).data(), > *ind); > const CImg<T> values = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_fill(values); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].fill(values); images_names[posi].mark(); } }; > } > } else { > CImg<char> arg_fill_text(argument_text,std::strlen(argument_text)+1); > cimg::strpare(arg_fill_text,'\'',true,false); > print(images,0,"Fill image%s with expression '%s'.", > selection2string(selection,images_names,true).data(), > arg_fill_text.data()); > CImg<char> arg_fill(argument,std::strlen(argument)+1); > cimg::strpare(arg_fill,'\'',true,false); > gmic_strreplace(arg_fill); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_fill(arg_fill.data(),true); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].fill(arg_fill.data(),true); images_names[posi].mark(); } }; > } > } > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-flood",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x = 0, y = 0, z = 0, tolerance = 0, opacity = 1; > unsigned int is_high_connectivity = 0; > char sepx = 0, sepy = 0, sepz = 0; > *argx = *argy = *argz = *color = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > argx,argy,argz,&tolerance,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%u%c", > argx,argy,argz,&tolerance,&is_high_connectivity,&end)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%u,%f%c", > argx,argy,argz,&tolerance,&is_high_connectivity,&opacity,&end)==6 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%u,%f," > "%4095[0-9.eE,+-]%c", > argx,argy,argz,&tolerance,&is_high_connectivity, > &opacity,color,&end)==7) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > tolerance>=0) { > print(images,0, > "Flood fill image%s from (%g%s,%g%s,%g%s), with tolerance %g, %s connectivity," > "opacity %g and color (%s).", > selection2string(selection,images_names,true).data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > tolerance, > is_high_connectivity?"high":"low", > opacity, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_fill(nx,ny,nz,col.data(),opacity,tolerance, (bool)is_high_connectivity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_fill(nx,ny,nz,col.data(),opacity,tolerance, (bool)is_high_connectivity); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"flood","Command '-%s': Invalid argument '%s'.","flood",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-focale3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 700; > if (std::sscanf(argument,"%f%c",&value,&end)==1) ++position; > else value = 700; > focale3d = value; > print(images,0,"Set 3d focale to %g.", > focale3d); > continue; > } > > > } > > > > > else if (command1=='g') { > > > > > if (!std::strcmp("-ge",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'greater or equal than' between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_ge((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_ge((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-ge", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'greater or equal than' between image%s " "and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_ge(img0); } else { images_names[selection[l]].mark(); img.operator_ge(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'greater or equal than' between image%s " "and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_ge((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_ge((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'greater or equal than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_ge(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_ge(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 6516 "gmic.cpp" > ; > > > if (!std::strcmp("-gt",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'greater than' between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_gt((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_gt((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-gt", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'greater than' between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_gt(img0); } else { images_names[selection[l]].mark(); img.operator_gt(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'greater than' between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_gt((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_gt((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'greater than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_gt(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_gt(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 6528 "gmic.cpp" > ; > > > if (!std::strcmp("-gradient",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char axes[16]; > int scheme = 3; > *axes = 0; > if ((std::sscanf(argument,"%15[xyz]%c", > axes,&end)==1 || > std::sscanf(argument,"%15[xyz],%d%c", > axes,&scheme,&end)==2) && > scheme>=-1 && scheme<=5) { > ++position; > print(images,0,"Compute gradient of image%s along axes '%s', with %s scheme.", > selection2string(selection,images_names,true).data(), > axes, > scheme==-1?"backward differences":scheme==4?"deriche":scheme==5?"vanvliet": > scheme==1?"forward differences":scheme==2?"sobel": > scheme==3?"rotation invariant":"centered differences"); > } else print(images,0,"Compute gradient of image%s, with rotation invariant scheme.", > selection2string(selection,images_names,true).data()); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<T>& img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> gradient = img.get_gradient(*axes?axes:0,scheme); > if (is_get_version) { > images_names.insert(gradient.size(),name.copymark()); > gradient.move_to(images,~0U); > } else { > off+=gradient.size() - 1; > gradient[0].move_to(images[ind].assign()); > for (unsigned int i = 1; i<gradient.size(); ++i) gradient[i].move_to(images,ind+i); > images_names[ind] = name; > if (gradient.size()>1) > images_names.insert(gradient.size()-1,name.copymark(),ind+1); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-graph",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double ymin = 0, ymax = 0, xmin = 0, xmax = 0; > unsigned int plot_type = 1, vertex_type = 1; > float resolution = 65536, opacity = 1; > unsigned int pattern = ~0U; > CImg<unsigned int> ind; > char sep = 0, seph = 0; > *formula = *color = 0; > if (((std::sscanf(argument,"'%1023[^']%c%c", > formula,&sep,&end)==2 && sep=='\'') || > std::sscanf(argument,"'%1023[^']',%f%c", > formula,&resolution,&end)==2 || > std::sscanf(argument,"'%1023[^']',%f,%u%c", > formula,&resolution,&plot_type,&end)==3 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u%c", > formula,&resolution,&plot_type,&vertex_type,&end)==4 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax,&end)==6 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax, > &ymin,&ymax,&end)==8 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f%c", > formula,&resolution,&plot_type,&vertex_type, > &xmin,&xmax,&ymin,&ymax,&opacity,&end)==9 || > (std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f,0%c%x%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax, > &ymin,&ymax,&opacity,&seph,&pattern,&end)==11 && seph=='x') || > (std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f,%4095[0-9.eE,+-]%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax,&ymin,&ymax, > &opacity,color,&end)==10 && (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf,%f,0%c%x," > "%4095[0-9.eE,+-]%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax, > &ymin,&ymax,&opacity,&seph,&pattern,color,&end)==12 && > seph=='x')) && > resolution>0 && plot_type<=3 && vertex_type<=7) { > resolution = cimg::round(resolution); > gmic_strreplace(formula); > print(images,0, > "Draw graph of formula '%s' on image%s, with resolution %g, %s contours, " > "%s vertices, x-range = (%g,%g), y-range = (%g,%g), opacity %g, " > "pattern 0x%x and color (%s).", > formula, > selection2string(selection,images_names,true).data(), > resolution, > plot_type==0?"no":plot_type==1?"linear":plot_type==2?"spline":"bar", > vertex_type==0?"no":vertex_type==1?"dot":vertex_type==2?"straight cross": > vertex_type==3?"diagonal cross":vertex_type==4?"filled circle": > vertex_type==5?"outlined circle":vertex_type==6?"square":"diamond", > xmin,xmax, > ymin,ymax, > opacity,pattern, > *color?color:"default"); > if (xmin==0 && xmax==0) { xmin = -4; xmax = 4; } > if (!plot_type && !vertex_type) plot_type = 1; > if (resolution<1) resolution = 65536; > > CImg<double> values(4,(unsigned int)resolution--,1,1,0); > const double dx = xmax - xmin; > for (int X = 0; X<(int)((values)._height); ++X) values(0,X) = xmin + X*dx/resolution; > cimg::eval(formula,values).move_to(values); > > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); images_names[posi].mark(); } } > ; > } > } else if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&plot_type,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&plot_type,&vertex_type,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf,%f%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&opacity,&end)==6|| > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf,%f,0%c%x%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&opacity,&seph, > &pattern,&end)==8 && > seph=='x') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf,%f," > "%4095[0-9.eE,+-]%c", > indices,&plot_type,&vertex_type,&ymin,&ymax,&opacity, > color,&end)==7 && > (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%lf,%lf," > "%f,0%c%x,%4095[0-9.eE,+-]%c", > indices,&plot_type,&vertex_type,&ymin,&ymax, > &opacity,&seph,&pattern,color,&end)==9 && > seph=='x')) && > (ind=selection2cimg(indices,images.size(),images_names,"-graph",true, > false,CImg<char>::empty())).height()==1 && > plot_type<=3 && vertex_type<=7) { > if (!plot_type && !vertex_type) plot_type = 1; > print(images,0,"Draw graph of dataset [%u] on image%s, with %s contours, %s vertices, " > "y-range = (%g,%g), opacity %g, pattern 0x%x and color (%s).", > *ind, > selection2string(selection,images_names,true).data(), > plot_type==0?"no":plot_type==1?"linear":plot_type==2?"spline":"bar", > vertex_type==0?"no":vertex_type==1?"dot":vertex_type==2?"straight cross": > vertex_type==3?"diagonal cross":vertex_type==4?"filled circle": > vertex_type==5?"outlined circle":vertex_type==6?"square":"diamond", > ymin,ymax, > opacity,pattern, > *color?color:"default"); > const CImg<T> values = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_graph(values,col.data(),opacity,plot_type,vertex_type, ymin,ymax,pattern); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"graph","Command '-%s': Invalid argument '%s'.","graph",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='h') { > > > > > if (!std::strcmp("-histogram",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sep = 0, sep0 = 0, sep1 = 0; > double value0 = 0, value1 = 0; > float nb_levels = 256; > bool no_min_max = false; > if (((std::sscanf(argument,"%f%c", > &nb_levels,&end)==1 && (no_min_max=true)) || > ((std::sscanf(argument,"%f%c%c", > &nb_levels,&sep,&end)==2 && sep=='%') && (no_min_max=true)) || > std::sscanf(argument,"%f,%lf,%lf%c", > &nb_levels,&value0,&value1,&end)==3 || > (std::sscanf(argument,"%f%c,%lf,%lf%c", > &nb_levels,&sep,&value0,&value1,&end)==4 && sep=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c", > &nb_levels,&value0,&sep0,&value1,&end)==4 && sep0=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c", > &nb_levels,&sep,&value0,&sep0,&value1,&end)==5 && sep=='%' && > sep0=='%') || > (std::sscanf(argument,"%f,%lf,%lf%c%c", > &nb_levels,&value0,&value1,&sep1,&end)==4 && sep1=='%') || > (std::sscanf(argument,"%f%c,%lf,%lf%c%c", > &nb_levels,&sep,&value0,&value1,&sep1,&end)==5 && sep=='%' && > sep1=='%') || > (std::sscanf(argument,"%f,%lf%c,%lf%c%c", > &nb_levels,&value0,&sep0,&value1,&sep1,&end)==5 && sep0=='%' && > sep1=='%') || > (std::sscanf(argument,"%f%c,%lf%c,%lf%c%c", > &nb_levels,&sep,&value0,&sep0,&value1,&sep1,&end)==6 && sep=='%' && > sep0=='%' && sep1=='%')) && > nb_levels>=0.5) { nb_levels = cimg::round(nb_levels); ++position; } > else { nb_levels = 256; value0 = 0; value1 = 100; sep = 0; sep0 = sep1 = '%'; } > if (no_min_max) { value0 = 0; value1 = 100; sep0 = sep1 = '%'; } > print(images,0,"Compute histogram of image%s, using %g%s level%s in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > nb_levels,sep=='%'?"%":"", > nb_levels>1?"s":"", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > const unsigned int > _nb_levels = cimg::max(1U, > (unsigned int)cimg::round(sep=='%'? > nb_levels*(1+nvalue1-nvalue0)/100: > nb_levels)); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_histogram(_nb_levels,(T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].histogram(_nb_levels,(T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-hsi2rgb",command)) { print(images,0,"Convert image%s from HSI to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_HSItoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].HSItoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-hsl2rgb",command)) { print(images,0,"Convert image%s from HSL to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_HSLtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].HSLtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-hsv2rgb",command)) { print(images,0,"Convert image%s from HSV to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_HSVtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].HSVtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-hessian",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> axes(64); > *axes = 0; > if (std::sscanf(argument,"%63[xyz]%c", > axes.data(),&end)==1) { > ++position; > print(images,0,"Compute Hessian of image%s along axes '%s'.", > selection2string(selection,images_names,true).data(), > axes.data()); > } else > print(images,0,"Compute Hessian of image%s.", > selection2string(selection,images_names,true).data()); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > CImg<T>& img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> hessian = img.get_hessian(*axes?axes.data():0); > if (is_get_version) { > images_names.insert(hessian.size(),name.copymark()); > hessian.move_to(images,~0U); > } else { > off+=hessian.size() - 1; > hessian[0].move_to(images[ind].assign()); > for (unsigned int i = 1; i<hessian.size(); ++i) hessian[i].move_to(images,ind+i); > images_names[ind] = name; > if (hessian.size()>1) images_names.insert(hessian.size()-1,name.copymark(),ind+1); > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='i' && !(command[2]=='f' && !command[3])) { > > > > > if (!std::strcmp("-image",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sep = 0, sepx = 0, sepy = 0, sepz = 0, sepc = 0; > CImg<char> indicesm(256); > float x = 0, y = 0, z = 0, c = 0, opacity = 1, max_opacity_mask = 1; > CImg<unsigned int> ind, indm; > *indices = *indicesm = *argx = *argy = *argz = *argc = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-]%c", > indices,argx,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > indices,argx,argy,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > indices,argx,argy,argz,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > indices,argx,argy,argz,argc,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > indices,argx,argy,argz,argc,&opacity,&end)==6 || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[0-9.eE%+-],%f,[%255[a-zA-Z0-9_.%+-]%c%c", > indices,argx,argy,argz,argc,&opacity,indicesm.data(),&sep,&end)==8 && > sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[0-9.eE%+-],%f,[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,argx,argy,argz,argc,&opacity,indicesm.data(), > &max_opacity_mask,&end)==8) && > (ind=selection2cimg(indices,images.size(),images_names,"-image",true, > false,CImg<char>::empty())).height()==1 && > (!*indicesm || > (indm = selection2cimg(indicesm,images.size(),images_names,"-image",true, > false,CImg<char>::empty())).height()==1) && > (!*argx || > std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&c,&end)==1 || > (std::sscanf(argc,"%f%c%c",&c,&sepc,&end)==2 && sepc=='%'))) { > const CImg<T> sprite = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > CImg<T> mask; > if (indm) { > mask = check_image(images,_gmic_image_arg(*indm,selection)?images[*indm]: images[*indm].get_shared()); > print(images,0,"Draw image [%u] at (%g%s,%g%s,%g%s,%g%s) on image%s, " > "with opacity %g and mask [%u].", > *ind, > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > c,sepc=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity, > *indm); > } else print(images,0,"Draw image [%u] at (%g%s,%g%s,%g%s,%g%s) on image%s, " > "with opacity %g.", > *ind, > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > c,sepc=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z), > nc = (int)cimg::round(sepc=='%'?c*(img.spectrum()-1)/100:c); > if (indm) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_image(nx,ny,nz,nc,sprite,mask,opacity,max_opacity_mask); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_image(nx,ny,nz,nc,sprite,mask,opacity,max_opacity_mask); images_names[posi].mark(); } }; > } else { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_image(nx,ny,nz,nc,sprite,opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_image(nx,ny,nz,nc,sprite,opacity); images_names[posi].mark(); } }; > } > } > } else gmic::error(images,0,"image","Command '-%s': Invalid argument '%s'.","image",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-index",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int lut_type = 0, map_indexes = 0; > float dithering = 0; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&dithering,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%u%c", > indices,&dithering,&map_indexes,&end)==3) && > (ind=selection2cimg(indices,images.size(),images_names,"-index",true, > false,CImg<char>::empty())).height()==1) { > const float ndithering = dithering<0?0:dithering>1?1:dithering; > print(images,0,"Index values in image%s by LUT [%u], with dithering level %g%s.", > selection2string(selection,images_names,true).data(), > *ind, > ndithering, > map_indexes?" and index mapping":""); > const CImg<T> palette = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_index(palette,ndithering,(bool)map_indexes); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].index(palette,ndithering,(bool)map_indexes); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"%u%c",&lut_type,&end)==1 || > std::sscanf(argument,"%u,%f%c",&lut_type,&dithering,&end)==2 || > std::sscanf(argument,"%u,%f,%u%c", > &lut_type,&dithering,&map_indexes,&end)==3) && > lut_type<=7) { > const float ndithering = dithering<0?0:dithering>1?1:dithering; > print(images,0,"Index values in image%s by %s color LUT, with dithering level %g%s.", > selection2string(selection,images_names,true).data(), > lut_type==0?"default":lut_type==1?"HSV":lut_type==2?"lines":lut_type==3?"hot": > lut_type==4?"cool":lut_type==5?"jet":lut_type==6?"flag":"cube", > ndithering,map_indexes?" and index mapping":""); > const CImg<T> > palette = lut_type==0?CImg<T>::default_LUT256():lut_type==1?CImg<T>::HSV_LUT256(): > lut_type==2?CImg<T>::lines_LUT256():lut_type==3?CImg<T>::hot_LUT256(): > lut_type==4?CImg<T>::cool_LUT256():lut_type==5?CImg<T>::jet_LUT256(): > lut_type==6?CImg<T>::flag_LUT256():CImg<T>::cube_LUT256(); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_index(palette,ndithering,(bool)map_indexes); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].index(palette,ndithering,(bool)map_indexes); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"index","Command '-%s': Invalid argument '%s'.","index",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-invert",command)) { print(images,0,"Invert matrix image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_invert(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].invert(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-isoline3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x0 = -3, y0 = -3, x1 = 3, y1 = 3, value = 0, dx = 256, dy = 256; > char sep = 0, sepx = 0, sepy = 0; > *formula = 0; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 || > std::sscanf(argument,"%f%c%c", > &value,&sep,&end)==2) { > print(images,0,"Extract 3d isolines from image%s, using isovalue %g%s.", > selection2string(selection,images_names,true).data(), > value,sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > if (img) { > CImg<float> vertices; > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > CImg<unsigned char> palette; > palette.assign(3,img.spectrum(),1,1,220).noise(35,1); > if (img.spectrum()==1) palette(0) = palette(1) = palette(2) = 200; > else { > palette(0,0) = 255; palette(1,0) = palette(2,0) = 30; > palette(0,1) = palette(2,1) = 30; palette(1,1) = 255; > if (img.spectrum()>=3) palette(0,2) = palette(1,2) = 30; palette(2,2) = 255; > } > for (int k = 0; k<(int)((img)._spectrum); ++k) { > const CImg<T> channel = img.get_shared_channel(k); > float nvalue = value; > if (sep=='%') { > float vmin = 0, vmax = (float)channel.max_min(vmin); > nvalue = vmin + (vmax-vmin)*value/100; > } > CImgList<unsigned int> prims; > const CImg<float> pts = img.get_shared_channel(k).get_isoline3d(prims,nvalue); > vertices.append_object3d(primitives,pts,prims); > colors.insert(prims.size(),CImg<unsigned char>::vector(palette(0,k), > palette(1,k), > palette(2,k))); > } > if (!vertices) > warn(images,0,"Command '-isoline3d': Isovalue %g%s not found in image [%u].", > value,sep=='%'?"%":"",ind); > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } else if ((std::sscanf(argument,"'%4095[^']',%f%c", > formula,&value,&end)==2 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&x1,&y1,&end)==6 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&dy,&end)==8 || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f%c,%f%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&sepx,&dy,&end)==9 && > sepx=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f%c%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&dy,&sepy,&end)==9 && > sepy=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f%c,%f%c%c", > formula,&value,&x0,&y0,&x1,&y1,&dx,&sepx,&dy,&sepy,&end)==10&& > sepx=='%' && sepy=='%')) && > dx>0 && dy>0) { > dx = cimg::round(dx); > dy = cimg::round(dy); > gmic_strreplace(formula); > print(images,0,"Extract 3d isoline %g from formula '%s', in range (%g,%g)-(%g,%g) " > "with size %g%sx%g%s.", > value, > formula, > x0,y0, > x1,y1, > dx,sepx=='%'?"%":"", > dy,sepy=='%'?"%":""); > if (sepx=='%') dx = -dx; > if (sepy=='%') dy = -dy; > CImgList<unsigned int> primitives; > CImg<T> vertices = CImg<T>::isoline3d(primitives,(const char*)formula,value, > x0,y0,x1,y1,(int)dx,(int)dy); > vertices.object3dtoCImg3d(primitives,false).move_to(images); > snprintf(title,_title.size(),"[3d isoline %g of '%s']",value,formula); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(images_names); > } else gmic::error(images,0,"isoline3d","Command '-%s': Invalid argument '%s'.","isoline3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-isosurface3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x0 = -3, y0 = -3, z0 = -3, x1 = 3, y1 = 3, z1 = 3, value = 0, > dx = 32, dy = 32, dz = 32; > char sep = 0, sepx = 0, sepy = 0, sepz = 0; > *formula = 0; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 || > std::sscanf(argument,"%f%c%c", > &value,&sep,&end)==2) { > print(images,0,"Extract 3d isosurface from image%s, using isovalue %g%s.", > selection2string(selection,images_names,true).data(), > value,sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > if (img) { > CImg<float> vertices; > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > CImg<unsigned char> palette; > palette.assign(3,img.spectrum(),1,1,220).noise(35,1); > if (img.spectrum()==1) palette(0) = palette(1) = palette(2) = 200; > else { > palette(0,0) = 255; palette(1,0) = palette(2,0) = 30; > palette(0,1) = palette(2,1) = 30; palette(1,1) = 255; > if (img.spectrum()>=3) palette(0,2) = palette(1,2) = 30; palette(2,2) = 255; > } > for (int k = 0; k<(int)((img)._spectrum); ++k) { > const CImg<T> channel = img.get_shared_channel(k); > float nvalue = value; > if (sep=='%') { > float vmin = 0, vmax = (float)channel.max_min(vmin); > nvalue = vmin + (vmax-vmin)*value/100; > } > CImgList<unsigned int> prims; > const CImg<float> pts = channel.get_isosurface3d(prims,nvalue); > vertices.append_object3d(primitives,pts,prims); > colors.insert(prims.size(),CImg<unsigned char>::vector(palette(0,k), > palette(1,k), > palette(2,k))); > } > if (!vertices) { > if (img.depth()>1) > warn(images,0, > "Command '-isosurface3d': Isovalue %g%s not found in image [%u].", > value,sep=='%'?"%":"",ind); > else > warn(images,0, > "Command '-isosurface3d': Image [%u] has a single slice, " > "isovalue %g%s not found.", > ind,value,sep=='%'?"%":""); > } > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } else if ((std::sscanf(argument,"'%4095[^']',%f%c", > formula,&value,&end)==2 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1,&end)==8 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1,&dx,&dy,&dz,&end)==11 || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&dz,&end)==12 && > sepx=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&dy,&sepy,&dz,&end)==12 && > sepy=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&dy,&dz,&sepz,&end)==12 && > sepz=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c,%f%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&sepy,&dz,&end)==13 && > sepx=='%' && sepy=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&dz,&sepz,&end)==13 && > sepx=='%' && sepz=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&dy,&sepy,&dz,&sepz,&end)==13 && > sepy=='%' && sepz=='%') || > (std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%f,%f,%f%c,%f%c,%f%c%c", > formula,&value,&x0,&y0,&z0,&x1,&y1,&z1, > &dx,&sepx,&dy,&sepy,&dz,&sepz,&end)==14 && > sepx=='%' && sepy=='%' && sepz=='%')) && > dx>0 && dy>0 && dz>0) { > dx = cimg::round(dx); > dy = cimg::round(dy); > dz = cimg::round(dz); > gmic_strreplace(formula); > print(images,0,"Extract 3d isosurface %g from formula '%s', " > "in range (%g,%g,%g)-(%g,%g,%g) with size %g%sx%g%sx%g%s.", > value, > formula, > x0,y0,z0, > x1,y1,z1, > dx,sepx=='%'?"%":"", > dy,sepy=='%'?"%":"", > dz,sepz=='%'?"%":""); > if (sepx=='%') dx = -dx; > if (sepy=='%') dy = -dy; > if (sepz=='%') dz = -dz; > CImgList<unsigned int> primitives; > CImg<T> vertices = CImg<T>::isosurface3d(primitives,(const char*)formula,value, > x0,y0,z0,x1,y1,z1,(int)dx,(int)dy,(int)dz); > vertices.object3dtoCImg3d(primitives,false).move_to(images); > snprintf(title,_title.size(),"[3d isosurface %g of '%s']",value,formula); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(images_names); > } else gmic::error(images,0,"isosurface3d","Command '-%s': Invalid argument '%s'.","isosurface3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-inpaint",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float patch_size = 11, lookup_size = 22, lookup_factor = 0.5, lookup_increment = 1, > blend_size = 0, blend_threshold = 0, blend_decay = 0.05f, blend_scales = 10; > unsigned int is_blend_outer = 1, method = 1; > CImg<unsigned int> ind; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%c%c",indices,&sep,&end)==2 && > sep=='0') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],0,%u%c",indices,&method,&end)==2) && > (ind=selection2cimg(indices,images.size(),images_names,"-inpaint",true, > false,CImg<char>::empty())).height()==1 && > method<=3) { > print(images,0,"Inpaint image%s masked by image [%u], with %s algorithm.", > selection2string(selection,images_names,true).data(), > *ind, > method==0?"low-connectivity average":method==1?"high-connectivity average": > method==2?"low-connectivity median":"high-connectivity median"); > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_inpaint(mask,method); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].inpaint(mask,method); images_names[posi].mark(); } }; > } > } else if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&patch_size,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&patch_size,&lookup_size,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&end)==7 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&blend_decay, > &end)==8 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f,%f,%f%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&blend_decay, > &blend_scales,&end)==9 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%f,%f,%f,%f,%u%c", > indices,&patch_size,&lookup_size,&lookup_factor, > &lookup_increment,&blend_size,&blend_threshold,&blend_decay, > &blend_scales,&is_blend_outer,&end)==10) && > (ind=selection2cimg(indices,images.size(),images_names,"-inpaint",true, > false,CImg<char>::empty())).height()==1 && > patch_size>=0.5 && lookup_size>=0.5 && lookup_factor>=0 && > blend_size>=0 && blend_threshold>=0 && blend_threshold<=1 && > blend_decay>=0 && blend_scales>=0.5 && is_blend_outer<=1) { > const CImg<T> mask = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > patch_size = cimg::round(patch_size); > lookup_size = cimg::round(lookup_size); > lookup_increment = cimg::round(lookup_increment); > blend_size = cimg::round(blend_size); > blend_scales = cimg::round(blend_scales); > print(images,0,"Inpaint image%s masked by image [%d], with patch size %g, " > "lookup size %g, lookup factor %g, lookup_increment %g, blend size %g, " > "blend threshold %g, blend decay %g, %g blend scale%s and outer blending %s.", > selection2string(selection,images_names,true).data(),*ind, > patch_size,lookup_size,lookup_factor,lookup_increment, > blend_size,blend_threshold,blend_decay,blend_scales,blend_scales!=1?"s":"", > is_blend_outer?"enabled":"disabled"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_inpaint_patch(mask, (unsigned int)patch_size,(unsigned int)lookup_size, lookup_factor, (int)lookup_increment, (unsigned int)blend_size,blend_threshold,blend_decay, (unsigned int)blend_scales,(bool)is_blend_outer); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].inpaint_patch(mask, (unsigned int)patch_size,(unsigned int)lookup_size, lookup_factor, (int)lookup_increment, (unsigned int)blend_size,blend_threshold,blend_decay, (unsigned int)blend_scales,(bool)is_blend_outer); images_names[posi].mark(); } } > > > > > > ; > } > } else gmic::error(images,0,"inpaint","Command '-%s': Invalid argument '%s'.","inpaint",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='k') { > > > if (!std::strcmp("-keep",command)) { > print(images,0,"Keep image%s", > selection2string(selection,images_names,true).data()); > CImgList<T> _images, nimages(selection.height()); > CImgList<char> _images_names, nimages_names(selection.height()); > if (is_get_version) { _images.assign(images); _images_names.assign(images_names); } > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > nimages.move_to(images); > nimages_names.move_to(images_names); > if (is_get_version) { > _images.move_to(images,0); > _images_names.move_to(images_names,0); > } > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," (%u image%s left).", > images.size(),images.size()==1?"":"s"); > std::fflush(cimg::output()); > } > is_released = false; continue; > } > > } > > > > > else if (command1=='l') { > > > if (!std::strcmp("-local",command)) { > CImg<char>::string("*local").move_to(scope); > if (verbosity>0 || is_debug) > print(images,0,"Start '-local..-endlocal' block, with image%s.", > selection2string(selection,images_names,true).data()); > CImgList<T> nimages(selection.height()); > CImgList<char> nimages_names(selection.height()); > if (is_get_version) for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].assign(images[selection[l]]); > nimages_names[l].assign(images_names[selection[l]]).copymark(); > } else for (int l = 0; l<(int)((selection)._height); ++l) { > if (images[selection[l]].is_shared()) > nimages[l] = CImg<T>(images[selection[l]],true); > else nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > const unsigned int local_scope_size = scope.size(); > CImg<char> exception_message, exception_command; > try { > _parse(commands_line,position,nimages,nimages_names,variables_sizes); > } catch (gmic_exception &e) { > int nb_locals = 0; > for (nb_locals = 1; nb_locals && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-local",it) || !std::strcmp("-l",it) || > !std::strcmp("--local",it) || !std::strcmp("--l",it) || > !std::strncmp("-local[",it,7) || !std::strncmp("-l[",it,3) || > !std::strncmp("--local[",it,8) || !std::strncmp("--l[",it,4)) ++nb_locals; > else if (!std::strcmp("-endlocal",it) || !std::strcmp("-endl",it)) --nb_locals; > else if (nb_locals==1 && !std::strcmp("-onfail",it)) break; > } > if (scope.size()>local_scope_size) scope.remove(local_scope_size,scope.size()-1); > if (nb_locals==1 && position<commands_line.size()) { > if (verbosity>0 || is_debug) print(images,0,"Reach '-onfail' block."); > _parse(commands_line,++position,nimages,nimages_names,variables_sizes); > } else { > exception_message.assign(e._message); > exception_command.assign(e._command_help); > } > } > scope.remove(); > if (is_get_version) { > nimages.move_to(images,~0U); > nimages_names.move_to(images_names,~0U); > } else { > const unsigned int nb = cimg::min((unsigned int)selection.height(),nimages.size()); > if (nb>0) { > for (unsigned int i = 0; i<nb; ++i) { > if (images[selection[i]].is_shared()) { > images[selection[i]] = nimages[i]; > nimages[i].assign(); > } else images[selection[i]].swap(nimages[i]); > images_names[selection[i]].swap(nimages_names[i]); > } > nimages.remove(0,nb-1); > nimages_names.remove(0,nb-1); > } > if (nb<(unsigned int)selection.height()) > remove_images(images,images_names,selection,nb,selection.height()-1); > else if (nimages) { > const unsigned int ind0 = selection?selection.back()+1:images.size(); > images.insert(nimages,ind0); > nimages_names.move_to(images_names,ind0); > } > } > if (exception_message || exception_command) > throw gmic_exception(exception_command.data(),exception_message.data()); > continue; > } > > > > > if (!std::strcmp("-le",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'less or equal than' between image%s " "and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_le((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_le((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-le", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'less or equal than' between image%s " "and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_le(img0); } else { images_names[selection[l]].mark(); img.operator_le(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'less or equal than' between image%s and " "expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_le((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_le((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'less or equal than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_le(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_le(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7370 "gmic.cpp" > ; > > > if (!std::strcmp("-lt",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean 'less than' between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_lt((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_lt((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-lt", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean 'less than' between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_lt(img0); } else { images_names[selection[l]].mark(); img.operator_lt(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean 'less than' between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_lt((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_lt((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean 'less than' between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_lt(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_lt(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7382 "gmic.cpp" > ; > > > if (!std::strcmp("-log",command)) { print(images,0,"Compute pointwise base-e logarithm of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_log(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].log(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-log2",command)) { print(images,0,"Compute pointwise base-2 logarithm of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_log2(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].log2(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-log10",command)) { print(images,0,"Compute pointwise base-10 logarithm of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_log10(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].log10(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-line",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > *argx = *argy = *argz = *argc = *color = 0; > float x0 = 0, y0 = 0, x1 = 0, y1 = 0, opacity = 1; > char sepx0 = 0, sepy0 = 0, sepx1 = 0, sepy1 = 0, seph = 0; > unsigned int pattern = ~0U; > if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f%c", > argx,argy,argz,argc,&opacity,&end)==5 || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,0%c%x%c", > argx,argy,argz,argc,&opacity,&seph,&pattern,&end)==7 && > seph=='x') || > (std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,%4095[0-9.eE,+-]%c", > argx,argy,argz,argc,&opacity,color,&end)==6 && (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%f,0%c%x,%4095[0-9.eE,+-]%c", > argx,argy,argz,argc,&opacity,&seph, > &pattern,color,&end)==8 && seph=='x')) && > (std::sscanf(argx,"%f%c",&x0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x0,&sepx0,&end)==2 && sepx0=='%')) && > (std::sscanf(argy,"%f%c",&y0,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y0,&sepy0,&end)==2 && sepy0=='%')) && > (std::sscanf(argz,"%f%c",&x1,&end)==1 || > (std::sscanf(argz,"%f%c%c",&x1,&sepx1,&end)==2 && sepx1=='%')) && > (std::sscanf(argc,"%f%c",&y1,&end)==1 || > (std::sscanf(argc,"%f%c%c",&y1,&sepy1,&end)==2 && sepy1=='%'))) { > print(images,0,"Draw line (%g%s,%g%s) - (%g%s,%g%s) on image%s, with opacity %g, " > "pattern 0x%x and color (%s).", > x0,sepx0=='%'?"%":"", > y0,sepy0=='%'?"%":"", > x1,sepx1=='%'?"%":"", > y1,sepy1=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity,pattern, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const int > nx0 = (int)cimg::round(sepx0=='%'?x0*(img.width()-1)/100:x0), > ny0 = (int)cimg::round(sepy0=='%'?y0*(img.height()-1)/100:y0), > nx1 = (int)cimg::round(sepx1=='%'?x1*(img.width()-1)/100:x1), > ny1 = (int)cimg::round(sepy1=='%'?y1*(img.height()-1)/100:y1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_line(nx0,ny0,nx1,ny1,col.data(),opacity,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_line(nx0,ny0,nx1,ny1,col.data(),opacity,pattern); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"line","Command '-%s': Invalid argument '%s'.","line",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-lab2rgb",command)) { print(images,0,"Convert image%s from Lab to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_LabtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].LabtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-label",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int is_high_connectivity = 0; > float tolerance = 0; > if ((std::sscanf(argument,"%f%c",&tolerance,&end)==1 || > std::sscanf(argument,"%f,%u%c",&tolerance,&is_high_connectivity,&end)==2) && > tolerance>=0) ++position; > else { tolerance = 0; is_high_connectivity = 0; } > print(images,0, > "Label connected components on image%s, with tolerance %g and " > "%s connectivity.", > selection2string(selection,images_names,true).data(),tolerance,is_high_connectivity?"high":"low"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_label((bool)is_high_connectivity,tolerance); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].label((bool)is_high_connectivity,tolerance); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-light3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float lx = 0, ly = 0, lz = -5e8f; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"%f,%f,%f%c", > &lx,&ly,&lz,&end)==3) { > print(images,0,"Set 3d light position to (%g,%g,%g).", > lx,ly,lz); > light3d_x = lx; > light3d_y = ly; > light3d_z = lz; > ++position; > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-light3d",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Set 3d light texture from image [%u].",*ind); > light3d.assign(images[*ind],false); > ++position; > } else { > print(images,0,"Reset 3d light to default."); > light3d.assign(); > light3d_x = light3d_y = 0; light3d_z = -5e8f; > } > continue; > } > > > } > > > > > else if (command1=='m') { > > > if (!std::strcmp("-move",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float pos = 0; > char sep = 0; > if (std::sscanf(argument,"%f%c",&pos,&end)==1 || > (std::sscanf(argument,"%f%c%c",&pos,&sep,&end)==2 && sep=='%')) { > const int > _ind0 = (int)cimg::round(sep=='%'?pos*images.size()/100:pos), > ind0 = _ind0<0?_ind0+(int)images.size():_ind0; > if (ind0<0 || ind0>(int)images.size()) > error(images,0,0, > "Command '-move': Invalid position '%d' (not in range -%u..%u).", > _ind0,images.size(),images.size()-1); > print(images,0,"Move image%s to position %d.", > selection2string(selection,images_names,true).data(), > ind0); > CImgList<T> _images, nimages; > CImgList<char> _images_names, nimages_names; > if (is_get_version) { > _images.insert(images.size()); > > for (int l = 0; l<(int)(_images)._width; ++l) _images[l].assign(images[l],images[l].is_shared()); > _images_names.assign(images_names); > } > nimages.insert(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > if (is_get_version) images[ind].move_to(nimages[l]); > else images[ind].swap(nimages[l]); > > images[ind]._is_shared = true; > images_names[ind].move_to(nimages_names); > } > images.insert(nimages.size(),ind0); > for (int l = 0; l<(int)(nimages)._width; ++l) nimages[l].swap(images[ind0+l]); > nimages_names.move_to(images_names,ind0); > for (int l = 0; l<(int)(images)._width; ++l) if (!images[l] && images[l].is_shared()) { > images.remove(l); images_names.remove(l--); > } > if (is_get_version) { > for (int l = 0; l<(int)(images)._width; ++l) > if (images[l].is_shared()) { > CImg<T> tmp; (images[l].move_to(tmp)).swap(images[l]); > } > images.insert(_images.size(),0); > for (int l = 0; l<(int)(_images)._width; ++l) images[l].swap(_images[l]); > _images_names.move_to(images_names,0); > } > } else gmic::error(images,0,"move","Command '-%s': Invalid argument '%s'.","move",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-mirror",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > bool is_valid_argument = true; > for (const char *s = argument; *s; ++s) { > const char _s = *s; > if (_s!='x' && _s!='y' && _s!='z' && _s!='c') { is_valid_argument = false; break; } > } > if (*argument && is_valid_argument) { > print(images,0,"Mirror image%s along the '%s'-ax%cs.", > selection2string(selection,images_names,true).data(), > argument_text, > std::strlen(argument)>1?'e':'i'); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_mirror(argument); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].mirror(argument); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"mirror","Command '-%s': Invalid argument '%s'.","mirror",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-mutex",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int number, is_lock = 1; > if ((std::sscanf(argument,"%u%c", > &number,&end)==1 || > std::sscanf(argument,"%u,%u%c", > &number,&is_lock,&end)==2) && > number<256 && is_lock<=1) { > print(images,0,"%s mutex #%u.", > is_lock?"Lock":"Unlock",number); > if (is_lock) gmic_mutex().lock(number); > else gmic_mutex().unlock(number); > } else gmic::error(images,0,"mutex","Command '-%s': Invalid argument '%s'.","mutex",argument_text); > ++position; continue; > } > > > > > if (!std::strcmp("-mul",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Multiply image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator*=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mul", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Multiply image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].mul(img0); } else { images_names[selection[l]].mark(); img.mul(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Multiply image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].mul((const char*)formula); } else { images_names[selection[l]].mark(); img.mul((const char*)formula); } } ++position; } else { print(images,0,"Multiply image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.mul(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.mul(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7609 "gmic.cpp" > ; > > if (!std::strcmp("-mod",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute pointwise modulo of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator%=((T)nvalue); } else { images_names[selection[l]].mark(); img.operator%=((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mod", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute pointwise modulo of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator%=(img0); } else { images_names[selection[l]].mark(); img.operator%=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute pointwise modulo of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator%=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator%=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential pointwise modulo of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator%=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator%=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7620 "gmic.cpp" > ; > > > if (!std::strcmp("-max",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute pointwise maximum between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].max((T)nvalue); } else { images_names[selection[l]].mark(); img.max((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-max", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute pointwise maximum between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].max(img0); } else { images_names[selection[l]].mark(); img.max(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute pointwise maximum between image%s and expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].max((const char*)formula); } else { images_names[selection[l]].mark(); img.max((const char*)formula); } } ++position; } else { print(images,0,"Compute pointwise maximum of all image%s together" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.max(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.max(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7632 "gmic.cpp" > ; > > if (!std::strcmp("-min",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute pointwise minimum between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].min((T)nvalue); } else { images_names[selection[l]].mark(); img.min((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-min", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute pointwise minimum between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].min(img0); } else { images_names[selection[l]].mark(); img.min(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute pointwise minimum between image%s and expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].min((const char*)formula); } else { images_names[selection[l]].mark(); img.min((const char*)formula); } } ++position; } else { print(images,0,"Compute pointwise minimum of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.min(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.min(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7643 "gmic.cpp" > ; > > > if (!std::strcmp("-mmul",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Multiply matrix/vector%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator*=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mmul", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Multiply matrix/vector%s by matrix/vector image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=(img0); } else { images_names[selection[l]].mark(); img.operator*=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Multiply matrix/vector%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator*=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator*=((const char*)formula); } } ++position; } else { print(images,0,"Multiply matrix/vector%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator*=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator*=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7655 "gmic.cpp" > ; > > > if (!std::strcmp("-mode3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int value = 4; > if (std::sscanf(argument,"%d%c", > &value,&end)==1 && > value>=-1 && value<=5) ++position; > else value = 4; > render3d = value; > print(images,0,"Set static 3d rendering mode to %s.", > render3d==-1?"bounding-box": > render3d==0?"pointwise":render3d==1?"linear":render3d==2?"flat": > render3d==3?"flat-shaded":render3d==4?"Gouraud-shaded": > render3d==5?"Phong-shaded":"none"); > continue; > } > > if (!std::strcmp("-moded3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int value = -1; > if (std::sscanf(argument,"%d%c", > &value,&end)==1 && > value>=-1 && value<=5) ++position; > else value = -1; > renderd3d = value; > print(images,0,"Set dynamic 3d rendering mode to %s.", > renderd3d==-1?"bounding-box": > renderd3d==0?"pointwise":renderd3d==1?"linear":renderd3d==2?"flat": > renderd3d==3?"flat-shaded":renderd3d==4?"Gouraud-shaded": > renderd3d==5?"Phong-shaded":"none"); > continue; > } > > > if (!std::strcmp("-map",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int lut_type = 0; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-map",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Map LUT [%u] on image%s.", > *ind, > selection2string(selection,images_names,true).data()); > const CImg<T> palette = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_map(palette); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].map(palette); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%u%c",&lut_type,&end)==1 && > lut_type<=7) { > print(images,0,"Map %s color LUT on image%s.", > lut_type==0?"default":lut_type==1?"HSV":lut_type==2?"lines":lut_type==3?"hot": > lut_type==4?"cool":lut_type==5?"jet":lut_type==6?"flag":"cube", > selection2string(selection,images_names,true).data()); > const CImg<T> > palette = lut_type==0?CImg<T>::default_LUT256():lut_type==1?CImg<T>::HSV_LUT256(): > lut_type==2?CImg<T>::lines_LUT256():lut_type==3?CImg<T>::hot_LUT256(): > lut_type==4?CImg<T>::cool_LUT256():lut_type==5?CImg<T>::jet_LUT256(): > lut_type==6?CImg<T>::flag_LUT256():CImg<T>::cube_LUT256(); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_map(palette); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].map(palette); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"map","Command '-%s': Invalid argument '%s'.","map",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-median",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float siz = 3; > if (std::sscanf(argument,"%f%c", > &siz,&end)==1 && > siz>=0) { > siz = cimg::round(siz); > print(images,0,"Apply median filter of size %g, on image%s.", > siz, > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_median((unsigned int)siz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_median((unsigned int)siz); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"median","Command '-%s': Invalid argument '%s'.","median",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-mdiv",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Divide matrix/vector%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator/=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-mdiv", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Divide matrix/vector%s by matrix/vector image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=(img0); } else { images_names[selection[l]].mark(); img.operator/=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Divide matrix/vector%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator/=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator/=((const char*)formula); } } ++position; } else { print(images,0,"Divide matrix/vector%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator/=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator/=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7753 "gmic.cpp" > ; > > > if (!std::strcmp("-mse",command)) { > print(images,0,"Compute the %dx%d matrix of MSE values, from image%s.", > selection.height(),selection.height(), > selection2string(selection,images_names,true).data()); > if (selection) { > CImgList<T> subimages(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) subimages[l].assign(check_image(images,images[selection[l]]),true); > CImg<T> img(subimages.size(),subimages.size(),1,1,(T)0); > > > > for (int y = 0; y<(int)((img)._height); ++y) for (int x = 0; x<(int)((img)._width); ++x) if (x>y) img(x,y) = img(y,x) = (T)subimages[x].MSE(subimages[y]); > CImg<char> name = CImg<char>::string("[MSE]"); > if (is_get_version) { > img.move_to(images); > name.move_to(images_names); > } else { > remove_images(images,images_names,selection,1,selection.height()-1); > img.move_to(images[selection[0]].assign()); > name.move_to(images_names[selection[0]]); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-mandelbrot",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double z0r = -2, z0i = -2, z1r = 2, z1i = 2, paramr = 0, parami = 0; > unsigned int is_julia = 0; > float opacity = 1, itermax = 100; > if ((std::sscanf(argument,"%lf,%lf,%lf,%lf%c", > &z0r,&z0i,&z1r,&z1i,&end)==4 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&end)==5 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f,%u%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&is_julia,&end)==6 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f,%u,%lf,%lf%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&is_julia,¶mr, > ¶mi,&end)==8 || > std::sscanf(argument,"%lf,%lf,%lf,%lf,%f,%u,%lf,%lf,%f%c", > &z0r,&z0i,&z1r,&z1i,&itermax,&is_julia, > ¶mr,¶mi,&opacity,&end)==9) && > itermax>=0 && is_julia<=1) { > itermax = cimg::round(itermax); > print(images,0,"Draw %s fractal on image%s, from complex area (%g,%g)-(%g,%g) " > "with c0 = (%g,%g) and %g iterations.", > is_julia?"julia":"mandelbrot", > selection2string(selection,images_names,true).data(), > z0r,z0i, > z1r,z1i, > paramr,parami, > itermax); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_draw_mandelbrot(CImg<T>(),opacity,z0r,z0i,z1r,z1i, (unsigned int)itermax,true, (bool)is_julia, paramr,parami); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].draw_mandelbrot(CImg<T>(),opacity,z0r,z0i,z1r,z1i, (unsigned int)itermax,true, (bool)is_julia, paramr,parami); images_names[posi].mark(); } } > > > ; > } > } else gmic::error(images,0,"mandelbrot","Command '-%s': Invalid argument '%s'.","mandelbrot",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='n') { > > > if (!std::strcmp("-name",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const unsigned int l = std::strlen(argument); > CImg<char> name(argument,l+1); > unsigned int is_modified=0; > if (l>=2 && name[l-2]==',' && (name[l-1]=='0' || name[l-1]=='1')) { > is_modified = name[l-1]!='0'; > name[l-2] = 0; > } > print(images,0,"Set name of image%s to '%s'%s.", > selection2string(selection,images_names,true).data(),name.data(),is_modified?" (modified)":""); > gmic_strreplace(name); > if (is_modified) name.mark(); > for (int l = 0; l<(int)((selection)._height); ++l) images_names[selection[l]].assign(name); > ++position; continue; > } > > > > > if (!std::strcmp("-normalize",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > double value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-normalize",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%lf%c%c",&value0,&sep0,&end)==2 && sep0=='%') || > std::sscanf(argx,"%lf%c",&value0,&end)==1) && > ((std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep1,&end)==2 && > sep1==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-normalize",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%lf%c%c",&value1,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argy,"%lf%c",&value1,&end)==1)) { > if (ind0) { value0 = images[*ind0].min(); sep0 = 0; } > if (ind1) { value1 = images[*ind1].max(); sep1 = 0; } > print(images,0,"Normalize image%s in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_normalize((T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.normalize((T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-normalize",true, > false,CImg<char>::empty())).height()==1) { > if (images[*ind0]) value1 = (double)images[*ind0].max_min(value0); > print(images,0,"Normalize image%s in range [%g,%g].", > selection2string(selection,images_names,true).data(), > value0, > value1); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_normalize((T)value0,(T)value1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].normalize((T)value0,(T)value1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"normalize","Command '-%s': Invalid argument '%s'.","normalize",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-neq",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute boolean inequality between image%s and %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_neq((T)nvalue); } else { images_names[selection[l]].mark(); img.operator_neq((T)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-neq", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute boolean inequality between image%s and image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_neq(img0); } else { images_names[selection[l]].mark(); img.operator_neq(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute boolean inequality between image%s and expression %s'" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator_neq((const char*)formula); } else { images_names[selection[l]].mark(); img.operator_neq((const char*)formula); } } ++position; } else { print(images,0,"Compute boolean inequality between image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_neq(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator_neq(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 7910 "gmic.cpp" > ; > > > if (!std::strcmp("-noise",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int noise_type = 0; > float sigma = 0; > char sep = 0; > if ((std::sscanf(argument,"%f%c", > &sigma,&end)==1 || > (std::sscanf(argument,"%f%c%c", > &sigma,&sep,&end)==2 && sep=='%') || > std::sscanf(argument,"%f,%d%c", > &sigma,&noise_type,&end)==2 || > (std::sscanf(argument,"%f%c,%d%c", > &sigma,&sep,&noise_type,&end)==3 && sep=='%')) && > sigma>=0 && noise_type>=0 && noise_type<=4) { > const char *s_type = noise_type==0?"gaussian": > noise_type==1?"uniform": > noise_type==2?"salt&pepper": > noise_type==3?"poisson":"rice"; > if (sep=='%') sigma = -sigma; > print(images,0,"Add %s noise to image%s, with standard deviation %g%s.", > s_type, > selection2string(selection,images_names,true).data(), > cimg::abs(sigma),sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_noise(sigma,noise_type); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].noise(sigma,noise_type); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"noise","Command '-%s': Invalid argument '%s'.","noise",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='o') { > > > if (!std::strcmp("-output",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char cext[8]; > CImg<char> _filename(4096), filename_tmp(1024), options(256); > *cext = *_filename = *filename_tmp = *options = 0; > if (std::sscanf(argument,"%8[a-zA-Z]:%4095[^,],%255s", > cext,_filename.data(),options.data())<2 || > !cext[1]) { > *cext = *_filename = *options = 0; > if (std::sscanf(argument,"%4095[^,],%255s",_filename.data(),options.data())!=2) { > std::strncpy(_filename,argument,_filename.width()-1); > _filename[_filename.width()-1] = 0; > } > } > gmic_strreplace(_filename); > gmic_strreplace(options); > > if (*cext) { > if (*_filename=='-' && (!_filename[1] || _filename[1]=='.')) { > > snprintf(_filename,_filename.width(),"-.%s",cext); > *cext = 0; > } else { > std::FILE *file = 0; > do { > snprintf(filename_tmp,filename_tmp.width(),"%s%c%s.%s", > cimg::temporary_path(),'/', > cimg::filenamerand(),cext); > if ((file=std::fopen(filename_tmp,"rb"))!=0) std::fclose(file); > } while (file); > } > } > const char > *const filename = *cext?filename_tmp:_filename, > *const ext = cimg::split_filename(filename); > > if (!cimg::strcasecmp(ext,"off")) { > CImg<char> nfilename(4096); > *nfilename = 0; > std::strncpy(nfilename,filename,nfilename.width()-1); > nfilename[nfilename.width()-1] = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > const CImg<T>& img = check_image(images,images[ind]); > if (selection.height()!=1) cimg::number_filename(filename,l,6,nfilename); > CImgList<unsigned int> primitives; > CImgList<float> colors, opacities; > CImg<float> vertices(img,false); > try { > vertices.CImg3dtoobject3d(primitives,colors,opacities,false). > save_off(primitives,colors,nfilename); > } catch (CImgException &e) { > CImg<char> message(1024); > if (!vertices.is_CImg3d(true,message)) > error(images,0,0, > "Command '-output': 3d object file '%s', invalid 3d object [%u] " > "in selected image%s (%s).", > nfilename.data(),ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > print(images,0,"Output 3d object [%u] as file '%s'.", > ind, > nfilename.data()); > } > } else if (!cimg::strcasecmp(ext,"cpp") || !cimg::strcasecmp(ext,"c") || > !cimg::strcasecmp(ext,"hpp") || !cimg::strcasecmp(ext,"h") || > !cimg::strcasecmp(ext,"pan")) { > const char *const > stype = (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&(end=0))==1 || > (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&end)==2 && end==','))? > argx:cimg::type<T>::string(); > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],images[selection[l]]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with pixel type '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype, > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with pixel type '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); ># 8068 "gmic.cpp" > if (!std::strcmp(stype,"bool")) { if (output_images.size()==1) CImg<bool>(output_images[0], cimg::type<T>::string()==cimg::type<bool>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<bool>(output_images[l], cimg::type<T>::string()==cimg::type<bool>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"uchar")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned char")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"char")) { if (output_images.size()==1) CImg<char>(output_images[0], cimg::type<T>::string()==cimg::type<char>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<char>(output_images[l], cimg::type<T>::string()==cimg::type<char>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"ushort")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned short")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"short")) { if (output_images.size()==1) CImg<short>(output_images[0], cimg::type<T>::string()==cimg::type<short>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<short>(output_images[l], cimg::type<T>::string()==cimg::type<short>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"uint")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned int")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"int")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"ulong")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"unsigned long")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"long")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"float")) { if (output_images.size()==1) CImg<float>(output_images[0], cimg::type<T>::string()==cimg::type<float>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<float>(output_images[l], cimg::type<T>::string()==cimg::type<float>::string()). save(nfilename); } } } > else if (!std::strcmp(stype,"double")) { if (output_images.size()==1) CImg<double>(output_images[0], cimg::type<T>::string()==cimg::type<double>::string()). save(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<double>(output_images[l], cimg::type<T>::string()==cimg::type<double>::string()). save(nfilename); } } } > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > } else if (!cimg::strcasecmp(ext,"tiff") || !cimg::strcasecmp(ext,"tif")) { > const char *const > stype = (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&(end=0))==1 || > (std::sscanf(options,"%255[A-zA-Z]%c",&(*argx=0),&end)==2 && end==','))? > argx:cimg::type<T>::string(); > const unsigned int l_stype = std::strlen(stype); > const char *const _options = options.data() + (stype!=argx?0:l_stype+(end==','?1:0)); > float _compression = 0, _is_multipage = 0; > > if (std::sscanf(_options,"%f%c",&_compression,&end)!=1 && > std::sscanf(_options,"%f,%f%c",&_compression,&_is_multipage,&end)!=2) _compression = _is_multipage = 0; > if (_compression<0) _compression = 0; else if (_compression>6) _compression = 6; > const unsigned int compression = (unsigned int)cimg::round(_compression); > const bool is_multipage = (bool)cimg::round(_is_multipage); > > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0,"Output image%s as file '%s', with pixel type '%s' and %s compression " > "(1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(),stype, > compression==0?"no":compression==1?"CCITTRLE":compression==2?"CCITT4": > compression==3?"CCITT6":compression==4?"LZW":compression==5?"JPEG1":"JPEG2", > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with pixel type '%s', " > "%s compression and %s-page mode.", > selection2string(selection,images_names,true).data(), > _filename.data(),stype, > compression==0?"no":compression==1?"CCITTRLE":compression==2?"CCITT4": > compression==3?"CCITT6":compression==4?"LZW":compression==5?"JPEG1": > "JPEG2",is_multipage?"multi":"single"); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); ># 8151 "gmic.cpp" > if (!std::strcmp(stype,"bool")) { if (output_images.size()==1 || is_multipage) CImgList<bool>(output_images, cimg::type<T>::string()==cimg::type<bool>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<bool>(output_images[l], cimg::type<T>::string()==cimg::type<bool>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"uchar")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned char")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"char")) { if (output_images.size()==1 || is_multipage) CImgList<char>(output_images, cimg::type<T>::string()==cimg::type<char>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<char>(output_images[l], cimg::type<T>::string()==cimg::type<char>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"ushort")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned short")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"short")) { if (output_images.size()==1 || is_multipage) CImgList<short>(output_images, cimg::type<T>::string()==cimg::type<short>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<short>(output_images[l], cimg::type<T>::string()==cimg::type<short>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"uint")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned int")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"int")) { if (output_images.size()==1 || is_multipage) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"ulong")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"unsigned long")) { if (output_images.size()==1 || is_multipage) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"long")) { if (output_images.size()==1 || is_multipage) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"float")) { if (output_images.size()==1 || is_multipage) CImgList<float>(output_images, cimg::type<T>::string()==cimg::type<float>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<float>(output_images[l], cimg::type<T>::string()==cimg::type<float>::string()). save_tiff(nfilename,compression); } } } > else if (!std::strcmp(stype,"double")) { if (output_images.size()==1 || is_multipage) CImgList<double>(output_images, cimg::type<T>::string()==cimg::type<double>::string()). save_tiff(filename,compression); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<double>(output_images[l], cimg::type<T>::string()==cimg::type<double>::string()). save_tiff(nfilename,compression); } } } > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > > } else if (!cimg::strcasecmp(ext,"gif")) { > float _fps = 0, _nb_loops = 0; > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()>1 && std::sscanf(options,"%f,%f",&_fps,&_nb_loops)>=1) { > > const unsigned int > fps = (unsigned int)cimg::round(_fps), > nb_loops = (unsigned int)cimg::round(_nb_loops); > if (nb_loops) > print(images,0, > "Output image%s as animated file '%s', with %u fps and %u loops.", > selection2string(selection,images_names,true).data(),_filename.data(),fps,nb_loops); > else > print(images,0, > "Output image%s as animated file '%s', with %u fps.", > selection2string(selection,images_names,true).data(),_filename.data(),fps); > output_images.save_gif_external(filename,fps,nb_loops); > } else { > if (output_images.size()==1) > print(images,0,"Output image%s as file '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data()); > output_images.save(filename); > } > } else if (!cimg::strcasecmp(ext,"jpeg") || !cimg::strcasecmp(ext,"jpg")) { > float quality = 100; > if (std::sscanf(options,"%f%c",&quality,&end)!=1) quality = 100; > if (quality<0) quality = 0; else if (quality>100) quality = 100; > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with quality %g%% (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > quality, > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with quality %g%%.", > selection2string(selection,images_names,true).data(), > _filename.data(), > quality); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); > if (output_images.size()==1) > output_images[0].save_jpeg(filename,(unsigned int)cimg::round(quality)); > else { > CImg<char> nfilename(4096); > for (int l = 0; l<(int)(output_images)._width; ++l) { > cimg::number_filename(filename,l,6,nfilename); > output_images[l].save_jpeg(nfilename,(unsigned int)cimg::round(quality)); > } > } > } else if (!cimg::strcasecmp(ext,"mnc") && *options) { > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with header get from file '%s' " > "(1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > options.data(), > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else > print(images,0, > "Output image%s as file '%s', with header get from file '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > options.data()); > if (output_images.size()==1) > output_images[0].save_minc2(filename,options); > else { > CImg<char> nfilename(4096); > for (int l = 0; l<(int)(output_images)._width; ++l) { > cimg::number_filename(filename,l,6,nfilename); > output_images[l].save_minc2(nfilename,options); > } > } > } else if (!cimg::strcasecmp(ext,"raw")) { > const char *const stype = std::sscanf(options,"%255[A-zA-Z]%c",argx,&end)==1?argx: > cimg::type<T>::string(); > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],images[selection[l]]?true:false); > if (output_images.size()==1) > print(images,0, > "Output image%s as file '%s', with pixel type '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype, > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s', with pixel type '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s', instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); ># 8337 "gmic.cpp" > if (!std::strcmp(stype,"bool")) { if (output_images.size()==1) CImg<bool>(output_images[0], cimg::type<T>::string()==cimg::type<bool>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<bool>(output_images[l], cimg::type<T>::string()==cimg::type<bool>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"uchar")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned char")) { if (output_images.size()==1) CImg<unsigned char>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned char>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned char>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"char")) { if (output_images.size()==1) CImg<char>(output_images[0], cimg::type<T>::string()==cimg::type<char>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<char>(output_images[l], cimg::type<T>::string()==cimg::type<char>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"ushort")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned short")) { if (output_images.size()==1) CImg<unsigned short>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned short>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned short>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"short")) { if (output_images.size()==1) CImg<short>(output_images[0], cimg::type<T>::string()==cimg::type<short>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<short>(output_images[l], cimg::type<T>::string()==cimg::type<short>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"uint")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned int")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"int")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"ulong")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"unsigned long")) { if (output_images.size()==1) CImg<unsigned int>(output_images[0], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<unsigned int>(output_images[l], cimg::type<T>::string()==cimg::type<unsigned int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"long")) { if (output_images.size()==1) CImg<int>(output_images[0], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<int>(output_images[l], cimg::type<T>::string()==cimg::type<int>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"float")) { if (output_images.size()==1) CImg<float>(output_images[0], cimg::type<T>::string()==cimg::type<float>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<float>(output_images[l], cimg::type<T>::string()==cimg::type<float>::string()). save_raw(nfilename); } } } > else if (!std::strcmp(stype,"double")) { if (output_images.size()==1) CImg<double>(output_images[0], cimg::type<T>::string()==cimg::type<double>::string()). save_raw(filename); else { CImg<char> nfilename(4096); for (int l = 0; l<(int)(output_images)._width; ++l) { cimg::number_filename(filename,l,6,nfilename); CImg<double>(output_images[l], cimg::type<T>::string()==cimg::type<double>::string()). save_raw(nfilename); } } } > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > } else if (!cimg::strcasecmp(ext,"cimg") || !cimg::strcasecmp(ext,"cimgz")) { > const char *const stype = std::sscanf(options,"%255[A-zA-Z]%c",argx,&end)==1?argx: > cimg::type<T>::string(); > CImgList<T> output_images(selection.height()); > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],images[selection[l]]?true:false); > print(images,0,"Output image%s as file '%s', with pixel type '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data(), > stype); > > > > > > > if (!std::strcmp(stype,"bool")) CImgList<bool>(output_images, cimg::type<T>::string()==cimg::type<bool>::string()). save(filename); > else if (!std::strcmp(stype,"uchar")) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned char")) CImgList<unsigned char>(output_images, cimg::type<T>::string()==cimg::type<unsigned char>::string()). save(filename); > else if (!std::strcmp(stype,"char")) CImgList<char>(output_images, cimg::type<T>::string()==cimg::type<char>::string()). save(filename); > else if (!std::strcmp(stype,"ushort")) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned short")) CImgList<unsigned short>(output_images, cimg::type<T>::string()==cimg::type<unsigned short>::string()). save(filename); > else if (!std::strcmp(stype,"short")) CImgList<short>(output_images, cimg::type<T>::string()==cimg::type<short>::string()). save(filename); > else if (!std::strcmp(stype,"uint")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned int")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"int")) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save(filename); > else if (!std::strcmp(stype,"ulong")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"unsigned long")) CImgList<unsigned int>(output_images, cimg::type<T>::string()==cimg::type<unsigned int>::string()). save(filename); > else if (!std::strcmp(stype,"long")) CImgList<int>(output_images, cimg::type<T>::string()==cimg::type<int>::string()). save(filename); > else if (!std::strcmp(stype,"float")) CImgList<float>(output_images, cimg::type<T>::string()==cimg::type<float>::string()). save(filename); > else if (!std::strcmp(stype,"double")) CImgList<double>(output_images, cimg::type<T>::string()==cimg::type<double>::string()). save(filename); > else error(images,0,0, > "Command '-output': File '%s', invalid " > "specified pixel type '%s'.", > _filename.data(),stype); > } else > if (!cimg::strcasecmp(ext,"avi") || !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mkv") || !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"qt") || !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || !cimg::strcasecmp(ext,"mpeg") || > !cimg::strcasecmp(ext,"ogg")) { > float fps = 0, bitrate = 0; > std::sscanf(options,"%f,%f",&fps,&bitrate); > fps = cimg::round(fps); > bitrate = cimg::round(bitrate); > if (!fps) fps = 25; > if (!bitrate) bitrate = 2048; > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > print(images,0,"Output image%s as file '%s', with %g fps and bitrate %gk.", > selection2string(selection,images_names,true).data(), > _filename.data(), > fps,bitrate); > if (!output_images) > error(images,0,0, > "Command '-output': File '%s, instance list (%u,%p) is empty.", > _filename.data(),output_images.size(),output_images.data()); > output_images.save_ffmpeg(filename,(unsigned int)fps,(unsigned int)bitrate); > } else { > CImgList<T> output_images(selection.height()); > CImgList<unsigned int> empty_indices; > for (int l = 0; l<(int)((selection)._height); ++l) if (!check_image(images,images[selection(l)])) > CImg<unsigned int>::vector(selection(l)).move_to(empty_indices); > if (empty_indices) { > const CImg<char> _eselec = selection2string(empty_indices>'y',images_names,true); > const char *const eselec = _eselec.data(); > warn(images,0,"Command '-output': Image%s %s empty.", > eselec,empty_indices.size()>1?"are":"is"); > } > for (int l = 0; l<(int)((selection)._height); ++l) > output_images[l].assign(images[selection[l]],output_images[l]?true:false); > if (output_images.size()==1) > print(images,0,"Output image%s as file '%s' (1 image %dx%dx%dx%d).", > selection2string(selection,images_names,true).data(), > _filename.data(), > output_images[0].width(),output_images[0].height(), > output_images[0].depth(),output_images[0].spectrum()); > else print(images,0,"Output image%s as file '%s'.", > selection2string(selection,images_names,true).data(), > _filename.data()); > output_images.save(filename); > } > > if (*cext) { > try { > CImg<unsigned char>::get_load_raw(filename_tmp).save_raw(_filename); > std::remove(filename_tmp); > } catch (...) { > bool save_failure = false; > CImg<char> message(1024); > for (unsigned int i = 0; i!=~0U; ++i) { > cimg::number_filename(filename_tmp,i,6,formula); > cimg::number_filename(_filename,i,6,message); > try { CImg<unsigned char>::get_load_raw(formula).save_raw(message); } > catch (...) { i = ~0U-1; if (!i) save_failure = true; } > } > if (save_failure) > error(images,0,0, > "Command '-output': Invalid write of file '%s' from temporary file '%s'.", > _filename.data(),filename_tmp.data()); > } > } > is_released = true; ++position; continue; > } > > > if (!std::strcmp("-onfail",item)) { > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='l') > error(images,0,0, > "Command '-onfail': Not associated to a '-local' command within " > "the same scope."); > for (int nb_locals = 1; nb_locals && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-local",it) || !std::strcmp("-l",it) || > !std::strcmp("--local",it) || !std::strcmp("--l",it) || > !std::strncmp("-local[",it,7) || !std::strncmp("-l[",it,3) || > !std::strncmp("--local[",it,8) || !std::strncmp("--l[",it,4)) ++nb_locals; > else if (!std::strcmp("-endlocal",it) || !std::strcmp("-endl",it)) { > --nb_locals; if (!nb_locals) --position; > } > } > continue; > } > > > > > if (!std::strcmp("-object3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x = 0, y = 0, z = 0, opacity = 1; > char sep = 0, sepx = 0, sepy = 0; > unsigned int > is_zbuffer = 1, > _render3d = (unsigned int)cimg::max(0,render3d), > _is_double3d = is_double3d?1:0; > float > _focale3d = focale3d, > _light3d_x = light3d_x, > _light3d_y = light3d_y, > _light3d_z = light3d_z, > _specular_lightness3d = specular_lightness3d, > _specular_shininess3d = specular_shininess3d; > CImg<unsigned int> ind; > *argx = *argy = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-]%c", > indices,argx,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > indices,argx,argy,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f%c", > indices,argx,argy,&z,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f%c", > indices,argx,argy,&z,&opacity,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u%c", > indices,argx,argy,&z,&opacity,&_render3d,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&end)==7 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &end)==8 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u,%f%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &_focale3d,&end)==9 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u,%f,%f,%f,%f%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &_focale3d,&_light3d_x,&_light3d_y,&_light3d_z,&end)==12 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%f,%f,%u,%u,%u,%f,%f,%f,%f,%f,%f%c", > indices,argx,argy,&z,&opacity,&_render3d,&_is_double3d,&is_zbuffer, > &_focale3d,&_light3d_x,&_light3d_y,&_light3d_z, > &_specular_lightness3d,&_specular_shininess3d,&end)==14) && > (ind=selection2cimg(indices,images.size(),images_names,"-object3d",true, > false,CImg<char>::empty())).height()==1 && > (!*argx || > std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > _render3d<=5 && is_zbuffer<=1 && _is_double3d<=1) { > const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > > print(images,0,"Draw 3d object [%u] at (%g%s,%g%s,%g) on image%s, with opacity %g, " > "%s rendering, %s-sided mode, %sz-buffer, focale %g, 3d light at (%g,%g,%g) " > "and specular properties (%g,%g)", > *ind, > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z, > selection2string(selection,images_names,true).data(), > opacity, > _render3d==0?"dot":_render3d==1?"wireframe":_render3d==2?"flat": > _render3d==3?"flat-shaded":_render3d==4?"gouraud-shaded":"phong-shaded", > _is_double3d?"double":"simple", > is_zbuffer?"":"no ", > _focale3d,_light3d_x,_light3d_y,_light3d_z, > _specular_lightness3d,_specular_shininess3d); > CImgList<unsigned int> primitives; > CImgList<float> colors, opacities; > CImgList<unsigned char> _colors; > CImg<float> vertices(img0,false); > try { > if (_render3d>=3) { > vertices.CImg3dtoobject3d(primitives,_colors,opacities,false); > if (light3d) _colors.insert(light3d,~0U,true); > } else vertices.CImg3dtoobject3d(primitives,colors,opacities,false); > } > catch (CImgException &e) { > CImg<char> message(1024); > if (!vertices.is_CImg3d(true,message)) > error(images,0,0, > "Command '-object3d': Invalid 3d object [%u], specified " > "in argument '%s' (%s).", > *ind,argument_text,message.data()); > else throw e; > } > for (int o = 0; o<(int)(opacities)._width; ++o) if (!opacities[o].is_shared()) opacities[o]*=opacity; > > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const float > nx = sepx=='%'?x*(img.width()-1)/100:x, > ny = sepy=='%'?y*(img.height()-1)/100:y; > CImg<float> zbuffer(is_zbuffer?img.width():0,is_zbuffer?img.height():0,1,1,0); > if (colors) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_object3d(nx,ny,z,vertices,primitives,colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_object3d(nx,ny,z,vertices,primitives,colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); images_names[posi].mark(); } } > > > > ; > } else { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_object3d(nx,ny,z,vertices,primitives,_colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_object3d(nx,ny,z,vertices,primitives,_colors,opacities, _render3d,_is_double3d,_focale3d, _light3d_x,_light3d_y,_light3d_z, _specular_lightness3d,_specular_shininess3d, zbuffer); images_names[posi].mark(); } } > > > > ; > } > } > } else gmic::error(images,0,"object3d","Command '-%s': Invalid argument '%s'.","object3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-or",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise OR of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator|=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator|=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-or", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise OR of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator|=(img0); } else { images_names[selection[l]].mark(); img.operator|=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise OR of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator|=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator|=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise OR of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator|=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator|=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 8633 "gmic.cpp" > ; > > > if (!std::strcmp("-opacity3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 1; > if (std::sscanf(argument,"%f%c", > &value,&end)==1) ++position; > else value = 1; > print(images,0,"Set opacity of 3d object%s to %g.", > selection2string(selection,images_names,true).data(), > value); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_color_CImg3d(0,0,0,value,false,true); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.color_CImg3d(0,0,0,value,false,true); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-opacity3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='p') { > > > if (!std::strcmp("-parallel",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const char *_arg = argument, *_arg_text = argument_text; > unsigned int wait_mode = 3; > if ((*_arg=='0' || *_arg=='1' || *_arg=='2' || *_arg=='3') && > (_arg[1]==',' || !_arg[1])) { > wait_mode = (unsigned int)(*_arg-'0'); _arg+=2; _arg_text+=2; > } > CImgList<char> arguments = CImg<char>::string(_arg).get_split(',',false,false); > CImg<st_gmic_parallel<T> >(1,arguments.width()). > move_to(wait_mode>1?threads_data:global_threads_data); > CImg<st_gmic_parallel<T> > > &_threads_data = wait_mode>1?threads_data.back():global_threads_data.back(); > > > print(images,0,"Execute %d command%s '%s' in parallel%s.", > arguments.width(),arguments.width()>1?"s":"",_arg_text, > wait_mode==3?" and wait for thread termination immediately": > wait_mode==2?" and defer thread termination wait at command return point": > wait_mode==1?" and defer thread termination wait at process return point": > "and do not wait for thread termination"); > > > > > > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) { > gmic &gi = _threads_data[l].gmic_instance; > for (unsigned int i = 0; i<256; ++i) { > gi.commands[i].assign(commands[i],true); > gi.commands_names[i].assign(commands_names[i],true); > gi.commands_has_arguments[i].assign(commands_has_arguments[i],true); > gi.variables[i] = &gi._variables[i]; > gi.variables_names[i] = &gi._variables_names[i]; > _threads_data[l].variables_sizes[i] = 0; > } > gi.scope.assign(scope); > gi.commands_files.assign(commands_files,true); > snprintf(title,_title.size(),"*thread%d",l); > CImg<char>::string(title).move_to(gi.scope); > gi.background3d.assign(background3d); > gi.light3d.assign(light3d); > gi.pose3d.assign(pose3d); > gi.status.assign(status); > gi.debug_filename = debug_filename; > gi.debug_line = debug_line; > gi.focale3d = focale3d; > gi.light3d_x = light3d_x; > gi.light3d_y = light3d_y; > gi.light3d_z = light3d_z; > gi.specular_lightness3d = specular_lightness3d; > gi.specular_shininess3d = specular_shininess3d; > gi._progress = 0; > gi.progress = &gi._progress; > gi.is_released = is_released; > gi.is_debug = is_debug; > gi.is_start = false; > gi.is_quit = false; > gi.is_return = false; > gi.is_double3d = is_double3d; > gi.is_default_type = is_default_type; > gi.check_elif = false; > gi.verbosity = verbosity; > gi.render3d = render3d; > gi.renderd3d = renderd3d; > gi._cancel = _cancel; > gi.cancel = cancel; > gi.nb_carriages = nb_carriages; > gi.reference_time = reference_time; > _threads_data[l].images = &images; > _threads_data[l].images_names = &images_names; > _threads_data[l].wait_mode = wait_mode; > > > arguments[l].resize(1,arguments[l].height()+1,1,1,0); > bool is_dquoted = false; > for (char *s = arguments[l].data(); *s; ++s) { > const char c = *s; > if (c=='\"') is_dquoted = !is_dquoted; > if (!is_dquoted) *s = c<' '?(c==_dollar?'$':c==_lbrace?'{':c==_rbrace?'}': > c==_comma?',':c==_dquote?'\"':c==_arobace?'@':c):c; > } > gi.commands_line_to_CImgList(arguments[l].data()). > move_to(_threads_data[l].commands_line); > } > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) { > > > pthread_create(&_threads_data[l].thread_id,0,gmic_parallel<T>, > (void*)&_threads_data[l]); ># 8773 "gmic.cpp" > } > > > if (wait_mode==3) { > for (int l = 0; l<(int)((_threads_data)._height); ++l) { > > > pthread_join(_threads_data[l].thread_id,0); > > > > > > } > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) is_released&=_threads_data[l].gmic_instance.is_released; > > > _threads_data[0].gmic_instance.status.move_to(status); > > > for (int l = 0; l<(int)((_threads_data)._height); ++l) if (_threads_data[l].exception._message) > throw _threads_data[l].exception; > > threads_data.remove(); > } > > ++position; continue; > } > > > if (!std::strcmp("-permute",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > print(images,0,"Permute axes of image%s, with permutation '%s'.", > selection2string(selection,images_names,true).data(),argument_text); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_permute_axes(argument); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].permute_axes(argument); images_names[posi].mark(); } }; > } > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-progress",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = -1; > if (std::sscanf(argument,"%f%c", > &value,&end)==1) { > if (value<0) value = -1; else if (value>100) value = 100; > if (value>=0) > print(images,0,"Set progress indice to %g%%.", > value); > else > print(images,0,"Disable progress indice."); > *progress = value; > } else gmic::error(images,0,"progress","Command '-%s': Invalid argument '%s'.","progress",argument_text); > ++position; continue; > } > > > if (!std::strcmp("-print",command) && !is_get_version) { > print_images(images,images_names,selection); > is_released = true; continue; > } > > > > > if (!std::strcmp("-pow",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute image%s to the power of %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].pow((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.pow((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-pow", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute image%s to the power of image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].pow(img0); } else { images_names[selection[l]].mark(); img.pow(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute image%s to the power of expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].pow((const char*)formula); } else { images_names[selection[l]].mark(); img.pow((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential power of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.pow(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.pow(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 8850 "gmic.cpp" > ; > > > if (!std::strcmp("-point",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float x = 0, y = 0, z = 0, opacity = 1; > char sepx = 0, sepy = 0, sepz = 0; > *argx = *argy = *argz = *color = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > argx,argy,argz,&opacity,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f," > "%4095[0-9.eE,+-]%c", > argx,argy,argz,&opacity,color,&end)==5) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%'))) { > print(images,0, > "Draw point (%g%s,%g%s,%g%s) on image%s, with opacity %g and color (%s).", > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > selection2string(selection,images_names,true).data(), > opacity, > *color?color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_point(nx,ny,nz,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_point(nx,ny,nz,col.data(),opacity); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"point","Command '-%s': Invalid argument '%s'.","point",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-polygon",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> strint(256); > *strint = *color = 0; > float N = 0, x0 = 0, y0 = 0, opacity = 1; > char sepx = 0, sepy = 0, seph = 0; > unsigned int pattern = 0; > if (std::sscanf(argument,"%f%c", > &N,&end)==2 && N>=1) { > N = cimg::round(N); > const char > *nargument = argument + snprintf(strint,strint.width(),"%u", > (unsigned int)N) + 1, > *const eargument = argument + std::strlen(argument); > CImg<float> coords0((unsigned int)N,2,1,1,0); > CImg<bool> percents((unsigned int)N,2,1,1,0); > for (unsigned int n = 0; n<(unsigned int)N; ++n) if (nargument<eargument) { > sepx = sepy = 0; > if (std::sscanf(nargument,"%255[0-9.eE%+-],%255[0-9.eE%+-]", > argx,argy)==2 && > (std::sscanf(argx,"%f%c",&x0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x0,&sepx,&end)==2 && sepx=='%')) && > (std::sscanf(argy,"%f%c",&y0,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y0,&sepy,&end)==2 && sepy=='%'))) { > coords0(n,0) = x0; percents(n,0) = (sepx=='%'); > coords0(n,1) = y0; percents(n,1) = (sepy=='%'); > nargument+=std::strlen(argx) + std::strlen(argy) + 2; > } else gmic::error(images,0,"polygon","Command '-%s': Invalid argument '%s'.","polygon",argument_text); > } else gmic::error(images,0,"polygon","Command '-%s': Invalid argument '%s'.","polygon",argument_text); > if (nargument<eargument && > std::sscanf(nargument,"%4095[0-9.eE+-]",color)==1 && > std::sscanf(color,"%f",&opacity)==1) { > nargument+=std::strlen(color) + 1; > *color = 0; > } > if (nargument<eargument && > std::sscanf(nargument,"0%c%4095[0-9a-fA-F]",&seph,color)==2 && seph=='x' && > std::sscanf(color,"%x%c",&pattern,&end)==1) { > nargument+=std::strlen(color)+3; > *color = 0; > } > const char *const _color = nargument<eargument?nargument:&(end=0); > if (seph=='x') > print(images,0,"Draw %g-vertices outlined polygon on image%s, with opacity %g, " > "pattern 0x%x and color (%s).", > N, > selection2string(selection,images_names,true).data(), > opacity,pattern, > *_color?_color:"default"); > else > print(images,0,"Draw %g-vertices filled polygon on image%s, with opacity %g " > "and color (%s).", > N, > selection2string(selection,images_names,true).data(), > opacity, > *_color?_color:"default"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > CImg<int> coords(coords0); > for (int p = 0; p<(int)((coords)._width); ++p) { > if (percents(p,0)) > coords(p,0) = (int)cimg::round(coords0(p,0)*(img.width()-1)/100); > else coords(p,0) = (int)cimg::round(coords(p,0)); > if (percents(p,1)) > coords(p,1) = (int)cimg::round(coords0(p,1)*(img.height()-1)/100); > else coords(p,1) = (int)cimg::round(coords(p,1)); > } > CImg<T> col(img.spectrum(),1,1,1,0); > col.fill(_color,true); > if (seph=='x') { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_polygon(coords,col.data(),opacity,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_polygon(coords,col.data(),opacity,pattern); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_polygon(coords,col.data(),opacity); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_polygon(coords,col.data(),opacity); images_names[posi].mark(); } }; } > } > } else gmic::error(images,0,"polygon","Command '-%s': Invalid argument '%s'.","polygon",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-plasma",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float alpha = 1, beta = 1, scale = 8; > if ((std::sscanf(argument,"%f%c", > &alpha,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &alpha,&beta,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &alpha,&beta,&scale,&end)==3) && > scale>=0) ++position; > else { alpha = beta = 1; scale = 8; } > const unsigned int _scale = (unsigned int)cimg::round(scale); > print(images,0,"Draw plasma fractal on image%s, with alpha %g, beta %g and scale %u.", > selection2string(selection,images_names,true).data(), > alpha, > beta, > _scale); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_draw_plasma(alpha,beta,_scale); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].draw_plasma(alpha,beta,_scale); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-pose3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<float> _p3d(16,1,1,1,0); > float *const p3d = _p3d.data(); > if (std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c", > p3d,p3d+1,p3d+2,p3d+3,p3d+4,p3d+5,p3d+6,p3d+7, > p3d+8,p3d+9,p3d+10,p3d+11,p3d+12,p3d+13,p3d+14,p3d+15, > &end)==16) { > print(images,0,"Set 3d pose matrix to [ %g,%g,%g,%g; %g,%g,%g,%g; %g,%g,%g,%g; " > "%g,%g,%g,%g ].", > p3d[0],p3d[1],p3d[2],p3d[3], > p3d[4],p3d[5],p3d[6],p3d[7], > p3d[8],p3d[9],p3d[10],p3d[11], > p3d[12],p3d[13],p3d[14],p3d[15]); > pose3d.assign(p3d,4,4,1,1,false); > ++position; > } else { > print(images,0,"Reset 3d pose matrix to default."); > pose3d.assign(); > } > continue; > } > > > if (!std::strcmp("-primitives3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int mode = 0; > if (std::sscanf(argument,"%u%c", > &mode,&end)==1 && > mode<=2) { > print(images,0,"Convert primitives of 3d object%s to %s.", > selection2string(selection,images_names,true).data(), > mode==0?"points":mode==1?"segments":"no-textures"); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T> &img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_convert_primitives_CImg3d(mode); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.convert_primitives_CImg3d(mode); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-primitives3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"primitives3d","Command '-%s': Invalid argument '%s'.","primitives3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-plot",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double ymin = 0, ymax = 0, xmin = 0, xmax = 0; > unsigned int plot_type = 1, vertex_type = 1; > float resolution = 65536; > char sep = 0; > *formula = 0; > if (((std::sscanf(argument,"'%1023[^']%c%c", > formula,&sep,&end)==2 && sep=='\'') || > std::sscanf(argument,"'%1023[^']',%f%c", > formula,&resolution,&end)==2 || > std::sscanf(argument,"'%1023[^']',%f,%u%c", > formula,&resolution,&plot_type,&end)==3 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u%c", > formula,&resolution,&plot_type,&vertex_type,&end)==4 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type,&xmin,&xmax,&end)==6 || > std::sscanf(argument,"'%1023[^']',%f,%u,%u,%lf,%lf,%lf,%lf%c", > formula,&resolution,&plot_type,&vertex_type, > &xmin,&xmax,&ymin,&ymax,&end)==8) && > resolution>0 && plot_type<=3 && vertex_type<=7) { > resolution = cimg::round(resolution); > gmic_strreplace(formula); > if (xmin==0 && xmax==0) { xmin = -4; xmax = 4; } > if (!plot_type && !vertex_type) plot_type = 1; > if (resolution<1) resolution = 65536; > CImgList<double> tmp_img(1); > CImg<double> &values = tmp_img[0]; > > values.assign(4,(unsigned int)resolution--,1,1,0); > const double dx = xmax - xmin; > for (int X = 0; X<(int)((values)._height); ++X) values(0,X) = xmin + X*dx/resolution; > cimg::eval(formula,values).move_to(values); > > CImgList<char> tmp_name; > snprintf(title,_title.size(),"[Plot of '%s']",formula); > CImg<char>::string(title).move_to(tmp_name); > display_plots(tmp_img,tmp_name,CImg<unsigned int>::vector(0), > plot_type,vertex_type,xmin,xmax,ymin,ymax); > ++position; > } else { > plot_type = 1; vertex_type = 0; ymin = ymax = xmin = xmax = 0; > if ((std::sscanf(argument,"%u%c", > &plot_type,&end)==1 || > std::sscanf(argument,"%u,%u%c", > &plot_type,&vertex_type,&end)==2 || > std::sscanf(argument,"%u,%u,%lf,%lf%c", > &plot_type,&vertex_type,&xmin,&xmax,&end)==4 || > std::sscanf(argument,"%u,%u,%lf,%lf,%lf,%lf%c", > &plot_type,&vertex_type,&xmin,&xmax,&ymin,&ymax,&end)==6) && > plot_type<=3 && vertex_type<=7) ++position; > if (!plot_type && !vertex_type) plot_type = 1; > display_plots(images,images_names,selection,plot_type,vertex_type, > xmin,xmax,ymin,ymax); > } > is_released = true; continue; > } > > > } > > > > > else if (command1=='q') { > > > > > if (!std::strcmp("-quiver",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sampling = 25, factor = -20, opacity = 1; > unsigned int is_arrows = 1, pattern = ~0U; > CImg<unsigned int> ind; > char seph = 0; > *color = 0; > if ((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]]%c", > indices,&end)==1 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&sampling,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&sampling,&factor,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u%c", > indices,&sampling,&factor,&is_arrows,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u,%f%c", > indices,&sampling,&factor,&is_arrows,&opacity,&end)==5 || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u,%f,0%c%x%c", > indices,&sampling,&factor,&is_arrows, > &opacity,&seph,&pattern,&end)==7 && seph=='x') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u,%f,%4095[0-9.eE,+-]%c", > indices,&sampling,&factor,&is_arrows,&opacity,color,&end)==6 && > (bool)(pattern=~0U)) || > (*color=0,std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%u," > "%f,0%c%x,%4095[0-9.eE,+-]%c", > indices,&sampling,&factor,&is_arrows, > &opacity,&seph,&pattern,color,&end)==8 && > seph=='x')) && > (ind=selection2cimg(indices,images.size(),images_names,"-quiver",true, > false,CImg<char>::empty())).height()==1 && > sampling>0 && is_arrows<=1) { > sampling = cimg::round(sampling); > print(images,0,"Draw 2d vector field [%u] on image%s, with sampling %g, factor %g, " > "arrows %s, opacity %g, pattern 0x%x and color (%s).", > *ind, > selection2string(selection,images_names,true).data(), > sampling, > factor, > is_arrows?"enabled":"disabled", > opacity,pattern, > *color?color:"default"); > const CImg<T> flow = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]], col(img.spectrum(),1,1,1,0); > col.fill(color,true); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_draw_quiver(flow,col.data(),opacity,(unsigned int)sampling, factor,(bool)is_arrows,pattern); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.draw_quiver(flow,col.data(),opacity,(unsigned int)sampling, factor,(bool)is_arrows,pattern); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"quiver","Command '-%s': Invalid argument '%s'.","quiver",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='r') { > > > if (!std::strcmp("-remove",command)) { > print(images,0,"Remove image%s", > selection2string(selection,images_names,true).data()); > CImgList<T> _images; > CImgList<char> _images_names; > if (is_get_version) { _images.assign(images); _images_names.assign(images_names); } > remove_images(images,images_names,selection,0,selection.height()-1); > if (is_get_version) { > _images.move_to(images,0); > _images_names.move_to(images_names,0); > } > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," (%u image%s left).", > images.size(),images.size()==1?"":"s"); > std::fflush(cimg::output()); > } > is_released = false; continue; > } > > > if (!std::strcmp("-repeat",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float number = 0; > if (std::sscanf(argument,"%f%c", > &number,&end)==1) { > const unsigned int nb = number>0?(unsigned int)cimg::round(number):0U; > if (nb) { > CImg<char>::string("*repeat").move_to(scope); > if (verbosity>0 || is_debug) > print(images,0,"Start '-repeat..-done' block (%u iteration%s).", > nb,nb>1?"s":""); > CImg<unsigned int>::vector(position+1,nb,0).move_to(repeatdones); > } else { > if (verbosity>0 || is_debug) > print(images,0,"Skip 'repeat..done' block (0 iteration).", > nb); > int nb_repeats = 0; > for (nb_repeats = 1; nb_repeats && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-repeat",it)) ++nb_repeats; > else if (!std::strcmp("-done",it)) --nb_repeats; > } > if (nb_repeats && position>=commands_line.size()) > error(images,0,0, > "Command '-repeat': Missing associated '-done' command."); > continue; > } > } else gmic::error(images,0,"repeat","Command '-%s': Invalid argument '%s'.","repeat",argument_text); > ++position; continue; > } > > > if (!std::strcmp("-resize",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float valx = 100, valy = 100, valz = 100, valc = 100, cx = 0, cy = 0, cz = 0, cc = 0; > char sep = 0, sepx = '%', sepy = '%', sepz = '%', sepc = '%'; > CImg<char> indicesy(256), indicesz(256), indicesc(256); > CImg<unsigned int> ind, indx, indy, indz, indc; > unsigned int boundary = 0; > int interpolation = 1; > *indices = *indicesy = *indicesz = *indicesc = *argx = *argy = *argz = *argc = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d%c", > indices,&interpolation,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u%c", > indices,&interpolation,&boundary,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f%c", > indices,&interpolation,&boundary,&cx,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f,%f%c", > indices,&interpolation,&boundary,&cx,&cy,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f,%f,%f%c", > indices,&interpolation,&boundary,&cx,&cy,&cz,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%d,%u,%f,%f,%f,%f%c", > indices,&interpolation,&boundary,&cx,&cy,&cz,&cc,&end)==7) && > (ind=selection2cimg(indices,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1 && > interpolation>=-1 && interpolation<=6 && boundary<=2 && > cx>=0 && cx<=1 && cy>=0 && cy<=1 && cz>=0 && cz<=1 && cc>=0 && cc<=1) { > const int > nvalx = images[*ind].width(), > nvaly = images[*ind].height(), > nvalz = images[*ind].depth(), > nvalc = images[*ind].spectrum(); > print(images,0,"Resize image%s to %dx%dx%dx%d, with %s interpolation, " > "%s boundary conditions and alignment (%g,%g,%g,%g).", > selection2string(selection,images_names,true).data(), > nvalx,nvaly,nvalz,nvalc, > interpolation<=0?"no":interpolation==1?"nearest-neighbor": > interpolation==2?"moving average":interpolation==3?"linear": > interpolation==4?"grid":interpolation==5?"cubic":"lanczos", > boundary<=0?"dirichlet":boundary==1?"neumann":"cyclic", > cx,cy,cz,cc); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_resize(nvalx,nvaly,nvalz,nvalc,interpolation, boundary,cx,cy,cz,cc); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].resize(nvalx,nvaly,nvalz,nvalc,interpolation, boundary,cx,cy,cz,cc); images_names[posi].mark(); } } > ; > } > ++position; > } else if ((cx=cy=cz=cc=0, interpolation=1, boundary=0, true) && > (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d%c", > argx,argy,argz,argc,&interpolation,&end)==5 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u%c", > argx,argy,argz,argc,&interpolation,&boundary,&end)==6 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f%c", > argx,argy,argz,argc,&interpolation,&boundary,&cx,&end)==7 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f," > "%f%c", > argx,argy,argz,argc,&interpolation,&boundary,&cx,&cy,&end)==8|| > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f," > "%f,%f%c", > argx,argy,argz,argc,&interpolation,&boundary, > &cx,&cy,&cz,&end)==9 || > std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%d,%u,%f," > "%f,%f,%f%c", > argx,argy,argz,argc,&interpolation,&boundary, > &cx,&cy,&cz,&cc,&end)==10) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sepx,&end)==2 && > sepx==']' && > (indx=selection2cimg(indices,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepx=0,std::sscanf(argx,"%f%c",&valx,&sepx)==1 && valx>=1) || > (std::sscanf(argx,"%f%c%c",&valx,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > (std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesy.data(),&sepy, > &end)==2 && > sepy==']' && > (indy=selection2cimg(indicesy,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepy=0,std::sscanf(argy,"%f%c",&valy,&sepy)==1 && valy>=1) || > (std::sscanf(argy,"%f%c%c",&valy,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > (std::sscanf(argz,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesz.data(),&sepz, > &end)==2 && > sepz==']' && > (indz=selection2cimg(indicesz,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepz=0,std::sscanf(argz,"%f%c",&valz,&sepz)==1 && valz>=1) || > (std::sscanf(argz,"%f%c%c",&valz,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > (std::sscanf(argc,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesc.data(),&sepc, > &end)==2 && > sepc==']' && > (indc=selection2cimg(indicesc,images.size(),images_names,"-resize",true, > false,CImg<char>::empty())).height()==1) || > (sepc=0,std::sscanf(argc,"%f%c",&valc,&sepc)==1 && valc>=1) || > (std::sscanf(argc,"%f%c%c",&valc,&sepc,&end)==2 && sepc=='%')) && > valx>0 && valy>0 && valz>0 && valc>0 && > interpolation>=-1 && interpolation<=6 && boundary<=2 && > cx>=0 && cx<=1 && cy>=0 && cy<=1 && cz>=0 && cz<=1 && cc>=0 && cc<=1) { > if (indx) { valx = (float)images[*indx].width(); sepx = 0; } > if (indy) { valy = (float)images[*indy].height(); sepy = 0; } > if (indz) { valz = (float)images[*indz].depth(); sepz = 0; } > if (indc) { valc = (float)images[*indc].spectrum(); sepc = 0; } > print(images,0, > "Resize image%s to %g%s%g%s%g%s%g%s, with %s interpolation, " > "%s boundary conditions and alignment (%g,%g,%g,%g).", > selection2string(selection,images_names,true).data(), > valx,sepx=='%'?"%x":"x", > valy,sepy=='%'?"%x":"x", > valz,sepz=='%'?"%x":"x", > valc,sepc=='%'?"% ":"", > interpolation<=0?"no":interpolation==1?"nearest neighbor": > interpolation==2?"moving average":interpolation==3?"linear": > interpolation==4?"grid":interpolation==5?"cubic":"lanczos", > boundary<=0?"dirichlet":boundary==1?"neumann":"cyclic", > cx,cy,cz,cc); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const int > _nvalx = (int)cimg::round(sepx=='%'?valx*img.width()/100:valx), > _nvaly = (int)cimg::round(sepy=='%'?valy*img.height()/100:valy), > _nvalz = (int)cimg::round(sepz=='%'?valz*img.depth()/100:valz), > _nvalc = (int)cimg::round(sepc=='%'?valc*img.spectrum()/100:valc), > nvalx = _nvalx?_nvalx:1, > nvaly = _nvaly?_nvaly:1, > nvalz = _nvalz?_nvalz:1, > nvalc = _nvalc?_nvalc:1; > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_resize(nvalx,nvaly,nvalz,nvalc,interpolation,boundary,cx,cy,cz,cc); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.resize(nvalx,nvaly,nvalz,nvalc,interpolation,boundary,cx,cy,cz,cc); images_names[posi].mark(); } }; > } > ++position; > } else { > > > > > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0,"Resize image%s in interactive mode (skipped, no display available).", > selection2string(selection,images_names,true).data()); > } > if (is_available_display) { > print(images,0,"Resize image%s in interactive mode.", > selection2string(selection,images_names,true).data()); > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > if (img) { > if (disp) disp.resize(CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,false),CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,true),false); > else disp.assign(CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,false),CImgDisplay::_fitscreen(img.width(),img.height(),1,128,-85,true),0,1); > disp.set_title("%s: resize",gmic_basename(images_names[selection[l]].data())); > img.get_select(disp,0); > print(images,0, > "Resize image [%d] to %dx%d, with nearest-neighbor interpolation.", > selection[l], > disp.width(), > disp.height()); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_resize(disp); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.resize(disp); images_names[posi].mark(); } }; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } > > } > is_released = false; continue; > } > > > if (!std::strcmp("-reverse",command)) { > print(images,0,"Reverse positions of image%s.", > selection2string(selection,images_names,true).data()); > CImgList<T> _images, nimages(selection.height()); > CImgList<char> _images_names, nimages_names(selection.height()); > if (is_get_version) { _images.assign(images); _images_names.assign(images_names); } > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > nimages.reverse(); nimages_names.reverse(); > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > if (is_get_version) { > _images.move_to(images,0); > _images_names.move_to(images_names,0); > } > is_released = false; continue; > } > > > if (!std::strcmp("-return",item)) { > if (verbosity>0 || is_debug) print(images,0,"Return."); > position = commands_line.size(); > while (scope && scope.back()[0]=='*') { > const char c = scope.back()[1]; > if (c=='d') dowhiles.remove(); > else if (c=='r') repeatdones.remove(); > else if (c=='l' || c=='>' || c=='s') break; > scope.remove(); > } > is_return = true; > break; > } > > > if (!std::strcmp("-rows",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rows",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].height() - 1.0f; sep0 = 0; } > print(images,0,"Keep rows %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.height()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_row(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.row(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rows",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-rows",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].height() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].height() - 1.0f; sep1 = 0; } > print(images,0,"Keep rows %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.height()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.height()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rows(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rows(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"rows","Command '-%s': Invalid argument '%s'.","rows",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-rotate",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float angle = 0, zoom = 1, cx = 0, cy = 0; > unsigned int interpolation = 1, boundary = 0; > char sepx = 0, sepy = 0; > *argx = *argy = 0; > if ((std::sscanf(argument,"%f%c", > &angle,&end)==1 || > std::sscanf(argument,"%f,%u%c", > &angle,&interpolation,&end)==2 || > std::sscanf(argument,"%f,%u,%u%c", > &angle,&interpolation,&boundary,&end)==3 || > std::sscanf(argument,"%f,%u,%u,%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > &angle,&interpolation,&boundary,argx,argy,&end)==5 || > std::sscanf(argument,"%f,%u,%u,%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > &angle,&interpolation,&boundary,argx,argy,&zoom,&end)==6) && > (!*argx || > std::sscanf(argx,"%f%c",&cx,&end)==1 || > (std::sscanf(argx,"%f%c%c",&cx,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&cy,&end)==1 || > (std::sscanf(argy,"%f%c%c",&cy,&sepy,&end)==2 && sepy=='%')) && > interpolation<=2 && boundary<=2) { > if (*argx) { > print(images,0,"Rotate image%s of %g°, %s interpolation, %s boundary conditions " > "with center at (%g%s,%g%s).", > selection2string(selection,images_names,true).data(),angle, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"cubic", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic", > cx,sepx=='%'?"%":"",cy,sepy=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const float > ncx = sepx=='%'?cx*(img.width()-1)/100:cx, > ncy = sepy=='%'?cy*(img.height()-1)/100:cy; > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rotate(angle,ncx,ncy,zoom,interpolation,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rotate(angle,ncx,ncy,zoom,interpolation,boundary); images_names[posi].mark(); } }; > } > } else { > print(images,0,"Rotate image%s of %g°, %s interpolation and %s boundary conditions.", > selection2string(selection,images_names,true).data(),angle, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"cubic", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_rotate(angle,interpolation,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].rotate(angle,interpolation,boundary); images_names[posi].mark(); } }; > } > } > } else gmic::error(images,0,"rotate","Command '-%s': Invalid argument '%s'.","rotate",argument_text); > is_released = false; ++position; continue; > } > > > > > if (!std::strcmp("-round",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double rounding_value = 1; > int rounding_type = 0; > if ((std::sscanf(argument,"%lf%c", > &rounding_value,&end)==1 || > std::sscanf(argument,"%lf,%d%c", > &rounding_value,&rounding_type,&end)==2) && > rounding_value>=0 && rounding_type>=-1 && rounding_type<=1) ++position; > else { rounding_value = 1; rounding_type = 0; } > print(images,0,"Round values of image%s by %g and %s rounding.", > selection2string(selection,images_names,true).data(), > rounding_value, > rounding_type<0?"backward":rounding_type>0?"forward":"nearest"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_round(rounding_value,rounding_type); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].round(rounding_value,rounding_type); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-rand",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > double value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rand",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%lf%c%c",&value0,&sep0,&end)==2 && sep0=='%') || > std::sscanf(argx,"%lf%c",&value0,&end)==1) && > ((std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep1,&end)==2 && > sep1==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-rand",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%lf%c%c",&value1,&sep1,&end)==2 && sep1=='%') || > std::sscanf(argy,"%lf%c",&value1,&end)==1)) { > if (ind0) { value0 = images[*ind0].min(); sep0 = 0; } > if (ind1) { value1 = images[*ind1].max(); sep1 = 0; } > print(images,0,"Fill image%s with random values, in range [%g%s,%g%s].", > selection2string(selection,images_names,true).data(), > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double vmin = 0, vmax = 0, nvalue0 = value0, nvalue1 = value1; > if (sep0=='%' || sep1=='%') { > if (img) vmax = (double)img.max_min(vmin); > if (sep0=='%') nvalue0 = vmin + (vmax-vmin)*value0/100; > if (sep1=='%') nvalue1 = vmin + (vmax-vmin)*value1/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rand((T)nvalue0,(T)nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rand((T)nvalue0,(T)nvalue1); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-rand",true, > false,CImg<char>::empty())).height()==1) { > if (images[*ind0]) value1 = (double)images[*ind0].max_min(value0); > print(images,0,"Fill image%s with random values, in range [%g,%g] from image [%d].", > selection2string(selection,images_names,true).data(), > value0, > value1, > *ind0); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_rand((T)value0,(T)value1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].rand((T)value0,(T)value1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"rand","Command '-%s': Invalid argument '%s'.","rand",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-rotate3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float u = 0, v = 0, w = 1, angle = 0; > if (std::sscanf(argument,"%f,%f,%f,%f%c", > &u,&v,&w,&angle,&end)==4) { > print(images,0,"Rotate 3d object%s around axis (%g,%g,%g), with angle %g°.", > selection2string(selection,images_names,true).data(), > u,v,w, > angle); > const CImg<float> rot = CImg<float>::rotation_matrix(u,v,w, > (float)(angle*cimg::PI/180)); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_rotate_CImg3d(rot); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.rotate_CImg3d(rot); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-rotate3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"rotate3d","Command '-%s': Invalid argument '%s'.","rotate3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-rgb2hsi",command)) { print(images,0,"Convert image%s from RGB to HSI color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoHSI(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoHSI(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2hsl",command)) { print(images,0,"Convert image%s from RGB to HSL color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoHSL(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoHSL(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2hsv",command)) { print(images,0,"Convert image%s from RGB to HSV color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoHSV(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoHSV(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2lab",command)) { print(images,0,"Convert image%s from RGB to Lab color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtoLab(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtoLab(); images_names[posi].mark(); } }; } is_released = false; continue; }; > if (!std::strcmp("-rgb2srgb",command)) { print(images,0,"Convert image%s from RGB to sRGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_RGBtosRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].RGBtosRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-rol",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise left rotation of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].rol((unsigned int)nvalue); } else { images_names[selection[l]].mark(); img.rol((unsigned int)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-rol", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise left rotation of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].rol(img0); } else { images_names[selection[l]].mark(); img.rol(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise left rotation of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].rol((const char*)formula); } else { images_names[selection[l]].mark(); img.rol((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise left rotation of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.rol(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.rol(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 9683 "gmic.cpp" > ; > > > if (!std::strcmp("-ror",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise right rotation of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].ror((unsigned int)nvalue); } else { images_names[selection[l]].mark(); img.ror((unsigned int)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-ror", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise right rotation of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].ror(img0); } else { images_names[selection[l]].mark(); img.ror(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise left rotation of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].ror((const char*)formula); } else { images_names[selection[l]].mark(); img.ror((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise left rotation of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.ror(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.ror(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 9695 "gmic.cpp" > ; > > > if (!std::strcmp("-reverse3d",command)) { > print(images,0,"Reverse orientation of 3d object%s.", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T> &img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_reverse_CImg3d(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.reverse_CImg3d(); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-reverse3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > is_released = false; continue; > } > > > } > > > > > else if (command1=='s') { > > > if (!std::strcmp("-status",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > print(images,0,"Set status to '%s'.",argument_text); > CImg<char>::string(argument).move_to(status); > ++position; continue; > } > > > if (!std::strcmp("-skip",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (verbosity>0 || is_debug) > print(images,0,"Skip argument '%s'.", > argument_text); > ++position; > continue; > } > > > if (!std::strcmp("-set",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sepx = 0, sepy = 0, sepz = 0, sepc = 0; > float x = 0, y = 0, z = 0, c = 0; > double value = 0; > *argx = *argy = *argz = *argc = 0; > if ((std::sscanf(argument,"%lf%c", > &value,&end)==1 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-]%c", > &value,argx,&end)==2 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > &value,argx,argy,&end)==3 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > &value,argx,argy,argz,&end)==4 || > std::sscanf(argument,"%lf,%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > &value,argx,argy,argz,argc,&end)==5) && > (!*argx || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%') || > std::sscanf(argx,"%f%c",&x,&end)==1) && > (!*argy || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%') || > std::sscanf(argy,"%f%c",&y,&end)==1) && > (!*argz || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%') || > std::sscanf(argz,"%f%c",&z,&end)==1) && > (!*argc || > (std::sscanf(argc,"%f%c%c",&c,&sepc,&end)==2 && sepc=='%') || > std::sscanf(argc,"%f%c",&c,&end)==1)) { > print(images,0,"Set value %g in image%s, at coordinates (%g%s,%g%s,%g%s,%g%s).", > value, > selection2string(selection,images_names,true).data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > c,sepc=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = (int)cimg::round(sepz=='%'?z*(img.depth()-1)/100:z), > nc = (int)cimg::round(sepc=='%'?c*(img.spectrum()-1)/100:c); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_gmic_set(value,nx,ny,nz,nc); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].gmic_set(value,nx,ny,nz,nc); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"set","Command '-%s': Invalid argument '%s'.","set",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-split",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const char *axis_arg = 0; > char keep_values = '+'; > CImgList<char> axes; > float nb = 0; > for (axis_arg = argument; *axis_arg && *axis_arg!=','; ++axis_arg) { > const char _s = *axis_arg; > if (_s!='x' && _s!='y' && _s!='z' && _s!='c') { axis_arg = 0; break; } > CImg<char>::vector(_s).move_to(axes); > } > if (axis_arg && *axis_arg==',') { > if (std::sscanf(++axis_arg,"%f%c",&nb,&end)!=1) axis_arg = 0; > else nb = cimg::round(nb); > } > if (axes && axis_arg) { > const CImg<char> _axes = (axes,CImg<char>::vector(0))>'x'; > axes.remove(); > if (nb>0) > print(images,0,"Split image%s along the '%s'-ax%cs, into %g parts.", > selection2string(selection,images_names,true).data(), > _axes.data(), > axes.size()>1?'e':'i', > nb); > else if (nb<0) > print(images,0,"Split image%s along the '%s'-ax%cs, into blocs of %g pixels.", > selection2string(selection,images_names,true).data(), > _axes.data(), > axes.size()>1?'e':'i', > -nb); > else > print(images,0,"Split image%s along the '%s'-ax%cs.", > selection2string(selection,images_names,true).data(), > _axes.data(), > axes.size()>1?'e':'i'); > int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > if (!img) { > if (!is_get_version) { images.remove(ind); images_names.remove(ind); off-=1; } > } else { > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split(img,true); > for (int i = 0; i<(int)(axes)._width; ++i) { > const unsigned int N = split.size(); > for (unsigned int l = 0; l<N; ++l) { > split[0].get_split(axes(i,0),(int)nb).move_to(split,~0U); > split.remove(0); > } > } > if (is_get_version) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } else { > images.remove(ind); images_names.remove(ind); > off+=(int)split.size() - 1; > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > } > ++position; > } else if ((std::sscanf(argument,"%c,%c", > &keep_values,&end)==2) && > (keep_values=='+' || keep_values=='-')) { > print(images,0,"Split image%s in %s mode, according to value sequence '%s'.", > selection2string(selection,images_names,true).data(), > keep_values=='-'?"discard":"keep", > argument_text+2); > unsigned int nb_values = 1; > int off = 0; > for (const char *s = argument+2; *s; ++s) if (*s==',') ++nb_values; > const CImg<T> values(nb_values,1,1,1,argument+2,true); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > if (!img) { > if (!is_get_version) { images.remove(ind); images_names.remove(ind); off-=1; } > } else { > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split = img.get_split(values,keep_values=='+',false); > if (is_get_version) { > if (split) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } > } else { > images.remove(ind); > images_names.remove(ind); > off+=(int)split.size() - 1; > if (split) { > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > } > } > ++position; > } else { > print(images,0,"Split image%s as a set of constant sub-vectors.", > selection2string(selection,images_names,true).data()); > int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > if (!img) { > if (!is_get_version) { images.remove(ind); images_names.remove(ind); off-=1; } > } else { > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split = img.get_split(false); > if (is_get_version) { > if (split) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } > } else { > images.remove(ind); > images_names.remove(ind); > if (split) { > off+=(int)split.size() - 1; > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > } > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-shared",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> st0(256), st1(256), st2(256), st3(256), st4(256); > char sep0 = 0, sep1 = 0, sep2 = 0, sep3 = 0, sep4 = 0; > float a0 = 0, a1 = 0, a2 = 0, a3 = 0, a4 = 0; > *st0 = *st1 = *st2 = *st3 = *st4 = 0; > if (std::sscanf(argument, > "%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+]," > "%255[0-9.eE%+]%c", > st0.data(),st1.data(),st2.data(),st3.data(),st4.data(),&end)==5 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%')) && > (std::sscanf(st4,"%f%c",&a4,&end)==1 || > (std::sscanf(st4,"%f%c%c",&a4,&sep4,&end)==2 && sep4=='%'))) { > print(images,0, > "Insert shared buffer%s from points (%g%s->%g%s,%g%s,%g%s,%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > a4,sep4=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.width()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.width()-1)/100:a1), > y = (unsigned int)cimg::round(sep2=='%'?a2*(img.height()-1)/100:a2), > z = (unsigned int)cimg::round(sep3=='%'?a3*(img.depth()-1)/100:a3), > c = (unsigned int)cimg::round(sep4=='%'?a4*(img.spectrum()-1)/100:a4); > images.insert(img.get_shared_points(s0,s1,y,z,c),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else if (std::sscanf(argument, > "%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+]," > "%255[0-9.eE%+],%c", > st0.data(),st1.data(),st2.data(),st3.data(),&end)==4 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%')) && > (std::sscanf(st3,"%f%c",&a3,&end)==1 || > (std::sscanf(st3,"%f%c%c",&a3,&sep3,&end)==2 && sep3=='%'))) { > print(images,0,"Insert shared buffer%s from lines (%g%s->%g%s,%g%s,%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > a3,sep3=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.height()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.height()-1)/100:a1), > z = (unsigned int)cimg::round(sep2=='%'?a2*(img.depth()-1)/100:a2), > c = (unsigned int)cimg::round(sep3=='%'?a3*(img.spectrum()-1)/100:a3); > images.insert(img.get_shared_rows(s0,s1,z,c),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else if (std::sscanf(argument,"%255[0-9.eE%+],%255[0-9.eE%+],%255[0-9.eE%+]%c", > st0.data(),st1.data(),st2.data(),&end)==3 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%')) && > (std::sscanf(st2,"%f%c",&a2,&end)==1 || > (std::sscanf(st2,"%f%c%c",&a2,&sep2,&end)==2 && sep2=='%'))) { > print(images,0,"Insert shared buffer%s from planes (%g%s->%g%s,%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > a2,sep2=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.depth()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.depth()-1)/100:a1), > c = (unsigned int)cimg::round(sep2=='%'?a2*(img.spectrum()-1)/100:a2); > images.insert(img.get_shared_slices(s0,s1,c),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else if (std::sscanf(argument,"%255[0-9.eE%+],%255[0-9.eE%+]%c", > st0.data(),st1.data(),&end)==2 && > (std::sscanf(st0,"%f%c",&a0,&end)==1 || > (std::sscanf(st0,"%f%c%c",&a0,&sep0,&end)==2 && sep0=='%')) && > (std::sscanf(st1,"%f%c",&a1,&end)==1 || > (std::sscanf(st1,"%f%c%c",&a1,&sep1,&end)==2 && sep1=='%'))) { > print(images,0,"Insert shared buffer%s from channels (%g%s->%g%s) of image%s.", > selection.height()>1?"s":"", > a0,sep0=='%'?"%":"", > a1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = images[selection[l]]; > const unsigned int > s0 = (unsigned int)cimg::round(sep0=='%'?a0*(img.spectrum()-1)/100:a0), > s1 = (unsigned int)cimg::round(sep1=='%'?a1*(img.spectrum()-1)/100:a1); > images.insert(img.get_shared_channels(s0,s1),~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > ++position; > } else { > print(images,0,"Insert shared buffer%s from image%s.", > selection.height()>1?"s":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > images.insert(img,~0U,true); > images_names.insert(images_names[selection[l]].get_copymark()); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-shift",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char sepx = 0, sepy = 0, sepz = 0, sepc = 0; > float dx = 0, dy = 0, dz = 0, dc = 0; > unsigned int boundary = 0; > *argx = *argy = *argz = *argc = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%u%c", > argx,argy,argz,argc,&boundary,&end)==5) && > (std::sscanf(argx,"%f%c",&dx,&end)==1 || > (std::sscanf(argx,"%f%c%c",&dx,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&dy,&end)==1 || > (std::sscanf(argy,"%f%c%c",&dy,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&dz,&end)==1 || > (std::sscanf(argz,"%f%c%c",&dz,&sepz,&end)==2 && sepz=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&dc,&end)==1 || > (std::sscanf(argc,"%f%c%c",&dc,&sepc,&end)==2 && sepc=='%')) && > boundary<=2) { > print(images,0, > "Shift image%s by displacement vector (%g%s,%g%s,%g%s,%g%s) and " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > dx,sepx=='%'?"%":"", > dy,sepy=='%'?"%":"", > dz,sepz=='%'?"%":"", > dc,sepc=='%'?"%":"", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic"); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > ndx = (int)cimg::round(sepx=='%'?dx*img.width()/100:dx), > ndy = (int)cimg::round(sepy=='%'?dy*img.height()/100:dy), > ndz = (int)cimg::round(sepz=='%'?dz*img.depth()/100:dz), > ndc = (int)cimg::round(sepc=='%'?dc*img.spectrum()/100:dc); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_shift(ndx,ndy,ndz,ndc,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].shift(ndx,ndy,ndz,ndc,boundary); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"shift","Command '-%s': Invalid argument '%s'.","shift",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-slices",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind0, ind1; > float value0 = 0, value1 = 0; > char sep0 = 0, sep1 = 0; > *argx = *argy = 0; > if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c]",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-slices",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%'))) { > if (ind0) { value0 = images[*ind0].depth() - 1.0f; sep0 = 0; } > print(images,0,"Keep slice %g%s of image%s.", > value0,sep0=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.depth()-1)/100:value0); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_slice(nvalue0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.slice(nvalue0); images_names[posi].mark(); } }; > } > } else if (std::sscanf(argument,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep0,&end)==2 && > sep0==']' && > (ind0=selection2cimg(indices,images.size(),images_names,"-slices",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argx,"%f%c",&value0,&end)==1 || > (std::sscanf(argx,"%f%c%c",&value0,&sep0,&end)==2 && sep0=='%')) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",formula,&sep0,&end)==2 && > sep0==']' && > (ind1=selection2cimg(formula,images.size(),images_names,"-slices",true, > false,CImg<char>::empty())).height()==1) || > std::sscanf(argy,"%f%c",&value1,&end)==1 || > (std::sscanf(argy,"%f%c%c",&value1,&sep1,&end)==2 && sep1=='%'))) { > if (ind0) { value0 = images[*ind0].depth() - 1.0f; sep0 = 0; } > if (ind1) { value1 = images[*ind1].depth() - 1.0f; sep1 = 0; } > print(images,0,"Keep slices %g%s..%g%s of image%s.", > value0,sep0=='%'?"%":"", > value1,sep1=='%'?"%":"", > selection2string(selection,images_names,true).data()); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> &img = images[selection[l]]; > const int > nvalue0 = (int)cimg::round(sep0=='%'?value0*(img.depth()-1)/100:value0), > nvalue1 = (int)cimg::round(sep1=='%'?value1*(img.depth()-1)/100:value1); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_slices(nvalue0,nvalue1); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.slices(nvalue0,nvalue1); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"slices","Command '-%s': Invalid argument '%s'.","slices",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-srand",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > double value = 0; > if (std::sscanf(argument,"%lf%c", > &value,&end)==1) { > value = cimg::round(value); > print(images,0,"Set random generator seed to %u.", > (unsigned int)value); > cimg::srand((unsigned int)value); > ++position; > } else { > print(images,0,"Set random generator seed to random."); > cimg::srand(); > } > continue; > } > > > > > if (!std::strcmp("-sub",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Subtract %g%s to image%s" ".",value,ssep,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator-=((Tfloat)nvalue); } else { images_names[selection[l]].mark(); img.operator-=((Tfloat)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-sub", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Subtract image [%d] to image%s" ".",ind[0],selection2string(selection,images_names,true).data()); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator-=(img0); } else { images_names[selection[l]].mark(); img.operator-=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Subtract expression %s to image%s" ".",argument_text,selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator-=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator-=((const char*)formula); } } ++position; } else { print(images,0,"Subtract image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator-=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator-=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 10196 "gmic.cpp" > ; > > if (!std::strcmp("-sqrt",command)) { print(images,0,"Compute pointwise square root of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sqrt(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sqrt(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sqr",command)) { print(images,0,"Compute pointwise square function of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sqr(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sqr(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sign",command)) { print(images,0,"Compute pointwise sign of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sign(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sign(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sin",command)) { print(images,0,"Compute pointwise sine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sin(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sin(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sort",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char order = '+', axis = 0; > if ((std::sscanf(argument,"%c%c",&order,&end)==1 || > (std::sscanf(argument,"%c,%c%c",&order,&axis,&end)==2 && > (axis=='x' || axis=='y' || axis=='z' || axis=='c'))) && > (order=='+' || order=='-')) ++position; > else { order = '+'; axis = 0; } > if (axis) print(images,0,"Sort values of image%s in %s order, according to axis '%c'.", > selection2string(selection,images_names,true).data(),order=='+'?"ascending":"descending",axis); > else print(images,0,"Sort values of image%s in %s order.", > selection2string(selection,images_names,true).data(),order=='+'?"ascending":"descending"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sort(order=='+',axis); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sort(order=='+',axis); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-solve",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-solve",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Solve linear system AX = B, with B-vector%s and A-matrix [%d].", > selection2string(selection,images_names,true).data(),*ind); > const CImg<T> A = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_solve(A); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].solve(A); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"solve","Command '-%s': Invalid argument '%s'.","solve",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-sub3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float tx = 0, ty = 0, tz = 0; > if (std::sscanf(argument,"%f%c", > &tx,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &tx,&ty,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &tx,&ty,&tz,&end)==3) { > print(images,0,"Shift 3d object%s with displacement -(%g,%g,%g).", > selection2string(selection,images_names,true).data(), > tx,ty,tz); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_shift_CImg3d(-tx,-ty,-tz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.shift_CImg3d(-tx,-ty,-tz); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-sub3d': Invalid 3d object [%d], in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"sub3d","Command '-%s': Invalid argument '%s'.","sub3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-sharpen",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float amplitude = 0, edge = -1, alpha = 0, sigma = 0; > if ((std::sscanf(argument,"%f%c", > &litude,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &litude,&edge,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &litude,&edge,&alpha,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &litude,&edge,&alpha,&sigma,&end)==4) && > amplitude>=0 && (edge==-1 || edge>=0)) { > if (edge>=0) > print(images,0,"Sharpen image%s with shock filters, amplitude %g, edge %g, " > "alpha %g and sigma %g.", > selection2string(selection,images_names,true).data(), > amplitude, > edge, > alpha, > sigma); > else > print(images,0,"Sharpen image%s with inverse diffusion and amplitude %g.", > selection2string(selection,images_names,true).data(), > amplitude); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sharpen(amplitude,(bool)(edge>=0), edge,alpha,sigma); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sharpen(amplitude,(bool)(edge>=0), edge,alpha,sigma); images_names[posi].mark(); } } > ; > } > } else gmic::error(images,0,"sharpen","Command '-%s': Invalid argument '%s'.","sharpen",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-smooth",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float amplitude = 0, sharpness = 0.7f, anisotropy = 0.3f, alpha = 0.6f, > sigma = 1.1f, dl =0.8f, da = 30.0f, gauss_prec = 2.0f; > unsigned int interpolation = 0, is_fast_approximation = 1; > CImg<unsigned int> ind; > char sep = 0; > if ((std::sscanf(argument,"%f%c", > &litude,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &litude,&sharpness,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&end)==3 || > std::sscanf(argument,"%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&end)==4 || > std::sscanf(argument,"%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&end)==5 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&end)==6 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&end)==7 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&gauss_prec, > &end)==8 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f,%u%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&gauss_prec, > &interpolation,&end)==9 || > std::sscanf(argument,"%f,%f,%f,%f,%f,%f,%f,%f,%u,%u%c", > &litude,&sharpness,&anisotropy,&alpha,&sigma,&dl,&da,&gauss_prec, > &interpolation,&is_fast_approximation,&end)==10) && > amplitude>=0 && sharpness>=0 && anisotropy>=0 && anisotropy<=1 && dl>0 && > da>=0 && gauss_prec>0 && interpolation<=2 && is_fast_approximation<=1) { > if (da>0) > print(images,0,"Smooth image%s anisotropically, with amplitude %g, sharpness %g, " > "anisotropy %g, alpha %g, sigma %g, dl %g, da %g, precision %g, " > "%s interpolation and fast approximation %s.", > selection2string(selection,images_names,true).data(), > amplitude, > sharpness, > anisotropy, > alpha, > sigma, > dl, > da, > gauss_prec, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"runge-kutta", > is_fast_approximation?"enabled":"disabled"); > else > print(images,0,"Smooth image%s anisotropically, with %d iterations, sharpness %g, " > "anisotropy %g, alpha %g, sigma %g and dt %g.", > selection2string(selection,images_names,true).data(), > (int)amplitude, > sharpness, > anisotropy, > alpha, > sigma, > dl); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_anisotropic(amplitude,sharpness,anisotropy, alpha,sigma,dl,da,gauss_prec, interpolation, (bool)is_fast_approximation); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_anisotropic(amplitude,sharpness,anisotropy, alpha,sigma,dl,da,gauss_prec, interpolation, (bool)is_fast_approximation); images_names[posi].mark(); } } > > > ; > } > } else if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f%c", > indices,&litude,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f%c", > indices,&litude,&dl,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f%c", > indices,&litude,&dl,&da,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f%c", > indices,&litude,&dl,&da,&gauss_prec,&end)==5 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%u%c", > indices,&litude,&dl,&da,&gauss_prec, > &interpolation,&end)==6 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%f,%f,%f,%f,%u,%u%c", > indices,&litude,&dl,&da,&gauss_prec,&interpolation, > &is_fast_approximation,&end)==7) && > (ind=selection2cimg(indices,images.size(),images_names,"-smooth",true, > false,CImg<char>::empty())).height()==1 && > amplitude>=0 && dl>0 && da>=0 && gauss_prec>0 && interpolation<=2 && > is_fast_approximation<=1) { > const CImg<T> tensors = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > if (da>0) > print(images,0, > "Smooth image%s anisotropically, with tensor field [%u], amplitude %g, " > "dl %g, da %g, precision %g, %s interpolation and fast approximation %s.", > selection2string(selection,images_names,true).data(), > *ind, > amplitude, > dl, > da, > gauss_prec, > interpolation==0?"nearest-neighbor":interpolation==1?"linear":"runge-kutta", > is_fast_approximation?"enabled":"disabled"); > else > print(images,0, > "Smooth image%s anisotropically, with tensor field [%u], %d iterations " > "and dt %g.", > selection2string(selection,images_names,true).data(), > *ind, > (int)amplitude, > dl); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_blur_anisotropic(tensors,amplitude,dl,da, gauss_prec,interpolation, is_fast_approximation); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].blur_anisotropic(tensors,amplitude,dl,da, gauss_prec,interpolation, is_fast_approximation); images_names[posi].mark(); } } > > ; > } > } else gmic::error(images,0,"smooth","Command '-%s': Invalid argument '%s'.","smooth",argument_text); > is_released = false; ++position; continue; > } > > > > if (!std::strcmp("-split3d",command)) { > bool keep_shared = true; > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if ((*argument=='0' || *argument=='1') && !argument[1]) { > keep_shared = *argument=='1'; > ++position; > } > print(images,0,"Split 3d object%s into 6 property vectors%s.", > selection2string(selection,images_names,true).data(), > keep_shared?"":" and clone shared data"); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T> &img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > CImgList<T> split; > try { > if (!keep_shared) { > CImg<T> vertices; > CImgList<unsigned int> primitives; > CImgList<T> colors, opacities; > img.get_CImg3dtoobject3d(primitives,colors,opacities,false).move_to(vertices); > CImgList<T> _colors(colors,false), _opacities(opacities,false); > _colors.move_to(colors.assign()); > _opacities.move_to(opacities.assign()); > vertices.object3dtoCImg3d(primitives,colors,opacities,false).get_split_CImg3d(). > move_to(split); > } else img.get_split_CImg3d().move_to(split); > } catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-split3d': Invalid 3d object [%d], in selected image%s (%s).", > ind-off,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > if (is_get_version) { > images_names.insert(split.size(),name.copymark()); > split.move_to(images,~0U); > } else { > images.remove(ind); > images_names.remove(ind); > off+=split.size() - 1; > images_names.insert(split.size(),name.get_copymark(),ind); > name.move_to(images_names[ind]); > split.move_to(images,ind); > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-svd",command)) { > print(images,0,"Compute SVD decomposition%s of matri%s%s.", > selection.height()>1?"s":"",selection.height()>1?"ce":"x",selection2string(selection,images_names,true).data()); > CImg<float> U, S, V; > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l] + off; > const CImg<T>& img = check_image(images,images[ind]); > CImg<char> name = images_names[ind].get_mark(); > img.SVD(U,S,V,true,100); > if (is_get_version) { > images_names.insert(2,name.copymark()); > name.move_to(images_names); > U.move_to(images); > S.move_to(images); > V.move_to(images); > } else { > images_names.insert(2,name.get_copymark(),ind+1); > name.move_to(images_names[ind]); > U.move_to(images[ind].assign()); > images.insert(S,ind+1); > images.insert(V,ind+2); > off+=2; > } > } > is_released = false; continue; > } > > > if (!std::strcmp("-sphere3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float radius = 100, recursions = 3; > if ((std::sscanf(argument,"%f%c", > &radius,&end)==1 || > std::sscanf(argument,"%f,%f%c", > &radius,&recursions,&end)==2) && > recursions>=0) { > recursions = cimg::round(recursions); > print(images,0,"Input 3d sphere, with radius %g and %g recursions.", > radius, > recursions); > CImgList<unsigned int> primitives; > CImg<float> vertices = CImg<T>::sphere3d(primitives,radius,(unsigned int)recursions); > vertices.object3dtoCImg3d(primitives,false).move_to(images); > CImg<char>::string("[3d sphere]").move_to(images_names); > } else gmic::error(images,0,"sphere3d","Command '-%s': Invalid argument '%s'.","sphere3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-specl3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 0.15f; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 && value>=0) ++position; > else value = 0.15f; > specular_lightness3d = value; > print(images,0,"Set lightness of 3d specular light to %g.", > specular_lightness3d); > continue; > } > > if (!std::strcmp("-specs3d",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float value = 0.8f; > if (std::sscanf(argument,"%f%c", > &value,&end)==1 && value>=0) ++position; > else value = 0.8f; > specular_shininess3d = value; > print(images,0,"Set shininess of 3d specular light to %g.", > specular_shininess3d); > continue; > } > > > if (!std::strcmp("-sinc",command)) { print(images,0,"Compute pointwise sinc function of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sinc(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sinc(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-sinh",command)) { print(images,0,"Compute pointwise hyperpolic sine of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sinh(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sinh(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-srgb2rgb",command)) { print(images,0,"Convert image%s from sRGB to RGB color bases.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_sRGBtoRGB(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].sRGBtoRGB(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-streamline3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int interp = 2, is_backward = 0, is_oriented_only = 0; > float x = 0, y = 0, z = 0, L = 100, dl = 0.1f; > char sepx = 0, sepy = 0, sepz = 0; > *formula = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > argx,argy,argz,&L,&end)==4 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f%c", > argx,argy,argz,&L,&dl,&end)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f,%u%c", > argx,argy,argz,&L,&dl,&interp,&end)==6 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f,%u," > "%u%c", > argx,argy,argz,&L,&dl,&interp,&is_backward,&end)==7 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f,%u," > "%u,%u%c", > argx,argy,argz,&L,&dl,&interp,&is_backward, > &is_oriented_only,&end)==8) && > (std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&z,&end)==1 || > (std::sscanf(argz,"%f%c%c",&z,&sepz,&end)==2 && sepz=='%')) && > L>=0 && dl>0 && interp<4 && is_backward<=1 && is_oriented_only<=1) { > print(images,0,"Extract 3d streamline from image%s, starting from (%g%s,%g%s,%g%s).", > selection2string(selection,images_names,true).data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > const float > nx = cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = cimg::round(sepy=='%'?y*(img.height()-1)/100:y), > nz = cimg::round(sepz=='%'?z*(img.depth()-1)/100:z); > CImg<T> vertices = img.get_streamline(nx,ny,nz,L,dl,interp, > (bool)is_backward,(bool)is_oriented_only); > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > if (vertices.width()>1) { > primitives.assign(vertices.width()-1,1,2); > for (int l = 0; l<(int)(primitives)._width; ++l) { primitives(l,0) = l; primitives(l,1) = l+1; } > colors.assign(primitives.size(),1,3,1,1,200); > } else { > vertices.assign(); > warn(images,0, > "Command '-streamline3d': Empty streamline starting from " > "(%g%s,%g%s,%g%s) in image [%u].", > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > z,sepz=='%'?"%":"", > ind); > } > vertices.object3dtoCImg3d(primitives,colors,false); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(vertices); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(vertices); images_names[posi].mark(); } }; > } > } else if ((std::sscanf(argument,"'%4095[^']',%f,%f,%f%c", > formula,&x,&y,&z,&end)==4 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f%c", > formula,&x,&y,&z,&L,&end)==5 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f%c", > formula,&x,&y,&z,&L,&dl,&end)==6 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%u%c", > formula,&x,&y,&z,&L,&dl,&interp,&end)==7 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%u,%u%c", > formula,&x,&y,&z,&L,&dl,&interp,&is_backward,&end)==8 || > std::sscanf(argument,"'%4095[^']',%f,%f,%f,%f,%f,%u,%u,%u%c", > formula,&x,&y,&z,&L,&dl,&interp,&is_backward, > &is_oriented_only,&end)==9) && > dl>0 && interp<4) { > gmic_strreplace(formula); > print(images,0,"Extract 3d streamline from formula '%s', starting from (%g,%g,%g).", > formula, > x,y,z); > CImg<T> vertices = CImg<T>::streamline((const char *)formula,x,y,z,L,dl,interp, > (bool)is_backward,(bool)is_oriented_only); > CImgList<unsigned int> primitives; > CImgList<unsigned char> colors; > if (vertices.width()>1) { > primitives.assign(vertices.width()-1,1,2); > for (int l = 0; l<(int)(primitives)._width; ++l) { primitives(l,0) = l; primitives(l,1) = l+1; } > colors.assign(primitives.size(),1,3,1,1,200); > } else { > vertices.assign(); > warn(images,0, > "Command '-streamline3d': Empty streamline starting from (%g,%g,%g) " > "in expression '%s'.", > x,y,z,formula); > } > vertices.object3dtoCImg3d(primitives,colors,false).move_to(images); > snprintf(title,_title.size(),"[3d streamline of '%s' at (%g,%g,%g)]", > formula,x,y,z); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(images_names); > } else gmic::error(images,0,"streamline3d","Command '-%s': Invalid argument '%s'.","streamline3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-structuretensors",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int scheme = 0; > if (std::sscanf(argument,"%u%c",&scheme,&end)==1 && > scheme<=2) ++position; > else scheme = 2; > print(images,0,"Compute structure tensor field of image%s, with %s scheme.", > selection2string(selection,images_names,true).data(), > scheme==0?"centered":scheme==1?"forward-backward1":"forward-backward2"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_structure_tensors(scheme); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].structure_tensors(scheme); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-select",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int feature_type = 0, X=~0U, Y=~0U, Z=~0U; > bool is_xyz = false; > if ((std::sscanf(argument,"%u%c",&feature_type,&end)==1 || > (is_xyz=std::sscanf(argument,"%u,%u,%u,%u%c",&feature_type,&X,&Y,&Z,&end)==4)) && > feature_type<=3) { ># 10701 "gmic.cpp" > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0, > "Select %s in image%s in interactive mode", > feature_type==0?"point":feature_type==1?"segment": > feature_type==2?"rectangle":"ellipse",selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) { > if (is_xyz) std::fprintf(cimg::output(),", from point (%u,%u,%u)",X,Y,Z); > std::fprintf(cimg::output()," (skipped, no display available)."); > std::fflush(cimg::output()); > } > } > if (is_available_display) { > print(images,0,"Select %s in image%s in interactive mode", > feature_type==0?"point":feature_type==1?"segment": > feature_type==2?"rectangle":"ellipse",selection2string(selection,images_names,true).data()); > if (verbosity>=0 || is_debug) { > if (is_xyz) std::fprintf(cimg::output(),", from point (%u,%u,%u).",X,Y,Z); > else std::fprintf(cimg::output(),"."); > std::fflush(cimg::output()); > } > unsigned int XYZ[3]; > XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; > if (instant_window[0]) > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_select(instant_window[0],feature_type, is_xyz?XYZ:0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].select(instant_window[0],feature_type, is_xyz?XYZ:0); images_names[posi].mark(); } } > ; > } > else > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_select(images_names[selection[l]].data(), feature_type,is_xyz?XYZ:0); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].select(images_names[selection[l]].data(), feature_type,is_xyz?XYZ:0); images_names[posi].mark(); } } > ; > } > } > > } else gmic::error(images,0,"select","Command '-%s': Invalid argument '%s'.","select",argument_text); > is_released = false; ++position; continue; > } > > > } > > > > > else if (command1=='t') { > > > if (!std::strcmp("-type",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; ># 10766 "gmic.cpp" > if (!std::strcmp(argument,"float")) { if (std::strcmp("float",cimg::type<T>::string())) { if (!is_default_type) { --position; break; } else { print(images,0,"Set pixel data type to '%s'.","float"); CImgList<float> cast_images; images.move_to(cast_images); is_default_type = false; is_released = false; _parse_float(commands_line,++position,cast_images,images_names,variables_sizes); is_default_type = true; cast_images.move_to(images); } } else { print(images,0,"Set pixel data type to '%s'.","float"); ++position; } continue; }; > gmic::error(images,0,"type","Command '-%s': Invalid argument '%s'.","type",argument_text); > } > > > > > if (!std::strcmp("-threshold",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int is_soft = 0; > double value = 0; > char sep = 0; > if ((std::sscanf(argument,"%lf%c", > &value,&end)==1 || > (std::sscanf(argument,"%lf%c%c", > &value,&sep,&end)==2 && sep=='%') || > std::sscanf(argument,"%lf,%u%c", > &value,&is_soft,&end)==2 || > (std::sscanf(argument,"%lf%c,%u%c", > &value,&sep,&is_soft,&end)==3 && sep=='%')) && > is_soft<=1) { > print(images,0,"%s-threshold image%s by %g%s.", > is_soft?"Soft":"Hard", > selection2string(selection,images_names,true).data(), > value,sep=='%'?"%":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > double nvalue = value; > if (sep=='%' && img) { > double vmin = 0, vmax = (double)img.max_min(vmin); > nvalue = vmin + (vmax-vmin)*value/100; > } > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_threshold((T)nvalue,(bool)is_soft); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.threshold((T)nvalue,(bool)is_soft); images_names[posi].mark(); } }; > } > ++position; > } else { > > > > > > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0, > "Threshold image%s in interactive mode (skipped, no display available).", > selection2string(selection,images_names,true).data()); > } > if (is_available_display) { > print(images,0,"Threshold image%s in interactive mode.", > selection2string(selection,images_names,true).data()); > CImgDisplay _disp, &disp = instant_window[0]?instant_window[0]:_disp; > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T>& img = check_image(images,images[selection[l]]); > if (img) { > CImg<T> visu = img.depth()>1?img.get_projections2d(img.width()/2, > img.height()/2, > img.depth()/2). > channels(0,cimg::min(3,img.spectrum())-1): > img.get_channels(0,cimg::min(3,img.spectrum()-1)); > const unsigned int > w = CImgDisplay::_fitscreen(visu.width(),visu.height(),1,256,-85,false), > h = CImgDisplay::_fitscreen(visu.width(),visu.height(),1,256,-85,true); > if (disp) disp.resize(w,h,false); else disp.assign(w,h,0,0); > double vmin = 0, vmax = (double)img.max_min(vmin), percent = 50; > bool stopflag = false, is_clicked = false; > int omx = -1, omy = -1; > CImg<unsigned char> res; > for (disp.show().flush(); !stopflag; ) { > const unsigned char white[] = { 255,255,255 }, black[] = { 0,0,0 }; > const unsigned int key = disp.key(); > if (!res) > disp.display(((res=visu.get_threshold((T)(vmin + percent*(vmax-vmin)/100)). > resize(disp))*=255). > draw_text(0,0,"Threshold %g = %.3g%%", > white,black,0.7f,13, > (double)(vmin + percent*(vmax-vmin)/100), > percent)). > set_title("%s (%dx%dx%dx%d)", > gmic_basename(images_names[selection[l]].data()), > img.width(),img.height(),img.depth(),img.spectrum()).wait(); > const int mx = disp.mouse_x(), my = disp.mouse_y(); > if (disp.button()) { > if (mx>=0 && my>=0 && (mx!=omx || my!=omy)) { > percent = (my-16)*100.0/(disp.height()-32); > if (percent<0) percent = 0; else if (percent>101) percent = 101; > omx = mx; omy = my; res.assign(); > } > is_clicked = true; > } else if (is_clicked) break; > if (disp.is_closed() || (key && key!=cimg::keyCTRLLEFT)) stopflag = true; > if (key==cimg::keyD && disp.is_keyCTRLLEFT()) { > disp.resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-85,false),CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-85,true), > stopflag=false).set_key(cimg::keyD,false); > res.assign(); > } > if (key==cimg::keyC && disp.is_keyCTRLLEFT()) { > disp.resize(CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,false),CImgDisplay::_fitscreen(2*disp.width()/3,2*disp.height()/3,1,128,-85,true), > stopflag=false).set_key(cimg::keyC,false); > res.assign(); > } > if (disp.is_resized()) { disp.resize(false); res.assign(); } > } > print(images,0,"Hard-threshold image [%d] by %g = %.3g%%.", > selection[l],(double)(vmin + percent*(vmax-vmin)/100),percent); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_threshold((T)(vmin + percent*(vmax-vmin)/100)); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.threshold((T)(vmin + percent*(vmax-vmin)/100)); images_names[posi].mark(); } }; > } else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_replace(img); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.replace(img); images_names[posi].mark(); } }; } > } > } > > > } > is_released = false; continue; > } > > > if (!std::strcmp("-tan",command)) { print(images,0,"Compute pointwise tangent of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_tan(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].tan(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > if (!std::strcmp("-text",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> text(4096); > *argx = *argy = *text = *color = 0; > float x = 0, y = 0, opacity = 1, siz = 13; > char sepx = 0, sepy = 0; > if ((std::sscanf(argument,"%4095[^,]%c", > text.data(),&end)==1 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-]%c", > text.data(),argx,&end)==2 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > text.data(),argx,argy,&end)==3 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-],%f%c", > text.data(),argx,argy,&siz,&end)==4 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f%c", > text.data(),argx,argy,&siz,&opacity,&end)==5 || > std::sscanf(argument,"%4095[^,],%255[0-9.eE%+-],%255[0-9.eE%+-],%f,%f," > "%4095[0-9.eE,+-]%c", > text.data(),argx,argy,&siz,&opacity,color,&end)==6) && > (!*argx || > std::sscanf(argx,"%f%c",&x,&end)==1 || > (std::sscanf(argx,"%f%c%c",&x,&sepx,&end)==2 && sepx=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&y,&end)==1 || > (std::sscanf(argy,"%f%c%c",&y,&sepy,&end)==2 && sepy=='%')) && > siz>=0) { > siz = cimg::round(siz); > gmic_strreplace(text); > print(images,0,"Draw text '%s' at position (%g%s,%g%s) on image%s, with font " > "height %g, opacity %g and color (%s).", > text.data(), > x,sepx=='%'?"%":"", > y,sepy=='%'?"%":"", > selection2string(selection,images_names,true).data(), > siz, > opacity, > *color?color:"default"); > cimg::strunescape(text); > unsigned int nb_cols = 1; > for (const char *s = color; *s; ++s) if (*s==',') ++nb_cols; > for (int l = 0; l<(int)((selection)._height); ++l) { > CImg<T> > &img = images[selection[l]], > col(cimg::max(img.spectrum(),(int)nb_cols),1,1,1,0); > col.fill(color,true); > const int > nx = (int)cimg::round(sepx=='%'?x*(img.width()-1)/100:x), > ny = (int)cimg::round(sepy=='%'?y*(img.height()-1)/100:y); > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_gmic_draw_text(nx,ny,text,col,0,opacity,(unsigned int)siz,nb_cols); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.gmic_draw_text(nx,ny,text,col,0,opacity,(unsigned int)siz,nb_cols); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"text","Command '-%s': Invalid argument '%s'.","text",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-texturize3d",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind_texture, ind_coords; > char sep = 0; > *argx = *argy = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > argx,&sep,&end)==2 && sep==']') || > (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],[%255[a-zA-Z0-9_.%+-]%c%c", > argx,argy,&sep,&end)==3 && sep==']')) && > (ind_texture=selection2cimg(argx,images.size(),images_names,"-texturize3d",true, > false,CImg<char>::empty())).height()==1 && > (!*argy || (ind_coords=selection2cimg(argy,images.size(),images_names, > "-texturize3d",true, > false,CImg<char>::empty())).height()==1)) { > if (ind_coords) > print(images,0, > "Texturize 3d object%s with texture [%u] and texture coordinates [%u].", > selection2string(selection,images_names,true).data(),*ind_texture,*ind_coords); > else > print(images,0,"Texturize 3d object%s with texture [%u].", > selection2string(selection,images_names,true).data(),*ind_texture); > const CImg<T> > texture = check_image(images,_gmic_image_arg(*ind_texture,selection)?images[*ind_texture]: images[*ind_texture].get_shared()), > coords = ind_coords?check_image(images,_gmic_image_arg(*ind_coords,selection)?images[*ind_coords]: images[*ind_coords].get_shared()):CImg<T>(); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_texturize_CImg3d(texture,coords); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.texturize_CImg3d(texture,coords); images_names[posi].mark(); } }; } > catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-texturize3d': Invalid 3d object [%d], " > "in selected image%s (%s).", > ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else gmic::error(images,0,"texturize3d","Command '-%s': Invalid argument '%s'.","texturize3d",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-trisolve",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > char sep = 0; > if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']' && > (ind=selection2cimg(indices,images.size(),images_names,"-trisolve",true, > false,CImg<char>::empty())).height()==1) { > print(images,0,"Solve tridiagonal system AX = B, with B-vector%s and tridiagonal " > "A-matrix [%d].", > selection2string(selection,images_names,true).data(),*ind); > const CImg<T> A = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_solve_tridiagonal(A); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].solve_tridiagonal(A); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"trisolve","Command '-%s': Invalid argument '%s'.","trisolve",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-tanh",command)) { print(images,0,"Compute pointwise hyperbolic tangent of image%s.",selection2string(selection,images_names,true).data()); for (int l = 0; l<(int)((selection)._height); ++l) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_tanh(); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].tanh(); images_names[posi].mark(); } }; } is_released = false; continue; }; > > > } > > > > > else if (command1=='u') { > > > if (!std::strcmp("-unroll",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > char axis = 'y'; > if ((*argument=='x' || *argument=='y' || > *argument=='z' || *argument=='c') && !argument[1]) { > axis = *argument; > ++position; > } > else axis = 'y'; > print(images,0,"Unroll image%s along the '%c'-axis.", > selection2string(selection,images_names,true).data(), > axis); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_unroll(axis); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].unroll(axis); images_names[posi].mark(); } }; > } > is_released = false; continue; > } > > > if (!std::strcmp("-uncommand",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (argument[0]=='*' && !argument[1]) { > unsigned int nb_commands = 0; > for (unsigned int i = 0; i<256; ++i) { > nb_commands+=commands[i].size(); > commands[i].assign(); > commands_names[i].assign(); > commands_has_arguments[i].assign(); > } > print(images,0,"Discard definitions of all custom commmands (%u command%s discarded).", > nb_commands,nb_commands>1?"s":""); > } else { > CImgList<char> command_list = CImg<char>::string(argument).get_split(',',false,false); > print(images,0,"Discard last definition of custom command%s '%s'", > command_list.width()>1?"s":"", > argument_text); > unsigned int nb_removed = 0; > for (int l = 0; l<(int)(command_list)._width; ++l) { > CImg<char> &arg_command = command_list[l]; > arg_command.resize(1,arg_command.height()+1,1,1,0); > gmic_strreplace(arg_command); > if (*arg_command) { > const int ind = gmic_hashcode(arg_command,false); > for (int l = 0; l<(int)(commands_names[ind])._width; ++l) > if (!std::strcmp(commands_names[ind][l],arg_command)) { > commands_names[ind].remove(l); > commands[ind].remove(l); > commands_has_arguments[ind].remove(l); > ++nb_removed; break; > } > } > } > if (verbosity>=0 || is_debug) { > unsigned int siz = 0; > for (unsigned int l = 0; l<256; ++l) siz+=commands[l].size(); > std::fprintf(cimg::output()," (%u found, %u command%s left).", > nb_removed,siz,siz>1?"s":""); > std::fflush(cimg::output()); > } > } > ++position; continue; > } > > } > > > > > else if (command1=='v') { > > > > if (!std::strcmp("-verbose",item)) { > if (*argument=='-' && !argument[1]) > print(images,0,"Decrement verbosity level (set to %d).", > verbosity); > else if (*argument=='+' && !argument[1]) { > if (verbosity>0) print(images,0,"Increment verbosity level (set to %d).", > verbosity); > } else if (verbosity>=0 && old_verbosity>=0) > print(images,0,"Set verbosity level to %d.", > verbosity); > if (is_verbose_argument) ++position; > continue; > } > > > if (!std::strcmp("-vanvliet",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int boundary = 1, order = 0; > char sep = 0, axis = 0; > float sigma = 0; > if ((std::sscanf(argument,"%f,%u,%c%c",&sigma,&order,&axis,&end)==3 || > (std::sscanf(argument,"%f%c,%u,%c%c",&sigma,&sep,&order,&axis,&end)==4 && > sep=='%') || > std::sscanf(argument,"%f,%u,%c,%u%c",&sigma,&order,&axis,&boundary,&end)==4 || > (std::sscanf(argument,"%f%c,%u,%c,%u%c", > &sigma,&sep,&order,&axis,&boundary,&end)==5 && sep=='%')) && > sigma>=0 && order<=3 && (axis=='x' || axis=='y' || axis=='z' || axis=='c') && > boundary<=1) { > print(images,0,"Apply Vanvliet filter on image%s, with standard " > "deviation %g%s, order %d, axis '%c' and %s boundary conditions.", > selection2string(selection,images_names,true).data(), > sigma,sep=='%'?"%":"", > order,axis, > boundary?"neumann":"dirichlet"); > if (sep=='%') sigma = -sigma; > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_vanvliet(sigma,order,axis,(bool)boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].vanvliet(sigma,order,axis,(bool)boundary); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"vanvliet","Command '-%s': Invalid argument '%s'.","vanvliet",argument_text); > is_released = false; ++position; continue; > } > > } > > > > > else if (command1=='w') { > > > if (!std::strcmp("-while",item)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > const CImg<char> &s = scope.back(); > if (s[0]!='*' || s[1]!='d') > error(images,0,0, > "Command '-while': Not associated to a '-do' command within the same scope."); > float _is_cond = 0; > bool is_filename = false; > if (std::sscanf(argument,"%f%c",&_is_cond,&end)!=1) { > is_filename = true; > CImg<char> arg_while(argument,std::strlen(argument)+1); > gmic_strreplace(arg_while); > _is_cond = (float)gmic_check_filename(arg_while); > } > const bool is_cond = (bool)_is_cond; > if (verbosity>0 || is_debug) print(images,0,"Reach '-while' command -> %s '%s' %s.", > is_filename?"file":"boolean", > argument_text, > is_filename?(is_cond?"exists": > "does not exist"): > (is_cond?"is true":"is false")); > if (is_cond) { position = dowhiles.back()(0); continue; } > else { > if (verbosity>0 || is_debug) print(images,0,"End 'do..while' block."); > dowhiles.remove(); > scope.remove(); > } > ++position; continue; > } > > > if (!std::strcmp("-warn",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<char> str(argument,std::strlen(argument)+1); > cimg::strunescape(str); > if (is_restriction) warn(images,&selection,"%s",str.data()); > else warn(images,0,"%s",str.data()); > ++position; continue; > } > > > > > unsigned int wind = 0; > if ((!std::strcmp("-window",command) || > std::sscanf(command,"-window%u%c",&wind,&end)==1 || > std::sscanf(command,"-w%u%c",&wind,&end)==1) && > wind<10 && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > int norm = -1, fullscreen = -1; > float dimw = -1, dimh = -1, posx = -1, posy = -1; > char sepw = 0, seph = 0, sepx = 0, sepy = 0; > *argx = *argy = *argz = *argc = *title = 0; > if ((std::sscanf(argument,"%255[0-9.eE%+-]%c", > argx,&end)==1 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d%c", > argx,argy,&norm,&end)==3 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d%c", > argx,argy,&norm,&fullscreen,&end)==4 || > std::sscanf(argument, > "%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d,%255[0-9.eE%+-]," > "%255[0-9.eE%+-]%c", > argx,argy,&norm,&fullscreen,argz,argc,&end)==6 || > std::sscanf(argument, > "%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d,%255[0-9.eE%+-]," > "%255[0-9.eE%+-],%255[^\n]", > argx,argy,&norm,&fullscreen,argz,argc,title)==7 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%d,%255[^\n]", > &(*argx=*argz=*argc=0),argy,&norm,&fullscreen,title)==5 || > std::sscanf(argument,"%255[0-9.eE%+-],%255[0-9.eE%+-],%d,%255[^\n]", > argx,argy,&(norm=fullscreen=-1),title)==4 || > (norm=fullscreen=-1,std::sscanf(argument, > "%255[0-9.eE%+-],%255[0-9.eE%+-],%255[^\n]", > argx,argy,title))==3) && > (std::sscanf(argx,"%f%c",&dimw,&end)==1 || > (std::sscanf(argx,"%f%c%c",&dimw,&sepw,&end)==2 && sepw=='%')) && > (!*argy || > std::sscanf(argy,"%f%c",&dimh,&end)==1 || > (std::sscanf(argy,"%f%c%c",&dimh,&seph,&end)==2 && seph=='%')) && > (!*argz || > std::sscanf(argz,"%f%c",&posx,&end)==1 || > (std::sscanf(argz,"%f%c%c",&posx,&sepx,&end)==2 && sepx=='%')) && > (!*argc || > std::sscanf(argc,"%f%c",&posy,&end)==1 || > (std::sscanf(argc,"%f%c%c",&posy,&sepy,&end)==2 && sepy=='%')) && > (dimw>=0 || dimw==-1) && > (dimh>=0 || dimh==-1) && > norm>=-1 && norm<=3) ++position; > else { > dimw = dimh = -1; > norm = fullscreen = -1; > posx = posy = -1; > sepw = seph = 0; > } > if (dimh==0) dimw = 0; > gmic_strreplace(title); > cimg::strunescape(title); > > > unsigned int optw = 0, opth = 0; > CImgList<T> subimages; > if (dimw && dimh) for (int l = 0; l<(int)((selection)._height); ++l) { > const CImg<T>& img = check_image(images,images[selection[l]]); > if (img) { > subimages.insert(img,~0U,true); > optw+=img.width() + (img.depth()>1?img.depth():0); > if (img.height()>(int)opth) opth = img.height() + (img.depth()>1?img.depth():0); > } > } > optw = optw?optw:sepw=='%'?CImgDisplay::screen_width():256; > opth = opth?opth:seph=='%'?CImgDisplay::screen_height():256; > dimw = dimw<0?-1:cimg::round(sepw=='%'?optw*dimw/100:dimw); > dimh = dimh<0?-1:cimg::round(seph=='%'?opth*dimh/100:dimh); > > > > > > > > const bool is_move = posx!=-1 || posy!=-1; > bool is_available_display = false; > try { > is_available_display = (bool)CImgDisplay::screen_width(); > } catch (CImgDisplayException&) { > print(images,0, > "Display image%s in instant window [%d] (skipped, no display available).", > selection2string(selection,images_names,true).data(), > wind); > } > if (is_available_display) { > > if (!dimw || !dimh) { > print(images,0,"Close instant window [%d].", > wind); > instant_window[wind].assign(); > } else { > if (instant_window[wind]) { > instant_window[wind].resize(dimw>0?(int)dimw:instant_window[wind].window_width(), > dimh>0?(int)dimh:instant_window[wind].window_height(), > false); > if (is_move) { > if (sepx=='%') posx*=(CImgDisplay::screen_width()- > instant_window[wind].window_width())/100.0f; > if (sepy=='%') posy*=(CImgDisplay::screen_height()- > instant_window[wind].window_height())/100.0f; > instant_window[wind].move((int)posx,(int)posy); > } > if (norm>=0) instant_window[wind]._normalization = norm; > if (*title && std::strcmp(instant_window[wind].title(),title)) > instant_window[wind].set_title("%s",title); > if (fullscreen>=0 && (bool)fullscreen!=instant_window[wind].is_fullscreen()) > instant_window[wind].toggle_fullscreen(false); > } else { > instant_window[wind].assign(dimw>0?(int)dimw:optw, > dimh>0?(int)dimh:opth, > title,norm<0?3:norm, > fullscreen<0?false:(bool)fullscreen, > is_move); > if (is_move) { > if (sepx=='%') posx*=(CImgDisplay::screen_width()- > instant_window[wind].window_width())/100.0f; > if (sepy=='%') posy*=(CImgDisplay::screen_height()- > instant_window[wind].window_height())/100.0f; > instant_window[wind].move((int)posx,(int)posy); > } > if (norm==2) { > if (subimages) > instant_window[wind]._max = > (float)subimages.max_min(instant_window[wind]._min); > else { instant_window[wind]._min = 0; instant_window[wind]._max = 255; } > } > } > if (is_move) print(images,0, > "Display image%s in %dx%d %sinstant window [%d], " > "with%snormalization, " > "%sfullscreen, at position (%s,%s) and title '%s'.", > selection2string(selection,images_names,true).data(), > instant_window[wind].width(), > instant_window[wind].height(), > instant_window[wind].is_fullscreen()?"fullscreen ":"", > wind, > instant_window[wind].normalization()==0?"out ": > instant_window[wind].normalization()==1?" ": > instant_window[wind].normalization()==2?" 1st-time ":" auto-", > instant_window[wind].is_fullscreen()?"":"no ", > argz,argc, > instant_window[wind].title()); > else print(images,0, > "Display image%s in %dx%d %sinstant window [%d], with%snormalization, " > "%sfullscreen and title '%s'.", > selection2string(selection,images_names,true).data(), > instant_window[wind].width(), > instant_window[wind].height(), > instant_window[wind].is_fullscreen()?"fullscreen ":"", > wind, > instant_window[wind].normalization()==0?"out ": > instant_window[wind].normalization()==1?" ": > instant_window[wind].normalization()==2?" 1st-time ":" auto-", > instant_window[wind].is_fullscreen()?"":"no ", > instant_window[wind].title()); > if (subimages) subimages.display(instant_window[wind]); > } > } > > > is_released = true; continue; > } > > > if (!std::strcmp("-warp",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > unsigned int interpolation = 1, is_relative = 0, boundary = 1; > CImg<unsigned int> ind; > float nb_frames = 1; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c", > indices,&sep,&end)==2 && sep==']')|| > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&is_relative,&end)==2 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u%c", > indices,&is_relative,&interpolation,&end)==3 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%u%c", > indices,&is_relative,&interpolation,&boundary,&end)==4 || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u,%u,%u,%f%c", > indices,&is_relative,&interpolation,&boundary,&nb_frames,&end)==5) && > (ind=selection2cimg(indices,images.size(),images_names,"-warp",true, > false,CImg<char>::empty())).height()==1 && > is_relative<=1 && interpolation<=2 && boundary<=2 && nb_frames>=0.5) { > const CImg<T> warping_field = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > nb_frames = cimg::round(nb_frames); > if (nb_frames==1) { > print(images,0,"Warp image%s with %s displacement field [%u], %s interpolation, " > "%s boundary conditions.", > selection2string(selection,images_names,true).data(), > is_relative?"relative":"absolute",*ind, > interpolation==2?"cubic":interpolation==1?"linear":"nearest-neighbor", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic"); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_warp(warping_field,(bool)is_relative, interpolation,boundary); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].warp(warping_field,(bool)is_relative, interpolation,boundary); images_names[posi].mark(); } } > ; > } > } else { > print(images,0,"Warp image%s with %s displacement field [%u], %s interpolation, " > "%s boundary conditions and %d frames.", > selection2string(selection,images_names,true).data(), > is_relative?"relative":"absolute",*ind, > interpolation==2?"cubic":interpolation==1?"linear":"nearest-neighbor", > boundary==0?"dirichlet":boundary==1?"neumann":"cyclic", > (int)nb_frames); > unsigned int off = 0; > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int _ind = selection[l] + off; > CImg<T>& img = check_image(images,images[_ind]); > CImg<char> name = images_names[_ind].get_mark(); > CImgList<T> frames((int)nb_frames); > for (int t = 0; t<(int)(frames)._width; ++t) > frames[t] = img.get_warp(warping_field*((t+1.0f)/nb_frames),(bool)is_relative, > interpolation,boundary); > if (is_get_version) { > images_names.insert((int)nb_frames,name.copymark()); > frames.move_to(images,~0U); > } else { > off+=(int)nb_frames - 1; > images_names.insert((int)nb_frames - 1,name.get_copymark(),_ind); > images.remove(_ind); frames.move_to(images,_ind); > } > } > } > } else gmic::error(images,0,"warp","Command '-%s': Invalid argument '%s'.","warp",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-watershed",command)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > CImg<unsigned int> ind; > unsigned int is_filled = 1; > char sep = 0; > if (((std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && > sep==']') || > std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]],%u%c", > indices,&is_filled,&end)==2) && > (ind=selection2cimg(indices,images.size(),images_names,"-watershed",true, > false,CImg<char>::empty())).height()==1 && > is_filled<=1) { > print(images,0,"Compute watershed transform of image%s with priority map [%u] and " > "%sfilling.", > selection2string(selection,images_names,true).data(),*ind,is_filled?"":"no "); > const CImg<T> priority = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); > for (int l = 0; l<(int)((selection)._height); ++l) { > { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,images[selection[l]]),posi); if (is_get_version) { CImg<T> tmp = images[selection[l]].get_watershed(priority,(bool)is_filled); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { images[selection[l]].watershed(priority,(bool)is_filled); images_names[posi].mark(); } }; > } > } else gmic::error(images,0,"watershed","Command '-%s': Invalid argument '%s'.","watershed",argument_text); > is_released = false; ++position; continue; > } > > > if (!std::strcmp("-wait",command) && !is_get_version) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!is_restriction) > CImg<unsigned int>::vector(0,1,2,3,4,5,6,7,8,9).move_to(selection); > float delay = 0; > if (std::sscanf(argument,"%f%c", > &delay,&end)==1) ++position; > else delay = 0; > delay = cimg::round(delay); ># 11460 "gmic.cpp" > if (!delay) { > print(images,0,"Wait for user events on instant window%s.", > selection2string(selection,images_names,true).data()); > CImgDisplay *const iw = instant_window; > switch (selection.height()) { > case 1 : CImgDisplay::wait(iw[selection[0]]); break; > case 2 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]]); break; > case 3 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]]); > break; > case 4 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]]); > break; > case 5 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]],iw[selection[4]]); > break; > case 6 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]],iw[selection[4]],iw[selection[5]]); > break; > case 7 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]],iw[selection[4]],iw[selection[5]], > iw[selection[6]]); > break; > case 8 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]],iw[selection[4]],iw[selection[5]], > iw[selection[6]],iw[selection[7]]); > break; > case 9 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]],iw[selection[4]],iw[selection[5]], > iw[selection[6]],iw[selection[7]],iw[selection[8]]); > break; > case 10 : CImgDisplay::wait(iw[selection[0]],iw[selection[1]],iw[selection[2]], > iw[selection[3]],iw[selection[4]],iw[selection[5]], > iw[selection[6]],iw[selection[7]],iw[selection[8]], > iw[selection[9]]); > break; > } > } else if (delay<0) { > print(images,0, > "Flush display events of instant window%s and wait for %g milliseconds.", > selection2string(selection,images_names,true).data(),-delay); > for (int l = 0; l<(int)((selection)._height); ++l) instant_window[selection[l]].flush(); > if (selection && instant_window[selection[0]]) > instant_window[selection[0]].wait((unsigned int)-delay); > else cimg::sleep((unsigned int)-delay); > } else { > print(images,0,"Wait for %g milliseconds according to instant window%s.", > delay, > selection2string(selection,images_names,true).data()); > if (selection && instant_window[selection[0]]) > instant_window[selection[0]].wait((unsigned int)delay); > else cimg::wait((unsigned int)delay); > } > > continue; > } > > > } > > > > > else if (command1=='x') { > > > > > if (!std::strcmp("-xor",command)) { { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; CImg<unsigned int> ind; double value = 0; char sep = 0; *indices = *formula = 0; if (std::sscanf(argument,"%lf%c",&value,&end)==1 || (std::sscanf(argument,"%lf%c%c",&value,&sep,&end)==2 && sep=='%')) { const char *const ssep = sep=='%'?"%":""; print(images,0,"Compute bitwise XOR of image%s by %g%s" ".",selection2string(selection,images_names,true).data(),value,ssep); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); double nvalue = value; if (sep=='%' && img) { double vmin = 0, vmax = (double)img.max_min(vmin); nvalue = vmin + (vmax-vmin)*value/100; } if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator^=((Tlong)nvalue); } else { images_names[selection[l]].mark(); img.operator^=((Tlong)nvalue); } } ++position; } else if (std::sscanf(argument,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sep,&end)==2 && sep==']' && (ind=selection2cimg(indices,images.size(),images_names,"-xor", true,false,CImg<char>::empty())). height()==1) { print(images,0,"Compute bitwise XOR of image%s by image [%d]" ".",selection2string(selection,images_names,true).data(),ind[0]); const CImg<T> img0 = check_image(images,_gmic_image_arg(*ind,selection)?images[*ind]: images[*ind].get_shared()); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator^=(img0); } else { images_names[selection[l]].mark(); img.operator^=(img0); } } ++position; } else if (std::sscanf(argument,"'%4095[^']%c%c",formula,&sep,&end)==2 && sep=='\'') { gmic_strreplace(formula); print(images,0,"Compute bitwise XOR of image%s by expression %s" ".",selection2string(selection,images_names,true).data(),argument_text); for (int l = 0; l<(int)((selection)._height); ++l) { CImg<T>& img = check_image(images,images[selection[l]]); if (is_get_version) { int back = 0; images_names.insert(images_names[selection[l]].get_copymark().mark()); images.insert(img); back = images.size() - 1; images[back].operator^=((const char*)formula); } else { images_names[selection[l]].mark(); img.operator^=((const char*)formula); } } ++position; } else { print(images,0,"Compute sequential bitwise XOR of image%s" ".",selection2string(selection,images_names,true).data()); if (images && selection) { if (is_get_version) { CImg<T> img0 = CImg<T>(check_image(images,images[selection[0]]),false); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator^=(check_image(images,images[selection[l]])); images_names.insert(images_names[selection[0]].get_copymark().mark()); img0.move_to(images); } else if (selection.height()>=2) { const unsigned int ind0 = selection[0]; CImg<T>& img0 = check_image(images,images[ind0]); for (unsigned int l = 1; l<(unsigned int)selection.height(); ++l) img0.operator^=(check_image(images,images[selection[l]])); images_names[ind0].mark(); remove_images(images,images_names,selection,1,selection.height()-1); }}} is_released = false; continue; } ># 11536 "gmic.cpp" > ; > > > } > > > > > > > if (!std::strcmp("-if",item) || (!std::strcmp("-elif",item) && check_elif)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > check_elif = false; > float _is_cond = 0; > bool is_filename = false; > if (std::sscanf(argument,"%f%c",&_is_cond,&end)!=1) { > is_filename = true; > CImg<char> arg_if(argument,std::strlen(argument)+1); > gmic_strreplace(arg_if); > _is_cond = (float)gmic_check_filename(arg_if); > } > const bool is_cond = (bool)_is_cond; > if (item[1]=='i') { > CImg<char>::string("*if").move_to(scope); > if (verbosity>0 || is_debug) print(images,0,"Start '-if..-endif' block -> %s '%s' %s.", > is_filename?"file":"boolean", > argument_text, > is_filename?(is_cond?"exists":"does not exist"): > (is_cond?"is true":"is false")); > } else if (verbosity>0 || is_debug) print(images,0,"Reach '-elif' block -> %s '%s' %s.", > is_filename?"file":"boolean", > argument_text, > is_filename?(is_cond?"exists": > "does not exist"): > (is_cond?"is true":"is false")); > if (!is_cond) { > for (int nb_ifs = 1; nb_ifs && position<commands_line.size(); ++position) { > const char *const it = commands_line[position].data(); > if (!std::strcmp("-if",it)) ++nb_ifs; > else if (!std::strcmp("-endif",it)) { --nb_ifs; if (!nb_ifs) --position; } > else if (nb_ifs==1) { > if (!std::strcmp("-else",it)) --nb_ifs; > else if (!std::strcmp("-elif",it)) { --nb_ifs; check_elif = true; --position;} > } > } > continue; > } > ++position; continue; > } > > > bool is_continue = false; > if (!std::strcmp("-break",item) || > (!std::strcmp("-continue",item) && (is_continue=true)==true)) { > const char > *const com = is_continue?"continue":"break", > *const Com = is_continue?"Continue":"Break"; > unsigned int scope_repeat = 0, scope_do = 0, scope_local = 0; > for (unsigned int l = scope.size() - 1; l; --l) { > const char *const s = scope[l].data(); > if (s[0]=='*' && s[1]=='r') { scope_repeat = l; break; } > else if (s[0]=='*' && s[1]=='d') { scope_do = l; break; } > else if (s[0]=='*' && s[1]=='l') { scope_local = l; break; } > else if (s[0]!='*' || s[1]!='i') break; > } > const char *stb = 0, *ste = 0; > unsigned int scope_ind = 0; > int level = 0; > if (scope_repeat) { > print(images,0,"%s %scurrent 'repeat..done' block.", > Com,is_continue?"to next iteration of ":""); > for (level = 1; level && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-repeat",it)) ++level; > else if (!std::strcmp("-done",it)) --level; > } > scope_ind = scope_repeat; > stb = "repeat"; ste = "done"; > } else if (scope_do) { > print(images,0,"%s %scurrent 'do..while' block.", > Com,is_continue?"to next iteration of ":""); > for (level = 1; level && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-do",it)) ++level; > else if (!std::strcmp("-while",it)) --level; > } > scope_ind = scope_do; > stb = "do"; ste = "while"; > } else if (scope_local) { > print(images,0,"%s %scurrent local environment.", > Com,is_continue?"to end of ":""); > for (level = 1; level && position<commands_line.size(); ++position) { > const char *it = commands_line[position].data(); > if (!std::strcmp("-local",it) || !std::strcmp("-l",it) || > !std::strcmp("--local",it) || !std::strcmp("--l",it) || > !std::strncmp("-local[",it,7) || !std::strncmp("-l[",it,3) || > !std::strncmp("--local[",it,8) || !std::strncmp("--l[",it,4)) ++level; > else if (!std::strcmp("-endlocal",it) || !std::strcmp("-endl",it)) --level; > } > scope_ind = scope_local; > stb = "local"; ste = "endlocal"; > } else { > print(images,0,"%s",Com); > error(images,0,0, > "Command '-%s': There are no loops or local environment to %s.",com,com); > continue; > } > if (level && position>=commands_line.size()) > error(images,0,0, > "Command '-%s': Missing associated '-%s' command.",stb,ste); > if (is_continue || scope_local) { > if (scope_ind<scope.size()-1) scope.remove(scope_ind+1,scope.size()-1); > --position; > } else { > scope.remove(scope_ind,scope.size()-1); > if (scope_do) { dowhiles.remove(); ++position; } else repeatdones.remove(); > } > continue; > } > > > if (!std::strcmp("-quit",item)) { > print(images,0,"Quit G'MIC instance.\n"); > dowhiles.assign(); > repeatdones.assign(); > position = commands_line.size(); > is_released = is_quit = true; > break; > } > > > > > const bool inv_fft = !std::strcmp("-ifft",command); > if (!std::strcmp("-fft",command) || inv_fft) { > print(images,0,"Compute %sfourier transform of image%s with complex pair%s", > inv_fft?"inverse ":"", > selection2string(selection,images_names,true).data(), > selection.height()>2?"s":""); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int > ind0 = selection[l], > ind1 = l+1<selection.height()?selection[l+1]:~0U; > CImg<T> &img0 = check_image(images,images[ind0]), > &img1 = ind1!=~0U?check_image(images,images[ind1]):CImg<T>::empty(); > CImg<char> name = images_names[ind0].get_mark(); > if (ind1!=~0U) { > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," ([%u],[%u])%c",ind0,ind1, > l>=selection.height()-2?'.':','); > std::fflush(cimg::output()); > } > if (is_get_version) { > CImgList<T> fft(img0,img1); > fft.FFT(inv_fft); > fft.move_to(images,~0U); > images_names.insert(2,name.copymark()); > } else { > CImgList<T> fft(2); > fft[0].swap(img0); > fft[1].swap(img1); > fft.FFT(inv_fft); > fft[0].swap(img0); > fft[1].swap(img1); > name.get_copymark().move_to(images_names[ind1]); > name.move_to(images_names[ind0]); > } > ++l; > } else { > if (verbosity>=0 || is_debug) { > std::fprintf(cimg::output()," ([%u],0)",ind0); > std::fflush(cimg::output()); > } > if (is_get_version) { > CImgList<T> fft(img0); > CImg<T>(fft[0].width(),fft[0].height(),fft[0].depth(),fft[0].spectrum(),0). > move_to(fft); > fft.FFT(inv_fft); > fft.move_to(images,~0U); > images_names.insert(2,name.copymark()); > } else { > CImgList<T> fft(1); > fft[0].swap(img0); > CImg<T>(fft[0].width(),fft[0].height(),fft[0].depth(),fft[0].spectrum(),0). > move_to(fft); > fft.FFT(inv_fft); > fft[0].swap(img0); > fft[1].move_to(images,ind0+1); > name.get_copymark().move_to(images_names,ind0+1); > name.move_to(images_names[ind0]); > } > } > } > is_released = false; continue; > } > > > const bool divide3d = !std::strcmp("-div3d",command); > if (!std::strcmp("-mul3d",command) || divide3d) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > float sx = 0, sy = 1, sz = 1; > if ((std::sscanf(argument,"%f%c", > &sx,&end)==1 && ((sz=sy=sx),1)) || > std::sscanf(argument,"%f,%f%c", > &sx,&sy,&end)==2 || > std::sscanf(argument,"%f,%f,%f%c", > &sx,&sy,&sz,&end)==3) { > if (divide3d) > print(images,0,"Scale 3d object%s with factors (1/%g,1/%g,1/%g).", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > else > print(images,0,"Scale 3d object%s with factors (%g,%g,%g).", > selection2string(selection,images_names,true).data(), > sx,sy,sz); > for (int l = 0; l<(int)((selection)._height); ++l) { > const unsigned int ind = selection[l]; > CImg<T>& img = check_image(images,images[ind]); > try { > if (divide3d) { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_scale_CImg3d(1/sx,1/sy,1/sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.scale_CImg3d(1/sx,1/sy,1/sz); images_names[posi].mark(); } }; } > else { { unsigned int posi = 0; const bool is_inlist = images.contains(check_image(images,img),posi); if (is_get_version) { CImg<T> tmp = img.get_scale_CImg3d(sx,sy,sz); tmp.move_to(images); if (is_inlist) images_names[posi].get_copymark().mark().move_to(images_names); else CImg<char>::string("[unnamed]").move_to(images_names); } else { img.scale_CImg3d(sx,sy,sz); images_names[posi].mark(); } }; } > } catch (CImgException &e) { > CImg<char> message(1024); > if (!img.is_CImg3d(true,message)) > error(images,0,0, > "Command '-%s3d': Invalid 3d object [%d], in selected image%s (%s).", > divide3d?"div":"mul",ind,selection2string(selection,images_names,true).data(),message.data()); > else throw e; > } > } > } else { if (divide3d) gmic::error(images,0,"div3d","Command '-%s': Invalid argument '%s'.","div3d",argument_text); else gmic::error(images,0,"mul3d","Command '-%s': Invalid argument '%s'.","mul3d",argument_text); } > is_released = false; ++position; continue; > } > > > > > if (std::strcmp("-input",command)) { > const char *custom_command = 0, cc = *(command+1); > bool custom_command_found = false, has_arguments = false; > CImg<char> substituted_command; > if ((cc>='a' && cc<='z') || (cc>='A' && cc<='Z') || cc=='_') { > const int ind = gmic_hashcode(command+1,false); > for (int l = 0; l<(int)(commands_names[ind])._width; ++l) { > custom_command = commands_names[ind][l].data(); > const char *const command_code = commands[ind][l].data(); > if (!std::strcmp(command+1,custom_command)) { > custom_command_found = true; > if (is_debug) { > CImg<char> command_code_text(264); > const unsigned int ls = std::strlen(command_code); > if (ls>=264) { > std::memcpy(command_code_text.data(),command_code,128); > std::memcpy(command_code_text.data()+128," ... ",5); > std::memcpy(command_code_text.data()+133,command_code+ls-130,131); > } else std::strcpy(command_code_text.data(),command_code); > for (char *ptrs = command_code_text, *ptrd = ptrs; *ptrs || (bool)(*ptrd=0); > ++ptrs) > if (*ptrs==1) while (*ptrs!=' ') ++ptrs; else *(ptrd++) = *ptrs; > debug(images,"Found custom command '%s: %s' (%s).", > custom_command,command_code_text.data(), > commands_has_arguments[ind](l,0)?"takes arguments":"takes no arguments"); > } > CImgList<char> arguments(32); > > CImg<char>::string(custom_command).move_to(arguments[0]); > unsigned int nb_arguments = 0; > > if (commands_has_arguments[ind](l,0)) { > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > > > for (const char *ss = argument, *_ss = ss; _ss; ss =_ss+1) > if ((_ss=std::strchr(ss,','))!=0) { > if (ss==_ss) ++nb_arguments; > else { > if (++nb_arguments>=arguments.size()) > arguments.insert(2+2*nb_arguments-arguments.size()); > CImg<char> arg_item(ss,_ss-ss+1); > arg_item.back() = 0; > arg_item.move_to(arguments[nb_arguments]); > } > } else { > if (*ss) { > if (++nb_arguments>=arguments.size()) > arguments.insert(1+nb_arguments-arguments.size()); > if (*ss!=',') CImg<char>::string(ss).move_to(arguments[nb_arguments]); > } > break; > } > > if (is_debug) { > debug(images,"Found %d given argument%s for command '%s'%s", > nb_arguments,nb_arguments!=1?"s":"", > custom_command,nb_arguments>0?":":"."); > for (unsigned int i = 1; i<=nb_arguments; ++i) > if (arguments[i]) debug(images," $%d = '%s'",i,arguments[i].data()); > else debug(images," $%d = (undefined)",i); > } > } > > > CImgList<char> substituted_items; > CImg<char> inbraces; > for (const char *nsource = command_code; *nsource;) > if (*nsource!='$') { > > const char *const nsource0 = nsource; > nsource = std::strchr(nsource0,'$'); > if (!nsource) nsource = &commands[ind][l].back(); > CImg<char>(nsource0,nsource-nsource0).move_to(substituted_items); > } else { > CImg<char> substr(324); > inbraces.assign(1,1,1,1,0); > int ind = 0, ind1 = 0, l_inbraces = 0; > bool is_braces = false; > char sep = 0; > > if (nsource[1]=='{') { > const char *const ptr_beg = nsource + 2, *ptr_end = ptr_beg; > unsigned int p = 0; > for (p = 1; p>0 && *ptr_end; ++ptr_end) { > if (*ptr_end=='{') ++p; > if (*ptr_end=='}') --p; > } > if (p) { CImg<char>(nsource++,1).move_to(substituted_items); continue; } > l_inbraces = ptr_end - ptr_beg - 1; > if (l_inbraces>0) inbraces.assign(ptr_beg,l_inbraces + 1).back() = 0; > is_braces = true; > } > > > if (nsource[1]=='?') { > nsource+=2; > snprintf(substr,substr.width(),"%s",selection2string(selection,images_names,true).data()); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > > > } else if (nsource[1]=='#') { > nsource+=2; > snprintf(substr,substr.width(),"%u",nb_arguments); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > has_arguments = true; > > > } else if (nsource[1]=='*') { > nsource+=2; > CImg<char>(argument,std::strlen(argument)).move_to(substituted_items); > has_arguments = true; > > > } else if (nsource[1]=='\"' && nsource[2]=='*' && nsource[3]=='\"') { > nsource+=4; > for (unsigned int i = 1; i<=nb_arguments; ++i) { > CImg<char>(1,1,1,1,'\"').move_to(substituted_items); > CImg<char>(arguments[i].data(),arguments[i].width()-1). > move_to(substituted_items); > if (i==nb_arguments) CImg<char>(1,1,1,1,'\"').move_to(substituted_items); > else CImg<char>(2,1,1,1,'\"',',').move_to(substituted_items); > } > has_arguments = true; > > > } else if (nsource[1]=='=' && > std::sscanf(nsource+2,"%255[a-zA-Z0-9_]",title)==1 && > (*title<'0' || *title>'9')) { > nsource+=2+std::strlen(title); > for (unsigned int i = 0; i<=nb_arguments; ++i) { > snprintf(substr,substr.width()," %s%u=\"",title,i); > CImg<char>(substr.data(),std::strlen(substr)).move_to(substituted_items); > CImg<char>(arguments[i].data(),arguments[i].width()-1). > move_to(substituted_items); > CImg<char>(2,1,1,1,'\"',' ').move_to(substituted_items); > } > has_arguments = true; > > > } else if ((std::sscanf(nsource,"$%d",&ind)==1 || > (std::sscanf(nsource,"${%d%c",&ind,&sep)==2 && sep=='}'))) { > const int nind = ind + (ind<0?(int)nb_arguments+1:0); > if ((nind<=0 && ind) || nind>=arguments.width() || !arguments[nind]) { > error(images,0,custom_command, > "Command '-%s': Undefined argument '$%d', in expression '$%s%d%s' " > "(for %u argument%s specified).", > custom_command,ind,sep=='}'?"{":"",ind,sep=='}'?"}":"", > nb_arguments,nb_arguments!=1?"s":""); > } > nsource+=snprintf(substr,substr.width(),"$%d",ind) + (sep=='}'?2:0); > if (arguments[nind].width()>1) > CImg<char>(arguments[nind].data(),arguments[nind].width()-1). > move_to(substituted_items); > if (nind!=0) has_arguments = true; > > > > } else if (std::sscanf(nsource,"${%d=$%d%c",&ind,&ind1,&sep)==3 && sep=='}' && > ind>0) { > const int nind1 = ind1 + (ind1<0?(int)nb_arguments+1:0); > if (nind1<=0 || nind1>=arguments.width() || !arguments[nind1]) > error(images,0,custom_command, > "Command '-%s': Undefined argument '$%d', in expression '${%d=$%d}' " > "(for %u argument%s specified).", > custom_command,ind1,ind,ind1, > nb_arguments,nb_arguments!=1?"s":""); > nsource+=snprintf(substr,substr.width(),"${%d=$%d}",ind,ind1); > if (ind>=arguments.width()) arguments.insert(2+2*ind-arguments.size()); > if (!arguments[ind]) { > arguments[ind] = arguments[nind1]; > if (ind>(int)nb_arguments) nb_arguments = ind; > } > if (arguments[ind].width()>1) > CImg<char>(arguments[ind].data(),arguments[ind].width()-1). > move_to(substituted_items); > has_arguments = true; > > > > } else if (std::sscanf(nsource,"${%d=$#%c",&ind,&sep)==2 && sep=='}' && > ind>0) { > if (ind>=arguments.width()) arguments.insert(2+2*ind-arguments.size()); > if (!arguments[ind]) { > snprintf(substr,substr.width(),"%u",nb_arguments); > CImg<char>::string(substr).move_to(arguments[ind]); > if (ind>(int)nb_arguments) nb_arguments = ind; > } > nsource+=snprintf(substr,substr.width(),"${%d=$#}",ind); > if (arguments[ind].width()>1) > CImg<char>(arguments[ind].data(),arguments[ind].width()-1). > move_to(substituted_items); > has_arguments = true; > > > > } else if (std::sscanf(inbraces,"%d%c",&ind,&sep)==2 && sep=='=' && > ind>0) { > nsource+=l_inbraces + 3; > if (ind>=arguments.width()) arguments.insert(2+2*ind-arguments.size()); > if (!arguments[ind]) { > CImg<char>::string(inbraces.data() + > snprintf(substr,substr.width(),"%d=",ind)). > move_to(arguments[ind]); > if (ind>(int)nb_arguments) nb_arguments = ind; > } > if (arguments[ind].width()>1) > CImg<char>(arguments[ind].data(),arguments[ind].width()-1). > move_to(substituted_items); > has_arguments = true; > > > } else { > > > > if (is_braces) { > if ((*inbraces>='a' && *inbraces<='z') || > (*inbraces>='A' && *inbraces<='Z') || > *inbraces=='_') { > CImg<char>(nsource++,1).move_to(substituted_items); > } else if (*inbraces) { > CImg<unsigned int> inds; > const int _verbosity = verbosity; > const bool _is_debug = is_debug; > bool is_valid_subset = true; > verbosity = -16384; is_debug = false; > try { > inds = selection2cimg(inbraces,nb_arguments+1, > CImgList<char>::empty(),"",false, > false,CImg<char>::empty()); > } catch (...) { inds.assign(); is_valid_subset = false; } > verbosity = _verbosity; is_debug = _is_debug; > if (is_valid_subset) { > nsource+=l_inbraces + 3; > if (inds) { > for (int j = 0; j<(int)((inds)._height); ++j) { > const unsigned int ind = inds[j]; > if (ind) has_arguments = true; > if (!arguments[ind]) > error(images,0,custom_command, > "Command '-%s': Undefined argument '$%d', " > "in expression '${%s}'.", > custom_command,ind,inbraces.data()); > substituted_items.insert(arguments[ind]); > substituted_items.back().back() = ','; > } > if (substituted_items.back().width()>1) > --(substituted_items.back()._width); > else substituted_items.remove(); > has_arguments = true; > } > } else CImg<char>(nsource++,1).move_to(substituted_items); > } else nsource+=3; > } else CImg<char>(nsource++,1).move_to(substituted_items); > } > } > CImg<char>::vector(0).move_to(substituted_items); > (substituted_items>'x').move_to(substituted_command); > > > bool is_dquoted = false; > for (char *s = substituted_command.data(); *s; ++s) { > const char c = *s; > if (c=='\"') is_dquoted = !is_dquoted; > if (!is_dquoted) *s = c<' '?(c==_dollar?'$':c==_lbrace?'{':c==_rbrace?'}': > c==_comma?',':c==_dquote?'\"':c==_arobace?'@':c):c; > } > > if (is_debug) { > CImg<char> command_code_text(264); > const unsigned int l = std::strlen(substituted_command.data()); > if (l>=264) { > std::memcpy(command_code_text.data(),substituted_command.data(),128); > std::memcpy(command_code_text.data()+128," ... ",5); > std::memcpy(command_code_text.data()+133,substituted_command.data()+l-130,131); > } else std::strcpy(command_code_text.data(),substituted_command.data()); > for (char *ptrs = command_code_text, *ptrd = ptrs; *ptrs || (bool)(*ptrd=0); > ++ptrs) > if (*ptrs==1) while (*ptrs!=' ') ++ptrs; else *(ptrd++) = *ptrs; > debug(images,"Expand command line for command '%s' to: '%s'.", > custom_command,command_code_text.data()); > } > break; > } > } > } > > if (custom_command_found) { > const CImgList<char> > ncommands_line = commands_line_to_CImgList(substituted_command.data()); > unsigned int nvariables_sizes[256]; > for (unsigned int l = 0; l<256; ++l) nvariables_sizes[l] = variables[l]->size(); > CImgList<char> nimages_names(selection.height()); > CImgList<T> nimages(selection.height()); > unsigned int nposition = 0; > CImg<char>::string(custom_command).move_to(scope); > if (is_get_version) { > for (int l = 0; l<(int)((selection)._height); ++l) { > nimages[l] = images[selection[l]]; > nimages_names[l] = images_names[selection[l]]; > } > _parse(ncommands_line,nposition,nimages,nimages_names,nvariables_sizes); > nimages.move_to(images,~0U); > for (int l = 0; l<(int)(nimages_names)._width; ++l) nimages_names[l].copymark(); > nimages_names.move_to(images_names,~0U); > } else { > for (int l = 0; l<(int)((selection)._height); ++l) { > if (images[selection[l]].is_shared()) > nimages[l] = CImg<T>(images[selection[l]],true); > else nimages[l].swap(images[selection[l]]); > nimages_names[l].swap(images_names[selection[l]]); > } > _parse(ncommands_line,nposition,nimages,nimages_names,nvariables_sizes); > const unsigned int nb = cimg::min((unsigned int)selection.height(),nimages.size()); > if (nb>0) { > for (unsigned int i = 0; i<nb; ++i) { > if (images[selection[i]].is_shared()) { > images[selection[i]] = nimages[i]; > nimages[i].assign(); > } else images[selection[i]].swap(nimages[i]); > images_names[selection[i]].swap(nimages_names[i]); > } > nimages.remove(0,nb-1); > nimages_names.remove(0,nb-1); > } > if (nb<(unsigned int)selection.height()) > remove_images(images,images_names,selection,nb,selection.height()-1); > else if (nimages) { > const unsigned int ind0 = selection?selection.back()+1:images.size(); > nimages_names.move_to(images_names,ind0); > nimages.move_to(images,ind0); > } > } > for (unsigned int l = 0; l<255; ++l) if (variables[l]->size()>nvariables_sizes[l]) { > variables_names[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > variables[l]->remove(nvariables_sizes[l],variables[l]->size()-1); > } > scope.remove(); > is_return = false; > if (has_arguments) ++position; > continue; > } > } > } > > > char sep = 0; > if (std::strchr(item,'=') && std::sscanf(item,"%255[a-zA-Z0-9_]%c",title,&sep)==2 && > sep=='=' && (*title<'0' || *title>'9')) { > CImg<char> > name(title,std::strlen(title)+1), > value = CImg<char>::string(item+name.width()); > int ind = 0; bool is_name_found = false; > const bool is_global = *name=='_'; > const unsigned int sind = gmic_hashcode(name,true); > const int lind = is_global?0:variables_sizes[sind]; > if (is_global) cimg::mutex(29); > CImgList<char> > &__variables = *variables[sind], > &__variables_names = *variables_names[sind]; > for (int l = __variables.size()-1; l>=lind; --l) > if (!std::strcmp(__variables_names[l],name)) { > is_name_found = true; ind = l; break; > } > print(images,0,"Set %s variable %s='%s'.", > *name=='_'?"global":"local", > name.data(),value.data()); > if (is_name_found) value.move_to(__variables[ind]); > else { name.move_to(__variables_names); value.move_to(__variables); } > if (is_global) cimg::mutex(29,0); > continue; > } > > > if (!std::strcmp("-input",command) && !is_get_version) ++position; > else { std::strcpy(command,"-input"); argument = item; *restriction = 0; } > { const char *const argument0 = argument; substitute_item(argument,images,images_names,variables_sizes).move_to(_argument); argument_text = gmic_ellipsize_arg(argument=argument_text=_argument,_argument_text); if (is_debug) { if (std::strcmp(argument,argument0)) debug(images,"Command '%s': arguments = '%s' -> '%s'.", command,argument0,argument); else debug(images,"Command '%s': arguments = '%s'.", command,argument0); }}; > if (!is_restriction || !selection) selection.assign(1,1,1,1,images.size()); > CImg<char> indicesy(256), indicesz(256), indicesc(256); > float dx = 0, dy = 1, dz = 1, dc = 1, nb = 1; > char sepx = 0, sepy = 0, sepz = 0, sepc = 0; > CImg<unsigned int> indx, indy, indz, indc; > CImgList<char> input_images_names; > CImgList<T> input_images; > *indices = *indicesy = *indicesz = *indicesc = *argx = *argy = *argz = *argc = 0; > > CImg<char> arg_input(argument,std::strlen(argument)+1); > gmic_strreplace(arg_input); > > if (*arg_input=='0' && !arg_input[1]) { > > > print(images,0,"Input empty image at position%s", > selection2string(selection,images_names,true).data()); > input_images.assign(1); > CImg<char>::string("[empty]").move_to(input_images_names); > > > } else if ((std::sscanf(arg_input,"[%255[a-zA-Z_0-9%.eE%^,:+-]%c%c",indices,&sep,&end)==2 && > sep==']') || > std::sscanf(arg_input,"[%255[a-zA-Z_0-9%.eE%^,:+-]]x%f%c",indices,&nb,&end)==2) { > > > nb = cimg::round(nb); > const CImg<unsigned int> inds = selection2cimg(indices,images.size(),images_names, > "-input",true,false,CImg<char>::empty()); > CImg<char> s_tmp(256); > std::strncpy(s_tmp,selection2string(inds,images_names,true).data(),s_tmp.width()-1); > s_tmp[s_tmp.width()-1] = 0; > if (nb<=0) gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > if (nb!=1) > print(images,0,"Input %u copies of image%s at position%s", > (unsigned int)nb, > s_tmp.data(), > selection2string(selection,images_names,true).data()); > else > print(images,0,"Input copy of image%s at position%s", > s_tmp.data(), > selection2string(selection,images_names,true).data()); > for (unsigned int i = 0; i<(unsigned int)nb; ++i) for (unsigned long l = 0, _maxl = (inds).size(); l<_maxl; ++l) { > input_images.insert(check_image(images,images[inds[l]])); > input_images_names.insert(images_names[inds[l]].get_copymark()); > } > } else if ((sep=0,true) && > (std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-]%c", > argx,&end)==1 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,&end)==2 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,&end)==3 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]%c", > argx,argy,argz,argc,&end)==4 || > std::sscanf(arg_input,"%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-]," > "%255[][a-zA-Z0-9_.eE%+-],%255[][a-zA-Z0-9_.eE%+-],%c", > argx,argy,argz,argc,&sep)==5) && > ((std::sscanf(argx,"[%255[a-zA-Z0-9_.%+-]%c%c",indices,&sepx,&end)==2 && > sepx==']' && > (indx=selection2cimg(indices,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argx,"%f%c",&dx,&end)==1 && dx>=1) || > (std::sscanf(argx,"%f%c%c",&dx,&sepx,&end)==2 && dx>0 && sepx=='%')) && > (!*argy || > (std::sscanf(argy,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesy.data(),&sepy,&end)==2 && > sepy==']' && > (indy=selection2cimg(indicesy,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argy,"%f%c",&dy,&end)==1 && dy>=1) || > (std::sscanf(argy,"%f%c%c",&dy,&sepy,&end)==2 && dy>0 && sepy=='%')) && > (!*argz || > (std::sscanf(argz,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesz.data(),&sepz,&end)==2 && > sepz==']' && > (indz=selection2cimg(indicesz,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argz,"%f%c",&dz,&end)==1 && dz>=1) || > (std::sscanf(argz,"%f%c%c",&dz,&sepz,&end)==2 && dz>0 && sepz=='%')) && > (!*argc || > (std::sscanf(argc,"[%255[a-zA-Z0-9_.%+-]%c%c",indicesc.data(),&sepc,&end)==2 && > sepc==']' && > (indc=selection2cimg(indicesc,images.size(),images_names,"-input",true, > false,CImg<char>::empty())).height()==1) || > (std::sscanf(argc,"%f%c",&dc,&end)==1 && dc>=1) || > (std::sscanf(argc,"%f%c%c",&dc,&sepc,&end)==2 && dc>0 && sepc=='%'))) { > > > if (indx) { dx = (float)check_image(images,images[*indx]).width(); sepx = 0; } > if (indy) { dy = (float)check_image(images,images[*indy]).height(); sepy = 0; } > if (indz) { dz = (float)check_image(images,images[*indz]).depth(); sepz = 0; } > if (indc) { dc = (float)check_image(images,images[*indc]).spectrum(); sepc = 0; } > int idx = 0, idy = 0, idz = 0, idc = 0; > const CImg<T>& img = images.size()?check_image(images,images.back()):CImg<T>::empty(); > if (sepx=='%') { idx = (int)cimg::round(dx*img.width()/100); if (!idx) ++idx; } > else idx = (int)cimg::round(dx); > if (sepy=='%') { idy = (int)cimg::round(dy*img.height()/100); if (!idy) ++idy; } > else idy = (int)cimg::round(dy); > if (sepz=='%') { idz = (int)cimg::round(dz*img.depth()/100); if (!idz) ++idz; } > else idz = (int)cimg::round(dz); > if (sepc=='%') { idc = (int)cimg::round(dc*img.spectrum()/100); if (!idc) ++idc; } > else idc = (int)cimg::round(dc); > if (idx<=0 || idy<=0 || idz<=0 || idc<=0) gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > CImg<char> s_values; > if (sep) { > const char *_s_values = arg_input.data() + std::strlen(argx) + std::strlen(argy) + > std::strlen(argz) + std::strlen(argc) + 4; > s_values.assign(_s_values,std::strlen(_s_values)+1); > cimg::strpare(s_values,'\'',true,false); > gmic_strreplace(s_values); > CImg<char> s_values_text(72); > *s_values_text = 0; > const unsigned int l = std::strlen(s_values); > if (l>=72) { > std::memcpy(s_values_text.data(),s_values.data(),32); > std::memcpy(s_values_text.data()+32," ... ",5); > std::memcpy(s_values_text.data()+37,s_values.data()+l-34,35); > } else std::strcpy(s_values_text,s_values); > print(images,0,"Input image at position%s, with values '%s'", > selection2string(selection,images_names,true).data(),s_values_text.data()); > } else > print(images,0,"Input black image at position%s", > selection2string(selection,images_names,true).data()); > CImg<T> new_image(idx,idy,idz,idc,0); > if (s_values) { > new_image.fill(s_values.data(),true); > snprintf(title,_title.size(),"[image of '%s']",s_values.data()); > { if (_title.size()>=5 && title[_title.size()-2]) title[_title.size()-4] = title[_title.size()-3] = title[_title.size()-2] = '.'; }; > CImg<char>::string(title).move_to(input_images_names); > } else CImg<char>::string("[unnamed]").move_to(input_images_names); > new_image.move_to(input_images); > > } else if (*arg_input=='(' && arg_input[std::strlen(arg_input)-1]==')') { > > > unsigned int cx = 0, cy = 0, cz = 0, cc = 0, maxcx = 0, maxcy = 0, maxcz = 0; > const char *nargument = 0; > for (nargument = arg_input.data() + 1; *nargument; ) { > CImg<char> s_value(256); > *s_value = 0; > char separator = 0; > double value = 0; > if (std::sscanf(nargument,"%255[0-9.eE+-]%c",s_value.data(),&separator)==2 && > std::sscanf(s_value,"%lf%c",&value,&end)==1) { > if (cx>maxcx) maxcx = cx; > if (cy>maxcy) maxcy = cy; > if (cz>maxcz) maxcz = cz; > switch (separator) { > case '^' : cx = cy = cz = 0; ++cc; break; > case '/' : cx = cy = 0; ++cz; break; > case ';' : cx = 0; ++cy; break; > case ',' : ++cx; break; > case ')' : break; > default : gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > } > nargument+=std::strlen(s_value) + 1; > } else break; > } > if (*nargument) gmic::error(images,0,"input","Command '-%s': Invalid argument '%s'.","input",argument_text); > CImg<T> img(maxcx+1,maxcy+1,maxcz+1,cc+1,0); > cx = cy = cz = cc = 0; > for (nargument = arg_input.data() + 1; *nargument; ) { > CImg<char> s_value(256); > *s_value = 0; > char separator = 0; > double value = 0; > if (std::sscanf(nargument,"%255[0-9.eE+-]%c",s_value.data(),&separator)==2 && > std::sscanf(s_value,"%lf%c",&value,&end)==1) { > img(cx,cy,cz,cc) = (T)value; > switch (separator) { > case '^' : cx = cy = cz = 0; ++cc; break; > case '/' : cx = cy = 0; ++cz; break; > case ';' : cx = 0; ++cy; break; > default : ++cx; > } > nargument+=std::strlen(s_value) + (separator?1:0); > } else break; > } > print(images,0,"Input image at position%s, with values '%s'", > selection2string(selection,images_names,true).data(), > argument_text); > img.move_to(input_images); > arg_input.move_to(input_images_names); > > } else { > > > char cext[8]; > CImg<char> _filename(4096), filename_tmp(512), options(256); > *cext = *_filename = *filename_tmp = *options = 0; > bool is_network_file = false; > if (std::sscanf(argument,"%8[a-zA-Z]:%4095[^,],%255s", > cext,_filename.data(),options.data())<2 || > !cext[1] || > !cimg::strcasecmp(cext,"http") || !cimg::strcasecmp(cext,"https")) { > *cext = *_filename = *options = 0; > if (std::sscanf(argument,"%4095[^,],%255s",_filename.data(),options.data())!=2) { > std::strncpy(_filename,argument,_filename.width()-1); > _filename[_filename.width()-1] = 0; > } > } > gmic_strreplace(_filename); > gmic_strreplace(options); > CImg<char> __filename0 = CImg<char>::string(_filename); > const char *const _filename0 = __filename0.data(); > > > if (!cimg::strncasecmp(_filename,"http://",7) || > !cimg::strncasecmp(_filename,"https://",8)) { > cimg::load_network_external(_filename,filename_tmp); > std::strncpy(_filename,filename_tmp,_filename.width()-1); > _filename[_filename.width()-1] = 0; > *filename_tmp = 0; > is_network_file = true; > } > > if (*cext) { > if (*_filename=='-' && (!_filename[1] || _filename[1]=='.')) { > > snprintf(_filename,_filename.width(),"-.%s",cext); > *cext = 0; > } else { > std::FILE *file = 0; > do { > snprintf(filename_tmp,filename_tmp.width(),"%s%c%s.%s", > cimg::temporary_path(),'/', > cimg::filenamerand(),cext); > if ((file=std::fopen(filename_tmp,"rb"))!=0) std::fclose(file); > } while (file); > > > > const char *const _filename_path = realpath(_filename,0); > if (symlink(_filename_path,filename_tmp)) > CImg<unsigned char>::get_load_raw(_filename).save_raw(filename_tmp); > std::free((void*)_filename_path); > > > > } > } > > const char > *const filename = *filename_tmp?filename_tmp:_filename, > *const ext = cimg::split_filename(filename); > > std::FILE *const file = std::fopen(filename,"rb"); > long siz = 0; > if (file) { std::fseek(file,0,2); siz = std::ftell(file); std::fclose(file); } > if (file && siz==0) { > input_images_names.insert(__filename0); > input_images.insert(1); > } else if (!cimg::strcasecmp("off",ext)) { > > > print(images,0,"Input 3d object '%s' at position%s", > _filename0,selection2string(selection,images_names,true).data()); > CImgList<unsigned int> primitives; > CImgList<float> colors; > CImg<float> vertices = CImg<float>::get_load_off(primitives,colors,filename); > const CImg<float> opacities(1,primitives.size(),1,1,1); > vertices.object3dtoCImg3d(primitives,colors,opacities,false).move_to(input_images); > input_images_names.insert(__filename0); > } else if (!cimg::strcasecmp(ext,"cimg") && *options) { > > > float > n0 = -1, x0 = -1, y0 = -1, z0 = -1, c0 = -1, > n1 = -1, x1 = -1, y1 = -1, z1 = -1, c1 = -1; > if ((std::sscanf(options,"%f,%f%c", > &n0,&n1,&end)==2 || > std::sscanf(options,"%f,%f,%f,%f%c", > &n0,&n1,&x0,&x1,&end)==4 || > std::sscanf(options,"%f,%f,%f,%f,%f,%f%c", > &n0,&n1,&x0,&y0,&x1,&y1,&end)==6 || > std::sscanf(options,"%f,%f,%f,%f,%f,%f,%f,%f%c", > &n0,&n1,&x0,&y0,&z0,&x1,&y1,&z1,&end)==8 || > std::sscanf(options,"%f,%f,%f,%f,%f,%f,%f,%f,%f,%f%c", > &n0,&n1,&x0,&y0,&z0,&c0,&x1,&y1,&z1,&c1,&end)==10) && > (n0==-1 || n0>=0) && (n1==-1 || n1>=0) && > (x0==-1 || x0>=0) && (x1==-1 || x1>=0) && > (y0==-1 || y0>=0) && (y1==-1 || y1>=0) && > (z0==-1 || z0>=0) && (z1==-1 || z1>=0) && > (c0==-1 || c0>=0) && (c1==-1 || c1>=0)) { > n0 = cimg::round(n0); n1 = cimg::round(n1); > x0 = cimg::round(x0); x1 = cimg::round(x1); > y0 = cimg::round(y0); y1 = cimg::round(y1); > z0 = cimg::round(z0); z1 = cimg::round(z1); > c0 = cimg::round(c0); c1 = cimg::round(c1); > if (c0==-1 && c1==-1) { > if (z0==-1 && z1==-1) { > if (y0==-1 && y1==-1) { > if (x0==-1 && x1==-1) { > print(images,0,"Input crop [%d] -> [%d] of file '%s' at position%s", > (int)n0,(int)n1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > 0U,0U,0U,0U,~0U,~0U,~0U,~0U); > } else { > print(images,0,"Input crop [%d](%d) -> [%d](%d) of file '%s' at position%s", > (int)n0,(int)x0,(int)n1,(int)x1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,0U,0U,0U, > (unsigned int)x1,~0U,~0U,~0U); > } > } else { > print(images,0,"Input crop [%d](%d,%d) -> [%d](%d,%d) of file '%s' at position%s", > (int)n0,(int)n1,(int)x0,(int)y0,(int)x1,(int)y1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,(unsigned int)y0,0U,0U, > (unsigned int)x1,(unsigned int)y1,~0U,~0U); > } > } else { > print(images,0,"Input crop [%d](%d,%d,%d) -> [%d](%d,%d,%d) of file '%s' " > "at position%s", > (int)n0,(int)n1,(int)x0,(int)y0,(int)z0,(int)x1,(int)y1,(int)z1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,(unsigned int)y0,(unsigned int)z0,0U, > (unsigned int)x1,(unsigned int)y1,(unsigned int)z1,~0U); > } > } else { > print(images,0,"Input crop [%d](%d,%d,%d,%d) -> [%d](%d,%d,%d,%d) of file '%s' " > "at position%s", > (int)n0,(int)n1, > (int)x0,(int)y0,(int)z0,(int)c0, > (int)x1,(int)y1,(int)z1,(int)c1, > _filename0,selection2string(selection,images_names,true).data()); > input_images.load_cimg(filename, > (unsigned int)n0,(unsigned int)n1, > (unsigned int)x0,(unsigned int)y0, > (unsigned int)z0,(unsigned int)c0, > (unsigned int)x1,(unsigned int)y1, > (unsigned int)z1,(unsigned int)c1); > } > > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else > error(images,0,0, > "Command '-input': .cimg file '%s', invalid file options '%s'.", > _filename0,options.data()); > > } else if (!cimg::strcasecmp(ext,"avi") || > !cimg::strcasecmp(ext,"mov") || > !cimg::strcasecmp(ext,"asf") || > !cimg::strcasecmp(ext,"divx") || > !cimg::strcasecmp(ext,"flv") || > !cimg::strcasecmp(ext,"mpg") || > !cimg::strcasecmp(ext,"m1v") || > !cimg::strcasecmp(ext,"m2v") || > !cimg::strcasecmp(ext,"m4v") || > !cimg::strcasecmp(ext,"mjp") || > !cimg::strcasecmp(ext,"mkv") || > !cimg::strcasecmp(ext,"mpe") || > !cimg::strcasecmp(ext,"movie") || > !cimg::strcasecmp(ext,"ogm") || > !cimg::strcasecmp(ext,"ogg") || > !cimg::strcasecmp(ext,"qt") || > !cimg::strcasecmp(ext,"rm") || > !cimg::strcasecmp(ext,"vob") || > !cimg::strcasecmp(ext,"wmv") || > !cimg::strcasecmp(ext,"xvid") || > !cimg::strcasecmp(ext,"mpeg")) { > > > float first_frame = 0, last_frame = 0, step = 1; > char first_sep = 0, last_sep = 0; > if ((std::sscanf(options,"%f%c,%f%c,%f%c", > &first_frame,&first_sep,&last_frame,&last_sep,&step,&end)==5 && > first_sep=='%' && last_sep=='%') || > (std::sscanf(options,"%f%c,%f,%f%c", > &first_frame,&first_sep,&last_frame,&step,&end)==4 && > first_sep=='%') || > (std::sscanf(options,"%f,%f%c,%f%c", > &first_frame,&last_frame,&last_sep,&step,&end)==4 && > last_sep=='%') || > std::sscanf(options,"%f,%f,%f%c",&first_frame,&last_frame,&step,&end)==3 || > (std::sscanf(options,"%f%c,%f%c%c", > &first_frame,&first_sep,&last_frame,&last_sep,&end)==4 && > first_sep=='%' && last_sep=='%') || > (std::sscanf(options,"%f%c,%f%c",&first_frame,&first_sep,&last_frame,&end)==3 && > first_sep=='%') || > (std::sscanf(options,"%f,%f%c%c",&first_frame,&last_frame,&last_sep,&end)==3 && > last_sep=='%') || > std::sscanf(options,"%f,%f%c", > &first_frame,&last_frame,&end)==2) { > if (first_frame>last_frame) cimg::swap(first_frame,last_frame,first_sep,last_sep); > step = cimg::round(step); > print(images,0,"Input frames %g%s..%g%s with step %g of file '%s' at position%s", > first_frame,first_sep=='%'?"%":"", > last_frame,last_sep=='%'?"%":"", > step, > _filename0, > selection2string(selection,images_names,true).data()); > if (first_sep=='%' || last_sep=='%') { > const unsigned int > nb_frames = CImg<unsigned int>::get_load_ffmpeg(filename,0,0,0)[0]; > first_frame = cimg::round(first_sep=='%'?first_frame*nb_frames/100:first_frame); > last_frame = cimg::round(last_sep=='%'?last_frame*nb_frames/100:last_frame); > } > input_images.load_ffmpeg(filename,(unsigned int)first_frame, > (unsigned int)last_frame,(unsigned int)step); > } else if ((std::sscanf(options,"%f%c%c",&first_frame,&first_sep,&end)==2 && > first_sep=='%') || > std::sscanf(options,"%f%c",&first_frame,&end)==1) { > step = cimg::round(step); > print(images,0,"Input frame %g%s of file '%s' at position%s", > first_frame,first_sep=='%'?"%":"", > _filename0, > selection2string(selection,images_names,true).data()); > if (first_sep=='%') { > const unsigned int > nb_frames = CImg<unsigned int>::get_load_ffmpeg(filename,0,0,0)[0]; > first_frame = cimg::round(first_frame*nb_frames/100.0f); > } > input_images.load_ffmpeg(filename,(unsigned int)first_frame,(unsigned int)first_frame); > } else { > print(images,0,"Input all frames of file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_ffmpeg(filename); > } > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else if (!cimg::strcasecmp("raw",ext)) { > > > float dx = 0, dy = 1, dz = 1, dc = 1; > unsigned long offset = 0; > *argx = 0; > if (!*options || > std::sscanf(options,"%f%c",&dx,&end)==1 || > std::sscanf(options,"%f,%f%c",&dx,&dy,&end)==2 || > std::sscanf(options,"%f,%f,%f%c",&dx,&dy,&dz,&end)==3 || > std::sscanf(options,"%f,%f,%f,%f%c",&dx,&dy,&dz,&dc,&end)==4 || > std::sscanf(options,"%f,%f,%f,%f,%lu%c",&dx,&dy,&dz,&dc,&offset,&end)==5 || > std::sscanf(options,"%255[a-zA-Z]%c",argx,&end)==1 || > std::sscanf(options,"%255[a-zA-Z],%f%c",argx,&dx,&end)==2 || > std::sscanf(options,"%255[a-zA-Z],%f,%f%c",argx,&dx,&dy,&end)==3 || > std::sscanf(options,"%255[a-zA-Z],%f,%f,%f%c",argx,&dx,&dy,&dz,&end)==4 || > std::sscanf(options,"%255[a-zA-Z],%f,%f,%f,%f%c",argx,&dx,&dy,&dz,&dc,&end)==5 || > std::sscanf(options,"%255[a-zA-Z],%f,%f,%f,%f,%lu%c",argx,&dx,&dy,&dz,&dc,&offset, > &end)==6) { > const char *const stype = *argx?argx:cimg::type<T>::string(); > dx = cimg::round(dx); > dy = cimg::round(dy); > dz = cimg::round(dz); > dc = cimg::round(dc); > if (dx<0 || dy<=0 || dz<=0 || dc<=0) > error(images,0,0, > "Command '-input': raw file '%s', invalid specified " > "dimensions %gx%gx%gx%g.", > _filename0,dx,dy,dz,dc); > > if (offset) > print(images,0,"Input raw file '%s' (offset: %lu) with type '%s' at position%s", > _filename0,offset,stype, > selection2string(selection,images_names,true).data()); > else > print(images,0,"Input raw file '%s' with type '%s' at position%s", > _filename0,stype, > selection2string(selection,images_names,true).data()); > > > > > > > > if (!cimg::strcasecmp(stype,"bool")) CImg<bool>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"uchar")) CImg<unsigned char>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned char")) CImg<unsigned char>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"char")) CImg<char>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"ushort")) CImg<unsigned short>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned short")) CImg<unsigned short>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"short")) CImg<short>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"uint")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned int")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"int")) CImg<int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"ulong")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"unsigned long")) CImg<unsigned int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"long")) CImg<int>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"float")) CImg<float>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else if (!cimg::strcasecmp(stype,"double")) CImg<double>::get_load_raw(filename, (unsigned int)dx,(unsigned int)dy, (unsigned int)dz,(unsigned int)dc,false,false,offset). move_to(input_images); > else error(images,0,0, > "Command '-input': raw file '%s', " > "invalid specified pixel type '%s'.\n", > _filename0,stype); > input_images_names.insert(__filename0); > } else > error(images,0,0, > "Command '-input': raw file '%s', invalid file options '%s'.", > _filename0,options.data()); > } else if (!cimg::strcasecmp("yuv",ext)) { > > > float first_frame = 0, last_frame = 0, step = 1, dx = 0, dy = 1; > int err = 0; > if ((err=std::sscanf(options,"%f,%f,%f,%f,%f", > &dx,&dy,&first_frame,&last_frame,&step))>=1) { > dx = cimg::round(dx); > dy = cimg::round(dy); > if (dx<=0 || dy<=0) > error(images,0,0, > "Command '-input': YUV file '%s', invalid specified dimensions %gx%g.", > _filename0,dx,dy); > first_frame = cimg::round(first_frame); > if (err>3) { > last_frame = cimg::round(last_frame); > step = cimg::round(step); > print(images,0,"Input frames %g..%g with step %g of YUV file '%s' at position%s", > first_frame,last_frame,step, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_yuv(filename,(unsigned int)dx,(unsigned int)dy, > (unsigned int)first_frame,(unsigned int)last_frame, > (unsigned int)step); > } else if (err==3) { > print(images,0,"Input frames %g of YUV file '%s' at position%s", > first_frame, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_yuv(filename,(unsigned int)dx,(unsigned int)dy, > (unsigned int)first_frame,(unsigned int)first_frame); > } else { > print(images,0,"Input all frames of YUV file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_yuv(filename,(unsigned int)dx,(unsigned int)dy); > } > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else > error(images,0,0, > "Command '-input': YUV file '%s', invalid or missing file options '%s'.", > _filename0,options.data()); > > } else if (!cimg::strcasecmp("tif",ext) || !cimg::strcasecmp("tiff",ext)) { > > > float first_frame = 0, last_frame = 0, step = 1; > int err = 0; > > static const TIFFErrorHandler default_handler = TIFFSetWarningHandler(0); > if (verbosity>0 || is_debug) TIFFSetWarningHandler(default_handler); > else TIFFSetWarningHandler(0); > > if ((err=std::sscanf(options,"%f,%f,%f",&first_frame,&last_frame,&step))>0) { > first_frame = cimg::round(first_frame); > if (err>1) { > last_frame = cimg::round(last_frame); > step = cimg::round(step); > print(images,0,"Input frames %g..%g with step %g of TIFF file '%s' at position%s", > first_frame,last_frame,step, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_tiff(filename,(unsigned int)first_frame,(unsigned int)last_frame, > (unsigned int)step); > } else if (err==1) { > print(images,0,"Input frames %g of TIFF file '%s' at position%s", > first_frame, > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_tiff(filename,(unsigned int)first_frame,(unsigned int)first_frame); > } > } else { > if (*options) error(images,0,0, > "Command '-input': TIFF file '%s', " > "invalid file options '%s'.", > _filename0,options.data()); > print(images,0,"Input all frames of TIFF file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > input_images.load_tiff(filename); > } > if (input_images) { > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > } else if (!cimg::strcasecmp("gmic",ext)) { > > > const bool add_debug_infos = (*options!='0'); > print(images,0,"Input custom commands file '%s'%s", > _filename0,!add_debug_infos?" without debug infos":""); > unsigned int siz = 0; > for (unsigned int l = 0; l<256; ++l) siz+=commands[l].size(); > std::FILE *const file = cimg::fopen(filename,"rb"); > add_commands(file,filename,commands_names,commands,commands_has_arguments, > add_debug_infos); > cimg::fclose(file); > if (verbosity>=0 || is_debug) { > unsigned int nb_added = 0; > for (unsigned int l = 0; l<256; ++l) nb_added+=commands[l].size(); > nb_added-=siz; > std::fprintf(cimg::output()," (added %u command%s, total %u).", > nb_added,nb_added>1?"s":"",siz+nb_added); > std::fflush(cimg::output()); > } > continue; > } else { > > > print(images,0,"Input file '%s' at position%s", > _filename0, > selection2string(selection,images_names,true).data()); > try { input_images.load(filename); } > catch (CImgException&) { > std::FILE *file = 0; > if (!(file=std::fopen(filename,"r"))) { > if (cimg::type<T>::string()==cimg::type<float>::string() || *ext || *filename!='-') { > if (*filename=='-' && filename[1]) { > const char *native_commands_names[] = { > "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s", > "t","u","v","w","x","y","z", > "+","-","*","/",">","<","%","^","=","sh","mv","rm","rv","<<",">>","==",">=", > "<=","//","**","!=","&","|", > "d3d","+3d","b3d","/3d","f3d","l3d","m3d","*3d","o3d","p3d","r3d","s3d","-3d", > "t3d","db3d","md3d","rv3d","sl3d","ss3d","div3d", > "append","autocrop","add","add3d","abs","and","atan2","acos","asin","atan", > "axes", > "blur","bsr","bsl","bilateral","background3d","break", > "check","check3d","crop","channels","columns","command","camera","cut","cos", > "convolve","correlate","color3d","col3d","cosh","continue","cursor", > "done","do","debug","divide","distance","dilate","discard","double3d","denoise", > "deriche","dijkstra","displacement","display","display3d", > "endif","else","elif","endlocal","endl","echo","exec","error","endian","exp", > "eq","ellipse","equalize","erode","elevation3d","eigen","eikonal", > "fill","flood","focale3d","fft", > "ge","gt","gradient","graph", > "histogram","hsi2rgb","hsl2rgb","hsv2rgb","hessian", > "input","if","image","index","invert","isoline3d","isosurface3d","inpaint", > "ifft", > "keep", > "local","le","lt","log","log2","log10","line","lab2rgb","label","light3d", > "move","mirror","mul","mutex","mod","max","min","mmul","mode3d","moded3d", > "map","median","mdiv","mse","mandelbrot","mul3d", > "name","normalize","neq","noise", > "output","onfail","object3d","or","opacity3d", > "parallel","permute","progress","print","pow","point","polygon","plasma", > "pose3d","primitives3d","plot", > "quiver","quit", > "remove","repeat","resize","reverse","return","rows","rotate", > "round","rand","rotate3d","rgb2hsi","rgb2hsl","rgb2hsv","rgb2lab", > "rgb2srgb","rol","ror","reverse3d", > "status","skip","set","split","shared","shift","slices","srand","sub","sqrt", > "sqr","sign","sin","sort","solve","sub3d","sharpen","smooth","split3d", > "svd","sphere3d","specl3d","specs3d","sinc","sinh","srgb2rgb","streamline3d", > "structuretensors","select", > "type","threshold","tan","text","texturize3d","trisolve","tanh", > "unroll","uncommand", > "vanvliet","verbose", > "while","warning","window","warp","watershed","wait", > "xor",0 > }; > const char *misspelled = 0; > const unsigned int foff = filename[1]=='-'?2:1; > int dmin = 4; > for (unsigned int l = 0; native_commands_names[l]; ++l) { > > const char *const c = native_commands_names[l]; > const int d = gmic_levenshtein(c,filename+foff); > if (d<dmin) { dmin = d; misspelled = native_commands_names[l]; } > } > for (unsigned int i = 0; i<256; ++i) > > for (int l = 0; l<(int)(commands_names[i])._width; ++l) { > const char *const c = commands_names[i][l].data(); > const int d = gmic_levenshtein(c,filename+foff); > if (d<dmin) { dmin = d; misspelled = commands_names[i][l].data(); } > } > if (misspelled) > error(images,0,0, > "Unknown command or filename '%s' (did you mean '-%s' ?).", > argument_text,misspelled); > else error(images,0,0, > "Unknown command or filename '%s'.", > argument_text); > } else error(images,0,0, > "Unknown %s '%s'.", > *filename=='-'?"command or filename":"filename", > argument_text); > } else > error(images,0,0, > "Unknown command '%s' in '%s' type mode " > "(command defined only in 'float' type mode ?).", > argument_text,cimg::type<T>::string()); > } else throw; > } > input_images_names.insert(__filename0); > if (input_images.size()>1) > input_images_names.insert(input_images.size()-1,__filename0.copymark()); > } > > if (*filename_tmp) std::remove(filename_tmp); > if (is_network_file) std::remove(_filename); > } > > if (verbosity>=0 || is_debug) { > if (input_images) { > const unsigned int last = input_images.size() - 1; > if (input_images.size()==1) { > if (input_images[0].is_CImg3d(false)) > std::fprintf(cimg::output()," (%u vertices, %u primitives).", > cimg::float2uint((float)input_images(0,6)), > cimg::float2uint((float)input_images(0,7))); > else > std::fprintf(cimg::output()," (1 image %dx%dx%dx%d).", > input_images[0].width(),input_images[0].height(), > input_images[0].depth(),input_images[0].spectrum()); > } else > std::fprintf(cimg::output()," (%u images [0] = %dx%dx%dx%d, %s[%u] = %dx%dx%dx%d).", > input_images.size(), > input_images[0].width(),input_images[0].height(), > input_images[0].depth(),input_images[0].spectrum(), > last==1?"":"..,",last, > input_images[last].width(),input_images[last].height(), > input_images[last].depth(),input_images[last].spectrum()); > } else { > std::fprintf(cimg::output()," (no available data)."); > input_images_names.assign(); > } > std::fflush(cimg::output()); > } > > for (unsigned int l = 0, siz = selection.height()-1U, off = 0; l<=siz; ++l) { > const unsigned int ind = selection[l] + off; > off+=input_images.size(); > if (l!=siz) { > images.insert(input_images,ind); > images_names.insert(input_images_names,ind); > } else { > input_images.move_to(images,ind); > input_images_names.move_to(images_names,ind); > } > } > > if (new_name) new_name.move_to(images_names[selection[0]]); > is_released = false; > } > > > > > > > if (scope.size()==1) global_threads_data.move_to(threads_data,~0U); > > > for (int i = 0; i<(int)(threads_data)._width; ++i) for (int l = 0; l<(int)((threads_data[i])._height); ++l) { > if (!threads_data(i,l).wait_mode) { > cimg::mutex(30); > *(threads_data(i,l).gmic_instance.cancel) = 1; > cimg::mutex(30,0); > } > > pthread_join(threads_data(i,l).thread_id,0); > > > > > is_released&=threads_data(i,l).gmic_instance.is_released; > } > > for (int i = 0; i<(int)(threads_data)._width; ++i) for (int l = 0; l<(int)((threads_data[i])._height); ++l) > if (threads_data(i,l).exception._message) > throw threads_data(i,l).exception; > > > > if (images_names.size()!=images.size()) > error(images,0,0, > "Internal error: Images (%u) and images names (%u) have different size, " > "at return point.", > images_names.size(),images.size()); > if (!scope) > error(images,0,0, > "Internal error: Scope is empty, at return point."); > > > if (!is_quit && !is_return) { > const CImg<char> &s = scope.back(); > if (is_default_type && > s[0]=='*' && (s[1]=='d' || s[1]=='i' || s[1]=='r' || (s[1]=='l' && !is_endlocal))) > error(images,0,0, > "A '-%s' command is missing, before return point.", > s[1]=='d'?"while":s[1]=='i'?"endif":s[1]=='r'?"done":"endlocal"); > } else if (initial_scope_size<scope.size()) scope.remove(initial_scope_size,scope.size()-1); > > > for (int l = 0; l<(int)(images)._width; ++l) check_image(images,images[l]); > > > > > if (!is_released && scope.size()==1 && images) { > CImgList<unsigned int> lselection, lselection3d; > bool is_first3d = false; > > instant_window[0].assign(); > > for (int l = 0; l<(int)(images)._width; ++l) { > const bool is_3d = images[l].is_CImg3d(false); > if (!l) is_first3d = is_3d; > CImg<unsigned int>::vector(l).move_to(is_3d?lselection3d:lselection); > } > if (is_first3d) { > display_objects3d(images,images_names,lselection3d>'y'); > if (lselection) display_images(images,images_names,lselection>'y',0); > } else { > if (lselection) display_images(images,images_names,lselection>'y',0); > if (lselection3d) display_objects3d(images,images_names,lselection3d>'y'); > } > is_released = true; > } > > > > if (is_debug) debug(images,"%sEnd G'MIC parser in scope '%s/' [%s].%s\n", > cimg::t_bold,scope.back().data(),CImg<T>::pixel_type(),cimg::t_normal); > if (!is_debug && !is_quit && scope.size()==1 && is_default_type) { > print(images,0,"End G'MIC parser.\n"); > is_quit = true; > } > } catch (CImgException &e) { > CImg<char> error_message(e.what(),std::strlen(e.what())+1); > for (char *cimg = std::strstr(error_message,"CImg"); cimg; cimg = std::strstr(cimg,"CImg")) { > cimg[0] = 'g'; cimg[1] = 'm'; cimg[2] = 'i'; cimg[3] = 'c'; > } > error(images,0,0,error_message); > } > debug_line = initial_debug_line; > return *this; >} ># 13099 "gmic.cpp" >gmic& gmic::_parse_float(const CImgList<char>& commands_line, unsigned int& position, > CImgList<float>& images, CImgList<char>& images_names, > unsigned int variables_sizes[256]) { > return _parse(commands_line,position,images,images_names,variables_sizes); >} >template gmic::gmic(const int, const char *const *const, CImgList<float>&, CImgList<char>&, > const char *const custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel); >template gmic::gmic(const char *const, CImgList<float>&, CImgList<char>&, > const char *const custom_commands, const bool include_default_commands, > float *const p_progress, int *const p_cancel); ># 13130 "gmic.cpp" >int main(int argc, char **argv) { > > cimg::output(stdout); > if (argc==1) { > std::fprintf(cimg::output(), > "[gmic] No commands, options or data provided (type '%s -h' to get help).\n", > cimg::basename(argv[0])); > std::fflush(cimg::output()); > std::exit(0); > } > > > char command_line[256] = { 0 }; > const char > *const is_help1 = cimg_library::cimg::option("-h",argc,argv,(char*)0,0), > *const is_help2 = cimg_library::cimg::option("--h",argc,argv,(char*)0,0), > *const is_help3 = cimg_library::cimg::option("-help",argc,argv,(char*)0,0), > *const is_help4 = cimg_library::cimg::option("--help",argc,argv,(char*)0,0); > if (is_help1 || is_help2 || is_help3 || is_help4) { > > > CImgList<> images; > CImgList<char> images_names; > CImg<unsigned char>(data_gmic_def,1,size_data_gmic_def,1,1).move_to(images); > const unsigned int omode = cimg::exception_mode(); > cimg::exception_mode() = 0; > for (int i = 1; i<argc; ++i) { > std::FILE *file = 0; > char filename_tmp[1024] = { 0 }; > if ((!std::strcmp("-m",argv[i]) || !std::strcmp("-command",argv[i])) && i<argc-1) { > const char *const filename = argv[++i]; > if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) > try { > file = std::fopen(cimg::load_network_external(filename,filename_tmp),"r"); > } catch (CImgException&) { file = 0; } > else file = std::fopen(filename,"r"); > } else if (!cimg::strcasecmp("gmic",cimg::split_filename(argv[i]))) { > const char *const filename = argv[i]; > if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) > try { > file = std::fopen(cimg::load_network_external(filename,filename_tmp),"r"); > } catch (CImgException&) { file = 0; } > else file = std::fopen(filename,"r"); > } > if (file) { > const unsigned int n = images.size(); > try { > CImg<unsigned char>::get_load_cimg(file).move_to(images,0); > } catch (CImgIOException&) { > CImg<unsigned char>::get_load_raw(file).move_to(images,0); > } > if (images.size()!=n) CImg<unsigned char>::vector('\n').move_to(images,1); > cimg::fclose(file); > if (*filename_tmp) std::remove(filename_tmp); > } > } > cimg::exception_mode() = omode; > > const char > *const is_help = is_help1?"-h":is_help2?"--h":is_help3?"-help":"--help", > *const command = is_help1?is_help1:is_help2?is_help2:is_help3?is_help3:is_help4; > if (!std::strcmp(is_help,command)) gmic("-v - -help",images,images_names); > else { > snprintf(command_line,sizeof(command_line),"-v - -help \"%s\",1",command); > gmic(command_line,images,images_names); > } > std::exit(0); > } > > > const char *const is_debug = cimg_library::cimg::option("-debug",argc,argv,(char*)0,0); > cimg::output(is_debug?stdout:stderr); > CImgList<float> images; > CImgList<char> images_names; > try { gmic(argc,argv,images,images_names); } > catch (gmic_exception &e) { > std::fprintf(cimg::output(),"\n[gmic] %s%s%s%s", > cimg::t_red,cimg::t_bold,e.what(),cimg::t_normal); > if (*e.command_help()) { > std::fprintf(cimg::output(),"\n[gmic] Command '-%s' has the following description: \n", > e.command_help()); > images.assign(); images_names.assign(); > CImg<unsigned char>(data_gmic_def,1,size_data_gmic_def,1,1).move_to(images); > snprintf(command_line,sizeof(command_line),"-v - -help \"%s\",0",e.command_help()); > gmic(command_line,images,images_names); > } else { std::fprintf(cimg::output(),"\n\n"); std::fflush(cimg::output()); } > return -1; > } > return 0; >}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 1111781
:
910999
| 911000 |
911001