cGFja2FnZSBnbHMuY2gwMy5zMTA7Ci8qKgogKiBKTFM6IDMuMTAuNQogKiBbU110cmluZyBlc2NhcGUgc2VxdWVuY2VzIGFsbG93IGZvciB0aGUgcmVwcmVzZW50YXRpb24gb2Ygc29tZSBub25ncmFwaGljCiAqIGNoYXJhY3RlcnMgYXMgd2VsbCBhcyB0aGUgc2luZ2xlIHF1b3RlLCBkb3VibGUgcXVvdGUsIGFuZCBiYWNrc2xhc2gKICogY2hhcmFjdGVycyBpbiAuLi4gc3RyaW5nIGxpdGVyYWxzICinMy4xMC41KS4KICoKICogR0xTIDMuMTAuNQogKiBJbiBhbGwgc3RyaW5ncywgdGhlIGVzY2FwZSBzZXF1ZW5jZSAnXCQnIGlzIGxlZ2FsLCBhbmQgc3RhbmRzIGZvciB0aGUgQVNDSUkKICogZG9sbGFyIGNoYXJhY3Rlci4KICovCmNsYXNzIFN0cmluZ0VzY2FwZXMgZXh0ZW5kcyBHcm9vdnlUZXN0Q2FzZSB7CgogICAgdm9pZCB0ZXN0U3RhbmRhcmRKYXZhRXNjYXBlQ2hhcnMoKSB7CiAgICAgICAgU3RyaW5nIHMgPSAiXGJcdFxuXGZcclwiXCdcXCIKICAgICAgICBhc3NlcnQgcy5jaGFyQXQoMCkgPT0gMHg4CiAgICAgICAgYXNzZXJ0IHMuY2hhckF0KDEpID09IDB4OQogICAgICAgIGFzc2VydCBzLmNoYXJBdCgyKSA9PSAweGEKICAgICAgICBhc3NlcnQgcy5jaGFyQXQoMykgPT0gMHhjCiAgICAgICAgYXNzZXJ0IHMuY2hhckF0KDQpID09IDB4ZAogICAgICAgIGFzc2VydCBzLmNoYXJBdCg1KSA9PSAweDIyCiAgICAgICAgYXNzZXJ0IHMuY2hhckF0KDYpID09IDB4MjcKICAgICAgICBhc3NlcnQgcy5jaGFyQXQoNykgPT0gMHg1YwoKICAgICAgICAvLyBBIHNlbGN0aW9uIG9mIGludmFsaWQsIG5vbi1zdGFuZGFyZCBlc2NhcGVzCiAgICAgICAgLy9TdHJpbmcgczIgPSAiXHEiLy9AZmFpbDpwYXJzZQogICAgICAgIC8vU3RyaW5nIHMyID0gIlx9Ii8vQGZhaWw6cGFyc2UKICAgICAgICAvL1N0cmluZyBzMiA9ICJcXiIvL0BmYWlsOnBhcnNlCiAgICAgICAgLy9TdHJpbmcgczIgPSAiXE4iLy9AZmFpbDpwYXJzZQogICAgICAgIC8vU3RyaW5nIHMyID0gIlxAIi8vQGZhaWw6cGFyc2UKICAgICAgICAvL1N0cmluZyBzMiA9ICJcYSIvL0BmYWlsOnBhcnNlCiAgICAgICAgLy9TdHJpbmcgczIgPSAiXEEiLy9AZmFpbDpwYXJzZQogICAgfQoKICAgIHZvaWQgdGVzdE9jdGFsRXNjYXBlcygpIHsKICAgICAgICBTdHJpbmcgcyA9ICJcMFwwMFwwMDBcMVwzNzdcMDQyXDQyIgogICAgICAgIGFzc2VydCBzLmNoYXJBdCgwKSA9PSAwCiAgICAgICAgYXNzZXJ0IHMuY2hhckF0KDEpID09IDAKICAgICAgICBhc3NlcnQgcy5jaGFyQXQoMikgPT0gMAogICAgICAgIGFzc2VydCBzLmNoYXJBdCgzKSA9PSAxCiAgICAgICAgYXNzZXJ0IHMuY2hhckF0KDQpID09IDI1NQogICAgICAgIGFzc2VydCBzLmNoYXJBdCg1KSA9PSAwNDIKICAgICAgICBhc3NlcnQgcy5jaGFyQXQoNikgPT0gMDQyCgogICAgICAgIFN0cmluZyBzMiA9ICJcMDAwNyIKICAgICAgICBhc3NlcnQgczIubGVuZ3RoKCkgPT0gMgogICAgICAgIGFzc2VydCBzMi5jaGFyQXQoMCkgPT0gMAogICAgICAgIGFzc2VydCBzMi5jaGFyQXQoMSkgPT0gIjciCgogICAgICAgIC8vIEEgc2VsZWN0aW9uIG9mIGludmFsaWQgZXNjYXBlcwogICAgfQp9Cg==