using System;
using System.Security .Cryptography ;
using System.Text ;
using System.Collections .Generic ;
using System.IO ;
using System.Linq ;
using System.Net ;
namespace nboard
{
class Program
{
static void Main( )
{
var roothash = HashCalculator.Calculate ( new string( '0' , 32 ) + "{Welcome to Nanoboard}" ) ;
byte[ ] bytes = NanoEncoding.GetBytes ( roothash+ @"Свидетельство на товарный знак выдаётся в РФ сроком на 10 лет. В дальнейшем оно может быть по соответствующему заявлению в регистрирующий орган и уплаты соответствующей государственной пошлины продлено ещё на 10 лет, и так неограниченное число раз[18].
Чтобы товарный знак приобрел известность и признание, требуются значительные капиталовложения и, обычно, значительный период времени. Поэтому в интересах каждого, кто стремится использовать товарный знак, быть уверенным, что ему предоставляется охрана как ценному объекту интеллектуальной собственности.
Это зависит от законов о товарных знаках, однако наиболее общепринятым способом охраны товарного знака является его регистрация в Реестре товарных знаков, и большое число стран ставит эту регистрацию условием охраны товарных знаков. Сначала знак должен быть зарегистрирован, и как только он зарегистрирован, он охраняется, и его владелец имеет право воспрепятствовать другим лицам в его использовании.
Однако регистрация не является единственным способом охраны товарного знака. В некоторых странах также охраняются незарегистрированные товарные знаки, однако это менее надёжная форма охраны, поскольку незарегистрированный товарный знак не защищен до тех пор, пока он не приобрел достаточную узнаваемость и репутацию на рынке, на что может уйти значительное время после первоначального выпуска на рынок.
Если вы начинаете предлагать на рынке ваши продукты под новым товарным знаком, о котором никто не знает, этот товарный знак будет очень уязвимым. Можно претендовать на охрану, предоставляемую законами о недобросовестной конкуренции, однако в этом случае наиболее важным моментом является то, что знак должен приобрести репутацию." ) ;
Console.WriteLine ( Convert.ToBase64String ( bytes) ) ;
}
}
static class NanoEncoding
{
static string charset =
"?!\" #$%&'()*+,-./0123456789:;<=> @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" +
"ЎўЄєІіЇїАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяčšžćśźńŭłČŠŽĆŚŽŽŬŁ" +
"№©«»±®Ґґ°™—“”’‘…–\n \r \t " ;
public static byte[ ] GetBytes( string str)
{
byte[ ] bytes = new byte[ str.Length ] ;
int i = 0 ;
foreach ( var c in str)
{
int iof = charset.IndexOf ( c) ;
if ( iof == - 1 ) bytes[ i++ ] = 0 ;
else bytes[ i++ ] = ( byte) iof;
}
return bytes;
}
public static string GetString( byte[ ] bytes)
{
char [ ] chars = new char [ bytes.Length ] ;
int i = 0 ;
foreach ( var b in bytes)
{
if ( b > charset.Length ) chars[ i++ ] = '?' ;
else chars[ i++ ] = charset[ b] ;
}
return new string( chars) ;
}
}
static class HashCalculator
{
public const int HashCrop = 16 ;
public static string Calculate( string raw)
{
byte[ ] bhash = MD5.Create ( ) .ComputeHash ( NanoEncoding.GetBytes ( raw) ) ;
StringBuilder sb = new StringBuilder( ) ;
for ( int i = 0 ; i < HashCrop; i++ )
{
sb.Append ( bhash[ i] .ToString ( "x2" ) ) ;
}
return sb.ToString ( ) ;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5Owp1c2luZyBTeXN0ZW0uVGV4dDsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5JTzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5OZXQ7CgpuYW1lc3BhY2UgbmJvYXJkCnsKICAgIGNsYXNzIFByb2dyYW0KICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciByb290aGFzaCA9IEhhc2hDYWxjdWxhdG9yLkNhbGN1bGF0ZShuZXcgc3RyaW5nKCcwJywzMikrIntXZWxjb21lIHRvIE5hbm9ib2FyZH0iKTsKICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gTmFub0VuY29kaW5nLkdldEJ5dGVzKHJvb3RoYXNoK0Ai0KHQstC40LTQtdGC0LXQu9GM0YHRgtCy0L4g0L3QsCDRgtC+0LLQsNGA0L3Ri9C5INC30L3QsNC6INCy0YvQtNCw0ZHRgtGB0Y8g0LIg0KDQpCDRgdGA0L7QutC+0Lwg0L3QsCAxMCDQu9C10YIuINCSINC00LDQu9GM0L3QtdC50YjQtdC8INC+0L3QviDQvNC+0LbQtdGCINCx0YvRgtGMINC/0L4g0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQtdC80YMg0LfQsNGP0LLQu9C10L3QuNGOINCyINGA0LXQs9C40YHRgtGA0LjRgNGD0Y7RidC40Lkg0L7RgNCz0LDQvSDQuCDRg9C/0LvQsNGC0Ysg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQtdC5INCz0L7RgdGD0LTQsNGA0YHRgtCy0LXQvdC90L7QuSDQv9C+0YjQu9C40L3RiyDQv9GA0L7QtNC70LXQvdC+INC10YnRkSDQvdCwIDEwINC70LXRgiwg0Lgg0YLQsNC6INC90LXQvtCz0YDQsNC90LjRh9C10L3QvdC+0LUg0YfQuNGB0LvQviDRgNCw0LdbMThdLgrQp9GC0L7QsdGLINGC0L7QstCw0YDQvdGL0Lkg0LfQvdCw0Log0L/RgNC40L7QsdGA0LXQuyDQuNC30LLQtdGB0YLQvdC+0YHRgtGMINC4INC/0YDQuNC30L3QsNC90LjQtSwg0YLRgNC10LHRg9GO0YLRgdGPINC30L3QsNGH0LjRgtC10LvRjNC90YvQtSDQutCw0L/QuNGC0LDQu9C+0LLQu9C+0LbQtdC90LjRjyDQuCwg0L7QsdGL0YfQvdC+LCDQt9C90LDRh9C40YLQtdC70YzQvdGL0Lkg0L/QtdGA0LjQvtC0INCy0YDQtdC80LXQvdC4LiDQn9C+0Y3RgtC+0LzRgyDQsiDQuNC90YLQtdGA0LXRgdCw0YUg0LrQsNC20LTQvtCz0L4sINC60YLQviDRgdGC0YDQtdC80LjRgtGB0Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7QstCw0YDQvdGL0Lkg0LfQvdCw0LosINCx0YvRgtGMINGD0LLQtdGA0LXQvdC90YvQvCwg0YfRgtC+INC10LzRgyDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0L7RhdGA0LDQvdCwINC60LDQuiDRhtC10L3QvdC+0LzRgyDQvtCx0YrQtdC60YLRgyDQuNC90YLQtdC70LvQtdC60YLRg9Cw0LvRjNC90L7QuSDRgdC+0LHRgdGC0LLQtdC90L3QvtGB0YLQuC4K0K3RgtC+INC30LDQstC40YHQuNGCINC+0YIg0LfQsNC60L7QvdC+0LIg0L4g0YLQvtCy0LDRgNC90YvRhSDQt9C90LDQutCw0YUsINC+0LTQvdCw0LrQviDQvdCw0LjQsdC+0LvQtdC1INC+0LHRidC10L/RgNC40L3Rj9GC0YvQvCDRgdC/0L7RgdC+0LHQvtC8INC+0YXRgNCw0L3RiyDRgtC+0LLQsNGA0L3QvtCz0L4g0LfQvdCw0LrQsCDRj9Cy0LvRj9C10YLRgdGPINC10LPQviDRgNC10LPQuNGB0YLRgNCw0YbQuNGPINCyINCg0LXQtdGB0YLRgNC1INGC0L7QstCw0YDQvdGL0YUg0LfQvdCw0LrQvtCyLCDQuCDQsdC+0LvRjNGI0L7QtSDRh9C40YHQu9C+INGB0YLRgNCw0L0g0YHRgtCw0LLQuNGCINGN0YLRgyDRgNC10LPQuNGB0YLRgNCw0YbQuNGOINGD0YHQu9C+0LLQuNC10Lwg0L7RhdGA0LDQvdGLINGC0L7QstCw0YDQvdGL0YUg0LfQvdCw0LrQvtCyLiDQodC90LDRh9Cw0LvQsCDQt9C90LDQuiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC9LCDQuCDQutCw0Log0YLQvtC70YzQutC+INC+0L0g0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC9LCDQvtC9INC+0YXRgNCw0L3Rj9C10YLRgdGPLCDQuCDQtdCz0L4g0LLQu9Cw0LTQtdC70LXRhiDQuNC80LXQtdGCINC/0YDQsNCy0L4g0LLQvtGB0L/RgNC10L/Rj9GC0YHRgtCy0L7QstCw0YLRjCDQtNGA0YPQs9C40Lwg0LvQuNGG0LDQvCDQsiDQtdCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LguCtCe0LTQvdCw0LrQviDRgNC10LPQuNGB0YLRgNCw0YbQuNGPINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtdC00LjQvdGB0YLQstC10L3QvdGL0Lwg0YHQv9C+0YHQvtCx0L7QvCDQvtGF0YDQsNC90Ysg0YLQvtCy0LDRgNC90L7Qs9C+INC30L3QsNC60LAuINCSINC90LXQutC+0YLQvtGA0YvRhSDRgdGC0YDQsNC90LDRhSDRgtCw0LrQttC1INC+0YXRgNCw0L3Rj9GO0YLRgdGPINC90LXQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0L3QvdGL0LUg0YLQvtCy0LDRgNC90YvQtSDQt9C90LDQutC4LCDQvtC00L3QsNC60L4g0Y3RgtC+INC80LXQvdC10LUg0L3QsNC00ZHQttC90LDRjyDRhNC+0YDQvNCwINC+0YXRgNCw0L3Riywg0L/QvtGB0LrQvtC70YzQutGDINC90LXQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0L3QvdGL0Lkg0YLQvtCy0LDRgNC90YvQuSDQt9C90LDQuiDQvdC1INC30LDRidC40YnQtdC9INC00L4g0YLQtdGFINC/0L7RgCwg0L/QvtC60LAg0L7QvSDQvdC1INC/0YDQuNC+0LHRgNC10Lsg0LTQvtGB0YLQsNGC0L7Rh9C90YPRjiDRg9C30L3QsNCy0LDQtdC80L7RgdGC0Ywg0Lgg0YDQtdC/0YPRgtCw0YbQuNGOINC90LAg0YDRi9C90LrQtSwg0L3QsCDRh9GC0L4g0LzQvtC20LXRgiDRg9C50YLQuCDQt9C90LDRh9C40YLQtdC70YzQvdC+0LUg0LLRgNC10LzRjyDQv9C+0YHQu9C1INC/0LXRgNCy0L7QvdCw0YfQsNC70YzQvdC+0LPQviDQstGL0L/Rg9GB0LrQsCDQvdCwINGA0YvQvdC+0LouCtCV0YHQu9C4INCy0Ysg0L3QsNGH0LjQvdCw0LXRgtC1INC/0YDQtdC00LvQsNCz0LDRgtGMINC90LAg0YDRi9C90LrQtSDQstCw0YjQuCDQv9GA0L7QtNGD0LrRgtGLINC/0L7QtCDQvdC+0LLRi9C8INGC0L7QstCw0YDQvdGL0Lwg0LfQvdCw0LrQvtC8LCDQviDQutC+0YLQvtGA0L7QvCDQvdC40LrRgtC+INC90LUg0LfQvdCw0LXRgiwg0Y3RgtC+0YIg0YLQvtCy0LDRgNC90YvQuSDQt9C90LDQuiDQsdGD0LTQtdGCINC+0YfQtdC90Ywg0YPRj9C30LLQuNC80YvQvC4g0JzQvtC20L3QviDQv9GA0LXRgtC10L3QtNC+0LLQsNGC0Ywg0L3QsCDQvtGF0YDQsNC90YMsINC/0YDQtdC00L7RgdGC0LDQstC70Y/QtdC80YPRjiDQt9Cw0LrQvtC90LDQvNC4INC+INC90LXQtNC+0LHRgNC+0YHQvtCy0LXRgdGC0L3QvtC5INC60L7QvdC60YPRgNC10L3RhtC40LgsINC+0LTQvdCw0LrQviDQsiDRjdGC0L7QvCDRgdC70YPRh9Cw0LUg0L3QsNC40LHQvtC70LXQtSDQstCw0LbQvdGL0Lwg0LzQvtC80LXQvdGC0L7QvCDRj9Cy0LvRj9C10YLRgdGPINGC0L4sINGH0YLQviDQt9C90LDQuiDQtNC+0LvQttC10L0g0L/RgNC40L7QsdGA0LXRgdGC0Lgg0YDQtdC/0YPRgtCw0YbQuNGOLiIpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShDb252ZXJ0LlRvQmFzZTY0U3RyaW5nKGJ5dGVzKSk7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyBjbGFzcyBOYW5vRW5jb2RpbmcKICAgIHsKICAgICAgICBzdGF0aWMgc3RyaW5nIGNoYXJzZXQgPSAKIj8hXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+IEBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX4iKwoi0I7RntCE0ZTQhtGW0IfRl9CQ0JHQktCT0JTQldCB0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdGR0LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj8SNxaHFvsSHxZvFusWExa3FgsSMxaDFvcSGxZrFvcW9xazFgSIgKwoi4oSWwqnCq8K7wrHCrtKQ0pHCsOKEouKAlOKAnOKAneKAmeKAmOKApuKAk1xuXHJcdCI7CgogICAgICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIEdldEJ5dGVzKHN0cmluZyBzdHIpCiAgICAgICAgewogICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVtzdHIuTGVuZ3RoXTsKICAgICAgICAgICAgaW50IGkgPSAwOwoKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGMgaW4gc3RyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgaW9mID0gY2hhcnNldC5JbmRleE9mKGMpOwogICAgICAgICAgICAgICAgaWYgKGlvZiA9PSAtMSkgYnl0ZXNbaSsrXSA9IDA7CiAgICAgICAgICAgICAgICBlbHNlIGJ5dGVzW2krK10gPSAoYnl0ZSlpb2Y7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBieXRlczsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIEdldFN0cmluZyhieXRlW10gYnl0ZXMpCiAgICAgICAgewogICAgICAgICAgICBjaGFyW10gY2hhcnMgPSBuZXcgY2hhcltieXRlcy5MZW5ndGhdOwogICAgICAgICAgICBpbnQgaSA9IDA7CgogICAgICAgICAgICBmb3JlYWNoICh2YXIgYiBpbiBieXRlcykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGIgPiBjaGFyc2V0Lkxlbmd0aCkgY2hhcnNbaSsrXSA9ICc/JzsKICAgICAgICAgICAgICAgIGVsc2UgY2hhcnNbaSsrXSA9IGNoYXJzZXRbYl07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBuZXcgc3RyaW5nKGNoYXJzKTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGNsYXNzIEhhc2hDYWxjdWxhdG9yCiAgICB7CiAgICAgICAgcHVibGljIGNvbnN0IGludCBIYXNoQ3JvcCA9IDE2OwoKICAgICAgICBwdWJsaWMgc3RhdGljIHN0cmluZyBDYWxjdWxhdGUoc3RyaW5nIHJhdykKICAgICAgICB7CiAgICAgICAgICAgIGJ5dGVbXSBiaGFzaCA9IE1ENS5DcmVhdGUoKS5Db21wdXRlSGFzaChOYW5vRW5jb2RpbmcuR2V0Qnl0ZXMocmF3KSk7CiAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBIYXNoQ3JvcDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzYi5BcHBlbmQoYmhhc2hbaV0uVG9TdHJpbmcoIngyIikpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc2IuVG9TdHJpbmcoKTsKICAgICAgICB9CiAgICB9Cn0=