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ZFNldChbMSwgMiwgM10pCiAgICAgICAgICAgID4+PiBvc2V0LnBvcCgpCiAgICAgICAgICAgIDMKICAgICAgICB6DFNldCBpcyBlbXB0een/////KQNyEAAAANoIS2V5RXJyb3JyEQAAACkCchIAAADaBGVsZW1yCwAAAHILAAAAcgwAAADaA3BvcNEAAABzDAAAAAALBgEIAgoBCAEIAXoOT3JkZXJlZFNldC5wb3BjAgAAAAAAAAAAAAAABQAAAAQAAABDAAAAc1AAAAB8AXwAdgByTHwAagB8ARkAfQJ8AGoBfAI9AHwAagB8AT0AfABqAKABoQBEAF0eXAJ9A30EfAR8AmsFcix8BGQBGAB8AGoAfAM8AHEsZAJTACkDYdgBAAAKICAgICAgICBSZW1vdmUgYW4gZWxlbWVudC4gIERvIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgYWJzZW50LgoKICAgICAgICBUaGUgTXV0YWJsZVNldCBtaXhpbiB1c2VzIHRoaXMgdG8gaW1wbGVtZW50IHRoZSAucmVtb3ZlKCkgbWV0aG9kLCB3aGljaAogICAgICAgICpkb2VzKiByYWlzZSBhbiBlcnJvciB3aGVuIGFza2VkIHRvIHJlbW92ZSBhIG5vbi1leGlzdGVudCBpdGVtLgoKICAgICAgICBFeGFtcGxlOgogICAgICAgICAgICA+Pj4gb3NldCA9IE9yZGVyZWRTZXQoWzEsIDIsIDNdKQogICAgICAgICAgICA+Pj4gb3NldC5kaXNjYXJkKDIpCiAgICAgICAgICAgID4+PiBwcmludChvc2V0KQogICAgICAgICAgICBPcmRlcmVkU2V0KFsxLCAzXSkKICAgICAgICAgICAgPj4+IG9zZXQuZGlzY2FyZCgyKQogICAgICAgICAgICA+Pj4gcHJpbnQob3NldCkKICAgICAgICAgICAgT3JkZXJlZFNldChbMSwgM10pCiAgICAgICAg6QEAAABOKQJyEQAAAHIQAAAAKQVyEgAAAHIqAAAAchkAAADaAWvaAXZyCwAAAHILAAAAcgwAAADaB2Rpc2NhcmTkAAAAcw4AAAAAEAgBCgEIAQgBEgEIAXoST3JkZXJlZFNldC5kaXNjYXJkYwEAAAAAAAAAAAAAAAEAAAADAAAAQwAAAHMa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