\hypertarget{classTrie}{
\section{Trie$<$ A, Payload, \_\-\_\-Iterator $>$ Class Template Reference}
\label{classTrie}\index{Trie@{Trie}}
}


The trie stores BGP update packets \hyperlink{protocolthe-p}{the} trie index is \hyperlink{protocolthe-p}{the} NLRI.  




{\ttfamily \#include $<$trie.hh$>$}

\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classTrie_ae647029f6ed496a4a4bb8c3d8e03ecfb}{
typedef \hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv4}{IPv4} $>$::TreeWalker {\bfseries TreeWalker\_\-ipv4}}
\label{classTrie_ae647029f6ed496a4a4bb8c3d8e03ecfb}

\item 
\hypertarget{classTrie_ab043b5a8b53e77a5f65594a74f6247c8}{
typedef \hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv6}{IPv6} $>$::TreeWalker {\bfseries TreeWalker\_\-ipv6}}
\label{classTrie_ab043b5a8b53e77a5f65594a74f6247c8}

\item 
\hypertarget{classTrie_ab1b8f85284d6cd2d24443851534cb606}{
typedef XorpCallback2$<$ void, const \hyperlink{classUpdatePacket}{UpdatePacket} $\ast$, const \hyperlink{classTimeVal}{TimeVal} \& $>$::RefPtr {\bfseries ReplayWalker}}
\label{classTrie_ab1b8f85284d6cd2d24443851534cb606}

\item 
\hypertarget{classTrie_a8bcfa9b8f82bbf725bc0929760413075}{
typedef \hyperlink{classIPNet}{IPNet}$<$ A $>$ {\bfseries Key}}
\label{classTrie_a8bcfa9b8f82bbf725bc0929760413075}

\item 
\hypertarget{classTrie_a5e43f4a7db9597369bf6cf39963f592a}{
typedef \hyperlink{classTrieNode}{TrieNode}$<$ A, Payload $>$ {\bfseries Node}}
\label{classTrie_a5e43f4a7db9597369bf6cf39963f592a}

\item 
\hypertarget{classTrie_abbded7129f3a8874a3fabb5d0d2ac01c}{
typedef \_\-\_\-Iterator {\bfseries iterator}}
\label{classTrie_abbded7129f3a8874a3fabb5d0d2ac01c}

\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classTrie_a9c51029da91290002769c0e5bfa8b168}{
const \hyperlink{classUpdatePacket}{UpdatePacket} $\ast$ {\bfseries lookup} (const string \&net) const }
\label{classTrie_a9c51029da91290002769c0e5bfa8b168}

\item 
\hypertarget{classTrie_a0d66fb791b163e9b5063511d421703d1}{
const \hyperlink{classUpdatePacket}{UpdatePacket} $\ast$ {\bfseries lookup} (const \hyperlink{classIPNet}{IPv4Net} \&net) const }
\label{classTrie_a0d66fb791b163e9b5063511d421703d1}

\item 
\hypertarget{classTrie_a050a69a179749f76cd121090bece2ad5}{
const \hyperlink{classUpdatePacket}{UpdatePacket} $\ast$ {\bfseries lookup} (const \hyperlink{classIPNet}{IPv6Net} \&net) const }
\label{classTrie_a050a69a179749f76cd121090bece2ad5}

\item 
\hypertarget{classTrie_a8682c0d7be3756144f6e6a0eca90deab}{
void {\bfseries process\_\-update\_\-packet} (const \hyperlink{classTimeVal}{TimeVal} \&tv, const uint8\_\-t $\ast$buf, size\_\-t len, const \hyperlink{classBGPPeerData}{BGPPeerData} $\ast$peerdata)}
\label{classTrie_a8682c0d7be3756144f6e6a0eca90deab}

