Q29udGVudC1sYW5ndWFnZTogY3MKQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMgpCb2R5Oi0tLS0tLS0tLS1jcy0tCjwhLS0jc2V0IHZhcj0iQ09OVEVOVF9MQU5HVUFHRSIgdmFsdWU9ImNzIgotLT48IS0tI3NldCB2YXI9IkNIQVJBQ1RFUl9FTkNPRElORyIgdmFsdWU9IklTTy04ODU5LTIiCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSJOZWx6ZSB6cHJhY292YXQgcG++YWRhdmVrISIKLS0+PCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvdG9wLmh0bWwiIC0tPgoKICAgIFNlcnZlciBuZXBvZHBvcnVqZSBha2NpIHBvvmFkb3Zhbm91IHByb2hs7b5l6GVtLgogICAKPCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvYm90dG9tLmh0bWwiIC0tPgotLS0tLS0tLS0tY3MtLQoKQ29udGVudC1sYW5ndWFnZTogZGUKQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQpCb2R5Oi0tLS0tLS0tLS1kZS0tCjwhLS0jc2V0IHZhcj0iQ09OVEVOVF9MQU5HVUFHRSIgdmFsdWU9ImRlIgotLT48IS0tI3NldCB2YXI9IlRJVExFIiB2YWx1ZT0iQW5mcmFnZSBuaWNodCBhdXNmJnV1bWw7aHJiYXIhIgotLT48IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS90b3AuaHRtbCIgLS0+CgogICAgRGllIHZvbSBCcm93c2VyIGFuZ2Vmb3JkZXJ0ZSBBa3Rpb24gd2lyZCB2b20gU2VydmVyCiAgICBuaWNodCB1bnRlcnN0JnV1bWw7dHp0LgoKPCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvYm90dG9tLmh0bWwiIC0tPgotLS0tLS0tLS0tZGUtLQoKQ29udGVudC1sYW5ndWFnZTogZW4KQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQpCb2R5Oi0tLS0tLS0tLS1lbi0tCjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSJDYW5ub3QgcHJvY2VzcyByZXF1ZXN0ISIKLS0+PCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvdG9wLmh0bWwiIC0tPgoKICAgIFRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYWN0aW9uIHJlcXVlc3RlZCBieSB0aGUgYnJvd3Nlci4KICAgCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLWVuLS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IGVzCkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEKQm9keTotLS0tLS0tLS0tZXMtLQo8IS0tI3NldCB2YXI9IkNPTlRFTlRfTEFOR1VBR0UiIHZhbHVlPSJlcyIKLS0+PCEtLSNzZXQgdmFyPSJUSVRMRSIgdmFsdWU9IiZpZXhjbDtTb2xpY2l0dWQgbm8gcHJvY2VzYWRhISIKLS0+PCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvdG9wLmh0bWwiIC0tPgoKCUVsIG5hdmVnYWRvciBlc3QmYWFjdXRlOyBzb2xpY2l0YW5kbyB1bmEgYWNjaSZvYWN1dGU7biAKCXF1ZSBubyBwdWVkZSBzZXIgcHJvY2VzYWRhLgogICAgCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLWVzLS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IGZyCkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEKQm9keTotLS0tLS0tLS0tZnItLQo8IS0tI3NldCB2YXI9IkNPTlRFTlRfTEFOR1VBR0UiIHZhbHVlPSJmciIKLS0+PCEtLSNzZXQgdmFyPSJUSVRMRSIgdmFsdWU9IkxhIHJlcXUmZWNpcmM7dGUgbmUgcGV1dCAmZWNpcmM7dHJlIGVmZmVjdHUmZWFjdXRlO2UhIgotLT48IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS90b3AuaHRtbCIgLS0+CgogICAgTGUgc2VydmV1ciBuJ2VzdCBwYXMgZW4gbWVzdXJlIGQnZWZmZWN0dWVyIGwnYWN0aW9uCiAgICByZXF1aXNlIHBhciBsZSBuYXZpZ2F0ZXVyLiAKCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLWZyLS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IGdhCkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEKQm9keTotLS0tLS0tLS0tZ2EtLQo8IS0tI3NldCB2YXI9IlRJVExFIiB2YWx1ZT0iSWFycmF0YWlzIGRvcGhyJm9hY3V0ZTtpc2UmYWFjdXRlO2lsdGUhIgotLT48IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS90b3AuaHRtbCIgLS0+CgogICAgTiZpYWN1dGU7bCB0YWNhJmlhY3V0ZTtvY2h0IGFnIGFuIGZocmVhc3RhbGEmaWFjdXRlOyBkb24gZ24maWFjdXRlO29taAogICAgYXQmYWFjdXRlOyAmYWFjdXRlOyBpYXJyYWlkaCBhZyBhbiBtYnJhYmhzJmFhY3V0ZTtsYSZpYWN1dGU7LgoKPCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvYm90dG9tLmh0bWwiIC0tPgotLS0tLS0tLS0tZ2EtLQoKQ29udGVudC1sYW5ndWFnZTogaXQKQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQpCb2R5Oi0tLS0tLS0tLS1pdC0tCjwhLS0jc2V0IHZhcj0iQ09OVEVOVF9MQU5HVUFHRSIgdmFsdWU9Iml0IgotLT48IS0tI3NldCB2YXI9IlRJVExFIiB2YWx1ZT0iTGEgcmljaGllc3RhIG5vbiBwdSZvZ3JhdmU7IGVzc2VyZSBzb2RkaXNmYXR0YSEiCi0tPjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL3RvcC5odG1sIiAtLT4KCiAgICBJbCBzZXJ2ZXIgbm9uIHN1cHBvcnRhIGlsIHRpcG8gZGkgYXppb25lIHJpY2hpZXN0YSBkYWwgYnJvd3Nlci4KCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLWl0LS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IGphCkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy0yMDIyLUpQCkJvZHk6LS0tLS0tLS0tLWphLS0KPCEtLSNzZXQgdmFyPSJDT05URU5UX0xBTkdVQUdFIiB2YWx1ZT0iamEiCi0tPjwhLS0jc2V0IHZhcj0iQ0hBUkFDVEVSX0VOQ09ESU5HIiB2YWx1ZT0iaXNvLTIwMjItanAiCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSJDYW5ub3QgcHJvY2VzcyByZXF1ZXN0ISIKLS0+PCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvdG9wLmh0bWwiIC0tPgoKICAgIBskQiVWJWklJiU2JE5NVzVhJDckPyUiJS8lNyVnJXMkTyEiJTUlXSE8JUgkNyRGJCQkXiQ7JHMhIxsoQgogICAKPCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvYm90dG9tLmh0bWwiIC0tPgotLS0tLS0tLS0tamEtLQoKQ29udGVudC1sYW5ndWFnZToga28KQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9RVVDLUtSCkJvZHk6LS0tLS0tLS0tLWtvLS0KPCEtLSNzZXQgdmFyPSJDT05URU5UX0xBTkdVQUdFIiB2YWx1ZT0ia28iCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSK/5MO7IMOzuK4gvcfG0CEiCi0tPjwhLS0jc2V0IHZhcj0iQ0hBUkFDVEVSX0VOQ09ESU5HIiB2YWx1ZT0iRVVDLUtSIgotLT48IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS90b3AuaHRtbCIgLS0+CgogICAguuq287/swPqwoSC6uLO9IL/kw7vAuyDAzCC8rbn2sKEgwfa/+MfPwfYgvsq9wLTPtNkuCgo8IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS9ib3R0b20uaHRtbCIgLS0+Ci0tLS0tLS0tLS1rby0tCgpDb250ZW50LWxhbmd1YWdlOiBubApDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xCkJvZHk6LS0tLS0tLS0tLW5sLS0KPCEtLSNzZXQgdmFyPSJDT05URU5UX0xBTkdVQUdFIiB2YWx1ZT0ibmwiCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSJLYW4gdnJhYWcgbmlldCB2ZXJ3ZXJrZW4hIgotLT48IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS90b3AuaHRtbCIgLS0+CgogICBEZSBzZXJ2ZXIgb25kZXJzdGV1bnQgZGUgYWN0aWUsIGdldnJhYWdkIGRvb3IgZGUgYnJvd3NlciwgbmlldC4KCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLW5sLS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IHBsCkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTIKQm9keTotLS0tLS0tLS0tcGwtLQo8IS0tI3NldCB2YXI9IkNPTlRFTlRfTEFOR1VBR0UiIHZhbHVlPSJwbCIKLS0+PCEtLSNzZXQgdmFyPSJUSVRMRSIgdmFsdWU9Iq+xZGFuaWUgbmllb2Jzs3VnaXdhbmUhIgotLT48IS0tI3NldCB2YXI9IkNIQVJBQ1RFUl9FTkNPRElORyIgdmFsdWU9IklTTy04ODU5LTIiCi0tPjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL3RvcC5odG1sIiAtLT4KCiAgICBUZW4gc2Vyd2VyIG5pZSBvYnOzdWd1amUgv7FkYW5pYSBwcnplc7NhbmVnbyBwcnpleiBwcnplZ2yxZGFya+ouCgo8IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS9ib3R0b20uaHRtbCIgLS0+Ci0tLS0tLS0tLS1wbC0tCgpDb250ZW50LWxhbmd1YWdlOiBwdC1icgpDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xCkJvZHk6LS0tLS0tLXB0LWJyLS0KPCEtLSNzZXQgdmFyPSJDT05URU5UX0xBTkdVQUdFIiB2YWx1ZT0icHQtYnIiCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSJBIHJlcXVpc2kmY2NlZGlsOyZhdGlsZGU7byBuJmF0aWxkZTtvIHBvZGUgc2VyIHByb2Nlc3NhZGEhIgotLT48IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS90b3AuaHRtbCIgLS0+CgogICBPIHNlcnZpZG9yIG4mYXRpbGRlO28gc3Vwb3J0YSBhIGEmY2NlZGlsOyZhdGlsZGU7byByZXF1aXNpdGFkYSBwZWxvCiAgIHNldSAiYnJvd3NlciIuCgo8IS0tI2luY2x1ZGUgdmlydHVhbD0iaW5jbHVkZS9ib3R0b20uaHRtbCIgLS0+Ci0tLS0tLS1wdC1ici0tCgpDb250ZW50LWxhbmd1YWdlOiBybwpDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xCkJvZHk6LS0tLS0tLS0tLXJvLS0KPCEtLSNzZXQgdmFyPSJDT05URU5UX0xBTkdVQUdFIiB2YWx1ZT0icm8iCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSJDZXJlcmVhIG51IHBvYXRlIGZpIHByb2Nlc2F0YSEiCi0tPjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL3RvcC5odG1sIiAtLT4KCiAgICBTZXJ2ZXJ1bCBudSBzdXBvcnRhIGFjdGl1bmVhIGNlcnV0YSBkZSBicm93c2VyLgoKPCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvYm90dG9tLmh0bWwiIC0tPgotLS0tLS0tLS0tcm8tLQoKQ29udGVudC1sYW5ndWFnZTogc3IKQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNQpCb2R5Oi0tLS0tLS0tLS1zci0tCjwhLS0jc2V0IHZhcj0iQ09OVEVOVF9MQU5HVUFHRSIgdmFsdWU9InNyIgotLT48IS0tI3NldCB2YXI9IkNIQVJBQ1RFUl9FTkNPRElORyIgdmFsdWU9IklTTy04ODU5LTUiCi0tPjwhLS0jc2V0IHZhcj0iVElUTEUiIHZhbHVlPSK91SDc3tPjINTQIN7R4NDU2Nwg19Dl4tXSISIKLS0+PCEtLSNpbmNsdWRlIHZpcnR1YWw9ImluY2x1ZGUvdG9wLmh0bWwiIC0tPgoKICAgIMHV4NLV4CDd1SDf3tTg1tDS0CDQ2ubY+OMg2t744yD41SDn2OLQ5yDX0OXi1dLQ3i4KCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLXNyLS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IHN2CkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEKQm9keTotLS0tLS0tLS0tc3YtLQo8IS0tI3NldCB2YXI9IkNPTlRFTlRfTEFOR1VBR0UiIHZhbHVlPSJzdiIKLS0+PCEtLSNzZXQgdmFyPSJUSVRMRSIgdmFsdWU9IkthbiBlaiB1dGYmb3VtbDtyYSBmJm91bWw7cmZyJmFyaW5nO2dhbiEiCi0tPjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL3RvcC5odG1sIiAtLT4KCiAgICBTZXJ2ZXJuIHN0Jm91bWw7ZGplciBpbnRlIGRlbiBoYW5kbGluZyBzb20gJm91bWw7bnNrYWRlcwogICAgYXYgd2ViYmwmYXVtbDtzYXJlbi4KCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLXN2LS0KCkNvbnRlbnQtbGFuZ3VhZ2U6IHRyCkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTkKQm9keTotLS0tLS0tLS0tdHItLQo8IS0tI3NldCB2YXI9IkNPTlRFTlRfTEFOR1VBR0UiIHZhbHVlPSJ0ciIKLS0+PCEtLSNzZXQgdmFyPSJDSEFSQUNURVJfRU5DT0RJTkciIHZhbHVlPSJJU08tODg1OS05IgotLT48IS0tI3NldCB2YXI9IlRJVExFIiB2YWx1ZT0iQ2Fubm90IHByb2Nlc3MgcmVxdWVzdCEiCi0tPjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL3RvcC5odG1sIiAtLT4KCiAgICBTdW51Y3UsIGdlemdpbiB0YXJhZiYjMzA1O25kYW4gdGFsZXAgZWRpbGVuIHn2bnRlbWkgZGVzdGVrbGVtaXlvci4KICAgCjwhLS0jaW5jbHVkZSB2aXJ0dWFsPSJpbmNsdWRlL2JvdHRvbS5odG1sIiAtLT4KLS0tLS0tLS0tLXRyLS0K