gASVAQABAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIwwbW9kdWxlLWV0aGVyZXVtLmJ5emFudGl1bS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtlGGMB2NsYXNzZXOUXZSMBW5hbWVzlF2UjAhkdXBuYW1lc5RdlIwIYmFja3JlZnOUXZSMBWlzbW9klIh1jAd0YWduYW1llGgJjAZzb3VyY2WUjHEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2J5emFudGl1bS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdJSMBGxpbmWUSwGMBnBhcmVudJRoA4wJX2RvY3VtZW50lGgDdWKMD3NwaGlueC5hZGRub2Rlc5SMBWluZGV4lJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAdlbnRyaWVzlF2UKIwEcGFpcpSMMW1vZHVsZTsgZXRoZXJldW0uYnl6YW50aXVtLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVo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AABoHYyCL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9ieXphbnRpdW0vdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzk6PGF1dG9zdW1tYXJ5PpRoH0sAaCBqzwIAAGghaAN1YowWc3BoaW54LmV4dC5hdXRvc3VtbWFyeZSMEWF1dG9zdW1tYXJ5X3RhYmxllJOUKYGUfZQoaAVYFAIAAAoKCgpjcmVhdGUKCkNyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS4KCnJldHVybl8KCkhhbHRzIGV4ZWN1dGlvbiByZXR1cm5pbmcgb3V0cHV0IGRhdGEuCgpnZW5lcmljX2NhbGwKClBlcmZvcm0gdGhlIGNvcmUgbG9naWMgb2YgdGhlIENBTEwqIGZhbWlseSBvZiBvcGNvZGVzLgoKY2FsbAoKTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC4KCmNhbGxjb2RlCgpNZXNzYWdlLWNhbGwgaW50byB0aGlzIGFjY291bnQgd2l0aCBhbHRlcm5hdGl2ZSBhY2NvdW504oCZcyBjb2RlLgoKc2VsZmRlc3RydWN0CgpIYWx0IGV4ZWN1dGlvbiBhbmQgcmVnaXN0ZXIgYWNjb3VudCBmb3IgbGF0ZXIgZGVsZXRpb24uCgpkZWxlZ2F0ZWNhbGwKCk1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQuCgpzdGF0aWNjYWxsCgpNZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LgoKcmV2ZXJ0CgpTdG9wIGV4ZWN1dGlvbiBhbmQgcmV2ZXJ0IHN0YXRlIGNoYW5nZXMsIHdpdGhvdXQgY29uc3VtaW5nIGFsbCBwcm92aWRlZCBnYXOUaAddlGgAjAV0YWJsZZSTlCmBlH2UKGgFaAZoB12UaACMBnRncm91cJSTlCmBlH2UKGgFaAZoB12UKGgAjAdjb2xzcGVjlJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhjb2x3aWR0aJRLCnVoHGr/AgAAaB1oRGgfSwBoIGr8AgAAaCFoA3Vi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Y3JlYXRlMiA8ZXRoZXJldW0uY29uc3RhbnRpbm9wbGUudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jcmVhdGUyPmCUaAddlGhuKYGUfZQoaAVoBmgHXZRqLAMAACmBlH2UKGgFauMDAABoB12UaD+MB2NyZWF0ZTKUhZSBlH2UKGgFaAZoIGroAwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqNwMAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGorAwAAaB1OaB9OaCBq5QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIw2ZXRoZXJldW0uY29uc3RhbnRpbm9wbGUudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jcmVhdGUylIwIcmVmdGl0bGWUjDZldGhlcmV1bS5jb25zdGFudGlub3BsZS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNyZWF0ZTKUdWgcaG1oHU5oH05oIGrhAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mhy9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vY29uc3RhbnRpbm9wbGUvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6NDE6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq3gMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqHwMAAGgdTmgfTmggatsDAAB1YmogAwAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulGgHXZRoP4wrQ3JlYXRlcyBhIG5ldyBhY2NvdW50IHdpdGggYXNzb2NpYXRlZCBjb2RlLpSFlIGUfZQoaAVoBmggahIEAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyHL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2Fw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Om9iajpgY2FsbCA8ZXRoZXJldW0uYnl6YW50aXVtLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY2FsbD5glGgHXZRobimBlH2UKGgFaAZoB12UaiwDAAApgZR9lChoBWrsBAAAaAddlGg/jARjYWxslIWUgZR9lChoBWgGaCBq8QQAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZQoap8DAACMAnB5lIwGcHktb2JqlGVoFV2UaBddlGgZXZR1aBxqKwMAAGgdTmgfTmggau4EAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSMLmV0aGVyZXVtLmJ5emFudGl1bS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGyUjAhyZWZ0aXRsZZSMLmV0aGVyZXVtLmJ5emFudGl1bS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGyUdWgcaG1oHU5oH05oIGrqBAAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vYnl6YW50aXVtL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM5OjxhdXRvc3VtbWFyeT6UaB9LAWggaucEAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcah8DAABoHU5oH05oIGrkBAAAdWJqIAMAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwdTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC6UaAddlGg/jB1NZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LpSFlIGUfZQoaAVoBmggahsFAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyCL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9ieXphbnRpdW0vdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzk6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Dn2UKGgQXZRoE12UKGqfAwAAjAJweZSMBnB5LW9iapRlaBVdlGgXXZRoGV2UdWgcaisDAABoHU5oH05oIGrkBQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIaW50ZXJuYWyUiIwFcmVmaWSUjDZldGhlcmV1bS5ieXphbnRpdW0udm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5kZWxlZ2F0ZWNhbGyUjAhyZWZ0aXRsZZSMNmV0aGVyZXVtLmJ5emFudGl1bS52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmRlbGVnYXRlY2FsbJR1aBxobWgdTmgfTmggauAFAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyCL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9ieXphbnRpdW0vdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzk6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq3QUAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqHwMAAGgdTmgfTmggatoFAAB1YmogAwAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjB1NZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LpRoB12UaD+MHU1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQulIWUgZR9lChoBWgGaCBqEQYAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIIvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2J5emFudGl1bS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozOTo8YXV0b3N1bW1hcnk+lGgfSwFoIGoOBgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGofAwAAaB1OaB9OaCBq2gUAAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqGgMAAGgdaERoH0sAaCBqFwMAAGghaAN1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BwAAaB1qGgcAAGgfTmggaigHAAB1YmVoDn2UKGgQXZRoE12UKGrWBwAAjAhmdW5jdGlvbpRlaBVdlGgXXZRoGV2UjAZkb21haW6UatYHAACMB29ianR5cGWUag4IAACMCGRlc2N0eXBllGoOCAAAjAdub2luZGV4lIl1aBxqJgcAAGgdahoHAABoH05oIGoJBwAAdWJoAIwNbGl0ZXJhbF9ibG9ja5STlCmBlH2UKGgFWLUHAABkZWYgZ2VuZXJpY19jcmVhdGUoCiAgICBldm06IEV2bSwKICAgIGVuZG93bWVudDogVTI1NiwKICAgIGNvbnRyYWN0X2FkZHJlc3M6IEFkZHJlc3MsCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfc2l6ZTogVTI1NiwKKSAtPiBOb25lOgogICAgIyBUaGlzIGltcG9ydCBjYXVzZXMgYSBjaXJjdWxhciBpbXBvcnQgZXJyb3IKICAgICMgaWYgaXQncyBub3QgbW92ZWQgaW5zaWRlIHRoaXMgbWV0aG9kCiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19jcmVhdGVfbWVzc2FnZQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9IG1heF9tZXNzYWdlX2NhbGxfZ2FzKFVpbnQoZXZtLmdhc19sZWZ0KSkKICAgIGV2bS5nYXNfbGVmdCAtPSBVMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcykKCiAgICBlbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYywgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKCiAgICBzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGlmIGFjY291bnRfaGFzX2NvZGVfb3Jfbm9uY2UoZXZtLmVudi5zdGF0ZSwgY29udHJhY3RfYWRkcmVzcyk6CiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCgogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIHRhcmdldD1CeXRlczAoKSwKICAgICAgICBnYXM9VTI1NihjcmVhdGVfbWVzc2FnZV9nYXMpLAogICAgICAgIHZhbHVlPWVuZG93bWVudCwKICAgICAgICBkYXRhPWIiIiwKICAgICAgICBjb2RlPWNhbGxfZGF0YSwKICAgICAgICBjdXJyZW50X3RhcmdldD1jb250cmFjdF9hZGRyZXNzLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Tm9uZSwKICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9VHJ1ZSwKICAgICAgICBpc19zdGF0aWM9RmFsc2UsCiAgICApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gYiIiCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYuZnJvbV9iZV9ieXRlcyhjaGlsZF9ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkpCpRoB12UaD9YtQcAAGRlZiBnZW5lcmljX2NyZWF0ZSgKICAgIGV2bTogRXZtLAogICAgZW5kb3dtZW50OiBVMjU2LAogICAgY29udHJhY3RfYWRkcmVzczogQWRkcmVzcywKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9zaXplOiBVMjU2LAopIC0+IE5vbmU6CiAgICAjIFRoaXMgaW1wb3J0IGNhdXNlcyBhIGNpcmN1bGFyIGltcG9ydCBlcnJvcgogICAgIyBpZiBpdCdzIG5vdCBtb3ZlZCBpbnNpZGUgdGhpcyBtZXRob2QKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlCgogICAgY3JlYXRlX21lc3NhZ2VfZ2FzID0gbWF4X21lc3NhZ2VfY2FsbF9nYXMoVWludChldm0uZ2FzX2xlZnQpKQogICAgZXZtLmdhc19sZWZ0IC09IFUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKQoKICAgIGVuc3VyZShub3QgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLCBXcml0ZUluU3RhdGljQ29udGV4dCkKICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgoKICAgIHNlbmRlcl9hZGRyZXNzID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIHNlbmRlciA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIHNlbmRlcl9hZGRyZXNzKQoKICAgIGlmICgKICAgICAgICBzZW5kZXIuYmFsYW5jZSA8IGVuZG93bWVudAogICAgICAgIG9yIHNlbmRlci5ub25jZSA9PSBVaW50KDIqKjY0IC0gMSkKICAgICAgICBvciBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVAogICAgKToKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gY3JlYXRlX21lc3NhZ2VfZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgaWYgYWNjb3VudF9oYXNfY29kZV9vcl9ub25jZShldm0uZW52LnN0YXRlLCBjb250cmFjdF9hZGRyZXNzKToKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICBjYWxsZXI9ZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgdGFyZ2V0PUJ5dGVzMCgpLAogICAgICAgIGdhcz1VMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcyksCiAgICAgICAgdmFsdWU9ZW5kb3dtZW50LAogICAgICAgIGRhdGE9YiIiLAogICAgICAgIGNvZGU9Y2FsbF9kYXRhLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PWNvbnRyYWN0X2FkZHJlc3MsCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1Ob25lLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1UcnVlLAogICAgICAgIGlzX3N0YXRpYz1GYWxzZSwKICAgICkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KSkKlIWUgZR9lChoBWgGaCBqGAgAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMZy9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2NvbnN0YW50aW5vcGxlL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0ucHmUjAl4bWw6c3BhY2WUarYCAACMBWZvcmNllImMCGxhbmd1YWdllIwGcHl0aG9ulIwOaGlnaGxpZ2h0X2FyZ3OUfZSMC2xpbmVub3N0YXJ0lEsBc4wHbGluZW5vc5SJdWgcahYIAABoHWoaBwAAaB9LOWggagkHAAB1YmVoDn2UKGgQXZRqDAEAAGFoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZSMDmdlbmVyaWNfY3JlYXRllGFoF12UaBldlHVoHGgzaB1qGgcAAGgfSy5oIGr4BgAAaCFoA3ViaDQpgZR9lChoBWgGaAddlChoOSmBlH2UKGgFjAZjcmVhdGWUaAddlGg/jAZjcmVhdGWUhZSBlH2UKGgFaAZoIGo7CAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSyxoIGo4CAAAaCFoA3ViaCQpgZR9lChoBWgGaAddlGgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMB2VudHJpZXOUXZR1aBxoI2gdaERoH0sAaCBqOAgAAGghaAN1YmonBwAAKYGUfZQoaAVoBmgHXZQoaiwHAAApgZR9lChoBYwLY3JlYXRlKGV2bSmUaAddlChqMgcAACmBlH2UKGgFjAZjcmVhdGWUaAddlGg/jAZjcmVhdGWUhZSBlH2UKGgFaAZoIGpbCAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlCiMCHNpZy1uYW1llIwIZGVzY25hbWWUakAHAABqQQcAAGVoFV2UaBddlGgZXZSMCXhtbDpzcGFjZZRqtgIAAHVoHGoxBwAAaB1oHmgfTmggalcIAAB1YmpHBwAAKYGUfZQoaAWMA2V2bZRoB12Uak0HAAApgZR9lChoBYwDZXZtlGgHXZRqUwcAACmBlH2UKGgFaAZoB12UaD+MA2V2bZSFlIGUfZQoaAVoBmgganQIAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12Ual4HAABhaBVdlGgXXZRoGV2UdWgcalIHAABoHU5oH05oIGpwCAAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwJeG1sOnNwYWNllGq2AgAAdWgcakwHAABoHU5oH05oIGpsCAAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwJeG1sOnNwYWNllGq2AgAAdWgcakYHAABoHWgeaB9OaCBqVwgAAHViZWgOfZQoaBBdlIwwZXRoZXJldW0uYnl6YW50aXVtLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRllGFoE12UKIwDc2lnlIwKc2lnLW9iamVjdJSMAnB5lGrXBwAAatgHAABlaBVdlGgXXZRoGV2UjAZtb2R1bGWUjClldGhlcmV1bS5ieXphbnRpdW0udm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbZSMBWNsYXNzlGgGjAhmdWxsbmFtZZRqXQgAAHVoHGorBwAAaB1oHmgfSy9oIGpUCAAAdWJq4QcAACmBlH2UKGgFaAZoB12UKGhpKYGUfZQoaAWMK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UaAddlGg/jCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulIWUgZR9lChoBWgGaCBqoAgAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdaB5oH0syaCBqnQgAAHViaACMCmZpZWxkX2xpc3SUk5QpgZR9lChoBWgGaAddlGgAjAVmaWVsZJSTlCmBlH2UKGgFaAZoB12UKGgAjApmaWVsZF9uYW1llJOUKYGUfZQoaAWMClBhcmFtZXRlcnOUaAddlGg/jApQYXJhbWV0ZXJzlIWUgZR9lChoBWgGaCBquggAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxquAgAAGgdaB5oH0sAaCBqtQgAAHViaACMCmZpZWxkX2JvZHmUk5QpgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMHWV2bSAtLSBUaGUgY3VycmVudCBFVk0gZnJhbWUulGgHXZQoaCKMDmxpdGVyYWxfc3Ryb25nlJOUKYGUfZQoaAWMA2V2bZRoB12UaD+MA2V2bZSFlIGUfZQoaAVoBmggatMIAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAtyZWZzcGVjaWZpY5SIjAlweTptb2R1bGWUapoIAACMCHB5OmNsYXNzlE51aBxq0QgAAGgdTmgfTmggas0IAAB1Ymg/jBsg4oCTIFRoZSBjdXJyZW50IEVWTSBmcmFtZS6UhZSBlH2UKGgFaAZoIGrNCAAAaCFoA2gdaERoH0sAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBqyggAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqyAgAAGgdTmgfTmggarUIAAB1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcarMIAABoHU5oH05oIGqwCAAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGquCAAAaB1OaB9OaCBqnQgAAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxq4AcAAGgdaB5oH05oIGpUCAAAdWJlaA59lChoEF2UaBNdlChqlQgAAIwIZnVuY3Rpb26UZWgVXZRoF12UaBldlIwGZG9tYWlulGqVCAAAjAdvYmp0eXBllGoJCQAAjAhkZXNjdHlwZZRqCQkAAIwHbm9pbmRleJSJdWgcaiYHAABoHWhEaB9LAGggajgIAABoIWgDdWJqFwgAACmBlH2UKGgFWOQJAABkZWYgY3JlYXRlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBUaGlzIGltcG9ydCBjYXVzZXMgYSBjaXJjdWxhciBpbXBvcnQgZXJyb3IKICAgICMgaWYgaXQncyBub3QgbW92ZWQgaW5zaWRlIHRoaXMgbWV0aG9kCiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19jcmVhdGVfbWVzc2FnZQoKICAgICMgU1RBQ0sKICAgIGVuZG93bWVudCA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19DUkVBVEUgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgY3JlYXRlX21lc3NhZ2VfZ2FzID0gbWF4X21lc3NhZ2VfY2FsbF9nYXMoVWludChldm0uZ2FzX2xlZnQpKQogICAgZXZtLmdhc19sZWZ0IC09IFUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKQoKICAgICMgT1BFUkFUSU9OCiAgICBlbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYywgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAgc2VuZGVyX2FkZHJlc3MgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgc2VuZGVyID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgc2VuZGVyX2FkZHJlc3MpCgogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY29udHJhY3RfYWRkcmVzcygKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkubm9uY2UsCiAgICApCgogICAgaWYgKAogICAgICAgIHNlbmRlci5iYWxhbmNlIDwgZW5kb3dtZW50CiAgICAgICAgb3Igc2VuZGVyLm5vbmNlID09IFVpbnQoMioqNjQgLSAxKQogICAgICAgIG9yIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUCiAgICApOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBjcmVhdGVfbWVzc2FnZV9nYXMKICAgIGVsaWYgYWNjb3VudF9oYXNfY29kZV9vcl9ub25jZShldm0uZW52LnN0YXRlLCBjb250cmFjdF9hZGRyZXNzKToKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICAgICAgKQoKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCgogICAgICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgICAgICBjYWxsZXI9ZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRhcmdldD1CeXRlczAoKSwKICAgICAgICAgICAgZ2FzPVUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKSwKICAgICAgICAgICAgdmFsdWU9ZW5kb3dtZW50LAogICAgICAgICAgICBkYXRhPWIiIiwKICAgICAgICAgICAgY29kZT1jYWxsX2RhdGEsCiAgICAgICAgICAgIGN1cnJlbnRfdGFyZ2V0PWNvbnRyYWN0X2FkZHJlc3MsCiAgICAgICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICAgICAgY29kZV9hZGRyZXNzPU5vbmUsCiAgICAgICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1UcnVlLAogICAgICAgICAgICBpc19zdGF0aWM9RmFsc2UsCiAgICAgICAgKQogICAgICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICAgICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgZXZtLnJldHVybl9kYXRhID0gYiIiCiAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAg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bWVtb3J5X3NpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ1JFQVRFICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9IG1heF9tZXNzYWdlX2NhbGxfZ2FzKFVpbnQoZXZtLmdhc19sZWZ0KSkKICAgIGV2bS5nYXNfbGVmdCAtPSBVMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcykKCiAgICAjIE9QRVJBVElPTgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMsIFdyaXRlSW5TdGF0aWNDb250ZXh0KQogICAgZXZtLm1lbW9yeZSFlIGUfZQoaAVoBmggarkJAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjA9jaGFuZ2UtcmVwbGFjZWSUYWgVXZRoF12UaBldlHVoHGpSBwAAaCBqEQkAAGghaANoHWhEaB9LAHVialMHAAApgZR9lChoBWgGaAddlGg/jBpQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wY5SFlIGUfZQoaAVoBmggascJAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjBJjaGFuZ2UtcmVwbGFjZW1lbnSUYWgVXZRoF12UaBldlHVoHGpSBwAAaCBqEQkAAGghaANoHWhEaB9LAHViaD+MBCArPSCUhZSBlH2UKGgFaAZoIGoRCQAAaCFoA2gdaERoH0sAdWJqUwcAACmBlH2UKGgFaAZoB12UaD9YvgEAAGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAgc2VuZGVyX2FkZHJlc3MgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgc2VuZGVyID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgc2VuZGVyX2FkZHJlc3MpCgogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY29udHJhY3RfYWRkcmVzcygKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkubm9uY2UsCiAgICApCgogICAgaWYgKAogICAgICAgIHNlbmRlci5iYWxhbmNlIDwgZW5kb3dtZW50CiAgICAgICAgb3Igc2VuZGVyLm5vbmNlID09IFVpbnQoMioqNjQgLSAxKQogICAgICAgIG9yIGV2bS5tZXNzYWdlLmRlcHRoICsglIWUgZR9lChoBWgGaCBq2QkAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDmNoYW5nZS1yZW1vdmVklGFoFV2UaBddlGgZXZR1aBxqUgcAAGggahEJAABoIWgDaB1oRGgfSwB1Ymg/jAIxIJSFlIGUfZQoaAVoBmggahEJAABoIWgDaB1oRGgfSwB1YmpTBwAAKYGUfZQoaAVoBmgHXZRoP1hkBQAAPiBTVEFDS19ERVBUSF9MSU1JVAogICAgKToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gY3JlYXRlX21lc3NhZ2VfZ2FzCiAgICBlbGlmIGFjY291bnRfaGFzX2NvZGVfb3Jfbm9uY2UoZXZtLmVudi5zdGF0ZSwgY29udHJhY3RfYWRkcmVzcyk6CiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgICAgICkKCiAgICAgICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQoKICAgICAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICAgICAgY2FsbGVyPWV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0YXJnZXQ9Qnl0ZXMwKCksCiAgICAgICAgICAgIGdhcz1VMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcyksCiAgICAgICAgICAgIHZhbHVlPWVuZG93bWVudCwKICAgICAgICAgICAgZGF0YT1iIiIsCiAgICAgICAgICAgIGNvZGU9Y2FsbF9kYXRhLAogICAgICAgICAgICBjdXJyZW50X3RhcmdldD1jb250cmFjdF9hZGRyZXNzLAogICAgICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgICAgIGNvZGVfYWRkcmVzcz1Ob25lLAogICAgICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9VHJ1ZSwKICAgICAgICAgICAgaXNfc3RhdGljPUZhbHNlLAogICAgICAgICkKICAgICAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgICAgICBwdXNoKAogICAgICAgICAgICAgICAgZXZtLnN0YWNrLCBVMjU2LmZyb21fYmVfYnl0ZXMoY2hpbGRfZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlIWUgZR9lChoBWgGaCBq6wkAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDmNoYW5nZS1yZW1vdmVklGFoFV2UaBddlGgZXZR1aBxqUgcAAGggahEJAABo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bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZW5kb3dtZW50ID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBzYWx0ID0gcG9wKGV2bS5zdGFjaykudG9fYmVfYnl0ZXMzMigpCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKICAgIGNhbGxfZGF0YV93b3JkcyA9IGNlaWwzMihVaW50KG1lbW9yeV9zaXplKSkgLy8gMzIKICAgIGNoYXJnZV9nYXMoCiAgICAgICAgZXZtLAogICAgICAgIEdBU19DUkVBVEUgKyBHQVNfS0VDQ0FLMjU2X1dPUkQgKiBjYWxsX2RhdGFfd29yZHMgKyBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICApCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jcmVhdGUyX2NvbnRyYWN0X2FkZHJlc3MoCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgc2FsdCwKICAgICAgICBtZW1vcnlfcmVhZF9ieXRlcyhldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKSwKICAgICkKCiAgICBnZW5lcmljX2NyZWF0ZSgKICAgICAgICBldm0sIGVuZG93bWVudCwgY29udHJhY3RfYWRkcmVzcywgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlGg/WHYDAABkZWYgY3JlYXRlMihldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGVuZG93bWVudCA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgc2FsdCA9IHBvcChldm0uc3RhY2spLnRvX2JlX2J5dGVzMzIoKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCiAgICBjYWxsX2RhdGFfd29yZHMgPSBjZWlsMzIoVWludChtZW1vcnlfc2l6ZSkpIC8vIDMyCiAgICBjaGFyZ2VfZ2FzKAogICAgICAgIGV2bSwKICAgICAgICBHQVNfQ1JFQVRFICsgR0FTX0tFQ0NBSzI1Nl9XT1JEICogY2FsbF9kYXRhX3dvcmRzICsgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgKQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY3JlYXRlMl9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIHNhbHQsCiAgICAgICAgbWVtb3J5X3JlYWRfYnl0ZXMoZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSksCiAgICApCgogICAgZ2VuZXJpY19jcmVhdGUoCiAgICAgICAgZXZtLCBlbmRvd21lbnQsIGNvbnRyYWN0X2FkZHJlc3MsIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlIWUgZR9lChoBWgGaCBq6woAAGghaANoHWhEaB9L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IGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBldm0ub3V0cHV0ID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUaAddlGg/WAcCAABkZWYgcmV0dXJuXyhldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1pFUk8gKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBldm0ub3V0cHV0ID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUhZSBlH2UKGgFaAZoIGrhCwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxiL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vYnl6YW50aXVtL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0ucHmUjAl4bWw6c3BhY2WUarYCAACMBWZv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Z2FzOiBVaW50LAogICAgdmFsdWU6IFUyNTYsCiAgICBjYWxsZXI6IEFkZHJlc3MsCiAgICB0bzogQWRkcmVzcywKICAgIGNvZGVfYWRkcmVzczogQWRkcmVzcywKICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZTogYm9vbCwKICAgIGlzX3N0YXRpY2NhbGw6IGJvb2wsCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfaW5wdXRfc2l6ZTogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1jb2RlX2FkZHJlc3MsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPXNob3VsZF90cmFuc2Zlcl92YWx1ZSwKICAgICAgICBpc19zdGF0aWM9VHJ1ZSBpZiBpc19zdGF0aWNjYWxsIGVsc2UgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLAogICAgKQogICAgY2hpbGRfZXZtID0gcHJvY2Vzc19tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gY2hpbGRfZXZtLm91dHB1dAogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgY2hpbGRfZXZtLm91dHB1dFs6YWN0dWFsX291dHB1dF9zaXplXSwKICAgICkKlGgHXZRoP1iEBgAAZGVmIGdlbmVyaWNfY2FsbCgKICAgIGV2bTogRXZtLAogICAgZ2FzOiBVaW50LAogICAgdmFsdWU6IFUyNTYsCiAgICBjYWxsZXI6IEFkZHJlc3MsCiAgICB0bzogQWRkcmVzcywKICAgIGNvZGVfYWRkcmVzczogQWRkcmVzcywKICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZTogYm9vbCwKICAgIGlzX3N0YXRpY2NhbGw6IGJvb2wsCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfaW5wdXRfc2l6ZTogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb246IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1jb2RlX2FkZHJlc3MsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPXNob3VsZF90cmFuc2Zlcl92YWx1ZSwKICAgICAgICBpc19zdGF0aWM9VHJ1ZSBpZiBpc19zdGF0aWNjYWxsIGVsc2UgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLAogICAgKQogICAgY2hpbGRfZXZtID0gcHJvY2Vzc19tZXNzYWdlKGNoaWxkX21lc3NhZ2UsIGV2bS5lbnYpCgogICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gY2hpbGRfZXZtLm91dHB1dAogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgY2hpbGRfZXZtLm91dHB1dFs6YWN0dWFsX291dHB1dF9zaXplXSwKICAgICkKlIWUgZR9lChoBWgGaCBqmw0AAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2J5emFudGl1bS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGq2AgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UagoKAABLAXOMB2xpbmVub3OUiXVoHGoWCAAAaB1oHmgfS1toIGr/CwAAdWJlaA59lChoEF2U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DQAAdWJlaA59lChoEF2UaBNdlChqEg4AAIwIZnVuY3Rpb26UZWgVXZRoF12UaBldlIwGZG9tYWlulGoSDgAAjAdvYmp0eXBllGp7DgAAjAhkZXNjdHlwZZRqew4AAIwHbm9pbmRleJSJdWgcaiYHAABoHU5oH05oIGq5DQAAdWJqFwgAACmBlH2UKGgFWBAHAABkZWYgY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICB0byA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBjcmVhdGVfZ2FzX2Nvc3QgPSAoCiAgICAgICAgVWludCgwKQogICAgICAgIGlmIHZhbHVlID09IDAgb3IgaXNfYWNjb3VudF9hbGl2ZShldm0uZW52LnN0YXRlLCB0bykKICAgICAgICBlbHNlIEdBU19ORVdfQUNDT1VOVAogICAgKQogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FMTF9WQUxVRQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIHZhbHVlLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIEdBU19DQUxMICsgY3JlYXRlX2dhc19jb3N0ICsgdHJhbnNmZXJfZ2FzX2Nvc3QsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBlbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYyBvciB2YWx1ZSA9PSBVMjU2KDApLCBXcml0ZUluU3RhdGljQ29udGV4dCkKICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gYiIiCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YEAcAAGRlZiBjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIHRvID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIGNyZWF0ZV9nYXNfY29zdCA9ICgKICAgICAgICBVaW50KDApCiAgICAgICAgaWYgdmFsdWUgPT0gMCBvciBpc19hY2NvdW50X2FsaXZlKGV2bS5lbnYuc3RhdGUsIHRvKQogICAgICAgIGVsc2UgR0FTX05FV19BQ0NPVU5UCiAgICApCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwgKyBjcmVhdGVfZ2FzX2Nvc3QgKyB0cmFuc2Zlcl9nYXNfY29zdCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGVuc3VyZShub3QgZXZtLm1lc3NhZ2UuaXNfc3RhdGljIG9yIHZhbHVlID09IFUyNTYoMCksIFdyaXRlSW5TdGF0aWNDb250ZXh0KQogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgICkuYmFsYW5jZQogICAgaWYgc2VuZGVyX2JhbGFuY2UgPCB2YWx1ZToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgbWVtb3J5X2lu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b3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FMTF9WQUxVRQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIHZhbHVlLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIEdBU19DQUxMICsgdHJhbnNmZXJfZ2FzX2Nvc3QsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICBGYWxzZSwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZRoP1hjBgAAZGVmIGNhbGxjb2RlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgdHJhbnNmZXJfZ2FzX2Nvc3QgPSBVaW50KDApIGlmIHZhbHVlID09IDAgZWxzZSBHQVNfQ0FMTF9WQUxVRQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIHZhbHVlLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIEdBU19DQUxMICsgdHJhbnNmZXJfZ2FzX2Nvc3QsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAg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FwgAACmBlH2UKGgFWDIFAABkZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBpZiAoCiAgICAgICAgbm90IGlzX2FjY291bnRfYWxpdmUoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpCiAgICAgICAgYW5kIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5iYWxhbmNlICE9IDAKICAgICk6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUICsgR0FTX1NFTEZfREVTVFJVQ1RfTkVXX0FDQ09VTlQpCiAgICBlbHNlOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCkKCiAgICAjIE9QRVJBVElPTgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMsIFdyaXRlSW5TdGF0aWNDb250ZXh0KQoKICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBtYXJrIGJlbmVmaWNpYXJ5IGFzIHRvdWNoZWQKICAgIGlmIGFjY291bnRfZXhpc3RzX2FuZF9pc19lbXB0eShldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSk6CiAgICAgICAgZXZtLnRvdWNoZWRfYWNjb3VudHMuYWRkKGJlbmVmaWNpYXJ5KQoKICAgICMgSEFMVCB0aGUgZXhlY3V0aW9uCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlGgHXZRoP1gyBQAAZGVmIHNlbGZkZXN0cnVjdChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGJlbmVmaWNpYXJ5ID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKCiAgICAjIEdBUwogICAgaWYgKAogICAgICAgIG5vdCBpc19hY2NvdW50X2FsaXZlKGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KQogICAgICAgIGFuZCBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkuYmFsYW5jZSAhPSAwCiAgICApOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCArIEdBU19TRUxGX0RFU1RSVUNUX05FV19BQ0NPVU5UKQogICAgZWxzZToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QpCgogICAgIyBPUEVSQVRJT04KICAgIGVuc3VyZShub3QgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLCBXcml0ZUluU3RhdGljQ29udGV4dCkKCiAgICBvcmlnaW5hdG9yID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIGJlbmVmaWNpYXJ5X2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkuYmFsYW5jZQogICAgb3JpZ2luYXRvcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvcikuYmFsYW5jZQoKICAgICMgRmlyc3QgVHJhbnNmZXIgdG8gYmVuZWZpY2lhcnkKICAgIHNldF9hY2NvdW50X2JhbGFuY2UoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnksIGJlbmVmaWNpYXJ5X2JhbGFuY2UgKyBvcmlnaW5hdG9yX2JhbGFuY2UKICAgICkKICAgICMgTmV4dCwgWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgYWRkcmVzcyBiZWluZyBkZWxldGVkIChtdXN0IGNvbWUgYWZ0ZXIKICAgICMgc2VuZGluZyB0byBiZW5lZmljaWFyeSBpbiBjYXNlIHRoZSBjb250cmFjdCBuYW1lZCBpdHNlbGYgYXMgdGhlCiAgICAjIGJlbmVmaWNpYXJ5KS4KICAgIHNldF9hY2NvdW50X2JhbGFuY2UoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvciwgVTI1NigwKSkKCiAgICAjIHJlZ2lzdGVyIGFjY291bnQgZm9yIGRlbGV0aW9uCiAgICBldm0uYWNjb3VudHNfdG9fZGVsZXRlLmFkZChvcmlnaW5hdG9yKQoKICAgICMgbWFyayBiZW5lZmljaWFyeSBhcyB0b3VjaGVkCiAgICBpZiBhY2NvdW50X2V4aXN0c19hbmRfaXNfZW1wdHkoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpOgogICAgICAgIGV2bS50b3VjaGVkX2FjY291bnRzLmFkZChiZW5lZmljaWFyeSkKCiAgICAjIEhBTFQgdGhlIGV4ZWN1dGlvbgogICAgZXZtLnJ1bm5pbmcgPSBGYWxzZQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpSFlIGUfZQoaAVo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dGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksIGdhcywgVWludChldm0uZ2FzX2xlZnQpLCBleHRlbmRfbWVtb3J5LmNvc3QsIEdBU19DQUxMCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZ2VuZXJpY19jYWxsKAogICAgICAgIGV2bSwKICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgZXZtLm1lc3NhZ2UudmFsdWUsCiAgICAgICAgZXZtLm1lc3NhZ2UuY2FsbGVyLAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGNvZGVfYWRkcmVzcywKICAgICAgICBGYWxzZSwKICAgICAgICBGYWxzZSwKICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YnAQAAGRlZiBkZWxlZ2F0ZWNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBVMjU2KDApLCBnYXMsIFVpbnQoZXZtLmdhc19sZWZ0KSwgZXh0ZW5kX21lbW9yeS5jb3N0LCBHQVNfQ0FMTAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgIGV2bS5tZXNzYWdlLnZhbHVlLAogICAgICAgIGV2bS5tZXNzYWdlLmNhbGxlciwKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgRmFsc2UsCiAgICAgICAgRmFsc2UsCiAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0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Y2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBVMjU2KDApLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIEdBU19DQUxMLAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgIFUyNTYoMCksCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgdG8sCiAgICAgICAgdG8sCiAgICAgICAgVHJ1ZSwKICAgICAgICBUcnVlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZRoP1iLBAAAZGVmIHN0YXRpY2NhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgdG8gPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwsCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZ2VuZXJpY19jYWxsKAogICAgICAgIGV2bSwKICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgVTI1NigwKSwKICAgICAgICBldm0u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KQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X2luZGV4LCBzaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgb3V0cHV0ID0gbWVtb3J5X3JlYWRfYnl0ZXMoZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X2luZGV4LCBzaXplKQogICAgZXZtLm91dHB1dCA9IGJ5dGVzKG91dHB1dCkKICAgIHJhaXNlIFJldmVydAoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpSFlIGUfZQoaAVoBmggasMSAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUjGIvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL3NyYy9ldGhlcmV1bS9ieXphbnRpdW0vdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS5weZSMCXhtbDpzcGFjZZRqtgIAAIwFZm9yY2WUiYwIbGFuZ3VhZ2WUjAZweXRob26UjA5oaWdobGlnaHRfYXJnc5R9lGoKCgAASwFzjAdsaW5lbm9zlIl1aBxqFggAAGgdaB5oH0vHaCBqQRIAAHViZWgOfZQoaBBdlGpiAgAAYWgTXZRoFV2UjAZyZXZlcnSUYWgXXZRoGV2UdWgcaDNoHWgeaB9LumggavgGAABoIWgDdWJlaA59lChoEF2UaO1haBNdlGgVXZSMDm1vZHVsZSBkZXRhaWxzlGFoF12UaBldlHVoHGgzaB1oHmgfSyloIGg1aCFoA3ViZWgOfZQoaBBdlIwwZXRoZXJldW0tdmlydHVhbC1tYWNoaW5lLWV2bS1zeXN0ZW0taW5zdHJ1Y3Rpb25zlGFoE12UaBVdlIwyZXRoZXJldW0gdmlydHVhbCBtYWNoaW5lIChldm0pIHN5c3RlbSBpbnN0cnVjdGlvbnOUYWgXXZRoGV2UdWgcaDNoHWgeaB9LBGggaANoIWgDdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllGhEdWgcaAGMDmN1cnJlbnRfc291cmNllGhEjAxjdXJyZW50X2xpbmWUSwCMCHNldHRpbmdzlIwRZG9jdXRpbHMuZnJvbnRlbmSUjAZWYWx1ZXOUk5QpgZR9lCiMDHJlcG9ydF9sZXZlbJRLAowKaGFsdF9sZXZlbJRLBIwRZXhpdF9zdGF0dXNfbGV2ZWyUSwWMBWRlYnVnlE6MDndhcm5pbmdfc3RyZWFtlE6MCXRyYWNlYmFja5ROjA9vdXRwdXRfZW5jb2RpbmeUjAV1dGYtOJSMHW91dHB1dF9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwReG1sY2hhcnJlZnJlcGxhY2WUjA5lcnJvcl9lbmNvZGluZ5SMBXV0Zi04lIwcZXJyb3JfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcpSMEGJhY2tzbGFzaHJlcGxhY2WUjBNyZWNvcmRfZGVwZW5kZW5jaWVzlIwOZG9jdXRpbHMudXRpbHOUjA5EZXBlbmRlbmN5TGlzdJSTlCmBlH2UKIwEbGlzdJRdlIwEZmlsZZROdWKMBmNvbmZpZ5ROjA1kdW1wX3NldHRpbmdzlE6MDmR1bXBfaW50ZXJuYWxzlE6MD2R1bXBfdHJhbnNmb3Jtc5ROjA9kdW1wX3BzZXVkb194bWyUTowQZXhwb3NlX2ludGVybmFsc5ROjA5zdHJpY3RfdmlzaXRvcpROjA9fZGlzYWJsZV9jb25maWeUTowHX3NvdXJjZZROjAxfZGVzdGluYXRpb26UjEhkb2MvZGlmZnMvYnl6YW50aXVtX2NvbnN0YW50aW5vcGxlL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucGlja2xlNjSUjA1fY29uZmlnX2ZpbGVzlF2UjBFsaW5lX2xlbmd0aF9saW1pdJRNECeMCXRhYl93aWR0aJRLCIwQc3ludGF4X2hpZ2hsaWdodJSMBGxvbmeUjAxzbWFydF9xdW90ZXOUiYwTc21hcnRxdW90ZXNfbG9jYWxlc5ROjB1jaGFyYWN0ZXJfbGV2ZWxfaW5saW5lX21hcmt1cJSJjAZ3cml0ZXKUjAN4bWyUjBljb21wYXJlX3NlY3Rpb25zX2J5X25hbWVzlEsBjAxkdW1wX3JzdGRpZmaUTowFX2JvdGiUfZQoaDhOjAlnZW5lcmF0b3KUTowJZGF0ZXN0YW1wlE6MC3NvdXJjZV9saW5rlE6MCnNvdXJjZV91cmyUTowNdG9jX2JhY2tsaW5rc5RqHwMAAIwSZm9vdG5vdGVfYmFja2xpbmtzlEsBjA1zZWN0bnVtX3hmb3JtlEsBjA5kb2N0aXRsZV94Zm9ybZRLAYwNZG9jaW5mb194Zm9ybZRLAYwSc2VjdHN1YnRpdGxlX3hmb3JtlEsAjA5zdHJpcF9jb21tZW50c5ROjA5pbnB1dF9lbmNvZGluZ5ROjBxpbnB1dF9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwGc3RyaWN0lIwNbGFuZ3VhZ2VfY29kZZSMAmVulIwOcGVwX3JlZmVyZW5jZXOUTowMcGVwX2Jhc2VfdXJslIwfaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL5SMFXBlcF9maWxlX3VybF90ZW1wbGF0ZZSMCHBlcC0lMDRklIwOcmZjX3JlZmVyZW5jZXOUTowMcmZjX2Jhc2VfdXJslIwbaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvlIwddHJpbV9mb290bm90ZV9yZWZlcmVuY2Vfc3BhY2WUTowWZmlsZV9pbnNlcnRpb25fZW5hYmxlZJRLAYwLcmF3X2VuYWJsZWSUSwGMDmF1dG9faWRfcHJlZml4lIwCaWSUjAlpZF9wcmVmaXiUaAaMG3N0cmlwX2VsZW1lbnRzX3dpdGhfY2xhc3Nlc5ROjA1zdHJpcF9jbGFzc2VzlE51jARib3RolH2UjApfb3B0aW9uc1RvlIwFX2JvdGiUjAtfb2xkX3NvdXJjZZSMTy9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvLnRveC9kb2NzL3N0YWdlMF9vdXQvYXV0b2FwaS+UjAtfbmV3X3NvdXJjZZSMCWRvYy9kaWZmc5RqPhMAAGo/EwAAjBZpZ25vcmVfaW5fc2VjdGlvbl9uYW1llF2UKIwJYnl6YW50aXVtlIwOY29uc3RhbnRpbm9wbGWUZXVijAhyZXBvcnRlcpROjBBpbmRpcmVjdF90YXJnZXRzlF2UjBFzdWJzdGl0dXRpb25fZGVmc5R9lIwSc3Vic3RpdHV0aW9uX25hbWVzlH2UjAhyZWZuYW1lc5R9lIwGcmVmaWRzlH2UjAduYW1laWRzlH2UjAluYW1ldHlwZXOUfZRoEH2UjA1mb290bm90ZV9yZWZzlH2UjA1jaXRhdGlvbl9yZWZzlH2UjA1hdXRvZm9vdG5vdGVzlF2UjBFhdXRvZm9vdG5vdGVfcmVmc5RdlIwQc3ltYm9sX2Zvb3Rub3Rlc5RdlIwUc3ltYm9sX2Zvb3Rub3RlX3JlZnOUXZSMCWZvb3Rub3Rlc5RdlIwJY2l0YXRpb25zlF2UjBJhdXRvZm9vdG5vdGVfc3RhcnSUSwGMFXN5bWJvbF9mb290bm90ZV9zdGFydJRLAIwKaWRfY291bnRlcpSMC2NvbGxlY3Rpb25zlIwHQ291bnRlcpSTlH2UhZRSlIwOcGFyc2VfbWVzc2FnZXOUXZSMEnRyYW5zZm9ybV9tZXNzYWdlc5RdlIwLdHJhbnNmb3JtZXKUTowLaW5jbHVkZV9sb2eUXZSMCmRlY29yYXRpb26UTmghaAN1Yi4=