\item 
\hypertarget{classTrie_ad471c40e5db66930a98126fdbb2c81f6}{
void {\bfseries tree\_\-walk\_\-table} (const TreeWalker\_\-ipv4 \&tw) const }
\label{classTrie_ad471c40e5db66930a98126fdbb2c81f6}

\item 
\hypertarget{classTrie_a508e1f8a006818ee80c2d628ed747543}{
void {\bfseries tree\_\-walk\_\-table} (const TreeWalker\_\-ipv6 \&tw) const }
\label{classTrie_a508e1f8a006818ee80c2d628ed747543}

\item 
void \hyperlink{classTrie_a1a996e5405eb2c171fa79a96ef338642}{replay\_\-walk} (const ReplayWalker uw, const \hyperlink{classBGPPeerData}{BGPPeerData} $\ast$peerdata) const 
\begin{DoxyCompactList}\small\item\em Generate \hyperlink{protocolthe-p}{the} set of update packets that would totally populate this trie. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a423180e534aa9e003fab20decc477e9e}{
uint32\_\-t {\bfseries update\_\-count} ()}
\label{classTrie_a423180e534aa9e003fab20decc477e9e}

\item 
\hypertarget{classTrie_a530db693305cf4405deba0f03d093095}{
uint32\_\-t {\bfseries changes} ()}
\label{classTrie_a530db693305cf4405deba0f03d093095}

\item 
\hypertarget{classTrie_ab74abda01174d6df387902bc38d6cc7e}{
void {\bfseries set\_\-warning} (bool warning)}
\label{classTrie_ab74abda01174d6df387902bc38d6cc7e}

\item 
\hypertarget{classTrie_aca249aa7de2d888da768d7479ddbb73b}{
\hyperlink{classTrie_aca249aa7de2d888da768d7479ddbb73b}{Trie} ()}
\label{classTrie_aca249aa7de2d888da768d7479ddbb73b}

\begin{DoxyCompactList}\small\item\em stl map interface \item\end{DoxyCompactList}\item 
iterator \hyperlink{classTrie_a67e003eaba59a350d108e86f21f98552}{insert} (const \hyperlink{classIPNet}{Key} \&net, const Payload \&p)
\begin{DoxyCompactList}\small\item\em insert a key,payload pair, returns an iterator to \hyperlink{protocolthe-p}{the} newly inserted node. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a07dbf8613c6f1e3466d13bad7cd03bd7}{
void \hyperlink{classTrie_a07dbf8613c6f1e3466d13bad7cd03bd7}{erase} (const \hyperlink{classIPNet}{Key} \&k)}
\label{classTrie_a07dbf8613c6f1e3466d13bad7cd03bd7}

\begin{DoxyCompactList}\small\item\em delete \hyperlink{protocolthe-p}{the} node with \hyperlink{protocolthe-p}{the} given key. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a4629627abddabdf48b8c8cde1061148f}{
void \hyperlink{classTrie_a4629627abddabdf48b8c8cde1061148f}{erase} (iterator i)}
\label{classTrie_a4629627abddabdf48b8c8cde1061148f}

\begin{DoxyCompactList}\small\item\em delete \hyperlink{protocolthe-p}{the} node pointed by \hyperlink{protocolthe-p}{the} iterator. \item\end{DoxyCompactList}\item 
iterator \hyperlink{classTrie_a188a84beaf1495d55d912affb7bddf71}{unbind\_\-root} (iterator i) const 
\begin{DoxyCompactList}\small\item\em Set root node associated with iterator to \hyperlink{protocolthe-p}{the} root node of \hyperlink{protocolthe-p}{the} trie. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a3c29fa0e1f7ad981bf64bd8af942cb57}{
iterator \hyperlink{classTrie_a3c29fa0e1f7ad981bf64bd8af942cb57}{find} (const \hyperlink{classIPNet}{Key} \&k) const }
\label{classTrie_a3c29fa0e1f7ad981bf64bd8af942cb57}

