ASP.NET

["q0n4n2g0d3m1l0s2_4q2v0*0|querystring;application-beginrequest;response-binarywrite;global-asax;request-headers;image-aspnet;aspliteral;master-page;page-load;httpcontext-request;global-variables-aspnet;asp",["ETXGKR","JEICRILAPILCKABEQABEJC","OCOYGDHDADOBPGDADHDSTUUUUTTUUUUOPGDADOPGDADADOPADADADADADOOPGDADADOCOCIBWCSTTUUUUTTUUUU","twstr.","ASPX","ASHX","MapPath","Query","AppSettings","Begin","BinaryWrite","Global.asax","Headers","HtmlLink","Image","IP","Literal","Master","Page_Load","Precompiled","Razor","Redirect","Request","Response","RewritePath","Trace","Variables","Response.Write"," adds string data to the Response buffer. With it, no intermediate conversions are needed. Developers often write text with Response.Write. We improve Response.Write calls to be faster. ","Tip: ","Use Response.Write on each individual string or character. If possible, avoid all concatenations.","First,"," here we will assume you aren't using string appends and are already using Response.Write. The following code is the version I improved. It walks through Dictionary keys and is considered the slow version. ","Version A: C#","\n\n","//\n// A. Slow version (1568 ms)\n//\n","foreach (var pair in _diskDictionary)\n{\n ","Response.Write","(pair.Key + ","\":\""," +\n pair.Value.ToString() + Environment.NewLine);\n}","Even slower version."," I tried eliminating the repeated Write calls and simply using a temporary StringBuilder. I varied the capacity of the StringBuilder, but this next code worked well. ","StringBuilder ","stringbuilder","Version B: C#","\n\n","//\n// B. Slower version (1614 ms)\n//\n","StringBuilder builder = new StringBuilder();\nforeach (var pair in _diskDictionary)\n{\n builder.Append(pair.Key).Append(\n ","\":\"",").Append(pair.Value.ToString()).AppendLine();\n}\n","Response.Write","(builder.ToString());","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","Faster version."," Here I made a couple changes. I split up the Response.Write calls to send one argument at a time and not concatenate anything beforehand. This was a substantial speedup. ","Version C: C#","\n\n","//\n// C. Faster version (1474 ms)\n//\n","foreach (var pair in _diskDictionary)\n{\n Response.Write(pair.Key);\n Response.Write(","':'",");\n Response.Write(pair.Value.ToString());\n Response.Write(Environment.NewLine);\n}","Improvement."," Next we see a further improvement. I changed the newline to be a simple '\\n' character. Environment.NewLine is \"\\r\\n\" which is twice as long. This changes the output but in this case it didn't matter. ","Version D: C#","\n\n","//\n// D. Fastest version (1318 ms)\n//\n","foreach (var pair in _diskDictionary)\n{\n Response.Write(pair.Key);\n Response.Write(","':'",");\n Response.Write(pair.Value.ToString());\n Response.Write(","'\\n'",");\n}","Benchmark."," I ran the above code fragments 20,000 times each with a dictionary of 180 key-value pairs. The output file was 4 KB and I used Response.Clear() to erase the buffer each time. The figures from the experiment are available here. ","Response.Write method in ASP.NET performance","\n 20000 iterations.\n\nMethod A: ","1568 ms","\n Concats string parameter of Response.Write.\n\nMethod B: ","1614 ms","\n Appends data to StringBuilder than writes that.\n\nMethod C: ","1474 ms","\n Writes each part of data individually to Response.\n\nMethod D: ","1318 ms","\n Same as Method C except...\n Uses UNIX newline instead of Windows newline.\n\nMethod E: ","1200 ms","\n Stores HttpResponse as local variable.\n Only accesses Response property once.\n Is an estimate; was taken on different scale.","Improvement 2."," After writing this article I discovered another improvement. I looked carefully at the Response type in IL Disassembler, and it is accessed through a property. Properties are slower than local instances.","We can cache"," the Response object locally, and performance improves by nearly 10% in my benchmark. The numbers I measured here were 748 before and 671 after, on a smaller data set. ","Version E: C#","\n\n","//\n// E. Faster than fastest version\n//\n","HttpResponse r = Response;\nforeach (var pair in _diskDictionary)\n{\n r.Write(pair.Key);\n r.Write(","':'",");\n r.Write(pair.Value.ToString());\n r.Write(","'\\n'",");\n}","Discussion."," ASP.NET works with the Response buffer. The best approach is to pass in each separate string. This is faster, uses less memory, and even simpler to read. I noted a performance degradation when not calling ToString on the ints. ","Note: ","I have not carefully investigated this. Response.Write may have slower code for ints.","Finally,"," let's look at the Improving ASP.NET Performance document from Microsoft. It tells us what we need to know, but here I provide benchmarks and examples. What do Microsoft's guidelines tell us? Avoid strings. ","Tip: ","This is pretty obvious, but you don't want to use simple strings to build up output. This would involve the + operator.","Response.Write internally appends strings to a reusable buffer so that it does not suffer the performance overhead of allocating memory....","Improving ASP.NET Performance: MSDN ","https://msdn.microsoft.com/en-us/library/ms998530.aspx","Summary."," We looked at usages of the Response.Write method for appending strings to the Response buffer in the ASP.NET Framework. You can call Response.Write with individual string arguments for the clearest and fastest code. ","Review: ","There's a good and a bad way to use Response.Write. Avoiding string concat operations is the good way.","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,iVBORw0KGgoAAAANSUhEUgAAAL4AAAB/CAMAAABmHoi+AAAAwFBMVEX///+Dblr8/f05OTlMSEX/zJn+/v7+1az4/Pz6+vrWrYTmuYxrYlpdWFTy9Pr/zZuioqP9/v7En3r1xZS1k3Jzc3Pw8PD83LycgGbt+Pbt8Pj/6NH/8uX/z6Coimz19fX/4sb2+Pv/7Nr/+PHu8fj+2rW3t7fR0dH+0aSJiYnz8/P/zpz//Pnu+Pfz+vn049L059P338bw6ebz69vw7+j+/v///fvi4uL8/P7617Lu7/X+//7u9fD69/Ty5t3///6T4wwcAAADtElEQVR4Xu3a15LaPACAUTX33qm9l+39r+//VkHJOsyCQwQGW5rou+DOM2c0QrZlgWqSvY7Hnc6o3R4Msqm26Hqe1v5fFK7W9ZTDMm65C09haFQzuTPKuWvljLRa9e2uUq51nfqBUroa9R1FaP5UbH5XbL4i+ZIv+ZJ/3SRf8iX/fei6k9Y2IfnDFk1UvtsSmW+0hOa7QvNfJkLz1T+Hb8UQ4m0Q9kzh+BbEu2LR+BbBAvMjgkXmx1hoviM038JfM8Xim7nbDk1aJBY/zPmWkLetOOcrdfElX/zJ48QxhA6OxVt5xF/35V1XPvOUf+JsCPe8b+NdMBSLTwsbkGACYRxG8lW9Wr7kS77kS/6GntL6cexpqi3Wa23ENX+TnyrLvp/ZUw7LOOVv2vmZveONuOSPFwpbGo/8DateWfPIHyjM8cjXLsw30rf5fDbz/WWS2A7B2PGvyfdK8tWf3CXlEnxYckX+udfN6fA6DsEM+bzx+wk+IYczPkrwSV2S3y3Pn+H6+NPyfLtGfqc8n9THH4DyfHwu3ys78dugTr52jtnrLrRpNhi0R51X8Fu+RXeoYSO8Bv+OlfvxkT083N399/iY/rW9DhQVBEjfN0KSAxpX4LcyFu5eBXy9+dm+Ee+yrsBv3WkeA/c4P7htMvDjy/HL9lV/0/w134GNOCY88/XmroJ/bgM6XI/+zRF+eN7kIbDX64Vx3XwLH+OrKkLIMIxDIFRoZt38mALsCBatnEZ/tVqlNL75xC78wJ3SuObnU/9svg1hnfyIlOFHEf3pXZzvMvHz43wEhlYPxuGp/Dx4af7wCJ81dn50Yb77UilfsS/Jnwypvgp+9PlFs1GaP3Fddzg0dKRScEV88/NW1zuZP5n8ilspv8fIz7nvB1wO+e6OG+xjuOJbhStnaXHFK4/QfAtzyPeY+ZBH/oKRH0HMI//hGN82TdNSFMsMGwRXyF8zD/7zIb+4Kvkaq/4p5ZF/z7Rrpw3+TbnkN7MCL90Gm9JtsPtRZzzegG0Gp/zmveat8127+6en5+d/mrt0SueaX1x5vuRLvuTbYvNnQvNtgzO+fYo+6QPO+D4LmxDHTpb+HID6+KiQnyZFXspNlkvfn83m8zcjB9TIvwXF/NR39rmP6ddQ/fyboJBfXGX8W3Y9j3x01Lzt9nsUwCMfoJsirq7rCKEgCP7OzZzyQaAf5fLEL5/ksyf5kr9Sheb3AV98oQcfoNPGXgWc1WcY8n5/aBgIqYC/0KqQS70qECGjzwX3G1JcKg3+uVGcAAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABwCAMAAACAaqqiAAAAMFBMVEWj05zv+O7o9Ob8/vze79v////j8uH6/Pnr9urg8N70+vP3+/bf79zG4sHR6M61269duYTTAAACd0lEQVR4Xu3a646bQAyG4fg4ByC5/7vtFqlqtsV4UcvaI817Bc8P5wtBeXx38h/KhZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oid7wvTHQm3xqCPSrJET75uHQW5Hh0E+R4dAqw6G3IqOhty6SHe2T86OLDIh+joh+jYh+aGK0/5hUbkED0h2T13cibs870NR4hRvQP7H8ejxuQVf+SPtVtN9OvgddVt7Tchntdxca+VeVRkF3/l2DQdDK72kfAQ38R1jSo6nxX1VKjq58UIPU6MLH6ZIYjWyFJSu6s91aKSda+azWM6KBnXRJh6bGbkjJ0Mh+3CAVeuGvpT0RWvmrYcmC7nyhSinQ1PhKDTKgK19Ml3B0WflyWILRyEYK0E5OOwhtz93yEYkI1ZPTDkTrEejteJCNMA4Nhx5/xLlRCNqeu+qPOINc0uJel8/h3vMK2p47RHRGXOUSGuUkvIYubAXOM2uPQyMbNZI9MswoYejOVuCMeIlDKxup88xaJQwNbLV4cxeGpsZG1fkUgoShK1uRN3cx6H+buzg0HoOZG52POMb98aob10q1e3MXh1Z7Fs5HvEoYGuxr9uYuDG0MA5CIO3dhaHTfNFZr7uLQ0Nw3jV35oCUQLVRX73VMNeYuDH36668BGQ9LawlGiyx69qZRjbkLRovYp41gzF08WqjyhbpkQBunbaSSAG1sm9mSA/122n5VUqGFkN0aJUPv8+cEkg4t0pvzKcyIFoKV7Xo6tD9/KOnQ/mmXdGh//qpkRdvf7I3Sof3TBsmKtr/ZVdKh/dPu6dD+aaNkQ/unvZZ0aP+0q6RC+8HKjUZDC2EXox88iqN9rB8RzAAAAABJRU5ErkJggg==)","url(data:image/jpeg;base64,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)"]

["url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAABFCAMAAAAIJEiLAAAAGFBMVEUAru+g2Pf///8xt/BpxvPS6/vp9f0TtPCISbH1AAADCklEQVR4Xu2bwY7CMAxEPWM7/P8fr9baaNSG0lIQK6q8U2vhxk9ODD1gJBE3uwS3AEkjwy5EkCajqzgZ7GLAwi5G2M2uxceEJpPJZDKZTCYTzzCBsH8kAMCeA0OOJykNkLDP4iZAMu05UjkyYnMZveyEX3QJf9iVJN6npIC6FNTtWfSI/aeRfLsSpCAnup0nyF4nPqwkAwwV5ctKrS9G4qNKPtT/+nEK9t44/0EJ2mUiFTyr1EoEdSGlQGYi+t0vpRSFS6k+CZgwh5K1FJCJRkrJ7zYk7kQdiCeUUIskCSlFY8EWmiJCpy89WaRLiEruoLEjJfRNLxTesxRjdpB0r4ueB4p4rJTrQj0poHXuKG0UGsOcapXnh5WcJEDSajnNQWQJ+LaSUBG5Dsooc6EUW3W2laqziMNKlqVElFJ/ZLoavjkeCrhBn0OPRbm11VdeSknjZXfnPa0EsjUyuhLU5bp8rFQRnfqm5HIKXayVsmeLjfZBzT2mFCyslLSUtvUjJSwqVV810BRbKSkslBirOuHHvyb+Th/qLvtSUewqtVWl6rB6V7EYlRReo4TnycWaySqRgntKeU/JTNGm2FElzYfzSlFr9p7FaSVdKMozSvmykpPE+5TaQqmbfXbjWWoy6XCKUxtPUXxUqWmBrqTSTyvFYuItYu3cxItM2DE4KLk2zxmloLwxDnFQOUpaUwnjC8dZpdh+gMrZVjL2ZL2gVreaV4aUtCHF+GD1lvQTStCrE5kIiwio41nh3yjivpKqBiA5/IWS42+8ODLDWeC8Uq0lIGPFNpU82VFMAbnrYO3+HlJ393GSGJUMg1KRO0qDU7oVUJ5yNDfExhnzPKwUoxJWr3HMUAL2lAq0ITNaTxveanPndUmxtBeJACL8bvRQri9DgNIetcm1HYdp+w3kOMmgkHBW8BsInbhHX0Ge39EkGeRDI0DD4YucfLgTLOD2VU7QTRkNSgj7JkAogMHIIsK+DSwEZPR+JpPJZDKZTG7XEwq7GG6wi4Er/n+J7VJO0Wgk4Vf5L6CD5A+G4BPe8JfzjgAAAABJRU5ErkJggg==)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAACrCAMAAAB44HFdAAAAwFBMVEX////4/fr19PWMjIzP0M/9/Pzf39/p6un+9/m1trXq+fT2/Pn+7/Tw+vZfX1/78vb6/fvs+PP3+fj6+vnz+/j1+fjq+PP++fv+//73/fjt+vX69Pf39vf//f7//v7q+vT9/f79+en+/ff/+/3h9+3k+fLn+fP/9Pj/8/j+/v7+/P3o+PD5/vzt+er+/v/p+fHx+/D9/Ob1+/H8/e3+++/89vn++/D+/Pbj9+/+9vr7/fn+/vj9/v3//vz9/////vql2+EKAAAEpElEQVR4Xu3Y146sSBCE4Sk87cfbY9Z77/37v9WS0BULRagFOjvSZJH/zfTtp+5IwZzxXr9zdzP6m/Y17ez5MjrL6EY3utGNbnSjG93oRje60Y1udKMb3ehGN/qzI/+ivT+j32n303LSlzQ+g89o+ujOLZTu3ELpzi2V7pZKd26pdLdYuptEb0TR0d1kuhQT3U2lo1jojtMP/TwdRUF3jH5gvR3q4qQfOF3q+5XT3Sx6qF8OneD10t0sOsMviI6WSEdLpKMl0tEC6Sg2errb7RJCZ/1/9H9oP9Leo31P+4b2xvfQtW1b1w09Wwfl0mVYnuefj+O2l0zfHulFQ68ZXRrRc710yEE/b+hp63XI5Sik5/rpW09fy9jhBp3h87ZY6FfrduyFI3QEepc+OpGDngVPOHkQ6G1R0K8aenvnoAad2HOfYjrkQl/LnQMcdGLPUSR0J3fuENBJ8dGda+9cQGc1dKSdftXRMxl79HTIQXfOlTJ2Qj9ZHHQ3ohe7rizPizrdpXUSGf1Koi9v9ZGeFOmuq6B2/XSRZn26B9c7VMRI737fdUAPS+OkJ8HYS+/NyrxMsfugKOiH4KEm6w/cn7w6TnotzvGV64j4xUdLz4KpAxvtty7y8M4NsGW8W/fYlDzQSL3hB02j39F+oXHkd7SvaB+G/Sp9JH0srVardvTCv2iTO3fhA/ZS8sNvPt72qqrq+OkV7UXQpR5dGtHFl3k6sG1++LHSM5m2pwPb5ocfK70UqqcDK/nhF7rpEqcLNw2mngVTj42+7f3Ik+HUkz49jYYudtBx59jUU0xdGR2douPOEXqCX/+IfquSjrGDnmDsJb9y2unSmI6xn3qgiYi+CuhiLEYPNKCXAb1STRf7kJ4Npw66lKalPjofe0gv/J3D1LF1nD21dP6Lv74YPtQUOOl4hMf2ydSV0ls76GIMrpxU0Gf4SitdAj0YO66cr6yb9afZpU46H3tnvxb76OXtkkbkiugSoePlLXI6brzYr2GfQGfySiN91dJhx8tbdHRuBx137gSdyhXTpdGd43QiP0Wf/8/on2k/0L6lfUG7ubk5Pz9fPbRtfU9d/uWth/xp0GNTVf0mfSLJn64PaN74wugS6MeOYz/SIe7L914uQa6IvgroyL+8SVS+J3IldPq1J0+od+cYXOiQ66VLI3rx350jctAhV0aHHfSeXe5c96nvhnxP5Ero9GtPena5c6AHcInKP1VDD+0J7P3AFjjCiYuETu1ChhtRuQo6tSddlL4PYnJtdNiFzvBgDyJyPXSsHSUJw+9puHB66bCDjk7SiVwJndoTGqcTuS465j6fTuDK6LDPo2+IXBcd9pn0zYbIldFhn0PfNBG5HjrswE+jb9oIXB8d9kn0zTHIVdNh5/SBG0Gulg67xOlgDwL83el3ND6DP2j3tDXtgvZI29DwNDdoEXTIl0eHVg3d6EY3utGNbnSjG93oRje60Y1udKMb3ehGn9GscfD+pOW0W1pFu6W9ooHz4uhGN7rRjW50oxvd6EY3utGNbnSjG93oRje60Y3+/L2eEecoQBrd6EY3+oSMbnSjG93oRje60Y1udKP/C188AzCxaixPAAAAAElFTkSuQmCC)","url(data:image/png;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAABVCAMAAAAoqRvFAAAAMFBMVEX///+at8G00NBtlqnG5Np5nq+CprTg/urD09nx//WNrrrp/vD3/vrV4eTb6ujr8PJq773sAAADa0lEQVR4Xu3Z27LaMAwF0Ejy/ZL8/9+2pLWHg6IBE/sQz7Df4G1ZYQvD8sHQ/7jlRL6AL+AL+AK+AJwf8AV8AV9ARiCiAG6bEbChphpM0wE0/UiYRkA1kwpIipsdQGlugDyCjKCJSAO6dC0AICLoCoAjQHL6HonbZQCwersHCkAvPJthc7oKAG2JKQJ+uo548HIALICVnb++YF1xgCqA/AgIdBS9XQxgpaN1dBycBWDKkeN6GxTWEaSLAKL/GxmQC0w9fljyMEB2EIjIADi3PgGUY/QSoJw42JIwuErdQ2kbfOlCIwFCHUBJJQ0BbLwz4CWAFwC1XVlfhRGApOlNQDoGrAVgGYBGAAI1AgQTByCiuwURBgIc9QY44hkIML8JCP0BmWo04C0AoHEQAITePhGkgw1r42AA7+3zT5CyvwBAsbfPX1PsrwDk3m4Mr7x+gFwAlqf0dn+AGgBQDBDF3j69BfZz97fEGK0/A/DVdQgwowBeMLYDSjEYBvBib58HpKUbAAosrAwg9fZpQFz6ARTVBCwBAGM86+1uAP8UUE9ReKsmWUNCnvQ2z5YdQtjBAG6TAZR6AlACNPV2RmBlxQh12lsPQHUFAdDY2zw6S9/l1q4AqwVAa29zwSYsMtcR4K1dgwBo6m15Y/ClEzoC0g2FbGEBuqbeFqa4/QSEOoKTAG5VCDtCAyCqvTWbehte+TfCY5V1/BPCWyFNvf3vRp2z2hOOn6GkqEaDu4Vv9vZEAdDU28nHe7zhD7u8dGA5GQnQ3tv8x3y2dEYAUhQArLfPAOSlAyM+B9F71tvnAdEq3RfAn+EYvU/pvd6uUVAA7KCU6Q/gae/tna8QAQLd52jpPAxBY39Ae29774qWAaSlY/adY23sD2jv7S3QYZ4vnRGA9t7eNL0EWOJowJu9DfQiII0GvNfb670vADioAC4YD2jv7TqokHdQQg6Ql47vDWjvbSiNGP+GLTJx6ew7Z+mf9t6uNL6JPxi5t0UAXgcg9/YEgPberl//rwFo7224H0G0CouI8hUFUa5R0gB0H+0+AGjvbUVyPgBo721rhgLGx6rZAey2biYDPFwVQdVbpZkAUC+UoEkDuDXt+29FAENwbQAvqhhZZU2QZOUsU2R6QJodsPiZAXwGMS0pTgHgF8UYfaqvo7Xxg4A/SSVOouNrVk8AAAAASUVORK5CYII=)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEX/6Nn///+VlZX29va5ksB5AAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/png;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEXv2f////+VlZX29vYeLcrOAAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAByCAAAAADMwOSzAAACe0lEQVR4Xu3csY7kMAgG4Lz/86Wkp6ZAokDy6RTfodVsTDSaxPy7/uux9a0LZpkEb20YNzNVEWYmItr/hYiYWcS8Tcw2cKv8DTPtoxCzqFfC+wGXgCchYlGvgDfp9MBd/xNsIj7otL8XHwC8x14Sq04/Yine4tRvwEvP6ypqPXp+dgneY+nbaZPwHscOh7eww+HDjoL/uJ1m4D3scPjYFw8fawDxUWjw8LErFP7TB7/z0/jYFA8fB4+Il1iQh47UwF//fvrfLPV/t0WEj+52Ev5yjWc96y/MNNrdR/EX6yRZuxb3Z/Ge10lu1/MsPm9auZXFS09iL4n3DE+tLD5vQrQsPi+U1ArjJcELAv7Og/eeAT4+cor3r2lbVPk7Sk30ODeEt3R/QcZ7YXxWbKgB47kyPis2goy3ynhP8K00frw9lcbbD8bz3fiFJ0S8jvEyCb/wioy30nhZ+Kz/Mz3CPa8S0h7hI9+AtMeOeIb3cBRswGO7UviFfwO48Au/8Au/8OhfUgu/8EkzUhqvNfELr8h4+cV477EuGvSw0sPnPaz06BHbDOJHp/UrMf6TkYVfD9RagndkvCI/vpfSeAN+9yDbn0rjPdnfEPCC+JpWS/BUGJ8PGWldfH46XBifzy1oXXw+qkOF8dE1wr2Cful4uC7epQdu7OLimBRpRfzlmkDiw1kjNRFmmjehto9DLJZNeT2P1zfG66jKbKAjDzbGCkS8Iw/zxhJAfGyLiI9aj4iPRYg3ToQeEB87EyLepQcLnyzEwIceER8VEwT/6fu0JuKDzwSA/yifWGbhIxb+y2wWm9DDJnc+UtE7HwOfXOTB/KX1o37bppq3efkDT4lpi2pYKzIAAAAASUVORK5CYII=)"]