рдирдорд╕реНрдХрд╛рд░ "HabraCommunity"!
рдореИрдВ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдореИрдВ рдХреИрдЯ рдХреЗ рддрд╣рдд рдкреВрдЫрддрд╛ рд╣реВрдВ, рдХрд┐рд╕рд╕реЗ рдирд╣реАрдВ - рдорд╛рдЗрдирд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд┐рд╖рдп рдПрдХ рд╣рдмрд▓ рдХреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ - рдореИрдВ рдорд╕реМрджрд╛ рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рдирд┐рдХрд╛рд▓ рджреВрдВрдЧрд╛ред
рддреЛ:
- SteriaLZH lzh рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬреЛ рдЕрдм рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрдВрдкрдиреА рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ, рдФрд░ рдЬрд┐рд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рдо рдерд╛ред
- рдирд╣реАрдВ рдкрд╛рдП рдЧрдП рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкреАрдбрд╝рди, рдбреЗрдЯрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JCraft рд╕реЗ JZip, рдФрд░ рдХреБрдЫ рдФрд░, рдЬреЛ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
- рдХреЗрд╡рд▓ рд╕рдВрдкреАрдбрд╝рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рдШрдЯрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, 5 рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ: рд╕рдВрдкреАрдбрд╝рди рджрд░, рдиреНрдпреВрдирддрдо рд╕рдордп [рдПрдордПрд╕], рдФрд╕рдд рд╕рдордп [рдПрдордПрд╕], рдФрд╕рдд рд╕рдордп [рдПрдордПрд╕], рдЕрдзрд┐рдХрддрдо рд╕рдордп [рдПрдордПрд╕]ред
- рдЕрдЪреНрдЫрд╛ рдХрдореНрдкреНрд░реЗрд╕рд░ 1000 рдмрд╛рд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдмрд╣реБрдд рдХрдо рдирд╣реАрдВ 10. рдиреАрдЪреЗ рдПрдХ рдкреНрд▓реЗрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛, рдХрд┐рддрдирд╛ рдФрд░ рдХреНрдпреЛрдВред
- рд╕реНрдЯреНрд░реАрдо - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдПрд▓реНрдЧреЛрд░рд┐рджрдо): рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, рдлрд┐рд░ рдЗрдирдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рддрджрдиреБрд╕рд╛рд░ рдкрдврд╝реЗрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрдирд╛рдПрдВ (рд╕рд╣реЗрдЬреЗрдВ)ред
- рдмреНрд▓реЙрдХ - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдПрд▓реНрдЧреЛрд░рд┐рджрдо): рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ [], рд╣рдо рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕рдВрдХреБрдЪрд┐рдд рдмрд╛рдЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрддреЗ рд╣реИрдВ []ред
- рд╕реНрдЯреНрд░реАрдо рдХрдВрдкреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреБрдирдГ рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд▓реЗрдиреЛрд╡реЛ рдерд┐рдВрдХрдкреИрдб T420 (Intel Core i5-2540M, CPU 2.6GHz, 4 GR RAM), WinXP: SP3 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдкреНрд▓реЗрдЯ, рдХреНрдпрд╛ рдФрд░ рдХрд┐рддрдиреА рдмрд╛рд░ рдЪрд▓рд╛рдИ рдЧрдИ:
Steria.LZH 100
java.util.zip.GZIP (рдзрд╛рд░рд╛) 1000
java.util.zip.Deflater.BEST_COMPRESSION (рдмреНрд▓реЙрдХ) 1000
java.util.zip.Deflater.BEST_SPEED (рдмреНрд▓реЙрдХ) 1000
java.util.zip.Deflater.HUFFMAN_ONLY (рдмреНрд▓реЙрдХ) 1000
apache.commons.compress.BZIP2 (рд╕реНрдЯреНрд░реАрдо) 10
apache.commons.compress.GZIP (рдзрд╛рд░рд╛) 1000
apache.commons.compress.XZ (рд╕реНрдЯреНрд░реАрдо) 10
com.ning.LZF (рдмреНрд▓реЙрдХ) 1000
com.ning.LZF (рдзрд╛рд░рд╛) 10
рдХреНрд╡рд┐рдХрдПрд▓рдЬреЗрдб (рдмреНрд▓реЙрдХ) 1000
org.xerial.snappy.Snappy (рдмреНрд▓реЙрдХ) 1000
рдЗрд╕ рддрд░рд╣ рдорд╛рдк рдХрд┐рдП рдЧрдПред
рдХреЛрдб рдореЗрд░реА рд░рдЪрдирд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рд╢реИрд▓реА рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╡рд╛рд▓ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдЬреНрдпрд╛рджрд╛ рдЪрд░реНрдЪрд╛ рдордд рдХрд░реЛред
рд╕рдордп: рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдПрдХ рдлрд╛рдЗрд▓ рдпрд╛ рдмрд╛рдЗрдЯ рдХреЗ рддрд░реНрдХ рдпрд╛ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдФрд░ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ []ред
start = System.nanoTime(); byte[] compressedArray = compressor.compressing(arrayToCompress); end = System.nanoTime(); resultTime = end - start; start = System.nanoTime(); compressor.compressing(fileToCompress); end = System.nanoTime(); resultTime = end - start;
рдорд╛рдк рдиреНрдпреВрдирддрдо рд╕рдордп [ms], рдФрд╕рдд рд╕рдордп [ms], рдФрд╕рдд рд╕рдордп [ms], рдЕрдзрд┐рдХрддрдо рд╕рдордп [ms]: ArrayList рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рднреА рдорд╛рдкрд╛ рд╕рдордп рдорд╛рди рдорд┐рд▓реЗред
private void minMaxMedianAverCalculation(int element) { ResultsSaver resultsSaver = (ResultsSaver) compressorsResults.get(activeTest); ArrayList<Long> elementsList = new ArrayList<Long>(); for (int i = 0; i < TEST_COUNT; i++) { long timeElement = resultsSaver.getNanoSecondsTime(i, element); elementsList.add(timeElement); } Collections.sort(elementsList); this.min = (elementsList.get(0)) / 1000000; this.max = (elementsList.get(elementsList.size() - 1)) / 1000000; int elementsListLength = elementsList.size(); if (elementsListLength % 2 == 0) { int m1 = (elementsListLength - 1) / 2; int m2 = m1 + 1; this.median = ((elementsList.get(m1) + elementsList.get(m2)) / 2) / 1000000; } else { int m = elementsListLength / 2; this.median = elementsList.get(m) / 1000000; } long totalTime = 0; for (int i = 0; i < elementsListLength; i++) { totalTime += elementsList.get(i); } this.average = (totalTime / TEST_COUNT)/1000000; }
рд╕реНрдЯреНрд░реАрдо рд╕рдВрдкреАрдбрд╝рди рджрд░ рдорд╛рдк:
private void setStreamCompressionRatio(String toCompressFileName, String compressedFileName) { ResultsSaver resultsSaver = (ResultsSaver) compressorsResults.get(activeTest); File fileToCompress = new File(toCompressFileName); long fileToCompressSize = fileToCompress.length(); File compressedFile = new File(compressedFileName); long compressedFileSize = compressedFile.length(); double compressPercent = Math.round(((double) compressedFileSize * 100) / fileToCompressSize * 100) / 100.0d; resultsSaver.setCompressionRatio(compressPercent); }
рдмреНрд▓реЙрдХ рд╕рдВрдкреАрдбрд╝рди рджрд░ рдорд╛рдк:
private void setBlockCompressionRatio(byte[] arrayToCompress, byte[] compressedArray) { ResultsSaver resultsSaver = (ResultsSaver) compressorsResults.get(activeTest); long arrayToCompressSize = arrayToCompress.length; long compressedArraySize = compressedArray.length; double compressPercent = Math.round(((double) compressedArraySize * 100) / arrayToCompressSize * 100) / 100.0d; resultsSaver.setCompressionRatio(compressPercent); }
рдХреНрдпрд╛ рд╕рдВрдХреБрдЪрд┐рдд рдерд╛:
TextDat_1Kb.txt рдХреБрдЫ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рдХрд╛ рд╕рд╛рджрд╛ рдкрд╛рда рд╣реИред
TextDat_100Kb.txt - рдХреБрдЫ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкрд╛рдаред
TextDat_1000Kb.txt - рдХреБрдЫ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦреЛрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА, рдЬрд░реНрдорди, рд╕реНрдкреЗрдирд┐рд╢ ..) рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкрд╛рдаред
PdfDat_200Kb.pdf - * .doc рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдФрд░ рдлрд┐рдЯред
PdfDat_1000Kb.pdf - * .doc рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдФрд░ рдлрд┐рдЯред
PdfDat_2000Kb.pdf - * .doc рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдФрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдЖрдХрд╛рд░ред
HtmlDat_10Kb.htm - рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдкрд╛рда, рдлрд┐рд░ рд╕реНрд╡рд░реВрдкрд┐рдд htmlред
HtmlDat_100Kb.htm - рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдкрд╛рда, рдлрд┐рд░ HTML рд╕реНрд╡рд░реВрдкрд┐рддред
HtmlDat_1000Kb.htm - рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдкрд╛рда, рдлрд┐рд░ HTML рд╕реНрд╡рд░реВрдкрд┐рддред
ExcelDat_200Kb.xls - рдПрдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ () рд╕реЗ 0 рд╕реЗ 1 рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
ExcelDat_1000Kb.xls - 0 рд╕реЗ 1 рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ () рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
ExcelDat_2000Kb.xls - рдПрдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ () рджреНрд╡рд╛рд░рд╛ 0 рд╕реЗ 1 рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
DocDat_500Kb.doc - рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдХрдИ рдЪрд┐рддреНрд░ (рдЕрдВрдЧреНрд░реЗрдЬреА, рдЬрд░реНрдорди, рд╕реНрдкреИрдирд┐рд╢ ..) рдХреЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдкрд╛рдаред
DocDat_1000Kb.doc - рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдХрдИ рдЪрд┐рддреНрд░реЛрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА, рдЬрд░реНрдорди, рд╕реНрдкреЗрдирд┐рд╢ ..) рдХреЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдкрд╛рдаред
DocDat_2000Kb.doc - рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдХрдИ рдЪрд┐рддреНрд░реЛрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА, рдЬрд░реНрдорди, рд╕реНрдкреЗрдирд┐рд╢ ..) рдХреЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдкрд╛рдаред
HtmDat_30000Kb.htm - рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд░реВрдкрд┐рдд рдкрд╛рда рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдПрдБред
III, рдкрд░рд┐рдгрд╛рдо: habrastorage.org - рдРрд╕реА рддрд╕реНрд╡реАрд░реЗрдВ рдЬрд╛рд░реА рдХреА рдЧрдИрдВ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ 1800 * 615 рдЖрдХрд╛рд░ рдХреА рд╣реИрдВ, рдХреНрдпрд╛ рдХреЛрдИ рдпрд╣ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╡реГрджреНрдзрд┐ рдХреИрд╕реЗ рдХреА рдЬрд╛рдП?





...
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдХрд┐рдпрд╛, рд╕рд╣реА рдирд╣реАрдВ - рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрд┐рдпрд╛! рдЬрд┐рд╕ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ! рдлреИрд▓ рдЧрдпрд╛ - рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред
рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рдЕрдЬреАрдм рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдРрд╕реА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдирд┐рдХрд▓реАрдВ, рдФрд░ рдлрд┐рд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рджрд░реНрдЬ рд╣реБрдИрдВред
рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХреНрд╕реЗрд▓ рдЯреЗрдмрд▓ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рддрд╕реНрд╡реАрд░реЗрдВ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореИрдВ рдЙрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдкрд▓реЛрдб рдХрд░ рджреВрдВрдЧрд╛ред
рдкреБрдирд╢реНрдЪ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдЕрдВрдд рддрдХ рдкрдврд╝рддреЗ рд╣реИрдВред :)