\begin{DoxyCompactList}\small\item\em given a key, returns an iterator to \hyperlink{protocolthe-p}{the} entry with \hyperlink{protocolthe-p}{the} longest matching prefix. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a527bc5d4cd7dce0ad34c6da62fc164a4}{
iterator \hyperlink{classTrie_a527bc5d4cd7dce0ad34c6da62fc164a4}{find} (const A \&a) const }
\label{classTrie_a527bc5d4cd7dce0ad34c6da62fc164a4}

\begin{DoxyCompactList}\small\item\em given an address, returns an iterator to \hyperlink{protocolthe-p}{the} entry with \hyperlink{protocolthe-p}{the} longest matching prefix. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a492e1dac800810623c0dde3e2ce9faea}{
iterator {\bfseries lower\_\-bound} (const \hyperlink{classIPNet}{Key} \&k) const }
\label{classTrie_a492e1dac800810623c0dde3e2ce9faea}

\item 
\hypertarget{classTrie_ace48f94d4b74a746e8da35b04f78d849}{
iterator {\bfseries begin} () const }
\label{classTrie_ace48f94d4b74a746e8da35b04f78d849}

\item 
\hypertarget{classTrie_a7e0a7df48c4c3b9b8e32c9bcc8f520b0}{
const iterator {\bfseries end} () const }
\label{classTrie_a7e0a7df48c4c3b9b8e32c9bcc8f520b0}

\item 
\hypertarget{classTrie_abb4de9b2d3565186762b5561e4328771}{
void {\bfseries delete\_\-all\_\-nodes} ()}
\label{classTrie_abb4de9b2d3565186762b5561e4328771}

\item 
\hypertarget{classTrie_a2d2ef37b26e340b4bd9318ddf3001aa9}{
iterator \hyperlink{classTrie_a2d2ef37b26e340b4bd9318ddf3001aa9}{lookup\_\-node} (const \hyperlink{classIPNet}{Key} \&k) const }
\label{classTrie_a2d2ef37b26e340b4bd9318ddf3001aa9}

\begin{DoxyCompactList}\small\item\em lookup a subnet, must return exact match if found, end() if not. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_adb2bc9886a6111c3a85f3b12176331dc}{
iterator \hyperlink{classTrie_adb2bc9886a6111c3a85f3b12176331dc}{search\_\-subtree} (const \hyperlink{classIPNet}{Key} \&key) const }
\label{classTrie_adb2bc9886a6111c3a85f3b12176331dc}

\begin{DoxyCompactList}\small\item\em returns an iterator to \hyperlink{protocolthe-p}{the} subtree rooted at or below \hyperlink{protocolthe-p}{the} key passed as parameter. \item\end{DoxyCompactList}\item 
iterator \hyperlink{classTrie_a7d47f553bd5ec9b3436ae42ca0706b68}{find\_\-less\_\-specific} (const \hyperlink{classIPNet}{Key} \&key) const 
\begin{DoxyCompactList}\small\item\em find\_\-less\_\-specific asks \hyperlink{protocolthe-p}{the} question: if I were to add this net to \hyperlink{protocolthe-p}{the} trie, what would be its parent node? net may or may not already be in \hyperlink{protocolthe-p}{the} trie. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a22988f8192a891bf02439d8ba3d9eddf}{
void \hyperlink{classTrie_a22988f8192a891bf02439d8ba3d9eddf}{find\_\-bounds} (const A \&a, A \&lo, A \&hi) const }
\label{classTrie_a22988f8192a891bf02439d8ba3d9eddf}

\begin{DoxyCompactList}\small\item\em return \hyperlink{protocolthe-p}{the} lower and higher address in \hyperlink{protocolthe-p}{the} range that contains a and would map to \hyperlink{protocolthe-p}{the} same route. \item\end{DoxyCompactList}\item 
\hypertarget{classTrie_a06d54ff1f25569569f673f8349e030bb}{
int {\bfseries route\_\-count} () const }
\label{classTrie_a06d54ff1f25569569f673f8349e030bb}

\item 
\hypertarget{classTrie_aee2f26d13a5cb6c9d4576191ae33af1a}{
void {\bfseries print} () const }
\label{classTrie_aee2f26d13a5cb6c9d4576191ae33af1a}

\item 
\hypertarget{classTrie_abce7d5130036ff525bd4c0a8db1c95a4}{
{\footnotesize template$<$$>$ }\\void {\bfseries get\_\-heads} (\hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv4}{IPv4} $>$ $\ast$\&head, \hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv4}{IPv4} $>$ $\ast$\&del)}
\label{classTrie_abce7d5130036ff525bd4c0a8db1c95a4}

\item 
\hypertarget{classTrie_a9a7f2a5af281d78c9f13ebfcac06048a}{
{\footnotesize template$<$$>$ }\\void {\bfseries get\_\-heads} (\hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv6}{IPv6} $>$ $\ast$\&head, \hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv6}{IPv6} $>$ $\ast$\&del)}
\label{classTrie_a9a7f2a5af281d78c9f13ebfcac06048a}

\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classTrie_abe71bc15db62de9c8ac0770aeedded83}{
{\footnotesize template$<$class A $>$ }\\void {\bfseries add} (\hyperlink{classIPNet}{IPNet}$<$ A $>$ net, \hyperlink{classTriePayload}{TriePayload} \&)}
\label{classTrie_abe71bc15db62de9c8ac0770aeedded83}

\item 
\hypertarget{classTrie_ae153b4d3049a7f87678045dbfa0d1fe6}{
{\footnotesize template$<$class A $>$ }\\void {\bfseries del} (\hyperlink{classIPNet}{IPNet}$<$ A $>$ net, \hyperlink{classTriePayload}{TriePayload} \&)}
\label{classTrie_ae153b4d3049a7f87678045dbfa0d1fe6}

\item 
\hypertarget{classTrie_a7da9b612e7f13c4a4206bc6350b8abb5}{
{\footnotesize template$<$class A $>$ }\\void {\bfseries get\_\-heads} (\hyperlink{classRealTrie}{RealTrie}$<$ A $>$ $\ast$\&, \hyperlink{classRealTrie}{RealTrie}$<$ A $>$ $\ast$\&)}
\label{classTrie_a7da9b612e7f13c4a4206bc6350b8abb5}

\item 
\hypertarget{classTrie_aad8641dee6789a49bad2f686f8abc8b5}{
void {\bfseries validate} ()}
\label{classTrie_aad8641dee6789a49bad2f686f8abc8b5}

\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{classTrie_a9360a155f7139ef056c37869d85cb656}{
\hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv4}{IPv4} $>$ {\bfseries \_\-head\_\-ipv4}}
\label{classTrie_a9360a155f7139ef056c37869d85cb656}

\item 
\hypertarget{classTrie_a47c92b308c4c084b0565981d3810d0ac}{
\hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv4}{IPv4} $>$ {\bfseries \_\-head\_\-ipv4\_\-del}}
\label{classTrie_a47c92b308c4c084b0565981d3810d0ac}

\item 
\hypertarget{classTrie_a84231524ba8fc2f7ab34cd38609f71a5}{
\hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv6}{IPv6} $>$ {\bfseries \_\-head\_\-ipv6}}
\label{classTrie_a84231524ba8fc2f7ab34cd38609f71a5}

\item 
\hypertarget{classTrie_aca750cade5aa0f52d1e6d2f7765c3d5c}{
\hyperlink{classRealTrie}{RealTrie}$<$ \hyperlink{classIPv6}{IPv6} $>$ {\bfseries \_\-head\_\-ipv6\_\-del}}
\label{classTrie_aca750cade5aa0f52d1e6d2f7765c3d5c}

