시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 291 63 41 25.309%

문제

Brainfuck은 Urban Müller가 1993년에 만든 프로그래밍 언어이다. 그의 목적은 역사상 가장 작은 튜링 완전 언어(Turing -complete language)의 컴파일러를 만드는 것이었다.위키백과에는 다음과 같은 설명이 적혀져 있다. (designed to challenge and amuse programmers, and was not made to be suitable for practical use)

이 언어는 0으로 초기화 된 크기가 32768바이트인 바이트 배열, 배열의 맨 첫 바이트를 가리키는 포인터를 가지고 있다.

다음과 같이 7가지 명령어를 가지고 있으며, 각 명령어는 문자 1글자이다. (원래 8가지 명령어를 가지고 있지만, 문제를 위해 하나를 지웠다)

  • >: 포인터를 증가시킨다. 만약, 포인터 값이 32767이면 0이된다.
  • <: 포인터를 감소시킨다. 만약, 포인터 값이 0이면 32767이 된다.
  • +: 포인터가 가리키는 값을 증가시킨다. 255를 증가시키면 0이 된다.
  • -: 포인터가 가리키는 값을 감소시킨다. 0을 감소시키면 255가 된다.
  • .: 포인터가 가리키는 값을 ASCII문자로 출력한다.
  • [: 포인터가 가리키는 값이 0이면, 짝이 되는 뒤쪽의 ]로 이동한다.
  • ]: 포인터가 가리키는 값이 0이 아니면, 짝이되는 앞쪽의 [로 이동한다.

Brainfuck 프로그램이 주어졌을 때, 이 프로그램의 출력을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 프로그램의 개수 T(1<=T<=100)가 주어진다. 각 프로그램은 한줄 또는 그 이상으로 구성되어 있으며, end만 적혀있는 줄로 끝난다. 프로그램에 올바르지 않은 문자 (<>+-[])가 있다면, 이는 무시하고 넘어가야 한다. %는 주석을 의미하며, %가 나온 뒤에 나오는 해당 줄의 문자는 모두 무시한다. 프로그램의 최대 명령어 개수는 128000이다.

출력

각 프로그램의 결과를 다음과 같이 출력한다. 첫째 줄에 PROGRAM #n을 출력한다. n은 프로그램 번호이다. (첫 번째 프로그램부터 차례대로 1이고, 1 <= n <= N이다). 둘째 줄에는 프로그램의 결과를 출력한다. 만약 [나 ]가 짝이 맞지 않을 대는 COMPILE ERROR를 출력하면 된다. 출력에서 여러 줄을 출력할 수도 있다.

예제 입력 1

3
++++++++[>+++++++++ % hello-world.
<-]>.<+++++[>++++++<-]>-.+++++++..
+++.<++++++++[>>++++<<-]>>.<<++++[>
------<-]>.<++++[>++++++<-]>.+++.
------.--------.>+.
end
+++[>+++++++[.
end
%% Print alphabet, A-Z.
+ + + + + +++++++++++++++++++++>
++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
+< [ >.+<- ]
end

예제 출력 1

PROGRAM #1:
Hello World!
PROGRAM #2:
COMPILE ERROR
PROGRAM #3:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
W3sicHJvYmxlbV9pZCI6IjI3MzMiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJCcmFpbmYqY2siLCJkZXNjcmlwdGlvbiI6IjxwPkJyYWluZnVja1x1Yzc0MCBVcmJhbiBNJnV1bWw7bGxlclx1YWMwMCAxOTkzXHViMTQ0XHVjNWQwIFx1YjljY1x1YjRlMCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3OThcdWJjMGQgXHVjNWI4XHVjNWI0XHVjNzc0XHViMmU0LiBcdWFkZjhcdWM3NTggXHViYWE5XHVjODAxXHVjNzQwIFx1YzVlZFx1YzBhY1x1YzBjMSBcdWFjMDBcdWM3YTUgXHVjNzkxXHVjNzQwIFx1ZDI5Y1x1YjljMSBcdWM2NDRcdWM4MDQgXHVjNWI4XHVjNWI0KFR1cmluZyAtY29tcGxldGUgbGFuZ3VhZ2UpXHVjNzU4IFx1Y2VmNFx1ZDMwY1x1Yzc3Y1x1YjdlY1x1Yjk3YyBcdWI5Y2NcdWI0ZGNcdWIyOTQgXHVhYzgzXHVjNzc0XHVjNWM4XHViMmU0LjxhIGhyZWY9XCJodHRwczpcL1wvZW4ud2lraXBlZGlhLm9yZ1wvd2lraVwvQnJhaW5mdWNrXCI+XHVjNzA0XHVkMGE0XHViYzMxXHVhY2ZjPFwvYT5cdWM1ZDBcdWIyOTQgXHViMmU0XHVjNzRjXHVhY2ZjIFx1YWMxOVx1Yzc0MCBcdWMxMjRcdWJhODVcdWM3NzQgXHVjODAxXHVkNjAwXHVjODM4IFx1Yzc4OFx1YjJlNC4gKGRlc2lnbmVkIHRvIGNoYWxsZW5nZSBhbmQgYW11c2UgcHJvZ3JhbW1lcnMsIGFuZCB3YXMgbm90IG1hZGUgdG8gYmUgc3VpdGFibGUgZm9yIHByYWN0aWNhbCB1c2UpPFwvcD5cclxuXHJcbjxwPlx1Yzc3NCBcdWM1YjhcdWM1YjRcdWIyOTQgMFx1YzczY1x1Yjg1YyBcdWNkMDhcdWFlMzBcdWQ2NTQgXHViNDFjIFx1ZDA2Y1x1YWUzMFx1YWMwMCAzMjc2OFx1YmMxNFx1Yzc3NFx1ZDJiOFx1Yzc3OCBcdWJjMTRcdWM3NzRcdWQyYjggXHViYzMwXHVjNWY0LCBcdWJjMzBcdWM1ZjRcdWM3NTggXHViOWU4IFx1Y2NhYiBcdWJjMTRcdWM3NzRcdWQyYjhcdWI5N2MgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1Yjk3YyBcdWFjMDBcdWM5YzBcdWFjZTAgXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzc0IDdcdWFjMDBcdWM5YzAgXHViYTg1XHViODM5XHVjNWI0XHViOTdjIFx1YWMwMFx1YzljMFx1YWNlMCBcdWM3ODhcdWM3M2NcdWJhNzAsIFx1YWMwMSBcdWJhODVcdWI4MzlcdWM1YjRcdWIyOTQgXHViYjM4XHVjNzkwIDFcdWFlMDBcdWM3OTBcdWM3NzRcdWIyZTQuIChcdWM2ZDBcdWI3OTggOFx1YWMwMFx1YzljMCBcdWJhODVcdWI4MzlcdWM1YjRcdWI5N2MgXHVhYzAwXHVjOWMwXHVhY2UwIFx1Yzc4OFx1YzljMFx1YjljYywgXHViYjM4XHVjODFjXHViOTdjIFx1YzcwNFx1ZDU3NCBcdWQ1NThcdWIwOThcdWI5N2MgXHVjOWMwXHVjNmUwXHViMmU0KTxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPiZndDs6IFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1Yjk3YyBcdWM5OWRcdWFjMDBcdWMyZGNcdWQwYThcdWIyZTQuIFx1YjljY1x1YzU3ZCwgXHVkM2VjXHVjNzc4XHVkMTMwIFx1YWMxMlx1Yzc3NCAzMjc2N1x1Yzc3NFx1YmE3NCAwXHVjNzc0XHViNDFjXHViMmU0LjxcL2xpPlxyXG5cdDxsaT4mbHQ7OiBcdWQzZWNcdWM3NzhcdWQxMzBcdWI5N2MgXHVhYzEwXHVjMThjXHVjMmRjXHVkMGE4XHViMmU0LiBcdWI5Y2NcdWM1N2QsIFx1ZDNlY1x1Yzc3OFx1ZDEzMCBcdWFjMTJcdWM3NzQgMFx1Yzc3NFx1YmE3NCAzMjc2N1x1Yzc3NCBcdWI0MWNcdWIyZTQuPFwvbGk+XHJcblx0PGxpPis6IFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVhYzEyXHVjNzQ0IFx1Yzk5ZFx1YWMwMFx1YzJkY1x1ZDBhOFx1YjJlNC4gMjU1XHViOTdjIFx1Yzk5ZFx1YWMwMFx1YzJkY1x1ZDBhNFx1YmE3NCAwXHVjNzc0IFx1YjQxY1x1YjJlNC48XC9saT5cclxuXHQ8bGk+LTogXHVkM2VjXHVjNzc4XHVkMTMwXHVhYzAwIFx1YWMwMFx1YjlhY1x1ZDBhNFx1YjI5NCBcdWFjMTJcdWM3NDQgXHVhYzEwXHVjMThjXHVjMmRjXHVkMGE4XHViMmU0LiAwXHVjNzQ0IFx1YWMxMFx1YzE4Y1x1YzJkY1x1ZDBhNFx1YmE3NCAyNTVcdWFjMDAgXHViNDFjXHViMmU0LjxcL2xpPlxyXG5cdDxsaT4uOiBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YWMxMlx1Yzc0NCBBU0NJSVx1YmIzOFx1Yzc5MFx1Yjg1YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuPFwvbGk+XHJcblx0PGxpPls6IFx1ZDNlY1x1Yzc3OFx1ZDEzMFx1YWMwMCBcdWFjMDBcdWI5YWNcdWQwYTRcdWIyOTQgXHVhYzEyXHVjNzc0IDBcdWM3NzRcdWJhNzQsIFx1YzlkZFx1Yzc3NCBcdWI0MThcdWIyOTQgXHViNGE0XHVjYWJkXHVjNzU4IF1cdWI4NWMgXHVjNzc0XHViM2Q5XHVkNTVjXHViMmU0LjxcL2xpPlxyXG5cdDxsaT5dOiBcdWQzZWNcdWM3NzhcdWQxMzBcdWFjMDAgXHVhYzAwXHViOWFjXHVkMGE0XHViMjk0IFx1YWMxMlx1Yzc3NCAwXHVjNzc0IFx1YzU0NFx1YjJjOFx1YmE3NCwgXHVjOWRkXHVjNzc0XHViNDE4XHViMjk0IFx1YzU1ZVx1Y2FiZFx1Yzc1OCBbXHViODVjIFx1Yzc3NFx1YjNkOVx1ZDU1Y1x1YjJlNC48XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5CcmFpbmZ1Y2sgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YzhmY1x1YzViNFx1Yzg0Y1x1Yzc0NCBcdWI1NGMsIFx1Yzc3NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NTggXHVjZDljXHViODI1XHVjNzQ0IFx1Y2Q5Y1x1YjgyNVx1ZDU1OFx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTU4XHVjMmRjXHVjNjI0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NTggXHVhYzFjXHVjMjE4IFQoMSZsdDs9VCZsdDs9MTAwKVx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIFx1YWMwMSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDAgXHVkNTVjXHVjOTA0IFx1YjYxMFx1YjI5NCBcdWFkZjggXHVjNzc0XHVjMGMxXHVjNzNjXHViODVjIFx1YWQ2Y1x1YzEzMVx1YjQxOFx1YzViNCBcdWM3ODhcdWM3M2NcdWJhNzAsIGVuZFx1YjljYyBcdWM4MDFcdWQ2MDBcdWM3ODhcdWIyOTQgXHVjOTA0XHViODVjIFx1YjA1ZFx1YjA5Y1x1YjJlNC4gXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNWQwIFx1YzYyY1x1YmMxNFx1Yjk3NFx1YzljMCBcdWM1NGFcdWM3NDAgXHViYjM4XHVjNzkwICgmbHQ7Jmd0OystW10pXHVhYzAwIFx1Yzc4OFx1YjJlNFx1YmE3NCwgXHVjNzc0XHViMjk0IFx1YmIzNFx1YzJkY1x1ZDU1OFx1YWNlMCBcdWIxMThcdWM1YjRcdWFjMDBcdWM1N2MgXHVkNTVjXHViMmU0LiAlXHViMjk0IFx1YzhmY1x1YzExZFx1Yzc0NCBcdWM3NThcdWJiZjhcdWQ1NThcdWJhNzAsICVcdWFjMDAgXHViMDk4XHVjNjI4IFx1YjRhNFx1YzVkMCBcdWIwOThcdWM2MjRcdWIyOTQgXHVkNTc0XHViMmY5IFx1YzkwNFx1Yzc1OCBcdWJiMzhcdWM3OTBcdWIyOTQgXHViYWE4XHViNDUwIFx1YmIzNFx1YzJkY1x1ZDU1Y1x1YjJlNC4gXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzU4IFx1Y2Q1Y1x1YjMwMCBcdWJhODVcdWI4MzlcdWM1YjQgXHVhYzFjXHVjMjE4XHViMjk0IDEyODAwMFx1Yzc3NFx1YjJlNC48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5cdWFjMDEgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzU4IFx1YWNiMFx1YWNmY1x1Yjk3YyBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzc0IFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gXHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBQUk9HUkFNICNuXHVjNzQ0IFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gblx1Yzc0MCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTggXHViYzg4XHVkNjM4XHVjNzc0XHViMmU0LiAoXHVjY2FiIFx1YmM4OFx1YzlmOCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWJkODBcdWQxMzAgXHVjYzI4XHViODQwXHViMzAwXHViODVjIDFcdWM3NzRcdWFjZTAsIDEgJmx0Oz0gbiAmbHQ7PSBOXHVjNzc0XHViMmU0KS4gXHViNDU4XHVjOWY4IFx1YzkwNFx1YzVkMFx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NTggXHVhY2IwXHVhY2ZjXHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gXHViOWNjXHVjNTdkIFtcdWIwOTggXVx1YWMwMCBcdWM5ZGRcdWM3NzQgXHViOWRlXHVjOWMwIFx1YzU0YVx1Yzc0NCBcdWIzMDBcdWIyOTQgQ09NUElMRSBFUlJPUlx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NThcdWJhNzQgXHViNDFjXHViMmU0LiBcdWNkOWNcdWI4MjVcdWM1ZDBcdWMxMWMgXHVjNWVjXHViN2VjIFx1YzkwNFx1Yzc0NCBcdWNkOWNcdWI4MjVcdWQ1NjAgXHVjMjE4XHViM2M0IFx1Yzc4OFx1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWQ1NWNcdWFkNmRcdWM1YjQifSx7InByb2JsZW1faWQiOiIyNzMzIiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiYnJhaW5mKmNrIiwiZGVzY3JpcHRpb24iOiI8cD5icmFpbmYqY2sgaXMgdGhlIHVuZ29kbHkgY3JlYXRpb24gb2YgVXJiYW4gTSZ1dW1sO2xsZXIsIHdob3NlIGdvYWwgd2FzIGFwcGFyZW50bHkgdG8gY3JlYXRlIGEgVHVyaW5nLWNvbXBsZXRlIGxhbmd1YWdlIGZvciB3aGljaCBoZSBjb3VsZCB3cml0ZSB0aGUgc21hbGxlc3QgY29tcGlsZXIgZXZlci4gaHR0cDpcL1wvZW4ud2lraXBlZGlhLm9yZyBkZWZpbmVzIGl0IGFzICZsZHF1bzthIGNvbXB1dGVyIHByb2dyYW1taW5nIGxhbmd1YWdlIGRlc2lnbmVkIHRvIGNoYWxsZW5nZSBhbmQgYW11c2UgcHJvZ3JhbW1lcnMsIGFuZCBpcyBub3Qgc3VpdGFibGUgZm9yIHByYWN0aWNhbCB1c2UuIEl0cyBuYW1lIGhhcyBiZWVuIHZhcmlvdXNseSBldXBoZW1pemVkLCBhcyBpbiBicmFpbmYqY2suJnJkcXVvOyZuYnNwOzxcL3A+XHJcblxyXG48cD5BIGJyYWluZipjayBwcm9ncmFtIGhhcyBhbiBpbXBsaWNpdCBieXRlIHBvaW50ZXIsIGNhbGxlZCAmbGRxdW87dGhlIHBvaW50ZXImcmRxdW87LCB3aGljaCBpcyBmcmVlIHRvIG1vdmUgYXJvdW5kIHdpdGhpbiBhbiBhcnJheSBvZiAzMjc2OCBieXRlcywgaW5pdGlhbGx5IGFsbCBzZXQgdG8gemVyby4gVGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBhcnJheS4mbmJzcDs8XC9wPlxyXG5cclxuPHA+VGhlIGJyYWluZipjayBwcm9ncmFtbWluZyBsYW5ndWFnZSBjb25zaXN0cyBvZiBzZXZlbiBjb21tYW5kcywgZWFjaCBvZiB3aGljaCBpcyByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIuIE5vdGU6ICZsZHF1bztJbmR1c3RyeSBzdGFuZGFyZCZyZHF1bzsgYnJhaW5mKmNrIGFjdHVhbGx5IGhhcyBlaWdodCBjb21tYW5kcywgYnV0IGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBwcm9ibGVtIG9uZSBjb21tYW5kIHdhcyBpbnRlbnRpb25hbGx5IG9taXR0ZWQuJm5ic3A7PFwvcD5cclxuXHJcbjx0YWJsZSBjbGFzcyA9IFwidGFibGUgdGFibGUtYm9yZGVyZWRcIj5cclxuPHRoZWFkPjx0cj48dGg+Q09NTUFORDxcL3RoPjx0aD5PUEVSQVRJT048XC90aD48XC90cj48XC90aGVhZD5cclxuPHRib2R5PlxyXG48dHI+PHRkPiZndDs8XC90ZD48dGQ+SW5jcmVtZW50IHRoZSBwb2ludGVyLiBJbmNyZW1lbnRpbmcgYSBwb2ludGVyIHZhbHVlIG9mIDMyNzY3IHJlc3VsdHMgaW4gYSBwb2ludGVyIHZhbHVlIG9mIDAuPFwvdGQ+PFwvdHI+XHJcbjx0cj48dGQ+Jmx0OzxcL3RkPjx0ZD5EZWNyZW1lbnQgdGhlIHBvaW50ZXIuIERlY3JlbWVudGluZyBhIHBvaW50ZXIgdmFsdWUgb2YgMCByZXN1bHRzIGluIGEgcG9pbnRlciB2YWx1ZSBvZiAzMjc2Ny48XC90ZD48XC90cj5cclxuPHRyPjx0ZD4rPFwvdGQ+PHRkPkluY3JlbWVudCB0aGUgYnl0ZSBhdCB0aGUgcG9pbnRlci4gSW5jcmVtZW50aW5nIHRoZSBieXRlIHZhbHVlIDI1NSByZXN1bHRzIGluIHRoZSBieXRlIHZhbHVlIDAuPFwvdGQ+PFwvdHI+XHJcbjx0cj48dGQ+LTxcL3RkPjx0ZD5EZWNyZW1lbnQgdGhlIGJ5dGUgYXQgdGhlIHBvaW50ZXIuIERlY3JlbWVudGluZyB0aGUgYnl0ZSB2YWx1ZSAwIHJlc3VsdHMgaW4gdGhlIGJ5dGUgdmFsdWUgMjU1LjxcL3RkPjxcL3RyPlxyXG48dHI+PHRkPi48XC90ZD48dGQ+T3V0cHV0IHRoZSBjaGFyYWN0ZXIgd2hvc2UgQVNDSUkgdmFsdWUgaXMgdGhlIGJ5dGUgYXQgdGhlIHBvaW50ZXI8XC90ZD48XC90cj5cclxuPHRyPjx0ZD5bPFwvdGQ+PHRkPkp1bXAgZm9yd2FyZCBwYXN0IHRoZSBtYXRjaGluZyBdIGlmIHRoZSBieXRlIGF0IHRoZSBwb2ludGVyIGlzIHplcm8uIDxcL3RkPjxcL3RyPlxyXG48dHI+PHRkPl08XC90ZD48dGQ+SnVtcCBiYWNrd2FyZCB0byB0aGUgbWF0Y2hpbmcgWyB1bmxlc3MgdGhlIGJ5dGUgYXQgdGhlIHBvaW50ZXIgaXMgemVyby48XC90ZD48XC90cj5cclxuPFwvdGJvZHk+XHJcbjxcL3RhYmxlPlxyXG5cclxuPHA+Rm9yIHRoaXMgcHJvYmxlbSwgeW91IHdpbGwgd3JpdGUgYSBwcm9ncmFtIHRoYXQgcmVhZHMgaW4sIHBhcnNlcyBhbmQgZXhlY3V0ZXMgYSBicmFpbmYqY2sgcHJvZ3JhbS4mbmJzcDs8XC9wPiIsImlucHV0IjoiPHA+VGhlIGZpcnN0IGxpbmUgb2YgaW5wdXQgY29udGFpbnMgYW4gaW50ZWdlciBOLCgxICZsdDs9IE4gJmx0Oz0gMTAwKSwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBicmFpbmYqY2sgcHJvZ3JhbXMgdGhhdCBmb2xsb3cuIEVhY2ggcHJvZ3JhbSBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBsaW5lcyBvZiBicmFpbmYqY2sgY29tbWFuZHMgZW5kaW5nIHdpdGggYSBsaW5lIHRoYXQgY29uc2lzdHMgb2YgdGhlIHdvcmQgJmxkcXVvO2VuZCZyZHF1bzsuIFlvdXIgcHJvZ3JhbSBzaG91bGQgaWdub3JlIGFueSBpbGxlZ2FsIGNoYXJhY3RlcnMgKEkuRS4gYW55IGNoYXJhY3RlciBub3QgaW4gdGhlIHNldDogJmx0OyZndDsrPS5bXSksIElmIGEgcGVyY2VudCBzaWduICglKSBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZywgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSBzaG91bGQgYmUgZGlzY2FyZGVkLiBUaGlzIGNvbnN0aXR1dGVzIGEgY29tbWVudC4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzIGluIGEgYnJhaW5mKmNrIHByb2dyYW0gaXMgMTI4MDAwLiZuYnNwOzxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPkZvciBlYWNoIGJyYWluZipjayBwcm9ncmFtLCB5b3VyIHByb2dyYW0gc2hvdWxkIG91dHB1dCB0aGUgdGV4dCAmbGRxdW87UFJPR1JBTSAjbjomcmRxdW87IG9uIGEgc2luZ2xlIGxpbmUgKHdoZXJlIG4gaXMgdGhlIHByb2dyYW0gbnVtYmVyOiAxICZsdDs9IG4gJmx0Oz0gTiksIGZvbGxvd2VkIGJ5IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBicmFpbmYqY2sgcHJvZ3JhbSwgZm9sbG93ZWQgYnkgYSBzaW5nbGUgbmV3bGluZSBjaGFyYWN0ZXIuIFRoZSBvbmx5IHBvc3NpYmxlIHBhcnNpbmcgZXJyb3IgdGhhdCBjYW4gb2NjdXIgaXMgaWYgdGhlcmUgaXMgYW4gdW5tYXRjaGVkIFsgb3IgXSBpbiB0aGUgYnJhaW5mKmNrIHByb2dyYW0uIElmIHlvdXIgcHJvZ3JhbSBlbmNvdW50ZXJzIHN1Y2ggYW4gZXJyb3IsIGl0IHNob3VsZCBzaW1wbHkgcHJpbnQgQ09NUElMRSBFUlJPUiBpbnN0ZWFkIG9mIGV4ZWN1dGluZyB0aGUgcHJvZ3JhbS4gQWxsIGJyYWluZipjayBwcm9ncmFtcyB3aWxsIHVzZSBubyBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCAzMjc2OCBieXRlcyBvZiBtZW1vcnkuJm5ic3A7PFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVjNjAxXHVjNWI0In1d