C# : .NET

[".0s4*0|collections;datetime-format;collections",["F@eAC","BEe]LCGABEKCKAKILA","OLYADAOBSTUUUUTTUUUUPFGHDGDGDGDGDGDGDFOBCCOIBOCOCCPFOCBWSTTUUUUTTUUUU","wehtshs.",".NET","Array","Dictionary","List","String","2D","Async","Console","DataTable","Dates","DateTime","Enum","File","For","Foreach","Format","IEnumerable","If","IndexOf","Lambda","LINQ","Optimization","Parse","Path","Process","Property","Random","Regex","Replace","Sort","Split","Static","Substring","Switch","Tuple","While","SortedDictionary"," keeps its keys always sorted. It allows you to avoid sorting the keys on your own. Its lookup performance is slower than Dictionary. It has advantages if you require a sorted lookup table in memory.","Benchmark results:","\n\nDictionary lookup time: ","Close to O(1)","\nSortedDictionary lookup time: ","O(log n) ","Example."," Here we see the SortedDictionary collection from System.Collections.Generic being used. We add five keys in any order, being careful not to add duplicates. Then we test various keys for their existence. ","Generic Class ","generic","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","Based on:"," .NET 4.5\n\n","C# program that uses SortedDictionary","\n\nusing System;\nusing System.Collections.Generic;\n\nclass Program\n{\n static void Main()\n {","\n // 1\n // New SortedDictionary\n ","SortedDictionary","<string, int> sort =\n new SortedDictionary<string, int>();","\n\n // 2\n // Add strings and int keys\n ","sort.Add(\"zebra\", 5);\n sort.Add(\"cat\", 2);\n sort.Add(\"dog\", 9);\n sort.Add(\"mouse\", 4);\n sort.Add(\"programmer\", 100);","\n\n // 3\n // Example: see if it doesn't contain \"dog\"\n ","if (sort.ContainsKey(\"dog\"))\n {\n Console.WriteLine(true);\n }","\n\n // 4\n // Example: see if it contains \"zebra\"\n ","if (sort.ContainsKey(\"zebra\"))\n {\n Console.WriteLine(true);\n }","\n\n // 5\n // Example: see if it contains \"ape\"\n ","Console.WriteLine(sort.ContainsKey(\"ape\"));","\n\n // 6\n // Example: see if it contains \"programmer\",\n // and if so get the value for \"programmer\"\n ","int v;\n if (sort.TryGetValue(\"programmer\", out v))\n {\n Console.WriteLine(v);\n }","\n\n // 7\n // Example: print SortedDictionary in alphabetic order\n ","foreach (KeyValuePair<string, int> p in sort)\n {\n Console.WriteLine(\"{0} = {1}\",\n p.Key,\n p.Value);\n }\n }\n}\n\n","Output","\n\nTrue\nTrue\nFalse\n100\n\ncat = 2\ndog = 9\nmouse = 4\nprogrammer = 100\nzebra = 5","Steps."," In part 6 above, we use the TryGetValue method on the SortedDictionary, which is excellent for avoiding another key lookup. If the key exists, TryGetValue returns true and it fills the out parameter. ","TryGetValue ","trygetvalue","Then: ","In part 7 above, we use the foreach loop on the SortedDictionary variable.","And: ","This invokes the custom enumerator, which returns a sequence of KeyValuePairs. The keys are always sorted.","Research."," Here we review the difference between Dictionary and SortedDictionary. As always, checking the documentation on MSDN is important, even for experts. The difference is stated in terms of performance. ","The SortedDictionary(TKey, TValue) generic class is a binary search tree with O(log n) retrieval, where N is the number of elements in the dictionary.","Dictionary Class: MSDN ","http://msdn.microsoft.com/en-us/library/xfhwa508.aspx","In one of my programs,"," I needed to maintain a frequency table of various string keys. Instead of Dictionary, I decided to use SortedDictionary, so when I needed to print the SortedDictionary to a file, I wouldn't need to sort it again. ","Tip: ","By using SortedDictionary instead of custom Dictionary sorting code, you can reduce the footprint of your .NET program.","Performance."," To test the performance of the data structures, I devised a benchmark that looped through various element counts. I tested how long it took to add that many keys, and how long it took to find a key when there are that many keys. ","Note: ","The first row has 10 elements. And then each following row has 10 times more. The times are in milliseconds.","Result: ","Performance was awful and it degraded when there were more than 10000 elements to the point of failure.","Add element benchmark: SortedDictionary, Dictionary","\n\n5, 0\n0, 0\n1, 0\n22, 2\n310, 33\n3769, 521\n\n","ContainsKey benchmark: SortedDictionary, Dictionary","\n\n73, 5\n132, 6\n188, 8\n255, 9\n340, 9\n419, 10","SortedList."," There is also a SortedList collection in the System.Collections.Generic namespace. This provides essentially the same functionality as the SortedDictionary but with a different internal implementation. ","Note: ","The SortedList has different performance characteristics, particularly when inserting or removing elements from the collection.","SortedList ","sortedlist","Summary."," We researched the SortedDictionary collection from System.Collections.Generic at MSDN. We also saw a benchmark of SortedDictionary that shows that it can rapidly degrade performance as the number of elements grows. ","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","3679700504","data-ad-format","link","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto"],"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEX/2en///+VlZX29vY4hdadAAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/png;base64,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)","url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAB2ANIDASIAAhEBAxEB/8QAHAABAAIDAQEBAAAAAAAAAAAAAAMEAQIFBgcI/8QAORAAAgIBAgQEAggDCQEAAAAAAAECAwQFEQYSITETQVFhB5EUIiMyQlJxgUNysQgVFiQzNFOCktH/xAAaAQEAAwEBAQAAAAAAAAAAAAAAAQIDBAUG/8QAJREBAAICAQUAAQUBAAAAAAAAAAECAxESBBMhMVEVIkFCYZGx/9oADAMBAAIRAxEAPwD9UgAAAAAMcy9UY54fmj8wabA0dta/iQ+Zjxqv+SPzCeM/EgIvpFX54mHlUr8a+Q0njb4zzr1CsKPjr1MeP7luLbtS6cZKXYycpZHK909mW8fMhNqM2oy9fJkTClsVo8rQAIZAAAAAAAAAAAAAAAAOerpbfefzI8i9qmT3fzOT/eT8oL5mtudKytx5UtzXg9OOmtvzC39Ib838zDv9zm+Kx4rLcW/Zh0fH9zHj+5z/ABTHiDinsui7/c18depQ8RmrsfqTxT2XQ8f3MPIOc7Wau0cVowOk7/c1+ke5zXaau73J4rdh1PpHuY+ke5y/FHijinsQ9Dhas6moX/Wr9fNHdqshbWp1yUovs0eA8Ys4OpXYdnNVLeL+9F9mUtj36c2foOXmniXuAU9N1GjPr3rfLYvvQfdFwymNe3k2pak8bRqQAEKgAAAAAA2opuTSS7tnE1HiHHx94Yy8ez1X3V+/mTETPppjxXyzqkbdsHiHxDqDbasgvZQXQF+1Lr/HZfsIUboRiSKBs9WZaAl5ByEK8kWwJuQxyhHJCzR7lhxI5RJWiyu2RyZNNEMyYa1aORq5CRows25hzGgA35jKZGjeIHY0eEfD8VLayM+kl3XRHpsTNU9o27KXr5M85o6/y0v53/RHSijK8bl5XVVi9piXeBpR/oV/yr+huYvLnxIAU8rUKqN1H7SfpHt8yYjaa0m86rC52OXnazRj7xq+2s9uy/c5uZl35O6nLaH5Y9Ec+cDStPrvw9HX3kaajn5OY341j5PKEekUc6SLdkStNG0eHr0rWsarGkQM7ALOxCJKoiC6ImjEpMuK1kagZ5CXYzt7EbZ8kXIYcCbb2MbDZyV5RIpxLUkQzRMNK2VLEV5ot2IrWFodNJV5EbPW6xoMbea7CSjZ3dfZP9PQ8pbCVc5Qsi4yj0aa2aFbRb0rhz0zRurQAEthEkSNEsALVE5xW0ZSS9Ey3XKb7zl8ynUXakRLDJp67D/2lH8kf6EeTm1U7rfnn6I47zLp0wrT5YRio7Lz2I0YcfryY6bzuyxk5d1+6b5YflRV2NwX9OisRWNQilEr2ItSRBZ5kw2pKjaipYXLSpYaQ7KekQAC7vQXYmRFWTIzl59myWwAIZhhoyH2A0kQTJ2QzJhpVVsK1hasKtheHXR9AOfqulUahD665Lkvq2Jdf39UdAHNE69PnKXtSeVZ1L53qGBfgXcl8ej+7JdpfoVT6Vk0VZNMqr4KcH3TPH6zoVuHzW4+9uP3frH9f/ptXJvxL2um62uX9N/E/wDXFRLAjSJII0dy1V5Fykp1FyorLDItQ7Eq7EUOxJHsUlyWZAAVay8yvb5k8iC3zJhpRSuKlhcuKdhpDtp6RAALu/WTIgg+xMjOXn2bgwmZXXsQzAbKMn2i/kZVVj7Ql8gjcIWRTRb+j3eVU/8AyzDxL3/Cn8hErResfu5tiK1iOvLT8mXamRG9Ky5dqX80Wi0N656R7mHqgAc7wQA+dX/GThCPE1GgYuTmZuoXZn0CKxsWcq3cmlKKm0ovl5lvs3tuiYja1azb09Nq+gQu5rsJKFnd19lL9PQ834E4WuucJKaezi11PNfFz41W8GcVrh3RdFhqmowxlk2Ky6UN930rrjGLcpbfW8ui8yl8XuOeI46B8Or+GcufD+VxNk01XuzGhbZSrIw2i1Nfhc/ZvbyNK3mI8vRwdVlpXVo38e7hTZGajKElJ9k11Z0IYWSuXmpmuZ7LdHyT4acTcW5fwt+Ikr8+/Wdf0TKy8bByXUna3Gv8MV3e6bS699uvQ4n9mj/E2Txq9Q1nJ4jeNPTprJWbXfLGlbzxabste3iee0Y7Jb9fWZtLS3UWtEzr0+46Pqei6jrE9Nwta03Mz6VKd2LjZEbLIRi4xlzJPps5RT39TznB/HmFrnC/Emu6msPDwtDyrqrpYkrLNoVwUnvzRjvLr+HdejZQ+C3Ad3Buq8UatrmJh16lqeo2zx74TU7Fizlzcra7LmSbX6GOB/hnDQ+BeKuG9a1GGTXxBlX3Tnhpp0xsgo9HJdWtt+37FWE2tMy63w843o46wczMwtA1zS8KmMJ0ZOo0qEMpSbX2bW6lty9dm+6PTPqeW+G/AtPAWnZOLRr+s6xG6uuqEM2zerHhDdpVQ/Dvv16+S9D1fKTC+PevLRkFhYcWRTiWhvWVG1FOxHQtg/Qs4mh35LUrfsa/WS6v9i24j26O9THG7TpwdgeyXDuCkt/Fb9eYEdyrH8hh/v8Ax01j0rtTWv8AqjZVVrtCK/Y3BzvE5T9YUUuyXyMgBAAAAAAAAAAAB+OOAtA4kq+NbzdG4bmqFr2Rc5ZuFfGvDxpWbTkpSfhqTglttvLt18j9jgmJ00x5OG/DwPGHwk4T4u4ieta1i5Us2dCxrfByp1RtgvKSi1v06d+x63F0PS8XC07EqwMfwNOrjTiRnBTdEYxUUouW7XSKW/sdEDavO31hQio8qSS9uhz83Hu6vxJzr9N+x0QInSaXms7cJVGVWdCdX15dPM2rrSl1SLcnT3nO8IeEzq8i9EZ8PdNDkr33IdRJXgTt6v6kfVnUrphDqlu/VkhHJE9RP8VbGwqcfrGO8/zPuWQCu9ue1ptO5AAEAAAAAAAAAAAAAAAAAAAAAAAANXHqEgAltsAAgAAAAAAAB//Z)"]