\item 
\hypertarget{classTrie_abbcc8e2afcb7ccf111a182ff45041b15}{
\hyperlink{classTrieData}{TrieData} $\ast$ {\bfseries \_\-first}}
\label{classTrie_abbcc8e2afcb7ccf111a182ff45041b15}

\item 
\hypertarget{classTrie_a9a65a70ca6b65edef9dffa78c7b7647f}{
\hyperlink{classTrieData}{TrieData} $\ast$ {\bfseries \_\-last}}
\label{classTrie_a9a65a70ca6b65edef9dffa78c7b7647f}

\item 
\hypertarget{classTrie_a87160e20511af7ceb523a753ffb634b4}{
uint32\_\-t {\bfseries \_\-update\_\-cnt}}
\label{classTrie_a87160e20511af7ceb523a753ffb634b4}

\item 
\hypertarget{classTrie_ace0fec4a001f4ac2589fec263c006b10}{
uint32\_\-t {\bfseries \_\-changes}}
\label{classTrie_ace0fec4a001f4ac2589fec263c006b10}

\item 
\hypertarget{classTrie_a524d4ca65b298d3a07deae6f3db9f371}{
bool {\bfseries \_\-warning}}
\label{classTrie_a524d4ca65b298d3a07deae6f3db9f371}

\item 
\hypertarget{classTrie_aa2e260774c2b06b8ff270bd62aab29ab}{
\hyperlink{classTrieNode}{Node} $\ast$ {\bfseries \_\-root}}
\label{classTrie_aa2e260774c2b06b8ff270bd62aab29ab}

\item 
\hypertarget{classTrie_a4608cc0d055967c6ae4d3724328e1d5d}{
int {\bfseries \_\-payload\_\-count}}
\label{classTrie_a4608cc0d055967c6ae4d3724328e1d5d}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
\subsubsection*{template$<$class A, class Payload, class \_\-\_\-Iterator = TriePostOrderIterator$<$A,Payload$>$$>$ class Trie$<$ A, Payload, \_\-\_\-Iterator $>$}

The trie stores BGP update packets \hyperlink{protocolthe-p}{the} trie index is \hyperlink{protocolthe-p}{the} NLRI. The \hyperlink{classTrie}{Trie} itself.

A BGP update packet can contain multiple NLRI's. To save \hyperlink{protocolthe-p}{the} overhead of storing an update packet multiple times in \hyperlink{protocolthe-p}{the} trie a single copy of \hyperlink{protocolthe-p}{the} update packet is kept. The Payload is a reference to this single copy. Each update packet is chained together on a linked list. New update packets are added to \hyperlink{protocolthe-p}{the} end of \hyperlink{protocolthe-p}{the} list. In theory this ordered chained list structure should make is very simple to print out \hyperlink{protocolthe-p}{the} current update packets that constitute \hyperlink{protocolthe-p}{the} routing table. The ordering is important if \hyperlink{protocolthe-p}{the} same NLRI is contained in two packets then \hyperlink{protocolthe-p}{the} later one should be used.

The trie support insertion and deletion of Key,Payload pairs, and lookup by Key (which can be an address or a subnet).

Additional methods are supported to provide access via iterators. 

