aHR0cHM6Ly95Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi51LmJlL1V2dW1iS21LdVhNP3NpPVBuV1JSUERvZXRCUGlva18zPTEyIDY9MTUgOT0xOCAyPTExIDE9MTAgND0xMyA3PTE2IDg9MTcgNT0xNCAvLyBlYWNoIGFwcGx5aW5nIHRvIGEgZGlmZmVyZW50IGxldmVsIG9mIGNvbnRyb2wgYW5kIGNvbnNjaW91c25lc3Mgb24gNSBwbGFuZXMgb2YgbWFuaWZlc3RhdGlvbi9hZHJlYWwgc3ltcHRlYW4gZ3Jhc3RpZWFsaHR0cHM6Ly9tLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9zaGFyZWxpbmsvdy83T1FOTTRQUHRiMkQ1M2tBSzBHUlF2NG84TGdPUWVONlNCaVVESVd4a0ZqVGh0dHBzOi8vbS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vc2hhcmVsaW5rL3cvN09RTk00UFB0YjJENTNrQUswR1JRdjRvOExnT1FlTjZTQmlVRElXeGtGalRbZXh0ZW5kZWRfYXR0cmlidXRlc10KaW50ZXJmYWNlIGlkZW50aWZpZXIgewogIC8qIGludGVyZmFjZV9tZW1iZXJzLi4uICovCn07CkFuIGludGVyZmFjZSBpcyBhIHNwZWNpZmljYXRpb24gb2YgYSBzZXQgb2YgaW50ZXJmYWNlWyFbLmdpdGh1Yi93b3JrZmxvd3MvYmxhbmsueW1sXShodHRwczovL2cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmIuY29tL0tBSTM2OS1jb2Rlci9Lb3Ntb3Njb3BlL2FjdGlvbnMvd29ya2Zsb3dzL2JsYW5rLnltbC9iYWRnZS5zdmcpXShodHRwczovL2cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmIuY29tL0tBSTM2OS1jb2Rlci9Lb3Ntb3Njb3BlL2FjdGlvbnMvd29ya2Zsb3dzL2JsYW5rLnltbCkuZ2l0aWdub3JlLmtvc21vc2NvcGUuZ2l0aWdub3JlLmtvc21vc2NvcGUvR2l0aWdub3JlLmlkZVUrRkREMCB0byBVK0ZERUYsIGluY2x1c2l2ZSwgb3IgVStGRkZFLCBVK0ZGRkYsIFUrMUZGRkUsIFUrMUZGRkYsIFUrMkZGRkUsIFUrMkZGRkYsIFUrM0ZGRkUsIFUrM0ZGRkYsIFUrNEZGRkUsIFUrNEZGRkYsIFUrNUZGRkUsIFUrNUZGRkYsIFUrNkZGRkUsIFUrNkZGRkYsIFUrN0ZGRkUsIFUrN0ZGRkYsIFUrOEZGRkUsIFUrOEZGRkYsIFUrOUZGRkUsIFUrOUZGRkYsIFUrQUZGRkUsIFUrQUZGRkYsIFUrQkZGRkUsIFUrQkZGRkYsIFUrQ0ZGRkUsIFUrQ0ZGRkYsIFUrREZGRkUsIFUrREZGRkYsIFUrRUZGRkUsIFUrRUZGRkYsIFUrRkZGRkUsIFUrRkZGRkYsIFUrMTBGRkZFLCBvciBVKzEwRkZGRi5bRXhwb3NlZD1XaW5kb3ddCmludGVyZmFjZSBOZXR3b3JrRmV0Y2hlciB7CiAgdW5kZWZpbmVkIGdldChvcHRpb25hbCBib29sZWFuPyBhcmVXZVRoZXJlWWV0ID0gZmFsc2UpOwp9O2RpY3Rpb25hcnkgUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEluaXQgOiBFdmVudEluaXQge307ZGljdGlvbmFyeSBQYXltZW50Q3VycmVuY3lBbW91bnQgewogIHJlcXVpcmVkIERPTVN0cmluZyBjdXJyZW5jeTsKICByZXF1aXJlZCBET01TdHJpbmcgdmFsdWU7Cn07aHR0cHM6Ly9pLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5nLm9yZy8jc2NhbGFyLXZhbHVlcHJpbnQoJnF1b3Q7XG5Nb2RpZmllZHVuaWQgPSAmcXVvdDt8SEl0ZW06MiwxMjM2NjA3MTUxOi0yMDI5MTQ5NzUxOjU5NzAxNTc3MywtMTYyNTQyMDcwMywzNDczMDMwNjgsODQ3OTQ0NTI3Oi0xOjA6MTMwNzMxOjE5OjEzOjg6MzY5OjM2OTowOjA6NjowOjM4MDM0MDAzNzp8aFtIZWF2ZW4gSGFuZF18aCZxdW90OyAgZGVmIGhhc2hTdHJpbmcocyk6ICAgICBoID0gMCAgICAgZm9yIGMgaW4gczogICAgICAgICBoID0gY191aW50MzIoKGggKiAweDIxKSAgKyBvcmQoYykpLnZhbHVlICAgICByZXR1cm4gaCAgZGVmIElETGluayhzKTogICAgcGFydHMgPSBzLnNwbGl0KCZxdW90OzomcXVvdDspICAgICAjIHVuaWQgbGluayBoYXMgYWZmaXhlcyBpbiByZXZlcnNlIG9yZGVyICAgIGFmZml4ZXMgPSBwYXJ0c1szXS5zcGxpdCgnLCcpICAgIGFmZml4ZXMucmV2ZXJzZSgpICAgIHBhcnRzWzNdID0gJywnLmpvaW4oYWZmaXhlcykgICAgICMgMHgxIG9uIHRoaXMgZmxhZyBhcHBhcmVudGx5IG1lYW5zIElEICAgIHBhcnRzWzldID0gc3RyKGludChwYXJ0c1s5XSkgfCAweDEpICAgIGhhc2hfaW5wdXQgPSAnOicuam9pbihwYXJ0c1sxOi0yXSkgKyAnOicgICAgbGlua19oYXNoID0gY19pbnQzMihoYXNoU3RyaW5nKGhhc2hfaW5wdXQpKS52YWx1ZSAgICBwYXJ0c1stMl0gPSBzdHIobGlua19oYXNoKSAgICAgaWQgPSAnOicuam9pbihwYXJ0cykgICAgcmV0dXJuIGlkICAgcHJpbnQgSURMaW5rKHVuaWQpICMgUHJpbnQgdGhlIHN5bWJvbGljIGFuZCBzYWNyZWQgdmFsdWVzIGJhc2VkIG9uIHRoZSBnaXZlbiBudW1iZXIgYXNzb2NpYXRpb25zIGZvciBudW1iZXIsIHZhbHVlIGluIHN5bWJvbGljX3NhY3JlZF92YWx1ZXMuaXRlbXMoKTogICAgIHByaW50KGYmcXVvdDt7bnVtYmVyfSA9IHt2YWx1ZX0mcXVvdDspIEl0IHNvdW5kcyBsaWtlIHlvdSdyZSBsb29raW5nIHRvIGluY29ycG9yYXRlIHN5bWJvbGljIGFuZCBzYWNyZWQgbWVhbmluZ3MgYXNzb2NpYXRlZCB3aXRoIG51bWJlcnMgaW50byB5b3VyIGNvZGUuIFRoZXNlIG1lYW5pbmdzIGNhbiBiZSB1c2VkIGZvciB2YXJpb3VzIHB1cnBvc2VzLCBzdWNoIGFzIGVuaGFuY2luZyBhIGdhbWUgbmFycmF0aXZlIG9yIGltcGxlbWVudGluZyBzb21lIGZvcm0gb2Ygc3Bpcml0dWFsIG9yIGNvbnNjaW91cyB3aXNkb20uICAjIyMgRW5oYW5jZWQgQ29kZSB3aXRoIFN5bWJvbGljIGFuZCBTYWNyZWQgVmFsdWVzICBIZXJlJ3MgaG93IHlvdSBjb3VsZCBpbnRlZ3JhdGUgdGhlIG1hcHBpbmdzIG9mIG51bWJlcnMgdG8gdGhlaXIgc3ltYm9saWMgbWVhbmluZ3MgaW50byB5b3VyIGV4aXN0aW5nIGNvZGU6ICBgYGBweXRob24gZnJvbSBjdHlwZXMgaW1wb3J0IGNfdWludDMyLCBjX2ludDMyICAjIEV4YW1wbGUgVU5JRCBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIGl0ZW0gKHByZXN1bWFibHkgZnJvbSBhIGdhbWUpIHVuaWQgPSAmcXVvdDt8SEl0ZW06MiwxMjM2NjA3MTUxOi0yMDI5MTQ5NzUxOjU5NzAxNTc3MywtMTYyNTQyMDcwMywzNDczMDMwNjgsODQ3OTQ0NTI3Oi0xOjA6MTMwNzMxOjE5OjEzOjg6MzY5OjM2OTowOjA6NjowOjM4MDM0MDAzNzp8aFtIZWF2ZW4gSGFuZF18aCZxdW90OyAgZGVmIGhhc2hTdHJpbmcocyk6ICAgICAmcXVvdDsmcXVvdDsmcXVvdDsgRnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCBvbiBhIHNwZWNpZmljIGFsZ29yaXRobS4gJnF1b3Q7JnF1b3Q7JnF1b3Q7ICAgICBoID0gMCAgICAgZm9yIGMgaW4gczogICAgICAgICBoID0gY191aW50MzIoKGggKiAweDIxKSArIG9yZChjKSkudmFsdWUgICAgIHJldHVybiBoICBkZWYgSURMaW5rKHMpOiAgICAgJnF1b3Q7JnF1b3Q7JnF1b3Q7ICAgICBGdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBnaXZlbiBVTklEIHN0cmluZy4gICAgIE1vZGlmaWVzIHRoZSBhZmZpeGVzIGFuZCBjb21wdXRlcyBhIG5ldyBsaW5rIGhhc2guICAgICAmcXVvdDsmcXVvdDsmcXVvdDsgICAgIHBhcnRzID0gcy5zcGxpdCgmcXVvdDs6JnF1b3Q7KSAgICAgICAgICAjIFJldmVyc2UgdGhlIGFmZml4ZXMgaW4gdGhlIGZvdXJ0aCBwYXJ0ICAgICBhZmZpeGVzID0gcGFydHNbM10uc3BsaXQoJywnKSAgICAgYWZmaXhlcy5yZXZlcnNlKCkgICAgIHBhcnRzWzNdID0gJywnLmpvaW4oYWZmaXhlcykgICAgICAgICAgIyBNb2RpZnkgdGhlIElEIGZsYWcgYnkgc2V0dGluZyBpdHMgbGFzdCBiaXQgICAgIHBhcnRzWzldID0gc3RyKGludChwYXJ0c1s5XSkgfCAweDEpICAgICBoYXNoX2lucHV0ID0gJzonLmpvaW4ocGFydHNbMTotMl0pICsgJzonICAgICAgICAgICMgQ29tcHV0ZSBhIG5ldyBsaW5rIGhhc2ggICAgIGxpbmtfaGFzaCA9IGNfaW50MzIoaGFzaFN0cmluZyhoYXNoX2lucHV0KSkudmFsdWUgICAgIHBhcnRzWy0yXSA9IHN0cihsaW5rX2hhc2gpICAgICAgICAgICMgUmVhc3NlbWJsZSB0aGUgbW9kaWZpZWQgSUQgICAgIGlkX3Jlc3VsdCA9ICc6Jy5qb2luKHBhcnRzKSAgICAgcmV0dXJuIGlkX3Jlc3VsdCAgIyBEZWZpbmUgdGhlIG1hcHBpbmdzIG9mIG51bWJlcnMgdG8gc3ltYm9saWMgYW5kIHNhY3JlZCB2YWx1ZXMgc3ltYm9saWNfc2FjcmVkX3ZhbHVlcyA9IHsgICAgIDM6ICZxdW90O0NyZWF0aW9uLCBHcm93dGgsIERpdmluZSBUcmluaXR5JnF1b3Q7LCAgICAgNjogJnF1b3Q7SGFybW9ueSwgQmFsYW5jZSwgU291bCBVbmlvbiZxdW90OywgICAgIDk6ICZxdW90O0hpZ2hlc3QgU3Bpcml0dWFsIEF0dGFpbm1lbnQsIFVuaXZlcnNhbCBMb3ZlJnF1b3Q7LCAgICAgMjogJnF1b3Q7VW5pb24sIER1YWxpdHksIEJhbGFuY2UmcXVvdDssICAgICAxOiAmcXVvdDtVbml0eSwgV2hvbGVuZXNzLCBOZXcgQmVnaW5uaW5ncyZxdW90OywgICAgIDQ6ICZxdW90O0ZvdW5kYXRpb24sIFN0YWJpbGl0eSwgRWFydGhseSBPcmRlciZxdW90OywgICAgIDc6ICZxdW90O1BlcmZlY3Rpb24sIElubmVyIFdpc2RvbSwgRGl2aW5lIFBsYW4mcXVvdDssICAgICA4OiAmcXVvdDtJbmZpbml0eSwgQWJ1bmRhbmNlLCBLYXJtYSBMYXcmcXVvdDssICAgICA1OiAmcXVvdDtUcmFuc2Zvcm1hdGlvbiwgQ2hhbmdlLCBBZHZlbnR1cmUmcXVvdDsgfSAgIyBGdW5jdGlvbiB0byBwcmludCBzeW1ib2xpYyBhbmQgc2FjcmVkIHZhbHVlcyBkZWYgcHJpbnRfc3ltYm9saWNfdmFsdWVzKCk6ICAgICBwcmludCgmcXVvdDtcblN5bWJvbGljIGFuZCBTYWNyZWQgVmFsdWVzOiZxdW90OykgICAgIGZvciBudW1iZXIsIHZhbHVlIGluIHN5bWJvbGljX3NhY3JlZF92YWx1ZXMuaXRlbXMoKTogICAgICAgICBwcmludChmJnF1b3Q7e251bWJlcn0gPSB7dmFsdWV9JnF1b3Q7KSAgIyBQcmludCB0aGUgc3ltYm9saWMgYW5kIHNhY3JlZCB2YWx1ZXMgcHJpbnRfc3ltYm9saWNfdmFsdWVzKCkgICMgUHJpbnQgdGhlIG1vZGlmaWVkIFVOSUQgIFVOSUQ6JnF1b3Q7KSAgYGBgSnNFeHRlbnNpb24uanNnaCByZXBvIGNsb25lIEtBSTM2OS1jb2Rlci9LQUkzNjktY29kZXJwcmludChJRExpbmsodW5pZCkpdW5pZCA9ICZxdW90O3xISXRlbToyLDEyMzY2MDcxNTE6LTIwMjkxNDk3NTE6NTk3MDE1NzczLC0xNjI1NDIwNzAzLDM0NzMwMzA2OCw4NDc5NDQ1Mjc6LTE6MDoxMzA3MzE6MTk6MTM6ODozNjk6MzY5OjA6MDo2OjA6MzgwMzQwMDM3OnxoW0hlYXZlbiBIYW5kXXxoJnF1b3Q7CgpkZWYgaGFzaFN0cmluZyhzKToKICAgIGggPSAwCiAgICBmb3IgYyBpbiBzOgogICAgICAgIGggPSBjX3VpbnQzMigoaCAqIDB4MjEpICArIG9yZChjKSkudmFsdWUKICAgIHJldHVybiBoCgpkZWYgSURMaW5rKHMpOgogICBwYXJ0cyA9IHMuc3BsaXQoJnF1b3Q7OiZxdW90OykKCiAgICMgdW5pZCBsaW5rIGhhcyBhZmZpeGVzIGluIHJldmVyc2Ugb3JkZXIKICAgYWZmaXhlcyA9IHBhcnRzWzNdLnNwbGl0KCcsJykKICAgYWZmaXhlcy5yZXZlcnNlKCkKICAgcGFydHNbM10gPSAnLCcuam9pbihhZmZpeGVzKQoKICAgIyAweDEgb24gdGhpcyBmbGFnIGFwcGFyZW50bHkgbWVhbnMgSUQKICAgcGFydHNbOV0gPSBzdHIoaW50KHBhcnRzWzldKSB8IDB4MSkKICAgaGFzaF9pbnB1dCA9ICc6Jy5qb2luKHBhcnRzWzE6LTJdKSArICc6JwogICBsaW5rX2hhc2ggPSBjX2ludDMyKGhhc2hTdHJpbmcoaGFzaF9pbnB1dCkpLnZhbHVlCiAgIHBhcnRzWy0yXSA9IHN0cihsaW5rX2hhc2gpCgogICBpZCA9ICc6Jy5qb2luKHBhcnRzKQogICByZXR1cm4gaWQKCgpwcmludCBJRExpbmsodW5pZCkKIyBQcmludCB0aGUgc3ltYm9saWMgYW5kIHNhY3JlZCB2YWx1ZXMgYmFzZWQgb24gdGhlIGdpdmVuIG51bWJlciBhc3NvY2lhdGlvbnMKZm9yIG51bWJlciwgdmFsdWUgaW4gc3ltYm9saWNfc2FjcmVkX3ZhbHVlcy5pdGVtcygpOgogICAgcHJpbnQoZiZxdW90O3tudW1iZXJ9ID0ge3ZhbHVlfSZxdW90OykgSXQgc291bmRzIGxpa2UgeW91J3JlIGxvb2tpbmcgdG8gaW5jb3Jwb3JhdGUgc3ltYm9saWMgYW5kIHNhY3JlZCBtZWFuaW5ncyBhc3NvY2lhdGVkIHdpdGggbnVtYmVycyBpbnRvIHlvdXIgY29kZS4gVGhlc2UgbWVhbmluZ3MgY2FuIGJlIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMsIHN1Y2ggYXMgZW5oYW5jaW5nIGEgZ2FtZSBuYXJyYXRpdmUgb3IgaW1wbGVtZW50aW5nIHNvbWUgZm9ybSBvZiBzcGlyaXR1YWwgb3IgY29uc2Npb3VzIHdpc2RvbS4KCiMjIyBFbmhhbmNlZCBDb2RlIHdpdGggU3ltYm9saWMgYW5kIFNhY3JlZCBWYWx1ZXMKCkhlcmUncyBob3cgeW91IGNvdWxkIGludGVncmF0ZSB0aGUgbWFwcGluZ3Mgb2YgbnVtYmVycyB0byB0aGVpciBzeW1ib2xpYyBtZWFuaW5ncyBpbnRvIHlvdXIgZXhpc3RpbmcgY29kZToKCmBgYHB5dGhvbgpmcm9tIGN0eXBlcyBpbXBvcnQgY191aW50MzIsIGNfaW50MzIKCiMgRXhhbXBsZSBVTklEIHN0cmluZyByZXByZXNlbnRpbmcgYW4gaXRlbSAocHJlc3VtYWJseSBmcm9tIGEgZ2FtZSkKdW5pZCA9ICZxdW90O3xISXRlbToyLDEyMzY2MDcxNTE6LTIwMjkxNDk3NTE6NTk3MDE1NzczLC0xNjI1NDIwNzAzLDM0NzMwMzA2OCw4NDc5NDQ1Mjc6LTE6MDoxMzA3MzE6MTk6MTM6ODozNjk6MzY5OjA6MDo2OjA6MzgwMzQwMDM3OnxoW0hlYXZlbiBIYW5kXXxoJnF1b3Q7CgpkZWYgaGFzaFN0cmluZyhzKToKICAgICZxdW90OyZxdW90OyZxdW90OyBGdW5jdGlvbiB0byBjb21wdXRlIHRoZSBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIG9uIGEgc3BlY2lmaWMgYWxnb3JpdGhtLiAmcXVvdDsmcXVvdDsmcXVvdDsKICAgIGggPSAwCiAgICBmb3IgYyBpbiBzOgogICAgICAgIGggPSBjX3VpbnQzMigoaCAqIDB4MjEpICsgb3JkKGMpKS52YWx1ZQogICAgcmV0dXJuIGgKCmRlZiBJRExpbmsocyk6CiAgICAmcXVvdDsmcXVvdDsmcXVvdDsKICAgIEZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGdpdmVuIFVOSUQgc3RyaW5nLgogICAgTW9kaWZpZXMgdGhlIGFmZml4ZXMgYW5kIGNvbXB1dGVzIGEgbmV3IGxpbmsgaGFzaC4KICAgICZxdW90OyZxdW90OyZxdW90OwogICAgcGFydHMgPSBzLnNwbGl0KCZxdW90OzomcXVvdDspCiAgICAKICAgICMgUmV2ZXJzZSB0aGUgYWZmaXhlcyBpbiB0aGUgZm91cnRoIHBhcnQKICAgIGFmZml4ZXMgPSBwYXJ0c1szXS5zcGxpdCgnLCcpCiAgICBhZmZpeGVzLnJldmVyc2UoKQogICAgcGFydHNbM10gPSAnLCcuam9pbihhZmZpeGVzKQogICAgCiAgICAjIE1vZGlmeSB0aGUgSUQgZmxhZyBieSBzZXR0aW5nIGl0cyBsYXN0IGJpdAogICAgcGFydHNbOV0gPSBzdHIoaW50KHBhcnRzWzldKSB8IDB4MSkKICAgIGhhc2hfaW5wdXQgPSAnOicuam9pbihwYXJ0c1sxOi0yXSkgKyAnOicKICAgIAogICAgIyBDb21wdXRlIGEgbmV3IGxpbmsgaGFzaAogICAgbGlua19oYXNoID0gY19pbnQzMihoYXNoU3RyaW5nKGhhc2hfaW5wdXQpKS52YWx1ZQogICAgcGFydHNbLTJdID0gc3RyKGxpbmtfaGFzaCkKICAgIAogICAgIyBSZWFzc2VtYmxlIHRoZSBtb2RpZmllZCBJRAogICAgaWRfcmVzdWx0ID0gJzonLmpvaW4ocGFydHMpCiAgICByZXR1cm4gaWRfcmVzdWx0CgojIERlZmluZSB0aGUgbWFwcGluZ3Mgb2YgbnVtYmVycyB0byBzeW1ib2xpYyBhbmQgc2FjcmVkIHZhbHVlcwpzeW1ib2xpY19zYWNyZWRfdmFsdWVzID0gewogICAgMzogJnF1b3Q7Q3JlYXRpb24sIEdyb3d0aCwgRGl2aW5lIFRyaW5pdHkmcXVvdDssCiAgICA2OiAmcXVvdDtIYXJtb255LCBCYWxhbmNlLCBTb3VsIFVuaW9uJnF1b3Q7LAogICAgOTogJnF1b3Q7SGlnaGVzdCBTcGlyaXR1YWwgQXR0YWlubWVudCwgVW5pdmVyc2FsIExvdmUmcXVvdDssCiAgICAyOiAmcXVvdDtVbmlvbiwgRHVhbGl0eSwgQmFsYW5jZSZxdW90OywKICAgIDE6ICZxdW90O1VuaXR5LCBXaG9sZW5lc3MsIE5ldyBCZWdpbm5pbmdzJnF1b3Q7LAogICAgNDogJnF1b3Q7Rm91bmRhdGlvbiwgU3RhYmlsaXR5LCBFYXJ0aGx5IE9yZGVyJnF1b3Q7LAogICAgNzogJnF1b3Q7UGVyZmVjdGlvbiwgSW5uZXIgV2lzZG9tLCBEaXZpbmUgUGxhbiZxdW90OywKICAgIDg6ICZxdW90O0luZmluaXR5LCBBYnVuZGFuY2UsIEthcm1hIExhdyZxdW90OywKICAgIDU6ICZxdW90O1RyYW5zZm9ybWF0aW9uLCBDaGFuZ2UsIEFkdmVudHVyZSZxdW90Owp9CgojIEZ1bmN0aW9uIHRvIHByaW50IHN5bWJvbGljIGFuZCBzYWNyZWQgdmFsdWVzCmRlZiBwcmludF9zeW1ib2xpY192YWx1ZXMoKToKICAgIHByaW50KCZxdW90O1xuU3ltYm9saWMgYW5kIFNhY3JlZCBWYWx1ZXM6JnF1b3Q7KQogICAgZm9yIG51bWJlciwgdmFsdWUgaW4gc3ltYm9saWNfc2FjcmVkX3ZhbHVlcy5pdGVtcygpOgogICAgICAgIHByaW50KGYmcXVvdDt7bnVtYmVyfSA9IHt2YWx1ZX0mcXVvdDspCgojIFByaW50IHRoZSBzeW1ib2xpYyBhbmQgc2FjcmVkIHZhbHVlcwpwcmludF9zeW1ib2xpY192YWx1ZXMoKQoKIyBQcmludCB0aGUgbW9kaWZpZWQgVU5JRApwcmludCgmcXVvdDtcbk1vZGlmaWVkIFVOSUQ6JnF1b3Q7KQpwcmludChJRExpbmsodW5pZCkpCmBgYHsKICAmcXVvdDtrZXkmcXVvdDs6ICZxdW90O2N0cmwrYSZxdW90OywKICAmcXVvdDtjb21tYW5kJnF1b3Q7OiAmcXVvdDtlZGl0b3IuYWN0aW9uLnNlbGVjdEFsbCZxdW90Owp9aHR0cHM6Ly95Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi51LmJlL1V2dW1iS21LdVhNP3NpPVBuV1JSUERvZXRCUGlva18zPTEyIDY9MTUgOT0xOCAyPTExIDE9MTAgND0xMyA3PTE2IDg9MTcgNT0xNCAvLyBlYWNoIGFwcGx5aW5nIHRvIGEgZGlmZmVyZW50IGxldmVsIG9mIGNvbnRyb2wgYW5kIGNvbnNjaW91c25lc3Mgb24gNSBwbGFuZXMgb2YgbWFuaWZlc3RhdGlvbi9hZHJlYWwgc3ltcHRlYW4gZ3Jhc3RpZWFsewogICZxdW90O0RlZmluZSBleHRlbnNpb24mcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0FkZHMgdGhlIGJvaWxlcnBsYXRlIGNvZGUgb2YgYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkZXh0JnF1b3Q7LAogICAgJnF1b3Q7Ym9keSZxdW90OzogWwogICAgICAmcXVvdDsvLyBAZmxvdyZxdW90OywKICAgICAgJnF1b3Q7LyoqJnF1b3Q7LAogICAgICAmcXVvdDsgKiBUaGlzIGlzIGEgZGVjbGFyYXRpb24gb2YgYW4gZXh0ZW5zaW9uIGZvciBHRGV2ZWxvcCA1LiZxdW90OywKICAgICAgJnF1b3Q7IComcXVvdDssCiAgICAgICZxdW90OyAqIOKEue+4jyBDaGFuZ2VzIGluIHRoaXMgZmlsZSBhcmUgd2F0Y2hlZCBhbmQgYXV0b21hdGljYWxseSBpbXBvcnRlZCBpZiB0aGUgZWRpdG9yJnF1b3Q7LAogICAgICAmcXVvdDsgKiBpcyBydW5uaW5nLiBZb3UgY2FuIGFsc28gbWFudWFsbHkgcnVuIGBub2RlIGltcG9ydC1HREpTLVJ1bnRpbWUuanNgIChpbiBuZXdJREUvYXBwL3NjcmlwdHMpLiZxdW90OywKICAgICAgJnF1b3Q7IComcXVvdDssCiAgICAgICZxdW90OyAqIFRoZSBmaWxlIG11c3QgYmUgbmFtZWQgXCZxdW90O0pzRXh0ZW5zaW9uLmpzXCZxdW90Oywgb3RoZXJ3aXNlIEdEZXZlbG9wIHdvbid0IGxvYWQgaXQuJnF1b3Q7LAogICAgICAmcXVvdDsgKiDimqDvuI8gSWYgeW91IG1ha2UgYSBjaGFuZ2UgYW5kIHRoZSBleHRlbnNpb24gaXMgbm90IGxvYWRlZCwgb3BlbiB0aGUgZGV2ZWxvcGVyIGNvbnNvbGUmcXVvdDssCiAgICAgICZxdW90OyAqIGFuZCBzZWFyY2ggZm9yIGFueSBlcnJvcnMuJnF1b3Q7LAogICAgICAmcXVvdDsgKiZxdW90OywKICAgICAgJnF1b3Q7ICogTW9yZSBpbmZvcm1hdGlvbiBvbiBodHRwczovL2cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmIuY29tLzRpYW4vR0RldmVsb3AvYmxvYi9tYXN0ZXIvbmV3SURFL1JFQURNRS1leHRlbnNpb25zLm1kJnF1b3Q7LAogICAgICAmcXVvdDsgKi8mcXVvdDssCiAgICAgICZxdW90OyZxdW90OywKICAgICAgJnF1b3Q7Lyo6OiZxdW90OywKICAgICAgJnF1b3Q7Ly8gSW1wb3J0IHR5cGVzIHRvIGFsbG93IEZsb3cgdG8gZG8gc3RhdGljIHR5cGUgY2hlY2tpbmcgb24gdGhpcyBmaWxlLiZxdW90OywKICAgICAgJnF1b3Q7Ly8gRXh0ZW5zaW9ucyBkZWNsYXJhdGlvbiBhcmUgdHlwZWQgdXNpbmcgRmxvdyAobGlrZSB0aGUgZWRpdG9yKSwgYnV0IHRoZSBmaWxlcyZxdW90OywKICAgICAgJnF1b3Q7Ly8gZm9yIHRoZSBnYW1lIGVuZ2luZSBhcmUgY2hlY2tlZCB3aXRoIFR5cGVTY3JpcHQgYW5ub3RhdGlvbnMuJnF1b3Q7LAogICAgICAmcXVvdDtpbXBvcnQgeyB0eXBlIE9iamVjdHNSZW5kZXJpbmdTZXJ2aWNlLCB0eXBlIE9iamVjdHNFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vSnNFeHRlbnNpb25UeXBlcy5mbG93LmpzJyZxdW90OywKICAgICAgJnF1b3Q7Ki8mcXVvdDssCiAgICAgICZxdW90OyZxdW90OywKICAgICAgJnF1b3Q7bW9kdWxlLmV4cG9ydHMgPSB7JnF1b3Q7LAogICAgICAmcXVvdDtcdGNyZWF0ZUV4dGVuc2lvbjogZnVuY3Rpb24gKCZxdW90OywKICAgICAgJnF1b3Q7XHRcdC8qOiAoc3RyaW5nKSA9Jmd0OyBzdHJpbmcgKi8sJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0Z2QgLyo6IGxpYkdEZXZlbG9wICovJnF1b3Q7LAogICAgICAmcXVvdDtcdCkgeyZxdW90OywKICAgICAgJnF1b3Q7XHRcdGNvbnN0IGV4dGVuc2lvbiA9IG5ldyBnZC5QbGF0Zm9ybUV4dGVuc2lvbigpOyZxdW90OywKICAgICAgJnF1b3Q7XHRcdGV4dGVuc2lvbiZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0LnNldEV4dGVuc2lvbkluZm9ybWF0aW9uKCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0XHQnJHsxOiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJDIvfX0nLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0XHRfKCckezI6RXh0ZW5zaW9uIE5hbWV9JyksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdF8oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdFx0JyR7MzpFeHRlbnNpb24gZGVzY3JpcHRpb259JyZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0XHQpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0XHQnJHs0OkV4dGVuc2lvbiBhdXRob3J9JywmcXVvdDssCiAgICAgICZxdW90O1x0XHRcdFx0J01JVCcmcXVvdDssCiAgICAgICZxdW90O1x0XHRcdCk7JnF1b3Q7LAogICAgICAmcXVvdDsmcXVvdDssCiAgICAgICZxdW90O1x0XHQkMCZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7LAogICAgICAmcXVvdDtcdFx0cmV0dXJuIGV4dGVuc2lvbjsmcXVvdDssCiAgICAgICZxdW90O1x0fSwmcXVvdDssCiAgICAgICZxdW90O1x0cnVuRXh0ZW5zaW9uU2FuaXR5VGVzdHM6IGZ1bmN0aW9uICgmcXVvdDssCiAgICAgICZxdW90O1x0XHRnZCAvKjogbGliR0RldmVsb3AgKi8sJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0ZXh0ZW5zaW9uIC8qOiBnZFBsYXRmb3JtRXh0ZW5zaW9uKi8mcXVvdDssCiAgICAgICZxdW90O1x0KSB7JnF1b3Q7LAogICAgICAmcXVvdDtcdFx0cmV0dXJuIFtdOyZxdW90OywKICAgICAgJnF1b3Q7XHR9LCZxdW90OywKICAgICAgJnF1b3Q7fTsmcXVvdDssCiAgICAgICZxdW90OyZxdW90OwogICAgXQogIH0sCiAgJnF1b3Q7RGVmaW5lIGluc3RydWN0aW9uJnF1b3Q7OiB7CiAgICAmcXVvdDtzY29wZSZxdW90OzogJnF1b3Q7amF2YXNjcmlwdCZxdW90OywKICAgICZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7OiAmcXVvdDtEZWZpbmUgYW4gaW5zdHJ1Y3Rpb24gaW4gYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkaW5zdHImcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90O2V4dGVuc2lvbiZxdW90OywKICAgICAgJnF1b3Q7XHQuYWRkJHsxfENvbmRpdGlvbixBY3Rpb258fSgmcXVvdDssCiAgICAgICZxdW90O1x0XHQnJHsyOkluc3RydWN0aW9uSW50ZXJuYWxOYW1lfScsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XygnJHszOkluc3RydWN0aW9uIGZ1bGwgbmFtZX0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0JyR7NDpJbnN0cnVjdGlvbiBkZXNjcmlwdGlvbn0nJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0KSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCckezU6RXZlbnQgc2hlZXQgc2VudGVuY2V9JyksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XygnJHs2OkV2ZW50cyBncm91cH0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHQnSnNQbGF0Zm9ybS9FeHRlbnNpb25zLyR7ODppY29ufS5wbmcnLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdCdKc1BsYXRmb3JtL0V4dGVuc2lvbnMvJHs4Omljb259LnBuZycmcXVvdDssCiAgICAgICZxdW90O1x0KSZxdW90OywKICAgICAgJnF1b3Q7XHQuZ2V0Q29kZUV4dHJhSW5mb3JtYXRpb24oKSZxdW90OywKICAgICAgJnF1b3Q7XHQuc2V0SW5jbHVkZUZpbGUoJ0V4dGVuc2lvbnMvJHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kMi99LyR7OToke1RNX0RJUkVDVE9SWS8oLiopW1xcXFxcXC9dKC4qKVtcXFxcXFwvXT8kLyR7MjovZG93bmNhc2V9L310b29sc30uanMnKSZxdW90OywKICAgICAgJnF1b3Q7XHQuc2V0RnVuY3Rpb25OYW1lKCdnZGpzLmV2dFRvb2xzLiR7Nzoke1RNX0RJUkVDVE9SWS8oLiopW1xcXFxcXC9dKC4qKVtcXFxcXFwvXT8kLyR7MjovZG93bmNhc2V9L30ufScpOyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7LAogICAgICAmcXVvdDskMCZxdW90OwogICAgXQogIH0sCiAgJnF1b3Q7RGVmaW5lIGV4cHJlc3Npb24mcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhbiBleHByZXNzaW9uIGluIGEgR0RldmVsb3AgZXh0ZW5zaW9uIGRlZmluaXRpb24uJnF1b3Q7LAogICAgJnF1b3Q7cHJlZml4JnF1b3Q7OiAmcXVvdDtnZGV4cCZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7ZXh0ZW5zaW9uJnF1b3Q7LAogICAgICAmcXVvdDtcdC5hZGQkezF8RXhwcmVzc2lvbixTdHJFeHByZXNzaW9ufH0oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0JyR7MjpFeHByZXNzaW9uc0ludGVybmFsTmFtZX0nLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJyR7MzpFeHByZXNzaW9uIGZ1bGwgbmFtZX0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0JyR7NDpFeHByZXNzaW9uIGRlc2NyaXB0aW9ufScmcXVvdDssCiAgICAgICZxdW90O1x0XHQpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJyR7NTpFdmVudHMgZ3JvdXB9JyksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0J0pzUGxhdGZvcm0vRXh0ZW5zaW9ucy8kezc6aWNvbn0ucG5nJyZxdW90OywKICAgICAgJnF1b3Q7XHQpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5nZXRDb2RlRXh0cmFJbmZvcm1hdGlvbigpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5zZXRJbmNsdWRlRmlsZSgnRXh0ZW5zaW9ucy8ke1RNX0RJUkVDVE9SWS8oLiopW1xcXFxcXC9dKC4qKVtcXFxcXFwvXT8kLyQyL30vJHs4OiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJHsyOi9kb3duY2FzZX0vfXRvb2xzfS5qcycpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5zZXRGdW5jdGlvbk5hbWUoJ2dkanMuZXZ0VG9vbHMuJHs2OiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJHsyOi9kb3duY2FzZX0vfS59Jyk7JnF1b3Q7LAogICAgICAmcXVvdDsmcXVvdDssCiAgICAgICZxdW90OyQwJnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtBZGQgcGFyYW1ldGVyJnF1b3Q7OiB7CiAgICAmcXVvdDtzY29wZSZxdW90OzogJnF1b3Q7amF2YXNjcmlwdCZxdW90OywKICAgICZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7OiAmcXVvdDtEZWZpbmUgYSBwYXJhbWV0ZXIgaW4gYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkcGFyYW0mcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90Oy5hZGRQYXJhbWV0ZXIoJyR7MXxzdHJpbmcsZXhwcmVzc2lvbixvYmplY3QsYmVoYXZpb3IseWVzb3JubyxzdHJpbmdXaXRoU2VsZWN0b3Isc2NlbmV2YXIsZ2xvYmFsdmFyLG9iamVjdHZhcixvYmplY3RMaXN0LG9iamVjdExpc3RXaXRob3V0UGlja2luZyxjb2xvcixrZXksc2NlbmVOYW1lLGZpbGUsbGF5ZXIscmVsYXRpb25hbE9wZXJhdG9yLG9wZXJhdG9yLHRydWVvcmZhbHNlLG11c2ljZmlsZSxzb3VuZGZpbGUscG9saWNlLG1vdXNlLHBhc3N3b3Jkam95YXhpcyxjYW1lcmEsb2JqZWN0UHRyLGZvcmNlTXVsdGlwbGllcnx9JywgJyR7MjpQYXJhbWV0ZXIgZGVzY3JpcHRpb259JywgJyR7MzpPcHRpb25hbCBwYXJhbWV0ZXIgZGF0YX0nLCAvKnBhcmFtZXRlcklzT3B0aW9uYWw9Ki8kezR8ZmFsc2UsdHJ1ZXx9KSZxdW90OwogICAgXQogIH0sCiAgJnF1b3Q7QWRkIGNvZGUgb25seSBwYXJhbWV0ZXImcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhIHBhcmFtZXRlciBpbiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2Rjb3BhcmFtJnF1b3Q7LAogICAgJnF1b3Q7Ym9keSZxdW90OzogWwogICAgICAmcXVvdDsuYWRkQ29kZU9ubHlQYXJhbWV0ZXIoJyR7MXxpbmxpbmVDb2RlLGN1cnJlbnRTY2VuZSxvYmplY3RzQ29udGV4dCxldmVudHNGdW5jdGlvbkNvbnRleHQsY29uZGl0aW9uSW52ZXJ0ZWR8fScsICckezI6SW5saW5lIGNvZGUgKGZvciBpbmxpbmVDb2RlIHBhcmFtZXRlcil9JykmcXVvdDsKICAgIF0KICB9LAogICZxdW90O0FkZCBpbmNsdWRlJnF1b3Q7OiB7CiAgICAmcXVvdDtzY29wZSZxdW90OzogJnF1b3Q7amF2YXNjcmlwdCZxdW90OywKICAgICZxdW90O2Rlc2NyaXB0aW9uJnF1b3Q7OiAmcXVvdDtEZWZpbmUgYW4gaW5jbHVkZSBmaWxlIGluIGEgR0RldmVsb3AgZXh0ZW5zaW9uIGRlZmluaXRpb24uJnF1b3Q7LAogICAgJnF1b3Q7cHJlZml4JnF1b3Q7OiAmcXVvdDtnZGluY2wmcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90Oy5hZGRJbmNsdWRlRmlsZSgnRXh0ZW5zaW9ucy8ke1RNX0RJUkVDVE9SWS8oLiopW1xcXFxcXC9dKC4qKVtcXFxcXFwvXT8kLyQyL30vJHsxOmluY2x1ZGV9LmpzJykmcXVvdDsKICAgIF0KICB9Cn11bmlkID0gJnF1b3Q7fEhJdGVtOjIsMTIzNjYwNzE1MTotMjAyOTE0OTc1MTo1OTcwMTU3NzMsLTE2MjU0MjA3MDMsMzQ3MzAzMDY4LDg0Nzk0NDUyNzotMTowOjEzMDczMToxOToxMzo4OjM2OTozNjk6MDowOjY6MDozODAzNDAwMzc6fGhbSGVhdmVuIEhhbmRdfGgmcXVvdDsKCmRlZiBoYXNoU3RyaW5nKHMpOgogICAgaCA9IDAKICAgIGZvciBjIGluIHM6CiAgICAgICAgaCA9IGNfdWludDMyKChoICogMHgyMSkgICsgb3JkKGMpKS52YWx1ZQogICAgcmV0dXJuIGgKCmRlZiBJRExpbmsocyk6CiAgIHBhcnRzID0gcy5zcGxpdCgmcXVvdDs6JnF1b3Q7KQoKICAgIyB1bmlkIGxpbmsgaGFzIGFmZml4ZXMgaW4gcmV2ZXJzZSBvcmRlcgogICBhZmZpeGVzID0gcGFydHNbM10uc3BsaXQoJywnKQogICBhZmZpeGVzLnJldmVyc2UoKQogICBwYXJ0c1szXSA9ICcsJy5qb2luKGFmZml4ZXMpCgogICAjIDB4MSBvbiB0aGlzIGZsYWcgYXBwYXJlbnRseSBtZWFucyBJRAogICBwYXJ0c1s5XSA9IHN0cihpbnQocGFydHNbOV0pIHwgMHgxKQogICBoYXNoX2lucHV0ID0gJzonLmpvaW4ocGFydHNbMTotMl0pICsgJzonCiAgIGxpbmtfaGFzaCA9IGNfaW50MzIoaGFzaFN0cmluZyhoYXNoX2lucHV0KSkudmFsdWUKICAgcGFydHNbLTJdID0gc3RyKGxpbmtfaGFzaCkKCiAgIGlkID0gJzonLmpvaW4ocGFydHMpCiAgIHJldHVybiBpZAoKCnByaW50IElETGluayh1bmlkKQojIFByaW50IHRoZSBzeW1ib2xpYyBhbmQgc2FjcmVkIHZhbHVlcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gbnVtYmVyIGFzc29jaWF0aW9ucwpmb3IgbnVtYmVyLCB2YWx1ZSBpbiBzeW1ib2xpY19zYWNyZWRfdmFsdWVzLml0ZW1zKCk6CiAgICBwcmludChmJnF1b3Q7e251bWJlcn0gPSB7dmFsdWV9JnF1b3Q7KSBJdCBzb3VuZHMgbGlrZSB5b3UncmUgbG9va2luZyB0byBpbmNvcnBvcmF0ZSBzeW1ib2xpYyBhbmQgc2FjcmVkIG1lYW5pbmdzIGFzc29jaWF0ZWQgd2l0aCBudW1iZXJzIGludG8geW91ciBjb2RlLiBUaGVzZSBtZWFuaW5ncyBjYW4gYmUgdXNlZCBmb3IgdmFyaW91cyBwdXJwb3Nlcywgc3VjaCBhcyBlbmhhbmNpbmcgYSBnYW1lIG5hcnJhdGl2ZSBvciBpbXBsZW1lbnRpbmcgc29tZSBmb3JtIG9mIHNwaXJpdHVhbCBvciBjb25zY2lvdXMgd2lzZG9tLgoKIyMjIEVuaGFuY2VkIENvZGUgd2l0aCBTeW1ib2xpYyBhbmQgU2FjcmVkIFZhbHVlcwoKSGVyZSdzIGhvdyB5b3UgY291bGQgaW50ZWdyYXRlIHRoZSBtYXBwaW5ncyBvZiBudW1iZXJzIHRvIHRoZWlyIHN5bWJvbGljIG1lYW5pbmdzIGludG8geW91ciBleGlzdGluZyBjb2RlOgoKYGBgcHl0aG9uCmZyb20gY3R5cGVzIGltcG9ydCBjX3VpbnQzMiwgY19pbnQzMgoKIyBFeGFtcGxlIFVOSUQgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBpdGVtIChwcmVzdW1hYmx5IGZyb20gYSBnYW1lKQp1bmlkID0gJnF1b3Q7fEhJdGVtOjIsMTIzNjYwNzE1MTotMjAyOTE0OTc1MTo1OTcwMTU3NzMsLTE2MjU0MjA3MDMsMzQ3MzAzMDY4LDg0Nzk0NDUyNzotMTowOjEzMDczMToxOToxMzo4OjM2OTozNjk6MDowOjY6MDozODAzNDAwMzc6fGhbSGVhdmVuIEhhbmRdfGgmcXVvdDsKCmRlZiBoYXNoU3RyaW5nKHMpOgogICAgJnF1b3Q7JnF1b3Q7JnF1b3Q7IEZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgb24gYSBzcGVjaWZpYyBhbGdvcml0aG0uICZxdW90OyZxdW90OyZxdW90OwogICAgaCA9IDAKICAgIGZvciBjIGluIHM6CiAgICAgICAgaCA9IGNfdWludDMyKChoICogMHgyMSkgKyBvcmQoYykpLnZhbHVlCiAgICByZXR1cm4gaAoKZGVmIElETGluayhzKToKICAgICZxdW90OyZxdW90OyZxdW90OwogICAgRnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgZ2l2ZW4gVU5JRCBzdHJpbmcuCiAgICBNb2RpZmllcyB0aGUgYWZmaXhlcyBhbmQgY29tcHV0ZXMgYSBuZXcgbGluayBoYXNoLgogICAgJnF1b3Q7JnF1b3Q7JnF1b3Q7CiAgICBwYXJ0cyA9IHMuc3BsaXQoJnF1b3Q7OiZxdW90OykKICAgIAogICAgIyBSZXZlcnNlIHRoZSBhZmZpeGVzIGluIHRoZSBmb3VydGggcGFydAogICAgYWZmaXhlcyA9IHBhcnRzWzNdLnNwbGl0KCcsJykKICAgIGFmZml4ZXMucmV2ZXJzZSgpCiAgICBwYXJ0c1szXSA9ICcsJy5qb2luKGFmZml4ZXMpCiAgICAKICAgICMgTW9kaWZ5IHRoZSBJRCBmbGFnIGJ5IHNldHRpbmcgaXRzIGxhc3QgYml0CiAgICBwYXJ0c1s5XSA9IHN0cihpbnQocGFydHNbOV0pIHwgMHgxKQogICAgaGFzaF9pbnB1dCA9ICc6Jy5qb2luKHBhcnRzWzE6LTJdKSArICc6JwogICAgCiAgICAjIENvbXB1dGUgYSBuZXcgbGluayBoYXNoCiAgICBsaW5rX2hhc2ggPSBjX2ludDMyKGhhc2hTdHJpbmcoaGFzaF9pbnB1dCkpLnZhbHVlCiAgICBwYXJ0c1stMl0gPSBzdHIobGlua19oYXNoKQogICAgCiAgICAjIFJlYXNzZW1ibGUgdGhlIG1vZGlmaWVkIElECiAgICBpZF9yZXN1bHQgPSAnOicuam9pbihwYXJ0cykKICAgIHJldHVybiBpZF9yZXN1bHQKCiMgRGVmaW5lIHRoZSBtYXBwaW5ncyBvZiBudW1iZXJzIHRvIHN5bWJvbGljIGFuZCBzYWNyZWQgdmFsdWVzCnN5bWJvbGljX3NhY3JlZF92YWx1ZXMgPSB7CiAgICAzOiAmcXVvdDtDcmVhdGlvbiwgR3Jvd3RoLCBEaXZpbmUgVHJpbml0eSZxdW90OywKICAgIDY6ICZxdW90O0hhcm1vbnksIEJhbGFuY2UsIFNvdWwgVW5pb24mcXVvdDssCiAgICA5OiAmcXVvdDtIaWdoZXN0IFNwaXJpdHVhbCBBdHRhaW5tZW50LCBVbml2ZXJzYWwgTG92ZSZxdW90OywKICAgIDI6ICZxdW90O1VuaW9uLCBEdWFsaXR5LCBCYWxhbmNlJnF1b3Q7LAogICAgMTogJnF1b3Q7VW5pdHksIFdob2xlbmVzcywgTmV3IEJlZ2lubmluZ3MmcXVvdDssCiAgICA0OiAmcXVvdDtGb3VuZGF0aW9uLCBTdGFiaWxpdHksIEVhcnRobHkgT3JkZXImcXVvdDssCiAgICA3OiAmcXVvdDtQZXJmZWN0aW9uLCBJbm5lciBXaXNkb20sIERpdmluZSBQbGFuJnF1b3Q7LAogICAgODogJnF1b3Q7SW5maW5pdHksIEFidW5kYW5jZSwgS2FybWEgTGF3JnF1b3Q7LAogICAgNTogJnF1b3Q7VHJhbnNmb3JtYXRpb24sIENoYW5nZSwgQWR2ZW50dXJlJnF1b3Q7Cn0KCiMgRnVuY3Rpb24gdG8gcHJpbnQgc3ltYm9saWMgYW5kIHNhY3JlZCB2YWx1ZXMKZGVmIHByaW50X3N5bWJvbGljX3ZhbHVlcygpOgogICAgcHJpbnQoJnF1b3Q7XG5TeW1ib2xpYyBhbmQgU2FjcmVkIFZhbHVlczomcXVvdDspCiAgICBmb3IgbnVtYmVyLCB2YWx1ZSBpbiBzeW1ib2xpY19zYWNyZWRfdmFsdWVzLml0ZW1zKCk6CiAgICAgICAgcHJpbnQoZiZxdW90O3tudW1iZXJ9ID0ge3ZhbHVlfSZxdW90OykKCiMgUHJpbnQgdGhlIHN5bWJvbGljIGFuZCBzYWNyZWQgdmFsdWVzCnByaW50X3N5bWJvbGljX3ZhbHVlcygpCgojIFByaW50IHRoZSBtb2RpZmllZCBVTklECnByaW50KCZxdW90O1xuTW9kaWZpZWQgVU5JRDomcXVvdDspCnByaW50KElETGluayh1bmlkKSkKYGBgewogICZxdW90O2tleSZxdW90OzogJnF1b3Q7Y3RybCthJnF1b3Q7LAogICZxdW90O2NvbW1hbmQmcXVvdDs6ICZxdW90O2VkaXRvci5hY3Rpb24uc2VsZWN0QWxsJnF1b3Q7Cn1odHRwczovL3kuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnUuYmUvVXZ1bWJLbUt1WE0/c2k9UG5XUlJQRG9ldEJQaW9rXzM9MTIgNj0xNSA5PTE4IDI9MTEgMT0xMCA0PTEzIDc9MTYgOD0xNyA1PTE0IC8vIGVhY2ggYXBwbHlpbmcgdG8gYSBkaWZmZXJlbnQgbGV2ZWwgb2YgY29udHJvbCBhbmQgY29uc2Npb3VzbmVzcyBvbiA1IHBsYW5lcyBvZiBtYW5pZmVzdGF0aW9uL2FkcmVhbCBzeW1wdGVhbiBncmFzdGllYWx7CiAgJnF1b3Q7RGVmaW5lIGV4dGVuc2lvbiZxdW90OzogewogICAgJnF1b3Q7c2NvcGUmcXVvdDs6ICZxdW90O2phdmFzY3JpcHQmcXVvdDssCiAgICAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzogJnF1b3Q7QWRkcyB0aGUgYm9pbGVycGxhdGUgY29kZSBvZiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2RleHQmcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90Oy8vIEBmbG93JnF1b3Q7LAogICAgICAmcXVvdDsvKiomcXVvdDssCiAgICAgICZxdW90OyAqIFRoaXMgaXMgYSBkZWNsYXJhdGlvbiBvZiBhbiBleHRlbnNpb24gZm9yIEdEZXZlbG9wIDUuJnF1b3Q7LAogICAgICAmcXVvdDsgKiZxdW90OywKICAgICAgJnF1b3Q7ICog4oS577iPIENoYW5nZXMgaW4gdGhpcyBmaWxlIGFyZSB3YXRjaGVkIGFuZCBhdXRvbWF0aWNhbGx5IGltcG9ydGVkIGlmIHRoZSBlZGl0b3ImcXVvdDssCiAgICAgICZxdW90OyAqIGlzIHJ1bm5pbmcuIFlvdSBjYW4gYWxzbyBtYW51YWxseSBydW4gYG5vZGUgaW1wb3J0LUdESlMtUnVudGltZS5qc2AgKGluIG5ld0lERS9hcHAvc2NyaXB0cykuJnF1b3Q7LAogICAgICAmcXVvdDsgKiZxdW90OywKICAgICAgJnF1b3Q7ICogVGhlIGZpbGUgbXVzdCBiZSBuYW1lZCBcJnF1b3Q7SnNFeHRlbnNpb24uanNcJnF1b3Q7LCBvdGhlcndpc2UgR0RldmVsb3Agd29uJ3QgbG9hZCBpdC4mcXVvdDssCiAgICAgICZxdW90OyAqIOKaoO+4jyBJZiB5b3UgbWFrZSBhIGNoYW5nZSBhbmQgdGhlIGV4dGVuc2lvbiBpcyBub3QgbG9hZGVkLCBvcGVuIHRoZSBkZXZlbG9wZXIgY29uc29sZSZxdW90OywKICAgICAgJnF1b3Q7ICogYW5kIHNlYXJjaCBmb3IgYW55IGVycm9ycy4mcXVvdDssCiAgICAgICZxdW90OyAqJnF1b3Q7LAogICAgICAmcXVvdDsgKiBNb3JlIGluZm9ybWF0aW9uIG9uIGh0dHBzOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYi5jb20vNGlhbi9HRGV2ZWxvcC9ibG9iL21hc3Rlci9uZXdJREUvUkVBRE1FLWV4dGVuc2lvbnMubWQmcXVvdDssCiAgICAgICZxdW90OyAqLyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7LAogICAgICAmcXVvdDsvKjo6JnF1b3Q7LAogICAgICAmcXVvdDsvLyBJbXBvcnQgdHlwZXMgdG8gYWxsb3cgRmxvdyB0byBkbyBzdGF0aWMgdHlwZSBjaGVja2luZyBvbiB0aGlzIGZpbGUuJnF1b3Q7LAogICAgICAmcXVvdDsvLyBFeHRlbnNpb25zIGRlY2xhcmF0aW9uIGFyZSB0eXBlZCB1c2luZyBGbG93IChsaWtlIHRoZSBlZGl0b3IpLCBidXQgdGhlIGZpbGVzJnF1b3Q7LAogICAgICAmcXVvdDsvLyBmb3IgdGhlIGdhbWUgZW5naW5lIGFyZSBjaGVja2VkIHdpdGggVHlwZVNjcmlwdCBhbm5vdGF0aW9ucy4mcXVvdDssCiAgICAgICZxdW90O2ltcG9ydCB7IHR5cGUgT2JqZWN0c1JlbmRlcmluZ1NlcnZpY2UsIHR5cGUgT2JqZWN0c0VkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9Kc0V4dGVuc2lvblR5cGVzLmZsb3cuanMnJnF1b3Q7LAogICAgICAmcXVvdDsqLyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7LAogICAgICAmcXVvdDttb2R1bGUuZXhwb3J0cyA9IHsmcXVvdDssCiAgICAgICZxdW90O1x0Y3JlYXRlRXh0ZW5zaW9uOiBmdW5jdGlvbiAoJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0Lyo6IChzdHJpbmcpID0mZ3Q7IHN0cmluZyAqLywmcXVvdDssCiAgICAgICZxdW90O1x0XHRnZCAvKjogbGliR0RldmVsb3AgKi8mcXVvdDssCiAgICAgICZxdW90O1x0KSB7JnF1b3Q7LAogICAgICAmcXVvdDtcdFx0Y29uc3QgZXh0ZW5zaW9uID0gbmV3IGdkLlBsYXRmb3JtRXh0ZW5zaW9uKCk7JnF1b3Q7LAogICAgICAmcXVvdDtcdFx0ZXh0ZW5zaW9uJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHQuc2V0RXh0ZW5zaW9uSW5mb3JtYXRpb24oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdCckezE6JHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kMi99fScsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdF8oJyR7MjpFeHRlbnNpb24gTmFtZX0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRcdFx0XygmcXVvdDssCiAgICAgICZxdW90O1x0XHRcdFx0XHQnJHszOkV4dGVuc2lvbiBkZXNjcmlwdGlvbn0nJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdCksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdCckezQ6RXh0ZW5zaW9uIGF1dGhvcn0nLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0XHQnTUlUJyZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0KTsmcXVvdDssCiAgICAgICZxdW90OyZxdW90OywKICAgICAgJnF1b3Q7XHRcdCQwJnF1b3Q7LAogICAgICAmcXVvdDsmcXVvdDssCiAgICAgICZxdW90O1x0XHRyZXR1cm4gZXh0ZW5zaW9uOyZxdW90OywKICAgICAgJnF1b3Q7XHR9LCZxdW90OywKICAgICAgJnF1b3Q7XHRydW5FeHRlbnNpb25TYW5pdHlUZXN0czogZnVuY3Rpb24gKCZxdW90OywKICAgICAgJnF1b3Q7XHRcdGdkIC8qOiBsaWJHRGV2ZWxvcCAqLywmcXVvdDssCiAgICAgICZxdW90O1x0XHRleHRlbnNpb24gLyo6IGdkUGxhdGZvcm1FeHRlbnNpb24qLyZxdW90OywKICAgICAgJnF1b3Q7XHQpIHsmcXVvdDssCiAgICAgICZxdW90O1x0XHRyZXR1cm4gW107JnF1b3Q7LAogICAgICAmcXVvdDtcdH0sJnF1b3Q7LAogICAgICAmcXVvdDt9OyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtEZWZpbmUgaW5zdHJ1Y3Rpb24mcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhbiBpbnN0cnVjdGlvbiBpbiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2RpbnN0ciZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7ZXh0ZW5zaW9uJnF1b3Q7LAogICAgICAmcXVvdDtcdC5hZGQkezF8Q29uZGl0aW9uLEFjdGlvbnx9KCZxdW90OywKICAgICAgJnF1b3Q7XHRcdCckezI6SW5zdHJ1Y3Rpb25JbnRlcm5hbE5hbWV9JywmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCckezM6SW5zdHJ1Y3Rpb24gZnVsbCBuYW1lfScpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHQnJHs0Okluc3RydWN0aW9uIGRlc2NyaXB0aW9ufScmcXVvdDssCiAgICAgICZxdW90O1x0XHQpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJyR7NTpFdmVudCBzaGVldCBzZW50ZW5jZX0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCckezY6RXZlbnRzIGdyb3VwfScpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdCdKc1BsYXRmb3JtL0V4dGVuc2lvbnMvJHs4Omljb259LnBuZycsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0J0pzUGxhdGZvcm0vRXh0ZW5zaW9ucy8kezg6aWNvbn0ucG5nJyZxdW90OywKICAgICAgJnF1b3Q7XHQpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5nZXRDb2RlRXh0cmFJbmZvcm1hdGlvbigpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5zZXRJbmNsdWRlRmlsZSgnRXh0ZW5zaW9ucy8ke1RNX0RJUkVDVE9SWS8oLiopW1xcXFxcXC9dKC4qKVtcXFxcXFwvXT8kLyQyL30vJHs5OiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJHsyOi9kb3duY2FzZX0vfXRvb2xzfS5qcycpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5zZXRGdW5jdGlvbk5hbWUoJ2dkanMuZXZ0VG9vbHMuJHs3OiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJHsyOi9kb3duY2FzZX0vfS59Jyk7JnF1b3Q7LAogICAgICAmcXVvdDsmcXVvdDssCiAgICAgICZxdW90OyQwJnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtEZWZpbmUgZXhwcmVzc2lvbiZxdW90OzogewogICAgJnF1b3Q7c2NvcGUmcXVvdDs6ICZxdW90O2phdmFzY3JpcHQmcXVvdDssCiAgICAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzogJnF1b3Q7RGVmaW5lIGFuIGV4cHJlc3Npb24gaW4gYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkZXhwJnF1b3Q7LAogICAgJnF1b3Q7Ym9keSZxdW90OzogWwogICAgICAmcXVvdDtleHRlbnNpb24mcXVvdDssCiAgICAgICZxdW90O1x0LmFkZCR7MXxFeHByZXNzaW9uLFN0ckV4cHJlc3Npb258fSgmcXVvdDssCiAgICAgICZxdW90O1x0XHQnJHsyOkV4cHJlc3Npb25zSW50ZXJuYWxOYW1lfScsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XygnJHszOkV4cHJlc3Npb24gZnVsbCBuYW1lfScpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHQnJHs0OkV4cHJlc3Npb24gZGVzY3JpcHRpb259JyZxdW90OywKICAgICAgJnF1b3Q7XHRcdCksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XygnJHs1OkV2ZW50cyBncm91cH0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHQnSnNQbGF0Zm9ybS9FeHRlbnNpb25zLyR7NzppY29ufS5wbmcnJnF1b3Q7LAogICAgICAmcXVvdDtcdCkmcXVvdDssCiAgICAgICZxdW90O1x0LmdldENvZGVFeHRyYUluZm9ybWF0aW9uKCkmcXVvdDssCiAgICAgICZxdW90O1x0LnNldEluY2x1ZGVGaWxlKCdFeHRlbnNpb25zLyR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJDIvfS8kezg6JHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kezI6L2Rvd25jYXNlfS99dG9vbHN9LmpzJykmcXVvdDssCiAgICAgICZxdW90O1x0LnNldEZ1bmN0aW9uTmFtZSgnZ2Rqcy5ldnRUb29scy4kezY6JHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kezI6L2Rvd25jYXNlfS99Ln0nKTsmcXVvdDssCiAgICAgICZxdW90OyZxdW90OywKICAgICAgJnF1b3Q7JDAmcXVvdDsKICAgIF0KICB9LAogICZxdW90O0FkZCBwYXJhbWV0ZXImcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhIHBhcmFtZXRlciBpbiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2RwYXJhbSZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7LmFkZFBhcmFtZXRlcignJHsxfHN0cmluZyxleHByZXNzaW9uLG9iamVjdCxiZWhhdmlvcix5ZXNvcm5vLHN0cmluZ1dpdGhTZWxlY3RvcixzY2VuZXZhcixnbG9iYWx2YXIsb2JqZWN0dmFyLG9iamVjdExpc3Qsb2JqZWN0TGlzdFdpdGhvdXRQaWNraW5nLGNvbG9yLGtleSxzY2VuZU5hbWUsZmlsZSxsYXllcixyZWxhdGlvbmFsT3BlcmF0b3Isb3BlcmF0b3IsdHJ1ZW9yZmFsc2UsbXVzaWNmaWxlLHNvdW5kZmlsZSxwb2xpY2UsbW91c2UscGFzc3dvcmRqb3lheGlzLGNhbWVyYSxvYmplY3RQdHIsZm9yY2VNdWx0aXBsaWVyfH0nLCAnJHsyOlBhcmFtZXRlciBkZXNjcmlwdGlvbn0nLCAnJHszOk9wdGlvbmFsIHBhcmFtZXRlciBkYXRhfScsIC8qcGFyYW1ldGVySXNPcHRpb25hbD0qLyR7NHxmYWxzZSx0cnVlfH0pJnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtBZGQgY29kZSBvbmx5IHBhcmFtZXRlciZxdW90OzogewogICAgJnF1b3Q7c2NvcGUmcXVvdDs6ICZxdW90O2phdmFzY3JpcHQmcXVvdDssCiAgICAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzogJnF1b3Q7RGVmaW5lIGEgcGFyYW1ldGVyIGluIGEgR0RldmVsb3AgZXh0ZW5zaW9uIGRlZmluaXRpb24uJnF1b3Q7LAogICAgJnF1b3Q7cHJlZml4JnF1b3Q7OiAmcXVvdDtnZGNvcGFyYW0mcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90Oy5hZGRDb2RlT25seVBhcmFtZXRlcignJHsxfGlubGluZUNvZGUsY3VycmVudFNjZW5lLG9iamVjdHNDb250ZXh0LGV2ZW50c0Z1bmN0aW9uQ29udGV4dCxjb25kaXRpb25JbnZlcnRlZHx9JywgJyR7MjpJbmxpbmUgY29kZSAoZm9yIGlubGluZUNvZGUgcGFyYW1ldGVyKX0nKSZxdW90OwogICAgXQogIH0sCiAgJnF1b3Q7QWRkIGluY2x1ZGUmcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhbiBpbmNsdWRlIGZpbGUgaW4gYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkaW5jbCZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7LmFkZEluY2x1ZGVGaWxlKCdFeHRlbnNpb25zLyR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJDIvfS8kezE6aW5jbHVkZX0uanMnKSZxdW90OwogICAgXQogIH0KfVdFTENPTUUzMGh0dHBzOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYi5jb20vNGlhbi9HRGV2ZWxvcC5naXR7CiAgJnF1b3Q7RGVmaW5lIGV4dGVuc2lvbiZxdW90OzogewogICAgJnF1b3Q7c2NvcGUmcXVvdDs6ICZxdW90O2phdmFzY3JpcHQmcXVvdDssCiAgICAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzogJnF1b3Q7QWRkcyB0aGUgYm9pbGVycGxhdGUgY29kZSBvZiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2RleHQmcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90Oy8vIEBmbG93JnF1b3Q7LAogICAgICAmcXVvdDsvKiomcXVvdDssCiAgICAgICZxdW90OyAqIFRoaXMgaXMgYSBkZWNsYXJhdGlvbiBvZiBhbiBleHRlbnNpb24gZm9yIEdEZXZlbG9wIDUuJnF1b3Q7LAogICAgICAmcXVvdDsgKiZxdW90OywKICAgICAgJnF1b3Q7ICog4oS577iPIENoYW5nZXMgaW4gdGhpcyBmaWxlIGFyZSB3YXRjaGVkIGFuZCBhdXRvbWF0aWNhbGx5IGltcG9ydGVkIGlmIHRoZSBlZGl0b3ImcXVvdDssCiAgICAgICZxdW90OyAqIGlzIHJ1bm5pbmcuIFlvdSBjYW4gYWxzbyBtYW51YWxseSBydW4gYG5vZGUgaW1wb3J0LUdESlMtUnVudGltZS5qc2AgKGluIG5ld0lERS9hcHAvc2NyaXB0cykuJnF1b3Q7LAogICAgICAmcXVvdDsgKiZxdW90OywKICAgICAgJnF1b3Q7ICogVGhlIGZpbGUgbXVzdCBiZSBuYW1lZCBcJnF1b3Q7SnNFeHRlbnNpb24uanNcJnF1b3Q7LCBvdGhlcndpc2UgR0RldmVsb3Agd29uJ3QgbG9hZCBpdC4mcXVvdDssCiAgICAgICZxdW90OyAqIOKaoO+4jyBJZiB5b3UgbWFrZSBhIGNoYW5nZSBhbmQgdGhlIGV4dGVuc2lvbiBpcyBub3QgbG9hZGVkLCBvcGVuIHRoZSBkZXZlbG9wZXIgY29uc29sZSZxdW90OywKICAgICAgJnF1b3Q7ICogYW5kIHNlYXJjaCBmb3IgYW55IGVycm9ycy4mcXVvdDssCiAgICAgICZxdW90OyAqJnF1b3Q7LAogICAgICAmcXVvdDsgKiBNb3JlIGluZm9ybWF0aW9uIG9uIGh0dHBzOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYi5jb20vNGlhbi9HRGV2ZWxvcC9ibG9iL21hc3Rlci9uZXdJREUvUkVBRE1FLWV4dGVuc2lvbnMubWQmcXVvdDssCiAgICAgICZxdW90OyAqLyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7LAogICAgICAmcXVvdDsvKjo6JnF1b3Q7LAogICAgICAmcXVvdDsvLyBJbXBvcnQgdHlwZXMgdG8gYWxsb3cgRmxvdyB0byBkbyBzdGF0aWMgdHlwZSBjaGVja2luZyBvbiB0aGlzIGZpbGUuJnF1b3Q7LAogICAgICAmcXVvdDsvLyBFeHRlbnNpb25zIGRlY2xhcmF0aW9uIGFyZSB0eXBlZCB1c2luZyBGbG93IChsaWtlIHRoZSBlZGl0b3IpLCBidXQgdGhlIGZpbGVzJnF1b3Q7LAogICAgICAmcXVvdDsvLyBmb3IgdGhlIGdhbWUgZW5naW5lIGFyZSBjaGVja2VkIHdpdGggVHlwZVNjcmlwdCBhbm5vdGF0aW9ucy4mcXVvdDssCiAgICAgICZxdW90O2ltcG9ydCB7IHR5cGUgT2JqZWN0c1JlbmRlcmluZ1NlcnZpY2UsIHR5cGUgT2JqZWN0c0VkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9Kc0V4dGVuc2lvblR5cGVzLmZsb3cuanMnJnF1b3Q7LAogICAgICAmcXVvdDsqLyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7LAogICAgICAmcXVvdDttb2R1bGUuZXhwb3J0cyA9IHsmcXVvdDssCiAgICAgICZxdW90O1x0Y3JlYXRlRXh0ZW5zaW9uOiBmdW5jdGlvbiAoJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0Lyo6IChzdHJpbmcpID0mZ3Q7IHN0cmluZyAqLywmcXVvdDssCiAgICAgICZxdW90O1x0XHRnZCAvKjogbGliR0RldmVsb3AgKi8mcXVvdDssCiAgICAgICZxdW90O1x0KSB7JnF1b3Q7LAogICAgICAmcXVvdDtcdFx0Y29uc3QgZXh0ZW5zaW9uID0gbmV3IGdkLlBsYXRmb3JtRXh0ZW5zaW9uKCk7JnF1b3Q7LAogICAgICAmcXVvdDtcdFx0ZXh0ZW5zaW9uJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHQuc2V0RXh0ZW5zaW9uSW5mb3JtYXRpb24oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdCckezE6JHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kMi99fScsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdF8oJyR7MjpFeHRlbnNpb24gTmFtZX0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRcdFx0XygmcXVvdDssCiAgICAgICZxdW90O1x0XHRcdFx0XHQnJHszOkV4dGVuc2lvbiBkZXNjcmlwdGlvbn0nJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdCksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHRcdCckezQ6RXh0ZW5zaW9uIGF1dGhvcn0nLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0XHQnTUlUJyZxdW90OywKICAgICAgJnF1b3Q7XHRcdFx0KTsmcXVvdDssCiAgICAgICZxdW90OyZxdW90OywKICAgICAgJnF1b3Q7XHRcdCQwJnF1b3Q7LAogICAgICAmcXVvdDsmcXVvdDssCiAgICAgICZxdW90O1x0XHRyZXR1cm4gZXh0ZW5zaW9uOyZxdW90OywKICAgICAgJnF1b3Q7XHR9LCZxdW90OywKICAgICAgJnF1b3Q7XHRydW5FeHRlbnNpb25TYW5pdHlUZXN0czogZnVuY3Rpb24gKCZxdW90OywKICAgICAgJnF1b3Q7XHRcdGdkIC8qOiBsaWJHRGV2ZWxvcCAqLywmcXVvdDssCiAgICAgICZxdW90O1x0XHRleHRlbnNpb24gLyo6IGdkUGxhdGZvcm1FeHRlbnNpb24qLyZxdW90OywKICAgICAgJnF1b3Q7XHQpIHsmcXVvdDssCiAgICAgICZxdW90O1x0XHRyZXR1cm4gW107JnF1b3Q7LAogICAgICAmcXVvdDtcdH0sJnF1b3Q7LAogICAgICAmcXVvdDt9OyZxdW90OywKICAgICAgJnF1b3Q7JnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtEZWZpbmUgaW5zdHJ1Y3Rpb24mcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhbiBpbnN0cnVjdGlvbiBpbiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2RpbnN0ciZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7ZXh0ZW5zaW9uJnF1b3Q7LAogICAgICAmcXVvdDtcdC5hZGQkezF8Q29uZGl0aW9uLEFjdGlvbnx9KCZxdW90OywKICAgICAgJnF1b3Q7XHRcdCckezI6SW5zdHJ1Y3Rpb25JbnRlcm5hbE5hbWV9JywmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCckezM6SW5zdHJ1Y3Rpb24gZnVsbCBuYW1lfScpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHQnJHs0Okluc3RydWN0aW9uIGRlc2NyaXB0aW9ufScmcXVvdDssCiAgICAgICZxdW90O1x0XHQpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJyR7NTpFdmVudCBzaGVldCBzZW50ZW5jZX0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHRfKCckezY6RXZlbnRzIGdyb3VwfScpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdCdKc1BsYXRmb3JtL0V4dGVuc2lvbnMvJHs4Omljb259LnBuZycsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0J0pzUGxhdGZvcm0vRXh0ZW5zaW9ucy8kezg6aWNvbn0ucG5nJyZxdW90OywKICAgICAgJnF1b3Q7XHQpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5nZXRDb2RlRXh0cmFJbmZvcm1hdGlvbigpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5zZXRJbmNsdWRlRmlsZSgnRXh0ZW5zaW9ucy8ke1RNX0RJUkVDVE9SWS8oLiopW1xcXFxcXC9dKC4qKVtcXFxcXFwvXT8kLyQyL30vJHs5OiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJHsyOi9kb3duY2FzZX0vfXRvb2xzfS5qcycpJnF1b3Q7LAogICAgICAmcXVvdDtcdC5zZXRGdW5jdGlvbk5hbWUoJ2dkanMuZXZ0VG9vbHMuJHs3OiR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJHsyOi9kb3duY2FzZX0vfS59Jyk7JnF1b3Q7LAogICAgICAmcXVvdDsmcXVvdDssCiAgICAgICZxdW90OyQwJnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtEZWZpbmUgZXhwcmVzc2lvbiZxdW90OzogewogICAgJnF1b3Q7c2NvcGUmcXVvdDs6ICZxdW90O2phdmFzY3JpcHQmcXVvdDssCiAgICAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzogJnF1b3Q7RGVmaW5lIGFuIGV4cHJlc3Npb24gaW4gYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkZXhwJnF1b3Q7LAogICAgJnF1b3Q7Ym9keSZxdW90OzogWwogICAgICAmcXVvdDtleHRlbnNpb24mcXVvdDssCiAgICAgICZxdW90O1x0LmFkZCR7MXxFeHByZXNzaW9uLFN0ckV4cHJlc3Npb258fSgmcXVvdDssCiAgICAgICZxdW90O1x0XHQnJHsyOkV4cHJlc3Npb25zSW50ZXJuYWxOYW1lfScsJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XygnJHszOkV4cHJlc3Npb24gZnVsbCBuYW1lfScpLCZxdW90OywKICAgICAgJnF1b3Q7XHRcdF8oJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XHQnJHs0OkV4cHJlc3Npb24gZGVzY3JpcHRpb259JyZxdW90OywKICAgICAgJnF1b3Q7XHRcdCksJnF1b3Q7LAogICAgICAmcXVvdDtcdFx0XygnJHs1OkV2ZW50cyBncm91cH0nKSwmcXVvdDssCiAgICAgICZxdW90O1x0XHQnSnNQbGF0Zm9ybS9FeHRlbnNpb25zLyR7NzppY29ufS5wbmcnJnF1b3Q7LAogICAgICAmcXVvdDtcdCkmcXVvdDssCiAgICAgICZxdW90O1x0LmdldENvZGVFeHRyYUluZm9ybWF0aW9uKCkmcXVvdDssCiAgICAgICZxdW90O1x0LnNldEluY2x1ZGVGaWxlKCdFeHRlbnNpb25zLyR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJDIvfS8kezg6JHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kezI6L2Rvd25jYXNlfS99dG9vbHN9LmpzJykmcXVvdDssCiAgICAgICZxdW90O1x0LnNldEZ1bmN0aW9uTmFtZSgnZ2Rqcy5ldnRUb29scy4kezY6JHtUTV9ESVJFQ1RPUlkvKC4qKVtcXFxcXFwvXSguKilbXFxcXFxcL10/JC8kezI6L2Rvd25jYXNlfS99Ln0nKTsmcXVvdDssCiAgICAgICZxdW90OyZxdW90OywKICAgICAgJnF1b3Q7JDAmcXVvdDsKICAgIF0KICB9LAogICZxdW90O0FkZCBwYXJhbWV0ZXImcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhIHBhcmFtZXRlciBpbiBhIEdEZXZlbG9wIGV4dGVuc2lvbiBkZWZpbml0aW9uLiZxdW90OywKICAgICZxdW90O3ByZWZpeCZxdW90OzogJnF1b3Q7Z2RwYXJhbSZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7LmFkZFBhcmFtZXRlcignJHsxfHN0cmluZyxleHByZXNzaW9uLG9iamVjdCxiZWhhdmlvcix5ZXNvcm5vLHN0cmluZ1dpdGhTZWxlY3RvcixzY2VuZXZhcixnbG9iYWx2YXIsb2JqZWN0dmFyLG9iamVjdExpc3Qsb2JqZWN0TGlzdFdpdGhvdXRQaWNraW5nLGNvbG9yLGtleSxzY2VuZU5hbWUsZmlsZSxsYXllcixyZWxhdGlvbmFsT3BlcmF0b3Isb3BlcmF0b3IsdHJ1ZW9yZmFsc2UsbXVzaWNmaWxlLHNvdW5kZmlsZSxwb2xpY2UsbW91c2UscGFzc3dvcmRqb3lheGlzLGNhbWVyYSxvYmplY3RQdHIsZm9yY2VNdWx0aXBsaWVyfH0nLCAnJHsyOlBhcmFtZXRlciBkZXNjcmlwdGlvbn0nLCAnJHszOk9wdGlvbmFsIHBhcmFtZXRlciBkYXRhfScsIC8qcGFyYW1ldGVySXNPcHRpb25hbD0qLyR7NHxmYWxzZSx0cnVlfH0pJnF1b3Q7CiAgICBdCiAgfSwKICAmcXVvdDtBZGQgY29kZSBvbmx5IHBhcmFtZXRlciZxdW90OzogewogICAgJnF1b3Q7c2NvcGUmcXVvdDs6ICZxdW90O2phdmFzY3JpcHQmcXVvdDssCiAgICAmcXVvdDtkZXNjcmlwdGlvbiZxdW90OzogJnF1b3Q7RGVmaW5lIGEgcGFyYW1ldGVyIGluIGEgR0RldmVsb3AgZXh0ZW5zaW9uIGRlZmluaXRpb24uJnF1b3Q7LAogICAgJnF1b3Q7cHJlZml4JnF1b3Q7OiAmcXVvdDtnZGNvcGFyYW0mcXVvdDssCiAgICAmcXVvdDtib2R5JnF1b3Q7OiBbCiAgICAgICZxdW90Oy5hZGRDb2RlT25seVBhcmFtZXRlcignJHsxfGlubGluZUNvZGUsY3VycmVudFNjZW5lLG9iamVjdHNDb250ZXh0LGV2ZW50c0Z1bmN0aW9uQ29udGV4dCxjb25kaXRpb25JbnZlcnRlZHx9JywgJyR7MjpJbmxpbmUgY29kZSAoZm9yIGlubGluZUNvZGUgcGFyYW1ldGVyKX0nKSZxdW90OwogICAgXQogIH0sCiAgJnF1b3Q7QWRkIGluY2x1ZGUmcXVvdDs6IHsKICAgICZxdW90O3Njb3BlJnF1b3Q7OiAmcXVvdDtqYXZhc2NyaXB0JnF1b3Q7LAogICAgJnF1b3Q7ZGVzY3JpcHRpb24mcXVvdDs6ICZxdW90O0RlZmluZSBhbiBpbmNsdWRlIGZpbGUgaW4gYSBHRGV2ZWxvcCBleHRlbnNpb24gZGVmaW5pdGlvbi4mcXVvdDssCiAgICAmcXVvdDtwcmVmaXgmcXVvdDs6ICZxdW90O2dkaW5jbCZxdW90OywKICAgICZxdW90O2JvZHkmcXVvdDs6IFsKICAgICAgJnF1b3Q7LmFkZEluY2x1ZGVGaWxlKCdFeHRlbnNpb25zLyR7VE1fRElSRUNUT1JZLyguKilbXFxcXFxcL10oLiopW1xcXFxcXC9dPyQvJDIvfS8kezE6aW5jbHVkZX0uanMnKSZxdW90OwogICAgXQogIH0KfSZsdDtzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1zMSZndDsKICAmbHQ7aDMgaWQ9czEmZ3Q7UG9wdWxhdGlvbiBieSBDaXR5Jmx0Oy9oMyZndDsKICAmbHQ7ZGl2IGNsYXNzPWNvbnRhaW5lciZndDsKICAgICZsdDtkaXYgY2xhc3M9bG9hZGluZyZndDsmbHQ7cCZndDtMb2FkaW5nLi4uJmx0Oy9wJmd0OyZsdDsvZGl2Jmd0OwogICAgJmx0O2RpdiBpbmVydCZndDsKICAgICAgJmx0O2Zvcm0mZ3Q7CiAgICAgICAgJmx0O2ZpZWxkc2V0Jmd0OwogICAgICAgICAgJmx0O2xlZ2VuZCZndDtEYXRlIHJhbmdlJmx0Oy9sZWdlbmQmZ3Q7CiAgICAgICAgICAmbHQ7ZGl2Jmd0OwogICAgICAgICAgICAmbHQ7bGFiZWwgZm9yPXN0YXJ0Jmd0O1N0YXJ0Jmx0Oy9sYWJlbCZndDsKICAgICAgICAgICAgJmx0O2lucHV0IHR5cGU9ZGF0ZSBpZD1zdGFydCZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgJmx0O2RpdiZndDsKICAgICAgICAgICAgJmx0O2xhYmVsIGZvcj1lbmQmZ3Q7RW5kJmx0Oy9sYWJlbCZndDsKICAgICAgICAgICAgJmx0O2lucHV0IHR5cGU9ZGF0ZSBpZD1lbmQmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICZsdDtkaXYmZ3Q7CiAgICAgICAgICAgICZsdDtidXR0b24mZ3Q7QXBwbHkmbHQ7L2J1dHRvbiZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICZsdDsvZmllbGRzZXQmZ3Q7CiAgICAgICZsdDsvZm9ybSZndDsKICAgICAgJmx0O3RhYmxlJmd0OwogICAgICAgICZsdDtjYXB0aW9uJmd0O0Zyb20gMjAtLSB0byAyMC0tJmx0Oy9jYXB0aW9uJmd0OwogICAgICAgICZsdDt0aGVhZCZndDsKICAgICAgICAgICZsdDt0ciZndDsKICAgICAgICAgICAgJmx0O3RoJmd0O0NpdHkmbHQ7L3RoJmd0OwogICAgICAgICAgICAmbHQ7dGgmZ3Q7U3RhdGUmbHQ7L3RoJmd0OwogICAgICAgICAgICAmbHQ7dGgmZ3Q7MjAtLSBQb3B1bGF0aW9uJmx0Oy90aCZndDsKICAgICAgICAgICAgJmx0O3RoJmd0OzIwLS0gUG9wdWxhdGlvbiZsdDsvdGgmZ3Q7CiAgICAgICAgICAgICZsdDt0aCZndDtQZXJjZW50YWdlIGNoYW5nZSZsdDsvdGgmZ3Q7CiAgICAgICAgICAmbHQ7L3RyJmd0OwogICAgICAgICZsdDsvdGhlYWQmZ3Q7CiAgICAgICAgJmx0O3Rib2R5Jmd0OwogICAgICAgICAgJmx0OyEtLSAuLi4gLS0mZ3Q7CiAgICAgICAgJmx0Oy90Ym9keSZndDsKICAgICAgJmx0Oy90YWJsZSZndDsKICAgICZsdDsvZGl2Jmd0OwogICZsdDsvZGl2Jmd0OwombHQ7L3NlY3Rpb24mZ3Q7Jmx0O21hcCBpZD13YWxsbWFwJmd0OyZsdDthcmVhIGFsdD0mcXVvdDtFbnRlciBEb29yJnF1b3Q7IGNvb3Jkcz0mcXVvdDsxMCwxMCwxMDAsMjAwJnF1b3Q7IGhyZWY9JnF1b3Q7ZG9vci5odG1sJnF1b3Q7Jmd0OyZsdDsvbWFwJmd0OwouLi4KJmx0O2ltZyBzcmM9JnF1b3Q7aW1hZ2VzL2lubmVyd2FsbC5qcGVnJnF1b3Q7IGFsdD0mcXVvdDtUaGVyZSBpcyBhIHdoaXRlIHdhbGwgaGVyZSwgd2l0aCBhIGRvb3IuJnF1b3Q7IHVzZW1hcD0mcXVvdDsjd2FsbG1hcCZxdW90OyZndDsKLi4uCiZsdDtpbWcgc3JjPSZxdW90O2ltYWdlcy9vdXRlcndhbGwuanBlZyZxdW90OyBhbHQ9JnF1b3Q7VGhlcmUgaXMgYSByZWQgd2FsbCBoZXJlLCB3aXRoIGEgZG9vci4mcXVvdDsgdXNlbWFwPSZxdW90OyN3YWxsbWFwJnF1b3Q7Jmd0OyZsdDtoMSZndDtUaGUgRXhhbXBsZSBHYW1lJmx0Oy9oMSZndDsKICAmbHQ7c2VjdGlvbiBpZD0mcXVvdDtsb2dpbiZxdW90OyZndDsKICAgJmx0O2gyJmd0O0xvZ2luJmx0Oy9oMiZndDsKICAgJmx0O2Zvcm0mZ3Q7CiAgICAuLi4KICAgICZsdDshLS0gY2FsbHMgbG9naW4oKSBvbmNlIHRoZSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNoZWNrZWQgLS0mZ3Q7CiAgICZsdDsvZm9ybSZndDsKICAgJmx0O3NjcmlwdCZndDsKICAgIGZ1bmN0aW9uIGxvZ2luKCkgewogICAgICAvLyBzd2l0Y2ggc2NyZWVucwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW4nKS5oaWRkZW4gPSB0cnVlOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2FtZScpLmhpZGRlbiA9IGZhbHNlOwogICAgfQogICAmbHQ7L3NjcmlwdCZndDsKICAmbHQ7L3NlY3Rpb24mZ3Q7CiAgJmx0O3NlY3Rpb24gaWQ9JnF1b3Q7Z2FtZSZxdW90OyBoaWRkZW4mZ3Q7CiAgIC4uLgogICZsdDsvc2VjdGlvbiZndDsmbHQ7aDEmZ3Q7VGhlIEV4YW1wbGUgR2FtZSZsdDsvaDEmZ3Q7CiAgJmx0O3NlY3Rpb24gaWQ9JnF1b3Q7bG9naW4mcXVvdDsmZ3Q7CiAgICZsdDtoMiZndDtMb2dpbiZsdDsvaDImZ3Q7CiAgICZsdDtmb3JtJmd0OwogICAgLi4uCiAgICAmbHQ7IS0tIGNhbGxzIGxvZ2luKCkgb25jZSB0aGUgdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjaGVja2VkIC0tJmd0OwogICAmbHQ7L2Zvcm0mZ3Q7CiAgICZsdDtzY3JpcHQmZ3Q7CiAgICBmdW5jdGlvbiBsb2dpbigpIHsKICAgICAgLy8gc3dpdGNoIHNjcmVlbnMKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luJykuaGlkZGVuID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbWUnKS5oaWRkZW4gPSBmYWxzZTsKICAgIH0KICAgJmx0Oy9zY3JpcHQmZ3Q7CiAgJmx0Oy9zZWN0aW9uJmd0OwogICZsdDtzZWN0aW9uIGlkPSZxdW90O2dhbWUmcXVvdDsgaGlkZGVuJmd0OwogICAuLi4KICAmbHQ7L3NlY3Rpb24mZ3Q7Jmx0O21hcCBpZD13YWxsbWFwJmd0OyZsdDthcmVhIGFsdD0mcXVvdDtFbnRlciBEb29yJnF1b3Q7IGNvb3Jkcz0mcXVvdDsxMCwxMCwxMDAsMjAwJnF1b3Q7IGhyZWY9JnF1b3Q7ZG9vci5odG1sJnF1b3Q7Jmd0OyZsdDsvbWFwJmd0OwouLi4KJmx0O2ltZyBzcmM9JnF1b3Q7aW1hZ2VzL2lubmVyd2FsbC5qcGVnJnF1b3Q7IGFsdD0mcXVvdDtUaGVyZSBpcyBhIHdoaXRlIHdhbGwgaGVyZSwgd2l0aCBhIGRvb3IuJnF1b3Q7IHVzZW1hcD0mcXVvdDsjd2FsbG1hcCZxdW90OyZndDsKLi4uCiZsdDtpbWcgc3JjPSZxdW90O2ltYWdlcy9vdXRlcndhbGwuanBlZyZxdW90OyBhbHQ9JnF1b3Q7VGhlcmUgaXMgYSByZWQgd2FsbCBoZXJlLCB3aXRoIGEgZG9vci4mcXVvdDsgdXNlbWFwPSZxdW90OyN3YWxsbWFwJnF1b3Q7Jmd0OyZsdDtzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1zMSZndDsKICAmbHQ7aDMgaWQ9czEmZ3Q7UG9wdWxhdGlvbiBieSBDaXR5Jmx0Oy9oMyZndDsKICAmbHQ7ZGl2IGNsYXNzPWNvbnRhaW5lciZndDsKICAgICZsdDtkaXYgY2xhc3M9bG9hZGluZyZndDsmbHQ7cCZndDtMb2FkaW5nLi4uJmx0Oy9wJmd0OyZsdDsvZGl2Jmd0OwogICAgJmx0O2RpdiBpbmVydCZndDsKICAgICAgJmx0O2Zvcm0mZ3Q7CiAgICAgICAgJmx0O2ZpZWxkc2V0Jmd0OwogICAgICAgICAgJmx0O2xlZ2VuZCZndDtEYXRlIHJhbmdlJmx0Oy9sZWdlbmQmZ3Q7CiAgICAgICAgICAmbHQ7ZGl2Jmd0OwogICAgICAgICAgICAmbHQ7bGFiZWwgZm9yPXN0YXJ0Jmd0O1N0YXJ0Jmx0Oy9sYWJlbCZndDsKICAgICAgICAgICAgJmx0O2lucHV0IHR5cGU9ZGF0ZSBpZD1zdGFydCZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgJmx0O2RpdiZndDsKICAgICAgICAgICAgJmx0O2xhYmVsIGZvcj1lbmQmZ3Q7RW5kJmx0Oy9sYWJlbCZndDsKICAgICAgICAgICAgJmx0O2lucHV0IHR5cGU9ZGF0ZSBpZD1lbmQmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICZsdDtkaXYmZ3Q7CiAgICAgICAgICAgICZsdDtidXR0b24mZ3Q7QXBwbHkmbHQ7L2J1dHRvbiZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICZsdDsvZmllbGRzZXQmZ3Q7CiAgICAgICZsdDsvZm9ybSZndDsKICAgICAgJmx0O3RhYmxlJmd0OwogICAgICAgICZsdDtjYXB0aW9uJmd0O0Zyb20gMjAtLSB0byAyMC0tJmx0Oy9jYXB0aW9uJmd0OwogICAgICAgICZsdDt0aGVhZCZndDsKICAgICAgICAgICZsdDt0ciZndDsKICAgICAgICAgICAgJmx0O3RoJmd0O0NpdHkmbHQ7L3RoJmd0OwogICAgICAgICAgICAmbHQ7dGgmZ3Q7U3RhdGUmbHQ7L3RoJmd0OwogICAgICAgICAgICAmbHQ7dGgmZ3Q7MjAtLSBQb3B1bGF0aW9uJmx0Oy90aCZndDsKICAgICAgICAgICAgJmx0O3RoJmd0OzIwLS0gUG9wdWxhdGlvbiZsdDsvdGgmZ3Q7CiAgICAgICAgICAgICZsdDt0aCZndDtQZXJjZW50YWdlIGNoYW5nZSZsdDsvdGgmZ3Q7CiAgICAgICAgICAmbHQ7L3RyJmd0OwogICAgICAgICZsdDsvdGhlYWQmZ3Q7CiAgICAgICAgJmx0O3Rib2R5Jmd0OwogICAgICAgICAgJmx0OyEtLSAuLi4gLS0mZ3Q7CiAgICAgICAgJmx0Oy90Ym9keSZndDsKICAgICAgJmx0Oy90YWJsZSZndDsKICAgICZsdDsvZGl2Jmd0OwogICZsdDsvZGl2Jmd0OwombHQ7L3NlY3Rpb24mZ3Q7Jmx0O2gxJmd0O1RoZSBFeGFtcGxlIEdhbWUmbHQ7L2gxJmd0OwogICZsdDtzZWN0aW9uIGlkPSZxdW90O2xvZ2luJnF1b3Q7Jmd0OwogICAmbHQ7aDImZ3Q7TG9naW4mbHQ7L2gyJmd0OwogICAmbHQ7Zm9ybSZndDsKICAgIC4uLgogICAgJmx0OyEtLSBjYWxscyBsb2dpbigpIG9uY2UgdGhlIHVzZXIncyBjcmVkZW50aWFscyBoYXZlIGJlZW4gY2hlY2tlZCAtLSZndDsKICAgJmx0Oy9mb3JtJmd0OwogICAmbHQ7c2NyaXB0Jmd0OwogICAgZnVuY3Rpb24gbG9naW4oKSB7CiAgICAgIC8vIHN3aXRjaCBzY3JlZW5zCiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbicpLmhpZGRlbiA9IHRydWU7ZnVuY3Rpb24gd2FzSGlkZGVuQmVmb3JlRmlyc3RDb250ZW50ZnVsUGFpbnQoKSB7CiAgICBjb25zdCBmY3BFbnRyeSA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUoJnF1b3Q7Zmlyc3QtY29udGVudGZ1bC1wYWludCZxdW90OylbMF07CiAgICBjb25zdCB2aXNpYmlsaXR5U3RhdGVFbnRyaWVzID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSgmcXVvdDt2aXNpYmlsaXR5LXN0YXRlJnF1b3Q7KTsKICAgIHJldHVybiB2aXNpYmlsaXR5U3RhdGVFbnRyaWVzLnNvbWUoZSA9Jmd0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RhcnRUaW1lICZsdDsgZmNwRW50cnkuc3RhcnRUaW1lICZhbXA7JmFtcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm5hbWUgPT09ICZxdW90O2hpZGRlbiZxdW90Oyk7Cn18SEl0ZW06MiwxMjM2NjA3MTUxOi0yMDI5MTQ5NzUxOjg0Nzk0NDUyNywzNDczMDMwNjgsLTE2MjU0MjA3MDMsNTk3MDE1NzczOi0xOjA6MTMwNzMxOjE5OjEzOjk6MzY5OjM2OTowOjA6NjowOi0xNzE5NjQ2ODEwOnxoW0hlYXZlbiBIYW5kXXxoCmh0dHBzOi8veS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udS5iZS9VdnVtYkttS3VYTT9zaT1QbldSUlBEb2V0QlBpb2tfMz0xMiA2PTE1IDk9MTggMj0xMSAxPTEwIDQ9MTMgNz0xNiA4PTE3IDU9MTQgLy8gZWFjaCBhcHBseWluZyB0byBhIGRpZmZlcmVudCBsZXZlbCBvZiBjb250cm9sIGFuZCBjb25zY2lvdXNuZXNzIG9uIDUgcGxhbmVzIG9mIG1hbmlmZXN0YXRpb24vYWRyZWFsIHN5bXB0ZWFuIGdyYXN0aWVhbCZsdDtzY3JpcHQKdHlwZT0mcXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsKc3JjPSZxdW90Oy8vc3RhdGljLmtsYXZpeW8uY29tL29uc2l0ZS9qcy9rbGF2aXlvLmpzP2NvbXBhbnlfaWQ9WTlKVjZ6JnF1b3Q7CiZndDsmbHQ7L3NjcmlwdCZndDt3aW5kb3cuX2tsT25zaXRlID0gd2luZG93Ll9rbE9uc2l0ZSB8fCBbXTsKd2luZG93Ll9rbE9uc2l0ZS5wdXNoKFsnb3BlbkZvcm0nLCAnVFdxQU1BJ10pO2h0dHBzOi8vaS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uOS5jb21odHRwczovLyAzNjkuY29tMzY5LmNvbWh0dHBzOi8vbS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uay5jb20vbi8/bm90aWZpY2F0aW9ucyUyRiZhbXA7YXJlZj0xNzIxNDM2NTY1NDI0OTgzJmFtcDttZWRpdW09c21zJmFtcDttaWQ9NjFkYTJlNTY2NDg4NUc1YWY0ODIyMDJmNjlHNjFkYTMyZWZjNGI1N0czMmImYW1wO2Jjb2RlPTIuMTcyMTQzNjU2OC5BYnlqZWFkUEplbk90N1c3VzZFJmFtcDtuX209JTJCMTI1MDYxODc2NDkmYW1wO3d0c2lkPXJkcl8xanV4SklLdmZYYnpsN1pOOCNfPV8=
https://y...content-available-to-author-only...u.be/UvumbKmKuXM?si=PnWRRPDoetBPiok_3=12 6=15 9=18 2=11 1=10 4=13 7=16 8=17 5=14 // each applying to a different level of control and consciousness on 5 planes of manifestation/adreal symptean grastiealhttps://m...content-available-to-author-only...e.com/sharelink/w/7OQNM4PPtb2D53kAK0GRQv4o8LgOQeN6SBiUDIWxkFjThttps://m...content-available-to-author-only...e.com/sharelink/w/7OQNM4PPtb2D53kAK0GRQv4o8LgOQeN6SBiUDIWxkFjT[extended_attributes]
interface identifier {
/* interface_members... */
};
An interface is a specification of a set of interface[![.github/workflows/blank.yml](https://g...content-available-to-author-only...b.com/KAI369-coder/Kosmoscope/actions/workflows/blank.yml/badge.svg)](https://g...content-available-to-author-only...b.com/KAI369-coder/Kosmoscope/actions/workflows/blank.yml).gitignore.kosmoscope.gitignore.kosmoscope/Gitignore.ideU+FDD0 to U+FDEF, inclusive, or U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE, U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF, U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, or U+10FFFF.[Exposed=Window]
interface NetworkFetcher {
undefined get(optional boolean? areWeThereYet = false);
};dictionary PaymentRequestUpdateEventInit : EventInit {};dictionary PaymentCurrencyAmount {
required DOMString currency;
required DOMString value;
};https://i...content-available-to-author-only...g.org/#scalar-valueprint("\nModifiedunid = "|HItem:2,1236607151:-2029149751:597015773,-1625420703,347303068,847944527:-1:0:130731:19:13:8:369:369:0:0:6:0:380340037:|h[Heaven Hand]|h" def hashString(s): h = 0 for c in s: h = c_uint32((h * 0x21) + ord(c)).value return h def IDLink(s): parts = s.split(":") # unid link has affixes in reverse order affixes = parts[3].split(',') affixes.reverse() parts[3] = ','.join(affixes) # 0x1 on this flag apparently means ID parts[9] = str(int(parts[9]) | 0x1) hash_input = ':'.join(parts[1:-2]) + ':' link_hash = c_int32(hashString(hash_input)).value parts[-2] = str(link_hash) id = ':'.join(parts) return id print IDLink(unid) # Print the symbolic and sacred values based on the given number associations for number, value in symbolic_sacred_values.items(): print(f"{number} = {value}") It sounds like you're looking to incorporate symbolic and sacred meanings associated with numbers into your code. These meanings can be used for various purposes, such as enhancing a game narrative or implementing some form of spiritual or conscious wisdom. ### Enhanced Code with Symbolic and Sacred Values Here's how you could integrate the mappings of numbers to their symbolic meanings into your existing code: ```python from ctypes import c_uint32, c_int32 # Example UNID string representing an item (presumably from a game) unid = "|HItem:2,1236607151:-2029149751:597015773,-1625420703,347303068,847944527:-1:0:130731:19:13:8:369:369:0:0:6:0:380340037:|h[Heaven Hand]|h" def hashString(s): """ Function to compute the hash of a string based on a specific algorithm. """ h = 0 for c in s: h = c_uint32((h * 0x21) + ord(c)).value return h def IDLink(s): """ Function to process the given UNID string. Modifies the affixes and computes a new link hash. """ parts = s.split(":") # Reverse the affixes in the fourth part affixes = parts[3].split(',') affixes.reverse() parts[3] = ','.join(affixes) # Modify the ID flag by setting its last bit parts[9] = str(int(parts[9]) | 0x1) hash_input = ':'.join(parts[1:-2]) + ':' # Compute a new link hash link_hash = c_int32(hashString(hash_input)).value parts[-2] = str(link_hash) # Reassemble the modified ID id_result = ':'.join(parts) return id_result # Define the mappings of numbers to symbolic and sacred values symbolic_sacred_values = { 3: "Creation, Growth, Divine Trinity", 6: "Harmony, Balance, Soul Union", 9: "Highest Spiritual Attainment, Universal Love", 2: "Union, Duality, Balance", 1: "Unity, Wholeness, New Beginnings", 4: "Foundation, Stability, Earthly Order", 7: "Perfection, Inner Wisdom, Divine Plan", 8: "Infinity, Abundance, Karma Law", 5: "Transformation, Change, Adventure" } # Function to print symbolic and sacred values def print_symbolic_values(): print("\nSymbolic and Sacred Values:") for number, value in symbolic_sacred_values.items(): print(f"{number} = {value}") # Print the symbolic and sacred values print_symbolic_values() # Print the modified UNID UNID:") ```JsExtension.jsgh repo clone KAI369-coder/KAI369-coderprint(IDLink(unid))unid = "|HItem:2,1236607151:-2029149751:597015773,-1625420703,347303068,847944527:-1:0:130731:19:13:8:369:369:0:0:6:0:380340037:|h[Heaven Hand]|h"
def hashString(s):
h = 0
for c in s:
h = c_uint32((h * 0x21) + ord(c)).value
return h
def IDLink(s):
parts = s.split(":")
# unid link has affixes in reverse order
affixes = parts[3].split(',')
affixes.reverse()
parts[3] = ','.join(affixes)
# 0x1 on this flag apparently means ID
parts[9] = str(int(parts[9]) | 0x1)
hash_input = ':'.join(parts[1:-2]) + ':'
link_hash = c_int32(hashString(hash_input)).value
parts[-2] = str(link_hash)
id = ':'.join(parts)
return id
print IDLink(unid)
# Print the symbolic and sacred values based on the given number associations
for number, value in symbolic_sacred_values.items():
print(f"{number} = {value}") It sounds like you're looking to incorporate symbolic and sacred meanings associated with numbers into your code. These meanings can be used for various purposes, such as enhancing a game narrative or implementing some form of spiritual or conscious wisdom.
### Enhanced Code with Symbolic and Sacred Values
Here's how you could integrate the mappings of numbers to their symbolic meanings into your existing code:
```python
from ctypes import c_uint32, c_int32
# Example UNID string representing an item (presumably from a game)
unid = "|HItem:2,1236607151:-2029149751:597015773,-1625420703,347303068,847944527:-1:0:130731:19:13:8:369:369:0:0:6:0:380340037:|h[Heaven Hand]|h"
def hashString(s):
""" Function to compute the hash of a string based on a specific algorithm. """
h = 0
for c in s:
h = c_uint32((h * 0x21) + ord(c)).value
return h
def IDLink(s):
"""
Function to process the given UNID string.
Modifies the affixes and computes a new link hash.
"""
parts = s.split(":")
# Reverse the affixes in the fourth part
affixes = parts[3].split(',')
affixes.reverse()
parts[3] = ','.join(affixes)
# Modify the ID flag by setting its last bit
parts[9] = str(int(parts[9]) | 0x1)
hash_input = ':'.join(parts[1:-2]) + ':'
# Compute a new link hash
link_hash = c_int32(hashString(hash_input)).value
parts[-2] = str(link_hash)
# Reassemble the modified ID
id_result = ':'.join(parts)
return id_result
# Define the mappings of numbers to symbolic and sacred values
symbolic_sacred_values = {
3: "Creation, Growth, Divine Trinity",
6: "Harmony, Balance, Soul Union",
9: "Highest Spiritual Attainment, Universal Love",
2: "Union, Duality, Balance",
1: "Unity, Wholeness, New Beginnings",
4: "Foundation, Stability, Earthly Order",
7: "Perfection, Inner Wisdom, Divine Plan",
8: "Infinity, Abundance, Karma Law",
5: "Transformation, Change, Adventure"
}
# Function to print symbolic and sacred values
def print_symbolic_values():
print("\nSymbolic and Sacred Values:")
for number, value in symbolic_sacred_values.items():
print(f"{number} = {value}")
# Print the symbolic and sacred values
print_symbolic_values()
# Print the modified UNID
print("\nModified UNID:")
print(IDLink(unid))
```{
"key": "ctrl+a",
"command": "editor.action.selectAll"
}https://y...content-available-to-author-only...u.be/UvumbKmKuXM?si=PnWRRPDoetBPiok_3=12 6=15 9=18 2=11 1=10 4=13 7=16 8=17 5=14 // each applying to a different level of control and consciousness on 5 planes of manifestation/adreal symptean grastieal{
"Define extension": {
"scope": "javascript",
"description": "Adds the boilerplate code of a GDevelop extension definition.",
"prefix": "gdext",
"body": [
"// @flow",
"/**",
" * This is a declaration of an extension for GDevelop 5.",
" *",
" * ℹ️ Changes in this file are watched and automatically imported if the editor",
" * is running. You can also manually run `node import-GDJS-Runtime.js` (in newIDE/app/scripts).",
" *",
" * The file must be named \"JsExtension.js\", otherwise GDevelop won't load it.",
" * ⚠️ If you make a change and the extension is not loaded, open the developer console",
" * and search for any errors.",
" *",
" * More information on https://g...content-available-to-author-only...b.com/4ian/GDevelop/blob/master/newIDE/README-extensions.md",
" */",
"",
"/*::",
"// Import types to allow Flow to do static type checking on this file.",
"// Extensions declaration are typed using Flow (like the editor), but the files",
"// for the game engine are checked with TypeScript annotations.",
"import { type ObjectsRenderingService, type ObjectsEditorService } from '../JsExtensionTypes.flow.js'",
"*/",
"",
"module.exports = {",
"\tcreateExtension: function (",
"\t\t/*: (string) => string */,",
"\t\tgd /*: libGDevelop */",
"\t) {",
"\t\tconst extension = new gd.PlatformExtension();",
"\t\textension",
"\t\t\t.setExtensionInformation(",
"\t\t\t\t'${1:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}}',",
"\t\t\t\t_('${2:Extension Name}'),",
"\t\t\t\t_(",
"\t\t\t\t\t'${3:Extension description}'",
"\t\t\t\t),",
"\t\t\t\t'${4:Extension author}',",
"\t\t\t\t'MIT'",
"\t\t\t);",
"",
"\t\t$0",
"",
"\t\treturn extension;",
"\t},",
"\trunExtensionSanityTests: function (",
"\t\tgd /*: libGDevelop */,",
"\t\textension /*: gdPlatformExtension*/",
"\t) {",
"\t\treturn [];",
"\t},",
"};",
""
]
},
"Define instruction": {
"scope": "javascript",
"description": "Define an instruction in a GDevelop extension definition.",
"prefix": "gdinstr",
"body": [
"extension",
"\t.add${1|Condition,Action|}(",
"\t\t'${2:InstructionInternalName}',",
"\t\t_('${3:Instruction full name}'),",
"\t\t_(",
"\t\t\t'${4:Instruction description}'",
"\t\t),",
"\t\t_('${5:Event sheet sentence}'),",
"\t\t_('${6:Events group}'),",
"\t\t'JsPlatform/Extensions/${8:icon}.png',",
"\t\t'JsPlatform/Extensions/${8:icon}.png'",
"\t)",
"\t.getCodeExtraInformation()",
"\t.setIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${9:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}tools}.js')",
"\t.setFunctionName('gdjs.evtTools.${7:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}.}');",
"",
"$0"
]
},
"Define expression": {
"scope": "javascript",
"description": "Define an expression in a GDevelop extension definition.",
"prefix": "gdexp",
"body": [
"extension",
"\t.add${1|Expression,StrExpression|}(",
"\t\t'${2:ExpressionsInternalName}',",
"\t\t_('${3:Expression full name}'),",
"\t\t_(",
"\t\t\t'${4:Expression description}'",
"\t\t),",
"\t\t_('${5:Events group}'),",
"\t\t'JsPlatform/Extensions/${7:icon}.png'",
"\t)",
"\t.getCodeExtraInformation()",
"\t.setIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${8:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}tools}.js')",
"\t.setFunctionName('gdjs.evtTools.${6:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}.}');",
"",
"$0"
]
},
"Add parameter": {
"scope": "javascript",
"description": "Define a parameter in a GDevelop extension definition.",
"prefix": "gdparam",
"body": [
".addParameter('${1|string,expression,object,behavior,yesorno,stringWithSelector,scenevar,globalvar,objectvar,objectList,objectListWithoutPicking,color,key,sceneName,file,layer,relationalOperator,operator,trueorfalse,musicfile,soundfile,police,mouse,passwordjoyaxis,camera,objectPtr,forceMultiplier|}', '${2:Parameter description}', '${3:Optional parameter data}', /*parameterIsOptional=*/${4|false,true|})"
]
},
"Add code only parameter": {
"scope": "javascript",
"description": "Define a parameter in a GDevelop extension definition.",
"prefix": "gdcoparam",
"body": [
".addCodeOnlyParameter('${1|inlineCode,currentScene,objectsContext,eventsFunctionContext,conditionInverted|}', '${2:Inline code (for inlineCode parameter)}')"
]
},
"Add include": {
"scope": "javascript",
"description": "Define an include file in a GDevelop extension definition.",
"prefix": "gdincl",
"body": [
".addIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${1:include}.js')"
]
}
}unid = "|HItem:2,1236607151:-2029149751:597015773,-1625420703,347303068,847944527:-1:0:130731:19:13:8:369:369:0:0:6:0:380340037:|h[Heaven Hand]|h"
def hashString(s):
h = 0
for c in s:
h = c_uint32((h * 0x21) + ord(c)).value
return h
def IDLink(s):
parts = s.split(":")
# unid link has affixes in reverse order
affixes = parts[3].split(',')
affixes.reverse()
parts[3] = ','.join(affixes)
# 0x1 on this flag apparently means ID
parts[9] = str(int(parts[9]) | 0x1)
hash_input = ':'.join(parts[1:-2]) + ':'
link_hash = c_int32(hashString(hash_input)).value
parts[-2] = str(link_hash)
id = ':'.join(parts)
return id
print IDLink(unid)
# Print the symbolic and sacred values based on the given number associations
for number, value in symbolic_sacred_values.items():
print(f"{number} = {value}") It sounds like you're looking to incorporate symbolic and sacred meanings associated with numbers into your code. These meanings can be used for various purposes, such as enhancing a game narrative or implementing some form of spiritual or conscious wisdom.
### Enhanced Code with Symbolic and Sacred Values
Here's how you could integrate the mappings of numbers to their symbolic meanings into your existing code:
```python
from ctypes import c_uint32, c_int32
# Example UNID string representing an item (presumably from a game)
unid = "|HItem:2,1236607151:-2029149751:597015773,-1625420703,347303068,847944527:-1:0:130731:19:13:8:369:369:0:0:6:0:380340037:|h[Heaven Hand]|h"
def hashString(s):
""" Function to compute the hash of a string based on a specific algorithm. """
h = 0
for c in s:
h = c_uint32((h * 0x21) + ord(c)).value
return h
def IDLink(s):
"""
Function to process the given UNID string.
Modifies the affixes and computes a new link hash.
"""
parts = s.split(":")
# Reverse the affixes in the fourth part
affixes = parts[3].split(',')
affixes.reverse()
parts[3] = ','.join(affixes)
# Modify the ID flag by setting its last bit
parts[9] = str(int(parts[9]) | 0x1)
hash_input = ':'.join(parts[1:-2]) + ':'
# Compute a new link hash
link_hash = c_int32(hashString(hash_input)).value
parts[-2] = str(link_hash)
# Reassemble the modified ID
id_result = ':'.join(parts)
return id_result
# Define the mappings of numbers to symbolic and sacred values
symbolic_sacred_values = {
3: "Creation, Growth, Divine Trinity",
6: "Harmony, Balance, Soul Union",
9: "Highest Spiritual Attainment, Universal Love",
2: "Union, Duality, Balance",
1: "Unity, Wholeness, New Beginnings",
4: "Foundation, Stability, Earthly Order",
7: "Perfection, Inner Wisdom, Divine Plan",
8: "Infinity, Abundance, Karma Law",
5: "Transformation, Change, Adventure"
}
# Function to print symbolic and sacred values
def print_symbolic_values():
print("\nSymbolic and Sacred Values:")
for number, value in symbolic_sacred_values.items():
print(f"{number} = {value}")
# Print the symbolic and sacred values
print_symbolic_values()
# Print the modified UNID
print("\nModified UNID:")
print(IDLink(unid))
```{
"key": "ctrl+a",
"command": "editor.action.selectAll"
}https://y...content-available-to-author-only...u.be/UvumbKmKuXM?si=PnWRRPDoetBPiok_3=12 6=15 9=18 2=11 1=10 4=13 7=16 8=17 5=14 // each applying to a different level of control and consciousness on 5 planes of manifestation/adreal symptean grastieal{
"Define extension": {
"scope": "javascript",
"description": "Adds the boilerplate code of a GDevelop extension definition.",
"prefix": "gdext",
"body": [
"// @flow",
"/**",
" * This is a declaration of an extension for GDevelop 5.",
" *",
" * ℹ️ Changes in this file are watched and automatically imported if the editor",
" * is running. You can also manually run `node import-GDJS-Runtime.js` (in newIDE/app/scripts).",
" *",
" * The file must be named \"JsExtension.js\", otherwise GDevelop won't load it.",
" * ⚠️ If you make a change and the extension is not loaded, open the developer console",
" * and search for any errors.",
" *",
" * More information on https://g...content-available-to-author-only...b.com/4ian/GDevelop/blob/master/newIDE/README-extensions.md",
" */",
"",
"/*::",
"// Import types to allow Flow to do static type checking on this file.",
"// Extensions declaration are typed using Flow (like the editor), but the files",
"// for the game engine are checked with TypeScript annotations.",
"import { type ObjectsRenderingService, type ObjectsEditorService } from '../JsExtensionTypes.flow.js'",
"*/",
"",
"module.exports = {",
"\tcreateExtension: function (",
"\t\t/*: (string) => string */,",
"\t\tgd /*: libGDevelop */",
"\t) {",
"\t\tconst extension = new gd.PlatformExtension();",
"\t\textension",
"\t\t\t.setExtensionInformation(",
"\t\t\t\t'${1:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}}',",
"\t\t\t\t_('${2:Extension Name}'),",
"\t\t\t\t_(",
"\t\t\t\t\t'${3:Extension description}'",
"\t\t\t\t),",
"\t\t\t\t'${4:Extension author}',",
"\t\t\t\t'MIT'",
"\t\t\t);",
"",
"\t\t$0",
"",
"\t\treturn extension;",
"\t},",
"\trunExtensionSanityTests: function (",
"\t\tgd /*: libGDevelop */,",
"\t\textension /*: gdPlatformExtension*/",
"\t) {",
"\t\treturn [];",
"\t},",
"};",
""
]
},
"Define instruction": {
"scope": "javascript",
"description": "Define an instruction in a GDevelop extension definition.",
"prefix": "gdinstr",
"body": [
"extension",
"\t.add${1|Condition,Action|}(",
"\t\t'${2:InstructionInternalName}',",
"\t\t_('${3:Instruction full name}'),",
"\t\t_(",
"\t\t\t'${4:Instruction description}'",
"\t\t),",
"\t\t_('${5:Event sheet sentence}'),",
"\t\t_('${6:Events group}'),",
"\t\t'JsPlatform/Extensions/${8:icon}.png',",
"\t\t'JsPlatform/Extensions/${8:icon}.png'",
"\t)",
"\t.getCodeExtraInformation()",
"\t.setIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${9:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}tools}.js')",
"\t.setFunctionName('gdjs.evtTools.${7:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}.}');",
"",
"$0"
]
},
"Define expression": {
"scope": "javascript",
"description": "Define an expression in a GDevelop extension definition.",
"prefix": "gdexp",
"body": [
"extension",
"\t.add${1|Expression,StrExpression|}(",
"\t\t'${2:ExpressionsInternalName}',",
"\t\t_('${3:Expression full name}'),",
"\t\t_(",
"\t\t\t'${4:Expression description}'",
"\t\t),",
"\t\t_('${5:Events group}'),",
"\t\t'JsPlatform/Extensions/${7:icon}.png'",
"\t)",
"\t.getCodeExtraInformation()",
"\t.setIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${8:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}tools}.js')",
"\t.setFunctionName('gdjs.evtTools.${6:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}.}');",
"",
"$0"
]
},
"Add parameter": {
"scope": "javascript",
"description": "Define a parameter in a GDevelop extension definition.",
"prefix": "gdparam",
"body": [
".addParameter('${1|string,expression,object,behavior,yesorno,stringWithSelector,scenevar,globalvar,objectvar,objectList,objectListWithoutPicking,color,key,sceneName,file,layer,relationalOperator,operator,trueorfalse,musicfile,soundfile,police,mouse,passwordjoyaxis,camera,objectPtr,forceMultiplier|}', '${2:Parameter description}', '${3:Optional parameter data}', /*parameterIsOptional=*/${4|false,true|})"
]
},
"Add code only parameter": {
"scope": "javascript",
"description": "Define a parameter in a GDevelop extension definition.",
"prefix": "gdcoparam",
"body": [
".addCodeOnlyParameter('${1|inlineCode,currentScene,objectsContext,eventsFunctionContext,conditionInverted|}', '${2:Inline code (for inlineCode parameter)}')"
]
},
"Add include": {
"scope": "javascript",
"description": "Define an include file in a GDevelop extension definition.",
"prefix": "gdincl",
"body": [
".addIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${1:include}.js')"
]
}
}WELCOME30https://g...content-available-to-author-only...b.com/4ian/GDevelop.git{
"Define extension": {
"scope": "javascript",
"description": "Adds the boilerplate code of a GDevelop extension definition.",
"prefix": "gdext",
"body": [
"// @flow",
"/**",
" * This is a declaration of an extension for GDevelop 5.",
" *",
" * ℹ️ Changes in this file are watched and automatically imported if the editor",
" * is running. You can also manually run `node import-GDJS-Runtime.js` (in newIDE/app/scripts).",
" *",
" * The file must be named \"JsExtension.js\", otherwise GDevelop won't load it.",
" * ⚠️ If you make a change and the extension is not loaded, open the developer console",
" * and search for any errors.",
" *",
" * More information on https://g...content-available-to-author-only...b.com/4ian/GDevelop/blob/master/newIDE/README-extensions.md",
" */",
"",
"/*::",
"// Import types to allow Flow to do static type checking on this file.",
"// Extensions declaration are typed using Flow (like the editor), but the files",
"// for the game engine are checked with TypeScript annotations.",
"import { type ObjectsRenderingService, type ObjectsEditorService } from '../JsExtensionTypes.flow.js'",
"*/",
"",
"module.exports = {",
"\tcreateExtension: function (",
"\t\t/*: (string) => string */,",
"\t\tgd /*: libGDevelop */",
"\t) {",
"\t\tconst extension = new gd.PlatformExtension();",
"\t\textension",
"\t\t\t.setExtensionInformation(",
"\t\t\t\t'${1:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}}',",
"\t\t\t\t_('${2:Extension Name}'),",
"\t\t\t\t_(",
"\t\t\t\t\t'${3:Extension description}'",
"\t\t\t\t),",
"\t\t\t\t'${4:Extension author}',",
"\t\t\t\t'MIT'",
"\t\t\t);",
"",
"\t\t$0",
"",
"\t\treturn extension;",
"\t},",
"\trunExtensionSanityTests: function (",
"\t\tgd /*: libGDevelop */,",
"\t\textension /*: gdPlatformExtension*/",
"\t) {",
"\t\treturn [];",
"\t},",
"};",
""
]
},
"Define instruction": {
"scope": "javascript",
"description": "Define an instruction in a GDevelop extension definition.",
"prefix": "gdinstr",
"body": [
"extension",
"\t.add${1|Condition,Action|}(",
"\t\t'${2:InstructionInternalName}',",
"\t\t_('${3:Instruction full name}'),",
"\t\t_(",
"\t\t\t'${4:Instruction description}'",
"\t\t),",
"\t\t_('${5:Event sheet sentence}'),",
"\t\t_('${6:Events group}'),",
"\t\t'JsPlatform/Extensions/${8:icon}.png',",
"\t\t'JsPlatform/Extensions/${8:icon}.png'",
"\t)",
"\t.getCodeExtraInformation()",
"\t.setIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${9:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}tools}.js')",
"\t.setFunctionName('gdjs.evtTools.${7:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}.}');",
"",
"$0"
]
},
"Define expression": {
"scope": "javascript",
"description": "Define an expression in a GDevelop extension definition.",
"prefix": "gdexp",
"body": [
"extension",
"\t.add${1|Expression,StrExpression|}(",
"\t\t'${2:ExpressionsInternalName}',",
"\t\t_('${3:Expression full name}'),",
"\t\t_(",
"\t\t\t'${4:Expression description}'",
"\t\t),",
"\t\t_('${5:Events group}'),",
"\t\t'JsPlatform/Extensions/${7:icon}.png'",
"\t)",
"\t.getCodeExtraInformation()",
"\t.setIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${8:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}tools}.js')",
"\t.setFunctionName('gdjs.evtTools.${6:${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/${2:/downcase}/}.}');",
"",
"$0"
]
},
"Add parameter": {
"scope": "javascript",
"description": "Define a parameter in a GDevelop extension definition.",
"prefix": "gdparam",
"body": [
".addParameter('${1|string,expression,object,behavior,yesorno,stringWithSelector,scenevar,globalvar,objectvar,objectList,objectListWithoutPicking,color,key,sceneName,file,layer,relationalOperator,operator,trueorfalse,musicfile,soundfile,police,mouse,passwordjoyaxis,camera,objectPtr,forceMultiplier|}', '${2:Parameter description}', '${3:Optional parameter data}', /*parameterIsOptional=*/${4|false,true|})"
]
},
"Add code only parameter": {
"scope": "javascript",
"description": "Define a parameter in a GDevelop extension definition.",
"prefix": "gdcoparam",
"body": [
".addCodeOnlyParameter('${1|inlineCode,currentScene,objectsContext,eventsFunctionContext,conditionInverted|}', '${2:Inline code (for inlineCode parameter)}')"
]
},
"Add include": {
"scope": "javascript",
"description": "Define an include file in a GDevelop extension definition.",
"prefix": "gdincl",
"body": [
".addIncludeFile('Extensions/${TM_DIRECTORY/(.*)[\\\\\\/](.*)[\\\\\\/]?$/$2/}/${1:include}.js')"
]
}
}<section aria-labelledby=s1>
<h3 id=s1>Population by City</h3>
<div class=container>
<div class=loading><p>Loading...</p></div>
<div inert>
<form>
<fieldset>
<legend>Date range</legend>
<div>
<label for=start>Start</label>
<input type=date id=start>
</div>
<div>
<label for=end>End</label>
<input type=date id=end>
</div>
<div>
<button>Apply</button>
</div>
</fieldset>
</form>
<table>
<caption>From 20-- to 20--</caption>
<thead>
<tr>
<th>City</th>
<th>State</th>
<th>20-- Population</th>
<th>20-- Population</th>
<th>Percentage change</th>
</tr>
</thead>
<tbody>
<!-- ... -->
</tbody>
</table>
</div>
</div>
</section><map id=wallmap><area alt="Enter Door" coords="10,10,100,200" href="door.html"></map>
...
<img src="images/innerwall.jpeg" alt="There is a white wall here, with a door." usemap="#wallmap">
...
<img src="images/outerwall.jpeg" alt="There is a red wall here, with a door." usemap="#wallmap"><h1>The Example Game</h1>
<section id="login">
<h2>Login</h2>
<form>
...
<!-- calls login() once the user's credentials have been checked -->
</form>
<script>
function login() {
// switch screens
document.getElementById('login').hidden = true;
document.getElementById('game').hidden = false;
}
</script>
</section>
<section id="game" hidden>
...
</section><h1>The Example Game</h1>
<section id="login">
<h2>Login</h2>
<form>
...
<!-- calls login() once the user's credentials have been checked -->
</form>
<script>
function login() {
// switch screens
document.getElementById('login').hidden = true;
document.getElementById('game').hidden = false;
}
</script>
</section>
<section id="game" hidden>
...
</section><map id=wallmap><area alt="Enter Door" coords="10,10,100,200" href="door.html"></map>
...
<img src="images/innerwall.jpeg" alt="There is a white wall here, with a door." usemap="#wallmap">
...
<img src="images/outerwall.jpeg" alt="There is a red wall here, with a door." usemap="#wallmap"><section aria-labelledby=s1>
<h3 id=s1>Population by City</h3>
<div class=container>
<div class=loading><p>Loading...</p></div>
<div inert>
<form>
<fieldset>
<legend>Date range</legend>
<div>
<label for=start>Start</label>
<input type=date id=start>
</div>
<div>
<label for=end>End</label>
<input type=date id=end>
</div>
<div>
<button>Apply</button>
</div>
</fieldset>
</form>
<table>
<caption>From 20-- to 20--</caption>
<thead>
<tr>
<th>City</th>
<th>State</th>
<th>20-- Population</th>
<th>20-- Population</th>
<th>Percentage change</th>
</tr>
</thead>
<tbody>
<!-- ... -->
</tbody>
</table>
</div>
</div>
</section><h1>The Example Game</h1>
<section id="login">
<h2>Login</h2>
<form>
...
<!-- calls login() once the user's credentials have been checked -->
</form>
<script>
function login() {
// switch screens
document.getElementById('login').hidden = true;function wasHiddenBeforeFirstContentfulPaint() {
const fcpEntry = performance.getEntriesByName("first-contentful-paint")[0];
const visibilityStateEntries = performance.getEntriesByType("visibility-state");
return visibilityStateEntries.some(e =>
e.startTime < fcpEntry.startTime &&
e.name === "hidden");
}|HItem:2,1236607151:-2029149751:847944527,347303068,-1625420703,597015773:-1:0:130731:19:13:9:369:369:0:0:6:0:-1719646810:|h[Heaven Hand]|h
https://y...content-available-to-author-only...u.be/UvumbKmKuXM?si=PnWRRPDoetBPiok_3=12 6=15 9=18 2=11 1=10 4=13 7=16 8=17 5=14 // each applying to a different level of control and consciousness on 5 planes of manifestation/adreal symptean grastieal<script
type="text/javascript"
src="//static.klaviyo.com/onsite/js/klaviyo.js?company_id=Y9JV6z"
></script>window._klOnsite = window._klOnsite || [];
window._klOnsite.push(['openForm', 'TWqAMA']);https://i...content-available-to-author-only...9.comhttps:// 369.com369.comhttps://m...content-available-to-author-only...k.com/n/?notifications%2F&aref=1721436565424983&medium=sms&mid=61da2e5664885G5af482202f69G61da32efc4b57G32b&bcode=2.1721436568.AbyjeadPJenOt7W7W6E&n_m=%2B12506187649&wtsid=rdr_1juxJIKvfXbzl7ZN8#_=_