["url(data:image/jpeg;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEXZ7/////+VlZX29vYl5th1AAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL8AAABzCAMAAAD+HiP7AAAAYFBMVEXh4eH///+gmpvHxsf+/Pzt7e3n5+fn5OQ6NDWLi4tnZWWtra3++frV1dX88vS8uLn77e9VTk93dXXn3+Dj4+P55ujn19n00tb99vfoxckDAwPz8vL4+Pjt5OXoztH33eDep8bGAAAIqUlEQVR4XtWc6ZKjOgyF8ca+Z+m95/3f8tryoRWgp25Iy101JywHmB+fFSFhpjqZ+reVuaIOmp3LFtORqZwza6OdG9amca5h8y2ApU9cIBx6LVf5Cp2D5w2W7/jnhjQ4ly8mWxvjXPd/ptvzRzLGDrgKyKC2QThnQestCRbjDIo7u+H3oRMR84OWCdsA0tIHx3Z10LbwUIsPKw5EsUvMj0gtNF4Rkgz2dBoneOcNrxhMXILl3JLn7wamt6Bn/uew4V34PPMxnD/lV1ylg+UiBkEjQB4J8kPAR54jwIHEr7Tt/YfV8woF7L73K+3aeDEMAmtMvRgZlYxfIe4QQRAV5A0fYQ/rcfksm2WISCwUKdRPKRmtVgOI7Iw9xmX0ZsSJeEjHIx2Rp+1IJ8IhKyYUShjzy9cfJD2lAzh/JgzjufcRQbVKx28V8CM9dPFL+PgFazAXXKFzcUfCYbjGoiHQvYwimqh+huRB1oPmp+IRUCGIA0jDb61C5hP9BfB/wvrnT9j7DR1hS6IjGOywhH/PY6BvAPw2Bb9F5QT+GOF/KB5BHxQLqXj/MiqI8ffwT09PceM/5L1wxi84s1zmf8uDWHKIWrOy0vUf9JbwiZ/BfyIM4uKFFIrx92s2i/Kj8iP3I/+TiJBHyxcQHwpF+1cV85+TH/hiwjfQLwOwCer/KvygFxJyCG0AJTQ757L8FH6O/qW/lqRrb6I5LeajH8hMX8b1DZm6Z6PZ1H4EuAPoYU5Z2foJ/Bh/hN905pWUKZizGqLJVRONgynflI7GqioadWvKpxCQryYgXv8xZeHi4xOgfK2bKihzXbU2ZxidO7MxbmsaR/yoouC3SfqX/2r7nmpP5J/RaLLzYvK/GJtlbm3e2RD/01cJasXzJ6P+1XrF4sP8mYTUHPlxB4cZjfz8xSob+BH/J0l+N1Tax4MTCPkzD5L8KJ8If8x/Gf7sTfWxhn7xK2UF6/9Qcflk/qmsrAy/I37uwVaYH/XTtlR+lt51Ks5C4W+mGfEnfsyDs64Qrj9+gnHTe3vrMrn714vzJ0X9pPDf5o8xXSGBj/rJBShJ/8Xti/IjWn/Aj/hT/niJ9y/cv2hfafjHcSlAov2rAz9NvYAPfun8H2XjD93wX8T5nak088dJcMj/apDktxx/0f6F+g9+foCT7l/qlh/96z0BP8ffOen6ucqfj7wQ7V+cPzbyd5n0/Av1M2X/Gpd3KOLzFzy+cf8aTC5f/8Gv7uY/d2XQdGZjFjOQqTvTkJlPp2aaprrWLy/NLF//kT/Hnv/LiqQ9/19M0xlvtNbN6WR00PDyMugU/Hz/HuA//5+yLM8Lr5PX9Xr9/Px88UrVv4hfCfFDeZ6n43dGN989f1aDJH++5U/Sv26ff5wT4u/MF/+V+QX7l+3X9ccqYf5N/r8EfbhcqH/pad48P1P9NHeNAIz3xL9Y5c+Yqn+13L8E+VGAOP5DY/JU8xelUvLz/SvOj/ij/ie9f1P2X6usZP3PkP/J+xfXH/sv969W0fzLCPLv79+U8y+Kv3z/WvHXYv0rfx8fn3+V+sH6+fEmVP/fdVmv64+l/DGdaP3cxn+0b2neHyL+svV/nz9Niv51/P1Vlx15friCP1X/An6C/lXkier//vlBfv7y2/3LWnn+fJX/gvy5aYZV/G18ftZGfv51TT//Qv4L9699/awnsf71dtm//7+Xf9IPPj+7d/H+hfqP559Bsn8Vq/s3Xf8aU/WvIt/kf6ONS/T+0Kr7+U13bP6bfv71bKXnX5w/6fsXGnDC929c/xPG38r332T9q2sG5ufnh8YIzn+LoN96f2gTvD/c8deTFiqgufvYxt8q4f61f387tonmX0v8my7p+6s+Uf/qW4v+VYURmCbo76bLPCBpb84wBvgrfq0Hl6Z+Iv63f0U3OKfXxjhXBaNNCHCQxzbfm999f7jMH9VdKqv8LhW/0b/GdPz5L/Uv1J9/iD/vBrN9/6xsen75/oX7N0X8i139n8X61zn/2NX/u/nrJr9P8vMX7l/T5v3Vgfjn9+p3+heeP5VNwH8K4v5VJepfbYj/3fxDdyz/078/fPbw8vXnN+dfViWr/6eE/Bfip/4ryg+l+v+vojPmi3/E9EWeP/H8C+VnpPIvH//9A/RcS/Wv7Hzy+Fz+D+X/3NzPX/ALLMH+ZatyovDz6yv5+l+gAfAARN8fcvdF/sjzF7f81L+M8iN4U17BvK+NuzF2bfIMbDDa8yN9UH0OzF8ac3f9XH8B5WupB+eaKmhvjHN6a/KN6dzZb/UU+JE+NIBWvv4U4Pf64n/1FUhNr0HzjSnJVGxsNFq9vZIa5aIZVB5NyX++FvMnRf0M4vh/1mVZVv04+x2Zmozu+41p+nGCuUQz9B/RmP6jJNURH/nTpuTnAbyspeenR8XZg+in4OcOgAHsRvA4PfNj9iLPjw7MNWg/gp/RA9/aY/zzcKQDED5/BRgEBvLYH78Dn5Kf/v5dqSP5A7rDNQgjYOn6z2O6+QGFln/ERZqfSxDpCv2E/+IXgl/hW3Uof7Q5GH7oyvoko+vLYYGe8FE6W/n7l1XsRsDS098Avz+HdST6IFT+sCTiL6DTjW74H/8FHaqbJAX6NPzIIZRR1tUbPa1+usiLXNjEE3S0hJss7RB74qfamSh/QA8xO6t/SM9BkT3UTpuKHx0gB79ftt9C/GWguMUOxst7cmHxKwzggyyNgOCP8FfoX4e/BB4HEqqLIH4bmGgXFhzSpfjxIoezKDoWkccA5Os/V1Fat9IlgSCUwUKw1sLiGJYuWEWpT5+E/Mih+Nnz26jWEitWRl+0PaFoE4X9kfwxIHs0jZZ9VYIFOHSAFaDRwCPYi4XsUf6yDiMYKq+Vach03xlNJotGe1Nov6tLpUAVmYFDB2wjJKAxAAjmIH8ZKlBVBuk8n8k0N6YmMyzGD20i0xUwnr8k7ShgmVkhyeGw3wn8/7b+A5lMu+3mJ6yxAAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABJCAMAAABPapnRAAAAMFBMVEX////9amn+z879o6Lx//rj//T/MTH95OP/9PT8ubj/AADj0cTR/+3b6drx9O/W9ORYTpHNAAAEfklEQVR4XtWa23KzOgyF0cFHkvT933Y3wa4QQYPr/RPqdUenhnwjLUUSmYYRs6tinqaQiACAvoVhIAp3q3KOHwmyFsQhMITi5pgf5PNWfoho3ETMHARDBGNxOGZOeU+kAqgOMLyFD4jC3+TIuAZRAWT2u+iewkUcjr8vJa+Alg+PSAQ52iCPbIniBT53yyVUjHDALiCYTflwFQcpSyiZFqH8F0g0R/TCcQjinOOV16HKX0HiKocKCDTB18sC/yVOCwk+XberZ/Vnwt+AxGIHd1vfLIDUuw+IdUBQAtJxSNstVhL6oNVZZ1bqSUcqkSqhkkLuPwhSL4ttYzu9HEKpZpowf84iTmc7TD1ej9IjsMq5HKTDdq5Uu+fTEgG8qh2lWAF4Ub0MiPM832/O8XL9OuLLiSOL0K9AgiSQAYI7cwJv5gTAdbSdThFauqdJnaF4nO19XrdB3hs69HkrCG8pwuwrCDMjGF2Dne19XhcQjZjf5p0AeUc+bUCYudzb7fYPEA+yferyugnij8MhoZN7O2YuaTszP4RDRKd43W4TCkd9VFJjCxHIdeQfEHeTdhT5sR/DeIrXBUTHitSYIBwwF+ZINURUQJ4cTkCkkgPGZ7mrIU1lU+LcnVYq1EAbpQ6vC2K+qz9XDj+r707d5jxju/JF5YC707cmSdfcIGrxup1ZBVzTwdf+V04J3eKmAgA1VYx7C/KBsMXrZvFNe2MCGN3qvC4L9ebelxAKSNqCQAtIaPG6NdnAbpTibu3TIOWvRf6+sbOA6LWBLd/mdVcDonvfec82YToGkTgJogkScoPgf/Xwu3XsfabxqjDUI8JB+4/ll9zta/4WFtWn4Eahxes3xZF8Vk7X1D5ajbLXHCFXgfHYg2y3ZaeEcEiZz/BlPJ61oZLEbw2I0laZg5M9sTbOxsyq2ixCTFTQhGP7hBzZ6c9bj/iwCaz0Im7RDwi8FHrHXL2bOzIZPKw0lAobkMTRSQDVZOa7utj2veTBFypJAXDrFbGHH3njAOtlYersYv/Jbo5CiZ6E76DKp7cSAMcB6e/hNQjYGPptxWE7BGGzLZTqSyfM6y17eA8pKmjVDpmLe3swizZDfw+vsz5ssl5eN7aDeCDsWHueM68frYgdiwlpLcTYuWU7a15vX8eG9i3bwYET5vWmJ6h1XfsB/8ndXBdIf96et5vrAGl37RVe7wexvY7Xet12YejYqF/odfu/U6NrJx3uxlPhBK8b8YMO117rdVmr6OkpjeR14RaSKFv0Tte2nwr/lt7pgY9WrzbYKQikYLn2Qq+L9JYqeOl25zsv5sTy3gqNbvyDXu/9vY4WfsLr/fTtIwn2e91umPvp+0nwb3pdxBoFwQL5q163UchvIYBSOMHrZ/8Q97XMInhKZkRLnV4fTLbXB5M9HI8lu/kbTHYdHU66vY5+zMyyB57BZM87Y8j+oe+YAZF+geWt10gOcYvqUpleAul6aCxfGO/XB+CwRrUBODrmG4/TmCDTBGsMiqM1V1J1vVDgNJSYy0yzCJGIEH8H8R86J7+C+8H8WAAAAABJRU5ErkJggg==)","url(data:image/jpeg;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAAA9CAAAAAD94GjJAAADQklEQVR4Xt3awW4yMQwE4P+heLq8VJ7HZ5/nOtf8DS61QIFJCt0I5kKlKM1+8tpit/3XLiEBd7cedwfYVG63kG1/WpAIt0H8PosYb8G0Cp7Bi0nJGcRHqNT8GsWrQ19L4ggijpM7ZGD2d6Rm6ya5Q5foWJI26R2qRAeTtMmliaJEf0ty01kmmSjRfhKWSRAl2k5y0QxyR248ggTLeET0RpDWu4lmh5HcAbJlCElyAPzZROi5DDuKRMq5dHsm2WQNMFg+inQvy2dStN9+EkS3q+YfcHeTKEiqTKJK2EBqgiR22Hgtq/4eJH9A4u0A3X3j4QlSehOwh4Rfk/yccaflQ+XuIc550t1nb2RBDiHpiazDCwg9Q7GzbSPR1o9EiHAOR+Rw7iHBfnffdVAtp9OpfOXxLs8cQKKbrY9wdpGjgyJtluR/QYI9SlsoUj1NkvATdx5NmjsQWSTrQFVbRtBzNIkr4w5fonoNsO+CfVu/f4yOc++fxdrtQrRk8QvAajlvsBaJX1fLKRjlfGp8SpLPipJUNOk2UAs/HZr6SJDqComzjRQmlG6qWCRVtVBPpUSdxqRYwJcRkmSYFQWpA84qihsPjdF3/aOohUgNQ5LKmRwWno8qLxkPud27qZwi/pBkeYXdLBauCp56XnVW3H9TJIMWJQm0GioqkiVJLbQYD9ckC07OhzJNMmhRmtgZHVVfSArPkJTN1JmYJJkUJSlqw1eSAlfM6l2Sd6x114XEqwDDMmmRhWiKRHKWlM01IKXQY5T/Exe6+Nre6WZdVHM+tNDZmJQyRcIdUjZTSZJ+ujDO0Xk+PFLytIggyRsvBkQdkALdlz1JyoRJUV5/PlvYkASgWwCsjYcyIOUhLUmqANCicHtM21KZ8Pge9xSJtWuqlXukFt4kyTL5VI1W4hlne0WilZKkX+Rp0WZStNIzJKhv7Mc+1UbnrZCUaAHz+tcp+QVipZeUaCspW+mJiQd77pL2v+Y3vFi0/524cV60n0RqUZK0aD+J8XwNkg/+om4Pvv75newjDS5PPAPCprKVpMOPI3l7JxJmSPw4Etqnkbx9Gsnbm5Fc33XvRmpU/yf+fqQewsX/5r8bKUIiZe4A21vmP24hqdv1SRFyAAAAAElFTkSuQmCC)"]