\subsection{Member Function Documentation}
\hypertarget{classTrie_a7d47f553bd5ec9b3436ae42ca0706b68}{
\index{Trie@{Trie}!find\_\-less\_\-specific@{find\_\-less\_\-specific}}
\index{find\_\-less\_\-specific@{find\_\-less\_\-specific}!Trie@{Trie}}
\subsubsection[{find\_\-less\_\-specific}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class A, class Payload, class \_\-\_\-Iterator = TriePostOrderIterator$<$A,Payload$>$$>$ iterator {\bf Trie}$<$ A, Payload, \_\-\_\-Iterator $>$::find\_\-less\_\-specific (
\begin{DoxyParamCaption}
\item[{const {\bf Key} \&}]{key}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classTrie_a7d47f553bd5ec9b3436ae42ca0706b68}


find\_\-less\_\-specific asks \hyperlink{protocolthe-p}{the} question: if I were to add this net to \hyperlink{protocolthe-p}{the} trie, what would be its parent node? net may or may not already be in \hyperlink{protocolthe-p}{the} trie. 

Implemented as a \hyperlink{classTrie_a3c29fa0e1f7ad981bf64bd8af942cb57}{find()} with a less specific key. \hypertarget{classTrie_a67e003eaba59a350d108e86f21f98552}{
\index{Trie@{Trie}!insert@{insert}}
\index{insert@{insert}!Trie@{Trie}}
\subsubsection[{insert}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class A, class Payload, class \_\-\_\-Iterator = TriePostOrderIterator$<$A,Payload$>$$>$ iterator {\bf Trie}$<$ A, Payload, \_\-\_\-Iterator $>$::insert (
\begin{DoxyParamCaption}
\item[{const {\bf Key} \&}]{net, }
\item[{const Payload \&}]{p}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classTrie_a67e003eaba59a350d108e86f21f98552}


insert a key,payload pair, returns an iterator to \hyperlink{protocolthe-p}{the} newly inserted node. 

Prints a warning message if \hyperlink{protocolthe-p}{the} new entry overwrites an existing full node. \hypertarget{classTrie_a1a996e5405eb2c171fa79a96ef338642}{
\index{Trie@{Trie}!replay\_\-walk@{replay\_\-walk}}
\index{replay\_\-walk@{replay\_\-walk}!Trie@{Trie}}
\subsubsection[{replay\_\-walk}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class A, class Payload, class \_\-\_\-Iterator = TriePostOrderIterator$<$A,Payload$>$$>$ void {\bf Trie}$<$ A, Payload, \_\-\_\-Iterator $>$::replay\_\-walk (
\begin{DoxyParamCaption}
\item[{const ReplayWalker}]{uw, }
\item[{const {\bf BGPPeerData} $\ast$}]{peerdata}
\end{DoxyParamCaption}
) const}}
\label{classTrie_a1a996e5405eb2c171fa79a96ef338642}


Generate \hyperlink{protocolthe-p}{the} set of update packets that would totally populate this trie. 


\begin{DoxyParams}{Parameters}
{\em uw} & The callback function that is called. \\
\hline
\end{DoxyParams}
\hypertarget{classTrie_a188a84beaf1495d55d912affb7bddf71}{
\index{Trie@{Trie}!unbind\_\-root@{unbind\_\-root}}
\index{unbind\_\-root@{unbind\_\-root}!Trie@{Trie}}
\subsubsection[{unbind\_\-root}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class A, class Payload, class \_\-\_\-Iterator = TriePostOrderIterator$<$A,Payload$>$$>$ iterator {\bf Trie}$<$ A, Payload, \_\-\_\-Iterator $>$::unbind\_\-root (
\begin{DoxyParamCaption}
\item[{iterator}]{i}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily  \mbox{[}inline\mbox{]}}}}
\label{classTrie_a188a84beaf1495d55d912affb7bddf71}


Set root node associated with iterator to \hyperlink{protocolthe-p}{the} root node of \hyperlink{protocolthe-p}{the} trie. 

Needed whilst trie iterators have concept of root nodes find methods return iterators with root bound to key and means they can never continue iteration beyond of root.

\begin{DoxyReturn}{Returns}
iterator with non-\/restricted root node. 
\end{DoxyReturn}


The documentation for this class was generated from the following files:\begin{DoxyCompactItemize}
\item 
/home/greearb/git/xorp.ct.github/xorp/bgp/harness/trie.hh\item 
/home/greearb/git/xorp.ct.github/xorp/libxorp/trie.hh\item 
/home/greearb/git/xorp.ct.github/xorp/bgp/harness/trie.cc\end{DoxyCompactItemize}
