gASVxtQAAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIwvbW9kdWxlLWV0aGVyZXVtLmZyb250aWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UYYwHY2xhc3Nlc5RdlIwFbmFtZXOUXZSMCGR1cG5hbWVzlF2UjAhiYWNrcmVmc5RdlIwFaXNtb2SUiHWMB3RhZ25hbWWUaAmMBnNvdXJjZZSMcC9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vZnJvbnRpZXIvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3SUjARsaW5llEsBjAZwYXJlbnSUaAOMCV9kb2N1bWVudJRoA3VijA9zcGhpbnguYWRkbm9kZXOUjAVpbmRleJSTlCmBlH2UKGgFaAZoB12UaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwHZW50cmllc5RdlCiMBHBhaXKUjDBtb2R1bGU7IGV0aGVyZXVtLmZyb250aWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSwRoIGg1aCFoA3ViaACMBXRvcGljlJOUKYGUfZQoaAVoBmgHXZQoaDkpgZR9lChoBYwRVGFibGUgb2YgQ29udGVudHOUaAddlGg/jBFUYWJsZSBvZiBDb250ZW50c5SFlIGUfZQoaAVoBmggaFBoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHWgeaB9LCGggaE1oIWgDdWJoAIwLYnVsbGV0X2xpc3SUk5QpgZR9lChoBWgGaAddlChoAIwJbGlzdF9pdGVtlJOUKYGUfZQoaAVoBmgHXZRoAIwJcGFyYWdyYXBolJOUKYGUfZQoaAVoBmgHXZRoAIwJcmVmZXJlbmNllJOUKYGUfZQoaAVoBmgHXZRoP4wMSW50cm9kdWN0aW9ulIWUgZR9lChoBWgGaCBob2ghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQxlGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDGludHJvZHVjdGlvbpR1aBxobWgdTmgfTmggaGp1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGhldWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGhgaCFoA3ViaGQpgZR9lChoBWgGaAddlChoaSmBlH2UKGgFaAZoB12UaG4pgZR9lChoBWgGaAddlGg/jA9Nb2R1bGUgQ29udGVudHOUhZSBlH2UKGgFaAZoIGiRaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjANpZDKUYWgTXZRoFV2UaBddlGgZXZSMBXJlZmlklIwPbW9kdWxlLWNvbnRlbnRzlHVoHGhtaB1OaB9OaCBojnViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggaIt1YmhfKYGUfZQoaAVoBmgHXZRoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wJRnVuY3Rpb25zlIWUgZR9lChoBWgGaCBosGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQzlGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMCWZ1bmN0aW9uc5R1aBxobWgdTmgfTmggaK11YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGiqdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1OaB9OaCBop3ViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoXmgdTmgfTmggaIt1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaGBoIWgDdWJoZCmBlH2UKGgFaAZoB12UKGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MDk1vZHVsZSBEZXRhaWxzlIWUgZR9lChoBWgGaCBo3mghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQ0lGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDm1vZHVsZS1kZXRhaWxzlHVoHGhtaB1OaB9OaCBo23ViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdaERoH0sAaCBo2GghaAN1YmhfKYGUfZQoaAVoBmgHXZQoaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MBmNyZWF0ZZSFlIGUfZQoaAVoBmggaP1oIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZSMA2lkNZRhaBNdlGgVXZRoF12UaBldlIwFcmVmaWSUjAZjcmVhdGWUdWgcaG1oHU5oH05oIGj6dWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBo93ViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoY2gdaERoH0sAaCBo9GghaAN1YmhkKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFaAZoB12UaG4pgZR9lChoBWgGaAddlGg/jAZyZXR1cm6UhZSBlH2UKGgFaAZoIGofAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjANpZDaUYWgTXZRoFV2UaBddlGgZXZSMBXJlZmlklIwGcmV0dXJulHVoHGhtaB1OaB9OaCBqHAEAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggahkBAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaPRoIWgDdWJoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wMZ2VuZXJpY19jYWxslIWUgZR9lChoBWgGaCBqQQEAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQ3lGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDGdlbmVyaWMtY2FsbJR1aBxobWgdTmgfTmggaj4BAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGo7AQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGj0aCFoA3ViaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MBGNhbGyUhZSBlH2UKGgFaAZoIGpjAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjANpZDiUYWgTXZRoFV2UaBddlGgZXZSMBXJlZmlklIwEY2FsbJR1aBxobWgdTmgfTmggamABAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGpdAQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGj0aCFoA3ViaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MCGNhbGxjb2RllIWUgZR9lChoBWgGaCBqhQEAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQ5lGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMCGNhbGxjb2RllHVoHGhtaB1OaB9OaCBqggEAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggan8BAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaPRoIWgDdWJoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wMc2VsZmRlc3RydWN0lIWUgZR9lChoBWgGaCBqpwEAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwEaWQxMJRhaBNdlGgVXZRoF12UaBldlIwFcmVmaWSUjAxzZWxmZGVzdHJ1Y3SUdWgcaG1oHU5oH05oIGqkAQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBqoQEAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoY2gdaERoH0sAaCBo9GghaAN1YmhkKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFaAZoB12UaG4pgZR9lChoBWgGaAddlGg/jAxkZWxlZ2F0ZWNhbGyUhZSBlH2UKGgFaAZoIGrJAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjARpZDExlGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDGRlbGVnYXRlY2FsbJR1aBxobWgdTmgfTmggasYBAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGrDAQAAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxoY2gdaERoH0sAaCBo9GghaAN1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaF5oHWhEaB9LAGggaNhoIWgDdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGhgaCFoA3ViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoXmgdaERoH0sAaCBoTWghaAN1YmVoDn2UKGgQXZSMEXRhYmxlLW9mLWNvbnRlbnRzlGFoE12UKIwIY29udGVudHOUjAVsb2NhbJRlaBVdlIwRdGFibGUgb2YgY29udGVudHOUYWgXXZRoGV2UdWgcaEtoHWgeaB9LCGggaDVoIWgDdWJoNCmBlH2UKGgFaAZoB12UKGg5KYGUfZQoaAWMDEludHJvZHVjdGlvbpRoB12UaD+MDEludHJvZHVjdGlvbpSFlIGUfZQoaAVoBmggagUCAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHWgeaB9LC2ggagICAAB1YmhpKYGUfZQoaAWMN0ltcGxlbWVudGF0aW9ucyBvZiB0aGUgRVZNIHN5c3RlbSByZWxhdGVkIGluc3RydWN0aW9ucy6UaAddlGg/jDdJbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEVWTSBzeXN0ZW0gcmVsYXRlZCBpbnN0cnVjdGlvbnMulIWUgZR9lChoBWgGaCBqEwIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdaB5oH0sNaCBqAgIAAHViaACMB2NvbW1lbnSUk5QpgZR9lChoBWgGaAddlGgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCXhtbDpzcGFjZZSMCHByZXNlcnZllHVoHGohAgAAaB1OaB9OaCBqAgIAAHViZWgOfZQoaBBdlGh+YWgTXZRoFV2UjAxpbnRyb2R1Y3Rpb26UYWgXXZRoGV2UdWgcaDNoHWgeaB9LC2ggaDVoIWgDdWJoNCmBlH2UKGgFaAZoB12UKGg5KYGUfZQoaAWMD01vZHVsZSBDb250ZW50c5RoB12UaD+MD01vZHVsZSBDb250ZW50c5SFlIGUfZQoaAVoBmggajgCAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHWgeaB9LE2ggajUCAABoIWgDdWJoNCmBlH2UKGgFaAZoB12UKGg5KYGUfZQoaAWMCUZ1bmN0aW9uc5RoB12UaD+MCUZ1bmN0aW9uc5SFlIGUfZQoaAVoBmggakkCAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHWgeaB9LF2ggakYCAABoIWgDdWJoIowQdGFidWxhcl9jb2xfc3BlY5STlCmBlH2UKGgFaAZoB12UaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwEc3BlY5SMEFxYezF9ezJ9XFh7MX17Mn2UdWgcalcCAABoHYyBL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9mcm9udGllci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNjo8YXV0b3N1bW1hcnk+lGgfSwBoIGpGAgAAaCFoA3VijBZzcGhpbnguZXh0LmF1dG9zdW1tYXJ5lIwRYXV0b3N1bW1hcnlfdGFibGWUk5QpgZR9lChoBVhnAQAACgoKCmNyZWF0ZQoKQ3JlYXRlcyBhIG5ldyBhY2NvdW50IHdpdGggYXNzb2NpYXRlZCBjb2RlLgoKcmV0dXJuXwoKSGFsdHMgZXhlY3V0aW9uIHJldHVybmluZyBvdXRwdXQgZGF0YS4KCmdlbmVyaWNfY2FsbAoKUGVyZm9ybSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgQ0FMTCogZmFtaWx5IG9mIG9wY29kZXMuCgpjYWxsCgpNZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LgoKY2FsbGNvZGUKCk1lc3NhZ2UtY2FsbCBpbnRvIHRoaXMgYWNjb3VudCB3aXRoIGFsdGVybmF0aXZlIGFjY291bnTigJlzIGNvZGUuCgpzZWxmZGVzdHJ1Y3QKCkhhbHQgZXhlY3V0aW9uIGFuZCByZWdpc3RlciBhY2NvdW50IGZvciBsYXRlciBkZWxldGlvbi6UaAddlGgAjAV0YWJsZZSTlCmBlH2UKGgFaAZoB12UaACMBnRncm91cJSTlCmBlH2UKGgFaAZoB12UKGgAjAdjb2xzcGVjlJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhjb2x3aWR0aJRLCnVoHGp2AgAAaB1oRGgfSwBoIGpzAgAAaCFoA3ViancCAAApgZR9lChoBWgGaAddlGgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGNvbHdpZHRolEtadWgcanYCAABoHWhEaB9LAGgganMCAABoIWgDdWJoAIwFdGJvZHmUk5QpgZR9lChoBWgGaAddlChoAIwDcm93lJOUKYGUfZQoaAVoBmgHXZQoaACMBWVudHJ5lJOUKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjD86b2JqOmBjcmVhdGUgPGV0aGVyZXVtLmZyb250aWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRlPmCUaAddlGhuKYGUfZQoaAVoBmgHXZRoAIwHbGl0ZXJhbJSTlCmBlH2UKGgFap0CAABoB12UaD+MBmNyZWF0ZZSFlIGUfZQoaAVoBmggaqQCAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UKIwEeHJlZpSMAnB5lIwGcHktb2JqlGVoFV2UaBddlGgZXZR1aBxqogIAAGgdTmgfTmggap8CAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSML2V0aGVyZXVtLmZyb250aWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRllIwIcmVmdGl0bGWUjC9ldGhlcmV1bS5mcm9udGllci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNyZWF0ZZR1aBxobWgdTmgfTmggapsCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyBL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9mcm9udGllci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNjo8YXV0b3N1bW1hcnk+lGgfSwFoIGqYAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqWAgAAaB1OaB9OaCBqkwIAAHViapcCAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UaAddlGg/jCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulIWUgZR9lChoBWgGaCBqzwIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2Zyb250aWVyL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM2OjxhdXRvc3VtbWFyeT6UaB9LAWggaswCAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapYCAABoHU5oH05oIGqTAgAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGqRAgAAaB1oRGgfSwBoIGqOAgAA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ZXJldW0uZnJvbnRpZXIudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jYWxsY29kZT5glGgHXZRobimBlH2UKGgFaAZoB12UaqMCAAApgZR9lChoBWr8AwAAaAddlGg/jAhjYWxsY29kZZSFlIGUfZQoaAVoBmggagEEAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UKGquAgAAjAJweZSMBnB5LW9iapRlaBVdlGgXXZRoGV2UdWgcaqICAABoHU5oH05oIGr+AwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIaW50ZXJuYWyUiIwFcmVmaWSUjDFldGhlcmV1bS5mcm9udGllci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGxjb2RllIwIcmVmdGl0bGWUjDFldGhlcmV1bS5mcm9udGllci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGxjb2RllHVoHGhtaB1OaB9OaCBq+gMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIEvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2Zyb250aWVyL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM2OjxhdXRvc3VtbWFyeT6UaB9LAWggavcDAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcapYCAABoHU5oH05oIGr0AwAAdWJqlwIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxBTWVzc2FnZS1jYWxsIGludG8gdGhpcyBhY2NvdW50IHdpdGggYWx0ZXJuYXRpdmUgYWNjb3VudOKAmXMgY29kZS6UaAddlGg/jEFNZXNzYWdlLWNhbGwgaW50byB0aGlzIGFjY291bnQgd2l0aCBhbHRlcm5hdGl2ZSBhY2NvdW504oCZcyBjb2RlLpSFlIGUfZQoaAVoBmggaisEAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyBL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVj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ICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19DUkVBVEUgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgY3JlYXRlX21lc3NhZ2VfZ2FzID0gZXZtLmdhc19sZWZ0CiAgICBldm0uZ2FzX2xlZnQgPSBVMjU2KDApCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5ub25jZSwKICAgICkKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgZWxpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICAgICApCgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICAgICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgICAgIGNhbGxlcj1ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdGFyZ2V0PUJ5dGVzMCgpLAogICAgICAgICAgICBnYXM9Y3JlYXRlX21lc3NhZ2VfZ2FzLAogICAgICAgICAgICB2YWx1ZT1lbmRvd21lbnQsCiAgICAgICAgICAgIGRhdGE9YiIiLAogICAgICAgICAgICBjb2RlPWNhbGxfZGF0YSwKICAgICAgICAgICAgY3VycmVudF90YXJnZXQ9Y29udHJhY3RfYWRkcmVzcywKICAgICAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgICAgICBjb2RlX2FkZHJlc3M9Tm9uZSwKICAgICAgICApCiAgICAgICAgY2hpbGRfZXZtID0gcHJvY2Vzc19jcmVhdGVfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgICAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9lcnJvcihldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQogICAgICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UKGg/WCMHAABkZWYgY3JlYXRlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBUaGlzIGltcG9ydCBjYXVzZXMgYSBjaXJjdWxhciBpbXBvcnQgZXJyb3IKICAgICMgaWYgaXQncyBub3QgbW92ZWQgaW5zaWRlIHRoaXMgbWV0aG9kCiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19jcmVhdGVfbWVzc2FnZQoKICAgICMgU1RBQ0sKICAgIGVuZG93bWVudCA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19DUkVBVEUgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgY3JlYXRlX21lc3NhZ2VfZ2FzID0gZXZtLmdhc19sZWZ0CiAgICBldm0uZ2FzX2xlZnQgPSBVMjU2KDApCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5ub25jZSwKICAgICkKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgZWxpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICAgICApCgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICAgICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgICAgIGNhbGxlcj1ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdGFyZ2V0PUJ5dGVzMCgpLAogICAgICAgICAgICBnYXM9Y3JlYXRlX21lc3NhZ2VfZ2FzLAogICAgICAg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bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlGgHXZRoP1gHAgAAZGVmIHJldHVybl8oZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBtZW1vcnlfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZSldCiAgICApCgogICAgY2hhcmdlX2dhcyhldm0sIEdBU19aRVJPICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZXZtLm91dHB1dCA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICkKCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBqGwcAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2Zyb250aWVyL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0ucHmUjAl4bWw6c3BhY2WUai0CAACMBWZvcmNllImMCGxhbmd1YWdllIwGcHl0aG9ulIwOaGlnaGxpZ2h0X2FyZ3OUfZRqOwYAAEsBc4wHbGluZW5vc5SJdWgcahEGAABo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aW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1jb2RlX2FkZHJlc3MsCiAgICApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDEpKQoKICAgIGFjdHVhbF9vdXRwdXRfc2l6ZSA9IG1pbihtZW1vcnlfb3V0cHV0X3NpemUsIFUyNTYobGVuKGNoaWxkX2V2bS5vdXRwdXQpKSkKICAgIG1lbW9yeV93cml0ZSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgY2hpbGRfZXZtLm91dHB1dFs6YWN0dWFsX291dHB1dF9zaXplXSwKICAgICkKlGgHXZQoaD+MhWRlZiBnZW5lcmljX2NhbGwoCiAgICBldm06IEV2bSwKICAgIGdhczogVWludCwKICAgIHZhbHVlOiBVMjU2LAogICAgY2FsbGVyOiBBZGRyZXNzLAogICAgdG86IEFkZHJlc3MsCiAgICBjb2RlX2FkZHJlc3M6IEFkZHJlc3MsCiAgICCUhZSBlH2UKGgFaAZoIGq+CAAAaCFoA2gdaERoH0sAdWJqbgUAACmBlH2UKGgFaAZoB12UaD+MIXNob3VsZF90cmFuc2Zlcl92YWx1ZTogYm9vbCwKICAgIJSFlIGUfZQoaAVoBmggasYIAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZRoF12UaBldlHVoHGptBQAAaCBqvggAAGghaANoHWhEaB9LAHViaD9YAAMAAG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9pbnB1dF9zaXplOiBVMjU2LAogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZTogVTI1NiwKKSAtPiBOb25lOgogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfbWVzc2FnZQoKICAgIGlmIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUOgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBnYXMKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplCiAgICApCiAgICBjb2RlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgY29kZV9hZGRyZXNzKS5jb2RlCiAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICBjYWxsZXI9Y2FsbGVyLAogICAgICAgIHRhcmdldD10bywKICAgICAgICBnYXM9VTI1NihnYXMpLAogICAgICAgIHZhbHVlPXZhbHVlLAogICAgICAgIGRhdGE9Y2FsbF9kYXRhLAogICAgICAgIGNvZGU9Y29kZSwKICAgICAgICBjdXJyZW50X3RhcmdldD10bywKICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgY29kZV9hZGRyZXNzPWNvZGVfYWRkcmVzcywKICAgIJSFlIGUfZQoaAVoBmggar4IAABoIWgDaB1oRGgfSwB1YmpuBQAAKYGUfZQoaAVoBmgHXZRoP4wxc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPXNob3VsZF90cmFuc2Zlcl92YWx1ZSwKICAgIJSFlIGUfZQoaAVoBmggatgIAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZRoF12UaBldlHVoHGptBQAAaCBqvggAAGghaANoHWhEaB9LAHViaD9Y2wEAACkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMSkpCgogICAgYWN0dWFsX291dHB1dF9zaXpl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bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBldm0uZW52LnN0YXRlLCBnYXMsIHRvLCB2YWx1ZQogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgICkuYmFsYW5jZQogICAgaWYgc2VuZGVyX2JhbGFuY2UgPCB2YWx1ZToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1iWBAAAZGVmIGNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgdG8gPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgdmFsdWUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGdhcywgdG8sIHZhbHVlCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21l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X21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGdhcywgdG8sIHZhbHVlCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgY29kZV9hZGRyZXNzLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1jTBAAAZGVmIGNhbGxjb2RlKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICB2YWx1ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICB0byA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CgogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGdhcywgdG8sIHZhbHVlCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVt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YmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUaAddlGg/WFQDAABkZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBwYXNzCgogICAgIyBPUEVSQVRJT04KICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBIQUxUIHRoZSBleGVjdXRpb24KICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUhZSBlH2UKGgFaAZoIGq+CwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxhL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vZnJvbnRpZXIvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS5weZSMCXhtbDpzcGFjZZRqLQIAAIwFZm9yY2WUiYwIbGFuZ3VhZ2WUjAZweXRob26UjA5oaWdobGlnaHRfYXJnc5R9lGo7BgAASwFzjAdsaW5lbm9zlIl1aBxqEQYAAGgdaB5oH0uOaCBq9AoAAHViZWgOfZQoaBBdlGq2AQAAYWgTXZRoFV2UjAxzZWxmZGVzdHJ1Y3SUYWgXXZRoGV2UdWgcaDNoHWgeaB9LgWggahQFAABoIWgDdWJoNCmBlH2UKGgFaAZoB12UKGg5KYGUfZQoaAWMDGRlbGVnYXRlY2FsbJRoB12UaD+MDGRlbGVnYXRlY2FsbJSFlIGUfZQoaAVoBmggat8LAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHYxxL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2Mv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fZQoaBBdlGgTXZQoajoMAACMCGZ1bmN0aW9ulGVoFV2UaBddlGgZXZSMBmRvbWFpbpRqOgwAAIwHb2JqdHlwZZRqpAwAAIwIZGVzY3R5cGWUaqQMAACMB25vaW5kZXiUiXVoHGpBBQAAaB1OaB9OaCBq3AsAAHViahIGAAApgZR9lChoBVjxAwAAZGVmIGRlbGVnYXRlY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICBjb2RlX2FkZHJlc3MgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIEdBU19DQUxMICsgZ2FzICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZ2VuZXJpY19jYWxsKAogICAgICAgIGV2bSwKICAgICAgICBnYXMsCiAgICAgICAgZXZtLm1lc3NhZ2UudmFsdWUsCiAgICAgICAgZXZtLm1lc3NhZ2UuY2FsbGVyLAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGNvZGVfYWRkcmVzcywKICAgICAgICBGYWxzZSwKICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9Y8QMAAGRlZiBkZWxlZ2F0ZWNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ0FMTCArIGdhcyArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgZ2FzLAogICAgICAgIGV2bS5tZXNzYWdlLnZhbHVlLAogICAgICAgIGV2bS5tZXNzYWdlLmNhbGxlciwKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgRmFsc2UsCiAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUhZSBlH2UKGgFaAZoIGqsDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllIxiL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9zcmMvZXRoZXJldW0vaG9tZXN0ZWFkL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0ucHmUjAl4bWw6c3BhY2WUai0CAACMBWZvcmNllImMCGxhbmd1YWdllIwGcHl0aG9ulIwOaGlnaGxpZ2h0X2FyZ3OUfZSMC2xpbmVub3N0YXJ0lEsBc4wHbGluZW5vc5SJdWgcahEGAABoHWrtCwAAaB9LoWggatwLAAB1YmVoDn2UKGgQXZRq2AEAAGFoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZSMDGRlbGVnYXRlY2FsbJRhaBddlGgZXZR1aBxoM2gdau0LAABoH0uUaCBqFAUAAGghaAN1YmVoDn2UKGgQXZRo7WFoE12UaBVdlIwObW9kdWxlIGRldGFpbHOUYWgXXZRoGV2UdWgcaDNoHWgeaB9LJmggaDVoIWgDdWJlaA59lChoEF2UjDBldGhlcmV1bS12aXJ0dWFsLW1hY2hpbmUtZXZtLXN5c3RlbS1pbnN0cnVjdGlvbnOUYWgTXZRoFV2UjDJldGhlcmV1bSB2aXJ0dWFsIG1hY2hpbmUgKGV2bSkgc3lzdGVtIGluc3RydWN0aW9uc5RhaBddlGgZXZR1aBxoM2gdaB5oH0sEaCBoA2ghaAN1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUaER1aBxoAYwOY3VycmVudF9zb3VyY2WUaESMDGN1cnJlbnRfbGluZZRLAIwIc2V0dGluZ3OUjBFkb2N1dGlscy5mcm9udGVuZJSMBlZhbHVlc5STlCmBlH2UKIwMcmVwb3J0X2xldmVslEsCjApoYWx0X2xldmVslEsEjBFleGl0X3N0YXR1c19sZXZlbJRLBYwFZGVidWeUTowOd2FybmluZ19zdHJlYW2UTowJdHJhY2ViYWNrlE6MD291dHB1dF9lbmNvZGluZ5SMBXV0Zi04lIwdb3V0cHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjBF4bWxjaGFycmVmcmVwbGFjZZSMDmVycm9yX2VuY29kaW5nlIwFdXRmLTiUjBxlcnJvcl9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwQYmFja3NsYXNocmVwbGFjZZSME3JlY29yZF9kZXBlbmRlbmNpZXOUjA5kb2N1dGlscy51dGlsc5SMDkRlcGVuZGVuY3lMaXN0lJOUKYGUfZQojARsaXN0lF2UjARmaWxllE51YowGY29uZmlnlE6MDWR1bXBfc2V0dGluZ3OUTowOZHVtcF9pbnRlcm5hbHOUTowPZHVtcF90cmFuc2Zvcm1zlE6MD2R1bXBfcHNldWRvX3htbJROjBBleHBvc2VfaW50ZXJuYWxzlE6MDnN0cmljdF92aXNpdG9ylE6MD19kaXNhYmxlX2NvbmZpZ5ROjAdfc291cmNllE6MDF9kZXN0aW5hdGlvbpSMQmRvYy9kaWZmcy9mcm9udGllcl9ob21lc3RlYWQvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5waWNrbGU2NJSMDV9jb25maWdfZmlsZXOUXZSMEWxpbmVfbGVuZ3RoX2xpbWl0lE0QJ4wJdGFiX3dpZHRolEsIjBBzeW50YXhfaGlnaGxpZ2h0lIwEbG9uZ5SMDHNtYXJ0X3F1b3Rlc5SJjBNzbWFydHF1b3Rlc19sb2NhbGVzlE6MHWNoYXJhY3Rlcl9sZXZlbF9pbmxpbmVfbWFya3VwlImMBndyaXRlcpSMA3htbJSMGWNvbXBhcmVfc2VjdGlvbnNfYnlfbmFtZXOUSwGMDGR1bXBfcnN0ZGlmZpROjAVfYm90aJR9lChoOE6MCWdlbmVyYXRvcpROjAlkYXRlc3RhbXCUTowLc291cmNlX2xpbmuUTowKc291cmNlX3VybJROjA10b2NfYmFja2xpbmtzlGqWAgAAjBJmb290bm90ZV9iYWNrbGlua3OUSwGMDXNlY3RudW1feGZvcm2USwGMDmRvY3RpdGxlX3hmb3JtlEsBjA1kb2NpbmZvX3hmb3JtlEsBjBJzZWN0c3VidGl0bGVfeGZvcm2USwCMDnN0cmlwX2NvbW1lbnRzlE6MDmlucHV0X2VuY29kaW5nlE6MHGlucHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjAZzdHJpY3SUjA1sYW5ndWFnZV9jb2RllIwCZW6UjA5wZXBfcmVmZXJlbmNlc5ROjAxwZXBfYmFzZV91cmyUjB9odHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvlIwVcGVwX2ZpbGVfdXJsX3RlbXBsYXRllIwIcGVwLSUwNGSUjA5yZmNfcmVmZXJlbmNlc5ROjAxyZmNfYmFzZV91cmyUjBtodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC+UjB10cmltX2Zvb3Rub3RlX3JlZmVyZW5jZV9zcGFjZZROjBZmaWxlX2luc2VydGlvbl9lbmFibGVklEsBjAtyYXdfZW5hYmxlZJRLAYwOYXV0b19pZF9wcmVmaXiUjAJpZJSMCWlkX3ByZWZpeJRoBowbc3RyaXBfZWxlbWVudHNfd2l0aF9jbGFzc2VzlE6MDXN0cmlwX2NsYXNzZXOUTnWMBGJvdGiUfZSMCl9vcHRpb25zVG+UjAVfYm90aJSMC19vbGRfc291cmNllIxPL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy8udG94L2RvY3Mvc3RhZ2UwX291dC9hdXRvYXBpL5SMC19uZXdfc291cmNllIwJZG9jL2RpZmZzlGopDQAAaioNAACMFmlnbm9yZV9pbl9zZWN0aW9uX25hbWWUXZQojAhmcm9udGllcpSMCWhvbWVzdGVhZJRldWKMCHJlcG9ydGVylE6MEGluZGlyZWN0X3RhcmdldHOUXZSMEXN1YnN0aXR1dGlvbl9kZWZzlH2UjBJzdWJzdGl0dXRpb25fbmFtZXOUfZSMCHJlZm5hbWVzlH2UjAZyZWZpZHOUfZSMB25hbWVpZHOUfZSMCW5hbWV0eXBlc5R9lGgQfZSMDWZvb3Rub3RlX3JlZnOUfZSMDWNpdGF0aW9uX3JlZnOUfZSMDWF1dG9mb290bm90ZXOUXZSMEWF1dG9mb290bm90ZV9yZWZzlF2UjBBzeW1ib2xfZm9vdG5vdGVzlF2UjBRzeW1ib2xfZm9vdG5vdGVfcmVmc5RdlIwJZm9vdG5vdGVzlF2UjAljaXRhdGlvbnOUXZSMEmF1dG9mb290bm90ZV9zdGFydJRLAYwVc3ltYm9sX2Zvb3Rub3RlX3N0YXJ0lEsAjAppZF9jb3VudGVylIwLY29sbGVjdGlvbnOUjAdDb3VudGVylJOUfZSFlFKUjA5wYXJzZV9tZXNzYWdlc5RdlIwSdHJhbnNmb3JtX21lc3NhZ2VzlF2UjAt0cmFuc2Zvcm1lcpROjAtpbmNsdWRlX2xvZ5RdlIwKZGVjb3JhdGlvbpROaCFoA3ViLg==