VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVlDQogIFBlcnNpc3RhYmxlID0gMCAgJ05vdFBlcnNpc3RhYmxlDQogIERhdGFCaW5kaW5nQmVoYXZpb3IgPSAwICAndmJOb25lDQogIERhdGFTb3VyY2VCZWhhdmlvciAgPSAwICAndmJOb25lDQogIE1UU1RyYW5zYWN0aW9uTW9kZSAgPSAwICAnTm90QW5NVFNPYmplY3QNCkVORA0KQXR0cmlidXRlIFZCX05hbWUgPSAiQ1g4Nk9wZXJhbmQiDQpBdHRyaWJ1dGUgVkJfR2xvYmFsTmFtZVNwYWNlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9DcmVhdGFibGUgPSBUcnVlDQpBdHRyaWJ1dGUgVkJfUHJlZGVjbGFyZWRJZCA9IEZhbHNlDQpBdHRyaWJ1dGUgVkJfRXhwb3NlZCA9IEZhbHNlDQpPcHRpb24gRXhwbGljaXQNCg0KJ0NhcHN0b25lIERpc2Fzc2VtYmx5IEVuZ2luZSBiaW5kaW5ncyBmb3IgVkI2DQonQ29udHJpYnV0ZWQgYnkgRmlyZUV5ZSBGTEFSRSBUZWFtDQonQXV0aG9yOiAgRGF2aWQgWmltbWVyIDxkYXZpZC56aW1tZXJAZmlyZWV5ZS5jb20+LCA8ZHp6aWVAeWFob28uY29tPg0KJ0xpY2Vuc2U6IEFwYWNoZQ0KJ0NvcHlyaWdodDogRmlyZUV5ZSAyMDE3DQoNCg0KJy8vIEluc3RydWN0aW9uIG9wZXJhbmQgc2l6ZW9mKCkgcmVwb3J0cyA0OCBieXRlcw0KJ3R5cGVkZWYgc3RydWN0IGNzX3g4Nl9vcCB7DQonICAgICAgICB4ODZfb3BfdHlwZSB0eXBlOyAgIC8vIG9wZXJhbmQgdHlwZQ0KJw0KJyAgICAgICAgdW5pb24gew0KJyAgICAgICAgICAgIHg4Nl9yZWcgcmVnOyAgICAvLyByZWdpc3RlciB2YWx1ZSBmb3IgUkVHIG9wZXJhbmQNCicgICAgICAgICAgICBpbnQ2NF90IGltbTsgICAgLy8gaW1tZWRpYXRlIHZhbHVlIGZvciBJTU0gb3BlcmFuZA0KJyAgICAgICAgICAgIGRvdWJsZSBmcDsgICAgICAvLyBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3IgRlAgb3BlcmFuZA0KJyAgICAgICAgICAgIHg4Nl9vcF9tZW0gbWVtOyAvLyBiYXNlL2luZGV4L3NjYWxlL2Rpc3AgdmFsdWUgZm9yIE1FTSBvcGVyYW5kICgyNGJ5dGVzIG1heCkNCicgICAgICAgIH07DQonDQonICAgICAgICAvLyBzaXplIG9mIHRoaXMgb3BlcmFuZCAoaW4gYnl0ZXMpLg0KJyAgICAgICAgdWludDhfdCBzaXplOw0KJw0KJyAgICAgICAgLy8gQVZYIGJyb2FkY2FzdCB0eXBlLCBvciAwIGlmIGlycmVsZXZhbnQNCicgICAgICAgIHg4Nl9hdnhfYmNhc3QgYXZ4X2JjYXN0Ow0KJw0KJyAgICAgICAgLy8gQVZYIHplcm8gb3BtYXNrIHt6fQ0KJyAgICAgICAgYm9vbCBhdnhfemVyb19vcG1hc2s7DQonfSBjc194ODZfb3A7DQoNCidJbnN0cnVjdGlvbidzIG9wZXJhbmQgcmVmZXJyaW5nIHRvIG1lbW9yeQ0KJ1RoaXMgaXMgYXNzb2NpYXRlZCB3aXRoIFg4Nl9PUF9NRU0gb3BlcmFuZCB0eXBlIGFib3ZlDQonUHVibGljIFR5cGUgeDg2X29wX21lbQ0KJyAgICBzZWdtZW50IEFzIExvbmcgICcgc2VnbWVudCByZWdpc3RlciAob3IgWDg2X1JFR19JTlZBTElEIGlmIGlycmVsZXZhbnQpIFVOU0lHTkVEDQonICAgIGJhc2UgQXMgTG9uZyAgICAgJyBiYXNlIHJlZ2lzdGVyIChvciBYODZfUkVHX0lOVkFMSUQgaWYgaXJyZWxldmFudCkgVU5TSUdORUQNCicgICAgaW5kZXggQXMgTG9uZyAgICAnIGluZGV4IHJlZ2lzdGVyIChvciBYODZfUkVHX0lOVkFMSUQgaWYgaXJyZWxldmFudCkgVU5TSUdORUQNCicgICAgc2NhbGUgQXMgTG9uZyAgICAnIHNjYWxlIGZvciBpbmRleCByZWdpc3Rlcg0KJyAgICBkaXNwIEFzIEN1cnJlbmN5ICcgZGlzcGxhY2VtZW50IHZhbHVlDQonRW5kIFR5cGUNCg0KJ3RoaXMgc2hvd3MgdGhlIGFsaWdubWVudCBwYWRkaW5nIHVzZWQgYnkgY29tcGlsZXIuLg0KJyAgICBjc194ODZfb3Agb3A7DQonICAgIG9wLnR5cGUgPSAoeDg2X29wX3R5cGUpMTsNCicgICAgb3AucmVnID0gKHg4Nl9yZWcpMjsNCicgICAgb3AuYXZ4X2JjYXN0ID0gKHg4Nl9hdnhfYmNhc3QpMzsNCicgICAgb3AuYXZ4X3plcm9fb3BtYXNrID0gNDsNCicgICAgb3Auc2l6ZSA9IDB4YWE7DQonICAgIHByaW50ZigiJmNzX3g4Nl9vcCA9ICV4IiwgJm9wKTsNCicgICAgX2FzbSBpbnQgMw0KJw0KJw0KJzB4MDAxMkZGMzQgIDAxIDAwIDAwIDAwIGNjIGNjIGNjIGNjIDAyIDAwIDAwIDAwIGNjIGNjIGNjIGNjICAuLi4uzMzMzC4uLi7MzMzMDQonMHgwMDEyRkY0NCAgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgY2MgIMzMzMzMzMzMzMzMzMzMzMwNCicweDAwMTJGRjU0ICBhYSBjYyBjYyBjYyAwMyAwMCAwMCAwMCAwMSBjYyBjYyBjYyBjYyBjYyBjYyBjYyAgqszMzC4uLi4uzMzMzMzMzA0KDQpQdWJsaWMgb3B0eXBlIEFzIHg4Nl9vcF90eXBlDQpQdWJsaWMgc2l6ZSBBcyBCeXRlDQpQdWJsaWMgYXZ4X2JjYXN0IEFzIHg4Nl9hdnhfYmNhc3QNClB1YmxpYyBhdnhfemVyb19vcG1hc2sgQXMgQm9vbGVhbg0KDQonb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyB3aWxsIGJlIHNldCBiYXNlZCBvbiB0eXBlDQpQdWJsaWMgcmVnIEFzIHg4Nl9yZWcNClB1YmxpYyBmcCBBcyBDdXJyZW5jeQ0KUHVibGljIGltbSBBcyBDdXJyZW5jeQ0KUHVibGljIG1lbSBBcyBDWDg2T3BNZW0NCg0KUHJpdmF0ZSBoRW5naW5lIEFzIExvbmcNClByaXZhdGUgbV9yYXcoKSBBcyBCeXRlDQoNCkZ1bmN0aW9uIHRvU3RyaW5nKCkgQXMgU3RyaW5nDQogICAgDQogICAgRGltIHJldCgpIEFzIFN0cmluZw0KICAgIA0KICAgIHB1c2ggcmV0LCAiWDg2IE9wZXJhbmQ6Ig0KICAgIHB1c2ggcmV0LCBTdHJpbmcoNDUsICItIikNCiAgICANCiAgICBJZiBERUJVR19EVU1QIFRoZW4NCiAgICAgICAgcHVzaCByZXQsICJSYXc6ICINCiAgICAgICAgcHVzaCByZXQsIEhleER1bXAobV9yYXcpDQogICAgRW5kIElmDQogICAgDQogICAgcHVzaCByZXQsICJUeXBlOiAiICYgb3BTdHIoKQ0KICAgIHB1c2ggcmV0LCAiU2l6ZTogIiAmIHNpemUNCiAgICBJZiBhdnhfYmNhc3QgPD4gMCBUaGVuIHB1c2ggcmV0LCAiQkNhc3Q6ICIgJiBiY2FzdFN0cigpDQogICAgSWYgYXZ4X3plcm9fb3BtYXNrIFRoZW4gcHVzaCByZXQsICJBdnhPcE1hc2s6ICIgJiBhdnhfemVyb19vcG1hc2sNCiAgICANCiAgICBJZiBvcHR5cGUgPSBYODZfT1BfRlAgVGhlbg0KICAgICAgICAgcHVzaCByZXQsICJGUDogIiAmIGN1cjJzdHIoZnApDQogICAgRWxzZUlmIG9wdHlwZSA9IFg4Nl9PUF9JTU0gVGhlbg0KICAgICAgICAgcHVzaCByZXQsICJJTU06ICIgJiBjdXIyc3RyKGltbSkNCiAgICBFbHNlSWYgb3B0eXBlID0geDg2X29wX21lbSBUaGVuDQogICAgICAgIElmIG1lbS5iYXNlIDw+IDAgVGhlbiBwdXNoIHJldCwgIkJhc2U6ICIgJiByZWdOYW1lKGhFbmdpbmUsIG1lbS5iYXNlKQ0KICAgICAgICBJZiBtZW0uaW5kZXggPD4gMCBUaGVuIHB1c2ggcmV0LCAiSW5kZXg6ICIgJiByZWdOYW1lKGhFbmdpbmUsIG1lbS5pbmRleCkNCiAgICAgICAgSWYgbWVtLnNjYWxlXyA8PiAxIFRoZW4gcHVzaCByZXQsICJTY2FsZTogIiAmIEhleChtZW0uc2NhbGVfKQ0KICAgICAgICBJZiBtZW0uc2VnbWVudCA8PiAwIFRoZW4gcHVzaCByZXQsICJTZWc6ICIgJiByZWdOYW1lKGhFbmdpbmUsIG1lbS5zZWdtZW50KQ0KICAgICAgICBJZiBtZW0uZGlzcCA8PiAwIFRoZW4gcHVzaCByZXQsICJEaXNwOiAiICYgY3VyMnN0cihtZW0uZGlzcCkNCiAgICBFbHNlSWYgb3B0eXBlID0gWDg2X09QX1JFRyBUaGVuDQogICAgICAgICBwdXNoIHJldCwgIlJlZzogIiAmIHJlZ05hbWUoaEVuZ2luZSwgcmVnKQ0KICAgIEVuZCBJZg0KICAgIA0KICAgIHRvU3RyaW5nID0gSm9pbihyZXQsIHZiQ3JMZikNCiAgICANCkVuZCBGdW5jdGlvbg0KDQpGdW5jdGlvbiBvcFN0cigpIEFzIFN0cmluZw0KDQogICAgSWYgb3B0eXBlID0gWDg2X09QX0ZQIFRoZW4gb3BTdHIgPSAiWDg2X09QX0ZQIg0KICAgIElmIG9wdHlwZSA9IHg4Nl9vcF9tZW0gVGhlbiBvcFN0ciA9ICJ4ODZfb3BfbWVtIg0KICAgIElmIG9wdHlwZSA9IFg4Nl9PUF9JTU0gVGhlbiBvcFN0ciA9ICJYODZfT1BfSU1NIg0KICAgIElmIG9wdHlwZSA9IFg4Nl9PUF9SRUcgVGhlbiBvcFN0ciA9ICJYODZfT1BfUkVHIg0KICAgIElmIG9wdHlwZSA9IFg4Nl9PUF9JTlZBTElEIFRoZW4gb3BTdHIgPSAiWDg2X09QX0lOVkFMSUQiDQogICAgDQogICAgSWYgTGVuKG9wU3RyKSA9IDAgVGhlbg0KICAgICAgICBvcFN0ciA9ICJFcnJvcjogIiAmIEhleChvcHR5cGUpDQogICAgRWxzZUlmIERFQlVHX0RVTVAgVGhlbg0KICAgICAgICBvcFN0ciA9IG9wU3RyICYgIiAoIiAmIEhleChvcHR5cGUpICYgIikiDQogICAgRW5kIElmDQogICAgICAgIA0KRW5kIEZ1bmN0aW9uDQoNCkZ1bmN0aW9uIGJjYXN0U3RyKCkgQXMgU3RyaW5nDQogICAgRGltIHIgQXMgU3RyaW5nDQogICAgDQogICAgSWYgYXZ4X2JjYXN0ID0gWDg2X0FWWF9CQ0FTVF9JTlZBTElEIFRoZW4gciA9ICJYODZfQVZYX0JDQVNUX0lOVkFMSUQiDQogICAgSWYgYXZ4X2JjYXN0ID0gWDg2X0FWWF9CQ0FTVF8yIFRoZW4gciA9ICJYODZfQVZYX0JDQVNUXzIiDQogICAgSWYgYXZ4X2JjYXN0ID0gWDg2X0FWWF9CQ0FTVF80IFRoZW4gciA9ICJYODZfQVZYX0JDQVNUXzQiDQogICAgSWYgYXZ4X2JjYXN0ID0gWDg2X0FWWF9CQ0FTVF84IFRoZW4gciA9ICJYODZfQVZYX0JDQVNUXzgiDQogICAgSWYgYXZ4X2JjYXN0ID0gWDg2X0FWWF9CQ0FTVF8xNiBUaGVuIHIgPSAiWDg2X0FWWF9CQ0FTVF8xNiINCiAgICANCiAgICBJZiBMZW4ocikgPSAwIFRoZW4NCiAgICAgICAgciA9ICJVbmtub3duOiAiICYgSGV4KGF2eF9iY2FzdCkNCiAgICBFbHNlSWYgREVCVUdfRFVNUCBUaGVuDQogICAgICAgIHIgPSByICYgIiAoIiAmIEhleChhdnhfYmNhc3QpICYgIikiDQogICAgRW5kIElmDQogICAgDQogICAgYmNhc3RTdHIgPSByDQpFbmQgRnVuY3Rpb24NCg0KDQpGcmllbmQgU3ViIExvYWREZXRhaWxzKGxwU3RydWN0IEFzIExvbmcsIGhDYXBzdG9uZSBBcyBMb25nKQ0KICAgIA0KICAgIERpbSBvcE1lbSBBcyB4ODZfb3BfbWVtDQogICAgRGltIHB0ciBBcyBMb25nDQogICAgDQogICAgQ29uc3QgYWxpZ240ID0gNA0KICAgIENvbnN0IGFsaWduMyA9IDMNCiAgICANCiAgICBoRW5naW5lID0gaENhcHN0b25lDQogICAgDQogICAgSWYgREVCVUdfRFVNUCBUaGVuDQogICAgICAgIFJlRGltIG1fcmF3KDQ4KQ0KICAgICAgICBDb3B5TWVtb3J5IEJ5VmFsIFZhclB0cihtX3JhdygwKSksIEJ5VmFsIGxwU3RydWN0LCA0OA0KICAgIEVuZCBJZg0KICAgIA0KICAgIG9wdHlwZSA9IHJlYWRMbmcobHBTdHJ1Y3QpDQogICAgcHRyID0gbHBTdHJ1Y3QgKyA0ICsgYWxpZ240DQogICAgDQogICAgSWYgb3B0eXBlID0gWDg2X09QX0ZQIFRoZW4NCiAgICAgICAgZnAgPSByZWFkQ3VyKHB0cikNCiAgICBFbHNlSWYgb3B0eXBlID0gWDg2X09QX0lNTSBUaGVuDQogICAgICAgIGltbSA9IHJlYWRDdXIocHRyKQ0KICAgIEVsc2VJZiBvcHR5cGUgPSB4ODZfb3BfbWVtIFRoZW4NCiAgICAgICAgQ29weU1lbW9yeSBCeVZhbCBWYXJQdHIob3BNZW0pLCBCeVZhbCBwdHIsIExlbkIob3BNZW0pDQogICAgICAgIFNldCBtZW0gPSBOZXcgQ1g4Nk9wTWVtDQogICAgICAgIG1lbS5iYXNlID0gb3BNZW0uYmFzZQ0KICAgICAgICBtZW0uZGlzcCA9IG9wTWVtLmRpc3ANCiAgICAgICAgbWVtLmluZGV4ID0gb3BNZW0uaW5kZXgNCiAgICAgICAgbWVtLnNjYWxlXyA9IG9wTWVtLnNjYWxlDQogICAgICAgIG1lbS5zZWdtZW50ID0gb3BNZW0uc2VnbWVudA0KICAgIEVsc2VJZiBvcHR5cGUgPSBYODZfT1BfUkVHIFRoZW4NCiAgICAgICAgcmVnID0gcmVhZExuZyhwdHIpDQogICAgRW5kIElmDQogICAgDQogICAgcHRyID0gcHRyICsgTGVuQihvcE1lbSkNCiAgICANCiAgICBzaXplID0gcmVhZEJ5dGUocHRyKQ0KICAgIHB0ciA9IHB0ciArIDEgKyBhbGlnbjMNCiAgICANCiAgICBhdnhfYmNhc3QgPSByZWFkTG5nKHB0cikNCiAgICBwdHIgPSBwdHIgKyA0DQogICAgDQogICAgYXZ4X3plcm9fb3BtYXNrID0gKHJlYWRCeXRlKHB0cikgPSAxKQ0KICAgIA0KRW5kIFN1Yg0KDQpQcml2YXRlIFN1YiBDbGFzc19UZXJtaW5hdGUoKQ0KICAgICdsb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgZnJlZWluZyB1cCBvaw0KICAgICdEZWJ1Zy5QcmludCAiQ3g4Nk9wZXJhbmQuVGVybWluYXRlIg0KRW5kIFN1Yg0K