Ly8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwovLy8gQGZpbGUgICAgICAgPHNjcjFfdGFwYy5zdj4KLy8vIEBicmllZiAgICAgIFRBUCBDb250cm9sbGVyIChUQVBDKQovLy8KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb25hbGl0eToKIC8vIC0gQ29udHJvbHMgVEFQIG9wZXJhdGlvbgogLy8gLSBBbGxvd3MgZGVidWdnZXIgdG8gYWNjZXNzIFRBUCBEYXRhIHJlZ2lzdGVycyBhbmQgRE1JL1NDVSBzY2FuLWNoYWlucyB2aWEKIC8vICAgY29tbWFuZCB3cml0dGVuIGluIEluc3RydWN0aW9uIHJlZ2lzdGVyCiAvLwogLy8gU3RydWN0dXJlOgogLy8gLSBTeW5jaHJvbm91cyByZXNldCBnZW5lcmF0aW9uCiAvLyAtIFRBUEMgRlNNCiAvLyAtIFRBUEMgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXJzCiAvLyAtIFRBUEMgRFJzL0RNSS9TQ1Ugc2Nhbi1jaGFpbnMKIC8vIC0gVEFQQyBURE8gZW5hYmxlIGFuZCBvdXRwdXQgUmVnaXN0ZXJzCiAvLyAtIFRBUEMgRGF0YSBSZWdpc3RlcnMKIC8vICAgLSBCWVBBU1MKIC8vICAgLSBJRENPREUKIC8vICAgLSBCVUlMRCBJRAogLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmBpbmNsdWRlICJzY3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoIgoKYGlmZGVmIFNDUjFfREJHX0VOCmBpbmNsdWRlICJzY3IxX3RhcGMuc3ZoIgpgaW5jbHVkZSAic2NyMV9kbS5zdmgiCgptb2R1bGUgc2NyMV90YXBjICgKICAgIC8vIEpUQUcgc2lnbmFscwogICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190cnN0X24sICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IFJlc2V0IChUUlNUbikKICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGNfdGNrLCAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBDbG9jayAoVENLKQogICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190bXMsICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IE1vZGUgU2VsZWN0IChUTVMpCiAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3RkaSwgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlc3QgRGF0YSBJbnB1dCAoVERJKQogICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwY190ZG8sICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IERhdGEgT3V0cHV0IChURE8pCiAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjX3Rkb19lbiwgICAgICAgICAgICAgICAgICAgIC8vIFRETyBFbmFibGUsIHNpZ25hbCBmb3IgVERPIGJ1ZmZlciBjb250cm9sCgogICAgLy8gRnVzZXM6CiAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2MydGFwY19mdXNlX2lkY29kZV9pLCAgICAgICAgIC8vIElEQ09ERSB2YWx1ZSBmcm9tIGZ1c2VzCgogICAgLy8gRE1JL1NDVSBzY2FuLWNoYWlucwogICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19zY3VfY2hfc2VsX28sICAgICAvLyBTQ1UgQ2hhaW4gU2VsZWN0CiAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfbywgICAgIC8vIERNSSBDaGFpbiBTZWxlY3QKICAgIG91dHB1dCAgbG9naWMgW1NDUjFfREJHX0RNSV9DSF9JRF9XSURUSC0xOjBdICAgIHRhcGMydGFwY3N5bmNfY2hfaWRfbywgICAgICAgICAgLy8gRE1JL1NDVSBDaGFpbiBJZGVudGlmaWVyCiAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfbywgICAgIC8vIERNSS9TQ1UgQ2hhaW4gQ2FwdHVyZQogICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwYzJ0YXBjc3luY19jaF9zaGlmdF9vLCAgICAgICAvLyBETUkvU0NVIENoYWluIFNoaWZ0CiAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3VwZGF0ZV9vLCAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVXBkYXRlCiAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjMnRhcGNzeW5jX2NoX3RkaV9vLCAgICAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERJCiAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pICAgICAgICAgIC8vIERNSS9TQ1UgQ2hhaW4gVERPCik7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBMb2NhbCBTaWduYWxzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyc3Rfbl9pbnQ7ICAgICAgIC8vIFN5bmMgcmVzZXQgc2lnbmFsCgovLyBUQVBDIEZTTSBzaWduYWxzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0eXBlX3NjcjFfdGFwX3N0YXRlX2UgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZmY7ICAgICAgIC8vIFRBUCdzIGN1cnJlbnQgc3RhdGUKdHlwZV9zY3IxX3RhcF9zdGF0ZV9lICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX25leHQ7ICAgICAvLyBUQVAncyBuZXh0IHN0YXRlCgovLyBDb250cm9sIHNpZ25hbHMKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX3Jlc2V0Owpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfdXBkOwpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfY2FwOwpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21faXJfc2hmdDsKCi8vIFJlZ2lzdGVyZWQgY29udHJvbCBzaWduYWxzCmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9pcl9zaGlmdF9mZjsKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X25leHQ7CmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX2ZmOwpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfY2FwdHVyZV9uZXh0Owpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfc2hpZnRfZmY7CmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX2ZzbV9kcl9zaGlmdF9uZXh0Owpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmOwpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX25leHQ7CgovLyBUQVBDIEluc3RydWN0aW9uIFJlZ2lzdGVycyBzaWduYWxzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpsb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9zaGlmdF9mZjsgICAvLyBJbnN0cnVjdGlvbiBTaGlmdCBSZWdpc3Rlcgpsb2dpYyBbU0NSMV9UQVBfSU5TVFJVQ1RJT05fV0lEVEgtMTowXSAgICAgIHRhcF9pcl9zaGlmdF9uZXh0OyAvLyBJbnN0cnVjdGlvbiBTaGlmdCBSZWdpc3RlciBuZXh0IHZhbHVlCmxvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSC0xOjBdICAgICAgdGFwX2lyX2ZmOyAgICAgICAgIC8vIEluc3RydWN0aW9uIFJlZ2lzdGVyCmxvZ2ljIFtTQ1IxX1RBUF9JTlNUUlVDVElPTl9XSURUSC0xOjBdICAgICAgdGFwX2lyX25leHQ7ICAgICAgIC8vIEluc3RydWN0aW9uIFJlZ2lzdGVyIG5leHQgdmFsdWUKCi8vIFRBUEMgRGF0YSBSZWdpc3RlcnMgc2lnbmFscwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gQllQQVNTIHJlZ2lzdGVyCmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfYnlwYXNzX3NlbDsKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ieXBhc3NfdGRvOwoKLy8gSURDT0RFIHJlZ2lzdGVyCmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJfaWRjb2RlX3NlbDsKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9pZGNvZGVfdGRvOwoKLy8gQlVJTEQgSUQgcmVnaXN0ZXIKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcl9ibGRfaWRfc2VsOwpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyX2JsZF9pZF90ZG87Cgpsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyX291dDsKCi8vIFRETyByZWdpc3RlcnMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRETyBlbmFibGUgcmVnaXN0ZXIKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fZW5fZmY7CmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvX2VuX25leHQ7CgovLyBURE8gb3V0cHV0IHJlZ2lzdGVyCmxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRvX291dF9mZjsKbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZG9fb3V0X25leHQ7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUQVBDIFN5bmNocm9ub3VzIFJlc2V0IGxvZ2ljCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphbHdheXNfZmYgQChuZWdlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgogICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KICAgICAgICB0cnN0X25faW50IDw9IDEnYjA7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIHRyc3Rfbl9pbnQgPD0gfnRhcF9mc21fcmVzZXQ7CiAgICBlbmQKZW5kCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUQVAncyBGU00KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCiAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgogICAgICAgIHRhcF9mc21fZmYgPD0gU0NSMV9UQVBfU1RBVEVfUkVTRVQ7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIHRhcF9mc21fZmYgPD0gdGFwX2ZzbV9uZXh0OwogICAgZW5kCmVuZAoKYWx3YXlzX2NvbWIgYmVnaW4KICAgIGNhc2UgKHRhcF9mc21fZmYpCiAgICAgICAgU0NSMV9UQVBfU1RBVEVfUkVTRVQgICAgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfUkVTRVQgICAgICAgIDogU0NSMV9UQVBfU1RBVEVfSURMRTsKICAgICAgICBTQ1IxX1RBUF9TVEFURV9JRExFICAgICAgIDogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9EUl9TRUxfU0NBTiAgOiBTQ1IxX1RBUF9TVEFURV9JRExFOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0RSX0NBUFRVUkU7CiAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfQ0FQVFVSRSA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEgICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQ7CiAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEgICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQ7CiAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDEgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0U7CiAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0UgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDIgICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfUEFVU0U7CiAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfRVhJVDIgICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICAgIDogU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQ7CiAgICAgICAgU0NSMV9UQVBfU1RBVEVfRFJfVVBEQVRFICA6IHRhcF9mc21fbmV4dCA9IHRhcGNfdG1zID8gU0NSMV9UQVBfU1RBVEVfRFJfU0VMX1NDQU4gIDogU0NSMV9UQVBfU1RBVEVfSURMRTsKICAgICAgICBTQ1IxX1RBUF9TVEFURV9JUl9TRUxfU0NBTjogdGFwX2ZzbV9uZXh0ID0gdGFwY190bXMgPyBTQ1IxX1RBUF9TVEFURV9SRVNFVCAgICAgICAgOiBTQ1IxX1RBUF9TVEFURV9JUl9DQVBUVVJFOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX0NBUFRVUkUgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxICAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQxICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1BBVVNFOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX1BBVVNFICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQyICAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1BBVVNFOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX0VYSVQyICAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgICA6IFNDUjFfVEFQX1NUQVRFX0lSX1NISUZUOwogICAgICAgIFNDUjFfVEFQX1NUQVRFX0lSX1VQREFURSAgOiB0YXBfZnNtX25leHQgPSB0YXBjX3RtcyA/IFNDUjFfVEFQX1NUQVRFX0RSX1NFTF9TQ0FOICA6IFNDUjFfVEFQX1NUQVRFX0lETEU7CmBpZmRlZiBTQ1IxX1hQUk9QX0VOCiAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21fbmV4dCA9IFNDUjFfVEFQX1NUQVRFX1hYWDsKYGVsc2UgLy8gU0NSMV9YUFJPUF9FTgogICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgOiB0YXBfZnNtX25leHQgPSB0YXBfZnNtX2ZmOwpgZW5kaWYgLy8gU0NSMV9YUFJPUF9FTgogICAgZW5kY2FzZQplbmQKCmFzc2lnbiB0YXBfZnNtX3Jlc2V0ICAgPSAodGFwX2ZzbV9mZiA9PSBTQ1IxX1RBUF9TVEFURV9SRVNFVCk7CmFzc2lnbiB0YXBfZnNtX2lyX3VwZCAgPSAodGFwX2ZzbV9mZiA9PSBTQ1IxX1RBUF9TVEFURV9JUl9VUERBVEUpOwphc3NpZ24gdGFwX2ZzbV9pcl9jYXAgID0gKHRhcF9mc21fZmYgPT0gU0NSMV9UQVBfU1RBVEVfSVJfQ0FQVFVSRSk7CmFzc2lnbiB0YXBfZnNtX2lyX3NoZnQgPSAodGFwX2ZzbV9mZiA9PSBTQ1IxX1RBUF9TVEFURV9JUl9TSElGVCk7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUQVBDIEluc3RydWN0aW9uIFJlZ2lzdGVycwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gVEFQQyBJbnN0cnVjdGlvbiBTaGlmdCByZWdpc3RlcgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCiAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9ICcwOwogICAgZW5kIGVsc2UgaWYgKH50cnN0X25faW50KSBiZWdpbgogICAgICAgIHRhcF9pcl9zaGlmdF9mZiA8PSAnMDsKICAgIGVuZCBlbHNlIGJlZ2luCiAgICAgICAgdGFwX2lyX3NoaWZ0X2ZmIDw9IHRhcF9pcl9zaGlmdF9uZXh0OwogICAgZW5kCmVuZAoKYXNzaWduIHRhcF9pcl9zaGlmdF9uZXh0ID0gdGFwX2ZzbV9pcl9jYXAgID8ge3soJGJpdHModGFwX2lyX3NoaWZ0X2ZmKS0xKXsxJ2IwfX0sIDEnYjF9CiAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21faXJfc2hmdCA/IHt0YXBjX3RkaSwgdGFwX2lyX3NoaWZ0X2ZmWyRsZWZ0KHRhcF9pcl9zaGlmdF9mZik6MV19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhcF9pcl9zaGlmdF9mZjsKCi8vIFRBUEMgSW5zdHJ1Y3Rpb24gcmVnaXN0ZXIKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsd2F5c19mZiBAKG5lZ2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCiAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgogICAgICAgIHRhcF9pcl9mZiA8PSBTQ1IxX1RBUF9JTlNUUl9JRENPREU7CiAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCiAgICAgICAgdGFwX2lyX2ZmIDw9IFNDUjFfVEFQX0lOU1RSX0lEQ09ERTsKICAgIGVuZCBlbHNlIGJlZ2luCiAgICAgICAgdGFwX2lyX2ZmIDw9IHRhcF9pcl9uZXh0OwogICAgZW5kCmVuZAoKYXNzaWduIHRhcF9pcl9uZXh0ID0gdGFwX2ZzbV9pcl91cGQgPyB0YXBfaXJfc2hpZnRfZmYgOiB0YXBfaXJfZmY7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb250cm9sIHNpZ25hbHMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCiAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgogICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gMSdiMDsKICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KICAgICAgICB0YXBfZnNtX2lyX3NoaWZ0X2ZmIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIHRhcF9mc21faXJfc2hpZnRfZmYgPD0gdGFwX2ZzbV9pcl9zaGlmdF9uZXh0OwogICAgZW5kCmVuZAoKYXNzaWduIHRhcF9mc21faXJfc2hpZnRfbmV4dCA9ICh0YXBfZnNtX25leHQgPT0gU0NSMV9UQVBfU1RBVEVfSVJfU0hJRlQpOwoKYWx3YXlzX2ZmIEAocG9zZWRnZSB0YXBjX3RjaywgbmVnZWRnZSB0YXBjX3Ryc3RfbikgYmVnaW4KICAgIGlmICh+dGFwY190cnN0X24pIGJlZ2luCiAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX2ZmIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCiAgICAgICAgdGFwX2ZzbV9kcl9jYXB0dXJlX2ZmIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIHRhcF9mc21fZHJfY2FwdHVyZV9mZiA8PSB0YXBfZnNtX2RyX2NhcHR1cmVfbmV4dDsKICAgIGVuZAplbmQKCmFzc2lnbiB0YXBfZnNtX2RyX2NhcHR1cmVfbmV4dCA9ICh0YXBfZnNtX25leHQgPT0gU0NSMV9UQVBfU1RBVEVfRFJfQ0FQVFVSRSk7CgphbHdheXNfZmYgQChwb3NlZGdlIHRhcGNfdGNrLCBuZWdlZGdlIHRhcGNfdHJzdF9uKSBiZWdpbgogICAgaWYgKH50YXBjX3Ryc3RfbikgYmVnaW4KICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCiAgICAgICAgdGFwX2ZzbV9kcl9zaGlmdF9mZiA8PSAxJ2IwOwogICAgZW5kIGVsc2UgYmVnaW4KICAgICAgICB0YXBfZnNtX2RyX3NoaWZ0X2ZmIDw9IHRhcF9mc21fZHJfc2hpZnRfbmV4dDsKICAgIGVuZAplbmQKCmFzc2lnbiB0YXBfZnNtX2RyX3NoaWZ0X25leHQgPSAodGFwX2ZzbV9uZXh0ID09IFNDUjFfVEFQX1NUQVRFX0RSX1NISUZUKTsKCmFsd2F5c19mZiBAKHBvc2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCiAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgogICAgICAgIHRhcF9mc21fZHJfdXBkYXRlX2ZmIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBpZiAofnRyc3Rfbl9pbnQpIGJlZ2luCiAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfZmYgPD0gMSdiMDsKICAgIGVuZCBlbHNlIGJlZ2luCiAgICAgICAgdGFwX2ZzbV9kcl91cGRhdGVfZmYgPD0gdGFwX2ZzbV9kcl91cGRhdGVfbmV4dDsKICAgIGVuZAplbmQKCmFzc2lnbiB0YXBfZnNtX2RyX3VwZGF0ZV9uZXh0ID0gKHRhcF9mc21fbmV4dCA9PSBTQ1IxX1RBUF9TVEFURV9EUl9VUERBVEUpOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gVEFQQyBEUnMvRE1JL1NDVSBzY2FuLWNoYWlucwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwogLy8gQ29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIHVuaXRzOgogLy8gLSBEYXRhIHNvdXJjZS9kZXN0aW5hdGlvbiBkZWNvZGVyCiAvLyAtIERNSSBjaGFubmVsIElEIGRlY29kZXIKCi8vIC0gUmVhZCBkYXRhIG11bHRpcGxleGVyCi8vIERhdGEgc291cmNlL2Rlc3RpbmF0aW9uIGRlY29kZXIKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsd2F5c19jb21iIGJlZ2luCiAgICBkcl9ieXBhc3Nfc2VsICAgICAgICAgICAgICAgPSAxJ2IwOwogICAgZHJfaWRjb2RlX3NlbCAgICAgICAgICAgICAgID0gMSdiMDsKICAgIGRyX2JsZF9pZF9zZWwgICAgICAgICAgICAgICA9IDEnYjA7CiAgICB0YXBjMnRhcGNzeW5jX3NjdV9jaF9zZWxfbyAgPSAxJ2IwOwogICAgdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gID0gMSdiMDsKICAgIGNhc2UgKHRhcF9pcl9mZikKICAgICAgICBTQ1IxX1RBUF9JTlNUUl9EVE1DUyAgICAgOiB0YXBjMnRhcGNzeW5jX2RtaV9jaF9zZWxfbyA9IDEnYjE7CiAgICAgICAgU0NSMV9UQVBfSU5TVFJfRE1JX0FDQ0VTUzogdGFwYzJ0YXBjc3luY19kbWlfY2hfc2VsX28gPSAxJ2IxOwogICAgICAgIFNDUjFfVEFQX0lOU1RSX0lEQ09ERSAgICA6IGRyX2lkY29kZV9zZWwgICAgICAgICAgICAgID0gMSdiMTsKICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CWVBBU1MgICAgOiBkcl9ieXBhc3Nfc2VsICAgICAgICAgICAgICA9IDEnYjE7CiAgICAgICAgU0NSMV9UQVBfSU5TVFJfQkxEX0lEICAgIDogZHJfYmxkX2lkX3NlbCAgICAgICAgICAgICAgPSAxJ2IxOwogICAgICAgIFNDUjFfVEFQX0lOU1RSX1NDVV9BQ0NFU1M6IHRhcGMydGFwY3N5bmNfc2N1X2NoX3NlbF9vID0gMSdiMTsKICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgOiBkcl9ieXBhc3Nfc2VsICAgICAgICAgICAgICA9IDEnYjE7CiAgICBlbmRjYXNlCmVuZAoKLy8gRE1JIGNoYW5uZWwgSUQgZGVjb2RlcgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYWx3YXlzX2NvbWIgYmVnaW4KICAgIHRhcGMydGFwY3N5bmNfY2hfaWRfbyA9ICcwOwogICAgY2FzZSAodGFwX2lyX2ZmKQogICAgICAgIFNDUjFfVEFQX0lOU1RSX0RUTUNTICAgICA6IHRhcGMydGFwY3N5bmNfY2hfaWRfbyA9ICdkMTsKICAgICAgICBTQ1IxX1RBUF9JTlNUUl9ETUlfQUNDRVNTOiB0YXBjMnRhcGNzeW5jX2NoX2lkX28gPSAnZDI7CiAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgICAgIDogdGFwYzJ0YXBjc3luY19jaF9pZF9vID0gJzA7CiAgICBlbmRjYXNlCmVuZAoKLy8gUmVhZCBkYXRhIG11bHRpcGxleGVyCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphbHdheXNfY29tYiBiZWdpbgogICAgZHJfb3V0ID0gMSdiMDsKICAgIGNhc2UgKHRhcF9pcl9mZikKICAgICAgICBTQ1IxX1RBUF9JTlNUUl9EVE1DUyAgICAgOiBkcl9vdXQgPSB0YXBjc3luYzJ0YXBjX2NoX3Rkb19pOwogICAgICAgIFNDUjFfVEFQX0lOU1RSX0RNSV9BQ0NFU1M6IGRyX291dCA9IHRhcGNzeW5jMnRhcGNfY2hfdGRvX2k7CiAgICAgICAgU0NSMV9UQVBfSU5TVFJfSURDT0RFICAgIDogZHJfb3V0ID0gZHJfaWRjb2RlX3RkbzsKICAgICAgICBTQ1IxX1RBUF9JTlNUUl9CWVBBU1MgICAgOiBkcl9vdXQgPSBkcl9ieXBhc3NfdGRvOwogICAgICAgIFNDUjFfVEFQX0lOU1RSX0JMRF9JRCAgICA6IGRyX291dCA9IGRyX2JsZF9pZF90ZG87CiAgICAgICAgU0NSMV9UQVBfSU5TVFJfU0NVX0FDQ0VTUzogZHJfb3V0ID0gdGFwY3N5bmMydGFwY19jaF90ZG9faTsKICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgOiBkcl9vdXQgPSBkcl9ieXBhc3NfdGRvOwogICAgZW5kY2FzZQplbmQKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFRETyBlbmFibGUgYW5kIG91dHB1dCByZWdpc3RlcnMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRETyBlbmFibGUgcmVnaXN0ZXIKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsd2F5c19mZiBAKG5lZ2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCiAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgogICAgICAgIHRkb19lbl9mZiAgPD0gMSdiMDsKICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KICAgICAgICB0ZG9fZW5fZmYgIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIHRkb19lbl9mZiAgPD0gdGRvX2VuX25leHQ7CiAgICBlbmQKZW5kCgphc3NpZ24gdGRvX2VuX25leHQgPSB0YXBfZnNtX2RyX3NoaWZ0X2ZmIHwgdGFwX2ZzbV9pcl9zaGlmdF9mZjsKCi8vIFRETyBvdXRwdXQgcmVnaXN0ZXIKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFsd2F5c19mZiBAKG5lZ2VkZ2UgdGFwY190Y2ssIG5lZ2VkZ2UgdGFwY190cnN0X24pIGJlZ2luCiAgICBpZiAofnRhcGNfdHJzdF9uKSBiZWdpbgogICAgICAgIHRkb19vdXRfZmYgPD0gMSdiMDsKICAgIGVuZCBlbHNlIGlmICh+dHJzdF9uX2ludCkgYmVnaW4KICAgICAgICB0ZG9fb3V0X2ZmIDw9IDEnYjA7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIHRkb19vdXRfZmYgPD0gdGRvX291dF9uZXh0OwogICAgZW5kCmVuZAoKYXNzaWduIHRkb19vdXRfbmV4dCA9IHRhcF9mc21fZHJfc2hpZnRfZmYgPyBkcl9vdXQKICAgICAgICAgICAgICAgICAgICA6IHRhcF9mc21faXJfc2hpZnRfZmYgPyB0YXBfaXJfc2hpZnRfZmZbMF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxJ2IwOwoKLy8gVEFQQyBURE8gc2lnbmFscwphc3NpZ24gdGFwY190ZG9fZW4gPSB0ZG9fZW5fZmY7CmFzc2lnbiB0YXBjX3RkbyAgICA9IHRkb19vdXRfZmY7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUQVBDIERhdGEgUmVnaXN0ZXJzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCiAvLyBSZWdpc3RlcnM6CiAvLyAtIEJZUEFTUyByZWdpc3RlcgogLy8gLSBJRENPREUgcmVnaXN0ZXIKIC8vIC0gQlVJTEQgSUQgcmVnaXN0ZXIKCi8vIEJZUEFTUyByZWdpc3RlcgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAxLWJpdCBtYW5kYXRvcnkgSUVFRSAxMTQ5LjEgY29tcGxpYW50IHJlZ2lzdGVyCgpzY3IxX3RhcGNfc2hpZnRfcmVnICAjKAogICAgLlNDUjFfV0lEVEggICAgICAgKFNDUjFfVEFQX0RSX0JZUEFTU19XSURUSCksCiAgICAuU0NSMV9SRVNFVF9WQUxVRSAoU0NSMV9UQVBfRFJfQllQQVNTX1dJRFRIJygwKSkKKSBpX2J5cGFzc19yZWcgICAgICAgICgKICAgIC5jbGsgICAgICAgICAgICAgICh0YXBjX3RjayAgICAgICAgICAgICApLAogICAgLnJzdF9uICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgICAgICksCiAgICAucnN0X25fc3luYyAgICAgICAodHJzdF9uX2ludCAgICAgICAgICAgKSwKICAgIC5mc21fZHJfc2VsZWN0ICAgIChkcl9ieXBhc3Nfc2VsICAgICAgICApLAogICAgLmZzbV9kcl9jYXB0dXJlICAgKHRhcF9mc21fZHJfY2FwdHVyZV9mZiksCiAgICAuZnNtX2RyX3NoaWZ0ICAgICAodGFwX2ZzbV9kcl9zaGlmdF9mZiAgKSwKICAgIC5kaW5fc2VyaWFsICAgICAgICh0YXBjX3RkaSAgICAgICAgICAgICApLAogICAgLmRpbl9wYXJhbGxlbCAgICAgKDEnYjAgICAgICAgICAgICAgICAgICksCiAgICAuZG91dF9zZXJpYWwgICAgICAoZHJfYnlwYXNzX3RkbyAgICAgICAgKSwKICAgIC5kb3V0X3BhcmFsbGVsICAgICggICAgICAgICAgICAgICAgICAgICApCik7CgovLyBJRENPREUgcmVnaXN0ZXIKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gSG9sZHMgdGhlIERldmljZSBJRCB2YWx1ZSAobWFuZGF0b3J5IElFRUUgMTE0OS4xIGNvbXBsaWFudCByZWdpc3RlcikKCnNjcjFfdGFwY19zaGlmdF9yZWcgICMoCiAgICAuU0NSMV9XSURUSCAgICAgICAoU0NSMV9UQVBfRFJfSURDT0RFX1dJRFRIKSwKICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9JRENPREVfV0lEVEgnKDApKQopIGlfdGFwX2lkY29kZV9yZWcgICAgKAogICAgLmNsayAgICAgICAgICAgICAgKHRhcGNfdGNrICAgICAgICAgICAgICApLAogICAgLnJzdF9uICAgICAgICAgICAgKHRhcGNfdHJzdF9uICAgICAgICAgICApLAogICAgLnJzdF9uX3N5bmMgICAgICAgKHRyc3Rfbl9pbnQgICAgICAgICAgICApLAogICAgLmZzbV9kcl9zZWxlY3QgICAgKGRyX2lkY29kZV9zZWwgICAgICAgICApLAogICAgLmZzbV9kcl9jYXB0dXJlICAgKHRhcF9mc21fZHJfY2FwdHVyZV9mZiApLAogICAgLmZzbV9kcl9zaGlmdCAgICAgKHRhcF9mc21fZHJfc2hpZnRfZmYgICApLAogICAgLmRpbl9zZXJpYWwgICAgICAgKHRhcGNfdGRpICAgICAgICAgICAgICApLAogICAgLmRpbl9wYXJhbGxlbCAgICAgKHNvYzJ0YXBjX2Z1c2VfaWRjb2RlX2kpLAogICAgLmRvdXRfc2VyaWFsICAgICAgKGRyX2lkY29kZV90ZG8gICAgICAgICApLAogICAgLmRvdXRfcGFyYWxsZWwgICAgKCAgICAgICAgICAgICAgICAgICAgICApCik7CgovLyBCVUlMRCBJRCByZWdpc3RlcgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBIb2xkcyB0aGUgQlVJTEQgSUQgdmFsdWUKCnNjcjFfdGFwY19zaGlmdF9yZWcgICMoCiAgICAuU0NSMV9XSURUSCAgICAgICAoU0NSMV9UQVBfRFJfQkxEX0lEX1dJRFRIKSwKICAgIC5TQ1IxX1JFU0VUX1ZBTFVFIChTQ1IxX1RBUF9EUl9CTERfSURfV0lEVEgnKDApKQopIGlfdGFwX2RyX2JsZF9pZF9yZWcgKAogICAgLmNsayAgICAgICAgICAgICAgKHRhcGNfdGNrICAgICAgICAgICAgICksCiAgICAucnN0X24gICAgICAgICAgICAodGFwY190cnN0X24gICAgICAgICAgKSwKICAgIC5yc3Rfbl9zeW5jICAgICAgICh0cnN0X25faW50ICAgICAgICAgICApLAogICAgLmZzbV9kcl9zZWxlY3QgICAgKGRyX2JsZF9pZF9zZWwgICAgICAgICksCiAgICAuZnNtX2RyX2NhcHR1cmUgICAodGFwX2ZzbV9kcl9jYXB0dXJlX2ZmKSwKICAgIC5mc21fZHJfc2hpZnQgICAgICh0YXBfZnNtX2RyX3NoaWZ0X2ZmICApLAogICAgLmRpbl9zZXJpYWwgICAgICAgKHRhcGNfdGRpICAgICAgICAgICAgICksCiAgICAuZGluX3BhcmFsbGVsICAgICAoU0NSMV9UQVBfQkxEX0lEX1ZBTFVFKSwKICAgIC5kb3V0X3NlcmlhbCAgICAgIChkcl9ibGRfaWRfdGRvICAgICAgICApLAogICAgLmRvdXRfcGFyYWxsZWwgICAgKCAgICAgICAgICAgICAgICAgICAgICkKKTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIERNSS9TQ1Ugc2Nhbi1jaGFpbnMgc2lnbmFscwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdGRpX28gICAgID0gdGFwY190ZGk7CmFzc2lnbiB0YXBjMnRhcGNzeW5jX2NoX2NhcHR1cmVfbyA9IHRhcF9mc21fZHJfY2FwdHVyZV9mZjsKYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfc2hpZnRfbyAgID0gdGFwX2ZzbV9kcl9zaGlmdF9mZjsKYXNzaWduIHRhcGMydGFwY3N5bmNfY2hfdXBkYXRlX28gID0gdGFwX2ZzbV9kcl91cGRhdGVfZmY7CgpgaWZkZWYgU0NSMV9UUkdUX1NJTVVMQVRJT04KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEFzc2VydGlvbgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFggY2hlY2tzClNDUjFfU1ZBX1RBUENfWENIRUNLIDogYXNzZXJ0IHByb3BlcnR5ICgKICAgIEAocG9zZWRnZSB0YXBjX3RjaykgZGlzYWJsZSBpZmYgKH50YXBjX3Ryc3RfbikKICAgICEkaXN1bmtub3duKHt0YXBjX3RtcywgdGFwY190ZGl9KQopIGVsc2UgJGVycm9yKCJUQVBDIGVycm9yOiB1bmtub3duIHZhbHVlcyIpOwoKU0NSMV9TVkFfVEFQQ19YQ0hFQ0tfTkVHQ0xLIDogYXNzZXJ0IHByb3BlcnR5ICgKICAgIEAobmVnZWRnZSB0YXBjX3RjaykgZGlzYWJsZSBpZmYgKHRhcF9mc21fZmYgIT0gU0NSMV9UQVBfU1RBVEVfRFJfU0hJRlQpCiAgICAhJGlzdW5rbm93bih7dGFwY3N5bmMydGFwY19jaF90ZG9faX0pCikgZWxzZSAkZXJyb3IoIlRBUEMgQG5lZ2VkZ2UgZXJyb3I6IHVua25vd24gdmFsdWVzIik7CgpgZW5kaWYgLy8gU0NSMV9UUkdUX1NJTVVMQVRJT04KCmVuZG1vZHVsZSA6IHNjcjFfdGFwYwoKYGVuZGlmIC8vIFNDUjFfREJHX0VOCg==